现在的HSR(hidden surface removal)算法基本上可以分为四种:backface culling、frustum culling、portal culling、occlusion culling(遮挡筛选)。它们的作用分别如下:backface culling用于剔除mesh背面的triangle,frustum culling用于剔除屏幕之外的物体,portal culling用于剔除不能通过portal看到的物体,而occlusion culling用于剔除场景中被自己前面的物体所遮挡的物体。其中前两种算是最常用的算法了,对于backface culling来说它已经在GPU的硬件上实现,不过为了减少传输带宽,在适当的地方你也可以将其使用到CPU部分,主要是指地形这样的大规模MESH上,如何使用这需要看你是如何组织地形数据的,当你使用triangle strip渲染地形时,尽量按块来对地形进行culling,而当你使用triangle list来渲染地形时,你就可以尝试使用逐triangle来对其进行culling,关于实际使用应该使用哪种方法,需要你自己试验一下。frustum culling由于太普遍这里不再解释,而portal culling如果详细介绍的话那就是另外一篇文章了,简单的说就是如果相机不能通过一扇门看到房子,那么房子里的所有物体都被culling掉而不需要渲染,下面我举一个简单的例子来看看它为什么不能作到完全的剔除:
上面可以看作是一个房子,Portal为房间的门,如果我们做portal culling计算时,npc是可见的,但由于前面存在物体wall,应当是不可见的,但是portal culling并没有将其剔除,因此npc还是会被传送到GPU进行渲染。
这个时候就需要可以使用occlusion culling技术来弥补这个缺憾了,因此在一个portal引擎中必然需要OC技术来配合使用,这里再举一个outdoor的例子,在室外存在一个building,我们可以使用building的门和窗户作为portal来对building内部进行culling,将building作为一个occluder对整个场景进行OC操作。根据相关文献提供的资料,当场景使用OC技术后会比不使用OC的场景提高30%到70%不等的FPS,因此如果有可能的话应尽量将OC技术加入到你的引擎中,而且OC技术并不是只能使用到portal引擎中,它可以被使用到任意技术构建的引擎中。
HSR算法-Occlusion Culling
最新推荐文章于 2024-06-22 19:00:57 发布