Введение в программирование трехмерных игр с DX9

       

Визуализация освещенного прожектором



Рисунок 18.1. Визуализация освещенного прожектором ящика с использованием мультитекстурирования. Здесь мы комбинируем две текстуры, перемножая их соответствующие тексели

ПРИМЕЧАНИЕ

Как и в примере смешивания из главы 7, получаемое в результате изображение зависит от того, как именно смешиваются текстуры. В фиксированных функциях этапа мультитекстурирования формула смешивания задавалась с помощью относящихся к текстурированию режимов визуализации. В пиксельных шейдерах мы пишем функцию смешивания в коде шейдера в виде простого математического выражения. Второй подход позволяет выполнять смешивание текстур любым желаемым способом. Мы более подробно поговорми о смешивании текстур, когда будем обсуждать в этой главе пример приложения.

Смешивание текстур (в данном примере двух) для освещения ящика имеет два преимущества по сравнению с использованием модели освещения Direct3D:

Освещение заранее вычисляется в карте освещения прожектора. Следовательно, во время выполнения освещение рассчитывать не нужно, что экономит время процессора. Конечно же, заранее можно вычислить освещение только для статических объектов и статических источников света.

Поскольку карты освещения вычисляются заранее, мы можем использовать более точные и сложные модели освещения, чем модель Direct3D. (Чем лучше результат освещения, тем реалистичнее выглядит сцена.)

ПРИМЕЧАНИЕ

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

ПРИМЕЧАНИЕ

Карта освещения прожектора — это простейший тривиальный пример карты освещения. Обычно используются специальные программы, генерирующие карты освещения на основе сцены и источников света. Генерация карт освещения выходит за рамки этой книги. Интересующихся читателей мы отсылаем к описанию карт освещения в книге Алана Ватта и Фабио Поликарпо «3D Games: Real-time Rendering and Software Technology».

Содержание раздела