将 glTF 转换为 3D Tiles,以在 AWS IoT TwinMaker 中流式传输大型模型
将 glTF 转换为 3D Tiles 以实现 AWS IoT TwinMaker 中的大型模型流式传输
关键要点
本文介绍如何将 3D 模型压缩为 3D Tiles 格式,以提高在 AWS IoT TwinMaker 中的加载速度和渲染性能。使用 Cesium ion 可以将 glTF 格式文件轻松转换为 3D Tiles,减少模型尺寸并优化流式传输。在完成转换后,可以通过 AWS IoT TwinMaker 轻松创建和查看新的 3D 场景。引言
在使用 AWS IoT TwinMaker 加载 3D 场景时,您是否遇到过长时间的等待?或者在导航复杂的 3D 模型时性能较差?现在可以通过将您的模型转换为 3D Tiles 标准来有效解决这些问题,从而实现高效的流式传输。
在本文中,您将学习如何使用 Cesium ion 将 3D 模型或点云文件压缩为 3D tilesets,并使用转换后的 3D tilesets 创建 TwinMaker 场景。通过使用 3D tilesets,您可以将原始模型的大小减少 50 至 90,并提升 AWS IoT TwinMaker 控制面板的渲染性能。
概述
在此博客中,提到了一些文件扩展名和模型处理标准。在开始之前,以下是一些您将遇到的术语的快速回顾:
术语描述glTF图形语言传输格式,三维场景和模型的标准文件格式,文件扩展名可以是 gltf 或 glbCesium ionCesium ion 是一个用于 3D 地理空间数据的强大、安全的管理平台Draco 压缩Draco 是用于压缩 3D 几何网格和点云的开源库3D Tileset3D Tiles 是开放地理空间联盟(OGC)的社区标准,用于处理大规模异构的3D地理空间内容
AWS IoT TwinMaker 支持 glTF 和 3D Tiles 格式的 3D 资产。虽然 glTF 是在网页浏览器中展示 3D 内容的标准格式,但目前非常大的(gt100MB) 和/或非常复杂的模型 (gt10K nodes) 加载时间过长。将 glTF 格式和其二进制格式 glb 转换为 3D Tiles 格式可以有效避免长加载时间和低帧率。3D Tiles 采用分层细节等级 (HLOD) 以在空间中按块传输内容。这样,大型资产只会根据用户在 3D 场景中的朝向渲染较小的块。
Cesium ion 是一个强大的、完全托管的平台,用于管理 3D 地理空间数据。Cesium ion 的 3D 瓦片流水线可以将来自多种格式的 3D 模型gltf glb obj las laz fbx dae压缩并转换为 3D Tiles,以优化内容在任何设备上的渲染和流式传输。
接下来我们将逐步指导您如何将大型模型转换为 3D Tileset 并将其导入为 AWS IoT TwinMaker 场景。
前提条件
Cesium ion 账户:您可以在 Cesium 的定价页面 注册并根据您的业务需求选择适当的订阅计划。本文推荐选择免费社区版,因为模型大小小于 5GB。已存在的 AWS IoT TwinMaker 工作区:AWS IoT TwinMaker 工作区。AWS Cloud9:本文将使用 AWS Cloud9。如果您希望在其他环境中运行,请确保安装以下系统要求:Nodejs NPM 和 Git。一台至少有 5GB 存储空间和 4GB RAM 的桌面计算机。开源模型
本文将使用开源的 Cookie Factory Warehouse 模型,该模型将在后续步骤中下载,CFBUILDINGglb 的大小为 57MB。
飞兔云加速器官网操作步骤
步骤 1:创建 Cesium 访问令牌
登录到您的 Cesium 账户,前往 令牌页面。点击 创建令牌。命名为 TwinMaker 令牌。开启以下权限范围:assetsreadassetswriteassetslistarchivesreadarchiveswrite点击 创建。步骤 2:准备 cesiumsample 脚本
注意:本文中的脚本不建议在生产环境中使用。Cesium ion 是第三方服务,因此您必须明确确认选择使用它。请在 Cesium 网站 查看适用于此脚本的条款和条件。
登录 AWS 控制台,选择一个支持 AWS IoT TwinMaker 的区域。在 AWS 控制台中启动 AWS Cloud9。创建新环境,选择 t2medium 和 Amazon Linux 2。在终端中运行以下命令下载 Cookie Factory Warehouse 模型:bash curl O https//iotblogfiless3amazonawscom/tileset/CFBUILDINGglb
在 AWS Cloud9 终端中,运行以下命令克隆 awsiottwinmakersamples 仓库:bash git clone https//githubcom/awssamples/awsiottwinmakersamplesgit
为 sceneutils 库安装节点模块:bash cd awsiottwinmakersamples/src/libs/sceneutils npm install
如果您在 AWS Cloud9 之外的开发机器上操作,请确保您已创建 AWS 凭证。以下是最小权限的策略 JSON:json { Version 20121017 Statement [ { Effect Allow Action [ iottwinmakerCreateScene iottwinmakerGetScene iottwinmakerUpdateScene iottwinmakerGetWorkspace ] Resource arnawsiottwinmakerltAWSREGIONgtltACCOUNTIDgtworkspace/ } { Effect Allow Action [ s3PutObject s3GetObject s3GetObjectAttributes s3ListBucket ] Resource } ] }
运行以下命令,将您的 AWS区域环境变量设置为您 AWS IoT TwinMaker 工作区所在的区域。以下示例使用的是 useast1,但您的环境可能不同:bash export AWSREGION=useast1
步骤 3:自动转换和场景创建
设置环境变量 CESIUMACCESSTOKEN,使用您在步骤 1 中创建的令牌:bash export CESIUMACCESSTOKEN=[TOKEN]
运行示例 脚本,提供您的 workspaceId、sceneId 以及 CFBUILDINGglb 的本地路径。bash npx tsnode samples/cesiumsample/samplets workspaceId [WORKSPACEID] sceneId [SCENENAME] assetFilePath [PATHTO3DMODEL] dracoCompression
注意:命令中的参数 dracoCompression 用于减小资产大小。如果您上传的是点云文件 (las/laz),请不要使用此参数。
该脚本会将您的 3D 模型上传到 Cesium ion,等待瓷砖流水线完成,然后将 3D Tileset 导出到您的 WORKSPACEID 的 S3 存储桶。随后,它会创建/编辑 SCENEID,并为 3D Tileset 模型添加一个节点。您下载到 AWS Cloud9 的模型位于主目录 /environment/CFBUILDINGglb。
a 当被询问是否选择使用时,输入“是”。b 等待以下操作完成:将您的 3D 模型上传到 Cesium ion,并等待瓷砖流水线完成 3D Tiles 转换。创建已转换 tileset 的归档,并下载一个压缩的 zip 文件。将未压缩的 zip 内容上传到您的 IoT TwinMaker 工作区的 S3 存储桶。在 IoT TwinMaker 场景中添加该 tileset 作为一个节点。
在您的 IoT TwinMaker 工作区查看场景,以查看为您创建的场景和模型。
结果
现在您已经在 AWS IoT TwinMaker 中创建了一个新的场景,其中的 3D 资产经过使用 3D Tiles 的压缩!点击右侧的 Snap to floor 复选框,您将看到完整的模型在地面上的投影。
文件大小压缩
现在,导航至 Amazon S3,找到您的 AWS IoT Twinmaker 工作区的 S3 存储桶。检查位于 S3 中的 Cookie Factory 3D Tileset 的大小,从 57MB 降至 29MB,压缩率达到 95。
文件加载时间比较
当原始 57MB 的 glb 文件直接添加到场景中时,场景查看器加载它大约需要 32 秒。
相比之下,场景查看器加载 3D tileset 仅需约 40 毫秒,加载时间减少了 999。
显著差异
显而易见,3D Tiles 改善了 3D 资产可视化的加载和渲染体验。然而,当前的 3D tileset 尚不支持几何和语义元数据。Cesium 团队目前正在处理此问题。目前,原始文件的网格层级无法用于子模型选择功能。以下图像将原始 CFBUILDING glb 场景与没有任何层次结构的 CFBUILDING tileset 场景进行比较。
IoT TwinMaker 场景中的原始 CFBUILDINGglb 支持网格层级列表IoT TwinMaker 场景中的 CFBUILDING 3D tileset 无网格层级建议对作为场景背景上下文的大型资产使用 3D Tiles 转换。在 Cookie Factory 的示例中,如果希望突出的节点进一步细分并进行注释,则应将其提取为单独的 glTF/glb 资产,并直接添加到场景中。您可以使用 Blender 等免费的常用 3D 工具实现。
故障排除
Cesium ion 瓷砖处理过程中的问题:如果在瓷砖转换过程中出现任何错误,示例脚本会通知您检查 Cesium ion 网站 资产页面。常见问题是您上传的模型已经使用 Draco 压缩,这不支持作为 Cesium ion 的源文件。如需其他问题,请在 Cesium 社区论坛 发布,以便直接与 Cesium ion 团队联系。
脚本因步骤耗时过长而退出:默认情况下,Cesium ion 的瓷砖和下载归档操作的等待时间为每个步骤 5 分钟。对于非常大的文件 (gt1GB),这可能需要更长时间。请阅读示例脚本的 文档,了解在 Cesium 完成处理您的资产后如何继续进行下一步。
结论
在本博客中,您学习了如何将标准的 glTF/glb 文件转换为优化的 3D Tiles,并在 AWS IoT TwinMaker 中创建了更快加载速度的场景。您可以将此方法应用于任何大型资产。此外,您还可以根据需要修改脚本。要了解如何自定义 Scene Util 脚本,请访问 源示例代码。
以下是其他模型转换博客,可供参考,并将持续更新: 如何将 OBJ 模型转换并压缩为 glTF,以便用于 AWS IoT TwinMaker
关于作者
Harry WandersmanHarry 是 IoT TwinMaker 前端服务团队的软件开发工程师,自 2018 年以来专注于 IoT 领域的建设与开发,并对 3D 图形和沉浸式虚拟体验充满热情。
Chris AzerChris 是首席 IoT 解决方案架构师,帮助客户实现数字双胞胎计划,自 2017 年以来在 AWS 的多个角色为不同领域提供支持,包括国防、制造、政府等。
标签: 3D 模型、cesium、draco、gltf、tileset、twinmaker