three.js 场景中如何彻底删除模型和性能优化

这篇具有很好参考价值的文章主要介绍了three.js 场景中如何彻底删除模型和性能优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

three.js 场景中如何彻底删除模型和性能优化

删除外部模型

在three.js场景中,要彻底删除外部模型,需要执行以下几个步骤:

  1. 从场景中移除模型
    你可以使用 scene.remove(model) 或者 scene.remove(model.children[0]) 将模型从场景中移除。如果是多个模型,可以用循环来处理。

  2. 移除所有材质和纹理
    模型通常会包含材质和纹理,即使你把它们从场景中移除了,它们也仍然存在于内存中,所以你需要将它们全部移除。你可以使用如下代码来移除一个材质和对应的贴图:

    material.dispose();
    if (material.map) {
        material.map.dispose();
    }
    

    如果模型有多个材质和纹理,同样需要使用循环来处理。

  3. 释放几何体和缓冲属性
    在 WebGL 中,几何体和缓冲属性是直接存储在 GPU 中的,所以你需要手动释放它们以释放内存。你可以使用如下代码来释放一个几何体和对应的缓冲属性:

    geometry.dispose();
    geometry.attributes = null; // 这些属性包括position, normal, uv等等
    

    如果模型有多个几何体和缓冲属性,同样需要使用循环来处理。

  4. 手动断开引用
    如果你使用了自定义的代码来创建模型,那么需要手动断开所有对该模型的引用,以便 JavaScript 的垃圾回收机制可以将其从内存中清除。

    model.traverse((obj) => {
        if (!obj.isMesh) return;
        obj.geometry.dispose();
        obj.material.dispose();
    });
    model = null;
    

    model 设置为 null 是确保该变量不会再被使用到了。

以上步骤都完成后,外部模型就完全被删除且不会占用内存。如果你发现不管用,那么请继续检查你的代码。dog!

优化技巧

除了彻底删除外部模型之外,还有一些方法可以帮助你优化内存使用。以下是一些优化技巧:

  1. 合并几何体
    如果你的场景中有很多几何体,那么可以考虑将它们合并成一个大的几何体。这样可以减少渲染调用次数和减轻 GPU 的负担,从而提高性能和减少内存开销。

  2. 压缩纹理
    纹理是占用内存最多的资源之一,因此对纹理进行压缩可以显著减少内存占用。three.js 内置了纹理压缩工具,可以使用其来生成压缩的纹理。

  3. 使用 LOD (Level Of Detail)技术
    LOD 技术可以根据距离自动切换不同详细度的几何体,从而在远处显示简化的模型,优化渲染性能。这可以使用 three.js 自带的 THREE.LOD 类实现。

  4. 移除不可见对象
    如果某个模型或对象不可见,那么它就没有必要在场景中存在。你可以使用 visible 属性或者 frustum culling 技术来判断对象是否可见,并及时移除不可见的对象,以避免内存浪费。

SO,你可以通过多种方式来优化内存使用和性能表现,在开发过程中尽可能避免浪费和不必要的资源占用。

注意事项

另外,还有一些常见的错误和注意事项需要注意:

  1. 内存泄漏
    由于 JavaScript 是垃圾回收的语言,因此如果你不小心将对象保存在全局变量中或者忘记删除已经不再需要的对象,就可能会造成内存泄漏。这会导致内存占用无限制地增长,最终导致程序崩溃。因此,一定要时刻注意对象的生命周期,并及时删除不再需要的对象。

  2. 频繁创建和销毁对象
    创建和销毁对象是一项开销很大的操作,因此应该尽量避免频繁创建和销毁对象。例如,在循环中创建对象会严重影响性能,因为每次循环都会重新分配内存空间。相反,可以在循环之前创建一个对象池,以重复使用对象。

  3. 不必要的递归
    如果你编写了一个递归函数,请确保它的结束条件正确,并不陷入死循环。递归可能会不断创建新的函数调用,直到达到浏览器的最大调用栈大小。这会导致堆栈溢出错误。

总之,通过仔细规划代码结构、减少资源浪费和避免常见错误,可以极大地改善 three.js 应用的性能和可靠性。

three优化是一条不归路文章来源地址https://www.toymoban.com/news/detail-694498.html

到了这里,关于three.js 场景中如何彻底删除模型和性能优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • web3d-three.js场景设计器-mesh网格添加多模型-模型描述随动

    给场景中的模型加上广告牌描述,可以在模型的MESH里添加Sprite,配上相应的文字, 描述Sprite的位置则是在mesh中的相对位置,比如模型高10,那么我们可以给一个y等于10 来进行适配,这样在移动模型mesh网格时可以整体移动。 function createBox(data) {   const geometry = new THREE.BoxGeom

    2024年02月21日
    浏览(38)
  • 性能优化:如何彻底解决SharedPreferences造成的卡顿

    在上线 ANR 监控平台后,线上收集到了较多的ANR日志 ,从火焰图信息上看,函数阻塞在了QueuedWork 相关函数上 ,本文主要介绍的这一现象的原因以及如何解决这一问题。 本文介绍的解决方案,已放到github 上https://github.com/Knight-ZXW/SpWaitKiller , 供参考实现 首先简单介绍下 Queue

    2024年02月16日
    浏览(26)
  • Three.js--》建模软件如何加载外部3D模型?

    目录 三维建模软件的介绍 Blender官方文档介绍 Blender软件安装 GLTF格式简介 gltf不同文件形式         看过我之前讲解的three文章的人都知道,我在创建模型的时候都没有使用three.js自带的一些简单模型,而是引入外部的模型并加载到页面上, 简言之 :对于简单的立方体、

    2024年02月06日
    浏览(32)
  • 【赏】three.js如何确定3dtile格式的模型的中心点和缩放比例

    three.js如何确定3dtile格式的模型的中心点和缩放比例。 有多个3dtile格式的模型(tileset.json + b3dm),请问如何确定合适的比例?即在three.js中如何确定像机的位置和缩放比例? 在three.js中确定3D模型的中心点和缩放比例通常需要以下步骤: 加载3D模型。使用three.js的加载器(例如

    2024年02月08日
    浏览(38)
  • three.js鼠标控制场景旋转

    鼠标控制旋转

    2024年02月17日
    浏览(31)
  • Three.js之创建3D场景

    【G】Three.js官方文档:https://threejs.org/docs/ Three.js是一个流行的WebGL库,官方文档提供了详细的API参考和示例,适合学习和参考。 【G】Three.js GitHub链接:https://github.com/mrdoob/three.js 这是一个流行的基于WebGL的3D图形库,提供了丰富的功能和工具,用于创建交互式的3D场景和应用。

    2024年02月14日
    浏览(33)
  • Three.js教程:第一个3D场景

    推荐:将 NSDT场景编辑器加入你3D工具链 其他工具系列: NSDT简石数字孪生 下面的代码完整展示了通过three.js引擎创建的一个三维场景,在场景中绘制并渲染了一个立方体的效果,为了大家更好的宏观了解three.js引擎, 尽量使用了一段短小但完整的代码实现一个实际的三维效果

    2023年04月12日
    浏览(32)
  • 如何使用UE5新功能 “打包型关卡Actor” 实现场景的性能优化

    内容分为: 简介 实操 优化结果展示 看不懂原理看看实操就大概就能明白 “打包型关卡蓝图”是UE5新功能 世界分区(World Partition) 的一部分 但 不依赖于项目是否启用了世界分区 官方文档有关世界分区中 关卡实例化 的内容 官方文档: 这个功能的原理是将场景中的 静态网

    2024年02月12日
    浏览(67)
  • 【Three.js基础】创建场景、渲染场景、创建轨道控制器(一)

    🐱 个人主页: 不叫猫先生 🙋‍♂️ 作者简介:前端领域新星创作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫系列专栏:vue3从入门到精通、TypeScript从入门到实践 📢 资料领取:前端进阶资料以及文中源码可以找我免费领取 🔥 前端

    2024年02月01日
    浏览(43)
  • Three.JS教程1 环境搭建、场景与相机

    Three.js 是一款基于JavaScript的开源3D图形库,它简化了在Web上创建复杂的3D场景和动画的过程。 Three.js 由Ricardo Cabello(也称为mr.doob)于2010年创建,最初是为了填补WebGL技术在那个时候的不足而设计的。随着WebGL的普及和浏览器性能的提升,Three.js逐渐成为Web上3D图形编程的事实标

    2024年01月25日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包