Обзор освещения

При использовании освещения Direct3D вы позволяете Direct3D обрабатывать подробную реализацию освещения за вас. Опытные пользователи могут при необходимости заниматься освещением самостоятельно.

При включении освещения Direct3D рассчитывает цвет каждой вершины объекта на основе сочетания следующих факторов.

  • Тексели в связанном сопоставлении текстур.
  • Диффузные и отраженные цвета на вершине, если они заданы.
  • Цвет и интенсивность света, производимого источниками света в сцене, или уровень фонового освещения сцены.

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

Для отрисовки сцены источники света не требуются, но компоненты в сцене без освещения не видны. В лучшем случае отрисовка неосвещенной сцены приведет к отображению силуэтов объектов сцены. Такой уровень детализации недостаточен для большинства целей.

Прямое и фоновое освещение

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

Прямое освещение попадает непосредственно на объект. Прямое освещение всегда имеет направление и цвет, и это является важным фактором для алгоритмов заливки, например для заливки Гуро. Различные типы источников света испускают прямой свет различными способами, создавая особые эффекты угасания.

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

Цвет фонового освещения принимает форму значения RGBA, где каждый компонент является целым числом от 0 до 255. Это отличает его от большинства значений цвета в Direct3D.

Красный, зеленый и синий компоненты сочетаются и создают окончательный цвет фонового освещения. Альфа-компонент определяет прозрачность цвета. При использовании аппаратного ускорения или эмуляции RGB альфа-компонент игнорируется.

Модель освещения Direct3D и естественное освещение

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

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

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

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

Фоновое освещение в Direct3D, как и в природе, не имеет направления или источника, а имеет лишь цвет и интенсивность. На самом деле уровень фонового освещения совершенно независим от каких-либо объектов сцены, испускающих свет. Фоновое освещение не влияет на зеркальное отражение.

Прямой свет — это свет, созданный каким-либо источником в сцене, он всегда имеет цвет и интенсивность, а также распространяется в заданном направлении. Прямой свет взаимодействует с материалом поверхности и создает блики, а его направление используется в качестве коэффициента для алгоритмов заливки, включая заливку Гуро. При отражении прямого света он не влияет на уровень фонового освещения в сцене. Источники в сцене, создающие прямой свет, имеют различные характеристики, которые влияют на то, как они освещают сцену.

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

Значения цвета для источников света и материалов

Direct3D описывает цвет с помощью четырех компонентов (красного, зеленого, синего и альфа-канала), которые в сочетании определяют окончательный цвет. Каждый компонент принимает значение в диапазоне от 0,0 до 1,0. Несмотря на то что для описания цвета источников света и материалов используется одна и та же конструкция, значения у этих двух видов объектов используются немного по-разному.

Значения цвета для источников света определяют количество излучаемого им света. Поскольку для источников света не используется альфа-компонент, для них имеют значение только красный, зеленый и синий компоненты цвета. Эти три компонента можно представить как линзы красного, зеленого и синего цвета на проекторе. Каждую линзу можно снять (значение 0,0 для соответствующего члена), также ее интенсивность может быть максимально яркой (значение 1,0) либо иметь значение где-то между двумя этими пределами.

Цвета, проходящие через линзы, сочетаются и образуют окончательный цвет освещения. Сочетание R(1,0), G(1,0), B(1,0) создает белый свет, тогда как сочетание B(0,0), R(0,0), G(0.0) не производит света вообще. Вы можете сделать источник света, излучающий только один компонент, что приведет к образованию чисто красного, зеленого или синего освещения; также можно использовать сочетания компонентов, чтобы образовать такие цвета, как, например, желтый или сиреневый. Вы можете даже задать отрицательное значение цвета для создания «темного света», который на самом деле ослабляет освещение в сцене. Также можно задать компонентам значение больше 1,0 для создания очень яркого света.

С другой стороны, у материалов значения цвета определяют, насколько интенсивно световой компонент отражается от поверхности, которая отрисовывается с использованием этого материала. Материал, цветовые компоненты которого имеют значения R(1,0), G(1,0), B(1,0), A(1,0), отражает весь попадающий на него свет. В свою очередь материал со значениями R(0,0), G(1,0), B(0,0), A(1,0) отражает весь попадающий на него зеленый свет. Материалы имеют несколько значений отражающей способности для создания различных эффектов.

См. разделы Типы освещения и Свойства освещения.

Источники света и материалы