实时渲染

本质思考

实时渲染本质上是一个在有限时间预算内,对三维连续场景信号(几何、材质、光照)进行离散化采样(生成屏幕像素),并不可避免地与走样进行斗争的过程。

渲染管线与渲染路径

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

抗锯齿

对信号的采样频率不够,就会走样,那么锯齿可以简单分为:

  • 几何层面锯齿:是形状的锯齿,来源于对几何三角形边缘的采样不足。
  • 着色层面锯齿:是颜色/明暗的锯齿,来源于对着色计算结果的采样不足。

那么一些抗锯齿技术就很好理解了:

  • SSAA、MSAA:提升空间采样频率,可以解决几何层面锯齿。
  • TAA:在时间维度上进行采样,并通过累积和重建,达到与提升空间采样频率相同的目标——获得更高频的信号信息以消除走样。
  • FXAA:先低通滤波平滑信号,再进行采样。

为什么MSAA与延迟渲染不好兼容

延迟渲染会先将场景信息离散到一个GBuffer里,此时场景的几何信息被离散化处理掉了,而MSAA是通过提升空间采样频率来实现的,比如是4个采样点,那么就只能对GBuffer里每个像素分为四个采样点分别去算着色来提升采样频率,这样等于退化到SSAA,或是更大的GBuffer。并且MSAA一般有硬件协同。

Mipmap与各向异性过滤

如果一个像素对应一大块纹素,那么此时相当于采样频率很低,但是信号(每块纹素信息)却很剧烈。所以我们也可以先低通滤波,即通过卷积让信号变得平滑,再采样。有效解决欠采样。

渲染方程和蒙特卡洛

把三维信号等价于渲染方程,蒙特卡洛方法则是采样手段

光谱渲染

光谱无疑更复杂更接近现实世界,从光谱计算后的结果降采样到屏幕RGB像素,无疑质量更高。

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