关于VolumeParticle这个名词比较难以定义,有的号称在sprite的texture里面加入normal信息,光照信息根据方向结果不同也算是volume particle。
在GPU Gems的Volume Rendering Technique里面:
http://http.developer.nvidia.com/GPUGems/gpugems_ch39.html
号称volume tech可以涉及到巨复杂的lighting transport信息,包括光线的emit,absorb,scattering,shadowing。
这个文章:
http://developer.download.nvidia.com/presentations/2009/GDC/NVIDIA_Effects_GDC09.pdf
提到在接下来的game industry将会有什么样的particle效果,会是这样的:
这里面包含了lighting shadowing和scattering。
谈及这个最好从http://http.developer.nvidia.com/GPUGems/gpugems_ch39.html说起,这里面包含了一个比较通用的用于volume渲染的方法。
不只是particle可以用,像light shaft也是可以的。
不考虑效率的话,volume rendering最开始在其他非realtime领域应用的时候是存了很多2d texture,形成了volume texture,这个texture可以存储大量的信息,可以认为是离线存储了raytracing的东西,shadow ,ao,scattering应有尽有。
在realtime化的时候需要对数据大小进行简化,使用过程中就是用比较少的数据的模型来近似。
和monte carlo离散化近似积分比较类似.
首先是有一个预计算的volume texture,
然后使用一堆平行分布的slice来sample volume tex,然后blur(学名是convolution),得出比较近似于准确值的效果。
文中slice应用到framebuffer的方式是alpha blend上去。
简单讲,思想就是用平行的slice来近似模拟连续的volume的概念。
上面是基于precomputed的volume texture然后sample的概念,下面是realtime的做计算,也是把结果用slice来承载,进而达到volume效果。
这种做法在crytek的lightshaft,xbox360也有个sample是lightshaft,就是用多个slice,做渲染,形成lighting volume的效果(其实里面已经包含了shadow信息了)
另外一个是nv那个文章(http://developer.download.nvidia.com/presentations/2009/GDC/NVIDIA_Effects_GDC09.pdf)里的shadowing,计算多个slice上的shadow,然后blend上去就可以。