Skip to content

SSR算法小记(Screen-Space-Reflection)


何谓全局光照

  • 全局光照=直接光照+间接光照,是指通过模拟光线的传播路径,将物体反射的间接光纳入计算,从而提高结果真实感的一种渲染技术(如图中金属球的焦散,蜡烛的次表面)

  • 实时渲染中的全局光照,一般就是指如何简单而快速地计算比直接光照多一次bounce的光照结果

屏幕空间方法

首先我们要弄清楚屏幕空间方法的概念,屏幕空间实时渲染,是指利用在所有pass渲染完成之前各个帧缓冲中的信息,对已渲染结果加以修改的渲染方法。

伴随着延迟渲染的兴起,更多的信息得以在屏幕空间取得,因此也延伸出许多不同的算法,这些算法一般都具有如下特点:

  • 能够很方便的支持各种滤波算法
  • 解除了场景复杂度对算法的限制
  • 会有不同程度的信息丢失(因为只能获得一些相机观察得到的信息,所以遮挡越多,越有可能发生信息丢失)

常见的屏幕空间方法有AO,SSAO,HBAO,SSDO,都是基于屏幕空间的环境光遮蔽提出的GI近似算法,但它们对于间接光照的理解都没有触及到问题的本质。回顾一下我们一开始对于全局光照的定义,它的核心是如何通过模拟光线的传播路径来计算比直接光照多一次bounce的光照结果,也就是说,如果想要在屏幕空间得到一个更加真实的结果,还是得靠光线追踪才能实现。托 延迟渲染 的福,现在的屏幕空间已经基本具备了所有模拟光线弹射的条件(法线,深度,balabala),那么剩下的问题就是如何与物体求交做shading,也就是我们接下来要介绍的最后一种方法——SSR(屏幕空间反射,screen-space relfections

SSR算法的基本原理

  • 对于屏幕空间上的物体的每个像素,根据该像素对应的法线和视线信息,求解出反射向量;

  • 当前点沿着反射向量在屏幕空间进行步进,判断步进后的坐标深度与深度缓存中存储的物体深度是否相交;

  • 若相交,取交点处的物体颜色作为最终的反射颜色;

SSR的优缺点

  • 优点:
  • 针对任何面都可以实时反射,不需要求平面。
  • 不需要额外的DrawCall,没有Planar Reflection那种翻倍DC的问题,计算都在GPU,解放CPU。(什么是DrawCall?)
  • 只需要额外的后处理Pass处理,无需大规模改动引擎管线,容易集成。(什么是Pass?为什么容易集成?怎么集成?)
  • 可以与Reflection Probe等结合使用。(什么是Reflection Probe?)
  • 缺点:
  • 需要全屏深度和全屏法线,延迟渲染管线中是可以免费拿到的!但是前向渲染的话,需要额外渲染一遍DepthNormalMap。
  • Shader中需要进行RayMarching,对于GPU的负载较大,且步进是有一定步长的,它本身不可能非常精确。
  • 效果存在自身缺陷,由于只有屏幕可见的物体信息,不在屏幕内的,就完全不会反射。这属于技术本身的瓶颈。(信息丢失)img
  • 硬边问题img

SSR在渲染管线中

img

主要应用场景是片元着色器中

片元着色器:

  • 片元着色器是一个非常重要的可编程着色器阶段,前面的光栅化阶段实际上并不会影响每个像素的颜色值,而是会产生一系列的数据信息,用来表述一个三角网格是怎样覆盖每个像素的,而片元就负责存储这样一系列信息,真正会对产生影响的是下一个阶段逐片元操作。
  • 片元着色器的输入是上一个阶段对顶点信息进行插值的结果(是根据从顶点着色器输出的数据插值得到的),而它的输出是像素颜色值。这一阶段可以完成很多重要的渲染技术,其中最重要的技术有纹理采样逐片光照计算等,覆盖片元的纹理坐标是通过前述的阶段的顶点数据插值得到的。

具体本人概括如下:

相交:只有当光线步进的深度\(Ray.z\)大于采样得到的深度\(D e p t h\) +一个偏移,且\(Ray.z\)小于深度\(D e p t h\)+像素厚度,才为相交测试,即击中。

  • 之后便是采样纹理:当相交测试成功,即找到反射交点。接下来就需要去取相交点的物体颜色作为最终的反射颜色。这里我们需要去采样历史帧的颜色缓冲,涉及到 时间抗锯齿 中介绍到的Motion Vector Buffer,通过速度缓存,我们可以计算得到当前帧UV在上一帧的UV,进而去采样历史帧颜色缓冲。

结语

水平有限,尚未能吃透SSR原理,未涉及到Hi-Z Screen-Space Reflections(加速光追),SSSR(Stochastic Screen Space Reflections),更多相关知识见下面给出的参考资料,并请善用搜索:)


参考资料

【论文复现】Efficient GPU Screen-Space Ray Tracing - 知乎 (zhihu.com)

GAMES202高质量实时渲染-个人笔记:实时全局光照 - 知乎 (zhihu.com)

(13条消息) 图形学基础|屏幕空间反射(SSR)_桑来93的博客-CSDN博客

(13条消息) 计算机图形学笔记(一)渲染管线概述_少侠只用刀的博客-CSDN博客

(40 封私信 / 80 条消息) 基于当前实时云渲染的特点,用户体验(效果、效率)主要受到哪些影响? - 知乎 (zhihu.com)