Amazon Web Services ブログ

AWS IoT TwinMaker で使用するために OBJ モデルを GLTF に変換および圧縮する方法

このブログは、Chris Azer によって書かれた How to convert and compress OBJ models to GLTF for use with AWS IoT TwinMaker を翻訳したものです。

イントロダクション

AWS IoT TwinMaker の使用を開始しようとしていて、OBJ ファイルを glTF に変換する必要がありますか?おそらく、Matterport を使用して環境の点群スキャンを実行しましたが、Matterpak バンドルを AWS IoT TwinMaker にインポートする方法が明確ではないのでしょう。このブログでは、モデル変換パイプラインを適用して Matterpak バンドルを圧縮し、glTF 形式に変換します。このアプローチにより、最新の 3D モデルが提供され、AWS IoT TwinMaker でのシーンの読み込み時間が改善されます。

概要

このブログ投稿では、いくつかのファイル拡張子とモデル形式が言及されています。始める前に、次のことを理解しておくとよいでしょう:

  • OBJ – オブジェクトファイル。エクスポートしてさまざまな 3D 画像編集プログラムで開くことができる標準の 3D 画像形式です。
  • MTL – マテリアルライブラリファイル。1 つまたは複数のマテリアル定義が含まれています。各マテリアル定義には、OBJ モデル内のオブジェクトの個々のマテリアルの色、テクスチャ、および反射マップが含まれています。
  • glTF – Graphics Language Transmission Format。3 次元のシーンとモデルの標準ファイル形式です。 glTF ファイルは、2 つの可能なファイル拡張子のいずれかを使用します: .gltf または .glb
  • 点群スキャン – 3D 空間内の個々のポイント (x、y、z 座標) の大規模なコレクションで、3D レーザースキャナーを使用してキャプチャされ、ASCII (.xyz) またはバイナリ形式で保存されます。

AWS IoT TwinMaker は、3D モデル情報を JSON 形式またはバイナリで保存する 3D ファイル形式である glTF 形式の 3D アセットをサポートし、アプリケーションでの 3D モデルの効率的な転送とロードを可能にします。glTF 形式は、3D アセットのサイズと、それらを解凍して使用するために必要なランタイム処理を最小限に抑えます。従来の CAD アプリケーションからの 3D モデルと点群スキャンは、Pixyz などの AWS パートナーソリューションを使用して glTF に変換できます。このブログでは、Cesium obj2gltf などのオープンソースライブラリを使用して、Matterpak バンドルを glTF にモデル変換するための代替サーバーレスアプローチを探ります。

以下のアーキテクチャでは、AWS Lambda を使用して、Amazon S3 バケットにアップロードされた Matterpak zip バンドルを検出する方法を確認できます。これにより、長時間実行される Lambda 実行内で glTF への変換がトリガーされます。 zip ファイルには、OBJ、MTL、および JPG ファイルが含まれる場合があります。

Matterpak バンドル内には、OBJ、MTL、点群スキャン (xyz)、場合によっては多くの JPG ファイルなど、いくつかのファイルがあります。MTL ファイルと JPG ファイルは一緒に、OBJ モデル内のオブジェクトに色付きのテクスチャリングを提供します。xyz ファイルは Matterpak で既に OBJ に変換されているため、この変換プロセスでは使用されません。

モデル変換パイプラインのアーキテクチャ

Matterport などの点群スキャンを使用すると、スキャン全体で高解像度の JPG テクスチャがキャプチャされます。OBJ から glTF への単純な変換を行うと、依然として非常に大きくなります。これを改善するために、このブログの Lambda 関数は、まずすべての JPG 画像を圧縮してから glTF に変換します。その結果、変換により、以下の AWS IoT TwinMaker シーンに見られるように、はるかに小さい GLB または glTF ファイルが生成されます。glTF ファイルは、.gltf または .glb の 2 つのファイル拡張子のいずれかを使用することに注意してください。このブログでは GLB を使用します。これは JSON ではなくバイナリ形式であるため、モデルファイルが小さくなります。

AWS IoT TwinMaker での Matterport スキャンの例

前提条件

このブログの手順をセットアップして実行するには、AWS アカウントが必要です。AWS CloudFormation テンプレートは、必要な AWS Lambda 関数、IAM ロール、および Amazon S3 バケットを構成してインストールします。バージニアリージョン (us-east-1) で作業することをお勧めします。次のサービスの一部については、料金が発生する場合があります:

  • Amazon Simple Storage Service (S3) ストレージ
  • AWS Lambda のモデル変換関数

手順

Matterpak サンプル バンドルをダウンロードする

Matterpak バンドルのいずれかをダウンロードします。 Pro2 などのバンドルの 1 つを選択します。この利用可能なバンドルのリストは変更される場合があります。 Pro2 サンプルバンドルのおおよそのファイルサイズは 178 MB です。

モデル変換 Lambda 関数をインストールする

  1. サンプルの モデル変換 Lambda のデプロイパッケージをダウンロードします。このパッケージ内の関数コードは、次のことを実行します
    – S3 から Matterpack バンドルをダウンロードします
    – Lambda /tmp ディレクトリに展開します
    – すべてのJPG画像を圧縮します
    – OBJ ファイルを GLB に変換します
    – GLB を S3 バケットにアップロードします
  2. Amazon S3 コンソールにログインします
  3. S3 バケットを作成するか、ダウンロードした Lambda 関数をアップロードする既存のバケットを選択します。圧縮されたファイルはそのままにしておきます。
  4. Lambda 関数が S3 に配置されたら、この CloudFormation テンプレートを起動します
  5. LambdaArtifactBucketName パラメータ値を、Lambda 関数をアップロードしたバケットの名前に変更します
  6. S3BucketName パラメータ値を、モデルファイルをホストする新しいバケットの名前に変更します。これはあなたのために作成されます。スタックの作成中に失敗しないよう、グローバルに一意の名前をにするようにしてください。
  7. Create Stack をクリックして、モデル変換パイプラインを設定します
  8. 完了したら、新しい S3 バケットに移動します。 Resouces タブにリンクがあります。
  9. このバケットにフォルダーを作成し、それを paks という名前にしてください
  10. 手順 1 でダウンロードした Matterpak バンドルを paks フォルダーにアップロードします。処理中に Lambda 関数によって解凍されるため、必ず圧縮したままにしておいてください。変換プロセスが自動的に開始され、数分かかる場合があります。
  11. モデルが正常に変換されると、S3 バケットのルートに GLB ファイルが表示されます。そうでない場合は、Amazon CloudWatch で Lambda 関数からのログを確認してください。

モデルをシーンに追加(オプション)

要約すると、Matterport による約 180 MB の点群スキャンを圧縮して 18 MB の GLB ファイルに変換することに成功しました。モデルが変換されたら、これを IoT TwinMaker ワークスペースに読み込んでみることができます。Matterport で作成した Mattertags は、このプロセスでは転送できないことに注意してください。これは、シーンコンポーザーで IoT TwinMaker タグを使用して再作成する必要があります。

  1. IoT TwinMaker ワークスペースで、Resourses セクションに GLB モデルをアップロードします。ワークスペースをまだ作成していない場合は、AWS IoT TwinMaker の使用開始の手順に従ってください。
  2. このモデルをシーンに追加するか、まだ存在しない場合は作成します。このプロセスに関するガイダンスが必要な場合は、こちらからドキュメントを入手できます。モデルがすべて黒く表示されてしまうため、環境の照明を設定することを忘れないでください。

クリーンアップ

請求を避けるために、このブログの作業を必ずクリーンアップしてください。この順序で終了したら、次のリソースを削除します。

  1. Lambda およびモデル S3 バケット内のオブジェクトファイルを削除します。これは IoT TwinMaker ワークスペースバケットではなく、このブログ用に作成されたバケットであることに注意してください
  2. CloudFormation スタックを削除します
  3. TwinMaker ワークスペースからモデルを削除します

まとめ

このブログでは、Matterpak バンドルを圧縮して glTF 形式に変換するためのモデル変換パイプラインを作成しました。これには、他のシステムからの OBJ の一般的な変換も含まれます。このパイプラインを使用すると、シーンの読み込み時間を短縮し、3D モデルの更新を直接 IoT TwinMaker のワークスペースに反映できるようになります。

著者について

Chris Azer は、シニア IoT スペシャリストアーキテクトであり、顧客のデジタルツインイニシアチブを支援しています。Chris は 2017 年から AWS でさまざまな役割を果たし、IoT ソリューションの設計でパートナーや顧客をサポートしてきました。これには、国防総省、製造業、州および地方政府、連邦および民間、スマートシティ、パートナーなどをカバーする幅広いユースケースが含まれます。産業オートメーションにおける彼のキャリアは 2004 年にさかのぼり、現在も企業のスマートマニュファクチャリングジャーニーを支援し続けています。

このブログは、ソリューションアーキテクトの戸塚智哉が翻訳しました。