Top
Making ofSubstance DesignerНовости

Параметрическое текстурирование глаза

Денис Ахматов специально для блога 3dpapa рассказал о процессе работы над своим проектом по созданию параметрических ассетов для персонажей.

Введение

Привет! Меня зовут Денис Ахматов, и нет, я не родственник великой поэтессы)).

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

Тогда я совершенно не знал, что такое 3d моделирование, UV-развёртка, текстурирование и т.п. Первым моим 3d редактором стал Zbrush, одного скульптинга было недостаточно и пришлось изучать полигональные 3d редакторы.

Первым из них стал 3D Max, но долго я в нём не проработал, так как его вытеснила Cinema 4d с более приветливым и русскоязычным интерфейсом. Изучая различные аспекты моделирования и работы с 3d моделями, я проработал в синьке более двух лет, но за это время у меня получилось только несколько приличных работ.

Далее я подумал, что нужно как-то выходить на более профессиональный уровень и начать решил со смены редактора. Примерно за полгода я изучил почти все самые популярные 3d редакторы: Modo, Blender, повторно попытался работать в 3D Max, пытался изучить Houdini, но он оказался сильнее меня, и наконец остановился на Maya.

Maya полностью устраивала меня в плане функционала и предоставленных инструментов. И именно с Майи начался мой путь работы в технике гейм-продакшена. Именно тогда я проявил интерес к продуктам компании Allegorithmic, игровым движкам и PBR в целом.

На данный момент я учусь на последнем курсе магистратуры, на факультете промышленного дизайна, занимаюсь гейм-артом, изучаю персонажку и левел-дизайн, в свободное время моделирую материалы в Substance Designer.

Довелось поучаствовать в съемках документального фильма о промышленном дизайне в СССР «Техническая Эстетика: дизайн на Урале»

Модель

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

 

Модель глаза состоит из двух объектов Body и Gloss, при этом каждый из них обладает своим материалом/шейдером. Body несёт на себе цвет глаза, то есть текстуры Albedo, Normal и Roughness. Gloss имеет только карту Normal и прозрачность с каналом рефракции 1,01 (в ходе экспериментов ior 1,01 показывает себя лучше, чем 1,3, который должен быть правильным с физической точки зрения). Для рендера использовался Marmoset 3.02.

Полигонаж данной модели 1000 треугольников, это слишком много для игрового продакшена и мало для кино-продакшена, но вполне достаточно для наглядного осмысления работы.

Развёртка объекта

Опять же для наглядности, будет один UV-сет на шейдер. В дальнейшем всё можно будет отмасштабировать под персонажа.

Развёртка объекта Gloss:

Развёртка объекта Body:

Боковые шеллы объектов пересекаются, а центральные разнесены:

Текстурирование

Радужка

Далее я продолжал работу в Substance Designer (SD).

Многие спросят, а зачем для этого использовать SD, если можно всё сделать в Substance Painter, Mari или Photoshop? Суть работы в SD заключается в процедурах, проводимых над исходным объектом, то есть если я, допустим, изменю исходный объект, то конечный результат тоже изменится.

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

В SD я использовал в качестве модели во вьювере только объект Body, так как я не использовал альфа-маску для Gloss. Изначально разрешение текстуры стоит взять побольше, так как потом сжать её до необходимого размера будет проще, чем расширить.

Всё начинается с двух простых форм, с одной окружности, которая будет радужкой, и другой, которая будет зрачком.

Далее я подготовил шум, который будет основой для текстуры радужки. Для этого я взял Anisotropic Noise, применил к нему Slope Blur, а потом Warp, что дало волнистые складки на текстуре. Обе эти ноды питаются от шума Fractal Sum Base, с разными параметрами Min и Max Level. Затем был применён Cartesian To Polar, который превратил полученные складки в радиальную структуру.

Чтобы придать текстуре неоднородность, я воспользовался нодой Tile Generator, пропустил её через Slope Blur и использовал результат в качестве канала Slope в ещё одной ноде Slope Blur, к которой в канал Grayscale был подключен радиальный шум.

Из полученного результата я вычел текстуру, которая питала Slope, получив тем самым тёмные пятнышки. Далее путём вычитания маленькой окружности из большой, применением Blur HQ и регулировкой по уровням была получена маска радужки. Затем я умножил её на радиальный шум.

Затем я применил к текстуре, из которой были получены пятнышки, Slope Blur и Cartesian To Polar и добавил её к текстуре радужки.

Далее путём сложения и вычитания предыдущих элементов, была получена следующая часть текстуры:

Далее пропуская окружность через Slope Blur были получены следующие вариации масок для цвета.

Цвет

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

Далее через ранее полученные маски накладывался цвет:

Затем те же маски послужили в качестве информации для получения карты нормалей:

Сосуды

В начале я умножил Gradient Linear 1 на Gradient Linear 2, получив тем самым градацию от чёрного к белому по трём направлениям. Затем сжал его при помощи ноды Transform и размножил в Tile Generator.

Далее при помощи Warp и Directional Warp получил волнистые лини и ограничил их с правой стороны градиентом.

Затем необходимо было сделать крупные сосуды. Я использовал Tile Generator и приём для получения структуры Вороной, к которой был применён Warp. Из полученного результата был вычтен результат следующей последовательности Tile Generator, Levels, Distance, Levels.

Далее к полученному результату применялись уровни, текстура ограничивалась градиентами и использовался блюр.

Далее обработав шумы по уровням была получена текстура самых мелких, фоновых сосудов.

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

Полученную текстуру я использовал как маску для цвета и информацию для получения карты нормалей. Затем отмасштабировал и добавил текстуры радужки, предварительно ограничив их маской. Последнее самое простое, карта Roughness, сделанная из двух сложенных окружностей с разницей в Opacity 35%.

 

Визуализация

Всё предельно просто, все текстуры по своим каналам, у материала объекта Gloss канал Transparency поменять на Refraction с показателем ior 1.01

Автор: Денис Ахматов