AI生成した3Dモデルのパイプライン③:コンバートパイプラインのプロトタイプ
AI生成したモデルをゲームエンジンで利用できるようなパイプラインのプロトを作る

今回はコンバートパイプラインとして整備していくにあたり、
- ディレクトリ以下にある生成モデルをPDGを使って一括でコンバートする仕組み
- コンバート前後のモデルのレンダリング画像を作成する仕組み
を作成してみます。
- レンダリング画像から表を作成する仕組み
も作成してみたが、Houdini外で行ったので今回は結果だけ載せています。
(次の記事で触れます)
一括コンバート
ディレクトリ階層以下のすべてのダウンロードデータをコンバートしていく仕組みをPDGで作成する。
TOPの準備
TOP Networkを作成し、

FilePatternNode、RopFetchを作成する。FilePatternをDirectories Only、ダウンロードデータを保存しているルート以下すべてをPattern設定。RopFetchは前回作成した、コンバータ用のSubNetwork内にあるFBX出力用のノードを選択する。


前回SubNetworkの外から設定できるようにしたRoot directoryとResourceDirectoryをTopのアトリビュートで設定する。

Topでディレクト以下の一括コンバート
TopをクックするとFilePatternの検索結果がアトリビュートとして反映され、ディレクトリ以下にある展開したAI生成モデルすべてにコンバートが実行できるようになる。

TOPのFilePatternノードでfbxを参照する方法は以前以下のリンク先のページでまとめたので良ければご参照ください。
PDGで複数のFBXを読み込む
https://www.procedural.jp/articles/spr0jzlwsf2
レンダリング画像を合わせて作成
コンバート時に元モデルとコンバート後モデルのレンダリング画像を合わせて作成する仕組みを作成する。
SOPを一部調整
レンダリングを行うデータはサイズを統一させたいのでレンダリングするタイミングでMatchSizeノードを接続し、Y軸の下端合わせとリサイズを行う。StashTransformに変形値を保存し、fbxの出力前でサイズをRestoreする。
LOPを作成して、先ほどリサイズしてPolyRedcuctionを行ったデータをLOPに入力する。

LOPの準備
LOP内でマテリアルの準備やレンダリング、ジオメトリの入力を作成

MaterialLibrary内でKarma Material Builderを作成して元のテクスチャを読み込んだマテリアルを作成する。テクスチャパスの指定はTOPのアトリビュートを利用している。
`details("../../../../Setting/", "tex_file_path")`

画像出力パスの設定
ライティングなど設定してレンダリングの準備を整え、KarmaRenderSettignの出力パスをエクスプレッションで作成する。
Settingで作成したパスとTOPのアトリビュートで保存先のパスを作成し、rawモデルのレンダリング画像のパスを設定。その後、リファレンスコピーを作成してコンバート後のモデルのOutputPictures部分だけ書き換えて2種類の保存用KarmaRenderSettingを作成する。
`details("../../Setting", "export_directory_path")`/`@filename`_raw.jpg
`details("../../Setting", "export_directory_path")`/`@filename`_remesh.jpg

各々のUSD Render Nodeからrawモデルとコンバート後のメッシュをレンダリングが確認できた。

前項で作成したTOPノードに新たにこの二つのUSD Render Nodeを紐づければTOP実行時に合わせて各リソースのrawモデル、コンバート後モデルのレンダリング画像も作成してくれる仕組みができる。

Expression作成時におけるリファレンスのススメ
余談だが Create Reference Copyで作成したノードはExpressionの確認にも使いやすい

クライアント向けの一覧資料を合わせて作成
各モデルの比較画像を作成したのでクライアント向け資料として一覧できるようにリスト化する。
作成結果(工程は次回)
今回OpenPyxlを使ったのだがHoudiniにデフォルトで入っておらず、Houdini外からPythonを使って資料化したので今回は割愛。

Pythonで画像の資料化は次回、別記事として生成AIの名称ルールと紐づけてまとめます。
ひとまずやりたいことの全体像が見えてきました。
Pythonを使った資料化はHoudiniにOpenPyxlをインストールして使うこともできるのですが、セットアップ周りの手間が増えるのと環境統一や動作確認などの負荷から、僕としてはHoudiniに外部モジュールを追加するのは避けがちです。

fish_ball
プロシージャル魚類