推荐:使用NSDT场景编辑器快速搭建3D应用场景
概述
在这篇博文中,引用了几种文件扩展名和模型格式。在开始之前,最好了解以下内容:
- OBJ -- 对象文件,一种标准的 3D 图像格式,可以通过各种 3D 图像编辑程序导出和打开。
- MTL -- 材料库文件,包含一个或多个材料定义,每个定义都包括 OBJ 模型中对象的各个材料的颜色、纹理和反射图
- glTF -- 图形语言传输格式,三维场景和模型的标准文件格式。glTF 模型使用两种可能的文件扩展名之一:.gltf 或 .glb
- Draco Compression -- 用于网格压缩的glTF扩展。此cesium库将压缩和解压缩 3D 网格,以显着减小 3D 内容的大小。它可以压缩顶点位置、法线、颜色、纹理坐标和任何其他通用顶点属性,从而提高通过 Web 传输 3D 内容的效率和速度。
- 点云扫描 -- 3D 空间内单个点(x、y、z 坐标)的大量集合,使用 3D 激光扫描仪捕获并以 ASCII (.xyz) 或二进制格式存储。
AWS IoT TwinMaker 支持 glTF 格式的 3D 资产,这是一种 3D 文件格式,以 JSON 格式或二进制格式存储 3D 模型信息,可在应用程序中高效传输和加载 3D 模型。glTF 模型最大限度地减少了 3D 资产的大小以及解压缩和使用它们所需的运行时处理。来自传统 CAD 应用程序的 3D 模型以及点云扫描可以使用 AWS 合作伙伴解决方案(例如 Pixyz 的解决方案)转换为 glTF。在这篇博客中,您将探索另一种无服务器方法,使用 Cesium 的开源库(包括 obj2gltf 和 gltf-pipeline)将 Matterpak 捆绑包转换为glTF 模型。
在下面的架构中,您将看到如何使用 AWS Lambda 来检测上传到 Amazon S3 存储桶的 Matterpak zip 捆绑包。这将在长时间运行的 Lambda 执行中触发到 glTF 的转换。压缩文件可能包含 OBJ、MTL 和 JPG 文件。
在Matterpak捆绑包中,有几个文件,包括OBJ,MTL,点云扫描(xyz),可能还有许多JPG文件。本例中的 Matterport 已将点云扫描转换为对象网格格式 OBJ。MTL 和 JPG 文件一起在 OBJ 模型中的对象上提供彩色纹理。xyz 文件将不会在此转换过程中使用,因为它已经在 Matterpak 中转换为 OBJ。
模型转换管道体系结构
使用点云扫描(如 Matterport)时,会在整个扫描过程中捕获高分辨率 JPG 纹理。将 OBJ 转换为 glTF 仍然会很大。为了改善这一点,本博客中的 Lambda 函数将首先压缩所有 JPG 图像,然后再转换为 glTF。此外,该模型将通过使用Draco Compression进一步压缩。因此,转换将生成一个小得多的 glTF 模型,如下面的 AWS IoT TwinMaker 场景所示。请注意,glTF 文件使用两种可能的文件扩展名之一:.gltf 或 .glb。glTF 扩展将在此博客中使用。
AWS IoT TwinMaker 中的 Matterport Scan 示例
先决条件
需要 AWS 账户才能设置和执行本博客中的步骤。AWS Cloudformation 模板将配置并安装必要的 AWS Lambda 函数、IAM 角色和 Amazon S3 存储桶。建议您在弗吉尼亚州地区(us-east-1)工作。您可能会因以下某些服务而产生费用:
- Amazon Simple Storage Service (S3) 存储成本
- AWS Lambda 模型转换函数
步骤
下载马特帕克样本包
下载其中一个 Matterpak 捆绑包。选择其中一个捆绑包,例如 Pro2 。此可用的捆绑包列表可能会更改。Pro2 示例捆绑包的近似文件大小为 178MB。
安装模型转换 Lambda 函数
-
下载示例 Lambda 模型转换部署程序包。此包中的函数代码将执行以下操作:
-- 从 S3 下载 Matterpak 捆绑包 -- 提取到 Lambda /tmp 目录
-- 压缩所有 JPG 图像
-- 将 OBJ 文件转换为 glTF -- 将 glTF 转换为 Draco glTF-- 将 Draco glTF 模型上传回 S3 存储桶。
-
登录亚马逊 S3 控制台
-
创建一个 S3 存储桶或选择一个现有存储桶,您将在其中上传您下载的 Lambda 函数。将文件保持原样压缩。
-
将 Lambda 函数放置在 S3 中后,启动此 CloudFormation 模板
-
将 LambdaArtifactBucketName 参数值更改为您将 Lambda 函数上传到的存储桶的名称
-
将 S3BucketName 参数值更改为将托管模型文件的新存储桶的名称。这将为您创建。请务必选择一个全局唯一的名称,否则它将在创建堆栈期间失败。
-
单击创建堆栈以设置模型转换管道
-
完成后,导航到新的 S3 存储桶。可以在"资源"选项卡下找到一个链接
9.在此存储桶中创建一个文件夹并将其命名为 paks
10.将步骤 1 中下载的 Matterpak 捆绑包上传到 paks 文件夹。请务必将其压缩,因为 Lambda 函数将在处理过程中解压缩它。转换过程将自动开始,可能需要几分钟。
11.如果模型转换成功,您将在 S3 存储桶的根目录中看到一个glTF 模型。如果没有,请检查 Amazon CloudWatch 以获取来自 Lambda 函数的任何日志。
将模型添加到场景(可选)
回顾一下,您已成功将 Matterport 近 180MB 的点云扫描压缩并转换为 8MB glTF 模型。转换模型后,可以尝试在 IoT TwinMaker 工作区中加载此模型。请注意,您在 Matterport 中创建的任何 Mattertag 在此过程中都不可转让。这必须使用场景编辑器中的 IoT TwinMaker 标记重新创建。
- 在 IoT TwinMaker 工作区中,在**"资源**"部分中上传 glTF 模型。如果您尚未创建工作区,请按照 AWS IoT TwinMaker 入门中的步骤操作。
- 将此模型添加到场景中,如果尚不存在,则创建一个模型。如果需要有关此过程的指导,可在此处获取文档。不要忘记设置环境照明,因为模型将显示为全黑。
清理
请务必清理此博客中的工作以避免收费。按此顺序完成后删除以下资源
- 删除 Lambda 和模型 S3 存储桶中的对象文件。请注意,这不是 IoT TwinMaker 工作区存储桶,而是为此博客创建的存储桶
- 删除 CloudFormation 堆栈
- 从 TwinMaker 工作区中删除模型
结论
在此博客中,你创建了一个模型转换管道,用于压缩 Matterpak 捆绑包并将其转换为glTF 模型。这也包括从其他系统进行 OBJ 的通用转换。使用此管道,你将能够减少场景加载时间,并简化直接到 IoT TwinMaker 工作区的 3D 模型更新。
原文链接:如何将 OBJ 模型转换和压缩为 GLTF 以与 AWS IoT TwinMaker 配合使用 (mvrlink.com)