这几天算是马马虎虎把q3map.exe的分割部分看完了,基于PVS的渲染与portal有个很大的区别就是,PVS需要把场景中所有的brush分割到底,所以它的leaf要么是完全实心的,要么是完全空的,portal的bsp则只需要对主框架进行分割,有一个例子就是楼梯的n个台阶,基于PVS的每一个台阶在不同的leaf中,基于portal它们就在同一个leaf。我记录的数据是:某quake3地图,有大约3000个leaf,而比它大一些的doom3地图,却只有90几个leaf。。。
PVS的好处就是数据为静态,渲染的时候不需要计算,但它对动态物体的判断不够好,假如有一个需要3pass+perpixel light渲染的怪物(我说的就是doom3。。。)在某leaf中移动,如果用原始的view frustum做culling无法达到真正的剔除。
然后说说把一个个bsp房屋放在大规模室外场景中的办法,如果用PVS,对于任何一个房子,用它所有brush加上世界的边界盒做PVS,这样房子外的任何一点对于每个房子都有它自己的leaf,房子可以平移和旋转,当然只是在地图设计的时候,只要将分割平面与brush做对应变换就行了。这只是一个想法,总觉得动手做的时候会有麻烦,而且外部leaf的PVS精确性会随着场景变大而变低。。。
用portal好像才是正道,每个bsp有一个aabb,同时保存着对外部的入口比如各种门窗,渲染时候判断一下在不在bsp内,在内部的话就用leaf的portal,在外部就用外部的portal。
最后说下level editor,brush的编辑器用q3的就可以了,如果要输出portal,需要做小小的修改,或者用brush的一些属性来标识一下,doom3的编辑器是手动放portal的,如果把分割面指定好了,自动生成也是有办法的。。。
相关讨论:
http://blog.gameres.com/thread.asp?BlogID=118&threadid=23754