Evaluate Refraction Data 节点是 Unity 高清渲染管线(HDRP)中专门用于计算水面折射效果的重要着色器节点。该节点通过模拟光线在水面交界处的折射行为,为水面着色器提供逼真的光学效果,是创建高质量水体渲染的核心组件之一。
在物理光学中,当光线从一种介质(如空气)进入另一种介质(如水)时,由于两种介质的光密度不同,光线会发生偏折现象,这就是折射。Evaluate Refraction Data 节点基于斯涅尔定律(Snell's Law)和光学物理原理,计算光线穿过水面时的路径变化,从而确定水下物体在观察者眼中的表观位置。
该节点的实现考虑了多个光学因素,包括法线方向、水面波动、观察角度等,能够生成视觉上准确的折射效果。通过该节点,开发者可以模拟出水面下物体的扭曲变形、光线在水中的吸收特性以及水面波动对折射的影响,大大增强了水体的真实感和沉浸感。
高清渲染管线(HDRP)在默认的水面着色器图中广泛使用此节点。HDRP 的水系统是一个综合性的水体渲染解决方案,它结合了折射、反射、散射、焦散等多种水光学现象,为游戏和实时应用提供了电影级的水体渲染质量。Evaluate Refraction Data 节点在这个系统中扮演着关键角色,负责处理折射相关的所有计算。
对于希望深入了解 Unity HDRP 水系统的开发者,建议查阅官方文档中的水系统部分,其中详细介绍了水体的各项特性、参数配置和最佳实践。
渲染管线兼容性
Evaluate Refraction Data 节点是专门为高清渲染管线(HDRP)设计和优化的,它利用了 HDRP 特有的渲染功能和着色器模型。因此,该节点在通用渲染管线(URP)中不可用。
| 节点名称 | 通用渲染管线(URP) | 高清渲染管线(HDRP) |
|---|---|---|
| Evaluate Refraction Data | 不支持 | 完全支持 |
这种兼容性差异主要源于两个渲染管线的设计目标和功能集不同:
- HDRP 专注于高端图形效果和物理正确的渲染,提供了完整的水体渲染系统
- URP 则更注重性能和跨平台兼容性,其水体渲染解决方案相对简化
如果需要在 URP 中实现类似的水面折射效果,开发者通常需要手动实现折射计算或使用其他替代方案,如屏幕空间折射或简单的法线扰动。
端口详解
Evaluate Refraction Data 节点包含多个输入和输出端口,每个端口都有特定的功能和数据类型。理解这些端口的作用对于正确使用该节点至关重要。
输入端口
NormalWS
- 类型:Vector3
- 方向:输入
- 描述:世界空间中的水面法线向量
NormalWS 端口接收世界空间中的水面法线信息。这个法线通常来自法线贴图或水面模拟系统,它定义了水面在每一点的朝向,直接影响折射光线的方向计算。法线的精度和细节级别决定了折射效果的精细程度。
在实际应用中,这个法线可以来自多个来源:
- 高分辨率法线贴图,提供静态的水面细节
- 基于物理的水面模拟系统,生成动态的法线信息
- 程序化生成的波纹和波动效果
LowFrequencyNormalWS
- 类型:Vector3
- 方向:输入
- 描述:世界空间中的低频水面法线,即不包含高频细节(如波纹)的水面法线
LowFrequencyNormalWS 端口接收经过平滑处理或去除高频成分的水面法线。这个端口的设计允许系统分别处理水面的大尺度波动和小尺度细节,从而实现更真实的折射效果。
在光学上,水面的折射受到不同尺度波动的影响:
- 大尺度波动(低频法线)决定主要的折射方向和幅度
- 小尺度细节(高频法线)增加视觉复杂性和真实感
通过分离这两种法线,Evaluate Refraction Data 节点能够更精确地模拟真实世界中的水面折射现象,避免因高频噪声导致的视觉瑕疵或性能问题。
输出端口
RefractedPositionWS
- 类型:Vector3
- 方向:输出
- 描述:观察水面时的折射水底位置,位于世界空间中
RefractedPositionWS 输出端口提供经过折射校正后的水下位置坐标。这个值表示如果光线按照折射定律穿过水面,最终会照射到水底的哪个位置。
该输出对于实现准确的折射效果至关重要,它可以用于:
- 采样正确的水下纹理和颜色
- 计算水下物体的表观位置
- 实现焦散效果和其他高级光学现象
DistortedWaterNDC
- 类型:Vector2
- 方向:输出
- 描述:折射点的屏幕空间位置
DistortedWaterNDC 输出端口提供折射点在标准化设备坐标(NDC)空间中的位置。NDC 空间是屏幕空间的一种表示方式,其坐标范围在 [-1, 1] 或 [0, 1] 之间(取决于具体实现)。
这个输出特别适用于:
- 屏幕空间折射效果
- 与后期处理效果集成
- 实现基于深度的折射调整
AbsorptionTint
- 类型:Vector3
- 方向:输出
- 描述:吸收因子,HDRP 使用该因子在水面颜色与折射的水下颜色之间进行混合
AbsorptionTint 输出端口提供光线在水中的吸收特性信息。在现实世界中,水会选择性吸收不同波长的光线,通常红色波长被吸收得最快,这就是为什么水深的地方会呈现蓝绿色的原因。
这个输出通常包含三个分量,分别对应 RGB 颜色通道的吸收系数:
- 红色分量表示红色光的吸收程度
- 绿色分量表示绿色光的吸收程度
- 蓝色分量表示蓝色光的吸收程度
HDRP 使用这个吸收因子来混合水面颜色和折射的水下颜色,模拟出真实的水下光线衰减效果。吸收程度通常与水深和水质相关,可以通过调整着色器参数来控制。
技术实现原理
Evaluate Refraction Data 节点的内部实现基于光学物理和实时渲染技术的结合。理解其技术原理有助于更有效地使用该节点并调试可能出现的问题。
折射计算基础
节点使用斯涅尔定律作为折射计算的核心:
cpp
n₁ × sin(θ₁) = n₂ × sin(θ₂)
其中:
- n₁ 和 n₂ 分别是两种介质的折射率(空气约为1.0,水约为1.33)
- θ₁ 是入射角(光线与法线的夹角)
- θ₂ 是折射角
在实际实现中,节点会考虑观察方向、水面法线和介质折射率来计算折射光线的方向。
法线处理策略
节点对输入的法线信息进行多层次处理:
- 使用高频法线(NormalWS)计算细致的折射扭曲
- 使用低频法线(LowFrequencyNormalWS)计算大尺度的折射偏移
- 结合两种法线,避免高频噪声导致的视觉不稳定
这种分离处理的方法既保证了视觉效果的质量,又提高了算法的稳定性。
空间坐标转换
节点内部进行了复杂的坐标空间转换:
- 将世界空间位置转换为视图空间
- 在视图空间中应用折射计算
- 将结果转换回世界空间和屏幕空间
这些转换确保折射效果在不同空间中的一致性,并与渲染管线的其他部分正确集成。
使用示例和最佳实践
基础水面折射设置
要创建基本的水面折射效果,可以按照以下步骤配置 Evaluate Refraction Data 节点:
- 准备法线输入 :
- 使用高质量的法线贴图或水面模拟系统生成 NormalWS
- 对法线进行适当滤波或降采样生成 LowFrequencyNormalWS
- 连接节点 :
- 将法线数据连接到对应的输入端口
- 将 RefractedPositionWS 连接到水下纹理采样节点
- 使用 DistortedWaterNDC 进行屏幕空间效果处理
- 应用 AbsorptionTint 实现水下颜色衰减
- 参数调整 :
- 根据水质调整折射率参数
- 控制吸收系数模拟不同深度的水色变化
- 调整法线强度平衡折射效果的明显程度
高级应用技巧
对于更复杂的水体效果,可以考虑以下高级技巧:
- 动态法线生成:结合 Gerstner 波算法或 FFT 水面模拟,生成动态的法线信息,实现随风变化的折射效果
- 多层折射:对深水区域使用多次折射采样,模拟更复杂的光线路径
- 焦散集成:利用折射位置信息计算焦散图案,增强水下光照效果
- 性能优化:根据视角距离动态调整法线细节级别,平衡视觉效果和渲染性能
常见问题排查
在使用 Evaluate Refraction Data 节点时,可能会遇到一些常见问题:
- 折射效果不明显:检查法线输入的强度和范围,确保它们足够影响光线方向
- 视觉瑕疵或闪烁:可能是法线分辨率过高导致的,尝试使用 LowFrequencyNormalWS 或对法线进行适当滤波
- 性能问题:复杂的折射计算可能影响帧率,考虑使用 LOD 系统或简化远处水面的折射计算
- 与反射效果不匹配:确保折射和反射使用一致的法线信息,保持光学效果的一致性
与其他水系统组件的集成
Evaluate Refraction Data 节点不是独立工作的,它与 HDRP 水系统的其他组件紧密集成:
- 水面几何:与水面网格和细分系统配合,提供准确的交点信息
- 反射探头:结合反射效果,完整模拟水面的光学特性
- 水下渲染:为水下场景提供正确的折射视图
- 光照系统:与 HDRP 的光照和阴影系统集成,实现真实的水面光照
正确配置这些组件之间的交互,是实现高质量水体渲染的关键。
性能考虑和优化建议
折射计算是实时渲染中相对昂贵的操作之一,特别是在高分辨率或复杂场景中。以下是一些性能优化建议:
- 细节级别管理:根据水面与摄像机的距离,动态调整法线细节和折射计算精度
- 屏幕空间优化:对于屏幕外或远处的水面,使用简化的折射模型或完全禁用折射
- 计算复用:在可能的情况下,复用相邻帧或像素的折射计算结果
- 质量设置:提供多级质量设置,允许在不同硬件上平衡视觉效果和性能
【Unity Shader Graph 使用与特效实现】专栏-直达
(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)