跳转至

Clustered Shading

Clustered Shading 就是将视锥体划分成很多小块(Cluster),然后计算每个小块的有效光源列表。Shading 时,先找到当前点所属的 Cluster,再遍历对应的光源列表进行计算。

这个方案同时适用于 Deferred 和 Forward 渲染路径,但是储存的代价比较大,剔除光源时计算量也相对较多。

视锥体划分

划分是在 View Space 进行的,这样只需要算一次,后面可以复用。XY 方向都是均匀划分,Z 方向常用的是均匀划分和指数划分。

均匀划分(Z方向)
均匀划分(Z方向)

指数划分(Z方向)
指数划分(Z方向)

指数划分在近处 Cluster 的数量较多,远处数量较少,计算公式为

\[ Z=\text{Near}_Z \left(\frac{\text{Far}_Z}{\text{Near}_Z} \right)^{\dfrac{\text{slice}}{\text{num slices}}} \]

其中,\(\text{num slices}\) 是 Z 方向的划分数量。

DOOM 2016 将视锥体划分为 \(16 \times 8 \times 24\) 块,可以参考。

光源剔除

点光源

聚光灯

参考