Maya Software Render SSS

Тагинцев Владислав Александрович, Fiend3D

Автор о себе: Меня зовут Тагинцев Владислав Александрович, живу в г. Воронеже, работаю в игровой индустрии 2 года. 3D я занимаюсь довольно давно и всё свободное время посвящаю ему (а именно персонажное моделирование, анимация, визуализация). Учусь заочно в политехническом институте на втором курсе (мне 19 лет). В галерее и на форуме известен как Fiend3d.

Эту сцену создал для демонстрации результатов метода, о котором я расскажу далее.

Я решил рассказать вам о принципах Fake SSS (Subsurface Scattering). т. е. не физический просчёт, а полученный обманным путём. Урок, я надеюсь, будет интересен всем. Уникальность урока в том, что эффект SSS создаётся в Maya Software Render, который пока что к этому не приспособлен (далее объясню почему). А так же начинающим поможет в освоении Hypershade. Я такого ранее нигде не видел, это пришло мне в голову, когда увидел статью про это на rendermanacademy.com, только там описывался prman.

Начну с того, что поясню: SSS - это подповерхностное распространение света. Этим свойством обладает большинство предметов, окружающих нас. Например: мы сами. Давайте поглядим на наши руки. Вы, надеюсь, видите их розоватыми, но кожа (на самом деле) синевато-белого цвета, а розоватый цвет им придаёт то, что находится под кожей (но о шейдинге кожи я, возможно, расскажу в следующих уроках). А речь у меня пойдёт о воске или о веществе похожем на воск.

Физический просчёт SSS получается за счёт трассировки фотонов (так может Mental Ray, Maxwell), занимает много времени, очень сложен, не всегда можно предугадать результат точно (получить то, что хотел). Физический просчёт – это громко сказано, так как в реале является лишь имитацией физических процессов (наблюдаемых в реале).

Итак, что нужно чтобы получить шейдер воска? А нужен нам pointcloud (набор точек с тремя координатами) полученный из lightmap, т. е. чтобы получить SSS требуется разблурить эти точки с заданным радиусом, и проецировать получившийся цвет на поверхность. Такое размытие невозможно получить из обычной lightmap так как она плоская и имеет всего 2 координаты, а размытие надо делать именно по трём. Тут возникает трудность. Получить такую lightmap можно только в Mental Ray (о принципах работы SSS в Brazil, Vray, Final Render я ничего не знаю, но думаю, что принципы схожи) в Software Render получить нельзя (и даже в Prman). А нужно использовать shadowmap, а именно depth map shadow, так как эта карта имеет три координаты и может быть размыта с заданным радиусом.

Запускаем Maya :) Создаём несложную модель (для начала) как показано на картинке, и очень желательны единые UV координаты для всех объектов. Если вам не хочется утруждать себя, то скачайте это здесь.

Очень советую для подобных (как и для подавляющего большинства сцен) использовать SpotLight. Создаём и жмём panels>look Through selected как показано ниже:

Перемещаем новую «камеру»:

Открываем окно атрибутов источника света (самый удобный и быстрый способ попасть в окно атрибутов это Ctrl+A). Настраиваем атрибуты:

И настраиваем тени, а именно depth map:

Рендерим…

Что-то есть уже, но ещё пока не то. Сейчас мы имеем рассеивание тени, а фронтального рассеивания света в объекте мы не видим. Открываем Hypershade и делаем второй lambert, настраиваем (если хотите IPR работает при этом очень быстро), но я советую настроить всё как тут:

Значение color=0.5 (rgb (0.5;0.5;0.5)), а translucenceDepth настраиваем по вкусу ;) Получается уже что-то очень похожее на SSS. Полученный результат уже можно использовать при компоузинге видео (AE, shake и т.д.) ведь скорость просчёта очень высока. А мы не будем останавливаться на достигнутом и пойдём дальше :)

Теперь запечем полученный результат в текстуру. Для этого выделяем нашу модель, а затем шейдер который мы будем запекать (lambert2 через shift) и в окне Hypershade>Edit:

Настраиваем:

Запекаем. После просчёта (он займёт немного времени) мы получаем surfaceShader с запеченной текстурой, что нам и нужно было. Рендерим:

Получаем баги на краях UV… Почему-то майя имеет такой баг (Mental Ray может запекать без таких багов, надеемся что в новой версии майя добавят такую приблуду и в Software Render) . Для начала поменяем тип фильтрации у запечённой текстуры на mipmap:

У сложной модели баги могут вовсе пропасть… У нас лишь уменьшатся, но не беда, чуть правим UV и рендим:

Обратите внимание на скорость рендера. Мы можем крутить камеру вокруг объекта, и не будет никаких проблем. Но нам этого мало. Нам нужен красивый SSS шейдер. Для этого создаём ramp и соединяем атрибуты запеченной картинки (file ) и ramp (предварительно удалив place2dTexture который был присоединён к ramp). Для этого перетаскиваем ноду текстуры(запеченной) на ramp и выбираем “Other” в появившемся окне присоединяем

Этим способом мы мапим цвет нашего SSS рамповым градиентом. Далее создаём новый шейдер Blinn и присоединяем ramp к incandescence нового Blinn шейдера. Лезем в атрибуты единственного источника света и отключаем тени. Рендерим:

Получаем что-то забавное. На этой картинке вы видите, как действует ramp на нашу текстуру. Заводим IPR и настраиваем ramp. Потом включаем назад тени (предварительно сделав настройки нормальными). И рендерим:

Отлично. Мы получили SSS шейдер, который моментально считается и виден в рефлектах. С настройками рампа и слоями можно добиться очень достойных результатов, которые будут очень быстро считаться. На всякий случай ещё вот покажу то, что у меня в Hypershade получилось:

Если урок будем популярен, то напишу про то, как написать и прикрутить SSS шейдер к Renderman. Всем спасибо и, надеюсь, что вы оцените.

614 0 850 9
18
2006-03-02
Очень интересно ! вот только недавно начал SSS увлекаться и тут урок как нельзя кстати.... жаль, что прийдется скоро на Макс возвращаться, так как фирма в которую я ухожу вся на максе работает и майи там никто не знает.... :(
2006-03-02
Если у вас возникнут вопросы, то с радостью на них отвечу.
2006-03-02
спасибо. очень кстати... Авард заслуженый... как ты там делал SSS ? так же?
2006-03-02
skif Нет. Там я использовал Mental Ray (misss_fast)
2006-03-03
а зачем запекать? разве нельзя подсоединить ламберт к рампу через сlamp ?
2006-03-03
DrFlash Да. Можно. Спасибо, что напомнил… забыл написать про это… Но тени такими и останутся. А с запеканием можно выставить нормальные тени. И остальным объектам в сцене мешать это не будет. Самый простой способ – это запечь. Да и считаться это будет очень быстро. А ещё я хотел рассказать немного о том, как запекать шейдер в текстуру.
2006-03-03
не мог бы поподробнее рассказать? вот мыло... stoodent собака mail.ru просто идёт работа над небольшим демо... рендер ментал... а вот с мисс фаст никак не могу разобраться... пробовал не только его но так ничего не получилось :(... заранее благодарю :)
2006-03-03
Admin Буду знать :) skif Погляди в хелпе про то как создавать лайтмап ;) Там всё описано. Фишка в нём.
2006-03-03
хм... интересно, спасибо, а то я как то над этим думал, так ничего толкового в голову и не пришло.....
2006-03-03
Fiend3d спасибо... посмотрю.
2006-03-04
интересно, но чего-то как-то уж слишком фейковый, местами не правдоподобно выглядит а как насчет Hardware Render SSS? )))
2006-03-04
Leshiy Видел недавно новые шейдера на видюхах… Всё это скоро войдёт и в реал тайм… Такими темпами…
2006-03-29
Мне этот урок очень понравился!
2006-04-11
Запекание хорошо для статичных сцен. Интересно, есть что-либо подобное для анимированных.
2006-04-13
I-jan Да есть... только ссылку на моё дополнение снесли... в следующем месяце, возможно, пришлю более полную версию
2006-09-11
Актуально.
2006-09-12
Интересный метод. Спасибо.
2006-09-12
Очень интересные сведения.
RENDER.RU