預先計算的弧度傳輸 (Direct3D 9)

使用預先計算的弧度傳輸

有趣的場景中存在數種複雜度形式,包括光源環境如何模型化 (,也就是區域光源模型與點/方向光源模型) ,以及模型化 (的全域效果類型,例如陰影、縮色、子表面散佈圖。) 傳統互動式轉譯技術模型,此複雜度有限。 PRT 會利用一些重大限制來啟用這些效果:

  • 物件假設為固定 (也就是說,沒有) 。
  • 它是以物件為中心的方法 (除非物件一起移動,否則這些全域效果不會在兩者之間維護) 。
  • 只有低頻率光源會模型化 (產生虛陰影。) 對於高頻率光線 (尖峰陰影) ,必須採用傳統技術。

PRT 需要下列其中一項,但不需要兩者:

  • 高度鑲嵌模型和vs_1_1
  • ps_2_0

標準擴散光源與 PRT

下圖是使用傳統 (n • 轉譯l) 光源模型。 您可以使用另一個傳遞來啟用尖角陰影,而某種形式的陰影技術 (陰影深度地圖或陰影磁片區) 。 如果陰影是) 或更複雜的著色器搭配傳統技術使用,則新增多個光線需要多個傳遞 (。

使用傳統光源模型呈現之圖例的螢幕擷取畫面

下一個圖例會使用可解析的單一方向光線最佳近似值來轉譯 PRT。 這會導致難以透過傳統技術產生虛陰影。 因為 PRT 一律會建立完整的光源環境模型,新增多個光線或使用環境對應,所以您只會變更值 (,但不會變更著色器所使用的常數數目) 。

使用 prt 轉譯之圖的螢幕擷取畫面

PRT 與 Intuneflections

直接光源會直接從光線到達表面。 跳動是一些其他表面一些次數之後,觸達表面的光線。 PRT 只要使用不同的參數執行模擬器,即可在執行時間建立此行為的模型,而不需要變更效能。

下圖是使用直接 PRT 建立的, (0 個彈跳,沒有) 。

僅使用直接 prt 轉譯之圖的螢幕擷取畫面

下圖是使用 PRT 搭配 intuneflections (2 個彈跳搭配) 。

使用 prt 搭配 intuneflections 轉譯之圖的螢幕擷取畫面

具有子表面散佈的 PRT

子表面散佈是一種技術,可模型化光線如何通過特定材質。 例如,針對手部的手部按一個光燈。 來自手電筒筒的光線會通過手部、繞著 (變更) 的色彩,然後離開手邊的另一邊。 這也可以透過模擬器的簡單變更來建立模型,而且不會變更執行時間。

下圖示范具有子表面散佈的 PRT。

使用 prt 搭配子表面散佈所呈現之圖的螢幕擷取畫面

PRT 的運作方式

下列詞彙適用于瞭解 PRT 的運作方式,如下圖所示。

來源弧度:來源弧度代表整個光源環境。 在 PRT 中,任意環境是使用球面調音基礎來近似的 - 此光源會假設相對於物件遠, (使用環境對應所做的相同假設。)

結束弧度:結束弧度是從表面的任何可能來源離開的光線, (反射的弧度、子表面散佈、發出) 。

傳輸向量:傳輸向量會將來源弧度對應到結束弧度,並使用複雜的光線傳輸模擬預先計算離線。

prt 運作方式的圖表

PRT 會將轉譯程式納入兩個階段,如下圖所示:

  1. 昂貴的光線傳輸模擬會預先計算可在執行時間使用的傳輸係數。
  2. 相對輕量型執行時間階段會先使用球面調色基礎來近似光源環境,然後使用這些光源係數和從階段 1) (預先計算的傳輸係數,以簡單的著色器產生結束弧度 (離開物件) 。

prt 資料流程的圖表

如何使用 PRT API

  1. 使用其中一個計算來計算傳送向量... ID3DXPRTEngine的方法。

    直接處理這些傳輸向量需要大量的記憶體和著色器計算。 壓縮可大幅減少所需的記憶體和著色器計算量。

    最終光源值是在實作下列壓縮轉譯方程式的頂點著色器中計算。

    prt 轉譯的方程式

    其中:

    參數 Description
    Rp 頂點 p 的結束弧度單一通道,會在網格上的每個頂點進行評估。
    Mk 叢集 k 的平均值。 這是係數的 Order¹ 向量。
    k 頂點 p 的叢集識別碼。
    L' 來源弧度對 SH 基礎函式的近似值。 這是係數的 Order¹ 向量。
    j 整數,會加總 PCA 向量的數目。
    wpj 點 p 的第 jth PCA 權數。 這是單一係數。
    Bkj 叢集 k 的第 jth PCA 基礎向量。 這是係數的 Order¹ 向量。

     

    擷取... ID3DXPRTCompBuffer 的方法可讓您從模擬存取壓縮的資料。

  2. 計算來源弧度。

    API 中有數個協助程式函式可處理各種常見的光源案例。

    函式 用途
    D3DXSHEvalDirectionalLight 大約是傳統的方向光線。
    D3DXSHEvalSphericalLight 大約本機球面光源。 (請注意,PRT 僅適用于距離光源環境。)
    D3DXSHEvalConeLight 大約距離的區域光源。 例如,太陽 (非常小的圓錐角度) 。
    D3DXSHEvalHemisphereLight 評估兩種色彩之間的線性內插補點, (球) 的每個極一個。

     

  3. 計算結束弧度。

    方程式 1 現在必須使用頂點或圖元著色器在每個點進行評估。 在評估著色器之前,必須將常數預先計算並載入常數資料表, (請參閱 PRT 示範範例 以取得詳細資料) 。 著色器本身是這個方程式的直接實作。

    struct VS_OUTPUT
    {
        float4 Position   : POSITION;   // vertex position 
        float2 TextureUV  : TEXCOORD0;  // vertex texture coordinates 
        float4 Diffuse    : COLOR0;     // vertex diffuse color
    };
    
    VS_OUTPUT Output;   
    Output.Position = mul(vPos, mWorldViewProjection);
    
    float4 vExitR = float4(0,0,0,0);
    float4 vExitG = float4(0,0,0,0);
    float4 vExitB = float4(0,0,0,0);
    
    for (int i=0; i < (NUM_PCA_VECTORS/4); i++) 
    {
       vExitR += vPCAWeights[i] * 
           vClusteredPCA[iClusterOffset+i+1+(NUM_PCA_VECTORS/4)*0];
       vExitG += vPCAWeights[i] * 
           vClusteredPCA[iClusterOffset+i+1+(NUM_PCA_VECTORS/4)*1];
       vExitB += vPCAWeights[i] * 
           vClusteredPCA[iClusterOffset+i+1+(NUM_PCA_VECTORS/4)*2];
    }
    
    float4 vExitRadiance = vClusteredPCA[iClusterOffset];
    vExitRadiance.r += dot(vExitR,1);
    vExitRadiance.g += dot(vExitG,1);
    vExitRadiance.b += dot(vExitB,1);
    
    Output.Diffuse = vExitRadiance;
    

參考資料

如需 PRT 和球面調音的詳細資訊,請參閱下列檔:

Precomputed Radiance Transfer for Real-Time Rendering in Dynamic, 
Low-Frequency Lighting Environments 
P.-P. Sloan, J. Kautz, J. Snyder
SIGGRAPH 2002 

Clustered Principal Components for Precomputed Radiance Transfer 
P.-P. Sloan, J. Hall, J. Hart, J. Snyder 
SIGGRAPH 2003 

Efficient Evaluation of Irradiance Environment Maps 
P.-P. Sloan 
ShaderX 2,  W. Engel 

Spherical Harmonic Lighting: The Gritty Details 
R. Green 
GDC 2003 

An Efficient Representation for Irradiance Environment Maps 
R. Ramamoorthi, P. Hanrahan 

A Practical Model for Subsurface Light Transport 
H. W. Jensen, S. R. Marschner, M. Levoy, and P. Hanrahan 
SIGGRAPH 2001 

Bi-Scale Radiance Transfer 
P.-P. Sloan, X. Liu, H.-Y. Shum, J. Snyder
SIGGRAPH 2003 

Fast, Arbitrary BRDF Shading for Low-Frequency Lighting Using Spherical 
Harmonics 
J. Kautz, P.-P. Sloan, J. Snyder
12th Eurographics Workshop on Rendering 

Precomputing Interactive Dynamic Deformable Scenes 
D. James, K. Fatahalian 
SIGGRAPH 2003 

All-Frequency Shadows Using Non-linear Wavelet Lighting Approximation 
R. Ng, R. Ramamoorth, P. Hanrahan 
SIGGRAPH 2003 

Matrix Radiance Transfer 
J. Lehtinen, J. Kautz
SIGGRAPH 2003 

Math World 
E. W. Weisstein, Wolfram Research, Inc. 

Quantum Theory of Angular Momentum 
D. A. Varshalovich, A.N. Moskalev, V.K. Khersonskii 

進階主題

PRT 方程式 (Direct3D 9)

以紋理表示 PRT (Direct3D 9)

ID3DXPRTBuffer

ID3DXPRTCompBuffer

ID3DXPRTEngine

ID3DXTextureGutterHelper

預先計算的弧度傳輸函式

數學函式