July 30, 2020

Искусство создания органических 3D-моделей: субдермальные шейдеры

Скульптинг

Для скульптинга основных объёмов я использовал ZBrush. Я не строго придерживался формы, потому что хотел, чтобы образ хорошо читался на расстоянии. Очень часто я сильно отдалял модель, чтобы проверить её. Для получения удовлетворительного результата мешу пришлось претерпеть множество итераций. Кстати, можно воспользоваться режимом ZBrush «see-through» и сравнить свой скульптинг с 3D-сканами на Sketchfab.

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

Совет: используйте контурный шейдер или чёрный материал, чтобы постоянно проверять силуэты модели.

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

  • Добавьте в сцену вспомогательный объект единичного размера, перенесите его с помощью GoZ в 3D-пакет, отмасштабируйте до 10мм и верните через GoZ обратно в ZBrush.
  • Теперь перетащите Transpose Line с одной стороны куба на другую и задайте масштаб в 1 Unit. Так вы сможете использовать Transpose Line, которая считывает точные значения.

Я скульптил каждый зуб по отдельности и это даёт мне полный контроль над запеканием в Toolbag или в Substance Painter. Если каждый инструмент (subtool) будет храниться отдельно, то это обеспечивает гибкость при необходимости модифицирования зуба. Когда я понял, насколько сложны на самом деле человеческие зубы, этот метод позволил мне прислушиваться к отзывам других художников и без проблем устранять недостатки форм. В первом проходе некоторые детали преувеличены, а другие отсутствуют:

Совет: из-за особенностей реализации подразделений (subdivisions, SD), при возврате к уровню 1 SD меш может сжаться. Это приводило к нежелательному эффекту, ведь мои зубы, дёсны и blend mesh должны идеально сочетаться. Я написал макрос, сохранявший morphtarget меша перед каждой командой subdivide и восстанавливающий его исходный объём.

Я использовал этот макрос как мою основную команду subdivide, привязанную к CTRL+D. Скрипт можно скачать отсюда.

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

Плавность расположения полигонов зубов и дёсен помогает blendmesh сохранить все сложные формы.

Всегда нужно поддерживать равновесие между низкополигональностью и количеством опорных рёбер. С самого первого уровня SD я стремился к созданию чёткого силуэта зубов:

Вот пара хороших ресурсов по топологии:

Закончив с топологией и скульптингом, я импортирую decimated-меши в Marmoset Toolbag. Это помогает получить общее представление о внешнем виде модели при разных моделях освещения.

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

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

В ZBrush можно нарисовать тонкие трубочки в полостях, которые будут обозначать скопления слюны. Мы используем их только для запекания. Таким образом мы получим плотно прилегающий вогнутый blendmesh плюс нормальную карту, напоминающую выпуклую форму. Это пригодится в рендерере реального времени, потому что во впадинах мы получим красивые отражения, как показано на этом изображении:

UV-развёртка

Можно импортировать меши в 3ds Max или другое похожий пакет для создания развёртки и планировки текстуры. Мне хотелось сохранить UDIM-развёртку, чтобы иметь готовую к продакшену модель на разных платформах. Я перенёс через GoZ мои инструменты 3ds Max для указания швов разрезов, а затем выполнил «quick-Peel» и операцию упаковки. Затем вернул всё через GoZ обратно в ZBrush, чтобы воспользоваться его мощным инструментом создания развёрток («use existing seems»). Это очень важно, если вы хотите экспортировать карты смещений из ZBrush.

Совет: многое о развёртках можно узнать у Тима Бергхольца.

Раскрашивание текстур и смещение

После создания развёртки можно загрузить модель в Substance Painter, чтобы раскрасить её.

  • Albedo

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

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

  • Roughness

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

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

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

  • Непрозрачность для blendmesh

Сначала выберите для этого набора текстур отдельный шейдер. Идеальные результаты получаются с шейдером «metal/rough-with-alpha-test». К другим наборам текстур примените «skin-shader».

Добавьте в «Texture Set Settings» канал opacity и создайте fill layer внизу стека слоёв с нейтральными нормалями и обнулённой информацией об opacity.

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

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

Совет: экспортировать свою маску можно через меню набора текстур или просто нажав правую клавишу мыши на стеке маски и выбрав «Export mask to file».

  • Displacement

Карты смещений я экспортировал из ZBrush.

В нём есть удобная функция, анализирующая инструменты и выравнивающая карту смещений, чтобы покрыть все высокие и низкие значения. Я использовал Multi Map Exporter, чтобы объединить отдельные инструменты с относящимися к ним тайлам UV, использовав следующие параметры:

Шейдер

Для каждого набора текстур я создал в Marmoset Toolbag свой шейдер. Это позволило мне использовать разные параметры шейдеров для языка, зубов и дёсен.

Перед настройкой шейдеров SSS и смещения важно правильно задать масштаб сцены. В Toolbag есть ползунки «Scale» и «Scale-Center», и я воспользовался ими, чтобы подчеркнуть эффект смещения:

  • Шейдер зубов

В Toolbag есть хороший подповерхностный шейдер, который при наличии качественных карт может создавать отличные результаты. Чтобы добавить вариативности в запечённую карту нормалей, я использовал карту нормалей деталей. По своей природе зубы кажутся просвечивающими (translucent), и в достижении этого эффекта сильно помогает хорошая карта просвечиваемости (translucency map). Я запёк в Substance Painter карту толщины и изменил её в соответствии со своими потребностями.

Вот параметры моего шейдера для зубов:

Модель затенения

Я считаю, что самое важное в шейдере зубов — это модель отражения, для которой я выбрал параметр «Refractive». Индекс преломления определяет, насколько путь луча искажается или преломляется при попадании в материал. Очень важно придать материалам правильный внешний вид. Изучив вопрос, я узнал, что IOR дентина равен 1.540.

Чтобы подчеркнуть сниженные значения отражаемости во впадинах, я добавил в шейдер карту полостей и передвинул ползунок «specular cavity» на 0.4. Ползунок Diffuse Cavity я оставил на нуле, потому что моя Albedo map уже содержала заливку полостей красным цветом.

Вот сравнение между моделями преломлённого и зеркального отражения:

Совет: посмотрите объяснения модели зеркального отражения в видео Джо Уилсона и Ли Деновалда:

  • Шейдер дёсен

Физически верное значение зеркального отражения для кожи примерно равно 0.028. Это стало для меня хорошей опорной точкой.

Для дёсен я увеличил этот показатель до 0.07. Здесь нужно придерживаться низких значений, иначе шейдер может создать эффект металла. Придать результату убедительности может небольшой Fresnel.

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

Совет: здесь можно узнать о техниках реалистичного рендеринга кожи в реальном времени.

  • Шейдер слюны

Для создания убедительной слюны в Toolbag можно использовать разные режимы прозрачности.

Для идеального смешения между зубами и дёснами я использовал метод Refraction with Dithering. Вот параметры шейдера:

Результат, полученный после использования описанных техник:

Заключение

  • Очень важно использовать ресурсы, которые поначалу кажутся неочевидными. Для изучения анатомии полезны данные сканирования.
  • Уделите достаточно времени этапу моделирования и убедитесь, что меш хорошо читается и имеет крепкую структуру в своей основе.
  • Подписывайтесь на блоги об интересующей вас области знаний. Находите единомышленников и общайтесь с ними!

Это был очень увлекательный проект. У него всё ещё есть «шероховатости», но он стал отличным обучающим процессом по анатомии и материалам.

Упрощённую модель для своих проектов можно скачать здесь.

Спасибо за чтение! Надеюсь, эта статья была вам полезна.