原来是想做IrradianceVolume的笔记,但是显然ATI这篇文章要更加全面和深入,所以直接这个吧。
Link:
http://ati.amd.com/developer/gdc/Tatarchuk_Irradiance_Volumes.pdf
这个文章涵盖了几个方面:
几个概念:
SH:
PRT:
前面介绍的是环境对object的光照影响,但是没法处理物体自己对自己的光照影响。
这样就可以用precomputed radiance transfer来搞定。
前面的blog有介绍,这里跳过。
就是要注意的是,PRT不好旋转,所以可以旋转环境来模拟。
Irradiance Volume
这里就是处理高效存储scene里面的irradiance信息的事情了。
就是用空间分割(各种树,比如8叉树,或更加adaptive的8叉树)来做一个irradiance的cache。
树的节点存的是irradianc投射在SH上的系数,使用的时候就是一顿lerp,得出需要的点的SH 系数,然后用就可以了。
分割空间的时候纯8叉树比较费(很多地方不用继续分割了),所以就用更加灵活的8叉树,叫:
adaptive volume subdivision.
这个dx sample里面有,房子那个。
其实到这一步,怎样分布已经可以非常灵活的根据游戏需要来做了,例如killzone2,就可以让artist来设定那里需要放置sample点,有些地方player没法到达的,就可以直接跳过了。
后面记录了一些GPu帮助划分的方法,harmonic depth mean,刚才记录了一遍,但是csdn出错了,实在不想再打一遍了。
反正觉得没什么大的实用性。
最后应用irradiance volume就是根据具体的点,sample周围8叉树节点,然后根据距离做插值,然后应用SH系数就可以了。
总结: