bsp+port的灯光剔除

来源:互联网 发布:python yield函数 编辑:程序博客网 时间:2024/05/02 01:57

继续前面那篇日志,前面只写了如何进行光照,而没有解释灯光哪来,因为我们很清楚一个像DOOM3那样的场景灯光数量是很多的,但是我们实际看到的也就那么点了。所以需要进行剔除,找出对我们视野像素有影响的灯光。灯光的剔除与我们普通OBJ基本相似,但是也有很大的不同,普通OBJ是固定样子的,而灯光是无孔不钻的,而我们定义灯光的时候必须定义灯光的作用范围R,这样灯光就可以用个半径为R的模型来表示。

  剔除,首先还是进行粗略的剔除,在这个过程中能够剔除很大部分的灯光,和普通的BSP通过PORT来剔除差不多,接下来的剔除是通过深度通过查询来判断是否可用(渲染灯光前已经渲染了遍场景,所以深度确定了),做法是,导入个半径为单位1的球体模型,然后开启深度测试(关闭写入深度)就行灯光半径的放缩渲染,然后检查通过深度测试的像素数,如果大于0就表面灯光影响到了我们的视野(这个绝对有必要,因为一个可见的灯光意味着后面我们要渲染一遍场景,这个很恐怖的)。

  另外我们可以看到他最后单独处理了透明物体,这个应该没什么的,因为zprepass无法处理透明情况,所以需要单独PASS来渲染~