PDGで複数のFBXを読み込む
プロップやキャラクターの解析目的などでHoudiniを利用するための準備

環境
Houdini Indie 20.5.410
テストに使ったデータ
Fab/ Megascan/ BlueLupin
mixamo
本題と関係ないですが Fab とても便利ですね。Unityでも使えるのも良い。
階層以下すべてのFBXから命名規則で検索
プロップなどの、階層下に一通りのデータが存在している場合。
- TOP階層に移動しFile Patternノードを作成
- Patternの欄に命名規則を一致させるための条件を指定する 例えば今回対象にするmegascan/BlueLupinは命名規則が「(モデル名)_(補足的な文字列)_LOD*.fbx」なので「(検索するフォルダ)/Raw_LOD?.fbx」と入力すると取得できる。 *がいずれかの文字列、?がいずれかの単一の文字でマッチする
- 階層以下すべてのファイルを検索の対象にする場合はRecursiveにチェック
- ファイル名、ディレクトリ名、拡張子をどんなアトリビュート名にしたいかを設定する項目があるので名前を入力。ここで入力した (空にすると警告がでて処理が遅くなってしまうので不要な場合でもデフォルトの値を入れておいたほうがいい)

- file_patternを右クリックし、GenerateNodeを実行 検索対象に該当するファイル分のワークが作成される。 いずれかのワークをダブルクリックするとそのワークにおける入力状態になり、なにがインプットされているか確認もできる。

- GeometryOutputを接続し、FilePatternで設定したディレクトリ、ファイル名、拡張子がアトリビュートとして取得できるので組み合わせて入力するとワーク数分対象のモデルを読み込む準備ができる。
expressionはアトリビュートを変更していないなら「@directory + "/" + @filename + @extension」

モデル、モーションを組合わせごとに読み込み
キャラクターモデルのリソースを考えた場合、キャラクターフォルダがありそれ以下にモデルとモーションが複数存在しているようなデータが考えられる。
recursiveをキャラクター全体が入っているフォルダから実行するとすべてのキャラクターのモーションを検索してしまうわけだが、読み込みたいモーションは自身のモーションだけであり、モデル、モーションの組み合わせはキャラクターフォルダ単位で行うことが理想になる。

これを実現するために、複数のFilePatternを繋げて使う。 以下はルートフォルダを検索するFile Pattern、モデルを検索するFile Pattern、モーションを検索するFile Patternの3つで構成したキャラクターごとにモーションを読み込む場合の例。

- 1つ目のFile Patternでキャラクターごとのルートディレクトリを取得する キャラクターが並んでいるディレクトリパスを指定しFileTypeをDirectoryOnlyに設定 Recursiveをオフにし、file attributeをcharacter_directory、directory attributeを root_directoryとして設定しておく

- 2つ目のFile Patternでモデルfbxを取得する ルールはプロジェクトの命名規則次第になるが、今回はキャラクターのroot folder名と同じ名前のファイルがモデルfbxなので1で取得したキャラクターディレクトリ名を使って「 @root_directory + "/" + @character_directory + "/" + @character_directory.fbx」

- 3つ目のFile Patternでモーションfbxを取得する ルールはプロジェクトの命名規則次第になるが、(モデル名) (モーション名)で保存していたので
「@root_directory + "/" + @character_directory + "/" + @model_filename*.fbx」

- ワークをダブルクリックするとモデルフォルダ、モーションフォルダなどを取得できているのが確認できる

- GeometryOutputに入り、作成したアトリビュートを組合わせてモデルモーションを読み込めば個別キャラクターモーション数分のワークでモデルを動かせる状態になる

以上でプロップモデル、キャラクターモデルで穴あきポリゴンの検出なり、貫通検出なりをPDGで回す準備ができた。
他のDCCツールと違い、いちいち Python などでバッチインポーターを組まなくてよいので楽

fish_ball
プロシージャル魚類