Occlusion_query的学习与使用

硬件occlusion query目前有三种,依其历史上出现先后排序为:HP_occlusion_test、NV_occlusion_query、ARB_occlusion_query。

首先给出相关资源列表:
1.  http://www.codesampler.com/oglsrc/oglsrc_7.htm#ogl_occlusion_query
2.  http://www.opengl.org/registry/specs/NV/occlusion_query.txt
3.  http://oss.sgi.com/projects/ogl-sample/registry/ARB/occlusion_query.txt
4.  Nvidia GDC2002_occlusion.pdf

occlusion query是用Depth Buffer判断几何体的可见性,此功能的用途较为广泛,如用它可做以下工作:1.Incremental Object-level Culling 2.Order Independent Transparency 3.Lens Flares,Halos,etc 4.Stencil Shadow Volumes


HP_occlusion_test的缺点:
1.它的返回值只有True和False两种状态,而很多时候我们是需要知道通过Depth Test的Pixel(Sample)个数的.
2.它是一种"Stop-and-wait"模式,当有多个查询时,这样会消耗很多时间,因为必须等到取得了前一个查询结果才能进行下一次查询.


NV_occlusion_query解决了以上两个问题.
1.它能返回通过Depth Test的Pixel(Sample)个数,我们可以对一个Geometry的包围盒作NV_occlusion_query,利用其通过的Pixel(Sample)个数近似确定渲染应采用的细节度Level of detail,或者只有当通过的Pixel个数大于某个阈值时再绘制这个Geometry.
2.可以同时进行多个查询,在所有查询后再随意取得某个查询结果,这样解放了等待时间.可以在查询的时候做其他一些工作,如CPU进行其他计算,不会防碍CPU与GPU的并行性.

对于NV_occlusion_query的详细运用,在Nvidia的GDC2002_occlusion.pdf中有较为详细的描述,我还没有看.
在CULLIDE: Interactive Collision Detection Between Complex Models in Large Environments using Graphics Hardware一文中利用了此功能做碰撞检测:当一个Geometry相对于Depth Buffer完全可见时,则此Geometry与Depth Buffer中已经绘制的Geometries不会发生碰撞,文章就是利用这样的思想去做碰撞检测的排除。

ARB_occlusion_query与NV_occlusion_query本质相同,只是更加标准化了,也稍微有所完善吧。详情见:http://oss.sgi.com/projects/ogl-sample/registry/ARB/occlusion_query.txt。 

阅读更多
换一批

没有更多推荐了,返回首页