预计算辐射传输 (Direct3D 9)

使用预计算辐射传输

有趣的场景中存在多种形式的复杂性,包括照明环境如何建模 (,即区域照明模型与点/方向模型) 以及哪种类型的全局效果建模 (例如阴影、传体、子表面散点。) 传统交互式呈现技术模型有限数量的这种复杂性。 PRT 通过一些重大限制启用这些效果:

  • 对象假定为刚性 (,即没有变形) 。
  • 它是一种以对象为中心的方法 (,除非对象一起移动,否则这些全局效果不会在它们之间保持) 。
  • 只有低频照明建模 (导致软阴影。) 对于高频率光 (锐度阴影) ,传统技术必须采用。

PRT 需要以下任一项,但不需要两者:

  • 高度分割模型和vs_1_1
  • ps_2_0

标准漫射照明与 PRT

下图是使用传统 (n 呈现的。l) 照明模型。 可以使用另一个传递和某种形式的阴影技术 (阴影深度地图或阴影卷) 启用尖锐阴影。 如果阴影) 或更复杂的着色器与传统技术一起使用,则添加多个灯将需要多个传递 (。

screen shot of an illustration rendered by using the traditional lighting model

下一张插图使用 PRT 呈现,其可解析的单个方向光的最佳近似值。 这会导致使用传统技术难以生产的软阴影。 由于 PRT 始终对添加多个灯光或使用环境映射的完整照明环境建模,因此只会更改着色器使用的常量数 (但不会更改常量的数量) 。

screen shot of an illustration rendered by using prt

PRT 与 Interreflections

直接照明直接从光到达表面。 在从其他一些表面弹跳一些次数后,异变是光线到达表面。 PRT 可以通过仅使用不同的参数运行模拟器来对此行为进行建模,而无需在运行时更改性能。

下图是使用直接 PRT 创建的,只 (0 个弹跳,没有) 。

screen shot of an illustration rendered by using direct prt only

下图是使用 PRT 创建,其中包含 (2 个弹跳,其中 2 个弹跳) 。

screen shot of an illustration rendered by using prt with interreflections

带子表面散点的 PRT

子表面散点是一种技术,用于模拟光如何通过某些材料。 例如,在手掌上按点亮的手电筒。 手电筒中的光通过你的手,在过程中) (变化的颜色四处弹跳,然后从手的另一边退出。 此外,还可以对模拟器进行简单的更改建模,并且不会对运行时进行更改。

下图演示了具有子表面散点的 PRT。

screen shot of an illustration rendered by using prt with subsurface scattering

PRT 的工作原理

以下术语可用于了解 PRT 的工作原理,如下图所示。

源辐射:源辐射表示整个照明环境。 在 PRT 中,任意环境使用球面调和基数进行近似 - 假定此照明相对于对象遥远, (使用环境地图所做的相同假设。)

退出辐射:出口辐射是从表面的某个点离开的光,从任何可能的源 (反射辐射、子表面散射、排放) 。

传输矢量:传输矢量将源辐射映射到退出辐射,并使用复杂的光传输模拟预计算脱机。

diagram of how prt works

PRT 将呈现过程分为两个阶段,如下图所示:

  1. 昂贵的轻型传输模拟预计算可在运行时使用的传输系数。
  2. 相对轻量级的运行时阶段首先使用球形调和基数近似照明环境,然后使用这些照明系数和从第 1 阶段 () 的预计算传输系数与简单的着色器) ,从而 (离开对象的光) 。

diagram of prt data flow

如何使用 PRT API

  1. 使用其中一个计算... 计算传输向量... ID3DXPRTEngine 的方法。

    直接处理这些传输向量需要大量的内存和着色器计算。 压缩可显著减少所需的内存和着色器计算量。

    最终的照明值在实现以下压缩呈现公式的顶点着色器中计算。

    equation of prt rendering

    其中:

    参数 描述
    Rp 顶点 p 处的退出辐射的单个通道,并在网格上的每个顶点处进行评估。
    Mk 群集 k 的平均值。 这是系数的 Order 平方英尺矢量。
    k 顶点 p 的群集 ID。
    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

预计算弧度传输函数

数学函数