以下为个人学习笔记整理,课程官网传送门作业传送门会议系统传送门

# Practical Industrial Solutions

# Temporal Anti-Aliasing(TAA)

光栅化阶段由于采样数量有限导致最终的结果出现了「Aliasing」,因此需要使用更多的样本。于是乎基于「Temporal」的采样便应运而生。

  • 跨越时间线进行采样。
  • 原理和 RTRT 几乎完全一样。

假设一个格子内的四个点(红、橙、黄、绿)分别表示连续四帧内针对同一个像素,采样不同位置得到的结果。那么每帧采样的结果依据时间线进行「filtering」得到的值,就等效于一口气进行了四次的采样。

image-20210624142021696

# Notes on Anti-Aliasing

# Multisample「MSAA」

GAME101MSAA 相关介绍

「MASS」把每个像素做了拆分然后计算像素内图形的覆盖率,对像素颜色深浅进行插值。

  • MASS 优化:

假设一个像素拆分成四块,相当于是原来四倍的采样,那么以往的「MASS」会记录下四个点的结果留到后面进行计算。而 「MASS 优化」只保留会被渲染的点「1」(在三角形内)以及通过「1、2、3、4」四个点计算出的某个代表整个像素颜色的值。相当于少了一倍的存储和渲染。

image-20210624143912567

对于边界上的采样点,可以进行复用,分别计算左右两个格子,这样相当于采样了六个点实际有八个点的效果。

image-20210624144319522

# Supersampling「SSAA」

「SSAA」先对场景进行几倍分辨率的渲染,之后在压缩回原来的分辨率。

结果会很正确,但是非常的耗

# Image Based Anti-Aliasing Solution

基于图像替换的反走样解决方案:GAME101 关于 FXAA 介绍

Fast Approximate AA「FXAA」 -> Morphological AA「MLAA」-> Enhanced subpixel morphological「SMAA」

# Enhanced subpixel morphological「SMAA」

  • 通过一些办法去识别图像的边界。
  • 把边界处的图像处理成矢量图。
  • 计算矢量边界在像素内的占比。
  • 再用占比率对整个像素的颜色深度进行插值填充。

image-20210624145312346

对于 G-buffer 里的锯齿,不应该做任何的反走样处理,因为这本来就是图像本身的性质。

# Temporal Super Resolution

  • 超级采样:通过一些手段,增加图像的分辨率。
    • 【DLSSv1.0】:拉伸画面,一些不确定的像素采用一定策略(神经网络)填充(基本全靠猜)。
    • 【DLSSv2.0】:通过时间线进行采样,提高采样率来提高分辨率。
      • 由于放大像素的结果需要很精确,如果放大后的结果依然很模糊,那么放大的意义就没了。
      • 这会使得「DLSS」不能像「RTRT」和「SVGF」那样对于差距过大的点进行 Clamping。image-20210624150529135
      • 「DLSS」神经网络内部针对不同帧的采样结果做了其他的操作(不像「RTRT」和「SVGF」那样直接做「filtering」),使其更加近似真实情况。image-20210624151100236

# Deferred Shading

回想以下光栅化过程:

顶点 > 三角形 > 片段 > 深度测试 > 着色 > 输出到屏幕

正常情况下,只有通过了深度测试的片段,才会被着色。但由于我们不能对所有片段的深度进行排序,因此最坏的情况下,可能输入的片段深度是由远及近的,那么相当于对所有的片段都进行了着色,但是实际显示在屏幕上的片段只有很少一部分。

# Key observation

我们能不能只渲染那些会被显示的片段呢?

# Modifying the rasterization process

「Deferred Shading」会对场景进行两次光栅化。

  • 【pass1】:no shading,只是更新深度缓存「depth buffer」。
  • 【pass2】:剩下能通过深度测试的片段,再来做 shading。

# Deferred Shading Notes

  • Difficult to do anti-aliasing:由于渲染结果依赖于 G-buffer 内的深度值,而又由于 G-buffer 本身不支持 AA。因此「Deferred Shading」的 AA 操作非常困难。
  • But almost completely sloved by TAA:但是可以和上一帧的结果做「TAA」或者基于图像的处理「SMAA」。

# Tiled Shading

「Tiled Shading」在「Deferred Shading」的基础上,把屏幕分成了若干个小块,然后单独做「shading」。

image-20210624153645945

# Key observation

  • 3D 空间内并非所有光源都能作用在任何位置,因此,切分出多个小块单独考虑光照的时候,就可以忽略掉大部分光源。
  • 不用过多的处理光源的光照强度和距离平方衰减的计算。

# Clustered Shading

在「Tiled Shading」的基础上,再对深度进行划分。这样能够更少考虑光源。

image-20210624154150331

# Level Of Detail Solutions(LOD)

GAME101 的 MIPMAP 回顾

核心思想:在不同的层级上,应用不同分辨率细节的「MIPMAP」进行显示。这种处理方式也被称为「cascaded」。

# LOD Example

  • Cascaded shadow maps

image-20210624154836858

image-20210624155107572

# Global Illumination Solutions

# Software ray tracing

  • 比较近的物体用 HQ SDF
  • 场景内其他的物体用 LQ SDF
  • 对于非常强的点光源或者方向光源用 RSM
  • 采用 Probes 技术 —— Dynamtic Diffuse GI「DDGI」

# Hardware ray tracing

  • 用简化后的低模代替高模来进行 tracing
  • Probes —— RTXGI

标注颜色的几点被用在 UE5 的 Lumen

# 星辰大海

image-20210624162037758