Unreal Engine 5を使ってみる その19(glTFRuntime、実行中に3Dモデルの取り込み)
はじめに
今回はUnreal Engineの実行中に3Dモデルを取り込むことができる、glTFRuntimeプラグインを試してみました。
最近は3Dモデルも生成AIで生成できるようになってきたので、相性が良さそうだなと思っています。
▼Showcaseとして、デモ動画がありました。コリジョンも設定して取り込めるようです。便利に使えそうですね。
▼以前の記事はこちら
プラグインを追加する
▼PCは10万円ぐらいで購入したゲーミングノートPCを利用しています。Windows 11の環境です。
glTFRuntimeについては、Fabでも追加できます。今回はGitHubに公開されているものを利用します。
▼Fabでのページはこちら
▼GitHubでのページはこちら。READMEに書かれていますが、STLやFBXなどの他のデータ形式についてもプラグインが用意されています。
rdeioris/glTFRuntime: Unreal Engine Plugin for loading glTF files at runtime
Releasesのページから、バージョンにあったものをダウンロードします。
▼Releasesのページはこちら
Releases · rdeioris/glTFRuntime
今回はUnreal Engine 5.5の環境に追加するので、glTFRuntime_20241122_ue55.zipをダウンロードして解凍しました。その後、Unreal Engineのプロジェクトの、Pluginsフォルダに追加しました。
▼以前の記事でも利用していたXV3DGSも同じ手順で追加しています。

その後、プロジェクトを起動します。
▼ビルドが必要でした。

▼プラグインが追加されました。

3Dモデルを実行中に追加する
サンプルの実行
glTFRuntimeのドキュメントを参考に進めます。
▼ドキュメントはこちら
https://github.com/rdeioris/glTFRuntime-docs
ドキュメントにサンプルモデルが含まれています。
▼元々はこちらのリポジトリにあったものだそうです。
https://github.com/KhronosGroup/glTF-Sample-Models
このglTF-Sample-Modelsのモデルを取り込んでみます。作成中だったワールドで試してみました。
▼レベルブループリントで以下のようにノードを配置しました。

▼以下のURLのgltfファイルを読み込むようにしています。アクセスすると、ファイルの中身が表示されます。
スポーンする位置は原点ではなく、プレイヤーの前方にスポーンするようにしています。この状態で実行してみました。
▼ゲーム開始時に、アヒルのモデルが表示されました!

glTF Load Asset from Url以外は既存のノードですね。
このモデルにはコリジョンがありませんでした。デモ動画にもあった、コリジョンを考慮して取り込む方法を試してみました。
▼以下のREADMEの記述を参考にしました。
https://github.com/rdeioris/glTFRuntime-docs/blob/master/README.md#collisions
画像のノード通りに接続してもスポーンしなかったのですが、先程のようにSpawn Actorに接続するとスポーンしました。
▼いろいろ試した結果、Static Mesh Configに接続するとコリジョンを設定できました。

Box CollisionやSphere Collisionの大きさの設定もできるようですが、今回はしていません。Make GlTFRuntime Static Mesh ConfigのBuild Simple Collisionだけ有効にして実行してみました。
▼起動後にF8で操作を離れてコリジョンを確認したところ、直方体のシンプルなコリジョンが設定されていました。

Complex Collisionも適用したかったのですが、チェックボックスを有効化するだけでは適用されませんでした。
▼コリジョンが全く表示されていません。実際すり抜けていました。


▼Build Simple Collisionを有効にして、Collision ComplexityをUse Complex Collision As Simpleにするとメッシュのような線が表示されました。


First PersonのRifleの球を当ててみたのですが、アヒルのコリジョンが無い部分でも跳ね返っているように見えました。Rifleの挙動が特殊なのかもしれませんが、衝突判定はSimple Collisionのままの可能性もあります。
特に衝突判定にこだわらないのであれば、Simple Collisionで十分だと思います。
▼glTFRuntimeConvexCollisionsというものがあったので、こちらの方が適切に設定できるかもしれません。
https://github.com/rdeioris/glTFRuntimeConvexCollisions
生成AIのモデル取り込み
以前LumaAIのGenieで、生成AIによる3Dモデルの生成を試していました。Genieで生成したモデルも取り込んでみました。
▼こちらの記事で試していました。
▼今回はロボットっぽいモデルを生成してみました。

ゲーム開始時にファイルの絶対パスを渡してファイルを読み込み、スポーンさせるようにしてみました。
▼レベルブループリントでglTF Load Asset from Filenameを利用してファイルを読み込み、先程の関数を呼び出しています。

▼スポーンできました!

なお、今回はエディタで利用しましたが、パッケージ化したビルドでも利用できるようです。
▼以下に注意事項があります。
https://github.com/rdeioris/gltfruntime-docs#notes-when-packaging-a-game
最後に
生成AIで生成したモデルを実行中に取り込めたので、表現の幅が増えそうです。モデルの作成と配置をユーザーにも体験してもらうことで、何かできないか考えています。
▼最近VRゴーグルのハンドトラッキングで遊んでいたのですが、組み合わせて使えそうです。