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(s) 球に対する何らかの基礎関数。

これらの係数 L' のコレクションは、基本関数 Y を持つ関数 L に最適な近似を提供します。 を代入して分散すると、次の式が生成されます。

l を置き換え、分散した後の終了の輝度の式

Yi(s)Vp₍s₎Hnp𔖅s₎ の整数は、シミュレーターがメッシュ上のすべての頂点に対して事前計算する転送係数 tpi です。 これを代入すると、次の式が生成されます。

転送係数を代入した後の終了の輝度の式

これをベクター表記に変更すると、次の非圧縮式が生成され、各チャネルの終了の輝度が計算されます。

ベクター表記に変更した後の終了の輝度の式

ここで、

パラメーター 説明
Rp 頂点 p での終了の輝度。
pd 表面のアルベド。
L' l i のベクトルとは、球面の球面の球面基礎関数へのソースの射影です。 これは球面の球面の球面係数の順序のベクトルです。
Tp 頂点 p の order² 転送ベクトル。 シミュレーターは、転送係数を p で除算します。

これらのベクトルはどちらも球面の球面係数の注文ベクトルなので、これは単なるドット積である点に注意してください。 順序によっては、ドットが高コストになる可能性があります。そのため、圧縮を使用できます。 クラスター化されたプリンシパル コンポーネント分析 (CPCA) と呼ばれるアルゴリズムは、データを効率的に圧縮します。 これにより、より高い順序の球面の近似を使用できます。これにより、影がシャープになります。

CPCA は、転送ベクトルを近似する次の式を提供します。

近似転送ベクトルの式

ここで、

パラメーター 説明
Tp 頂点 p の転送ベクトル。
Mk クラスター k の平均。
j PCA ベクトルの数を合計する整数。
N PCA ベクトルの数。
w踏み込み ポイント p の j 番目の PCA の重み。
B持ち込み クラスター k の j 番目の PCA 基礎ベクトル。

クラスターは、同じ平均ベクトルを共有する頂点の数です。 以下では、クラスター平均、PCA の重み付け、PCA 基本ベクトル、および頂点のクラスター ID を取得する方法について説明します。

次の 2 つの式を代入すると、次の結果が得られる。

転送ベクトルを代入した後の終了の輝度の式

次に、ドット製品を分散すると、次の式が生成されます。

ドット製品を分散した後の終了の輝度の式

両方が (Mk·L') と (B́)L') は頂点あたりの定数です。サンプルでは、CPU を使用してこれらの値を計算し、それらを定数として頂点シェーダーに渡します。wpj は各頂点に 対して変更を行うので、この頂点ごとのデータは頂点バッファーに格納されます。

事前計算済み Radiance Transfer