Babylonjs 的摄像机转向时,如果镜头内有一面墙,墙不透明,墙后面一堆资源,比如花草树木无数个,会掉帧严重。
这时候镜头内虽然看着只有墙,但是BJS的引擎把墙后面的模型也渲染了。
例如墙后面有1000个球体,那么就可以隐藏这些球体模型。(表示1000个不同模型,否则同模型可用instance优化)
先说总结,可以使用AssetContainer进行资源管理,removeAllFromScene后,场景内totals总模型数量就下降了,帧率就提高。
测试用例截图和分析如下:
1.墙后面有1000个球,顶视图“看不到”这些球,但是绝对帧率和前视图一样,只有118帧率。
inspector也提示active meshes为1002,说明镜头内所有模型都被渲染了,无论是否只看到一面墙。
2.如果镜头内的1000个球体模型不加载,那么帧率可高达5800帧,所以目的为通过隐藏墙后“看不到”的模型,提高帧率。
3.隐藏模型方法 :mesh.isVisible = false,帧率1300,有成效,但是距离5800还太远,说明引擎是通过计算后渲染这些模型消失的。
4.隐藏方法:mesh.renderingGroupId=10,判断和camera的renderingGroupId