计算3D表面属性的算法——颜色、反射、粗糙度。渲染中几何体与最终像素之间的核心。
你坐在3D渲染设置前,已经构建好了几何体——干净的网格,正确的骨骼绑定,灯光也已就位。但如果没有着色器(Shader),你看到的只会是扁平、无色的多边形。着色器是实时(或离线渲染时)决定:这个表面如何对光线做出反应?材质的粗糙度如何?它反射多少光,吸收多少光?这一切都在GPU上运行——逐行,为每个像素。
在实际的VFX工作流程中,着色器是你编写物理上合理或故意风格化的材质描述的工具。在Maya或Houdini等引擎软件中,你使用着色器网络:组合纹理贴图(反照率、法线、粗糙度、金属度),通过数学运算连接它们,然后将其输入渲染后端——无论是Arnold、RenderMan还是V-Ray。每一次连接都是数据流;最终的着色器然后为每个表面元素计算局部照明方程。
你经常使用PBR着色器(Physically-Based Rendering,基于物理的渲染)——这是一个标准,可以保证在各种光照条件下材质表现一致。粗糙的金属与潮湿的木头或人类皮肤具有不同的着色器参数。你不是随意调整数值;你设置的是物理上连贯的材质属性。这就是猜测与专业外观的区别。然后你会在最终画面中立即看到:光线折射错误,反射太硬——回到着色器,调整,重新渲染。
在游戏引擎(Unreal、Unity)中,你通常用HLSL或GLSL编写着色器,或者使用视觉节点编辑器。性能至关重要——过于复杂的着色器会使你的帧率崩溃。对于电影VFX,你可以进行更复杂的计算;通宵渲染是可以接受的。但即使如此:低效的着色器会浪费渲染农场的时间,从而消耗预算。你的专业知识在这里决定了一个镜头是渲染4小时还是40小时。
实用技巧:学会阅读和调试简单的着色器。使用软件的可视化模式——查看法线贴图、环境光遮蔽贴图、没有镜面反射的原始漫反射。如果有什么看起来不对,要隔离着色器网络中的组件,而不是图像。这可以节省数小时的时间。