Создание реалистичных объектов для игр класса ААА в Unreal Engine 5
Художник по 3D-пропеллерным объектам Шьямсагар С поделился подробным разбором проекта «Электрический генератор», объяснил, как была смоделирована и текстурирована модель, а также продемонстрировал процессы освещения и рендеринга в UE5.

Введение
В этой статье я расскажу об общем процессе создания изображения работающего электрического генератора, который хранится на улице, на земле, и повреждён из-за плохой погоды. Для создания проекта я использовал PureRef, Maya, Substance 3D Painter, Photoshop и Unreal Engine 5.
Планирование и график
Создание ассета планировалось на две недели. Здесь вы можете увидеть общую разбивку задач, выполненных за каждый день.

Сбор референсов
Создание ассета началось со сбора референсов в соответствии с заданием. После того как первичные референсы были определены, были собраны дополнительные сведения и референсы о размерах, свойствах материалов и т. д. PureRef весьма удобен для сбора и организации всех референсов, входных данных, разметки и т. д.
Настройка Maya и белый ящик
Поскольку Unreal Engine использует левостороннюю систему координат Z-up, в Maya ось установлена на Z-up, а единицы измерения в окне просмотра — в сантиметрах (в Windows > Setting/preferences). Затем в окне просмотра сбрасываются настройки по умолчанию.
Для масштаба используется средний рост человека (примерно 170 см). Затем создаётся белый ящик в соответствии с реальными размерами этого конкретного электрического генератора, то есть 52x33x46 см, и он служит ограничивающим ящиком, чтобы мы не вышли за пределы масштаба.

Настройка камер для базового сопоставления и блокировки
На этом этапе я использовал ручной подход к сопоставлению камер с несколькими изображениями с разных ракурсов, чтобы получить точность объёма и форм на уровне 80–90 %. Я не стремился к 100 % точности, так как не планировал делать цифровой двойник или проекцию текстуры. Однако я бы посоветовал, даже если это концепт-арт для одного изображения или реальная ссылка, полезно сделать быстрый подбор камеры и разместить все основные формы и объёмы, а затем уточнить их путём наблюдения.
- Сначала я выбрал лучшие изображения из собранных референсов, подготовил их в виде изображения размером 1k и сделал приблизительное выравнивание, наложив одно на другое в PS и сохранив по одному. Это помогает сохранить одинаковые соотношения сторон для всех изображений.
- Затем создаются все камеры с соответствующими именами и добавляются плоскости изображений. Для атрибутов плоскости изображения можно установить параметр отображения «Атрибуты плоскости изображения > просмотр через камеру», чтобы изображение было видно только для определённой камеры. Также можно увеличить «Размещение > Глубина», чтобы изображение располагалось за сеткой.
- Здесь я помечаю грани базовой сетки с помощью цветового кодирования, чтобы легко идентифицировать и сопоставить переднюю и заднюю части объекта в перспективе с соответствующими плоскостями изображения камеры. Например, здесь поверхность красного цвета — это передняя часть генератора (обращённая к оси X), зелёного — левая, а синего — верхняя.

- Затем белый ящик/серый ящик выравнивается для первоначального сопоставления камеры. Иногда приходится регулировать фокусное расстояние, чтобы получить хорошее совпадение, а стандартное фокусное расстояние в 35 мм не подойдёт. Если у нас нет всех свойств изображения, таких как фокусное расстояние и т. д., требуется некоторая догадка. Для этого полезно изучить, как выглядят фотографии при определённых фокусных расстояниях, потому что искажения затрудняют понимание формы и объёма ассета для лучшего сопоставления камеры. В сети есть много ресурсов, объясняющих эту тему. Вот два примера.

- Используется двухпанельный вид: один для перспективы, другой для камер. Всё моделирование выполняется в перспективном виде, а каждая камера настраивается с помощью инструментов камеры, таких как трек, тележка, вращение и т. д. Камеры переключаются и проверяются одновременно для достижения хорошего совпадения. Я бы посоветовал не блокировать камеру, пока почти все камеры не будут совпадать. Всегда полезно начать подбор с больших и простых форм, таких как коробка или цилиндр, а затем перейти к деталям.

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

- Сопоставление камеры блокировки.

Создание высокополигональной модели
Как только базовая модель будет готова, создание высокополигональной и низкополигональной моделей станет намного проще. Процесс сводится к тому, чтобы уточнить силуэт, объём, формы и детали с помощью хороших краевых петель. Также убедитесь, что высокополигональная модель подходит для запекания карт нормалей, учитывая углы, избегая острых краёв под углом 90 градусов, как свет отражается на гранях, рёбрах и т. д.
Этапы создания высокополигональной модели:
Соответствие финальной высокополигональной модели и высокополигональной модели камеры:
Создание низкополигональной модели
- Целевое количество треугольников для низкополигональной модели — 7000 три/3500 полигонов.
- Низкополигональная модель создаётся на основе начальной блокировки и высокополигональной модели путём удаления и добавления петель. Если с самого начала моделирования следовать хорошему потоку петель, этот процесс становится довольно простым. Я также следил за тем, чтобы баланс треугольников обеспечивал наилучший силуэт и формы.
- После завершения работы над низкополигональной моделью выполняется очистка сетки и сброс преобразования. Это помогает найти и очистить все n-гоны, ламинарные грани и т. д. и правильно установить центральную точку. Эта проверка качества также проводится для высокополигональной модели.
- Очистка с помощью инструмента очистки Maya.

- Сброс и заморозка преобразования.

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

Соответствие финальной низкополигональной модели и низкополигональной модели камеры, окончательный подсчёт треугольников — 6953:
Подготовка к запеканию UV
- UV-развёртка завершается с равномерным соотношением Texel. Мелкие объекты немного увеличиваются, например, гайки и болты и т. д. Здесь я использую подход с полной уникальной/атласной картой с альфа-каналом (альфа-тест/альфа-смешивание) для решёток. Я выбрал соотношение Texel 1k /м для проверки, и актив будет работать как для 2k, так и для 4k. Если требуется полностью оптимизированная карта, мы можем использовать половину актива, но это сделает его менее уникальным и придётся пойти на компромисс по многим факторам дизайна и плиткам текстуры.
- Проверка соотношения Texel с кубом 1k/м. Здесь мы получаем более 1k/м для текстуры 2k или 4k для генератора.
- Создаётся хорошо упакованная компоновка UV/остров.
- Окончательно определены группы сглаживания и все имена для подготовки к запеканию, чтобы запекать «по сетке по имени» в Substance 3D, чтобы избежать артефактов и растекания при запекании.
- В высокополигональной модели создаётся идентификатор материала для упрощения выбора маски. Текстурирование выполняется в Substance 3D Painter.

- Сетка экспортируется как .fbx и выполняется тест запекания с низким разрешением 512/1024 для поиска артефактов, а затем, если всё хорошо, запекается финальное 2k/4k.

- Низкополигональная модель импортируется в SP, проверяются импорт UV, материала и высокополигональной модели.

- Даже после всего этого наступает момент истины: артефакты при запекании! Вернитесь к модели, настройкам и т. д., найдите решение и выполните повторное запекание. Здесь, например, это было быстрое исправление с простым поворотом и увеличением разрешения и подвыборки.

Финальное запекание и запечённые карты:
Создание текстур и материалов
- Как только запекание будет готово, текстура строится от базового цвета, блокировки до окончательных деталей.
- Здесь я выбрал такой вид, который не слишком повреждён и заброшен, но всё же изношен, что может произойти из-за длительного использования и повреждений, вызванных природой и окружающими событиями. Для брендинга я следовал референсу.
- Слои Substance 3D Painter:

- Начальные и финальные проходы текстуры:
- Текстурные карты:
- Наконец, я проверил валидацию PBR для более качественных рендеров PBR. Всё зелёное — хорошо. Немного жёлтого — нормально. Старайтесь избегать красного и фиолетового, что может быть связано либо с тем, что ваша текстура слишком тёмная (высокие значения чёрного), либо слишком яркая (высокие значения белого).

- Iray рендер:

Интеграция и LookDev в UE5
- Создаётся пустой проект с включённой трассировкой лучей. Затем мы ждём компиляции шейдеров!
- Здесь мы будем использовать UE5 Lumen и тени трассировки лучей, а не виртуальные тени Lumen или запечённое освещение. Я изучил многие из этих техник, используемых в освещении, здесь на бесплатных ресурсах наставника Unreal Engine Уильяма Фоше.
- В настройках > Настройки проекта > Рендеринг я включил «Поддержка аппаратной трассировки лучей» и «Использовать аппаратную трассировку лучей, когда доступно». Обратите внимание, что это будет работать только если GPU поддерживает аппаратную трассировку лучей, например, RTX NVIDIA GPUs.
- Создаётся пустой уровень, и требуется несколько папок для организации всего содержимого, используемого в сцене.
- Все необходимые модели и текстуры импортированы. В основном, оставляйте настройки по умолчанию, здесь я решил импортировать материал, а также автоматически сгенерировать столкновения.
- Также создан простой мастер-материал, в который можно добавить Normal Map, чтобы начать работу над серым цветом.

- Создан экземпляр материала для фона, генератора и для отражения (Albedo V =0.9/Roughness 0.05) и матовых шаров (Albedo V =0.18/Roughness 0.4). Матовые шары и шары отражения помогут понять и контролировать экспозицию сцены.
- Модели добавлены в сцену, и для освещения добавлен ключевой свет с помощью "Rect Light". Этот свет похож на освещение с помощью софтбокса в реальном мире.
- Добавлены кинематографическая камера (Cine Camera Actor) и Sequencer. С помощью сеток наложения композиции можно настроить камеру. Для этого нужно выбрать свою кинокамеру и переключиться на кинематографический вид.
- Затем добавлен второй вид для работы над добавлением дополнительных источников света, Post-Process Volume и т. д. в перспективе или других ортогональных видах, а также для проверки обновлений в кинематографической камере.

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

- Добавлен HDRI-фон и перемещён вниз, чтобы он не пересекался без плоскости земли.
- Чтобы начать работу с нейтральным освещением, я импортировал "Tomoco_Studio" HDRI и настроил интенсивность и вращение. Вы можете найти множество бесплатных HDRI в интернете. Попробуйте использовать 2k и выше, чтобы получить хорошее качество.

- Добавлен Post Process Volume.
- Не имеет значения, где находится Post Process Volume, если вы включите настройки Post Process Volume>Infinite Extent(Unbound).
- Чтобы отключить автоматическую экспозицию сцены и получить лучший контроль над экспозицией, оставьте Metering Mode в режиме Manual и включите Apply Physical Camera.
- Теперь можно настроить компенсацию экспозиции, чтобы получить желаемую экспозицию без увеличения интенсивности света добавленных источников света.
- Добавлен том важности света и помещён туда, где мы хотим, чтобы свет рассчитывался. Это помогает процессу освещения происходить в пределах объёма массы света и избегает обработки всей сцены. Затем также добавлена сфера захвата отражений и построены отражения.
- Здесь мы используем трёхточечный свет. Все источники света настроены на перемещение.

- Ключевой свет (Intensity 1.2cd, Color-warm, Cast shadows — ON, Samples-2)
- Заполняющий свет (Intensity 0.6 cd, Color-Cold, Cast shadows — OFF, Samples-2)
- Задний свет (Intensity 0.5 cd, Color-White, Cast shadows — OFF, Samples-2)
- HDRI (Intensity 0.35). Экспозиция также настроена в Post Processing Volume. Примечание: это итеративный процесс, пока мы не получим желаемый результат. Также вы можете увеличить количество выборок Lumen в настройках Post Process Volume для получения чистых результатов в зависимости от производительности оборудования.
- Для более плавных теней, трассируемых лучами, с меньшей полосатостью включена опция "cast ray trace shadows".
- Чтобы сделать простой поворотный стол, щёлкните правой кнопкой мыши на sequencer и добавьте кинокамеру и модель-актёр.
- Затем установите начальный и конечный ключи для поворота на 360 градусов в Transform>Rotation>Yaw активатора объекта.
- Кривая выбрана в редакторе кривых в Sequencer и сделана с линейной интерполяцией.
- Кадры последовательности/кадров и скриншоты с высоким разрешением можно сделать с серой модели. Полезно сохранить настройки прогрева, чтобы сцена была готова перед захватом.
- Затем я приступил к созданию простого мастер-материала для текстурированной версии.
- Я внёс несколько незначительных изменений в шейдер и освещение, пока не был достигнут желаемый результат.

Надеюсь, все, кто читает это, получат ценную информацию. Вы можете найти все окончательные рендеры высокого качества здесь. Вы также можете найти меня на LinkedIn, Twitter и Instagram. Спасибо.
Shyamsagar S, 3D Artist
Автор: Shyamsagar S
Материал подготовлен на основе статьи 80.lv. Перевод — Skills Up.