上一篇从渲染史的角度,通过栅格化和光线追踪两个渲染技术,给出了真实感渲染的三个标准:照片级别,物理正确和高性能。本篇是系列二,从技术角度介绍当前真实感渲染。
图片来自互联网
渲染方程的主要参数有光源L(ight),材质M(aterial),可见性V(isibility)以及空间域Ω。栅格化为了追求高真实感,通常会基于该方程做某些“合理”假设,满足Split Sum Approximation算法的适用条件,并缩小Ω的范围(比如空间投影到屏幕),这样,计算量降下来了,甚至还能预计算,满足实时的性能要求。这个过程也体现了实时渲染的至上法则:只要渲染的图形看起来是对的,那就是对的。
从技术上,真实感主要包括:(1)软阴影;(2)环境光贴图;(3)基于物理的材质;(4)全局光照;(5)后处理。这五个方面都用来弥补栅格化在间接光照方面的不足,从而获取更好的阴影,折射和反射效果。下图是这五点相关的参数和算法。
软阴影是一种two pass的策略,在第一个pass中,通常会假设点光源(透视投影)或方向光(正交投影),然后从光源处生成一张深度图(Shadow Map),因此空间域是Image Space。而第二个pass则利用这张深度图,在栅格化的片元阶段实现软阴影的效果。
图片来自互联网
PCSS的思路是每个点都和相邻区域(N*N)的深度进行比较,从而估算该点同光源的可见程度。该可见度不再是0或1,而是一个浮点数,从而实现软阴影的效果。同时,根据遮挡物距离光源的远近来确定N的大小。我们还可以用Cascade来优化PCSS,其思路是根据相机的远近来设置深度图的纹理大小,类似Multi-Frustum。
CSM可以模拟自然界中“圣光”的效果。在体渲染中,可见性需要在空间域中通过Ray Marching算法累加,性能开销巨大, CSM的思想是把可见性函数从空域转为频域,降低了算法复杂度和计算量,满足了实时渲染volumetric shadow的性能。
环境光贴图,顾名思义,就是用图片来模拟环境光打在物体上的反射和折射效果,是一种通过预计算来优化环境光的技术。环境光分为漫反射(diffuse)和镜面反射(specular)两种贡献,通常忽略可见性问题。
图片来自https://learnopengl.com
对于漫反射,我们把整个半球的环境光做一个模糊滤波,然后按照镜面反射的方向计算一次光路贡献,就等同于累加来自任意方向的环境光的光路贡献,而该半球仅跟物体的法线相关。因此,我们可以预计算生成一个irradiance map来获取diffuse的贡献。目前一般会采用Spherical Harmonics来计算irradiance map,点乘(3阶9个)操作,而且还支持环境光阴影,光源旋转变化等特性。
图片来自https://learnopengl.com
镜面反射则需要从环境光中获取反射的光线,因此是 radiance,该参数取决于物体的粗糙度。有了radiance和BRDF部分,则可以 获取specular的贡献。
另外, 八面体投影(Octahedral projection)形变更小。而Multiple-Scattering更符合能量守恒。
PBR材质最初源自Disney BRDF,UE的渲染模型应用并优化了该材质,目前gltf和filament对这块支持不错。具体请参考《Material小结》。
PBR材质的基本属性主要是Metallic-Roughness,另一种标准是Specular-Glossiness,前者对设计师更友好,后者侧重物理属性,保留了反射率F0。
GLTF示例截图
目前,GLTF2.0标准已扩展支持了clearcoat,sheen以及transmission + volume等属性。
全局光照中假设间接光涉及的材质均为diffuse,且只考虑两次bounce的间接光照。GI和软阴影的流程完全一样,属于two-pass的方式。
Dachsbacher et al
Reflective Shadow Maps(RSM)在第一个pass时分别保存深度,空间位置,法线和光通量flux(上图1-4),在第二个pass时,基于纹理信息,在Image Space中随机采样间接光照的贡献。这样,计算量缩小到为Image Space,又通过采样来降低Image Space中的计算量。
Games 202 实时全局光照 2
Screen Space Reflection(SSR)流程同RSM一样,区别是Screen Space。而SSAO和SSDO在第一个pass中需要保存Screen Space下的深度和法线(HBAO),在第二个pass中处理可见性V,两者互补,前者考虑红色区域的贡献,后者考虑橙色区域的贡献。
RTR4
@Miamiamia0103
反走样,DLSS,降噪等。
本篇介绍了真实感渲染中涉及的五个技术模块,基于一定的假设,通过光照,深度,法线等贴图来求解渲染方程,简言之就是开局一张图,内容全靠编。这些tricks本身并不难,但如何把这么多的技术整合在一起,形成一套pipeline,则需要强大的工程能力。
随着硬件能力提高,基于Real Time Ray Tracing(RTRT)或许是一个更好的方案,这也推动了Hybrid Pipeline的日臻完善。同时,RTRT本身的算法健壮,无需各种奇淫巧计,更像是大道至简的终极解决方案。我相信’Ray tracing is the future and ever will be’这句话将成为过去。
介绍完真实感渲染的具体技术,下一篇和大家交流一下相关技术的前沿趋势。