PRT 公式 (Direct3D 9)
若要完全了解实现 PRT 的着色器,派生着色器用于计算退出辐射的公式很有用。
首先,下面的公式是计算任意远射光线漫射对象直接照明导致的退出辐射的通用公式。
其中:
参数 | 说明 |
---|---|
Rp | 顶点 p 处的退出辐射度。 在网格上的每个顶点处求值。 |
pd | 表面的反照数。 |
pi | 常量,用作节能规范化因子。 |
L (s) | 照明环境 (源辐射) 。 |
Vp₍s₎ | 点 p 的二进制可见性函数。 如果点可以看到光线,则为 1;如果不能,则为 0。 |
Hnp₍s₎ | 兰伯特定律中的余弦词。 等于 max ( (Np·s) ,0) 其中 Np 是点 p 的表面法线。 |
S | 在球体上集成的变量。 |
以下公式使用球基函数(如球面调和)近似于照明环境。
其中:
参数 | 说明 |
---|---|
L (s) | 照明环境 (源辐射) 。 |
i | 对基函数数求和的整数。 |
O | 球面调和的顺序。 |
li | 系数。 |
Yi () | 球体上的一些基函数。 |
这些系数的集合 L',为函数 L () 提供基函数 Y () 的最佳近似值。 替换和分布生成以下公式。
Yi (s) Vp₍s₎Hnp₍s₎ 的整数是模拟器针对网格上每个顶点预先计算的传输系数 tpi 。 替换此公式将生成以下公式。
将此表示法更改为矢量表示法会生成以下未压缩公式,以计算每个通道的退出辐射。
其中:
参数 | 说明 |
---|---|
Rp | 顶点 p 处的退出辐射度。 |
pd | 表面的反照数。 |
L' | li 的向量,是源辐射到球面调和基函数的投影。 这是球面调和系数的 order² 向量。 |
Tp | 顶点 p 的 order² 传输矢量。 模拟器将传输系数除以 p。 |
这两个向量都是球面调和系数的 order² 向量,因此请注意,这只是一个点积。 根据顺序,点的成本可能很高,因此可以使用压缩。 称为聚集主体组件分析 (CPCA 的算法) 有效地压缩数据。 这样就可以使用高阶球面和谐近似值,从而产生更锐利的阴影。
CPCA 提供以下公式来近似传输向量。
其中:
参数 | 说明 |
---|---|
Tp | 顶点 p 的传输向量。 |
Mk | 群集 k 的平均值。 |
j | 对 PCA 向量数求和的整数。 |
N | PCA 向量的数目。 |
wpj | 点 p 的第 j 个 PCA 权重。 |
Bkj | 群集 k 的第 j 个 PCA 基向量。 |
聚类只是共享相同平均向量的一些顶点。 下面讨论了如何获取分类平均值、PCA 权重、PCA 基向量和顶点的聚类 ID。
替换这两个公式会生成:
然后分布点积将生成以下公式。
因为两者都 (Mk·L') 和 (Bkj·L') 是每个顶点的常量,样本使用 CPU 计算这些值,并将其作为常量传递到顶点着色器;由于 wpj 会为每个顶点更改,因此示例会将每个顶点数据存储在顶点缓冲区中。
相关主题