AI生成した3Dモデルのパイプライン②:ベースのリダクション工程を作成
AI生成したモデルをゲームエンジンで利用できるようなパイプラインを作りたい

データコンバート~管理のパイプラインを考える。
あくまで一例です。
有料版での生成工程
有料版では生成工程で30000ポリゴンまで利用することができた。
無料版段階では大部分のダウンロードモデルで破綻してしまっていたが、有料版ではドラフトでよほど複雑なモデルを選ばなければ破綻していなそうなモデルを生成することができそうだった。


ダウンロードデータzipを展開すると無料版同様ディレクトリ以下にfbxとテクスチャが含まれいていた。この形式を入力データとしてコンバートするパイプラインを作成していく。

入出力のベースを作成する
ひとまず基本の形の要件として「ダウンロードデータをディレクトリにまとめて保存」「ライブラリ用のディレクトリにコンバートしたデータを追加していく」の2つの条件を満たせる形で作成していく。
ダウンロードしたzipを保存、展開するためのディレクトリ、rawとコンバート済みデータをいれておくディレクトリlibを作成した。

houdiniでNullを作成し、
- root_directory
:ダウンロードデータを入れておくディレクトリを設定するためのディレクトリパス - resource_directory_name
:ダウンロードしたリソースごとのパスを設定するためのディレクトリ名 - export_root
:コンバート済みのデータを保存していくディレクトリパス
のパラメータを作成

detail wrangleを作成してパラメータからパス関連のアトリビュートを作成する
s@root_directory = chs("../IO_Setting/root_directory");
s@resource_directory_name = chs("../IO_Setting/resource_directory_name");
s@export_root = chs("../IO_Setting/export_root");

Pythonノードを作成しdirectory関連のアトリビュートからfbx、テクスチャを探すためのスクリプト、出力先のパスを作成するスクリプトを記入する。
Nullも作成し、Settingという名称にしてPythonのアトリビュート読み取り用のノードとする
# directory pathアトリビュートから関連ファイルのアトリビュートを作成する
import os
import pathlib
node = hou.pwd()
geo = node.geometry()
root_directory_path = geo.attribValue("root_directory")
resource_directory_name = geo.attribValue("resource_directory_name")
resource_directory_path = f"{root_directory_path}/{resource_directory_name}"
export_root_directory_path = geo.attribValue("export_root")
path_instance = pathlib.Path(resource_directory_path)
# 入力ファイルのパスを取得
source_fbx_file_path = ""
source_tex_file_path = ""
for _path in path_instance.rglob("*"):
if not _path.is_file():
continue
suffix = _path.suffix
if suffix == ".png":
source_tex_file_path = str(_path)
if suffix == ".fbx":
source_fbx_file_path = str(_path)
# 入力ファイルのパスアトリビュートを作成
attrib_name = "fbx_file_path"
string_attrib = geo.addAttrib(hou.attribType.Global, attrib_name, "")
geo.setGlobalAttribValue(attrib_name, source_fbx_file_path)
attrib_name = "tex_file_path"
string_attrib = geo.addAttrib(hou.attribType.Global, attrib_name, "")
geo.setGlobalAttribValue(attrib_name, source_tex_file_path)
# 出力ファイルのパスを作成
export_directory_path = \\
f"{export_root_directory_path}/{resource_directory_name}"
export_fbx_path = \\
f"{export_directory_path}/{os.path.basename(source_fbx_file_path)}"
export_tex_path = \\
f"{export_directory_path}/{os.path.basename(source_tex_file_path)}"
# 出力先のパスアトリビュートを作成
attrib_name = "export_directory_path"
string_attrib = geo.addAttrib(hou.attribType.Global, attrib_name, "")
geo.setGlobalAttribValue(attrib_name, export_directory_path)
attrib_name = "export_fbx_file_path"
string_attrib = geo.addAttrib(hou.attribType.Global, attrib_name, "")
geo.setGlobalAttribValue(attrib_name, export_fbx_path)
attrib_name = "export_tex_file_path"
string_attrib = geo.addAttrib(hou.attribType.Global, attrib_name, "")
geo.setGlobalAttribValue(attrib_name, export_tex_path)

fileノード、CopMaterialPreviewノード、PolyReduceノード、rop fbxノードを作成し、

FileノードのGeometryFileにPythonで取得したソースfbx用のあとリビュートを参照するために
`details("../Setting/", "fbx_file_path")`
CopPreviewノードでカラーテクスチャを読み込むためにSourceをFileに変更とColorFileに
`details("../Setting/", "fbx_file_path")`
RopFbxノードのOutputFileに出力用のパスを読み込むために
`details("../Setting/", "export_fbx_file_path")`
を設定する。

最後にこれらのノードをSubnetwork化し、設定が必要なパス関連、リダクションポリゴン数、出力ボタンパラメータを紐づける。(rop fbxの出力ボタンも紐づけられる)

SavetoDiskボタンを押すとlibディレクトリにリダクションモデルが出力できたのが確認できた。

ここから色々拡張してみます。

fish_ball
プロシージャル魚類