PRT 方程式 (Direct3D 9)

若要完全瞭解實作 PRT 的著色器,衍生著色器用來計算結束弧度公式很有用。

若要開始,下列方程式是一般方程式,用來計算從具有任意遠距光源之擴散物件上直接光源所產生的結束弧度。

使用任意遠距光源在擴散物件上直接光源所產生的結束弧度方程式

其中:

參數 Description
Rp 頂點 p 的結束弧度。 在網格上的每個頂點進行評估。
pd 表面的 albedo。
pi 常數,用來作為能源消耗正規化因數。
L (s) 光源環境 (來源弧度) 。
Vp₍s₎ point p 的二進位可見度函式。 如果點可以看到光線,則為 1,否則為 0。
Hnp₍s₎ Lambert 法律中的余弦詞彙。 等於 max ( (Np·s) , 0) 其中 Np 是點 p 的表面法線。
s 在球體上整合的變數。

 

使用球面基礎函數,例如球面調色,下列方程式會近似光源環境。

光源環境的方程式

其中:

參數 Description
L (s) 光源環境 (來源弧度) 。
i 加總基礎函式數目的整數。
O 球面調色的順序。
li 係數。
Yi (s) 球體上的一些基礎函式。

 

這些係數的集合 L',為函式 L (s) 提供最佳近似值,以及基礎函式 Y (s) 。 替代和散發會產生下列方程式。

取代 l (s) 和散發之後結束弧度的方程式

Yi (s) Vp₍s₎Hnp₍s₎ 是模擬器針對網格上每個頂點預先計算的傳輸係數 tpi 。 替代這個 會產生下列方程式。

替代傳輸係數之後結束弧度的方程式

將此變更為向量標記法會產生下列未壓縮的方程式,以計算每個通道的結束弧度。

變更為向量標記法之後,結束弧度方程式

其中:

參數 Description
Rp 頂點 p 的結束弧度。
pd 表面的 albedo。
L' li的向量,而 是將來源弧度投影到球面調色基礎函式中。 這是球面調色係數的 order¹ 向量。
Tp 頂點 p 的 order¹ 傳輸向量。 模擬器會將傳輸係數除以 p。

 

這兩個向量都是球面調色係數的 order¹ 向量,因此請注意,這只是點乘積。 視順序而定,點的成本可能很高,因此可以使用壓縮。 稱為「叢集主體元件分析」的演算法 () 有效率地壓縮資料。 這可讓您使用較高的球面球面近似值,這會導致更明確的陰影。

此為一個方程式提供下列方程式,以近似傳送向量。

近似傳輸向量的方程式

其中:

參數 Description
Tp 頂點 p 的傳輸向量。
Mk 叢集 k 的平均值。
j 加總 PCA 向量數目的整數。
N PCA 向量的數目。
wpj 點 p 的 jth PCA 權數。
Bkj 叢集 k 的第 jth PCA 基礎向量。

 

叢集只是共用相同平均向量的一些頂點。 以下討論如何取得叢集平均數、PCA 加權、PCA 基礎向量,以及頂點的叢集識別碼。

替代這兩個方程式會產生:

替代傳輸向量之後結束弧度的方程式

然後散發點乘積會產生下列方程式。

散發點產品之後結束弧度的方程式

因為兩者都 (Mk·L') 和 (Bkj·L') 每個頂點都是常數,範例會以 CPU 計算這些值,並將其當做常數傳遞至頂點著色器;因為 wpj 會變更每個頂點,所以範例會將這個每個頂點資料儲存在頂點緩衝區中。

預先計算的弧度傳輸