预计算的辐射传输 (Direct3D 9)
使用预计算辐射传输
有趣的场景中存在多种形式的复杂性,包括如何建模照明环境 (即区域照明模型与点/方向) ,以及 (模拟哪种类型的全局效果,例如阴影、外星反射、地下散射。) 传统的交互式渲染技术模型,这种复杂性有限。 PRT 支持这些效果,但存在一些重大限制:
- 假定对象是刚性 (也就是说,) 没有变形。
- 这是一种以对象为中心的方法 (除非对象一起移动,否则这些全局效果不会在它们之间维护) 。
- 仅对低频照明进行建模, (产生柔和阴影。) 对于) 锐锐阴影 (高频灯光,必须采用传统技术。
PRT 需要以下任一项,但不能同时满足以下两项:
- 高度细化模型和vs_1_1
- ps_2_0
标准漫射照明与 PRT
下图是使用传统 (n ·l) 照明模型。 可以使用另一个通道和某种形式的阴影技术 (阴影深度贴图或阴影卷) 启用锐化阴影。 添加多个光需要多次传递 (如果要使用阴影) 或更复杂的着色器使用传统技术。
下一张插图使用 PRT 渲染,使用它可以解析的单向光的最佳近似值。 这会导致使用传统技术难以产生的柔和阴影。 由于 PRT 始终为添加多个灯或使用环境映射的完整照明环境建模,因此仅更改着色器使用的常量 (值,而不更改着色器使用的常量数) 。
具有 Interreflections 的 PRT
直接照明直接从光线到达表面。 外向曲折是光在从其他表面弹跳一些次数后到达表面。 PRT 只需使用不同的参数运行模拟器即可在不更改运行时的性能的情况下为此行为建模。
下图是使用直接 PRT 创建的,仅 (0 次反弹,) 没有外向曲折。
下图是使用 PRT 和内向曲 (2 次弹跳) 创建的。
具有地下散射的 PRT
地下散射是一种模拟光线如何通过某些材料的技术。 例如,将点亮的手电筒按在手掌上。 手电筒的光穿过你的手,在) 过程中 (颜色变化时反弹,然后从手的另一侧退出。 也可以通过对模拟器的简单更改和运行时的更改来建模。
下图演示了具有地下散射的 PRT。
PRT 的工作原理
以下术语有助于了解 PRT 的工作原理,如下图所示。
源辐射:源辐射表示整个照明环境。 在 PRT 中,任意环境是使用球面调和基础来近似的 - 假定此照明相对于对象很远, (环境映射所做出的相同假设。)
退出辐射:退出辐射是从表面的某个点从任何可能的源 (反射辐射、地下散射、发射) 离开的光。
传输向量:传输向量将源辐射映射到出口辐射,并使用复杂的光传输模拟进行脱机预计算。
PRT 将呈现过程分为两个阶段,如下图所示:
- 昂贵的光传输模拟预先计算可在运行时使用的传输系数。
- 相对轻量的运行时阶段首先使用球面调和基来近似照明环境,然后使用这些照明系数和预计算的传输系数从阶段 1) (一个简单的着色器,导致 (离开对象的光线) 。
如何使用 PRT API
使用计算向量之一计算传输向量... ID3DXPRTEngine 的方法。
直接处理这些传输向量需要大量的内存和着色器计算。 压缩可显著减少所需的内存量和着色器计算量。
最终的照明值在实现以下压缩呈现公式的顶点着色器中计算。
其中:
参数 说明 Rp 在顶点 p 处退出辐射的单个通道,并在网格上的每个顶点处进行评估。 Mk 群集 k 的平均值。 这是系数的 Order² 向量。 k 顶点 p 的群集 ID。 L' 源辐射到 SH 基函数的近似值。 这是系数的 Order² 向量。 j 对 PCA 向量数求和的整数。 wpj 点 p 的第 j 个 PCA 权重。 这是单个系数。 Bkj 群集 k 的第 j 个 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
相关主题