трехмерные моторы TONY (PORCO@ARGENTINA.COM) Спецвыпуск: Хакер, номер #064, стр. 064-080-7 Теперь начинается самое интересное. На дорогу помещается кузов машины, к нему присоединяются четыре колеса и два направленных источника света — фары. Машина передвигается по дороге, вместе с ней передвигаются фары, то есть два источника света, поэтому для каждого кадра необходимо рассчитывать освещенность дороги и столба фарами, а также освещенность машины фонарем со столба. Прибавь к этому расчет тени от машины, которую она отбрасывает на дорогу от фонаря, расчет карты отражения: кузов лакированный, соответственно, в нем можно разглядеть дорогу и столб. Посмотрим, как происходит типичный цикл рендеринга такой сцены. Сначала проверяются все динамичные объекты. Для тех объектов, которые изменили свое положение на сцене, пересчитываются их мировые координаты. Далее вызывается один из алгоритмов отбрасывания невидимых объектов (BSP, Octree). Затем для материалов объектов сцены, подвергаемых рендерингу, устанавливаются шейдерные константы для источников света, различных матриц преобразования. И только после этого графический процессор начинает обработку видимой геометрии. Меши, модели и их материалы Мы плавно перешли к понятиям моделей и мешей. Изображение, которое ты видишь на экране, составлено из кучи полигонов (треугольников), они и образуют единые и неделимые наборы геометрии — меши. Например, кузов автомобиля и его колеса — это различные меши. Вместе они составляют модель автомобиля. Почему именно так, а не иначе? Предполагается, что в игре нельзя разбить кузов автомобиля, нельзя разрезать и разделить его на составные части, которые перемещались бы относительно друг друга. Колеса же могут перемещаться (например изменять свою ориентацию относительно двух осей), поэтому они реализованы в модели автомобиля как составные части. Каждый меш обладает своим материалом — способом отображения геометрических данных на экране. Материал — это совокупность нескольких текстур, различных состояний графического конвейера, а также вершинная и фрагментная программы (шейдеры). Игровые объекты разбиваются на меши и модели исходя из соображений моделирования физики и логики игрового мира, а также способности графического конвейера отрендерить картинку. Конечно, хотелось бы иметь возможность оперировать десятками тысяч игровых объектов, взрывать стены и изменять земной ландшафт ковровыми бомбардировками, но современные графические технологии пока не позволяют реализовать все это в реальном времени. Пока все, на что мы способны, — это моделировать поведение сотни моделей, взаимодействующих друг с другом, и отображать со значительной аппроксимацией картинку. Так вот интересность геймплея достигается за счет таланта и работы дизайнеров и художников. В любой современной игре геометрия занимает наибольшее место в памяти. Для повышения скорости загрузки мешей их геометрия сохраняется в бинарных форматах, часто уникальных для каждого движка. Материалы же, напротив, часто хранятся в виде сценариев, причем дифференцируются следующим образом: отдельно хранятся шейдеры и состояния конвейера (например, в *.fx-файлах), отдельно — наборы текстур и цветов. В код движка их обычно не встраивают, чтобы оставалась возможность вмешаться оперативно и без перекомпиляции самого движка. На рисунке «Сценарий материала» ты можешь увидеть кусок сценария, описывающий материал стекла транспорта из Quake 4. |