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 (), который идентичен у всех источников освещения. Он позволяет отобразить в окне редактора какую-либо графическую информацию о данном источнике. Так как интерфейс настройки атрибутов источников освещения реализуется в отдельных скриптах, здесь формируется только то, что не зависит от конкретного экземпляра класса. В данном методе реализуется только отображение соответствующей иконки в окне редактора на месте расположения источника.
Рассмотрим подробнее реализацию каждого типа источника.
- Введение
- 1. Актуальность работы
- 2. Цели и задачи работы
- 3. Обзор аналогов
- 3.1 2D Light System
- 3.2 2D Dynamic Lights and Shadows
- 3.3 Light2D - GPU Lighting System
- 3.4 Light2D
- 3.5 2DVLS (2D Volumetric Lights and Shadows)
- 3.6 Seasons After Fall Rendering System
- 3.7 Игровой движок Ethanon 2D
- 3.8 Система освещения Unity
- 4. Компоненты разрабатываемой системы
- 4.1 Планы
- 4.2 Объекты
- 4.3 Источники света
- 4.3.1 Ambient Light
- 4.3.2 Directional Light
- 4.3.3 Point Light
- 4.3.4 Spot Light
- 4.3.5 Area Light
- 4.3.6 Emissive Objects
- 4.4 Система расчета теней
- 4.4.1 Расчет внешних теней
- 4.4.1.1 Метод трассировки лучей
- 4.4.2 Форма теней
- 4.4.3 Внутреннее освещение
- 4.5 Запекание света
- 4.6 Менеджер освещения
- 4.7 Графический интерфейс
- 4.8 Документация
- 5. Реализация системы в Unity
- 5.1 Реализация объектов
- 5.2 Источники освещения
- 5.2.1 Ambient Light
- 5.2.2 Point Light
- 5.2.2.1 ShadowMap
- 1. Определение, находится ли источник внутри объекта
- 2. Поиск базовых и вспомогательных точек
- 5.2.2.1.2 Поиск базовых и вспомогательных точек
- 5.2.2.1.3 Поиск крайних точек
- 5. Поиск корректирующих коэффициентов для задания UV координат
- 5.2.2.1.5 Поиск корректирующих коэффициентов для задания UV координат
- 5.2.2.1.6 Поиск "точек привязки"
- 5.2.2.1.7 Наложение текстуры тени