高清渲染管线 (High Definition Render Pipeline) 中的反射
高清渲染管线 (HDRP) 使用以下技术来计算反射:
为了帮助您确定在 Unity 项目中使用哪些技术,下表显示了每种技术的资源消耗强度。
技术 | 描述 | 运行时的资源消耗强度 |
---|---|---|
屏幕空间反射 | 屏幕空间解决方案。实时捕获所有游戏对象。 | 高。 |
实时反射探针 | 手动放置的局部反射探针。实时捕获所有游戏对象。 | 中高(这取决于捕获的分辨率)。 |
烘焙反射探针 | 手动放置的局部反射探针。仅在烘焙过程中捕获静态游戏对象。 | 低。 |
天空反射 | 反射材质显示天空反射。 | 低。 |
反射层级视图 (Reflection hierarchy)
为了产生最高质量的反射,HDRP 使用反射技术为每个像素提供最佳精度,同时确保这种技术与所有其他技术融合。为此,HDRP 会评估所有光照技术,直至达到总权重 1。
- 屏幕空间反射控制自身的权重。
- 反射探针具有可以手动编辑的 Weight 属性。这允许为重叠的反射探针设置权重以便正确混合它们。
- 天空反射具有固定权重 1。
要为给定像素选择最佳反射技术,HDRP 将按特定顺序(称为反射层级视图)检查可用技术。反射层级视图的顺序是:
如果屏幕空间反射的权重为 1,则 HDRP 会使用该信息,而不评估任何其他技术。如果屏幕空间反射没有权重 1,则 HDRP 回退到层级视图中的下一个技术。HDRP 继续此模式,直至达到权重 1 或达到层级视图的最低级别(使用天空反射)。这意味着屏幕空间反射会回退到某个反射探针(如果有),或者回退到天空反射(如果没有反射探针)。反射探针可以回退到具有更低优先级的其他反射探针。目前,HDRP 根据影响体积 (Influence Volume) 的大小计算反射探针的优先级。影响体积越小,优先级越高。
屏幕空间反射
反射层级视图的第一级是具有高资源消耗强度的屏幕空间解决方案,可捕获场景中渲染的所有内容。HDRP 使用体积 (Volume) 框架处理屏幕空间反射。屏幕空间反射体积覆盖包含一些属性,可以控制屏幕空间反射效果。为了计算屏幕空间反射,算法会在屏幕空间中追踪光线,直至找到与深度缓冲区的交集。然后会查找前一帧中的像素颜色,并将其用于计算反射光照。
此屏幕空间技术限制了反射效果,因为只能反射屏幕上实际可见的游戏对象。此外,由于此技术仅使用深度缓冲区的单个层,因此很难处理游戏对象后面的追踪光线。如果此技术未找到交集,则 HDRP 回退到反射层级视图中的下一个技术。
注意:屏幕空间反射仅适用于不透明材质,因为这是屏幕空间效果,所以仅反射屏幕上可见的游戏对象。
有关如何在 Unity 项目中使用屏幕空间反射的信息,请参阅屏幕空间反射文档。
反射探针
反射层级视图的第二级使用反射探针。当屏幕空间反射无法为像素生成有用的反射数据时,可能是因为它反射的区域在屏幕外,所以 HDRP 使用反射探针。这些反射探针从它们的视角捕获场景并将结果存储为纹理。探针范围内的反射材质可以查询该探针的纹理,然后将其用于产生精确的反射。请注意,使用烘焙反射探针的金属材质不会显示镜面反射光照。相反,HDRP 使用环境颜色来模拟镜面反射颜色。
与屏幕空间反射不同,您必须手动设置反射探针。
有关反射探针的更多信息,请参阅:
天空反射
如果屏幕空间反射和反射探针不能为像素提供有用的反射信息,则 HDRP 将回退到天空反射,这是反射层级视图的最后一个级别。如果一个像素使用此技术来计算反射,此技术将会查询天空以产生该点处的天空反射。
反射代理体积和重映射
HDRP 中的反射材质使用反射代理体积作为重投影体积来应用反射探针的反射。HDRP 使用重投影来校正由于捕获点与使用捕获信息的表面点不在同一位置而产生的视差问题。
如果不使用代理体积,则当反射材质使用反射探针捕获的环境信息时,仅针对与反射探针捕获点位于相同位置的像素提供完美反射。这意味着反射探针不会为屏幕上的大多数反射材质提供完美反射,而是在略微不同的位置渲染反射的环境。如果希望与反射探针的捕获点位置不同的像素具有精确反射,请使用代理体积。HDRP 使用重投影来解决此位移问题。HDRP 项目会将信息捕获到反射探针的代理体积上,然后将其重投影到反射材质的表面上。这并不能给出完美的投影,但比无限投影的效果更大幅接近实际反射。不过,代理体积可能会根据体积的形状引入一些瑕疵。
- 盒体 (Box) 体积可能会在盒体的边缘导致分辨率损失和不正确的角度。
- 球体 (Sphere) 体积提供均匀的质量,但有时可能会看到代理形状不贴合的长表面上出现不正确的反射。例如,对于长平面,距离反射探针的捕获点越远,反射变得越不准确。