-
尽可能减少多重计数。请记住,模型根本不应该过于详细。
-
将Obj文件转换为Json和/或为场景中的每个对象创建单独的JSON文件。请记住,geometry是您尝试加载的文件中最重的数据块。因此,如果可能,
BufferGeometry
为每个文件创建单独的文件并通过它加载BufferGeometryLoader
-
在加载所有js和json文件之前,您可以使用一些压缩/解压缩技术。查看OpenCTM压缩。您也可以尝试gzip您的文件并放下它。
-
在创建网格的3D建模阶段,合并尽可能多的几何。最简单的方法是识别具有相同/相似材料的所有网格,合并这些几何图形,并为这些几何图形指定相同的材质。您拥有的几何数量越少,渲染管道中绘制调用的次数就越少。因此,您的表现将会提高。
-
您可以跟踪您的
drawcalls
使用情况renderer.info
-
保持纹理文件大小较低的分辨率。我一般建议少于1K。
-
材料性能成本是这样的
MeshBasicMaterial
<MeshLambertMaterial
<MeshPhongMaterial
<MeshStandardMaterial
<MeshPhysicalMaterial
。因此,在将材质指定给几何体时要小心。Threejs doc清楚地说明了每种材料的所有特征。因此,如果您知道对象不需要材料的某些属性,则回退到更便宜的材质。 -
使用
normalMaps
伪造的goemetries
。这将减少您vertices
所需的数量。 -
如果您的场景是静态使用
aoMap
并且LightMap
在您的场景中消除了对光源的需求及其计算成本。 -
如果场景是静态的,请停止requestAnimationFrame并仅在需要时渲染。例。如果您使用的是orbitcontrol.js,请
onChange
在触发用户活动时使用方法进行渲染。 -
使用Chrome扩展程序(如Threejs Inspector和WebGL Inspector)进行调试。
-
如果动态删除场景中的任何内容,请确保正确处理数据。
-
300 MB的文件非常大。确保将其减少到30 mb或更低,理想情况下,小于10 mb以获得最佳体验
https://blog.csdn.net/ItChuangyi/article/details/85242427(Three.js 从内存删除scene中remove的模型数据,释放内存)
https://zhidao.baidu.com/question/920590249979771619.html(threejs需要加载大量场景模型,需要时时清理无用模型出场景同时能够显著降低内存消耗)
https://threejs.org/docs/index.html#api/en/math/Frustum(视锥)
https://blog.csdn.net/niuge8905/article/details/80898522(Webgl基于Three.js的开发——利用Frustum来判断相交或者包含)