
Всем привет. Хотел бы поделиться с вами неким уроком-мэйкоффом по визуализации интерьера в Unreal Engine 4.
Почему тут, а не в уроках? Во первых это будет серия уроков. Эта тема своего рода блокнот, в котором я пишу этот урок. Отвечая на ваши вопросы или предложения я буду дополнять урок, где то более подробно расписывать, где то делать видео-вставки.
За основу решил взять интерьер, который лежит в свободном доступе. Вы можете скачать его по этой ссылке - http://www.mediafire.com/file/izw4ix4p739570k/Finale +bedroom+design.rar
Можете скачать и паралельно самим делать эту сцену.
Может это кому покажется минусом, но я работаю в Blender. Конечно же особой разницы, где работать нет. Все инструменты одинаковы. Никакими особыми плюшками блена я не пользуюсь в этом уроке.
Мой материал рассчитан на уверенных пользователей в 3Д моделинге, но которые хотят попробовать себя в реалтаймовой графике.
Начну.
Т.к. сцена идет в максовском формате, то мне все же приходится открывать макс и экспортировать оттуда геометрию. Делаю я это поэтапно. Первым этапом я всегда экспортирую коробку. Под коробкой я подразумеваю: стены, пол, потолок, карнизы, двери, окна, плинтуса, гипсокартон.
Вот такая у нас сцена и геометрия. Выбираю все элементы относящиеся к "коробке" и переношу в блен. Максонщики могут просто перенести в отдельный слой. Не поленитесь, это полезно


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


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

Далее немного моделинга

И мы получаем вот такую простую одностенную геометрию.

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

И этот же пол клонируем и делаем из него потолок.

Не забудьте вывернуть нормали. (Направление нормалей очень важно. Иначе в движке вы просто не увидите вывернутые полигоны)
Далее я делаю внешние стены. Это просто. Я обвожу по внешнему периметру с отступом геометрию или сплайны в случае макса. Потом экструдирую вверх, опускаю нижние ребра чуть ниже пола и закрываю верхние и нижние дырки полигонами.
Получается вот такая коробка

В этой коробке я делаю отверстия для окон ровно там, где окна в наших внутренних стенах.

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

Все, на этом этапе мы закончили со стенами, полами, потолком. Теперь приступим к их разверткам. Как вы можете знать нам понадобятся две развертки на разные каналы. Первая для текстур, вторая для запекания света. Развертки эти отличаются. Обычно для текстурных разверток я оставляю все, как было, но в данном случае мы перемоделили полностью стены и нужно заново их сделать. Я пользуюсь обычным Box - маппингом. Применяю его к нашим новым стенам.
Теперь развертка на второй канал. Выделяю внешние стены и назначаю автоматическую развертку аналогичную Smart UV - аналог Flatten mapping в максе.

Расстояние между шелами я делаю большое. Т.к. это внешние стены и мы их не будем видеть, то размер текселя в движке мы сделаем 128 пикселей, соответственно расстояние между шелами должно быть большое.
Для внутренних стен все тоже самое, но расстояние между шелами я делаю уже маленькое. Планирую сделать размер теселя в 1024 пикселя.

Готово. Далее приступим к остальным элементам коробки. У нас это: гипсокартонный потоолок, стена из камня, дверь, плинтус.

Обратите внимание, что гипсовый потолок вылазиет за наш потолок. Нужно от этого избавиться.

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


Теперь приступаю к подготовке стены. Геометрия тут впорядке. Но я решил разбить ее на две части. Это было сделано для оптимизации разверток. Выделили все вертикальные полигоны и сделал им детач (по максовски)

Процесс разверток для каменной стены идентичен нашим стенам.
У плинтуса я удалил полигоны, которые мы не видим.


Дверь я очень сильно оптимизировал. Изначально в ней было 37000 полигонов. Это не много, но очень не удобно для разверток.

После оптимизации кол-во полигонов стало около 4000. Что уже приемлемо.

Развертка света для двери. Тоже автоматом. (Совет максонщикам ставить в настройках flatten mapping'а - угол равным 66 градусам)

Ручку я сделал отдельным объектом. Вообще привыкнете разделять объекты по материалам. Это полезно.

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

Убрал галочку с автоматической генерации коллизий. Убрал галочку с автоматической развертки для света на втором канале. А так же убрал импорт текстур на всякий случай.
Переносим наши объекты на сцену. Выставляем положение в 0 по всем осям. На сцене оставляю прямой источник света, скайлайт, скайсферу, рефлекшн сферу. Остальное удаляю. На этом этапе я выставляю каждому объекту свое разрешение для лайтмапы. У меня это такие значения:
-Внутренние стены: 1024
-Внешние: 128
-Пол: 512
-Потолок: 256
-Дверь: 512
-Плинтус: 512

Вот так размещаю ReflectionSphere

Добавляю на сцену LightmassVolume. Делаю ему размеры чуть больше нашей комнаты. Это нужно для того, что бы все фотоны которые будут испускаться из нашего скайлайта притягивались только в область нашего LightmassVolume.Еще я добавляю PostProcessVolume. В нем я выключаю AO. И делаю экспозицию постоянной. Не забудьте про галочку Unbound в его настройках.

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

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


Особых косяков пока не вижу. А значит с текстурами и материалами их вообще не будет видно. Время запекания 3 минуты. Железо i7 7700 16 ram Надеюсь такая длинная простыня читаема) Задавайте вопросы и пишите предложения. Продолжение следует. Следующим этапом буду переносить крупную мебель. Спасибо