Параметрическое текстурирование глаза
Денис Ахматов специально для блога 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
Автор: Денис Ахматов