【003】-Cesium中加载大规模数据稳定流畅之性能优化思路

这篇具有很好参考价值的文章主要介绍了【003】-Cesium中加载大规模数据稳定流畅之性能优化思路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 使用数据流技术:Cesium支持使用数据流技术,即按需加载和卸载数据,以最小化数据传输量和加载时间。

在 Cesium 中,Cesium3DTileset#maximumMemoryUsage 属性的作用是控制 3D Tiles 的最大内存使用量,从而在保证数据流畅的前提下尽可能减小内存占用。

实现原理大致如下:

  • Cesium 会根据相机位置和高度动态调整 3D Tiles 的细节级别,并将需要渲染的 Tiles 加入渲染队列。

  • 当队列中的 Tiles 的内存使用量超过 maximumMemoryUsage 属性设置的最大值时,Cesium 会按照一定的策略卸载一些不必要的 Tiles,以释放内存空间。

  • 当相机位置和高度发生变化时,Cesium 会重新计算渲染队列并按需加载新的 Tiles。

  • 需要注意的是,maximumMemoryUsage 属性的设置需要根据实际情况进行调整,以平衡内存占用和渲染质量。同时,Cesium 也提供了其他一些控制内存占用和渲染效率的属性和方法,如 Cesium3DTileset#maximumScreenSpaceError 属性等,开发者可以根据实际需求进行选择和配置。


const tileset = new Cesium.Cesium3DTileset({
  url: 'path/3DTiles.json',
});
tileset.loadInitialTiles();
viewer.scene.primitives.add(tileset);
tileset.tilesLoaded.addEventListener(function () {
  // 按需加载和卸载数据
  tileset.maximumMemoryUsage = 1024 * 1024 * 1024; // 设置3D Tiles的最大内存使用量
  tileset.maximumScreenSpaceError = 2; // 设置3D Tiles的屏幕空间误差
  // 其他操作
  // ...
});

通过以上代码,Cesium会自动按需加载和卸载数据,以最小化数据传输量和加载时间,同时也可以设置一些参数来控制数据的加载和显示。需要注意的是,具体实现还需要根据实际情况进行调整和优化。

  1. 使用LOD:使用层次细节(LOD)技术,根据相机位置和高度调整3D Tiles的细节级别。这可以帮助减少渲染时间和内存使用。

可以使用 Cesium 的 Cesium3DTileset#maximumScreenSpaceError 属性来控制 3D Tiles 的细节级别。


const tileset = new Cesium.Cesium3DTileset({
  url: 'path/3DTiles.json',
});
tileset.loadInitialTiles();
viewer.scene.primitives.add(tileset);
tileset.tilesLoaded.addEventListener(function () {
  // 设置 LOD
  tileset.maximumScreenSpaceError = 2; // 设置 3D Tiles 的屏幕空间误差,控制细节级别
  // 其他操作
  // ...
});

通过以上代码,Cesium 会根据相机位置和高度调整 3D Tiles 的细节级别,从而提高渲染效率。需要注意的是,maximumScreenSpaceError 属性的值需要根据实际情况进行调整,以平衡渲染效率和渲染质量。

  1. 使用Web Workers:使用Web Workers可以将数据处理和渲染任务分离,从而提高性能和响应速度。

  1. 使用空间索引:使用空间索引可以优化查询和可视化操作。例如,将3D Tiles数据划分为较小的块,并为每个块创建一个索引,以便快速访问和可视化。

  1. 优化网络带宽:优化网络带宽可以减少数据传输时间和成本。可以使用压缩算法和数据分块等技术来减少数据传输量。

  1. 合并网格:Cesium 中的合并网格(Merge Mesh)技术可以将多个网格对象合并成一个网格对象,减少渲染调用和 GPU 开销。可以使用 Cesium.MeshMerger API 进行网格合并。

  1. 纹理合批:在场景中存在大量重复使用的纹理时,可以使用纹理合批(Texture Atlas)技术将多个纹理合并为一个纹理,减少纹理切换次数和 GPU 开销。

  1. 纹理压缩:对纹理进行压缩,可以减少纹理大小和带宽占用,提高性能。可以使用基于 GPU 的纹理压缩方法,如 ETC1、ETC2、ASTC 等。

  1. 优化纹理加载:对纹理进行优化,如减小尺寸、使用 MIPMAP 等,可以减小纹理文件的大小,从而提高加载性能。可以使用 Cesium 提供的纹理优化工具或其他第三方工具进行纹理优化。

  1. 减少数据量:将数据量压缩至最小,使用合适的压缩算法、数据格式和分辨率,可以减小数据大小,加快数据加载和渲染速度。例如,Cesium 中的 3D Tiles 数据格式支持数据分层和压缩,可以通过数据优化工具实现数据的最优化。

  1. 优化渲染管线:通过优化渲染管线,减少渲染调用和 GPU 开销,可以进一步提高渲染性能。例如,可以使用 GPU 粒子系统、GPU 物理引擎等技术,加速渲染效果。

  1. 限制场景元素:避免过多的场景元素,例如限制可见区域、限制可见对象数量、控制物体的数量和分布等。

  1. 缓存机制:使用缓存机制可以避免重复请求,提高数据的加载速度。例如,可以使用浏览器缓存或者使用 Cesium 中的缓存机制。

  1. 延迟加载:可以延迟数据的加载和渲染,先加载必要的数据和场景元素,等待场景交互事件触发时再加载附加的数据和场景元素,避免一次性加载过多的数据,降低系统负荷。

  1. 其他优化技巧:例如,禁用一些不必要的功能、使用更低的纹理质量、降低视角切换的频率、减少阴影计算等,都可以提高系统的性能。

  1. 避免频繁的内存分配:在循环中频繁地创建和销毁对象会导致内存分配和垃圾回收,造成性能损失。可以通过对象池、缓存对象等方法避免频繁的内存分配。

  1. 使用浏览器的硬件加速:Cesium 采用 WebGL 技术进行图形渲染,浏览器中可以通过启用硬件加速来提高图形渲染性能。可以通过 WebGLRenderingContext.getContextAttributes() 方法获取硬件加速的配置信息。

  1. 减少帧率:如果场景元素较多,可以适当降低帧率,避免过高的帧率导致卡顿和性能下降。可以使用 viewer.targetFrameRate 属性设置目标帧率。

  1. 异步加载资源:Cesium 中支持异步加载各种资源,如模型、图片、纹理等。可以使用 Cesium.Resource API 异步加载资源,减少数据加载时间和带宽占用。

  1. 避免过多的渲染状态切换:过多的渲染状态切换会导致 GPU 开销增加,降低性能。可以合并相同的渲染状态,避免多次状态切换。

  1. 精简数据:优化数据结构和数据大小,可以降低数据加载和传输时间。可以使用数据压缩、数据转换、数据过滤等方法,精简数据。(这个是处理好是最强的)

  1. 分批加载:将数据分为多个批次加载,可以避免一次加载过多数据导致的性能问题。可以使用 Cesium.loadJson()Cesium.loadBlob() 等 API 分批加载数据。

  1. 精细化控制:对数据加载和渲染进行精细化控制,可以最大限度地提高性能。可以使用 Cesium.LoadingPolicyCesium.RenderStateCesium.ShadowMode 等 API 精细化控制数据加载和渲染。

  1. GPU 预处理:对数据进行预处理,以加速 GPU 的渲染,可以提高性能。可以使用 GPU 加速的方法对数据进行处理,如屏幕空间反射(Screen Space Reflection)、环境光遮蔽(Ambient Occlusion)等。

  1. 渲染层级:使用渲染层级技术,可以避免过度渲染导致的性能问题。可以使用 Cesium.ImageryLayerCesium.PrimitiveCesium.Entity 等 API 控制渲染层级。

  1. 启用硬件加速:启用硬件加速可以提高 Cesium 的性能。可以在浏览器设置中启用硬件加速。

  1. 使用多级缓存:使用多级缓存可以避免重复加载和渲染相同的数据,提高性能。可以使用 Cesium.CacheCesium.Resource 等 API 实现多级缓存。

  1. 可见性剔除:使用可见性剔除技术,可以避免渲染不可见的数据,提高性能。可以使用 Cesium.CullingVolumeCesium.IntersectionTests 等 API 实现可见性剔除。

  1. 数据压缩:对数据进行压缩,可以减少带宽占用和加载时间,提高性能。可以使用 GZip、Brotli 等数据压缩算法,或者使用 Cesium 自带的数据压缩方法。

  1. 基于GPU的渲染:使用基于 GPU 的渲染技术,可以提高渲染性能和用户体验。可以使用 Cesium 中的 Cesium.Renderer API 实现基于 GPU 的渲染。

  1. 启用硬件加速:启用硬件加速可以提高 Cesium 的性能。可以在浏览器设置中启用硬件加速。

  1. 使用多级缓存:使用多级缓存可以避免重复加载和渲染相同的数据,提高性能。可以使用 Cesium.CacheCesium.Resource 等 API 实现多级缓存。

  1. 可见性剔除:使用可见性剔除技术,可以避免渲染不可见的数据,提高性能。可以使用 Cesium.CullingVolumeCesium.IntersectionTests 等 API 实现可见性剔除。

  1. 基于GPU的渲染:使用基于 GPU 的渲染技术,可以提高渲染性能和用户体验。可以使用 Cesium 中的 Cesium.Renderer API 实现基于 GPU 的渲染。

  1. 硬件加速的线框模式:使用硬件加速的线框模式,可以提高性能和用户体验。可以使用 Cesium.Primitive 中的线框模式实现硬件加速。

  1. GPU Instancing:使用 GPU Instancing 可以提高性能。可以使用 Cesium.GeometryInstanceCesium.Primitive 中的 GPU Instancing 实现硬件加速。

  1. 预处理数据:对数据进行预处理,如优化模型、精简纹理、删除无用信息等,可以减小数据文件的大小,从而提高加载性能。可以使用 Cesium 的预处理工具或其他第三方工具进行预处理。

  1. 优化场景管理:对场景进行优化,如分层、剖面、数据过滤等,可以减小数据加载量和渲染时间,提高性能。可以使用 Cesium 提供的场景管理工具或其他第三方工具进行优化。

  1. 使用数据分段:将数据分成多个段,分别加载和渲染,可以提高加载和渲染的性能。可以使用 Cesium 提供的数据分段功能或其他第三方工具进行数据分段。

  1. 减小渲染负荷:减小渲染负荷可以提高渲染性能,如减小场景中的对象数、减小纹理尺寸、使用更简单的材质等。可以使用 Cesium 提供的性能分析工具或其他第三方工具分析渲染性能,并进行相应的优化。

  1. 使用 WebAssembly 技术:将计算任务交给 WebAssembly,可以提高计算性能,从而提高加载和渲染性能。可以使用 Cesium 提供的 WebAssembly 功能或其他第三方工具进行 WebAssembly 开发。等

广而告之:

       江苏空联网数据服务有限公司是一家专注于安全监测服务的公司,采用北斗高精度定位核心云平台作为载体,结合物联网技术和工程技术服务,为客户提供全面的安全监测综合服务。我们的解决方案能够实现毫米级、亚毫米级的精准形变监测,并提供24小时在线的监测平台,支持海量项目同时在线。该方案具有全天候、多领域的运行特点,可应用于地质灾害、煤矿、桥梁、电力、道路、水利等重点行业,提供一体化的安全监测服务解决方案。

       主营产品包括边坡雷达、视位一体(北斗+AI)、普适边坡-地灾监测GNSS(北斗)、辅助安全双目+AI、二三维地图引擎以及高精度定位终端等。这些产品都是针对安全监测领域的实际需求而设计的,能够为客户提供更加精准、全面的数据支持和服务。(支持相关地市能源局、煤监局安全监测预警平台以及其他主管单位安全预警平台上传

       自研的边坡雷达算法和其他智能监测传感器,能够实时、精准地监测边坡的稳定性和形变情况,提供更全面、更精准的数据支持。这些设备采用先进的物联网技术和工程技术手段,能够实现自动化、智能化的监测和管理,大大提高工作效率和准确性。

       空联网致力于为客户提供最优质的安全监测服务,以保障人民生命财产安全为己任,不断创新和完善产品和服务,为客户创造更大的价值。

微信号:kotmax(添加请注明来意)
 文章来源地址https://www.toymoban.com/news/detail-806721.html

到了这里,关于【003】-Cesium中加载大规模数据稳定流畅之性能优化思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Apache Doris大规模数据使用指南

    目录 一、发展历史 二、架构介绍 弹性MPP架构-极简架构 逻辑架构 基本访问架构 三、Doris的数据分布

    2024年02月12日
    浏览(48)
  • 数据挖掘的云计算与大规模数据处理

    数据挖掘是指从大量数据中发现新的、有价值的信息和知识的过程。随着互联网和人工智能技术的发展,数据量不断增加,这使得数据挖掘变得越来越重要。云计算和大规模数据处理技术为数据挖掘提供了强大的支持,使得数据挖掘能够在更短的时间内获得更好的结果。 本文

    2024年04月14日
    浏览(52)
  • 大数据处理:利用Spark进行大规模数据处理

    大数据处理是指对大规模、高速、多源、多样化的数据进行处理、分析和挖掘的过程。随着互联网、人工智能、物联网等领域的发展,大数据处理技术已经成为当今科技的核心技术之一。Apache Spark是一个开源的大数据处理框架,它可以处理批量数据和流式数据,并提供了一系

    2024年03月22日
    浏览(55)
  • 高效数据湖构建与数据仓库融合:大规模数据架构最佳实践

    🎉欢迎来到云计算技术应用专栏~高效数据湖构建与数据仓库融合:大规模数据架构最佳实践 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:云计算技术应用 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习

    2024年02月09日
    浏览(46)
  • Python cudf库详解:加速大规模数据处理

    📚 个人网站:ipengtao.com 随着数据规模的不断增大,高效处理大规模数据成为数据科学和机器学习中的一个重要挑战。 cudf 库作为GPU加速的DataFrame库,为Python用户提供了在处理大数据集时显著提升性能的可能性。本文将深入介绍 cudf 库的使用方法,涵盖其基本概念、常用功能

    2024年02月21日
    浏览(53)
  • 大规模数据爬取 - 增量和分布式爬虫架构实战

    嗨,亲爱的爬虫开发者们!在当今的数据驱动时代,大规模数据的爬取对于许多领域的研究和应用至关重要在本文中,我将与你分享大规模数据爬取的实战经验,重点介绍增量和分布式爬虫架构的应用,帮助你高效地处理海量数据。 1.增量爬虫 增量爬虫是指只爬取新增或更新

    2024年02月10日
    浏览(50)
  • 大规模数据量下ES如何实现高性能检索?

    ElasticSearch,是基于Lucene库的搜索引擎。它提供了一个分布式、多租户的全文搜索引擎,具有HTTP web接口和无模式JSON文档。根据DB引擎排名,Elasticsearch是最受欢迎的企业搜索引擎。ES的特点是分布式、高扩展以及近实时。那么,大规模数据量下ES是如何实现高性能检索的呢? 说

    2024年02月16日
    浏览(105)
  • 解密Hadoop生态系统的工作原理 - 大规模数据处理与分析

    在当今的数字时代,大规模数据处理和分析已经成为了企业和组织中不可或缺的一部分。为了有效地处理和分析海量的数据,Hadoop生态系统应运而生。本文将深入探讨Hadoop生态系统的工作原理,介绍其关键组件以及如何使用它来处理和分析大规模数据。 Hadoop是一个开源的分布

    2024年02月12日
    浏览(46)
  • 首个大规模图文多模态数据集LAION-400M介绍

    openAI的图文多模态模型CLIP证明了图文多模态在多个领域都具有着巨大潜力,随之而来掀起了一股图文对比学习的风潮。 就在前几天(2022年12月),连Kaiming都入手这一领域,将MAE的思路与CLIP的思路结合,推出了FLIP,有兴趣可戳(https://arxiv.org/abs/2212.00794)。对于迷茫的CV研究

    2024年02月09日
    浏览(42)
  • 论文《面向大规模日志数据分析的自动化日志解析》翻译

    论文《Towards Automated Log Parsing for Large-Scale Log Data Analysis》翻译 面向大规模日志数据分析的自动化日志解析翻译

    2024年02月10日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包