Shader parti_light для создания объемного света /mentalray/.
Недавно Jeff Patton опубликовал небольшой урок по 3dMax об объемном свете с псевдокаустикой: http://mrmaterials.com/jeffs-blog/107-projected-caustics.html
Я решил воспроизвести эту идею применительно к Майе, попутно обнаружил для себя несколько нюансов.
Итак, задача – создать сцену с объемными лучами света. В данном случае – с псевдокаустикой от волн.

Создал простейшую сцену: две плоскости – одна пол, вторая – преграда на пути света для создания рисунка тенями, куб для объемного света и направленный свет direction_light, имитирующий лучи солнечного света.

Объемный свет: на куб накладываю любой материал для создания ноды shadingEngine. Пусть это будет mentalray-нода материала mib_illum_lambert. Создал материал, наложил на куб, дальше создаю и подключаю две следущие mentalray-ноды к shadingEngine|mib_illum_lambert (например, перетаскивая средней кнопкой мыши узлы в соответствующие поля во вкладке аттрибутов этой ноды mentalray|CustomShaders): 1) transmat (простейшая нода, используемая в связке с объемными шейдерами – просто никак не воздействует на лучи света, проходящие через стенки куба-контейнера, таким образом делая их невидимыми) связываю с атрибутом MaterialShader и 2) собственно шейдер объемного света – parti_volume связываю с атрибутом VolumeShader. Исходный материал mib_illum_lambert теперь никак не связан с shadingEngine, так что его можно удалить.

В параметрах ноды parti_volume необходимо цвет объемного света сделать светлым – по умолчанию он почему-то черный, поэтому если это упустить, то можно потом удивляться, отчего это никакого объемного света не появилось при рендере – на самом деле он будет присутствовать в сцене, только яркость у него будет нулевая.

Для верхней плоскости, преграждающей пусть свету, назначим материал – скажем, mia_material_x (хотя тут, по логике, подойдет любой, у которого есть параметр прозрачности и возможность наложить текстуру в параметр цвета прозрачности). Все по умолчанию, только во вкладке Refraction меняю два параметра – прозрачность Transparency выставляю на единицу, чтобы свет проходил, ну и на атрибут Color подключаю текстуру псевдокаустики.

Текстуру каустики можно сделать с помощью бесплатной утилитки: http://www.dualheights.se/caustics/ Настройки у нее интуитивно понятные.

Теперь свет. В принципе, уже сейчас при рендере mentalray в кубе будет объемный свет, но без теней и вообще, все не так, как надо. Это потому что источник света тоже должен быть нодой mentalray. Так как использую направленный свет direction_light, то и менталреевский свет тоже будет того же типа, направленным – подключаю к атрибуту Color ноду mib_light_infinite.


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

Можно, конечно, сделать “суперяркость”, вручную забив параметр яркости больше максимальной единицы. Например, 10.

Но тут есть неприятный момент: судя по всему, такая “суперяркость” достигается простым умножением на коэффициент (в моем случае – на 10). То есть там, где яркость света была бы 0,01 – будет уже 0,1, а вот где была 0 – там и будет 0, как ни умножай. Это приводит к тому, что мягкие размытые границы становятся резкими и рваными – изначально переход яркости на границе текстуры был плавный, типа две крайние точки на границе “свет-тень) были соответственно 0,01 и 0, а стали после умножения 0,1 и 0 – то есть контрастность увеличилась в десять раз!

Поэтому для увеличения яркости света я вместо “суперяркости” использую еще одну менталреевскую ноду света – physical_light. Она обладает квадратичным затуханием света (как и истинный свет) и поэтому дает хорошее, годное снижение яркости и плавный переход “свет-тень”. Подключаю ноду physical_light к аттрибуту Color ноды mib_light_infinite. По умолчанию яркость physical_light аж 1000 (это разумно, ведь угасание яркости физического света происходит очень быстро), но для моей сцены мне хватит яркости 70.

Попутно для получения более качественного и сглаженного объемного света в параметрах ноды parti_volume подкрутил min_step_len и max_step_len (влияют на качество объемного света) и снизил яркость лучей Scatter, чтоб не так били в глаза.

В параметрах самого рендера mentalray, которые до этого были полностью по умолчанию, улучшил качество Raytrace – Max Sample Level поднял до двух. Рендер:

Что-то, что мне подходит. После небольшой настройки сцены (подключил к камере ноду гамма-коррекции с параметром 2.2, изменил цвет источника света, покрутил в parti_volume параметр nonuniform, отвечающий за неоднородности в объемном свете, добавил объект, подвигал свет), получил сцену с объемным светом и псевдокаустикой:


Categories
Tag Cloud
Blog RSS
Comments RSS
Void « Default
Life
Earth
Wind
Water
Fire
Light 
сначала не очень то до конца понял