Origin
zhuanlan.zhihu.com
Tags
简悦
项目
收藏夹
创建时间
收藏类型
Cubox 深度链接
更新时间
原链接
描述
一、环境光遮蔽 AO

由于遮挡导致的光照衰减:

输出 AO 贴图:

1. SSAO:
屏幕后处理 SSAO(当年项目中用过,然后 FPS 直线下降。。。这也是我觉得前向渲染不太行的主要原因之一。人家延迟渲染直接拿 G-Buffer 的数据就行了。前向渲染还得巴拉巴拉的构建 View)


2. HBAO:

3. GTAO:


4. Ray-Tracing AO

二、雾效

1. Depth Fog
最简单的雾:

2. Height Fog

3. Volumetric Fog
基于体素的体积雾!!!
把相机的整个空间进行体素化,密度是不均匀的,是根据近平面和远平面进行划分的。然后进行 Ray-Marching 计算。(渲染计算跟上一节的云计算一样的原理)
预计算出的 3D 纹理数据,比率要和屏幕相同,例如都是 16:9 的比率。

三、抗锯齿
1. Anti-aliasing

2. SSAA & MSAA
SSAA:尺寸翻倍进行超采样,然后降。现在没人这么奢侈的用超采样。
MSAA:对一个点进行 4 倍采样,如果 4 个 subsamp 都落在同一个就只 shading 一次,如果不是就按照权重进行 shading。

3. FXAA
快速近似抗锯齿:当前主流抗锯齿技术。

通过一个核进行卷积操作,就能拿到边缘:

核心精妙算法:



4. TAA
拿到过去帧,然后进行加权平均。 核心思想是拿时序上的数据和当前帧进行运算。

四、后处理

1. Bloom:
原理很简单:拿到亮度区域,填充到一个纹理中,然后对这个纹理进行高斯模糊,然后把这个模糊的纹理和原来的区域合并即可。


对图像纹理进行降采样,在最低的一阶进行模糊,然后放大。
模糊操作时降采样是个很有用的操作。


2. Tone Mapping:
平衡画面内的光暗强度。主要应用在 HDR 标准中,将 HDR 映射到 SDR 标准中,让暗处不发黑有细节,让亮处不曝光过渡。

ACES 懂的都懂:


3. Color Grading (率镜效果)
95% 的工作都在美术同学上。。。



五、渲染管线
渲染管道是所有渲染操作执行和资源分配的管理顺序

1. Forward Rendering
天空离我们最远,所以最后绘制。

需要严格保证渲染顺序,先绘制远的透明物体,然后是近处的。

2. Deferred Rendering:

最大的缺点是显存占用高带宽高:
G-Buffer Size:19201080, 32bit192010804 = 63MB
G-Buffer Size:19201080, 32bit192010804 = 63MB
G-Buffer Size:19201080, 32bit192010804 = 63MB

3. Forward+:
前向渲染,但是按照 Tile 一个一个渲染。对移动端很友好。

4. Tile-based Rendering:


5. Visibility Buffer:
延迟渲染就是把材质信息写到 G-Buffer 里了。但是现在大家意识到可以把几何信息和材质信息剥离开,在一个新的 V-Buffer 里,填写对应像素属于哪个几何体也就是 PrimID 以及 TriangleID。
可以反向查出来这个点对应的材质和法线粗糙度等等信息。
所以只要一个存储了几何信息的 Buffer,就能直接进行 Shading。

六、Frame Graph
略
七、V-Sync & G-Sync



八、Piccolo
略
九、Q&A
Q:在开放世界中 cluster 怎么划分呢?
A:按照相机的视锥来划分。
Q:TAA 怎么去除鬼影?
A:手动跳过差异性过大的帧。
▎本文由 简悦 SimpRead 转码。