本文是系列文章的第四篇,介绍了开发人员和技术美术人员如何在 Unity 中设置和使用高清渲染管道(HDRP)来实现高端图形逼真度。HDRP 代表了 Unity 实时渲染技术的飞跃,因此您可以像处理真实世界中的光线一样处理光线。
请务必阅读我们的 "如何使用高端照明 "系列中的其他文章:
倒影有助于将游戏对象与周围环境融为一体。我们通常将反射与光滑闪亮的表面联系在一起,但在基于物理的渲染(PBR)工作流程中,即使是粗糙的材料也需要正确的反射。HDRP 提供了多种产生反射的技术:
- 屏幕空间反射
- 反射探针
- 天空倒影
每种反射类型都可能耗费大量资源,因此请根据使用情况谨慎选择最合适的方法。如果一个像素采用了一种以上的反射技术,则 HDRP 会混合每种反射类型的贡献。被称为 "影响卷 "的边界曲面会分割三维空间,以确定哪些物体会接收到反射。
屏幕空间反射 (SSR) 使用深度和色彩缓冲区来计算反射。因此,它们只能反映当前摄像机视图中的对象,在屏幕上的某些位置可能无法正确呈现。光亮的地板和潮湿的平面是接收屏幕空间反射的理想选择,但要注意的是,屏幕空间反射会忽略画面外的所有物体,从而限制了效果。
要启用屏幕空间反射,请转到 "照明"下的 "帧设置"(HDRP 默认设置或摄像机的自定义帧设置)。然后,将 "屏幕空间反射覆盖"添加到 "体积对象"中。
材料表面必须超过最小平滑度值 才能显示屏幕空间反射。如果希望粗糙的材料显示 SSR,可以降低该值,但要注意降低最小平滑度阈值会增加计算成本。如果屏幕空间反射无法影响像素,那么 HDRP 将退回到使用反射探针。
使用质量 下拉菜单选择预设的最大射线步数。更高的最大光线步长可以提高质量,但也要付出代价。与所有特效一样,要努力在性能和视觉质量之间取得平衡。
在 HDRP 第 12 版及以上版本中,您可以选择使用 "累积"(新)的基于物理的算法,或精确度较低的近似算法(默认)。
反射探头利用基于图像的技术产生反射。探测器捕捉其周围所有方向的球形视图,并将结果存储在立方体地图纹理中。着色器使用此立方体贴图来近似反射。
每个场景可以有多个探头,并将结果混合在一起。然后,局部反射会随着摄像机在环境中的移动而变化。
将每个反射探头的类型设置为烘焙或实时:
- 对于静态环境,烘焙探测器只需处理一次立方体贴图纹理。
- 实时探测器在运行时在播放器而非编辑器中创建立方体地图。这意味着反射并不局限于静态对象,尽管实时更新可能会耗费大量资源。
影响体积"决定了游戏对象接收反射的 3D 边界,而 "捕捉设置"可让您自定义反射探针如何获取立方体地图的快照。
要优化实时反射探针,可通过覆盖一般或每个反射探针的相机设置,禁用任何对反射视觉质量影响不大的渲染功能。您还可以创建一个脚本,对更新进行时间切分。
平面反射探头可让您在考虑到表面光滑度的情况下,重新创建一个平面反射表面。这对于闪亮的镜子和地板来说非常理想。
虽然平面反射探头与标准反射探头有很多共同之处,但这些组件的工作原理略有不同。平面反射探头不是以立方体地图的形式捕捉环境,而是通过其镜面反射再现相机视图。然后,探针会将生成的镜像存储到二维渲染纹理中。根据矩形探针的边界绘制,这就形成了平面反射。
如果一个物体没有受到附近反射探针的影响,它就会落回天空反射区。
为了生成最高质量的反射图像,HDRP 采用了能为每个像素提供最高精度的技术,并根据三种反射方法(SSR、反射探针、天空)采用加权优先的方式将其与其他技术相结合。这种评估反射的特定序列被称为 反射层次.
当一种技术不能完全确定像素的反射时,HDRP 就会返回到下一种技术。换句话说,"屏幕空间反射 "会返回到 "反射探针",而 "反射探针 "又会返回到 "天空反射"。
为您的反射探针正确设置 "影响卷 "非常重要。否则,您可能会遇到不必要的天空反射漏光。这一点在样板场景的 3 号房间中显而易见。禁用其中一个反射探针或移动其影响范围会迫使反射落回天空。这就导致明亮的 HDRI Sky 在强烈的反射下盖住了场景。
有关反射层次的更多详情,请参阅HDRP 文档的反射部分。
由于反射探头的捕捉点是固定的,很少与附近的相机位置相匹配,因此产生的反射可能会有明显的视角偏移。因此,倒影可能看起来与环境没有联系。
反射代理卷可帮助您部分纠正这一问题。它可以根据摄像机的位置,在代理体积内更精确地重现反射。
HDRP 还通过音量系统提供一些实时灯光效果。选择本地 音量或全局音量,然后在添加覆盖 > 照明下添加相应的效果。
屏幕空间环境光遮挡 (SSAO)
环境遮蔽模拟在折痕、孔洞和相互靠近的表面上出现的变暗现象。挡住环境光线的区域往往会出现遮挡。
虽然您可以通过 Unity 的 Lightmapper 为静态几何体烘焙 Ambient Occlusion,但 HDRP 还增加了实时工作的屏幕空间 Ambient Occlusion。这是一种屏幕空间效果,也就是说,只有画面内的信息才能产生这种效果。SSAO 会忽略摄像机视野之外的所有物体。
在 "照明"下的 "帧设置"中启用 "屏幕空间环境闭塞"。然后,在局部或全局 音量上添加覆盖,并选择 "照明">"环境光遮蔽"。
屏幕空间全局照明 (SSGI) 使用屏幕的深度和色彩缓冲区来计算反弹的漫射光。与光贴图如何将间接照明烘托到静态关卡几何体的表面一样,SSGI 能更准确地模拟光子如何撞击表面,并在反弹时传递颜色和阴影。
与其他依赖 "帧缓冲区 "的特效一样,屏幕边缘也会出现问题,因为摄像机视场之外的物体无法对全局光照做出贡献。通过使用反射探测器,可以在光线行进到帧缓冲区外时提供后备功能,从而部分改善这一问题。
在"照明"下的 "帧设置"中启用 SSGI。它还必须在管道资产的 照明部分启用。
注意:我们建议使用 Unity 2021.2 或更高版本的屏幕空间全局照明。HDRP 12 包括对 SSGI 质量的重大改进。
屏幕空间折射覆盖功能有助于模拟光线通过密度大于空气的介质时的行为。HDRP 的 "屏幕空间折射 "使用 "深度 "和 "色彩 "缓冲区来计算玻璃等透明材料的折射率。
要通过HDRP 光着色器启用此效果,请确保您的材质的 "表面类型"为 "透明"。
然后在 "透明度输入"下选择折射模型和折射率。实心物体使用球体折射模型,空心物体选择薄型(如气泡)或箱型(略有厚度)。