DX提供了一组用来操作Sphereical Harmonic的基本函数,如D3DSHAdd、D3DSHDot、D3DSHEvalDirection等;其中有一个是D3DSHProjectCubeMap,用来从CubeMap投影得到对应的SH系数,还是蛮有用的。一般情况下,在游戏场景中需要使用Light Probe时需要设置不同的采样点,然后生成对应上的Probe并计算SH系数,这些SH系数用来实时计算环境光对物体的影响。计算Probe的SH系数有一般有两种方法:
- 使用Ray-Tracing的方法:直接从Probe所处的位置上向外进行光线发射并求交得到球面采样点上的环境采样值,并做球谐系数的计算。一般来说这种方法可能比较麻烦,甚至会比较慢,特别是在游戏中所使用的场景较大、且引擎并不直接支持光线跟踪时更为不便;
- 使用Raster Cube-Map的方法:首先使用GPU渲染管线生成Probe位置上的一个Cube-Map,然后在此Cube-Map的基本上计算该点所对应的SH系数。一般来说,在引擎的场景编辑器中可能已经集成了生成Cube-Map的功能(因有许多地方会用到Cube-Map,比如各种静态反射等),因而此种方法使用起来就很方便,只需增加一个从Cube-Map到SH的计算即可。
从Cube-Map计算其对应的SH系数也同样有两种方法:第一种同样类