Создание шейдера кожи в Майе 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. Это будет наша финальная версия шейдера, отражающая результат всей нашей работы, в него мы будем вставлять остальные материалы, накладывая друг на друга. Не забудьте применить этот шейдер на вашего персонажа. На самом деле пользоваться этим материалом очень просто : просто накладываем один материал на другой и регулируем его свойства. Лучше всего регулировать прозрачность непосредственно в самих подключаемых материалах...
|
Выглядит неплохо, но по-прежнему не очень реалистично... Не забудьте учесть окружающие человека условия - т.е. если это мороз, то цвет ambient & incandenscense channels должен быть розоватым или голубоватым, если же это жаркое солнце, то оранжеватым... |
|
Часть 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
Теперь я постараюсь объяснить что это за карты, как они должны выглядеть и зачем они нужны :
- Color map - цветовая текстура - основа основ :) по самому названию понятно, что эта за текстура. Выглядеть она может как вам угодно. Т.е., конечно же, она должна в полном объёме передавать цвет человеческой кожи.
- Bump map - рельефная карта - текстура передаёт неровности человеческой кожи. Для удобства и правильности работы должна быть выполнена монотонно. Светлые участки говорят о поднятии, тёмные - об снижении рельефа. На этой карте должны присутствовать все прыщи, морщины, складки и всё подобное.
- Diffuse map - монотонная карта. На этой текстуре должны быть отображены все шрамы, родинки, прыщики, складки и всё такое. Отображать неровности поверхности не стоит т.к. это Диффузная карта и все участки, что темнее будут освещены меньше, те, что светлее - больше. Т.е. принцип работы и всего того, что мы с ней делаем - распределение интенсивности освещения участков.
- Specular color map - спекулярная карта. Цветовая. Эта карта по своим свойствам схожа с диффузной. Она определяет мощность и цвет освещаемых участков и их положение. Для этой карты стоит расположить у объекта источник света и запечь тени и сам материал. В моём случае я разместил у лба один источник Ambient light и один Direct light. Затем в HyperShade заходим в меню Edit и выбираем там пункт Convert to file texture, т.е. кубик справа от него. Настраиваем параметры так, как показано на картинке ниже:
- Ambient color map - многоцветная текстура. Всесторонне освещает поверхность заданным цветом. Чем цвет ярче, тем сильнее свечение.
- Reflection color map - карта многоцветная, отражает заданный цвет от поверхности. Даёт довольно интересные оттенки.
- 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.