Gamedev: как рисовать бочки?

Всем привет! Меня зовут Даниил, в интернете меня знают как BlueOxel. Я занимаюсь 3D-графикой профессионально уже два года, и сегодня хочу поделиться своим опытом работы над проектом The Barrel.

ОНА<br />
ОНА

Мое путешествие в игровой индустрии началось с того, что во время учебы на юридическом факультете я создал свой первый небольшой игровой проект и сделал первые 3D-модели. Затем началась пандемия, и я стал более активно изучать 3D-моделирование, в частности, работать с Blender.

Позже мне очень повезло, и в день защиты дипломной работы я получил свой первый контракт на создание 3D-моделей для игрового проекта. Впоследствии я работал над несколькими проектами по контракту и смог найти работу на полный рабочий день. Однако мне хотелось расти дальше, поэтому я решил продолжить обучение в 3D, чтобы мои навыки достигли уровня современного продакшена.

Мне невероятно повезло познакомиться с потрясающим художником Alexey Ivanchenko, который давал ценные советы, терпеливо указывал на мои ошибки и объяснял, как их исправить. Я ему очень благодарен за это.

Задача проекта и подбор рефренсов

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

Поиск ассета, который отвечал бы моим требованиям, не занял много времени. Была выбрана антикварная бочка с потрясающей формой и детализацией. Так же решили скомбинировать несколько референсов различных бочек для вариативности и немного изменить изначальный вариант. Очень рекомендую в такие моменты стараться держать свой pureref файл в порядке так как иначе это все может превратится в хаос.

Боченьки мои боченьки...<br />
Боченьки мои боченьки...

Хочу предостеречь многих от ошибки оверсокпинга своих проектов. Я намеренно выбрал простую антикварную бочку, потому что на начальных этапах важно делать небольшие проекты, но выполнять их на высоком уровне. Это очень частая ошибка среди новичков, из-за которой они часто не завершают свои проекты.

Blockout and highpoly

Все началось с простого блокаута бочки по размерам и референсам. Изначально работа велась в соответствии с размерами оригинальной бочки, но в процессе были внесены некоторые изменения, и внешний вид отдельных элементов был пересмотрен.

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

Я не стал слишком углубляться в скульптинг, чтобы сохранить гибкость во время текстурирования дерева в Substance Painter. Это изначально закладывалось в проект так как я хотел потратить больше сил на этапе текстуринга. Металлические элементы я обрабатывал по аналогичной логике: добавлял детализацию на всех частях, но в меру, чтобы на этапе текстуринга сохранить больше гибкости.

LowPoly+UV

Low-poly модель была создана на основе блокаута pre zbrush. Оптимизировал сетку в местах, где это не повлияло на внешний вид даже несмотря на то что не было бюджета по полигонажу.

Ниже показаны части модели которые я заранее обозначил как оверлап. Несколько досок были скопированы, отзеркалены и повернуты на 180 градусов. Это позволило сэкономить место на UV, но при этом не видно что нижние части повторяются.

Если вам интересно что это за меню на видео выше то это Machin3Tools.

UV-развёртка была сделана с помощью связки стандартных инструментов Blender и RizomUV. Я стараюсь использовать преимущества обоих программ, так как каждая отлично дополняет те моменты, которые не удается полностью решить в другой.

Я использовал такие аддоны для Blender’а как:

  • TexTool- у меня есть небольшой бэкграунд связанный с Maya и 3DsMax и поэтому я использую этот аддон очень часто для UV развертке. У него множество потрясающих функций, но я их не использую.
  • Uvpackmaster 3- аддон который сейчас должен быть у каждого пользователя Blender’а. Наверное лучший паковщик UV на данный момент.
  • Rizomuv Bridge- небольшой но полезный аддон который позволяет очень быстро переносить из Blender в Rizom и обратно модель.

Поскольку проект изначально создавался для публикации на Artstation, акцент был сделан на использовании 4K текстур для рендеров. Однако, модель отлично выглядит и с текстурами разрешением 2K.

В проекте не был задан конкретный тексель, однако изначально планировались очень близкие ракурсы при рендере ассета, поэтому некоторые UV-острова были увеличены.

Также был проделан небольшой анализ сцен рендеров. В данном случае получается что самый основная часть бочки (без торцов) будет занимать примерно 2660px и при этом выглядеть нормально. На одном из рендеров ниже как раз получилось примерно такой результат. На этом рендере эти доски занимают 2560px.

Gamedev: как рисовать бочки?

Таким образом, вы можете рассчитать количество текселей и настроить их так, чтобы они соответствовали количеству пикселей на экране при крупных рендерах.

Bake

Проблемные этап. Первые результаты бейка содержали небольшие ошибки из за того что кольца были загнуты. Из за этого пришлось переделать highpoly и lowpoly этих колец в развернутое состояние и уже потом запек все это. И только после финального бейка снова были загнуты все кольца. Это позволило устранить все проблемы, возникшие ранее.

ВЫКЛЮЧИТЕ АВТОПОВТОР ГИФКИ

Некоторые артефакты оказалось трудно исправить, поэтому я хочу поделиться с вами простым, но эффективным методом их исправления в Photoshop. Так можно одновременно внести исправления на нескольких картах. Я использовал фильтр Liquify. Этот фильтр позволяет вносить изменения на ключевые карты для бейка, такие как curvature, normal и AO, а затем, с помощью функции "повторить последний фильтр", применить те же изменения ко всем картам, которые вы используете. Надеюсь, этот совет пригодится вам в дальнейшем.

Показал примерный процесс как это все делается:

Рекомендую смотреть с комьютера

Texturing

Это очень комплексный этап, наполненный экспериментальными решениями.

Поскольку мы не были привязаны к какому-либо конкретному проекту и не имели возможности воспользоваться готовым базовым материалом дерева, выбор пал на Quixel Megascans. Мы протестировали огромное количество материалов, так как бочка небольшого размера, а большинство материалов предназначены для объектов других масштабов. Однако после нескольких итераций нам удалось создать отличную базу для карт base color, roughness и normal map.

После этого были сделаны еще дополнительные слои, в ходе которых была усилена детализация дерева и добавлена дополнительная информация во всех каналах.

Для более гибкой настройки детализации на бочке было использовано множество якорей. Я настоятельно рекомендую тем, кто еще не пользуется якорями, пересмотреть свое отношение к ним — это действительно «убийственная» функция Substance Painter. Надеюсь, в будущем команда разработчиков добавит в меню якорей строку поиска, так как мне её очень не хватало во время работы на проекте.

Хочется подчеркнуть детализацию которую я сделал благодаря каналу height. Я заранее подготовил для этого почву, что позволило вдоль поэкспериментировать с способами создание трещин на дереве. Но при этом в процессе не использовались полностью процедурный подход. Я хотел контролировать где будут появляться те или иные детали на дереве, поэтому многие маски были нарисованы вручную.

Ниже я хочу продемонстрировать разбор папок leak и sculpt. Обе папки работают по единому принципу – взаимодействие с вручную созданной маской.

Процесс создания sculpt оказался максимально простым. Как видно на видео, я просто рисую маску, а затем с помощью якорей, фильтров и корректировки уровней я получаю финальный результат.

Так же я такой подходит позволяет мне изменять финальный результат так как мне хочется.

Логика создания градиентов в случае с Leaks схожа с предыдущим подходом, однако на этот раз с маской было проделано больше работы. Задача заключалась в том, чтобы уместить несколько цветовых градиентов в одной маске. В конце видео я включаю и выключаю слои, которые позволяют создать такой сложный градиент.

Так же хочу показать один из генераторов грязи который получился в проекте.

Также хочу отметить, что в параметры micro height и micro normal некоторых генераторов проекта были добавлены anchor points папок с деревом. Это позволило сохранить исходный паттерн при дальнейшей работе.

Ниже привожу пример, демонстрирующий использование этих якорей на маске одного из генераторов.

Очень рекомендую создать слой который я назвал B&W. Он позволяет посмотреть достаточно ли интенсивная у вас normal map получается в по итогу. Это было важно для меня так как я хотел сохранить определенную иерархию по интенсивности, что небольшие сколы не были глубже чем трещины на дереве.

Gamedev: как рисовать бочки?

Ниже я показываю как это сделать:

Так же в процессе работы над Base color я очень рекомендую проверять ваши вашу модель при помощи HSL с saturation в 0. Это позволяет понять как хорошо читаются ваш тон в процессе работы над цветом.

Но есть и другой способ это делать-включить световой фильтр в настройках Windows, так же это можно настроить на горячие клавиши. Этот способ я увидел у потрясающего художника EMC3D, в одном из его видео.

И под конец- не обязательная но дружеская рекомендация используйте иногда в процессе PBR Validate на вашу модель вот с такими настройками. Это позволит от некоторых визуальных артефактов избавится в процессе работы.

Gamedev: как рисовать бочки?

Более подробную информацию можете узнать в этом видео. Хочу отметить потрясающего художника Sergei Panin за предоставленную информацию в этом ролике.

Rendering

Первые наброски сцен я начал делать еще во время текстурирования. Очень важно проверять текстуры в целевом рендере или движке на ранних этапах, чтобы выявить возможные проблемы. В моем проекте я использовал Marmoset Toolbag 4, который отлично справляется с такими задачами.

Для более наглядного восприятия я разделил свои рендеры на два типа: те, которые привлекают внимание зрителя, и студийные — для демонстрации технических аспектов текстур без искажений от света.

Ниже предоставил lightning breakdown двух рендеров.

Это основной eye catching render. Тут была задача сделать просто красивый и кликабельный рендер.

Отдельные источники света
По группам

Студийный рендер ниже был сделан по стандартной схеме из 3х источников и hdri. По такой же схеме сделаны почти все остальные рендеры.

В большинстве случаев я использовал стандартные настройки Marmoset, но переключил Tone Mapping на профиль ACES. Если вам не совсем понятно, чем это полезно, я рекомендую прочесть данную статью.

На стадии постобработки я применил Camera Raw в Photoshop для легкой доработки рендеров. Хотя встроенных инструментов Marmoset достаточно, я все же считаю, что небольшая постобработка может сделать результат более привлекательными.

Ниже представлены рендеры до и после применения всех постобработок.

До?
До?
После?
После?

Я старался не вносить значительных изменений в свои рендеры через Photoshop, поэтому ограничился лишь минимальными корректировками. Важно сохранить оригинальный вид работы, когда показываешь игровой ассет. При этом я стремился использовать не деструктивный подход: сохранял пресеты Camera Raw и все слои в PSD-файле. Это позволило создать гибкий пайплайн, который упрощает замену рендеров, если в процессе будут обнаружены ошибки или возникнет необходимость в доработках.

Final conclusion

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

Gamedev: как рисовать бочки?

Я не намерен останавливаться на текущем уровне и стремлюсь дальше развивать свои навыки.

И ниже приведу основные тезисы статьи:

  • Отводите достаточно времени на поиск референсов и планирование. Вы только выиграете, если сразу найдете качественные материалы и будете понимать каких целей вы хотите добится в новом проекте.
  • Не оверсокпите свои проекты. Начинайте с малого и старайтесь не отходить далеко от первоначально поставленной задачи.
  • Сохраняйте гибкость и порядок при разработке ассета.
  • Проверяйте свою текстуры Substance painter, используя способы которые я указывал ранее.
  • Не торопитесь. В настоящее непростое время для художников важно сосредоточиться на качестве работы и делать свое дело с душой.

В заключение я хочу поделиться с вами мудрым советом от уважаемого мной человека, который ответил на мой вопрос: "Что бы вы посоветовали самому себе в молодости?"

Все великие достижения, которые вы наблюдаете — будь то игры, изобретения или технологии — созданы обычными людьми, такими же, как и вы. Они не умнее вас, не талантливее. Зачастую, те, кто добивается успеха, начинали в не самых благоприятных условиях. Их главный секрет в том, что они не сдавались и продолжали идти вперёд, несмотря на любые трудности. Многие люди сдаются на пути к результату, особенно когда видят вокруг себя тех, кто кажется умнее, талантливее или успешнее. Но это ошибка. Остальные люди не умнее и не талантливее вас.

Талант, на самом деле, переоценен. А вот настойчивость, по моему мнению, недооценена.

Отдельно хочу выразить свою глубокую благодарность всем, кто поддерживал меня на протяжении этого проекта. Ваша поддержка была бесценной.

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

This article was originally published on 80 Level in English under Breakdown: Texturing Weathered Wood Barrel. Interview conducted by Gloria Levine.
Original post:

Gamedev: как рисовать бочки?

Так же вы можете поддержать эту статью на Artstation:

2525
77
19 комментариев

Ничего в этом не понимаю, но, чел, харош

3

Спасибо!

1

блин ну мега хорош, жесть лонг большо вышел
уважение

1

Спасибо!

2

Это позволило сэкономить место на UV, но при этом не визуально не видно что нижние части повторяются.Сломал меня на секунду, исправишь?

1

Спасибо!

2

Нижние три доски слева и справа дублируются оверлапом радиальным (180 градусов). То есть не миррор по одной оси, а по двум...