HOME

AI生成した3Dモデルのパイプライン②:ベースのリダクション工程を作成

AI生成したモデルをゲームエンジンで利用できるようなパイプラインを作りたい

データコンバート~管理のパイプラインを考える。
あくまで一例です。

有料版での生成工程

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

30万ポリゴンで出力した魚 背びれなど細かい部分にも破綻は見られない
さすがに密集した草などは破綻してしまっているものも多かった。(ドラフトの段階で破綻している)

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

ダウンロードした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)
pythonでルートディレクトリ以下のファイルパスを取得する

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の出力ボタンも紐づけられる)

SubNetworkからパラメータを調整できるように紐づけ

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

出力用ディレクトリのlibにリダクションしたメッシュが生成された

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

fish_ball

プロシージャル魚類