Олег leshiy Шеховцов

Freelance CG Artist

Маги, Люди с большой буквы, и девизом их было - "Понедельник начинается в субботу". ... И они приняли рабочую гипотезу, что счастье в непрерывном познании неизвестного и смысл жизни в том же. Каждый человек - маг в душе, но он становится магом только тогда, когда начинает меньше думать о себе и больше о других, когда работать ему становится интереснее, чем развлекаться в старинном смысле этого слова.повесть братьев Стругацких «Понедельник начинается в субботу»
© 2024 Oleg Shekhovtsov

DOTA2 Texture Guide

Небольшое руководство по работе с текстурами в Photoshop для Мастерской DOTA2 с использованием моего скрипта. Гайд получился больше технический, но это и славно…

В детали уходить не станем — в основном, речь пойдёт про общие принципы, особенности новых инструментов Source2 и трюках, связанных с моим скриптом для Photoshop.

А проведём мы разбор на примере вот этого безумного Сквига, созданного на конкурс по вселенной Warhammer. Я делал только текстуры, но он хорошо подходит для объяснения.

С отдельными предметами для героев или вардами всё будет то же самое…

Подготовка

Прежде всего, у вас должны быть под рукой готовая геометрия (хотябы lod0) и все необходимые бейки (Normal map, Ambient occlusion и тд).

Берём мой шаблон для текстур DOTA2, закидываем в рабочую папку проекта/слота и переименовываем. В моём случае это будет squig.psd.

Желательно, чтобы имя исходного PSD-файла совпадало с названием рабочей сессии/предмета в Item Tools.

Открываем файл и выставляем необходимое разрешение (я всегда ставлю х4 от игрового). Закидываем карту нормалей в соотвествующую группу, сохраняем исходник и прогоняем через texExport скрипт.

На выходе мы получаем первичный набор текстурных карт для корректной компиляции ассета в DOTA2 Item Tools:

dota_texture_session

Имена групп (суффиксы выходных файлов) в шаблоне назначены таким образом, что Item Tools самостоятельно подхватит все каналы, как только вы укажете один из них (например _color).

Вот тут-то и начинаются хитрости:

Трюк первый

Для удобства работы, мы можем убрать ограничение на разрешение выходных текстур, чтобы лучше контролировать швы:

dota_texture _trick

Данную операцию необходимо будет повторить для каждого канала.

Конечно же, это только временная рабочая настройка, и при повторной компиляции через Item Tools все значения будут сброшены.

Трюк второй

И самый интересный… Можно не закрывать текущую сессию, тулзы или игру.

Берём наш исходниый PSD-файл и копируем его в следующую директорию:

[DOTA2]\content\dota_addons\workshop_testbed\materials\models\items\courier\squig

Внутри вы обнаружите vmat-файл, содержащий основные параметры шейдера, tga-файлы для каждого канала шейдера и соответсвующие им txt-файлы со значениями выходных разрешений растра (Если вы уже провернули первый трюк — эти файлы не будут содержать значений).

TGA-файлы являются переименованной копией ваших текстур, а имена формируются компилятором как [session name]_[channel].tga. (Отсюда и появилась рекомендация про имя PSD-файла.)

Директория workshop_testbed является дерикторией модификации, запускаемой Item Tools. И фишка в том, что движок игры регистрирует любое изменения исходных файлов в content и автоматически вносит изменения в уже скомпилированные двоичные ресурсы, используемые игрой, по адресу game:

[DOTA2]\game\dota_addons\workshop_testbed\materials\models\items\courier\squig

Поэтому, закрываем старый PSD и продолжаем работать в новом. При этом, каждый проход скрипта будет обновлять эти самые исходные файлы, так как имена каналов в шаблоне совпадают с присвоенными компилятором игры. А это означает, что ассет будет обновляться и в самой игре в реальном времени… Ну, через пару секунд =)

При желании, вы можете скрыть или удалить неиспользуемые каналы в PSD-файле, но я обычно их оставляю.

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

Разработка

И так, мы имеем рабочий ассет, залитый солидным цветом, с картой нормалей и некоторые усреднённые значения масок из шаблона:

dota_texture_00

Материалы

Первый и самый важный этап — это разбиение на материалы. Не цвет, не тон, а именно материалы — комплексные сущности, отличающиеся по своим физическим характеристикам и реакцей на свет. (Работаем в канале цвета)

Конечно, лучше будет для начала поработать с прозрачностью (trans), но в моём случае она не используется.

Важно, чтобы материалов не было слишком много, иначе вы просто запутаетесь или результат превратится в кашу (не забываем про выходной размер текстур). Поэтому отделяем только общие сущности, такие как дерево, металл, стекло, кожа и тд. Каждый такой материал обозначаем с помощью Solid Color Fill Layer (это позволит вам быстро менять цвет), группируем его и назначаем имя.

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

Затем, опираясь на карту нормалей и другие бэйки, создаём маски для каждого материала. Тут важно будет контролировать соотвествие границ каждого материала рельефу карты нормалей и стыки на швах UV-развёртки.

Для ускорения процесса можно задействовать ID-карты.

dota_texture_01

Последовательность наложения материалов друг на друга я обычно задаю исходя из удобства дальнейшего создания шейдерных масок: металлические части выше.

Если в материале предполагаются вложения (подматериалы, такие как разные типы дерева или металла) — то просто добавляем новый индикатор в соотвествующей группе материалов и маскируем слой. Тут главное не увлекаться и не плодить сущности… Всё это, так или иначе, уйдёт в нюансы и будет перерисовано.

Маски

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

Благодаря тому, что на цвете мы уже имеем зафиксированные зоны для каждого материала, нам нужно только создать Solid Color Fill Layer для соответствующих участков и скопировать маски.

Вложенные материалы удобно добавлять через Clipping Mask.

dota_texture_02

Детали

Ну вот и всё. Теперь можно смело делать финальный цвет. Где и какими средствами — эуто уже дело вкуса и задачи: для каких-то материалов подойдёт процедурная генерация, где-то придётся порисовать (можно по модели, можно в плоскости) — суть от этого не изменится, а цель у нас одна…

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

Значения сплошных шейдерных масок станут точкой отсчёта для разноса деталей по уровням.

dota_texture_03

По окончанию работы заменяем наш самый первый PSD-файл на новый, с помощью texExport обновляем все TGA-файлы и проверям результат в финальном игровом разрешении.

Конечно же, можно обойтись и без этих манипуляций с копированием туда-сюда, но я люблю, когда проект целиком хранится в отдельной директории… А ещё я люблю бэкапы =^__^=

Более подробные рекомендации по художественной и технической части вы можете прочитать в официальных гайдах от Valve.

Спасибо за внимание. Заходите ещё! Удачи и бобра!