Примечание: тема вышла очень обширной, даже в один пост не влезает, так что придётся разбить её надвое. Второй пост тут.
Итак, после того, как все составляющие закончены (за исключением одежды – это отдельная тема), можно приступать к текстурированию. Оригинальные игровые текстуры оставляют желать лучшего: у них низкое разрешение, недостаточная детализация, а в импортированных вместе с моделью материалах присутствуют лишние элементы, вроде Light Map, в виде дополнительной текстуры, которая подмешивается к основной.
Вот что она собой представляет в чистом виде. Это сделано для упрощения расчётов в игровом движке, и имитирует контактные тени. По сути, это Ambient Occlusion, только назван по-другому. Помимо тела, такое встречается почти на всех элементах. Мне это не нужно, у меня всё будет просчитываться физически корректным способом, так что от этого будем избавляться.
Первой переделанной текстурой стала текстура глаз. Если честно, я занялся ею даже ещё до того, как приступил к волосам. Оригинальная имела размер 1024х1024 пикселя, почему-то инвертированную карту бликов (наверное, в другом движке она интерпретировалась правильно), также отсутствовали нормали. Выглядело это так:
Лишний блик прямо на зрачке, при этом остальная часть сухая как штукатурка – ровно наоборот.
Новую текстуру для глаз я создавал довольно интересным способом, подсмотренным на ютубе на канале Ниворд. Вкратце проиллюстрирую на следующей картинке.
Я отрендерил пару вариантов, меняя настройки, чтобы получились радужки разной степени реализма. После чего скомпоновал их в фотошопе, используя маски и режимы наложения, пока не достиг желаемого результата. Таким же образом сделал всё для карты шероховатости и нормалей. После чего, наконец, собрал всё воедино для текстуры целого глаза. Радужки я отрендерил в размере 2048х2048, а вот вся целиком текстура глаза, вместе с белковой частью, имеет размер уже 4096х4096. На белковую часть также наложил едва заметные кровеносные сосуды. Они были и на оригинальной текстуре, только я не стал отрисовывать каждый сосудик, а просто накинул готовые. Паттерн чуть иной, но это не страшно. Вот как выглядит моя текстура в сравнении с игровой:
Если на таком масштабе всю разницу в деталях, скорее всего, и не увидеть (да и пикабу сожмёт картинку в любом случае), то на самой модели она более чем очевидна:
Здесь, кстати, видно и то, как роговица отражает падающий на неё свет от окружающей среды. Таких текстур я сделал две, для левого и правого глаза, они слегка отличаются рисунком радужки.
И ещё тут можно заметить, как изменились ресницы. Их я, естественно, тоже переделал. Оригинального размера в 512 пикселей явно мало. В отдельном файле я положил старую текстуру в качестве фона, и смоделировал по ней вот такую вещь:
Это не что иное, как Hair Curves, расположенные по обведённому контуру. Каждая из этих ресничек точно повторяет оригинал.
Вот уже с этого файла я отрендерил чёрно-белый силуэт для альфа-канала, карту глубины, и карту нормалей. Всё в разрешении 2048х2048. Глубина в итоге не понадобилась по прямому назначению, но я смешал её с основным цветом, чтобы получить небольшое разнообразие и дополнительную детализацию.
Закончив с глазами и ресницами, я приступил к основной части, а именно – текстурированию тела. В оригинальной модели текстура была представлена двумя блоками: со стороной 1024 пикселя для лица и головы, и 2048 для всего остального тела, но во второй блок была запечена ещё и текстура плаща. Все текстуры, за исключением лицевой, были нарисованы односторонними, так как оригинальная развёртка также была односторонней, и лишь отзеркаливалась.
С UV-развёртки и начался процесс, так как без этого никакого адекватного покраса быть не может. Я сохранил оригинальную развёртку лицевой части, чтобы ориентироваться на неё при работе, и чтобы максимально сохранить черты лица. Остальную же пришлось делать с нуля, и ничего общего с первоначальной она не имеет.
Перво-наперво размечаем швы.
Затем, когда всё размечено, применяем модификатор «симметрия», и делаем первичную развёртку. В новой версии блендера появился алгоритм, позволяющий разворачивать геометрию с минимальными искажениями. Но, даже с ним, без ручных правок не обойтись.
Создаём временную текстуру с шахматным рисунком, это позволит видеть, насколько хорошо развернулся тот или иной элемент, что и где поправить, а также отрегулировать масштаб и привести всё к общему знаменателю.
Там, где клеточки меньше – больше детализация, и наоборот. Самая высокая детализация, конечно же, должна быть на лице, там вы видите самые мелкие клеточки.
Постепенно, развёртка приобрела следующий вид:
Красным выделены закреплённые точки, то есть те, на которые влияние развёртывания не распространяется, однако от них зависит, как поведут себя все остальные. Закреплять точки полезно, если, например, нужно получить симметричную развёртку туловища, или поправить развёртку какого-то участка, не меняя его целиком.
Как видите, развёртка заняла целых три слота, и возможно, кто-то скажет, что она слишком неэкономно расходует пространство. Ну, во-первых, пространства мне не жалко, железо позволяет, а во-вторых, мне нравится, когда островки расположены упорядоченно и симметрично. Не для игры, в конце концов, делается.
Три слота означают, что текстура тела Эльзы будет состоять из трёх изображений, связанных между собой. Это называется UDIM, и такой подход очень распространён в 3D-индустрии. Главное – соблюдать синтаксис в именах файлов. Текстура первого квадрата должна иметь окончание 1001, второго – 1002, и так далее. Так блендер поймёт, в каком порядке ему их загружать. А сами текстуры при этом можно рисовать в чём угодно, принципиальной разницы для блендера здесь нет.
Для блендера, может и без разницы, зато я считаю иначе. В самом блендере есть инструментарий для рисования текстур, но реализован он не лучшим образом, и подходит разве что для простых зарисовок, набросков, или текстур небольшого размера. Он глючный, постоянно тормозит даже при простых действиях, и у него мало возможностей. Фотошоп тем более не годится, там даже понимания развертки нет.
Поэтому не мучаемся, откладываем блендер в сторону, и открываем программу, созданную специально для задач текстурирования – SubstancePainter. Но, прежде чем начать в нём рисовать, надо экспортировать из блендера соответствующий меш. Выбираю тело Эльзы, отключаю все сглаживающие модификаторы, и экспортирую выделенное в файл формата obj. На его основе уже создаётся новый проект в пейнтере, и я приступаю к покрасу.
Покрас Эльзы я начал с того, что добавил на модель оригинальные текстуры. На них я буду опираться при работе. С шероховатостью и нормалями беда полная, но пока я их не трогаю, работаю чисто в режиме цвета.
Первый этап – глаза. Создаю для них новую папку, а внутри этой папки – новый слой-заливку с основным цветом. Прячу его под чёрной маской. Затем аккуратно, стараясь не затрагивать лишние зоны, закрашиваю весь макияж, внутреннюю поверхность век, ну и брови. После этого на новых слоях сглаживаю переходы, добавляю оттенки. Образцы цветов беру прямо с модели. После того, как старые глаза и брови полностью скрылись, создаю ещё одну папку, в которой уже рисую веки заново. Это очень кропотливая работа, нужно попасть и в цвет, и соблюсти форму. Постоянно переключаю видимость на прежнюю текстуру, чтобы видеть разницу.
Макияж довольно комплексный, с кучей деталей и оттенков. Если в первой папке, которая лишь скрывает старые глаза – пять слоёв, то во второй, где нарисованы новые – уже целых семнадцать.
Таким же способом рисую брови. Сперва симметрично, затем добавляю немного вариативности для левой и правой. Брови – простой объект, и мне понадобилось всего четыре слоя.
Дальше – нос, вместе со щеками. Десяток слоёв – и кожа приобрела более ровный цвет и лучшую детализацию. Немного побледнели веснушки, но я займусь ими чуть позже.
В принципе, что касается лица, то процесс на всех его частях был более-менее одинаков. Поверх старой текстуры создавались новые слои, сглаживающие цвет и добавляющие детали.
А вот что насчёт волос, которые нарисованные. В принципе, с ними можно было вообще не заморачиваться, но я решил сохранить их, и также доработать. Хоть их почти и не будет видно под настоящими волосами, о которых был предыдущий пост, но свой вклад они вносят.
Дальше, после того как голова и лицо сделаны, перехожу к телу. Собственно, там почти нечего делать – так, добавить слегка вариативности коже, где-то побольше румянца, где-то веснушек. Просто в данном конкретном случае тело – не та вещь, на которой будет фокусироваться внимание. Уверен, и в самом Диснее придерживаются этой логики. Другое дело, если бы это была 18+ модель – вот там бы пришлось заморочиться над деталями, и особенно в некоторых местах.
А вот на кистях рук и стопах следует проявить чуть больше усердия. На руках прокрашиваем красноватым цветом места суставов, ладонь, подушечки пальцев, слегка тёмным цветом подчёркиваем тени в складках. То же самое и на ногах.
И наконец ногти. Просто заливаем все полигоны, из которых они состоят, телесным цветом, и рисуем более светлую полоску. Впоследствии мне придётся слегка поправить этот элемент, так как при подразделении полоска некрасиво выгибается, но это я сделаю уже средствами самого блендера.
На этом покрас основного цвета закончен, и остались шероховатость с нормалями. Если насчёт шероховатости особых сложностей не было – просто настроил каналы в уже созданных слоях, то вот с картой нормалей пришлось повозиться.
Итоговую карту нормалей я создавал путём смешения нескольких. Частично задействовал исходную карту, некоторые участки там оказались удачными. Ещё, на таких местах, как например губы или кисти рук – нарисовал детали в Substance.
Для волос и бровей я использовал этот сервис генерации нормалей из картинок, и загрузил туда уже готовую мою текстуру цвета.
Возвращаемся в блендер, в нём мы будем запекать ещё один источник для итоговой карты нормалей. Я взял меш Эльзы, закинул его в отдельный файл, и применил к нему модификатор Multiresolution. Там, на третьем уровне подразделения, просто подчеркнул наиболее важные складки у глаз, губ, носа, ушей и пальцев. Очень хорошо при этом стали выглядеть ногти, что пригодится при создании итоговой карты.
После этого запекаю нормали, и возвращаюсь в Substance Painter. Создаю новый проект, и загружаю туда целых четыре набора: исходный, ранее экспортированный из SP, запечённый в блендере, и сгенерированный сайтом. У каждого есть свои достоинства и свои недостатки. Моя задача – смешать все эти наборы так, чтобы сохранить лучшее от каждого из них, а все огрехи скрыть.
Готовую карту нормалей сохраняю также в UDIM с правильными суффиксами, подгружаю в основной файл блендера. Почти готово! К сожалению, в один пост не влезает больше 25 картинок, и продолжение будет во втором посте, который выйдет одновременно с этим. А пока предлагаю сравнить то, что получилось, с тем, что было.