树的渲染的大部分消耗都是花在树叶上,为了是树叶看起来很茂密,美术一般会加很多叶子的三角形,但是三角形太多的话会让vs压力很大,因为树叶的动画都是在vs里完成的,因此大多游戏都采用的是Leaf Card也就是Billboard Leaf,采用这个方法从每个角度看叶子的quad都是朝向camera的,因此从任何一个角度看都觉得叶子很茂密。
对美术来说这样就over了,因为观感好了很多,而且对他们来说制作也简单了,但是真正放到游戏里测一下会发现我的那个娘啊,这叶子也太费了,经常一个树的叶子在离camera比较近的时候会花0.5ms,这的确有点惊人啊,在GPA里分析了一下就会发现时Pixel太多了,虽然用了Alpha Test最后画到屏幕的像素并不是很多,但是在Alpha Test之前的像素数目是相当多的,一个屏幕像素会对应好几个叶子光栅化之后的像素,这就是所谓的overdraw。如果能减少overdraw,叶子的GPU时间就能降下来。
对于Particle渲染的时候overdraw往往会成为瓶颈,因此采用Particle Trimming的方法,这样可以减少大量的像素。同样对于树叶或者草这种用AlphaTest的东西也可以采用Particle Trimming的方法。
SpeedTree作为树渲染的工业级开发工具这个问题自然也是考虑在内的,在SpeedTree的Modeler里就可以根据树叶贴图的形状来生成一个可以包围所有像素的多边形,而不是原先的quad,这样虽然增加了一些顶点数目但是Pixel数目下降了很多,可以看到只增加了一个三角形PIxel数目就下降到原来的77%。实际测试性能发现对树叶和草都有大概20%的性能提升,这20%已经算是不小了,因为只是数据上做了一点手脚而已