Свет мой, зеркальце, скажи…

Автор: Забелин Владимир

Создание шейдера

Собственно, создание шэйдера в Maya заключается в построении Функциональной цепочки (более аккуратно выражаясь, графа) - shading network - из зависимых между собой функциональных узлов специального типа (shading nodes). Этот граф является неотъемлемой частью общего графа зависимостей (dependency graph, DG), поэтому, при определении свойств шэйдера, вдумчивый пользователь может задействовать не только специализированные (текстуры, материалы), но и вообще любые имеющиеся в Маya функциональные узлы. Такой “произвол” позволяет создавать не только художественные изображения с высокой степенью фотореалистичности, но и вносить в финальную картинку разного рода специальные эффекты, не вписывающиеся в рамки физических законов, которые называют нефотореалистической визуализацией (non-photo realistic render). Один из методов создания различных специальных эффектов шэйдинга основан на использовании выходных параметров (out-Color, outGlowColor или outTransparency узла материала, то есть тех значений, которые получаются после учета освещенности расположения точек поверхности по отношению к камере, шероховатости и прочее.

В первом примере мы создадим зеркало, отражающее окружающие предметы в серых тонах. Начнем с простой сцены: рюмка и отражающее ее зеркало (сцена reflection01. mb). Сосредоточим наше внимание на шэйдере зеркала. Начнем строить его на основе материала, который назовем mirror. В нашем примере мы использовали материал типа blinn, но это может быть и любой другой материал с отражающими способностями.

Обратим внимание на высокие значения отражения (reflection^) и цвет блика (specularColor) - белый. Не забудем, что для появления отражений необходимо в опциях визуализации (render globals) включить опцию Ray-tracing, а в самом материале в разделе Raytrace Options установить ненулевое (а в нашем случае это 4) значение параметра Reflec-tion Limit

Вот так выглядит сцена после визуализации.

Для измененияотражающихсвойствшэйдеранеобходимо разделить результирующий цвет поверхности (mirror.outColor) на две составляющие - цвет поверхности без отражений и цвет отражения. Откроем окно Hypershade и начнем.

1. Сдублируем материал mirror и переименуем копию в mirrorWithoutReflection

duplicate -name mirrorWithoutReflection mirror;

(В нашем случае материал зеркала чрезвычайно прост, но в более сложных случаях, например, с наложенной текстурой шероховатости, или с другими входными связями (input connections), имело бы смысл воспользоваться командой меню Edit -> Duplicate -> With Connections to Network)

2a У нового материала уменьшим Reflection Limit до 0.

setAttr mirrorWithoutReflection.reflectionLimit 0; В результате мы получили два шэйдера, различие между которыми лишь в одном: первый способен отражать окружающие объекты, а второй - нет. Следовательно, разность между атрибутами outColor этих шэйдеров и есть искомое отражение в «чистом» виде.

3.    Создаем утилиту plusMinusAverage (Create -> General Utilities -> Plus Minus Average).


⇐ вернуться назад | | далее ⇒