Космическая пивоварня: приёмы для материалов в Unreal Engine

Личный проект художницы по окружению из Crystal Dynamics.

Николь Горни (Nicole Gorny), сотрудница студии Crystal Dynamics (Tomb Raider, Legacy of Kain), написала статью для портала 80.lv, в которой объяснила, как работает с материалами в сценах.

DTF публикует перевод материала.

Я училась на отделении компьютерной анимации флоридского университета Full Sail и специализировалась на работе с тенями и освещением. Долгое время мне не доводилось поучаствовать в разработке игр. Однажды моей маленькой студии, снимающей короткометражные фильмы, пришлось переключиться на поддержку игры, и я ещё ни разу об этом не пожалела. С тех пор и до недавнего времени я работала в Simulation, где делала армейские игры-тренажёры на Unreal Engine 4. А теперь тружусь в Crystal Dynamics.

Космическая пивоварня

Идея сцены принадлежит прекрасному художнику Мину Нгуэну (Min Nguen). Мне нужен был новый проект, чтобы проверить, как с помощью RGB-каналов определять положение тайлинговых материалов. Так можно имитировать повреждения граней и добавлять грязь и пыль без ущерба для детализации при приближении к ассету.

Я хотела проверить, как в сгенерированных картах соотносятся эффективность и качество. По сути, я могу использовать четыре маски для каждой текстуры (пятая — чёрная основа). Канал Blue может быть сгенерированной картой кривых (Curvature map), с помощью которой создаются царапины на краях объекта. Альфа-канал — карта окклюзии (ambient occlusion) для пыли и грязи.

Карты генерировались в Substance Designer или Painter. Канал Black — базовый материал, а Red и Green — его вариации. Я также хотела попробовать использовать сплайны для создания проводов и труб.

Продакшн

Поскольку нужно было пробовать новые подходы к работе, я выбрала привычный Unreal Engine, в котором хорошо знаю редактор материалов. Именно в нём предстояло действовать методом проб и ошибок.

Обычно я начинаю проект с блокирования (blockout) примитивными формами — так можно быстрее переходить к дальнейшим итерациям. Уровень всегда проверяется на соответствие размеру персонажей, к тому же параллельно можно тестировать освещение и немного «играть» с камерами.

До того, как создавать ассеты, я попыталась понять, что нужно добавить в левую часть сцены, в которой должна была расположиться лаборатория. Уже после блокирования я начала делать более завершённые модели. Я также собралась настроить базовые материалы, чтобы протестировать RGB-маски и воду.

Ассеты

Если честно, до этого проекта мне ни разу не приходилось делать и «запекать» высокополигональные модели. Меня этому учили, но в работе я эти навыки не использовала. Так что я напряжённо вспоминала, как работать в ZBrush и оперировать булевыми операциями (booleans) в Maya — предстояло долго рисовать твёрдые поверхностей. В итоге около 80% высокополигонального моделирования делалось в Maya с булевыми операциями. Затем ассет дорабатывался в ZBrush — генерировался с помощью DynaMesh в высоком разрешении. Потом оставалось только перепроецировать детали по необходимости.

В Zbrush делалось большинство мелких элементов вроде проводов или винтов. Они были отдельными частями — так проще запекать их с помощью функции «bake by mesh name» в Substance. В итоге больше всего я занималась блокированием, чуть меньше — высокополигональным моделированием, а низкополигональное почти не использовала.

Растительность

​Вся флора сделана в Speedtree. Я хотела попрактиковаться в создании твёрдых поверхностей и применении RGB-масок, так что просто использовала деревья-болванки, слегка изменив их для сцены.

Материалы

Матералы должны были отлично выглядеть вблизи — они тайловые, и текстуры неточно соответствовали каждому ассету. Я хотела попрактиковаться в создании материалов с нуля в Substance Designer. Одной из главных проблем стало то, что одна функция «Материал» поддерживала только 12 текстур в качестве источника.

Кажется, что этого достаточно, но предположим, у вас есть 5 функций. Нержавеющая сталь, чёрная резина, окрашенный металл, поцарапанный металл и грязь. У каждого из них свои карты альбедо, шероховатостей и нормалей. Вы подключаете всё это в материал с как минимум одной текстурой RGBA-маски (иногда быстро появляется и вторая). В итоге я «упаковывала» альбедо, шероховатости и нормали в один из тайловых материалов. Так что они занимали одну текстуру вместо трёх. На этом примере я разбила маску, AO и искривление на разные карты, чтобы получились более понятные графики.

RGB-каналы используются для «маскировки» функции материала.

Каждый канал — просто чёрно-белая маска. Всё с припиской «_MF» — это тайловые материалы. Для проекта я сделала небольшую библиотеку — так проще визуализировать каналы

Вот примерно то же самое, но с более широкими возможностями контроля. У автоматически сгенерированных AO и Curvature есть проблема — они слишком ровные. Так что я создала несколько общих текстур царапин, пятен и запылений, а затем упаковала в RGB-каналы, чтобы выбирать тот, который посчитаю нужным.

Добавить маске вариативности можно было, использовав функции Multiply, Add или AO/Curvature в альфа-канале линейной интерполяции (Lerp).

Звучит запутанно, понимаю. Начнём с Curvature — красного канала кривизны/окклюзии. Иногда карта покрывает слишком большую зону, а с помощью SCurve можно это контролировать — примерно также, как «уровни» в Photoshop.

На верхний слой добавляется множество царапин или грязи, и Curvature становится разнообразнее. Красный канал первой маски инвертирован и размножен на верхнем уровне, чтобы исключить повреждения граней. Всё это составляет альфа-канал, используемый для царапин на гранях. Доводить работу до ума и добавлять детали можно в Photoshop или Substance. Но в этом проекте я не хотела распыляться — всё должно было быть сделано в Unreal.

Вот библиотека использованных в сцене материалов:

А вот тайловые функции, встроенные в материал. Они очень просты и позволяют сократить количество текстур.

Вода

Честно говоря, я просто посмотрела 5 обучающих видео по созданию воды в Unreal и взяла из каждого понемногу. Использовались нормали высокой и низкой частоты, «прокручивающие» UV-развертки с немного разной скоростью. Цвет и непрозрачность менялись по Френелю и в зависимости от глубины затухания (Depth Fade).

Рендер

Эту часть сильнее всего критиковали. Первый «итоговый» проход освещения оказался очень плоским, но я столько работала над проектом, что глаз замылился, и результат показался мне отличным. От меня ускользнуло, что верхний свет в лаборатории сильно отвлекал. Хотелось, чтобы основным источником света были попадающие через окна солнечные лучи. Холодные источники — мониторы, огоньки в воде и около комнаты — должны были с ними контрастировать.

Чему я научилась

Можно получить очень хорошие результаты с автоматизированными картами. Думаю, я буду использовать этот подход для создания некоторых пропов. С ним можно начинать делать ключевые ассеты, но их всё равно придётся дорабатывать. Думаю, главным испытанием для меня стало то, что в каждом материале было слишком много текстур.

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

#арт #опыт

 
Источник: DTF

Читайте также