我所遭遇过的游戏中间件---SpeedTree
SpeedTree是一个专门用于渲染植被的中间件,并提供了一套完善的植物编辑工具。在它官方提供的DEMO中,你会看到高度逼真的树木和植物,在风的影响下树影婆娑,十分精美.感觉它的Shader写到了极致,让我有种叹为观止的感觉.SpeedTree有两大特点,其一就是牛B的Shader,可以渲染出美伦美奂的植物,其二是高效的场景植被管理引擎,可以高效地对场景植物进行剔除.
先说其Shader.看过网上几篇关于SpeedTree的文章,将其图形数据分成三类,树干,树枝,树叶.而实际上应该为四类,其树叶有两种,一种是Mesh树叶,另一种是Billboard树叶.每一种图形数据对应其自己的顶点格式和渲染Shader.
再说其植被管理引擎,可以管理几十万棵树,效率非常高.不过游戏都会有自己的场景模型管理模块,SpeedTree的植被管理与引擎自身的场景管理有重复的地方,所以有些引擎会不使用SpeedTree的植被管理.此外,使用植被管理时需要注意:(1)启动剔除引擎时,不能对树进行编辑,即:添加,删除,修改.(2)关闭剔除引擎时后,如果当前场景中的树很多,最好删除一定的树,否则运算量太大可能会造成崩溃.
SpeedTree对LOD的处理也是非常值得称道,其Shader处理会考虑到两级LOD间的过度,其顶点数据中会记录两级LOD的位置,从而实现非常平稳地过度.因此当在SpeedTree的场景中移动时,你会发现其植物十分自然地发生变化,由清晰的图形变成Billboard.
我是09年开始搞SpeedTree的,时间有些久了,很多细节都已经记不清了.当时写过两个SpeedTree的模块,一个是4.0版本的,一个是5.1版本的.然而这两个模块都没有最终用在游戏中.因为最终的使用方案是,我又写一个模型转化工具,将SpeedTree的SRT文件转化成自己定义的文件格式,然后改写其Shader.这样根本就没有必要花钱买SpeedTree的授权,这种事情叫盗版也好,叫破解也好,反正在中国大家也习以为常.SRT模型转化时还有个没解决的问题:没办法使用其提供的接口对文件数据进行缩放.如果缩放了,SpeedTree受风的影响会不正确.不过这也不是什么大问题,在场景编辑时再对模型进行缩放也一样,无非美术编辑时麻烦了一点.