在主城优化里,另外一个非常重要的工具就是遮挡剔除,好的遮挡剔除能极大地减少不必要的Drawcall(CPU对图形绘制接口的调用)数目,针对这个功能,我们采用的是软件光栅化的方法来在CPU上获得深度信息。

我们通过在建筑内制作保守的内包围盒来制作遮挡体,同时提供Debug视图来帮助美术判断这里的遮挡是否有效,除了显示遮挡体的深度图方式,我们也给了一个更直观的视图,这张视图显示了当前摄像机位置下的Drawcall数目以及物件类型,物件类型越多会导致占用内存的显存越多。有多少物件被遮挡剔除掉是用来衡量遮挡是否有效的,越多的遮挡体会导致越多的光栅化时间,应该控制在一定的范围内。
我们看到图像上的这个Bug模式,X轴是物件类型,Y轴是对应的物件数目,可以很直观地观察当前视角下物件种类和利用率的情况。

通过以上的这些工具,美术就可以有针对性地在不同的位置上调整模型位置或者重新制作遮挡体,以优化Drawcall数目、显存占用和绘出的三角形数目。优化之后,大部分观察点上的性能都能得到50%以上的提升。
在程序提供各式各样的工具让美术同学可以着手进行调整之后,程序这边也并行进行了一些新技术的研究,其中一个产出就是:将远景物件离线或者在线烘培成一个2D面片的Impostor(图片)。烘焙出的Impostor仍然保留Normal(法线)和高光,所以在渲染的时候仍然可以计算光照。

像上图所示,在技术内测的时候因为太远,Streaming(流式加载)物件无法加载,使得这个区域看起来十分地空。

