Создание реалистичного шейдера глаза

Автор о себе:
О 3D-графике я узнал на кафедре художественной и промышленной обработки металлов в Новгородском государственном университете, где, собственно, и учился на отделении дизайна. Был у нас преподаватель - практикующий архитектор Поплевин, который предложил изучать архитектурный дизайн на компьютере. В институте не было готовых спецов, лекции по трехмерному моделированию читали бывшие выпускники ВУЗа - самоучки в 3D. Кстати, один из них как раз занимался компьютерными играми и удаленно сотрудничал с Render.Ru. Подходило время защиты дипломной работы. В мои планы входило написать ее по архитектуре, однако завкафедрой предложил другую тему - дизайн компьютерной игры. На этом проекте я реально и учился моделингу.

Для создания шейдера глаз используем слоеный материал (Layered shader) с двумя слоями – материалами, первый слой будет имитировать роговицу глаза с выпуклостью, второй – сетчатку с радужной оболочкой и зрачком.

1.Создаем NURBS-сферу. Это будет модель глаза.

2.Открываем Hypershade. Создаем материал Blinn, называем его Eye_blinn1.

На канал bump назначаем текстуру ramp. С его помощью мы добьемся имитации выпуклости на роговице. Значение Bump Depth оставляем по умолчанию на единице. Меняем тип рампа (Type) на U Ramp, а Interpolation – на Smooth. Удаляем все цвета, самый верх (0.985) и самый низ (0.000) делаем белым. Низ делаем белым потому, что градиент рампа начинается не совсем от начала UV-координат, если этого не сделать, в центре глаза будет сильная вмятина J. В координатах 0.815 и 0.350 поставить черный цвет.

Цвет и прозрачность материала делаем белыми. Diffuse выкручиваем на единицу. Eccentricity в свитке Specular Shading делаем равным 0.083
Specular Roll Off – 4.562.
Reflectivity ставим 0.050, Reflected color – черный.
На канал Specular Color вешаем рамп (Type – U Ramp, Interpolation –Smooth). Значения градиента рампа: 0.960 – белый
0.805 – серый (HSV, H=0, S=0, V= 0.297)
0.565 – черный
0.130 – черный
0,000 – белый.

Результат (без прозрачности):

3. Создаем еще один материал Blinn, называем его Eye_blinn2.

4. На канал Color назначаем рамп (Type – U Ramp, Interpolation –Smooth). Значения градиента рампа: 0.970 (в зависимости от величины зрачка, чем меньше зрачок, тем больше значения) – черный, далее – сложнее: в зависимости от требуемого цвета глаз значения подбираются индивидуальные, для имитации неоднородности цвета радужной оболочки вместо значений цвета используется карта фрактального шума (fractal) измененная с помощью Color Balance. Так, в данном примере:

0.965 – фрактал, с амплитудой равной одному, Color Balance: Default color – серый, Color Gain – HSV, H= 27.35, S= 0.636, V= 0.420, Color Offset – HSV, H= 27.17, S= 0.662, V= 0.314.
0,950 – фрактал, с амплитудой равной одному, Color Balance: Default color – серый, Color Gain – HSV, H= 50.96, S= 0.424, V= 0.330, Color Offset – HSV, H= 25.88, S= 0.586, V= 0.274.
0,910 – фрактал, с амплитудой равной одному, Color Balance: Default color – серый, Color Gain – HSV, H= 25.19, S= 0.178, V= 0.376, Color Offset – HSV, H= 45.64, S= 0.214, V= 0.041.
0,890 – фрактал, с амплитудой равной одному, Color Balance: Default color – серый, Color Gain – HSV, H= 41.33, S= 0.729, V= 0.153, Color Offset – HSV, H= 41.33, S= 0.729, V= 0.000.
Дальше – проще, так как радужная оболочка закончилась, и начался белок глаза. В большинстве случаев могут подойти следующие параметры:
0.875 – HSV, H= 25.07, S= 0.105, V= 0.786
0.810 – HSV, H= 23.91, S= 0.221, V= 0.809
0.475 – HSV, H= 4.70, S= 1.000, V= 0.370
0.000 – черный.

Результат:

Для добавления капилляров на значение 0.810 можно повесить карту marble с параметрами:

Filler Color – HSV, H= 23.91, S= 0.221, V= 0.809
Vein Color – HSV, H= 360, S= 0.656, V= 0.627
Vein Width – 0.005
Diffusion – 0.100
Contrast – 0.600
Amplitude – 1.700
Ripples – 2; 2; 2
Depth – 1.0; 20.0

Результат:

5. Переходим к созданию бампа. Снова создаем карту рампа (Type – U Ramp, Interpolation –Smooth), вешаем на канал bump. Значение Bump Depth оставляем по умолчанию на единице.

Значения рампа:
1.000 – черный (HSV, H= 0, S= 0, V= -10)
0.970 (диаметр зрачка) – черный (HSV, H= 0, S= 0, V= -5)
0.965 – фрактал с амплитудой 0.400, Color Balance: Default color – серый, Color Gain – HSV, H= 0, S= 0, V= 0.165, Color Offset – HSV, H= 0, S= 0, V= 0.
в параметрах Placed Texture выставляем Repeat UV 2.0 и 5.0
0.885 – фрактал с амплитудой 0.020, Color Balance: Default color – серый, Color Gain – HSV, H= 0, S= 0, V= 1, Color Offset – HSV, H= 0, S= 0, V= 0.463.
0.720 – фрактал с амплитудой 0.060, Color Balance: Default color – серый, Color Gain – HSV, H= 0, S= 0, V= 0.306, Color Offset – HSV, H= 0, S= 0, V= 0.760.
0.345 – фрактал с амплитудой 0.050, Color Balance: Default color – серый, Color Gain – HSV, H= 0, S= 0, V= 0.372, Color Offset – HSV, H= 0, S= 0, V= 0.322.
0.090 – черный (HSV, H= 0, S= 0, V=0)
0.000 – черный (HSV, H= 0, S= 0, V= -10)

Результат Bump:

Color+Bump

6.Diffuse выкручиваем на единицу

7. Eccentricity в свитке Specular Shading делаем равным 0.347

Specular Roll Off – 0.700.
Reflectivity ставим 0.000
Reflected color – черный.

На канал Specular Color вешаем рамп (Type – U Ramp, Interpolation –Smooth). Значения градиента рампа:

0.970 – HSV, H= 0, S= 0, V=0
0.915 – HSV, H= 28.37, S= 0.465, V=0.567
0.830 – HSV, H= 196.57, S= 0.337, V=0.745
0.130 – HSV, H=360, S= 1, V=0.280
0.000 – HSV, H= 0, S= 0, V=0

Specular:

Color+Bump+Specular:

8. Заходим в HyperShade, создаем Layered shader. Называем его eye_LayeredShader. Коннектим к нему наши два материала, созданные ранее.

Сначала присоединяем eye_blinn1, он должен быть верхним (слева в редакторе атрибутов), затем eye_blinn2. Назначаем полученный материал на нашу сферу.

Результат:

Настраивать цвет, форму, размер глаз, зрачков, степень отражаемости, яркость и величину бликов следует после установки и настройки освещения.

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

Итоговый шейдер:



Файл урока: eye.mb

628 0 850 26
28
2006-04-14
Отличный урок, вот только написан немного суховато... и новички врядли сумеют им воспользоваться... почти высшие баллы... основы текстурирования нужны... МОЛОДЕЦ
2006-04-14
спасибо очень полезный урок. Единственно что на мой взгляд удобнее когда вместо набора цифр нужных параметров ставится просто скриншот Attribute Editora.
2006-04-14
Макс здарова!!! Привет из Новгорода!!!
2006-04-15
В майке не силен, но за процедурный глаз - респект. Попробую перенести в макс. А eranicle прав. В общем, здорово - но сухо.
2006-04-15
Качество!!!
2006-04-15
Очень старый шейдер глаза лежит в инете давно. Этот шейдер выглядит 1 в 1 как здесь. И дерево нодов 1 в 1. Ето ставит под сомнение то, что автор сам придумал этот тутор, а не взял шейдер и написал как его сделать... Хотя возможно, что и сам. Глаз кстате не лучшим образом настроен, мог бы гораздо лучше. А чем так убого его делать то уж лучше текстурой нарисовать, тем более что здесь же кажется есть тутор по рисованию глаза. выглядит в ГОРАЗДО лучше.
2006-04-15
Да, узнал фракталы и бамп. Шейдер такой уже лежит на highend3d.com. Ничего не поставил. Автору удачи.
2006-04-15
хотелось бы узнать, какой шейдер использовать для данного урока в Ментал рее?
2006-04-16
Думаю предложенный способ моделирования глаза не самый лучший. На мой взгляд эффективнее делать по-старинке, с помощью старины Фотошопа и проекционных координат. Ну а если урок воспринимать как описание инструментария, а не эффективный способ создания глаза, то очень даже неплохо. Успехов!
2006-04-17
Хороший урок именно по процедурному текстурированию. Фотошоп с проекциями это совершенно другая тема. Причем она тут вообще?. Даже если просто с хайэнда перевел за то уже респект, а то половина молодых моделеров по буржуйски даже "мама" не прочитают.
2006-04-17
Битмап и процедурные карты - две разные вещи. Сам не майщик, но так понял что при подобном подходе можно более менее реалистично анимировать зрачок и рудужку (расширение\сужение зрачка и изменение размера роговицы). Чево при тупом текстурирование битмапом в принципе не возможно.
2006-04-17
Михаил Куркубет, точно подмечено, сам уважаю процедурки именно за это
2006-04-18
все очень граматно. Для тех кому нужна вода - пакупайте "дорогие" книжки. А для эксперементов всегда время найдется!
2006-04-18
урок ХОРОШИЙ, НО Я Майи вообще в глаза не видел...и я еще и новичек в 3D - графике. А мне как раз глаза нужны для 3д макса...
2006-04-19
Очень полезный урок, я как раз перехожу на Майку, с моделированием проблем вроде нет, а по шейдерам инфа не помешает. Автору спасибо!
2006-04-25
Изучаю maya недели полторы, с уроком проблем не возникло, но получилось не совсем то, что показано на картинках (в общих чертах похоже, но очень грубо) =)) Наверное надо с настройками повозиться, а так полезный урок =))
2006-04-26
Вот по Максу бы то-же самое...
2006-05-12
Максим, я учусь делать игры и мне было бы очень интересно и полезно прочитать Вашу дипломную работу "дизайн компьютерной игры". Я обещаю, что не буду её использовать в качестве своей дипломной работы (да и не могу т.к. ещё учусь в школе:))) и в качестве рефератов докладов и т.д. Мой адрес: Liam562006@mail.ru Заранее спасибо.
2006-06-19
Спасибо за урок. Предлагаю следующие усовершенствования: 1) Если я захочу с этим шейдером сделать анимацию расширения зрачка (персонаж испугался), то, как я понимаю, мне придется заняться целой горстью атрибутов. Почему бы в шейдере не создать атрибут, задающий значение радиуса зрачка (eye_LayeredShader.zrachok_raduis) и не создать несколько expressions в рампах, которые бы автоматически подгоняли все необходимые параметры. Тогда мне бы оставалось работать только с eye_LayeredShader.zrachok_raduis. 2) Как корректно сделать зрачок подвижным? Насколько я понимаю, поворот зрачка повлечет за собой и поворот глазного яблока, а это некорректно. Кровеносные сосуды не должны следовать за зрачком.
2006-09-11
Полезно!
2006-09-12
Понравилось. Отличный урок.
2006-09-12
Очень, очень даже неплохо. И полезно.
2006-12-13
Привет, Макс молодчина! Кровеносные сосуды не должны следовать за зрачком.[quote] ??? сосуды находятся в глазном яблоке...или может я чего не понял? специально для максеров, лайтвейверов и пр. :[b] рассматривайте тутор как схему, все это вполне реально повторить в других прогах. Вопрос в том, что в некоторых местах подход будет несколько иным, но общий принцип тот же! Изучайте инструментарий программ, в которых работаете и дерзайте! Макс! передай привет Лехе Шаману, Андрюхе Shark, Сашке Миргородскому и всем кто меня знает :) Alexis Timofeev
2007-05-30
Очень красивые глаза у Вас, мистер, получились)) Я буду брать с Вас пример.
2009-04-22
Огромное спасибо! Вы не представляете как помогли мне с моим проектом!
2010-08-21
Здравствуйте! У меня Eye_blinn1 и Eye_blinn2 - как их можно объединить? Большое спасибо!
2010-08-21
Здравствуйте! У меня Eye_blinn1 и Eye_blinn2 получились раздельно - как их можно объединить? Большое спасибо!
2010-08-22
С предыдущим вопросом сам справился, но попались новые "грабли"... Моделирую персонаж, дошёл до создания шейдера для глаз. Использовал слоеный материал (Layered shader) с двумя слоями–материалами. При рендере в Maya HardWare видно сглаженное лицо персонажа, но текстуры глаза вообще не видно. А при рендере в Maya SoftWare видно не сглаженное лицо персонажа(видны полигоны), но видна текстура глаза. Ни как не пойму - как проявить и то и другое? Какой рендер лучше? Большое спасибо! С уважением, Игорь Изевлин.
RENDER.RU