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することで利用することになる。

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

こういったHoudiniEngineの設定をEditorUtilityWidget(以降、EUW)から呼び出すための機能として「PublicAPI」というものを準備してくれている。
PublicAPIを使えば必要な機能だけをまとめたツール形式のGUIを作成することができる。
Houdini Document| Public API
https://www.sidefx.com/docs/houdini/unreal/publicapi.html

本稿はこの呼び出しを行うための方法となる。
テスト用のHDA
今回テストのために以下のHDAを作成した。
(今回の記事だとパラメータはあまり関係ないです)
- 入力したメッシュの表面にメッシュを作成する
- 作成する形状を選択できる
- 作成する数を設定できる
- もとのメッシュと結合されたメッシュを作成する


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

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

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

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

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


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


なお、デリゲートに関しては次回以降の記事で説明しようと思います。
入力の設定
ノードに入力を作成したい場合、先にCreateEmptyInputでInputインスタンスを作成してそのInputインスタンスにオブジェクトを紐づけ、HDAに設定する、という工程で入力を作成できる。

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

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

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


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

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

fish_ball
プロシージャル魚類