PRT 方程式 (Direct3D 9)
若要完全瞭解實作 PRT 的著色器,衍生著色器用來計算結束弧度公式很有用。
若要開始,下列方程式是一般方程式,用來計算從具有任意遠距光源的擴散物件上直接光源所產生的結束弧度。
其中:
參數 | Description |
---|---|
Rp | 頂點 p 的結束弧度。 評估網格上每個頂點。 |
pd | 表面的 albedo。 |
pi | 常數,用來做為能源節約正規化因數。 |
L (s) | 光源環境 (來源弧度) 。 |
Vp₍s₎ | 點 p 的二進位可見度函式。 如果點可以看到光線,則為 1;如果沒有,則為 0。 |
Hnp₍s₎ | Lambert 法律中的余弦字詞。 等於 max ( (Np•s) ,0) 其中 Np 是點 p 的表面正常。 |
s | 在球體上整合的變數。 |
使用球面基礎函數,例如球面調音,下列方程式會近似光源環境。
其中:
參數 | 描述 |
---|---|
L (s) | 光源環境 (來源弧度) 。 |
i | 會加總基礎函式數目的整數。 |
O | 球面調音的順序。 |
li | 係數。 |
Yi (s) | 球體上的一些基礎函式。 |
這些係數的集合 L',提供函式 L () 的最佳近似值,以及基礎函式 Y (s) 。 替代和散發會產生下列方程式。
Yi (s) Vp₍s₎Hnp₍s₎ 是模擬器針對網格上每個頂點預先計算的傳輸係數tpi。 取代這會產生下列方程式。
將此變更為向量標記法會產生下列未壓縮的方程式,以計算每個通道的結束弧度。
其中:
參數 | Description |
---|---|
Rp | 頂點 p 的結束弧度。 |
pd | 表面的 albedo。 |
L' | li 的向量,而且是將來源弧度投影到球面調音基礎函式中。 這是球面調色係數的 Order不等向量。 |
Tp | 頂點 p 的 order?傳輸向量。 模擬器會將傳輸係數除以 p。 |
這兩個向量都是球面調色係數的 order不等向量,因此請注意,這只是點乘積。 視順序而定,點可能很昂貴,因此可以使用壓縮。 稱為「叢集主體元件分析」的演算法, (一) 個可有效率地壓縮資料。 這可讓您使用較高階的球面調色近似值,這會導致更明確的陰影。
其會提供下列方程式來近似傳輸向量。
其中:
參數 | 描述 |
---|---|
Tp | 頂點 p 的傳輸向量。 |
Mk | 叢集 k 的平均值。 |
j | 整數,會加總 PCA 向量的數目。 |
N | PCA 向量的數目。 |
wpj | 點 p 的第 jth PCA 權數。 |
Bkj | 叢集 k 的第 jth PCA 基礎向量。 |
叢集只是共用相同平均向量的一些頂點。 以下討論如何取得叢集平均數、PCA 權數、PCA 基礎向量,以及頂點的叢集識別碼。
取代這兩個方程式會產生:
然後散發點乘積會產生下列方程式。
因為 (Mk•L') 和 (Bkj•L') 是每個頂點的常數,樣本會以 CPU 計算這些值,並將其當做常數傳遞至頂點著色器;因為wpj 會變更每個頂點,所以此範例會將這個每個頂點資料儲存在頂點緩衝區中。
相關主題