PracticalIndustrialSolutions

  1. Practical Industrial Solutions
    1. Temporal Anti-Aliasing (TAA)
    2. Temporal Super Resolution
    3. Deferred Shading
    4. Tiled Shading
      1. Clustered Shading
    5. Level of Detail Solutions
    6. Global Illumination Solutions

Practical Industrial Solutions

Temporal Anti-Aliasing (TAA)

在时间上的抗锯齿或反走样
走样的本质为一个像素中的样本数量不足
MSAA - 用更多的样本

Tmeporal AA的思路也是需要用更多的sample,只不过是当前帧会复用上一帧的sample,使得这一帧仍然用1SPP,但是无形中通过temporal的reuse,增加了SPP。思路与RTRT中temporal一样
把样本分布到过去的N帧中去,然后每一帧从过去的N帧中取得样本信息然后Filter,达到N倍Super Sampling的效果

SSAA vs MSAA

image based anti-aliasing solution 基于图像的反走样
先渲染出有锯齿的图然后通过图像处理的方法将锯齿给提取出来并替换成没有锯齿的图

主流: SMAA(Enhanced subpixel morphological AA)

History: FXAA —-> MLAA (Morphological AA) —-> SMAA

G-buffers一定不能反走样

Temporal Super Resolution

低分辨率变为高分辨率

(DLSS 1.0): out of nowhere / completely guessed 纯猜
(DLSS 2.0): from temporal information 从上一帧信息

类似TAA

关键在于找到更好的复用上一帧信息的方案(不能用clamp)

Deferred Shading

延迟渲染
shading最坏情况 传统的光栅化过程每个fragment都要shading(从远到近渲染)

只去渲染可见的fragment

光栅化两次
Pass 1: 光栅化中得到fragment之后不shading 只更新深度缓存
Pass 2: 只有深度等于最浅深度的fragment才可以通过depth test并进行shading,从而实现了只对visible fragment着色正常

cons: 依赖于depth buffer(属于G-buffer) 抗锯齿困难 但能用TAA或imaged based AA解决

https://zhuanlan.zhihu.com/p/102134614

Tiled Shading

避免没有意义的shading从而提高效率

建立在Deferred Shading的基础之上,将屏幕分成若干个小块,比如一个小块是32 * 32,然后对每个小块单独的做shading
tiledshading
节省每个小块要考虑的light数量,每个切出来的小块代表场景中3D的区域,并不是所有的光源都会跟这片区域相交
在做light sampling时知道光照强度会随着距离的平方衰减,因此面光源或点光源的覆盖范围是很小的,根据其随距离平方的减少找出最小值,设定一个范围,光源的覆盖范围看做一个球形。在渲染时只需要找会影响到区域的光源即可,不需要考虑所有的光源
如图,将屏幕分成了若干个小块,但由于是从camera看向屏幕的俯视因此是个平面图,看起来是分成了若干个小条,圆圈代表的是光源的范围,每个圆代表一个光源 数字代表区域内会影响到它的光源数量

Clustered Shading

进一步优化

不仅将其分成若干个小块,还要在深度对其进行切片,也就是我们将整个3D空间拆分成了若干个网格
clusteredshading
光源可能会对这个小块区域有贡献,但不一定会对根据深度细分后的网格有贡献。所以再划分过后每个网格内的光源数量更少

Level of Detail Solutions

核心思路就是为了在任何计算过程中能够快速准确的找出一个正确的level去进行各种运算texture的mip-map就是一个LOD
在工业界中运用LOD方法或者在不同情况下选用不同层级的思路称之为”cascaded方法“如
Cascaded shadow maps

shadow map都有一个分辨率,当shadow map上的一个texel离camera越近,其在屏幕中所覆盖的内容越多,反之离camera越远,其所覆盖的内容越少,因此可以知道从camera出发看向场景,离camera远的可以用粗糙的shadow map
cascaded shadow map

shadow map不会变化,实际操作中通常会生成两种或以上不同分辨率的shadow map进行使用的,如图,红色区域是一个高分辨率的shadow map,蓝色区域是覆盖范围更大但分辨率相同也就是更粗糙的shadow map

根据物体在场景的位置来选用shadow map,远点的就用粗糙的,近处的就用精细的,但是从图中可以看到会有重叠区域内,因为在突然切换层级时会有一个突变的artifact,为了有一个平滑的过度,在这个区域内通过距离,也就是近处的以蓝色区域的shadow map为主将二者blend起来,从而产生平滑的过度

Cascaded LPV
先在细小的格子上,之后随着距离的增加到大一点的格子,再远就更大
cons: 在不同层级之间的过渡
Sol: 使用blending的方法实现手动平滑过度

geometric LoD
精细的有许多三角形的模型(高模),减化其三角形变成一个低模,生成一系列的低模
cons: popping artifacts camera在推进过程中由于是突变的,会出现突然变化几何的现象
Sol: TAA
Nanite in UE5

Global Illumination Solutions

解决出屏幕, 反射物在camera背后, 壳后等情况
使用hybrid solutions结合多种方法
如先做一遍SSR,得到一个近似的GI。基于SSR对于SSR无法得到的结果,用其他的ray tracing

  • Software ray tracing
    • 近处:在任意一个shading point周围一定范围内的物体用一个较高分辨率的SDF,SDF可以在shader中快速的tracing
    • 远处:用一个稍低质量的SDF将整个场景覆盖,至此不论近处还是远处都可以通过SDF得到最终光照打到的结果
    • 场景中有强烈的方向光源或者点光源,也就是手电筒之类的光源,则通过RSM解决
    • 场景是diffuse则通过DDGI来解决。Probes that stores irradiance in a 3D grid (Dynamic Diffuse GI, or DDGI)
  • Hardware ray tracing
    • Doesn’t have to use the original geometry,but low-poly proxies

Probes (RTXGI),用RTRT的思路结合PROBE的思路,叫做RTXGI

UE5的lumen

×

喜欢就点赞,疼爱就打赏