Three.js BIM模型轻量化 FPS渲染速率优化 多 实例渲染[Instance]+顶点合并[Merge]

        BIM模型不经过处理,直接加载到Three.js 创建的场景中,很大可能会很使fps帧率下降,原因在于模型的个数太多,有的模型是多材质的话还需要在Three.js中绘制两次,这样会导致drawcall过载,虽然在开启视椎体剪裁的情况下,Three.js中已经进行了模型剔除的处理,但仍然很难解决drawcall过载的问题,可以F12 打开devtool看下cpu使用率。

       如何解决这种情况呢,可以先看一下gpu渲染的流程(涉及到硬件),参考这篇文章:

       https://zhuanlan.zhihu.com/p/58694744

       对整个gpu的结构有了之后,那可以明确要做的优化,每一次drawcall尽可能多的顶点数量,充分利用GPU的渲染计算能力。还有一点就是多实例渲染,简而言之,就是各种顶点数据在一次drawcall提交之后,可以在GPU进行复用进行渲染,uniform可以像attribute一样传递(这样说也不是很准确,准确地说是每个实例可以具有不用的uniform变量)。

        这两种方式都具有很好渲染速率优化的作用,那具体怎么用,主要是结合项目的情况,一般是两者一起用,那是先应用多实例渲染还是先应用顶点合并呢,主要是也是看项目的实际情况,比如对内存的要求,如果没有要求,两者的使用顺序使drawcall最少的情况,就是最佳的使用顺序,我对整个项目做完优化过后,drawcall相比之前降低70%左右。

        那如何进行开发呢,这肯定是大家最关心的,Three.js 的官方案例做了很好的演示,链接:

https://threejs.org/examples/?q=instance#webgl_interactive_instances_gpu 那我们来看一下模型单个渲染,合并渲染,多实例渲染的情况:

单个渲染模型10000个,drawcall 10000,fps 4;

        顶点合并渲染,drawcall 1, fps 40 ,可以看出帧率相比单个模型绘制有了明显的提高,但在做了顶点数据复用的BIM轻量化中,应用顶点合并需要认真考虑,可能会导致内存增加。

   多实例渲染,drawcall 1,fps 56,帧率提高的更加明显。

      看了对比以后,多实例渲染和顶点合并渲染可以明显降低drawcall,并且增加渲染fps,而且在模型数量足够多的情况下,多实例渲染的效果是优于顶点合并的效果的,但是具体使用组合方式需要根据实际情况确定。当然多实例渲染和顶点合并渲染只是BIM模型轻量化中的最实用的一部分。哈哈哈哈,就到这里了,有兴趣的同志加我的3D开发交流群交流哈。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章