Освещение для архитектурной визуализации в UE4.18 для VR
Меня зовут Анастасия Мякинина, я участница команды Unreal Estate. Мы разрабатываем виртуальные шоурумы для недвижимости. В этой статье я расскажу, как мы настраиваем освещение в наших проектах.
Подготовка сцены
Сначала настраиваем Light Map Resolution всех объектов на сцене. Для игр обычно разрешение Light Map оставляют синего или увеличивают до зеленого цвета (если смотреть в режиме Lightmap Density). Но нам придется делать максимально большую Light Map, так как мы будем использовать только статический свет. Например, для комнаты я ставлю разрешение Light Map от 1024 до 2048, для стола — 512–1024. Если разрешение недостаточное, появляются "пиксельные" тени, а нам этого не надо. Самое главное — найти баланс между хорошим результатом и не перегруженной билдатой. Лучше избегать размера билдаты больше 512 Мб, иначе могут быть проблемы с компилированием экзешника.
Размещаем на сцене Box Reflections, Lightmass Portals, Lightmass Importance Volume.
Box Reflections ставим в каждую комнату по ее размеру, чтобы получить отражения на полу и металлических объектах. Planar Reflection мы используем только на зеркалах, которые выносим в свой уровень и подгружаем потом через Level Streaming Volume, так как это сильно влияет на FPS. А в VR самое главное — стабильные 90 FPS!
Lightmass Portals ставим на окнах и дверях. Portals увеличивают время билда, поэтому их можно ставить только в затемненных местах, чтобы увеличить количество света.
Lightmass Importance Volume делаем максимально большим, чтобы он не пересекался с внешней оболочкой, иначе могут быть засветы на Movable объектах. Здесь главное экспериментировать с размером самого Importance Volume и количеством Volumetric Lightmap Detail Cell size. Мы используем значение Lightmap Detail Cell size в диапазоне от 25–50 — большее количество может давать грубые переходы в черный, меньшее — дает эффект помятости.
Иногда есть проблемы с тем, что появляются проплешины (leaks) при построении Cells, тогда можно изменить в файле BaseLightmass.ini параметр MinBrickError=0.
Проверьте свои материалы в моде Shader Complexity. Если есть материалы светло-розового цвета — исправьте их.
Освещение
Ставим сферу с материалом неба. Размер сферы приблизительно R=15000м. Материал делаем Unlit.
Ставим на сцену SkyLight, делаем его Static. Отключаем в нем галочку Lower Hemisphere. Не забудьте настроить Sky Distance Treshhold, если его значение будет слишком большим, а внешняя сфера слишком маленькая, свет от SkyLight будет считаться некорректно, и вся сцена будет черной. Intensity оставляем единичку.
Ставим Post Process Volume. Отключаем Ambient Occlusion — он влияет на FPS, так как SSAO строится поверх изображения. Тонкие тени мы будем делать через настройки Lightmass. Настраиваем экспозицию. Все остальное я меняю по желанию после билда света, в основном это баланс белого и контраст.
Расставляем локальные источники света. Все светильники — статичные! Для большей реалистичности можно использовать значения температуры, как у реальных лампочек. 2700 Кельвинов — теплый белый, 4000 Кельвинов — прохладный белый.
DirectionalLight — в этой квартире мы решили не ставить солнце, чтобы получить более естественное для нашего климата освещение :) От SkyLight получается ровный рассеянный свет, что соответствует зимнему виду из окна. Но я оставлю ниже настройки солнца, которые обычно использую.
Lightmass Settings
- Static Lighting Level Scale. Этот параметр делает красивые собственные тени, но из-за него могут вылезти артефакты. Мы используем значение 0,2–0,3. Важно помнить, что чем значение ближе к 0, тем большее время занимает билд. Если хотите все супер красивое, используйте значение 0,1, но тогда билд займет больше времени, также нужно увеличить значение Indirect Lighting Quality.
- Indirect and Sky Lighting Bounces — мы ставим по 10 отскоков. Мне кажется, это оптимальное минимальное значение. Можно сделать Indirect Bounces = 100 и Sky Bounces = 15, но я не вижу значительной разницы между 100 и 10. Долго считаются только первые 3 отскока.
- Indirect Lighting Quality — мы используем значение 10, оно дает всегда хороший результат. Вообще считается, что перемноженные значения Static Lighting Level Scale и Indirect Lighting Quality должны равняться 1, я советую, по крайней мере, не использовать значения меньше.
- Indirect Lighting Smoothness. Можно не менять этот параметр, значение 0,75 делает картинку более четкой.
- Отключаем Use Ambient Occlusion. Отключаем галочку Compress Lightmass — это сильно увеличивает время билда, но зато не будет никакого песка на стенах.
Итог
Все дверцы на кухонных шкафчиках — Movable. Свет посчитался достаточно ровно, есть небольшой градиент на белых дверцах, но так всегда происходит с белым цветом, по возможности лучше использовать более темные тона.
Кстати, обратите внимание на стол и тени от тарелок. Тени размытые, тарелки как будто левитируют. Это вышло из-за того, что у этого стола неправильная UV-развертка и к тому же недостаточно большой Light Map Resolution — 64. На первое время можно просто увеличить Light Map Resolution до 512, однако это все равно не даст хорошего результата. Развертка где-то пережата, где-то растянута, и плотность не будет равномерной, что может привести к артефактам. О том как правильно подготовить 3D-контент я напишу в следующей статье.
Дополнительная информация
Про подготовку сцены:
Курс от разработчиков UE4 (на английском языке)
Про освещение:
Советую посмотреть на ютубе Unreal Lighting Academy. Канал ведет Senior Lighting Artist Dice Tilmann Milde, который отвечает за освещение в Battlefront. Очень полезные видео, но на английском и длительностью больше часа.
Еще советую почитать эту ветку на форуме Unreal.