计算Cube Map的SH系数

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系数也同样有两种方法:第一种同样类似于光线跟踪,只不过这里可以直接从Cube-Map对应的Texture中采样到相应光线方向上的场景信息,当然,这需要额外实现一下,但是却可以更加灵活地控制采样数量等一些参数;另一种方法就是使用DX提供的D3DSHProjectCubeMap来直接进行计算。其传入两个参数:SH的Order以及Cube-Map贴图,返回对应Order上R、G、B三个通道上的SH系数(注意要根据SH的Order传入足够的系数空间)。简单试用了一下,效果还可以(计算出SH系数后再重建):

当然,这个不只能Light Probe能够用上,其它诸如Irradiance Environment Map等的计算同样可以这样操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章