Высокодетализированный Найт-Сити: применение многослойных шейдеров для создания материалов в Cyberpunk 2077
Опыт использования Substance Painter от технического арт-директора CD Projekt RED.
Технический арт-директор CD Projekt RED Кшиштоф Кшищцин в блоге Substance Painter рассказал о процессе текстурирования в Cyberpunk 2077. Разработчики не использовали традиционные текстуры — вместо этого они применили многослойные шейдеры, которые позволяют менять облик материалов при помощи специальных масок. Мы выбрали из текста главное.
По словам Кшищцина, студии пришлось сильно переработать свой рабочий пайплайн по сравнению со своими предыдущими играми. Окружение в Cyberpunk 2077 наполнено множеством деталей, что хорошо видно благодаря перспективе от первого лица.
Команде пришлось полностью пересмотреть свой подход к созданию окружения. В The Witcher 3 доминировали природные ландшафты, а в Cyberpunk 2077 представлен огромный город с плотной застройкой. Из-за этого студия полностью изменила процесс сборки окружения и создания ассетов.
Другая сложность заключалась в том, что команде нужно было разработать новые системы и технологии — иной способ управления толпой и движением машин, создать новый подход к глобальному освещению и многое другое.
По словам Кшищцина, студия стремилась развить традиционный визуальный стиль киберпанка. Постоянный дождь, ночь и неоновые огни — это культовый образ, который прочно ассоциируется с эстетикой киберпанка, но команда хотела найти нечто иное. Разработчик рассказал, что стиль Cyberpunk 2077 дополняется впечатляющими рассветами, грязным туманом, окружающим внушительные здания, палящем солнцем в пустыне — всё это неотъемлемая часть эстетики игры. Также студия стремилась сделать каждый район уникальным, поэтому в каждом из них доминирует определённая цветовая палитра и свой набор форм.
Масштаб проекта был настолько большим, что разработчики быстро осознали необходимость создания новых материалов для объектов. Команда проанализировала метрики текстурной памяти и оказалось, что на материалы уходит слишком много ресурсов памяти, поэтому было важно найти новый подход.
В результате студия применила концепцию многослойных шейдеров почти для всех игровых объектов. Идея этого подхода заключается в том, что в файлах игры сохраняются не уникальные текстуры, а библиотека универсальных материалов, которые смешиваются при помощи специальных microblend-масок. У каждого объекта своя уникальная маска, но такой подход позволяет значительно снизить размер материалов по сравнению с традиционным подходом.
Также это упростило процесс создания самих материалов — теперь художникам нужно рисовать только эти слои, а не составлять несколько текстур вместе. Ещё одна особенность заключается в способе рендеринга мешей — теперь каждый пиксель просчитывает собственные слои.
Команда решилась использовать этот метод только тогда, когда была уверена в его эффективности. Благодаря технике слоёв команда добилась большей плотности текселя, что позволило получить высокую детализацию поверхностей. После нескольких итераций разработчики начали создавать библиотеку материалов, а затем интегрировали свои инструменты в Substance Painter в качестве плагинов.
Кшищцин также рассказал, какие программы разработчики используют в своей работе: Helix и Perforce для хранения данных, а Visual Studio для кода и скриптов — всё это управляется собственной системой. Houdini применяется для моделирования, а также создания процедурного контента и эффектов. Художники в основном работают в Maya и 3ds Max. Substance Painter и Remote Browser нужны для многослойного метода, а шаблоны материалов настраиваются и редактируются с помощью собственного инструмента Material Library Manager.
По словам разработчика, библиотека материалов почти полностью создана в Substance Designer. Каждый шаблон материала включает в себя информацию об альбедо, нормали и гладкости. Также команда сделала microblend-текстуры, которые содержат карту высот и карту нормалей.
Изначально разработчики создали только несколько простых материалов — бетон, пластик, кирпич. Затем они отладили процесс и сделали множество других материалов. При этом художникам не нужно создавать отдельные вариации одного и того же материала — достаточно иметь лишь базовую версию, к примеру, металл или ржавчина, а затем модифицировать её с помощью microblend-масок. Поэтому в ходе разработки вообще не нужно менять оригинальные ассеты — достаточно лишь изменить маски.
Сами microblend-маски включают в себя специальную карту нормалей, позволяющую смешивать разные слои, а также информацию о дополнительных факторах, влияющих на внешний вид материала. Например, мокрый бетон по виду сильно отличается от сухого, и эта разница учитывается. Маски позволяют сделать материалы разнообразными, но при этом добиться согласованности их внешнего вида во всей игре.
Также команда разработала инструмент Remote Browser, который связывает Substance Painter с REDengine и позволяет редактировать слои: загружать слои материала, менять его цвет и внешние условия.
Кшищцин признался, что больше всего проблем возникло из-за размера и комплексности игрового мира. Команда должна была создать мир так, чтобы его можно было быстро визуализировать из любого места и в любое время суток с несколькими разными погодными условиями. Ситуация усложнилась бесшовным геймплеем и отсутствием загрузок.
В самом начале разработки студия решила, что нужно сделать масштабируемыми все подсистемы движка. Для самых ресурсоёмких и затратных вещей разработчикам пришлось искать особый подход.
К примеру, весь транспорт, находящийся вдалеке, рендерится в виде billboard-полигонов — спрайтов, которые всегда направлены в сторону камеры. Это значит, что 3D-модели заменяются на обычные спрайты, а это позволяет одновременно визуализировать тысячи машин. Разработчики объединили этот подход с иерархическим упрощением для всей геометрии мира, что дало возможность показывать нужные детали только вблизи игрока.
В заключение Кшищцин дал несколько советов, которые могут помочь художникам. Также их дополнил старший художник по персонажам Марцин Клики и старший художник по окружению Марк Форман.
- применение тайловых текстур значительно ускоряет процесс работы, поэтому постарайтесь использовать их при любой возможности;
- уделите особое внимание организации и хранению своих работ. Иногда вам потребуется вернуться к какому-то материалу через несколько недель или месяцев после его создания;
- пишите комментарии к своим работам, чтобы вы могли объяснить свои решения даже через несколько месяцев;
- если вы замечаете, что слишком часто используете определённые ноды, превратите их в кастомные ноды. Это сэкономит время в следующий раз;
- создавайте собственные генераторы в Substance Painter, если не получаете нужных результатов с помощью доступных средств;
- вы можете в некоторых случаях разукрашивать объекты вручную, но это неэффективно, если вы работаете с огромным количеством ассетов. В этом случае чаще используйте генераторы для экономии времени.