Архитектурный материал в PUBG и Wiedźmin 3
Поделюсь как профессионалы играются с архитектурой и материалами в профессиональных играх.
Продолжу "портить" ваш ДТФ материалами про геймдев. Сегодня поделюсь материлами по организации "материалов" у профессионалов.
Первая половина материал от Carlos Sánchez художника окружения про RGB маски в PUBG для быстрого создания архитектуры
Вторая половина от Jacek Maj технического художника в CDPR по оранизации сложного материала архитектуры через текстурные массивы.
В 2017 когда команда PUBG начинала в команде было около 100 человек) и команда ответственная за арт составляла всего 15 человек(!) - это сейчас у них команда из 2000(В 2021м) сотрудников -аутсорсеров работающих в аутсорс фирмах и создающих им контент.
Большинство из которых были — художники по окружению, отвечающие за разработку всей карты, включая игровой реквизит, растительность, здания, дизайн уровней, освещение и т. д.
Вопреки распространенному мнению что PUBG строился на реюз ассет флипа с маркетплейсов - они в первую очередь использовали только готовые наборы материалов и текстур - а 3д объекты создавали свои собственные:
Например перед созданием тематических ассетов - команда выезжала в страну на которую ориентировалась. Например в ту же Словению. Где собирали референсы и материалы. Собственно вся Арт команда:
Процесс создания локации начинается с того что:
После сбора первичных рефренсов. После вместе с командой дизайнеров уровней создается простой макет, чтобы определить общее количество зданий, их размеры и расположение, необходимые для игрового процесса.
У команды созданы очень строгие правила, например, в отношении внутренней планировки или расположения окон. Если вы когда-либо играли в PUBG, то можете заметить, как быстро вы считываете время которое потребуется на зачистку здания от лута когда попытаетесь разграбить здание. Ключевым моментом является наличие четкого и простого пути мародерства. Что бы в здании не было "хитрых" запутанных помещений и скрытых сложнодоступных комнат.
После получения одобрения от дизайнеров эти габаритные блоки отправляются команде концепт-художников, которые накладывают на макеты оверпейнт, референсы и все, что по их мнению может понадобиться 3д команде.
Инструменты
В рамках команды нет какого жесткого пайплайна - каждый художник сам вправе выбирать удобные ему материалы и ПО: Maya, Blender, 3d Max - что хотите.
Для текстурирования в PUBG Studios используется так же свобода: Quixel Megascans и Mixer, Substance Designer и Substance Painter.
Опять же, это вопрос личных предпочтений. Например, если речь идет о тайлах в материале для здания, Карлос обычно начинает с основы из Megascans, а затем вносит некоторые изменения через Substance Designer, пока не добьется желаемого результата. Но некоторые из его коллег предпочитают использовать Mixer, а кто-то — создавать текстуру в Substance Designer с нуля. У команды есть полная свобода выбора пути, и это здорово.
Сроки
У команды довольно сжатые сроки - на создание арта на сезон выдается от 3 до 6 месяцев, поэтому оптимизация времени просто необходима.
В основе оптимизации лежит два принципа: Реюз ассетов и Модульность. Это две стороны одной монеты для создания конетнта к сезонам игры.
Реюз Ассетов:
Нужно использовать как можно больше ранее созданных активов повторно. Это касается не только небольшого реквизита с предыдущих карт, но и самих зданий. Часто берут ранее созданную базовую модель здания и просто добавляют немного другие материалы, иную крышу и отделку, чтобы оно выглядело как другое здание. Это также связано с игровым процессом: здания должны быть максимально простыми и узнаваемыми, чтобы мародерство было быстрым и удобным. Даже если игрок пропустит пару сезонов.
Модульность
Это может показаться очевидным и привычным для всех, но об этом всегда стоит повторять. Ибо в художественных школах часто делают акцент на создание "героических" ассетов на уникальных текстурах - а не модульных элементах конструктора, на тайловых текстурах с минимизацией количества текстур в движке.
Вот так выглядит типичный модульный набор для домиков в PUBG
А так - сборка домика в движке:
Однако у этого подхода есть свои потенциальные недостатки: здания могут выглядеть слишком похожими друг на друга в неопытных руках. И, что еще важнее и опаснее, нужно учитывать, что большая модульность резко увеличит количество объектов в сцене и, следовательно, может привести к увеличению количества вызовов отрисовки и коллизий, чего вам вероятно не хотелось бы. Главное здесь — найти баланс и действовать по ситуации.
Текстурирование
Наконец приходим к тому ради чего и начал создавать эту заметку:
Изначальный процесс предполагал использовать стандартные маски грязи одинаковые для всех ассетов. И от этого решено было отказаться. Но так же отказались и от Vertex Paint текстурирования ассетов на уровне из за его "длительности"
Чтобы добиться повышения качества, в котором нуждалась PUBG, Карлос сказал что идея была в том что бы сосредоточился на том, чтобы придать каждому зданию уникальный вид, то есть создать уникальную маску для каждого здания.
Маска создавалась заранее и регулировалась через параметры экземпляра шейдера которые были уникальны для каждого домика на уровне.
Чтобы добиться повышения качества, в котором нуждалась PUBG, Карлос сосредоточился на том, чтобы придать каждому зданию уникальный вид за счет регулирования масок RGB через крутилки параметров в инстансе шейдера. *
*Материал Инстанс он же экземпляр- это копия скомпилированного шейдера где изменены параметры(и текстуры), это позволяет сэкономить время на компиляции - когда экземпляры имеют одну и ту же GPU математику внутри, но разные входящие параметры. Многие новички дублируют мастер материалы - что создает проблему с тем что щейдеры все никак не скомпилируются.
То есть создать уникальную маску для каждого здания, достаточно было покрутить параметры у его материалов.
(!)*Хотя как по мне это довольно "неудобно" регулировать ассет на уровне таким образом если число экземпляров материалов будет больше десятка . Ведь ужно выделить нужный дом, выбрать через панель Detail перейти в нужный инстанс материала здания - и уже в нем регулировать. Процесс можно чуть оптимизировать в Unreal использую Primitive Data и регулируя сразу во вкладке Detail на ассете без нужды создавать 100500 клонов. Но тут тоже свои минусы есть. Например невозможность присвоить примитивной информации нормальное имя параметра...их придется заучить/или смотреть в шпаргалку оставленную в комментариях к мастер материалу...
Итак - вернемся в PUBG - как же эта RGB маска работала с материалом?
В PUBG базовый материал сохраняется с высокой плотностью текселей в канале UV0, который для них равен 1024px что соответствует 3м квадратным метрам(см слева место где чекер), затем добавляется второй UV-канал UV1, в котором все UV-развертки находятся внутри UV-пространства, примерно следующим образом, что бы не было пересечений.
В этом втором канале UV1(У программистов счетчик начинается с нуля!) рисуются простые маски цвета с помощью Substance Painter. Обычно там используется 3 маски, по одной на канал с цветом Red Green и Blue:
Вот так выглядит текстура с масками, а справа как маска рисуется на модуле из ассета:
R-канал используется для смешивания двух разных наборов материалов со своими наборами текстур через смешение по карте высот. Например, штукатурку и кирпичную кладку. Кроме того, по аналогии с архитектурным материалом из Ведьмака можно добавить наложение другого цветового оттенка к обычному смешивание этих двух текстур, используя разные значения оттенков серого в этой маске:
Пример такого смешивания материалов по маске высот. Классическое наложение штукатурки поверх кирпичей:
Для увеличения визуального разнообразия добавлено возможный параметр наложение цвета на контур:
Дополнительно момжно регулировать силу смешивания карт нормалей: Это создает эффект "толщины" наложения материала штукатурки.
Карты масок G и B позволяют наложить на ассет цветной оттенок, который используется для имитации грязи или вариаций диффузной текстуры:
Например G-маска позволяет имитировать наложение грязи на модули:
А B-маска для наложения украшения в виде цветовой раскраски на модуль:
Если захотите добавить деталек к зданиям - нужно добавить "уникальных" декалей с повреждениями.
Единственный секрет хороших декалей — это во много наблюдать и обращать внимание на эти детали, когда идёшь по улице. Если взять в качестве примера разрушенную стену, сосредоточьтесь на том, из чего она сделана, попытайтесь понять и подумать почему она была построена именно так, какие обломки лежат на полу, насколько велики осколки...
К сожалению, даже у крупных команд иногда нет ни времени, ни бюджета, чтобы проработать все эти детали, поскольку для большинства из них требуются уникальные текстуры, и на дополнительное моделирование уходит довольно много времени....
Если злоупотребить "модульным" подходом сделав слишком мало деталей, здания могут получится однообразными и скучными.
Карлос дает для новичков в 3д рекомендует тратить 50 % времени отведенного на задачу окружения, на небольшие декоративные элементы, которые придадут им индивидуальность и повысят качество.
Например на кирпичные углы для дверей и окон, каменное основание, вылепленное в ZBrush, и работа над элементами крыши....
В качестве завершающего штриха вы всегда можете добавить поверх изображения несколько наклеек-декалей. Используйте этот прием для имитации протечек, ржавчины или общей загрязненности. Наклейки обычно стоят недорого для рендера и придают изображению дополнительный налет старины, который помогает передать атмосферу заброшенного здания.
Архитектурный материал в Ведьмаке:
Это все очень похоже на Архитектурный материал из Ведьмака 3го который наносили на дома в ДЛЦ Кровь и вино. И думаю что про этот подход мне стоит расказать вместе.
В частности впервые его показали на GDC :
Building Beauclair in The Witcher 3: Wild Hunt - Blood and Wine где то на 35й минуте:
Позже Автор Jacek Maj расписал на артстанции и поликауне процесс подробнее. Его и приведу:
Хотя в отличие от параметрического материала PUBG - там в первую очередь был расчет на работу с Vertex Color со стороны левел дизайнеров.
Вот так выглядел тестовый прототипа домика в ДЛЦ на этом подходе.
Все началось с простой идеи смешивания текстур (смешивания трех текстур), но потом CDPR поняли, как расширить ее функциональность, чтобы сделать ее более универсальной...
Главной целью СDPR было создать многослойный материал для зданий, который подходил бы для всех(!) зданий в районе. Так как большинство из них были построены из светлого кирпича и покрыты штукатуркой. Поэтому идея заключалась в том, чтобы создать такой штукатурный материал, который при повреждении со временем обнажал бы кирпичную кладку.
Тогда единственным различием между зданиями был бы выбранный цвет штукатурки. (Это логично, ведь люди строят из одного и того же материала, но используют разные цвета краски!)
Позже в CDPR поняли, что если добавить в массив больше текстур кирпича, то это может сработать в обратную сторону. Чистый кирпич, со временем пачкается и как итог портится. но можно добавить и вариации с "чистым" не окрашенным кирпичем которого еще не касалась штукатурка:
Вот вам краткая шпаргалка за материал архитектуры...
Итак как ее читать?
Наверху. VC
Вертекс Колор позволяет по значению выбрать нужный материал поверхности из текстурного массива.
(на самом деле это несколько массивов в шейдере - на каждый тип текстур Диффуз, Карту Нормалей и Шершавость) формирующий базовый материал.
Чуть ниже показаны "маски" (Карты высот) смешивания соседних слоем текстурного массива. Они выбираются автоматически на основе значения цвета VC цвета выбора материала.
Затем показаны варианты Цветов которые можно нанести на материал в виде "цветной штукатурки". (у каждого базового материала можно задать свою маску/количество количество штукатурки) - Они задаются параметром и кидаются на весь ассет целиком.
И наконец можно добавить на здание немного грязи. Например в нижней части чуть больше - а наверху чуть меньше.
Как сказал сам автор шейдера Jacek Jerzy Maj :
В инстансе шейдра можно было ввести:
- Текстурные массивы с базовыми текстурами (цвет, нормаль, шероховатость, маски)
- Текстура грязи
- Каналы RGB VC
- Дополнительный Цвет Штукатурки для изменения диффузного слоя базовой текстуры
Разбивка по слоям VC была :
R — AO (дополнительное затенение ассета от рассеяного света)
G — смешивание текстур из массива
B — рисунок грязи (можно использовать для других элементов, например наклеек или картин)
A — не используется
Вот примерно как может смешиваться материал (он не 100% точный ибо создан автором в ФШ в иллюстративных целях)
- Чистый материал из Текстурного массива. От Штукатурки к поврежденной поверхности чистой от штукатурки.
- Вариант материала с наложением эффекта "цвета" штукатурки. Цветная штукатурка наносится только на первые варианты
- Текстура с наложением текстур грязи.
- Финальное смешение материалов из массива между собой в разных пропорциях.
Если хотите покопаться подробнее - то шейдер доступен для изучения - если вы покупали Wither 3 в ГОГе - вам достаточно скачать Red Engine, установить игру и распокавать ее в реденджин - и найти нужный шейдер под именем pbr_vert_blend_colorize c расширением w2mg.
Если хотите посмотреть окружение, откройте Toussaint, карта называется bob (dlc/bob/data/levels/bob/bob.w2w) (Они не парились с неймингом)
Бедный и богатый район имеют разные наборы текстур - хотя мастер материал у них один:
Собственно по такому принципу создана архитектура всего Ведьмака - хотя конечно в ванильной версии Ведьмак Дикая охота - шейдер работает чуть по проще. Без дополнительного слоя краски. Хотя материалы на Каэр Морхен так же наносились через Текстурный массив и VC:
Вот так эти материалы накладываются на ассеты. (Хотел бы я сказать "модульные" - но увы в ведьмаке 3д модели довольно таки крупные )
Все это верно и для интерьеров:
которые выглядят так:
Надеюсь было полезно. Я называю такой подход к созданию материалов к игру "умными"(Smart) Шейдерами. Увы сегодня в век ИИ многие тупо нагенерить в нанобанане 100500 совершенно не уникальных усредненных 8к ИИ-текстурок - моментально забьют память видеокарты и потом будут ныть что Арил/Юнити/Годот не тянет их ИИ шедевр - оря по всему интернету что программисты движка кривые - а не они лично накосячили. Вместо того что бы создать нужный материал который будет служить вам помощником в наполнение миров...
Такие типы умных подходов к шейдерам полезны что бы дать возможность разработчикам наполнять крупные миры, довольно небольшим арт отделом и довольно сжатые сроки.
Можно ли использовать текструрный массив в том же анриле и повторить архитектурный шейдер Ведьмака?
Легко! Jacek Maj собственно на своей артстанции приводит в пример такого подхода к текстурирования:
Хотя текстурные массивы(texture 2d array) были добавлены в Unreal не сразу - так что многие даже не подозревают что они в нем есть:
*Кстати замечу что текстуры в Массиве должны быть одного размера - иначе -каждая будет занимать столько же сколько и самая большая. Из главных плюсов массива - это уменьшение вызовов загрузки текстур в память GPU(Одного из самых тяжелых процессов в шейдинге), так как все грузится в один проход.
Так вы можете столкнуться с ошибкой как правильно вызвать нужную текстуру из массива по нужному индексу. Это несколько "неочевидно", но для этого нужно в (Вектор2) UV координат нужно добавить 3й вектор через ноду Append который и будет нужным номером для вызова нужного значения индекса из массива текстур:
Как из маски(процедурной, VC, или Меш пейнта) которая обычно будет задаваться значением от 0 до 1 получить нужный Индекс?
Все до предела просто это называется "квантованием"- умножаем на общее число текстур - округляем до целого знаечния в нужную сторону( Ноды Floor, Round, Сeil) и вуаля ваш индекс готов.
Если число текстур 16 в массиве - то умножать маску можно на 15.999 , и использовать Floor. что было обращения не было к 16му индексу, ибо у программистов все не как у людей и индексы в текстурах начинаются с нулевого индекса.
Еще вариант реализации:
А есть ли у вас примеры любимых умных шейдеров к материалам о которых я еще не знаю? Поделитесь!
PS: Думаю таки надо собраться и начать делать более авторские материалы по материалам развивая информацию в заметке о PBR в более практическом виде в том же движке Unreal. А может поделится информацией по той игре где работаю Артдиром? скоро - скоро...