VolumeParticle(1)

关于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效果,会是这样的:

VolumeParticle(1)_第1张图片

 

这里面包含了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上去就可以。

 


原文链接: http://blog.csdn.net/ccanan/article/details/5104625

你可能感兴趣的:(VolumeParticle(1))