Как создать двусторонний шейдер

Maya Complete
- Rendering
Урок посвящён созданию двусторонней шейдерной группы, в которой на две разные стороны предмета назначены два разных узла материала.
Play Movie [~150kb]
Шаг Первый
Выполните Create > NURBS Primitives > Sphere.
Нажмите клавишу 3 на клавиатуре для смягчения сферы.
Щёлкните на сфере правой кнопкой мыши и выберите из выпавшего меню Isoparm. Отметьте изопарму, ближайшую к вершине сферы. Она окрасится желтым.
Шаг Второй
Выполните Edit Surfaces > Detach Surfaces. Эта команда разделит сферу вдоль выделенной изопармы
Выберите верхнюю часть и удалите. Теперь вы можете одновременно видеть наружнюю и внутреннюю поверхности сферы. Очень удобно использовать эту поверхность для тестирования вашей двусторонней шейдерной группы.
Шаг Третий
Откройте Hypershade. Выполните Create > Create New Node... В таблице Materials выберите материал Blinn. Убедитесь, что опция With shading group включена.
Используя Attribute Editor, измените цвет материала Blinn на красный и назначьте на сферу. Цвета помогут вам далее различать поверхности сферы.
Шаг Четвёртый
В Hypershade выполните Create > Create New Node... и выберите:
в Materials:
материал Phong с выключенной опцией With Shading Group.
в Utilities:
Condition
Sampler Info
Phong будет использоваться для второй поверхности, в то время как утилиты узлов будут строить двустороннюю природу шейдерной группы.
Шаг Пятый
Средней кнопкой мыши перетащите узел samplerInfo на узел condition. Откроется Connection Editor.
Свяжите аттрибут flipped Normal узла samplerInfo с аттрибутом First Term узла condition.
Это назначит нормаль поверхности как управляющую состоянием. Когда рендерер видит точку на внутренней поверхности, узел samplerInfo сообщает ему, что это flipped Normal, и узел condition изменяет материал.
Шаг Шестой
Средней кнопкой мыши перетащите узел blinn на узел condition.
Свяжите аттрибут Out Color узла blinn с аттрибутом Color1 узла condition.
Это назначит материал blinn на первую сторону шейдерной группы.
Шаг Седьмой
Средней кнопкой мыши перетащите узел phong на узел condition.
Свяжите аттрибут Out Color узла phong с аттрибутом Color2 condition.
Это назначит материал phong на вторую сторону шейдерной группы.
Оставьте Connection Editor открытым для следующего шага.
Шаг Восьмой
Щёлкните по кнопке Clear All в Connection Editor.
Отметьте узел Blinn и щёлкните по Show Up and DownStream потокам, чтобы видеть blinn1SG.
Удалите связь между узлом Blinn1 и узлом BlinnSG в Hypershade.
Используя среднюю кнопку мыши, перетащите узел condition на секцию Outputs в Connection Editor.
Используя среднюю кнопку мыши, перетащите узел blinn1SG на секцию Inputs в Connection Editor. Свяжите аттрибут Out Color узла condition с аттрибутом Surface Shader узла blinnSG.
Это позволит подлежащей сети подключиться непосредственно к узлу шейдерной группы. Шейдер готов к рендерингу.
Примечание: если у вас включено hardware texturing, вы не увидите шейдерную группу в правильном отображении. Вам будет необходимо отрендерить её для наблюдения результата.
Шаг девятый
Теперь вы можете добавить свет к вашей сцене, настроить Render Globals и отрендерить сцену для финала.
Примечание: если вы хотите поменять поверхности местами, откройте узел condition в Attribute editor измените опцию Operation с Equal на Not Equal.
Шаг десятый
Посколько вы имеете два узла материалов для поверхностей, вы можете применять различные texture maps для разных материалов.
По-настоящему, вы должны применить color map, specular map и bump map к узлу материала Blinn для имитации дерева и затем применить другие карты к материалу Phong для создания эффекта натурального камня.
Заключение
Создание двусторонних шейдеров, назначающих разные материалы на стороны объектов, является весьма выгодным способом работы с некоторыми поверхностями. Одежда - хороший пример тому, как можно применить грубую шерсть снаружи и блестящий шёлк внутри.
Вы можете применять шейдер из этого урока для ваших объектов. Вы можете даже использовать этот шейдер как шаблон для собственных экпериментов по вашему усмотрению.
Примечание: существует одно ограничение - внутренняя поверхность не будет отражать и преломлять лучи при отражении. Изображение справа иллюстрирует это. Вы видите, что гранит внутренней поверхности не отражается в зеркале.
Шейдер урока: double.ma[~4kb]
Автор: R. Magee
Перевод: iLUNGA