varying
varying
varying 节点是连接顶点着色器和片元着色器的桥梁,用于将顶点着色器中计算出的数据(如坐标、法线)传递给片元着色器。GPU 会自动对这些数据在多边形表面上进行平滑插值。
核心优势
核心优势是性能优化。通过在计算成本较低的顶点着色器中执行计算(如坐标变换),然后将结果传递出去,可以避免在成本高昂的片元着色器中为每个像素重复这些计算,从而大幅提升渲染效率。
常见用途
传递被修改或带有动画的 UV 坐标,以实现水面流动等特效。
将世界坐标发送到片元着色器,用于实现程序化雾效或地形分层着色。
为逐像素光照计算提供经过插值的法线、视角方向等关键几何信息。
如何调整
varying 节点本身没有参数可调,其效果完全由其输入节点决定。要改变效果,需要修改传入的节点。例如,将 `varying(uv())` 的输入改为 `varying(uv().add(offsetNode))`,就可以实现纹理坐标的动态偏移效果。
代码示例
1// 在顶点着色器上下文中“发送”世界法线
2const v_normalWorld = varying(normalWorld);
3
4// 在片元着色器上下文中“接收”并使用它来计算边缘光
5const rim = dot(v_normalWorld, viewDirection);
6const rimLight = smoothstep(0.0, 0.5, 1.0 - rim);