預先計算輻射傳輸 (Direct3D 9)
使用預先計算的輻射傳輸
有趣的場景中存在數種複雜度,包括如何模型化光源環境(也就是區域光源模型與點/方向模型),以及模型化何種全域效果(例如陰影、外星形、子表面散佈)。傳統的互動式轉譯技術會建立有限數量的這種複雜度模型。 PRT 會透過一些重大限制來啟用這些效果:
- 對象被假設為殭化(即沒有變形)。
- 它是以物件為中心的方法(除非物件一起移動,否則它們之間不會維護這些全域效果)。
- 只有低頻光源會模型化(導致柔和陰影。對於高頻率燈光(尖銳的陰影),傳統技術必須採用。
PRT 需要下列任一項,但不需要兩者:
- 高度鑲嵌模型和vs_1_1
- ps_2_0
標準擴散光源與 PRT
下圖是使用傳統 (n • l) 光源模型來轉譯。 您可以使用另一個傳遞和某種形式的陰影技術來啟用銳利陰影(陰影深度地圖或陰影磁碟區)。 新增多個燈光需要多個傳遞(如果要使用陰影),或具有傳統技術的更複雜的著色器。
下一個圖例會使用可解析的單向光線的最佳近似值來轉譯 PRT。 這會導致使用傳統技術難以產生的柔和陰影。 因為PRT一律會建立新增多個光源或使用環境對應的完整光源環境模型,因此您只會變更著色器所使用的常數值(但不會變更數目)。
呈現的圖例螢幕快照
PRT 與內星流
直接光源會直接從光線到達表面。 在從其他表面彈跳一些次數后,外星是光線到達表面。 PRT 可以建立此行為的模型,而不需要變更運行時間的效能,只要使用不同的參數執行模擬器即可。
下圖僅使用直接 PRT 建立(0 個沒有外星彈跳的彈跳)。
下圖是使用 PRT 搭配外星轉 (2 個彈跳與外星彈跳) 建立的。
具有子表面散佈的 PRT
地下散佈是一種技術,可模型化光線通過特定材質的方式。 例如,在手掌上按下點亮的手電筒筒。 手電筒筒筒的光線通過你的手,彈跳周圍(在過程中改變顏色),然後離開你的手的另一邊。 您也可以使用模擬器的簡單變更來建立模型,而且不會變更運行時間。
下圖示範 PRT 與子表面散佈。
使用prt搭配子表面散佈
PRT 的運作方式
下列詞彙有助於瞭解PRT的運作方式,如下圖所示。
來源輻射:來源輻射代表整體的光源環境。 在PRT中,任意環境是使用球面調和基礎來近似的 -- 此光源會假設相對於物件很遠(與環境地圖相同的假設。
出口輻射:出口輻射是從任何可能來源(反射輻射、地下散佈、發射)表面點離開的光線。
傳輸向量:傳輸向量會將來源輻射對應到出口輻射,並使用複雜的光傳輸模擬預先計算離線。
prt 運作方式的
PRT 會將轉譯程式納入兩個階段,如下圖所示:
- 昂貴的輕傳輸模擬會先行計算可在運行時間使用的傳輸係數。
- 相對輕量型的運行時間階段會先使用球形調和基礎來近似光源環境,然後使用這些光源係數和預先計算的傳輸係數(從第 1 階段使用簡單著色器),進而產生出口輻射(離開物件的光線)。
prt 數據流
如何使用 PRT API
使用其中一個計算...來計算傳輸向量...ID3DXPRTEngine的方法。
直接處理這些傳輸向量需要大量的記憶體和著色器計算。 壓縮可大幅減少所需的記憶體和著色器計算量。
最終光源值會以頂點著色器計算,以實作下列壓縮轉譯方程式。
prt 轉譯方程式
哪裡:
參數 描述 Rp 頂點 p 的結束弧度單一通道,並在網格上的每個頂點進行評估。 Mk 叢集 k 的平均值。 這是係數的Order向量。 k 頂點 p 的叢集標識碼。 L' 來源輻射到SH基礎函式的近似值。 這是係數的Order向量。 j 整數,可加總 PCA 向量的數目。 wpj 點 p 的第 jth PCA 權數。 這是單一係數。 Bkj 叢集 k 的第 jth PCA 基礎向量。 這是係數的Order向量。 擷取...ID3DXPRTCompBuffer 方法可讓您從模擬存取壓縮的數據。
計算來源輻射。
API 中有數個協助程式函式可處理各種常見的光源案例。
功能 目的 D3DXSHEvalDirectionalLight 大約是傳統的方向光線。 D3DXSHEvalSphericalLight 近似局部球面光源。 (請注意,PRT 僅適用於距離光源環境。 D3DXSHEvalConeLight 近似遙遠的區域光源。 例如太陽(非常小的圓錐角度)。 D3DXSHEvalHemisphereLight 評估光線,這是兩種色彩之間的線性插補點(一個在球體的每個極上)。 計算結束輻射。
方程式 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
相關主題