[AWS IoT TwinMaker] 3D アセットのシーンへの読み込みがエラーになるので調査をしてみた

2023.07.02

こんにちは、CX事業本部 Delivery部の若槻です。

AWS IoT TwinMaker を使うと、現実世界の状態をリアルタイムに反映したデジタルツインアプリケーションを簡単に作成することができます。

今回は、AWS IoT TwinMaker で 3D アセットのシーンへの読み込みがエラーになったので調査をしてみました。

事象

ワークスペースの Resource Library に 3D アセットがアップロードされています。

この 3D アセットをシーン(Scenes)へ追加したところ、エラーとなり正常に読み込みができません。

調査、原因

Hierarchy ペインでエラーとなっているアセットにマウスオーバーすると、エラーの詳細が表示されます。

どうやらアセットファイルに不備があり、コンソールでの Three.js による glTF ロードが失敗しているようです。

Cound not load s3://s3://twinmaker-workspace-vehicletmdt-XXXXXXXXXXXX-iad/Big_Sleeper_Cabover_3axle.glb: THREE.GLTFLoader: JSON content not found.

Three.js は Web ブラウザー上で 3D グラフィックスを扱うためのライブラリです。glTF(ジーエルティーエフ)は GL Transmission Format の略で、オープンソースの 3D ファイルフォーマットです。

IoT TwinMaker とは関係ありませんが、類似のエラーは以下の記事でも報告されています。

ということでアセットファイルの不備を調査してみます。

3D アセットの実体は S3 バケットに格納されています。該当の 3D ファイルをダウンロードします。

ダウンロードしたファイルを、glTF ファイルを VS Code で扱えるようにする「glTF Tools」で開いてみます。

しかしエラーとなって開くことができません。

エラーメッセージによると、JSON の構文エラーが発生しているようです。

SyntaxError: Unexpected token 'J', "JSON{"asse"... is not valid JSON

ここで、実は今回のエラーが発生したワークスペースは IoT TwinMaker のプロジェクト管理ツールである「AWS IoT TwinMaker Development Tools(TMDT)」を利用して作成していました。

TMDT を使用すると、既存のワークスペースのスナップショットから別のワークスペースを作成することができまます。今回のワークスペースは、既存のワークスペースをコピーして作成したものです。

既存のワークスペースでは、シーン上での 3D アセットの表示は正常にできていました。

そして既存ワークスペースで利用されている 3D アセットファイルを先程と同様に glTF Tools で開くと、こちらは構文エラーは発生せずに正常に開くことができました。先程と異なりファイル先頭に JSON の文字が入っていないのが差分のようです。

結論として、根本原因は TMDT で 3D アセットの変換が上手く行えていなかったことでした。

類似事象

ちなみに類似の事象として以前に次の記事も書きました。この時は TwinMaker のコンソールのセキュリティトークンが切れたことが原因でした。

その場合は下記のエラーメッセージとなりますので、合わせてご確認ください。

The provided token has expired.

おわりに

AWS IoT TwinMaker で 3D アセットのシーンへの読み込みがエラーになったので調査をしてみました。

TMDT は他にもいくつかバグがあり、スナップショットからワークスペースをデプロイできるようになるまでかなり苦労しました。使う際はご注意ください。

そして 3D ファイルに不備がないかを調査する際には、glTF Tools が便利だということが分かりました。

以上