three.js性能优化微指南

本文详细介绍了如何通过监控FPS、优化绘制调用、合理管理资源、减少灯光和阴影效果、调整纹理和几何体、共用材质和对象、以及调整相机设置等方法,来提高Three.js应用的性能。

[1]性能监测

检测FPS

使用stats,这里就不过多说明了

禁用 FPS 限制

监视绘制调用

绘制调用是 GPU 绘制三角形的操作。当我们有一个包含许多对象、几何体、材质等的复杂场景时,会有很多绘制调用。
通常我们可以通过见减少绘制调用来提升性能
这里可以使用这个浏览器扩展来监视绘制调用https://chrome.google.com/webstore/detail/spectorjs/denbgaamihkadbghdceggmchnflmhpmk
具体的使用方式见其说明文档即可

渲染信息

可以通过console.log(renderer.info)打印一些关于渲染器的一些信息

[2]销毁

一旦你确定了某个几何体或者材料等资源不再需要使用,那么就请先将其销毁掉
关于如何销毁,three.js官方有相关的文档:
https://threejs.org/docs/#manual/en/introduction/How-to-dispose-of-objects
例如销毁一个正方体:

scene.remove(cube)
cube.geometry.dispose()
cube.material.dispose()

[3]灯光

尽可能的减少复杂灯光效果的使用,因为消耗性能比较大
同时避免频繁的添加或者删除灯光,因为场景中添加或移除光源时,必须重新编译支持光源的所有材质。这就是Three.js的工作方式,如果你有一个复杂的场景,这可能会冻结屏幕片刻。

[4]阴影

阴影效果也是性能消化较大的部分,如果整体需要比较极致的优化性能这部分可以考虑使用纹理贴图代替阴影。
可以通过优化阴影贴图来达到类似阴影效果,下面是模拟思路:
首先可以使用CameraHelper查看将由阴影贴图摄像机渲染的区域,并将其缩小到尽可能小的区域:

directionalLight.shadow.camera.top = 3
directionalLight.shadow.camera.right = 6
directionalLight.shadow.camera.left = - 6
directionalLight.shadow.camera.bottom = - 3
directionalLight.shadow.camera.far = 10

const cameraHelper = new THREE.CameraHelper(directionalLight.shadow.camera)
scene.add(cameraHelper)

还要尝试使用尽可能小的分辨率,并给出下降 mapSize 结果:

directionalLight.shadow.mapSize.set(1024, 1024)

[5]合理的使用castShadow和Shadow

有些对象可以投射阴影,有些对象可以接收阴影,有些对象可能会同时投射阴影。如果想要考虑性能,可以减少开启castShadow 、receiveShadow 对象

cube.castShadow = true
cube.receiveShadow = false

torusKnot.castShadow = true
torusKnot.receiveShadow = false

sphere.castShadow = true
sphere.receiveShadow = false

floor.castShadow = false
floor.receiveShadow = true

[6]关闭阴影自动更新

阴影贴图会在每次渲染之前更新。可以通过关闭此自动更新并开启 Three.js影子贴图仅在必要时需要更新:


                
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

seeooco

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值