вторник, 6 марта 2012 г.

Практическое применение XNA. Часть 6.

1.  Что же такое “3D” игра?

D” - сокращенно от английского “ dimension”, что в переводе означает – измерение. Соответственно “3D” – это игра в трех измерениях. Имеется ввиду высота, ширина и глубина сцены. Каждый, кто хотя – бы раз играл в 3D игру наверняка заметил, что в отличии от 2D игр (примеры были рассмотрены в первых главах), главный герой может перемещаться не только вверх или вниз, влево или вправо, но еще вперед и назад. К тому – же обзор игрового мира производится во всех направлениях. Можно обойти вокруг любого объекта, и рассмотреть его со всех сторон, или наоборот побывать внутри чего – либо и увидеть объект изнутри. Сразу оговорюсь, что создание полноценной 3D игры - задача довольно нетривиальная, и варианты решения определенных задач могут быть неоднозначными. Но это и дает в некотором роде свободу для программиста, появляется возможность поэкспериментировать с алгоритмами, всевозможными идеями и их реализациями. И никто вам этого не запретит.


 2. Из чего состоят 3D игры.
Все трехмерные игры, так или иначе, используют 3D модели. Это могут быть заранее изготовленные модели объектов или сгенерированные непосредственно из кода какие либо примитивы. Модель представляет собой файл, текстовый или бинарный, и имеет своё расширение, например model.x (это стандарт разработанный в компании Microsoft, на данный момент является бесплатным), о нем мы поговорим чуть позже. Или например model.fbx или model.max (это стандарты разработанные компанией Autodesk). В мире еще существует великое множество стандартов, но мы пока остановимся на этих двух. Вообще модель, в отличии от примитива, может иметь очень сложную форму. А создаются они в специальных студиях, генераторах или каких либо других программах. Одной из лучших в этом направлении является программа Autodesk 3DS MAX или MAYA, хотя это дело вашего вкуса, либо вкуса вашего художника по созданию 3D моделей, если таковой имеется. В любом случае вы будете использовать уже готовые модели. Помимо формы внутренние данные модели хранят много других данных, таких как ключи анимации, если модель анимированная, информацию о текстурировании (раскраске), данные о нормалях и эффектах, костях и многое другое. Эти данные в последующих главах будут нами использоваться по полной программе. Помимо моделей все игры используют эффекты или правильнее будет сказать шейдеры. Это такие микропрограммы, которые выполняет процессор видеокарты. Именно они отвечают за вывод изображения на экран в таком виде, в каком вы их видите. Например, четыре варианта изображения одной и той же сцены, которые, благодаря шейдерам, сильно отличаются друг от друга.


Но о шейдерах и высокоуровневом языке программирования шейдеров (High Level Shader Language или сокращенно HLSL) мы поговорим в последующих главах. Еще при создании своих игр вам придется создавать игровой мир, унаследованный от мира в котором живем мы с вами, а значит и все стихии присущие нашему миру, такие как земля, вода, воздух (небо), огонь, имитация погоды. Какие-то объекты будут неподвижны, а какие-то весьма динамичные, например поверхность воды. Поэтому вам придется прибегнуть к динамическому созданию формы объекта, и фиксированной моделью вы уже не обойдетесь. Здесь пригодится комплексный подход, с использованием и шейдеров, и динамической генерации волн как на рисунке ниже.



Наверняка многие слышали о неких “игровых движках”, на основе которых создаются, чуть ли не все современные игры. В общих чертах “движок” действительно ускоряет процесс написания игры. И цель нашей книги в конечном итоге написать не только свой игровой движок, но и игру на его основе. Вообще “движок” должен уметь работать как с графикой, так и со звуком, и с физикой, и обрабатывать команды, поступающие с устройств ввода  (клавиатура, джойстик, руль и т.д.). Графикой или, правильней будет сказать, рендерингом - занимается “графический движок” или” рендер ”. Это та часть кода, класс или еще какой либо модуль, который отвечает за вывод изображения на экран, основываясь на игровых данных, учитывая параметры освещения, затенения, постобработки и т.д. Он является наиболее важным в игре, так как по внешнему виду, по реалистичности картинки на экране, судят игру если не все, то очень многие, и от этого напрямую зависит успех игры. Вот, к примеру, скриншот из игры STALKER, написанной на движке X-RAY.


Под названием “физический движок” подразумевается модуль, который определяет поведение определенных объектов, имитируя физические процессы, происходящие в нашей жизни. Это всевозможные столкновения и отскоки объектов, реализация трения, качения, упругости, твердости. Имитация разрушений при взрывах, инерция автомобилей, колебания тканей на ветру и многое другое. Вся физика игры, обычно, обрабатывается в параллельных потоках, так как процесс обработки данных может быть весьма ресурсоемким, это позволяет избежать ” залипаний ” игры на определенные промежутки времени. На данный момент известно достаточно много физических движков как коммерческих, так и бесплатных. И многие игровые компании успешно используют уже готовые физические библиотеки. Конечно – же, никто не запрещает вам написать свой обработчик для физики. Задача это интересная, и мы к ней обязательно еще вернемся. Вот пример использования библиотек Nvidia  PhysX.



Звуковой движок дает нам имитацию объемного звучания. Некоторые источники звуков игрового мира находятся от нас дальше, другие ближе. По мере передвижения внутри игры мы меняем местоположение главного героя, относительно звуковых источников. А это в свою очередь ведет к изменению громкости, панорамы, баланса каждого звучащего объекта. А если учесть, что звук еще изменяется в зависимости от скорости, вспомним пролетающий мимо гоночный автомобиль, или в зависимости от окружения, например вы очутились высоко в горах или внутри металлической бочки. Это уже изменения параметров реверберации или отражения звуковых колебаний. Важно отметить, что при решении описанных выше задач, нужно создать визуально похожую имитацию процессов из нашей жизни, а не программу которая с невероятной точностью рассчитает вам поведение ,к примеру, столкнувшихся между собой танка и самолета. Мы же не пишем программу испытания прочности фюзеляжа военного истребителя, с учетом всех коэффициентов деформации. Для этого потребуется немало вычислений и времени. Поэтому необходимо будет искать компромисс между производительностью и “качеством” результата. Ну и самый интересный модуль – это геймплей. Именно он выполняет так называемый сценарий игры, и отвечает за всю игровую логику, и за все, что будет происходить с вами или вашим героем в игре.

Комментариев нет:

Отправить комментарий

Physically Based Rendering