如何将 OBJ 模型转换和压缩为 GLTF 以与 AWS IoT TwinMaker 配合使用

推荐:使用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 函数

  1. 下载示例 Lambda 模型转换部署程序包。此包中的函数代码将执行以下操作:
    -- 从 S3 下载 Matterpak 捆绑包 -- 提取到 Lambda /tmp 目录
    -- 压缩所有 JPG 图像
    -- 将 OBJ 文件转换为 glTF -- 将 glTF 转换为 Draco glTF

    -- 将 Draco glTF 模型上传回 S3 存储桶。

  2. 登录亚马逊 S3 控制台

  3. 创建一个 S3 存储桶或选择一个现有存储桶,您将在其中上传您下载的 Lambda 函数。将文件保持原样压缩。

  4. 将 Lambda 函数放置在 S3 中后,启动此 CloudFormation 模板

  5. LambdaArtifactBucketName 参数值更改为您将 Lambda 函数上传到的存储桶的名称

  6. S3BucketName 参数值更改为将托管模型文件的新存储桶的名称。这将为您创建。请务必选择一个全局唯一的名称,否则它将在创建堆栈期间失败。

  7. 单击创建堆栈以设置模型转换管道

  8. 完成后,导航到新的 S3 存储桶。可以在"资源"选项卡下找到一个链接

9.在此存储桶中创建一个文件夹并将其命名为 paks

10.将步骤 1 中下载的 Matterpak 捆绑包上传到 paks 文件夹。请务必将其压缩,因为 Lambda 函数将在处理过程中解压缩它。转换过程将自动开始,可能需要几分钟。

11.如果模型转换成功,您将在 S3 存储桶的根目录中看到一个glTF 模型。如果没有,请检查 Amazon CloudWatch 以获取来自 Lambda 函数的任何日志。

将模型添加到场景(可选)

回顾一下,您已成功将 Matterport 近 180MB 的点云扫描压缩并转换为 8MB glTF 模型。转换模型后,可以尝试在 IoT TwinMaker 工作区中加载此模型。请注意,您在 Matterport 中创建的任何 Mattertag 在此过程中都不可转让。这必须使用场景编辑器中的 IoT TwinMaker 标记重新创建。

  1. 在 IoT TwinMaker 工作区中,在**"资源**"部分中上传 glTF 模型。如果您尚未创建工作区,请按照 AWS IoT TwinMaker 入门中的步骤操作。
  1. 将此模型添加到场景中,如果尚不存在,则创建一个模型。如果需要有关此过程的指导,可在此处获取文档。不要忘记设置环境照明,因为模型将显示为全黑。

清理

请务必清理此博客中的工作以避免收费。按此顺序完成后删除以下资源

  1. 删除 Lambda 和模型 S3 存储桶中的对象文件。请注意,这不是 IoT TwinMaker 工作区存储桶,而是为此博客创建的存储桶
  2. 删除 CloudFormation 堆栈
  3. 从 TwinMaker 工作区中删除模型

结论

在此博客中,你创建了一个模型转换管道,用于压缩 Matterpak 捆绑包并将其转换为glTF 模型。这也包括从其他系统进行 OBJ 的通用转换。使用此管道,你将能够减少场景加载时间,并简化直接到 IoT TwinMaker 工作区的 3D 模型更新。

原文链接:如何将 OBJ 模型转换和压缩为 GLTF 以与 AWS IoT TwinMaker 配合使用 (mvrlink.com)

相关推荐
mirrornan16 小时前
3D和AR技术在电商行业的应用有哪些?
3d·ar·3d建模·3d模型·三维建模
工业3D_大熊18 小时前
3D开发工具HOOPS助力造船业加速设计与数字化转型
3d
zaf赵18 小时前
3D 高斯溅射 (Gaussian Splatting)技术,一种实现超写实、高效渲染的突破性技术
3d
前端Hardy21 小时前
HTML&CSS:酷炫的3D开关控件
前端·javascript·css·3d·html
Debroon2 天前
M3D: 基于多模态大模型的新型3D医学影像分析框架,将3D医学图像分析从“看图片“提升到“理解空间“的层次,支持检索、报告生成、问答、定位和分割等8类任务
3d
广东数字化转型2 天前
Three.js相机Camera控件知识梳理
3d·three.js
CASAIM2 天前
模具制造之三维扫描和逆向建模
目标检测·3d·汽车·制造
工业3D_大熊3 天前
HOOPS Communicator功能剖析:3D Web模型树交互的实用指南!
linux·windows·macos·3d·docker·c#·.net
番茄电脑全能王3 天前
电脑玩《刺客信条》时中,遇到找不到d3dx9_42.dll的问题是什么原因?缺失d3dx9_42.dll应该怎么解决呢?下面一起来看看吧!
3d
战场小包3 天前
小米su7 or 保时捷怎么选?使用 Three 实现 3D 汽车展示平台比比看
前端·vue.js·3d·aigc