HOME

Maneki Pipeline

ゲーム開発のためのプロシージャル

PublicAPIを使ってUnrealEngineのEUWからHoudiniEngineを利用する①

Unreal EngineのBlue Printを使ったツール作成機能、EditorUtilityWidgetからPublicAPIを使ってHDAを実行する。

現在、株式会社クリーク・アンド・リバー社/ COYOTE TECHNICAL ART TEAMの方々と一緒に、「Houdiniをパイプラインとして利用する仕組みを検証・開発」する「Feshdini」というプロジェクトを進めています。
本稿はそれに基づいて調べた内容の一部となります。


環境

Houdini Indie 21.0559
Houdini Engine For Unreal 21.0559
Unreal Engine 5.6.1

概要

HoudiniEngineをUnrealで利用したい場合、基本的にはHDA Actorをシーンに配置し、必要な入力などを設定してCookすることで利用することになる。

HoudiniEngineでHDAを利用する場合、シーンにHDA Actorを配置して利用する

が、HDA Actorの設定はあまりユーザーライクでは無く、汎用的なツールを便利なツールを作ってもあまりユーザーに歓迎されないような場合が多い。
(Artチーム向けに作っても結局TAしか使わないものになってしまったり・・・)

HDA Actorの設定用UIは触ってはいけないパラメータも並立し、使いやすい状態にはなっておらず敬遠されがち

こういったHoudiniEngineの設定をEditorUtilityWidget(以降、EUW)から呼び出すための機能として「PublicAPI」というものを準備してくれている。
PublicAPIを使えば必要な機能だけをまとめたツール形式のGUIを作成することができる。

Houdini Document| Public API
https://www.sidefx.com/docs/houdini/unreal/publicapi.html

PublicAPIをEUWから呼び出せば必要な機能のみをまとめたUIを作成できる

本稿はこの呼び出しを行うための方法となる。

テスト用のHDA

今回テストのために以下のHDAを作成した。
(今回の記事だとパラメータはあまり関係ないです)

  • 入力したメッシュの表面にメッシュを作成する
  • 作成する形状を選択できる
  • 作成する数を設定できる
  • もとのメッシュと結合されたメッシュを作成する
テスト用のHDA
HoudiniEngineForUnrealでテスト

EUWのセットアップ

EUWはコンテンツブラウザで右クリックから作成する。

EUWの作成

ノードの作成

HDA Actorをシーンに配置する方法は「InstantiateAsset」と「ProcessHDA」の2つある

HDA Actorをシーンに作成するためのBPノード

Instantiate Asset

EUWで利用でき、実行に入力が入るとシーンにHDA Actorを作成する。
利用する際はHoudiniEnginePublicAPIをSelfに接続して利用し、設定から自動クック、自動ベイクなども設定できる。

InstantiateAsset BPノードを実行すればシーンにHDAを作成できる

Process HDA

Process HDA は Instantiate Asset同様、指定のHDA Actorをシーンに作成するがデリゲートを含んでおり、HDA内処理の各タイミングで実行ピンを利用することができる。
また、HoudiniEnginePublicAPIは接続しなくても使える。
(BP詳しくなくて開いてまで調べられないため、断定はできないのですがInstantiateAssetのラッパーだと思います)

ProcessHDAはノード作成と作成に紐づく処理タイミングを管理できる

ProcessHDAがもつ実行タイミングの必要性について

実行タイミングを細かく制御する理由として、HoudiniEngineとBPの処理は同期していない点がある。
例えばHDAを作成したあとすぐに入力を作成しようとするとHDA Actorの準備が完了しておらず、すぐに入力が作成できない。

動作しないパターン:入力の作成ができない例
上記の例を実行した場合、入力作成ができず警告が出る

これを解決するためにデリゲートという処理待機を使う必要があるが、ProcessHDAはそのノード生成に紐づく処理タイミングを準備した状態で利用できる。

動作するパターン:ProcessHDAで生成処理完了後に接続を作成
上記の例であれば処理完了で接続も作成されている

なお、デリゲートに関しては次回以降の記事で説明しようと思います。

入力の設定

ノードに入力を作成したい場合、先にCreateEmptyInputでInputインスタンスを作成してそのInputインスタンスにオブジェクトを紐づけ、HDAに設定する、という工程で入力を作成できる。

空入力インスタンスを作成し、紐づける工程を踏むことで入力を設定できる

入力の種別は空の入力に設定できる。

空入力インスタンスで入力の種別を設定できる

また、ProcessHDAにはActor作成前に入力を作成するためのパラメータも用意してくれているのでそちらで設定もできる

ProcessHDAは作成前でも入力作成用のパラメータが使える

機能の呼び出し

クック、リファイン、ベイク

クック、リファイン、ベイクも関数を用意してくれており、InstantiateAsset/ ProcessHDAの出力を接続すると利用できる。

クック、リファイン、ベイク用の関数
上記のような接続をすれば各呼び出しからそれぞれ実行できる

クリーンアップ

作成済みのHDAインスタンスを削除するノードも用意してくれており、クックなどのノード同様、InstantiateAsset/ ProcessHDAの出力を接続すると利用できる。

HDA Actor削除用のノード

以上でノードを作成して処理を呼び出すまでの工程は実現できた


とりあえずの呼び出しを行うための工程です。
次回は、より詳細に処理を行うために入力パラメータの制御やデリゲータについてまとめていきたいと思います。

fish_ball

プロシージャル魚類