The Ultimate Trim : Идеальная техника текстурирования
Конспект выступления Morten Olsen Principal Environment Artist из Insomniac Games на GDC о том как они выбрали способ использования текстур для заполнения мира игры. Это было выступление на GDC 2015: The-Ultimate-Trim-Texturing-Techniques.
Я решил сделать для себя небольшой конспект и заодно поделится с вами. Почему это нам может быть интересно? Тут описаны пара лайфхаков которые удобно использовать что бы упростить себе жизнь при создании огромных миров.
Для начала начнем с того что такой участок мира в 1400х2400метров был заполнен всего силами десятком художников по окружению. Заинтересовались? Тогда начнем.
Для этого они придумали технику, которую назвали "ультимативные текстурные Тримы"
Трим текструа (Trim= разрезать)- это такой тип текстуры который в отличие от чистого тайла повторяется только в одном направлении
И вся "технология" строится на двух решениях:
-> Стандартизированной развертке
-> 45 градусные скосы нормалей по всем краям развертки
И абсолютное большинство ассетов окружения в игре можно размапить и затекстурировать через Трим Текстуры, даже если по началу вам покажется что это не так:
Для начала для создания ультимативной Трим -текстуры нужно выбрать "формат" развертки - и все повторяющиеся материалы должны быть уложены в нее:
Layout
Так в Sunset Overdrive развертка (Layout) окружения стандартизировано так:
И абсолютно все стандартные материалы окружения уложены в рамках этого стандарта
Кипич, металл, дерево, все оформлено в едином стиле! На одних местах. Обратите внимание, что самый нижний слой Ультмативной Трим текстуры в атласе отдан под "уникальные элементы" которые должны позволять вам добавить характерные особенности.
Или "не будут" - если материал не позволяет.
Но как можно понять по примеру - два элемента снизу слева отданы под стандартные части торцевые части моделей - таких, как окончания балок. Так что вне зависимости от того из какого материала они выполнены, материал на такой развёртки - взаимозаменяем.
Если все выполнить правильно - то модель можно перекрашивать быстрой сменой базового набора текстур. Все довольно просто и очевидно?
Немного исследовательской работы в начале разработки над стандартами студии и в виде трим листа и вы сможете заполнить свой собственный город в открытом мире минимальными силами, и вам не понадобятся тысячи людей.
Скосы нормалей
Теперь поговорим про скосы нормалей.
Как можем видеть для оформления карты нормалей по краям был использован стандартный 45градусный скос. Который был скопирован из простого шаблона:
И на каждый скос был позже был нанесен свой вариант детализации и повреждений - для придания карты нормали более "естественного вида":
Но давайте лучше посмотрим как это выглядит на моделях:
Мир Sunset overdrive использует весьма низко полигональные модели, поэтому вот как они выглядят без текстур:
В таком виде мы можем видеть что острые грани лоуполных деталей, они настолько остры - что о них можно порезаться!
А теперь давайте взглянем зачем нам будут нужны скосы на ультимативной модели! И добавим карту нормалей:
Видите!? Теперь наш ассет выглядит как детализированным! А скосы нормалей маскируют лоуполи и 90градусные грани становятся не видны!
Учитывая что игра от 3го лица - мало какой игрок замети "обман" в столь динамичной игре!
Другой аспект стандартизации UV разверки Трима заключается в том что можно быстро и безболезненно перекрашивать ассеты из одного материала в другой.
При этом все стандартные края нормалей остаются на своих местах!
Так же стоит отметить что у каждого варианта Трим развертки - есть дополнительная бесшовная тайловая текстура. Она попросту необходима для создания "крупных" ассетов и равномерных стен которые занимают несколько квадратных метров.
И используя версию Трим и Тайловой развертки - можно создать и покрасить любой ассет в игре:
Да в Sunset игра строится на 3х текстурах: Нормалки, Диффуза и карты Спекуляра - она же карта Отражения/Зеркальности.
Довольно странно что во многих PBR подходах возможности карты отражения игнорируется и часто у всего материала выставляется стандартный параметр для всей поверхности. Но поговорим о Спекуляре как-нибудь потом - там есть пара своих интересностей.
Итак - вы выбрали формат UV и создали кучу материалов для игры, так что порядку создания ассетов при данном подходе:
Так что стандартные ассеты создаются по двум шагам:
1. Создание Лоуполи.
2. Перенос UV модели на Трим разверку:
Этот процесс займет у вас минуты! Так как напоминаю что мы все еще имеем дело по сути с лоуполи:
Которая волшебным образом преображается если закинуть на нее Нормалку:
Самое главное - подгоните - края полигонов так что бы с двух сторон был виден скос карты нормали
И ваш ассет ААА+ класса готов. Вы великолепны. Никаких лишних расходов времени, нервов и сил. А техартисты молятся на вас что игра не расходует лишний бюджет на полигоны!
Главное не забудьте при развертки захватить созданный скос:
При этом что самое интересно - идеальная UV развертка даже не нужна, если вы оставите 1-2 пикселя, лучше НЕДОБРАТЬ чем залезть на соседнюю деталь в ТРИМ текстуре:
Или используйте Ровно столько "скоса" нормали - сколько вам реально нужно! Регулирая размер текстуры +-пара пикселей можно придать ассету совершенно разный визуальный скос.
Например, если хотите сохранить 90градусный угол:
Или придать всем ассетам игры единообразный стилизованный вид:
Другой важный аспект который часто возникает при использовании Трим Текстур - что иногда UV не идеально совпадает с заданными размерами поверхностей, в таком случае не стесняйтесь разрезать и перемешать UV - главное подобрать разрез между полигонами так что бы стык не бросался в глаза - что довольно просто сделать если на нормали мало высокочастотного шума.
Этот прием особенно часто придется использовать при создании сложных криволинейных поверхностей:
Так что весь секрет в том что бы это исправить кроется в правильном масштабе плотности сетки и и разрезании UV - для этого все же придется добавить фаску в нужном месте:
Что позволит перенести UV развертку в нужное место для имитации скола:
Этот способ Гораздо дешевле по времени и по бюджету на текстуры чем создание уникальной карты нормалей при запекании окружения.
Так что это позволяет создавать "уютное" окружение на лоуполи для игрока.
Просто нормально делайте:
Не нормально - не делайте! Зачем вам 90 градусные углы которые сразу сбивают все погружение игрока в и заставляют вспомнить его что он играет в видеоигру?
Этот подход за счет небольшой игры с картой нормалей - позволит вам дешево создать иллюзию высоко детализированного мира!
А ведь у этой лавки - всего пара сотен полигонов!
На этом базовая часть лекции - все.
Но это еще не конец! Поговорим про стиль!
Мир Sunset Overdrive задизайнен как стилизованный мир. Все ассеты окружения выглядт так как будто художник прошелся по ним кисточкой!
На английском это называется "Brushstroke", а на русском это будет "следы от мазков".
Все крупные ассеты имеют несколько вариаций что уменьшает повторяемость и как итог художественную усталость игрока от повторения вида ассетов:
Для придания эффекта художественности в игре используется несколько масочек Шума, в которых эти Мазки и задаются, и кстати вот они:
В каждой маске используется 3 канала RGB - где зашифрована свой вариант тайловой маски.
Так как Шейдер движка игры работает с этими масками?
Маски влияют только на Диффуз и Спекуляр - Нормаль у модели остается неизменной!
Маска имитирующая работу кисти использует Цвет Вертексных вершин и это дает результат - в виде уникального шума, который можно менять от ассета к ассету!
Это небольшая ручная работа - очень сильно сказывается на восприятии игры! Игра уже не выглядит как реюз ассетов(хоть по факту это оно и есть!)
Вертекс Колор - это давно известная технология модификации ассетов прямо на левеле. Что позволяет левел дизайнерам и художникам немного менять правила наложения текстур на ассетах прямо на уровне - придавая им уникальности. Сам процесс покраски довольно быстр.
Но не смотря на всю быстроту... раскрашивать каждый ассет в мире игры все таки несколько долго... так что для работы - используют процедурную маску шума:
Она нужна для создания предварительного разнообразия ассетов мира. И позже там где это необходимо - художники руками дорабатывают ассеты в сюжетно важных местах.
Маска шума выглядит так:
Это очень интересно, но ничего не понятно - так что давайте взгляним на то как маска будет выглядеть на мире игры - если ее использовать ак текстуру!
У каждого ассета - контраст шума может быть выкручен индивидуально через контроль данных в движке игры при создании локации:
(В том же Unreal это можно сделать через Primitive Data - если вы захотите добавить что то похожее себе)
Что приводит к следующему итоговому результату - когда эти цвета вершин придают разнообразию игре:
Все! Теперь осталось пара финальных слов:
Время на разработку - это самый ценный ресурс для любого разработчика. Будь то маленькая команда или ААА+ студия от Сони. Стандартизация создания ассетов - фантастически ускоряет и удешевляет время создания открытых миров.
Ультимативная Trim Развертка для Текстур - это ОЧЕНЬ простой, дешевый и эффективный способ заставить ваши Low-poly модели выглядеть детализированными! И вам больше не нужно оправдываться стилем "ретро" -и тем что вы делаете закос под 90е.
Имитация мазков кистей - это уже опционально и вероятно не понадобится вашему проекту, Но... Но это очень эффективный способ добавить вашей игре ощущение Хенд-Мэйда - что каждый элемент на уровне сделан ручками и раскрашен художником.
Есть над чем подумать? Создание единого стандарта для Trim развертки в игре, это исследовательская работа на пару недель - что сэкономит вам человекочасы.
И скос Нормали не обязательно должен быть жестким 45градусным, можно сделать можно сделать и более сглаженный переход.