Техника запекания света. #23

unity    2019-06-16 14:39:58     тег: освещение

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

В прошлом видео я рассматривал оптимизацию освещения в реальном времени используя приоритеты Important (попиксельное освещение) и Not Important (освещение вершин полигонов). 

Теперь мы поговорим о запекании освещения. Рассмотрим запекание обычных источников света, эмиссионного света и компонента Light Probe.

Стандартные источники света имеют два режима запекания Mixed и Baked.

Режим Mixed освещает как динамические объекты так и статичные. Режиме Baked освещает только статичные объекты.

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

Точно также работает и запеченное освещение в Unity, когда свет запечен в карту света, сцена напоминает фотографию, и мы не можем изменить освещение, а также не может двигать статические объекты. 

Статичные объекты это те объекты у которых установлен флаг static.

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

Представляет оно собой текстурную карту, которая накладывается поверх всех объектов на сцене, создавая иллюзию освещения.

Запекать вы можете любой источник света, будь-то Directional Light, Point Light или Spot Light. 

Давайте приступим и что-нибудь запечем.

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

На сцене я создал коробку которая поможет нам увидеть нюансы запекания. 

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

Так вот, мы запечем так чтобы было видно не только прямое освещение, но и не прямое. 

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

Всё дело в том, что непрямое освещение видно только при использовании запеченного освещения. 

Ещё один момент который стоит знать, это то, что в Unity только статичные объекты у которых стоит флаг static, могут быть запечены в карту света. 

Чтобы сделать объект статичным, необходимо у него установить флаг static. 

Давайте его установим для нашей коробки. Устанавливая данный флаг для родительского объекта, Unity спросит хотим ли мы применить изменения ко вложенным объектам, мы соглашаемся и нажимаем Yes. 

После чего сразу начнется процесс запекания. Этот процесс виден в нижнем правом углу. 

По окончании запекания, если приблизить и рассмотреть сферу, то можно увидеть, что теперь она получила непрямое освещение от стен и имеет на своей поверхности отражение от красной, зеленой и синей стены. 

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

Сейчас часть освещения запеклось в карту, и это дает прирост производительности, при том, что качество получается не хуже чем при динамическом освещении.

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

Запеченную карту света вы можете представить как второй слой текстуры наложенной поверх всех статических объектов.

Выберите компонент Mesh Renderer любой стены, в его свойстве Lightmaps вы можете увидеть запеченную карта света, также ее можно посмотреть на вкладке Lighting в разделе Baked Lightmap.

Также здесь можно увидеть и другие карты и даже UV развертку.

Необходимо знать, что статические объекты во время выполнения приложения невозможно перемещать и трансформировать. 

Да это и понятно, так как если произойдет изменение объектов на сцене, то текстурная карта будет наложена не правильно. 

Наше запекание произошло автоматически, так как на вкладке Lighting включено автоматическое запекание. В Unity эта опция включена по умолчанию. 

Теперь рассмотрим режим Baked. 

В этом режиме свет запекается в текстурную карту а динамические объекты не освещаются. 

Перейдем на вкладку Lighting на которой отключим автоматическое запекание. Также очистим кэш от предыдущего запекания. 
Выберем компонент Directional Light и переключим его в режим Baked. 

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

Также видно непрямое освещение на сфере, в виде цветных оттенков полученное от стен.

 Линии которые вы видите на сфере, это границы UV развертки, чем качество ее лучше, тем меньше вот таких границ. UV развертка это карта по которой накладывается текстура на 3d объект.

Emission
Теперь мы рассмотрим еще один вариант освещения - освещение материалом или эмиссионное освещение.

Добавим новый 3D объект - цилиндр, установим у него свойство static и создадим для него новый материал, который назовем emiss. 

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

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

Сейчас я включу готовую модель меча с пульсирующим освещением.

Light Probe

Рассмотрим ещё один метод освещения это Light Probe. Мы с вами только что видели как сфера принимает оттенки от окружающих цветных стен, но это работает только для статических объектов, для динамических как раз и сделан компонент Light Probe. 

Когда ваш персонаж передвигается по сцене он должен органично вписываться в окружающую обстановку. 

Под органичночностью понимается, например когда, персонаж идет по заснеженному лабиринту он получает холодные оттенки от заснеженных скал, или наоборот если идёт по пустыне, и получает оттенки жёлтого. 

Light Probe позволяет передать оттенки окружения динамическом объекту. 

Пусть эта сфера будет выступать в качестве динамического персонажа который должен получать освещение от окружения. А в качестве окружения выступает это желтый цилиндр с эмиссионным светом.  

Давайте добавим Light Probe из меню GameObject - Light - Light Probe Group. Появится объект состоящий из 8 зондов, зондами называются желтые сферы, которые можно перемещать. 

Если эти зонды расставить по сцене, они образуют своеобразную карту освещенности всей сцены. 

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

Первое, что необходимо сделать это создать общие границы наподобие комнаты в рамках которых, остальные зонды будут взаимодействовать с динамическими объектами внутри родительского Light Probe.

Приблизим камеру к сфере, и видим, что она все равно не получает освещение, хоть и стоит рядом с источником света. 

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

Чтобы сделать акцент на тех объектах от которых нам надо получить освещение, надо вокруг них добавить еще несколько зондов. 

Выделить зонд можно при помощи левой кнопки мыши удерживая клавишу Ctrl. Чтобы сделать копию зонда нажмите кнопку Duplicate Selected или нажмите клавиши Ctrl+D, после чего их можно перемещать используя гизмо перемещения, нажав клавишу W.

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

Зонды следует расставлять там, где вы желаете производить выборку света или темноты. Чтобы разбиение пространства работало правильно, зонды должны образовывать объём в сцене.

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

Надеюсь, что посмотрев данное видео у вас теперь есть представление, что такое запеченное освещение в Unity. 

На этом все, подписывайтесь на канал. Пока.