logo
Разрабокта расширения для игрового движка Unity

5.2 Источники освещения

Помимо окружающего света, в данной работе реализованы четыре типа источников освещения: Точечный источник (Point Light), Направленный источник (Directional Light), Spot Light и Area Light.

Все типы источников освещения имеют общие атрибуты, представленные в

Таблица 1.

Таблица 1

Общие атрибуты всех типов источников освещения

Имя атрибута

Тип

Значение по умолчанию

Модификатор доступа

Отображение в инспекторе

Color

Color

Color. white

public

Да

Intensity

float

1

public

Да

Cookie

Texture2D

null

public

Да

Type

float

1

protected

Нет

Shadow map

Render texture

null

public

Нет

Shadow shader

string

"ShadowTexture"

protected

Нет

Width

int

512

public

Нет

Height

int

512

public

Нет

Icon

string

"Light2D. png"

protected

Нет

Атрибут Color определяет цвет излучаемого света, Intensity - его интенсивность. Cookie представляет собой текстуру, используемую в качестве маски для освещаемой области. Эти атрибуты единственные из общих, доступные для модификации пользователем в редакторе.

Type задает тип источника в числовом виде, в последствии это значение передается в качестве четвертой координаты позиции источника в шейдер для определения, какая функция расчета освещения должна быть использована. Shadow map - специальная текстура, имеющая ширину Width и высоту Height. Она используется для построения непосредственно карты теней источника. Строка Shadow shader хранит названия шейдера, используемого для наложения тектуры тени. Icon задает название изображения, используемого данным источником в качестве иконки в окне редактора Unity.

Точно так же у каждого источника должна быть собственная реализация некоторых методов. ShadowMap () формирует карту теней. MeterialSettings () отвечает за передачу необходимых данных об источнике в шейдер объекта. Функция IsInsideArea () проверяет, попадает ли данный объект в зону, освещенную источником, и, соответственно, надо ли его обрабатывать. Данные атрибуты и методы составляют абстрактный класс LightSourceScript. Это позволяет добавлять новые типы источников, не меняя логику работы менеджера освещения.

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

Рассмотрим подробнее реализацию каждого типа источника.