threejs性能优化(二)

8 阅读2分钟

减少渲染次数

  1. 使用LOD:给复杂的模型创建不同的细节级别,通过相机跟物体的距离判断使用哪个细节等级的模型
  2. 合并多个网格:多个静态对象合并成一个减少绘制调用

优化材质/纹理

  1. 压缩纹理:减少内存占用跟加载时间,可以的话尽量控制在512kb以下
  2. 共享材质:对于长得一样的物体可以考虑使用共享材质,而不是每个都创建新的
  3. 使用精灵图:节省内存以及渲染资源

简化网格和几何体

  1. 减少多边形数量:减少不必要的面,尤其是不可见部分
  2. 使用实例化:多次出现的相同对象,使用实例化来渲染减少内存占用和提供渲染效率

使用高效动画/粒子系统

  1. 优化动画: 精简关键帧,删除不必要动画数据
  2. 粒子系统:合理分配粒子数量跟生命周期,以防粒子引起渲染卡顿

优化光照/阴影

  1. 限制光源:过多光源会造成性能下降,尤其要控制多个点光源情况
  2. 使用烘培贴图:对静态的对象使用光照的烘培,减少光照以及阴影的实时计算

资源懒加载

  1. 按需加载:场景分割,需要哪个场景加载哪个场景,或者动态加载资源
  2. 预加载重要的资源:提前加载关键资源,进入场景第一时间需要的内容

使用webworker

  1. 将计算密集的任务移交到web worker中执行

数据分块/懒加载

  1. 将数据分为一块一块 在需要的场景只展示需要的数据
  2. 懒加载: 视口到达可视区域才加载这部分资源