我一直想做这件事:一是重打光很有用,二是想测试 Nuke API 的速度。最后做了三个节点:Diffuse、Specular 和 Rim Light。它们需要 Surface Normal、World Position 和 Eye buffer 这几路 AOV。Rim Light 节点还可以通过关闭 diffuse 分量,快速做一个简单的 NdotEYE。
不依赖额外渲染通道的基础重打光示例:

Diffuse 与 Specular 节点:Diffuse 可以根据世界空间的灯光位置生成衰减(falloff);Specular 提供 Phong 与 Blinn 的高光计算。

两个 Rim Light 示例:第一个是左侧标准 rim;第二个是“假金属”效果,起因是一次编码错误,我把它变成了一个特性。

最终茶壶:3 个 Diffuse、2 个 Specular,以及 1 个 Rim。Rim 节点包含一个看起来略带各向异性的假金属效果。
