Создание шейдера кожи в Майе 4.5

(урок рассчитан на пользователей, знакомых с интерфейсом Майи)

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

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

1. http://www.CGTalk.com- разбор шейдера кожи в Майе
2. http://www.3dcenter.ru - разбор шейдера кожи в Максе
3. Chris Kniffen - лучший урок по UW
4. http://www.3dtotal.com - хороший урок по шейдингу кожи
5. http://optidigit.com/stevens/shadetut.html - лучший урок по шейдингу кожи
6. http://www.Pixho.com - урок по созданию качественных бликов

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

Урок был написан используя материал 4 и 5ого пунктов. Огромная благодарность выражается Стивену Сталбергу за предоставленный материал и помощь (many thanks are expressing to mr. Stiven Stahlberg ).

Извините за плохое качество текстур, к тому моменту, как вы прочитаете этот урок, голова будет уже закончена и работа над текстурами, соответственно, завершена. Т.е. качество будет на уровне ...

В этом уроке я постараюсь подробно объяснить создание шейдера кожи одним из лучших и реалистичных способов, я не буду уделять много внимания текстурированию и освещению т.к. это уже не относится к шейдингу, уж извините. Итак, вооружимся терпением и приступим :

Часть 1: Освещение.

Освещение в сцене играет огромную роль. Оно очень сильно влияет на восприимчивость работы, на её реализм. Освещением можно передать всё душевное состояние персонажа, его эмоции, его настроение и многое другое... В принципе не только персонажа, но и всего, что его окружает... Итак, в моей сцене присутствует 3 Direct, 1 Spot источник света и 1 point light во рту - для того чтобы немножко затемнить ротовую полость т.к. она освещается другими источниками, путём ввода в Intensivity значения с отрицательным знаком "-" и включением Decay (это для того, чтобы затемнилась лишь часть лица, т.к. decay - это спад световой энергии с увеличением расстояния).

Часть 2: С чего всё начиналось ...

А начиналось всё с того, что был создан "Слоёный материал" ... Откройте Hypershade и создайте материал Layered Shader в окошке Graph, назовите его, допустим, Out_skin. Это будет наша финальная версия шейдера, отражающая результат всей нашей работы, в него мы будем вставлять остальные материалы, накладывая друг на друга. Не забудьте применить этот шейдер на вашего персонажа. На самом деле пользоваться этим материалом очень просто : просто накладываем один материал на другой и регулируем его свойства. Лучше всего регулировать прозрачность непосредственно в самих подключаемых материалах...

Теперь создадим материал Lambert ( это может быть так же и любой другой материал при условии, что значения его бликов будут сведены на ноль, например : Blinn, Phong, PhongE, я использовал Blinn, так же можно поверх добавить такой же материал, только цвет блика изменить на негативный, я обычно использую значение, равное -0,1) и закинем его в первый слой нашего Out_skin. Приступаем к работе над этим материалам, он будет являться основой всей работы так сказать...Lambert создаётся для того, чтобы кожа не имела лишних бликов, свет распространяется плавно и равномерно по поверхности материала. Т.е. нам нужен матовый материал (так же можно и даже будет чуть лучше использование Oren-Nayar материала, если найдёте. Этот же эффект можно достигнуть, при добавлении поверх основного кожного материала другого, с отрицательным значением цвета блика, как об этом было сказано выше).Соедините вашу цветовую карту(текстуру) с цветовым каналом Lambert-а и по желанию карту рельефности. Итак, после того как мы положили out_skin на модель мы получили что-то, похожее на зомби, кожей конечно!

Кожа кажется мёртвой, никаких признаков жизни в ней не наблюдается. А какие собственно есть сами признаки жизни? В первую очередь это температура! Кожа должна излучать тепло. Поэкспериментируем со значениями ambient color & incandenscense до тех пор, пока не получим желаемого нагрева, только не переборщите ;) Я же нарисовал карту в фотошопе и кинул её в ambient и incandescense каналы. Невозможно получить нужный результат сразу же после наложения (по крайней мере у меня так бывает), и, чтоб не мучаться каждый раз в фотошопе, я подключил одну из утилит свитка Color Utilites. Эти утилиты могут быть связаны с вашей картой и позволяют осуществлять контроль над изображением в самом Hypershade. Стоит только подключить эти утилиты в Color Gain для затемнения или в Color Offset для высветления и отрегулировать степень воздействия и карты тут же изменятся потянув за собой и сам шейдер. Только не рвите на себе волосы если в окошке со связями не получается подключить OutValue утилит к ColorOffset или ColorGain материала - нужно нажать на знак "+" и соединить утилиту с R,G и B каналами.

Выглядит неплохо, но по-прежнему не очень реалистично... Не забудьте учесть окружающие человека условия - т.е. если это мороз, то цвет ambient & incandenscense channels должен быть розоватым или голубоватым, если же это жаркое солнце, то оранжеватым...

Отступив от урока мистера Стивена Сталберга я от себя добавил несколько новых узлов (добавил Diffuse, Reflected и Translucece карты, это тоже имеет большое значение). Diffuse - определяет участки интенсивного и неинтенсивного попадания света на кожу, Reflected color - даёт интересные цветовые оттенки в нужных местах, translucence - местами имитирует подкожное рассеивание света, конечно же всё это зависит от карты (о картах мы поговорим в шестой части).

Часть 3 : Имитация подкожного рассеивания.(translucency fake)

Терминология Стивена Сталберга : Дневная сторона, Ночная сторона и Терминатор. Я думаю объяснять не надо. Скажу лишь, что на дневную сторону должна попадать основная часть испускаемого света, на ночную - меньше, совсем чуток, ну а терминатор - это пространство между этими двумя сторонами. Настройте цвета Ramp так, чтобы дневная сторона имела голубоватый оттенок, терминатор - красноватый, ну а ночная сторона - красноватый, или чёрный.

Вот здесь придётся повеселиться ;) Возьмите любой мультяшный шейдер, лучше чтоб он отличается простым контролем и хорошим результатом. Я использовал Simple Toon v1.0, который можно скачать, нажав сюда. Удалите из него всё лишнее и поменяйте начальный материал Blinn на Lambert дабы избежать ненужных бликов. Так же нужно сделать выходной материал (куда будет подключён мультяшный шейдер) прозрачным. В итоге у вас должно получиться так, как на картинке.

В Майе можно устанавливать значения цвета с отрицательным знаком, если делать так, то голубоватый цвет с отрицательным значением высосет сам себя и получится мощный тёмно-оранжевый цвет. Нажмите на цвет в градиенте, у вас откроется окошко с цветовой палитрой ... В свитке Sliders подряд идут 3 буквы : H - hue, S - saturation, V - value -это и есть нашё значение, в нём и введите в значение знак "-". Это даст вам хорошие и мощные тени в затемнённых местах. Если вы этого не сделаете, все затемнённые места будут ярко красными - т.е. фактически теней не будет вообще! Или будут, но очень слабые ;)

Так же существует и другой способ : вместо Sampler Info, Lambert и Ramp создайте Ramp Shader . Этот способ более новый и удобный в использовании... Дело в том, что пользуясь старой техникой, изменить прозрачность translucency_fake нужно затемнять сам цвет, Ramp Shader позволяет менять прозрачность без изменения самого цвета. Просто-напросто замените первые три звена на ramp Shader, и соедините с основной кожей (Blinn, или что там у вас) так же как и раньше - outColor a incandescence. Правда я ещё особо его не испытывал - предпочитаю старый, добрый и проверенный способ!

Короче говоря, смотрите : вот, что примерно должно получиться (конечно же вы можете отрегулировать translucency fake на ваш вкус)...

Так же можно добавить в Layered Shader материал, имитирующий SSS (Sub Surface Scattering). Существует куча таких шейдеров, но достать или сделать действительно хороший sss-шейдер очень сложно ! Я использовал SSS скрипт с сайта Emmanuel Campin.


Часть 4 : Создаём блики.

В этой части мы будем добавлять блики на поверхность кожи ... Как известно, кожа бывает сухой и влажной, и распространение и мощность бликов зависят от её состояния. При создании бликов лучше всего разделить их на два разных слоя : на первом слое будут расположены слабые блики, но распространятся они будут по всей поверхности модели чтобы придать ей влажный вид. На втором мощные и глянцевые блики, которые будут увеличивается в мощности относительно расстояния от поверхности объекта до источника света. Шейдер создаётся из прозрачных Blinn или PhongE (не имеет особого значения) материалов. Так же можно сделать один слой с Blinn материалом, а другой PhongE материалом.

Как я уже говорил, шейдер бликов состоит из 2ух материалов : один - мощный backlight блик, второй - слабый, но распространяется по всей поверхности модели.

Сейчас мы рассмотрим создание мощного блика на основе backlight shader-а. Самое главное, чего нужно добиться в материале бликов - интенсивность, уменьшающаяся относительно отдаления материала от источника света т.е. там, куда падает основной поток света блик мощный, широкий , дальше, где света становится меньше, блик ослабевает и становится прозрачнее и распространяется на меньшую территорию, приобретая голубоватый оттенок. В Майе этим можно управлять с помощью Ramp-ов и утилиты Blend. Лучше не делать блик слишком большим для того, чтобы не пересветить нейтральную сторону. Bump карта должна быть надета на блики в обязательном порядке и должна иметь большие значения, чем остальные рельефные карты. Шейдер бликов создаётся на основе Emmanuel Campin's backlight shader. Вы можете скачать шейдер, с официального сайта автора www.pixho.com .

Вот так должен выглядеть этот "backlight shader" при использовании Blinn :

Если жн вы хотели бы попробовать сделать backlight блик через PhongE материал, вы можете создать их так :

Как видите, различий, кроме материала, в шейдинге нет.

Не забудьте прикрепить bump к шейдерам бликов.

Поэкстпериментируйте со значениями рампа и бленда , и запомните, что PhongE должен иметь значение 0.8 в Roughness и 1.0 в Highlight Size, так же утилиту blend colors нужно полключить к PhongE через Specular Color. Для создания backlight блика нужно, чтобы утилита blend colors имела вверху небесно-голубой цвет, а внизу чёрный.

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

Baclight шейдером легче управлять, если установить материал блика, Blinn. Таким образом можно будет указать блику сильноосвещаемые и слабоосвещаемые места с помощью specular или diffuse карты. При использовании PhongE материала этого сделать нельзя, зато он выглядит более глянцево.

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

Вот как выглядит моя голова с бликами, имитирующими влажность (голова потная, поэтому мощность бликов на уровне):

А вот она же, только с бликом из backlight шейдера:

В заключении следует создать карту, такую же как translucence, но только с ушами и подключить её к incandescense каналу материала влажных бликов. Результатом будут покрасневшие уши. Отрегулируйте параметры покраснения на ваше усмотрение.

Часть 5 : Второй способ шейдинга.

Всё, о чём я говорил до этого относилось к уроку по шейдингу кожи от Стивена Сталберга. В этой же части я рассмотрю путь, предложенный Джулианом Джереми Джонсоном-Мортимером.

Итак, на самом деле большая часть этого тутора сделана на основе урока мистера Стивена, но есть и существенные отличия: отличие заключается в первых слоях. Стивен Сталберг предлагал использовать Ambient color и Incandesecense для "оживления" персонажа , Джулиан делает по другому.

Второй способ заключается в следующем: создаются два слоя, один из которых - просто "кожа", а другой - то, что под кожей ;) Вместо того, чтобы при помощи Ambient освещать саму кожу, мы создадим под ней эффект подповерхностного рассеивания с большим цветовым значением и придадим ему розоватый цвет путём вариаций с двумерными или трёхмерными встроенными процедурными шейдерами. Эффект подповерхностного рассеивания высветлит и оживит кожу в заданных местах и отпадёт нужда в создании Ambient color соединения.

Создаём материал Lambert и кидаем его в самый первый слой слоёного шейдера Out_skin. Это наш подкожный тёплый слой. Добавим к нему диффузную и транслюцентную текстурные карты. Так же добавим в Color шейдер Pinkskin, который можно скачать отсюда или сделать самому. Главное в этом pinkskin шейдере заключается в симпатичных вариациях цвета с розоватыми оттенками, добиться этого можно при помощи 3д текстуры Fractal, прибавив к ней одну из Color Utilites чтобы задать нужный цвет. Так же нужно добавить теплоты к слою при помощи Translucence fake, как я уже оговаривал раньше. В общем резудьтат должен быть похож на мой :

На второй слой Out_skin кинем саму кожу. Скачаем отсюда скиншейдер, который даёт коже интересные тона. Подключим к нему цветовую карту и рефлекшн карту, а так же бамп и получим кожный покров. В этой части сложнее всего будет разобраться со скиншейдером, используемом в данном слое. Этот скиншейдер очень сложно контролировать, но я всё же попробую кое-что объяснить. Надеюсь это вам поможет :

Anistotrophy - лучше всего поставить цвет, достаточно приближённый к цвету Color map, чтобы материал не был пересвечен. В итоге кожа будет "отеплена" выбранным цветом.

Dermis - лучше оставить значение приближённым к его значению, установленному по умолчанию.

Epidermis - Надкожный слой, туда нужно вставить цветовую карту.

Затем просто сделаем кожный покров по-прозрачнее до тех пор, пока кожа не будет достаточно симпатичного цвета.

Установим в Layered Shader (Out_skin) первым - наш pinkskin, а вторым - саму "кожу" и сделаем его по-прозрачнее.

Вот, кажись, и всё ...

Часть 6 : Как должны выглядеть текстурные карты.

В данной постановке я использовал следующие карты :

Color map
Bump map
Diffuse map
Specular map
Ambient map
Reflection map
Translucence map

Теперь я постараюсь объяснить что это за карты, как они должны выглядеть и зачем они нужны :

    1. Color map - цветовая текстура - основа основ :) по самому названию понятно, что эта за текстура. Выглядеть она может как вам угодно. Т.е., конечно же, она должна в полном объёме передавать цвет человеческой кожи.
    2. Bump map - рельефная карта - текстура передаёт неровности человеческой кожи. Для удобства и правильности работы должна быть выполнена монотонно. Светлые участки говорят о поднятии, тёмные - об снижении рельефа. На этой карте должны присутствовать все прыщи, морщины, складки и всё подобное.
    3. Diffuse map - монотонная карта. На этой текстуре должны быть отображены все шрамы, родинки, прыщики, складки и всё такое. Отображать неровности поверхности не стоит т.к. это Диффузная карта и все участки, что темнее будут освещены меньше, те, что светлее - больше. Т.е. принцип работы и всего того, что мы с ней делаем - распределение интенсивности освещения участков.
    4. Specular color map - спекулярная карта. Цветовая. Эта карта по своим свойствам схожа с диффузной. Она определяет мощность и цвет освещаемых участков и их положение. Для этой карты стоит расположить у объекта источник света и запечь тени и сам материал. В моём случае я разместил у лба один источник Ambient light и один Direct light. Затем в HyperShade заходим в меню Edit и выбираем там пункт Convert to file texture, т.е. кубик справа от него. Настраиваем параметры так, как показано на картинке ниже:
    5. Ambient color map - многоцветная текстура. Всесторонне освещает поверхность заданным цветом. Чем цвет ярче, тем сильнее свечение.
    6. Reflection color map - карта многоцветная, отражает заданный цвет от поверхности. Даёт довольно интересные оттенки.
    7. Translucence map - цветовая карта, имитирующая подповерхностное рассеивание. В моём случае акцент делается на уши и нос. Кому ещё не понятно, то участки кожи с хрящами, без костей, должны быть самыми транслюцентными т.к. нет костей, следовательно нет преград для света, кроме кожи и хрящей, но они особо свет не остановят. Транслюцентность хорошо заметна и объясняется на примере из жизни - находясь напротив света, у человека просвечиваются уши. Обратите внимание на то, что они не прозрачны, но через них проходит свет.

Просмотреть уменьшенный вариант моих текстур можно щёлкнув на одно из названий карт в начале страницы.

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

Персонаж и текстуры не супер, но всё же я постарался разъяснить суть всей этой затеи, удачи вам... Вы можете лучше, чем Я, я тоже могу ;)

Будем ждать новых достижений ! на этом всё, пока..........

Чтобы просмотреть результат , щёлкните сюда

Автор: Щугарев Андрей Николаевич aka RealmMaster (realMaster)

Урок создан на основе туторов Стивена Сталберга и Джулиана Джереми Джонсона-Мортимера. Им же мною выражается огромная благодарность.

Author: Schugarev Andrew Nickolaevich aka RealmMaster (realMaster)

The tut was written by Steven Stahlberg's and Julian Jeremy Johnson-Mortimer's tutorials. Many thanks them.

14 0 850 4
1
2008-12-04
Тема интересная. Жаль, что я работаю не в Майе :)
RENDER.RU