UnrealのSpline Componentを入力にしてHoudiniで処理し、その結果をまたUnrealのSpline Componentとして受け取るまでの手順です。
SplineComponent を入力として受け取り、SplineComponentが返ってくるHDAです。
出力したSplineは、Blueprintから Get Location at Distance Along Spline でサンプリングしたり、Niagaraに渡してトレースさせたりなどしてます。
※ 前提としてHoudini Engine for Unreal をプラグインとして有効にし、対応するバージョンのHoudiniをインストールしてるものとします。
〇 Unreal上でHDAをベイクした結果 
〇 出力スプラインに沿うようにNiagaraエフェクトを表示 
1. ネットワークをサブネット化する
HDAにしたいSOPネットワークを用意します。
ここでは入力カーブに沿って猫の輪郭をスキャッターするネットワークです。

HDAにしたいノードを全部選択して Shift + C でサブネット化します。

ここで必ずSOPのサブネットにするのが大事です。ノード入力(Sub-Network Input)はSOPサブネットにしかないので、OBJレベルのコンテナだとUnreal側にノード入力が出てきません。
2. HDAを作成する
サブネットを右クリックして Create Digital Asset...。

Asset Label と保存先を決めて Create します。

3. 入力の名前に "World" を入れる
作成後に開く Type Properties の Input/Output タブで、Input 1 Label を Sub-Network World Input #1 に変えます。

指定名称をラベル名に含むことで、Unreal側でHDAを配置したときのデフォルトの入力タイプを指定することができます。名前に World が入っていないと Geometry Input で立ち上がってしまい、毎回手動で切り替えることになります。
今回試したのは World Input だけですが、curve を含めれば Curve Input が初期値になるはずです。
4. 出力をSpline Componentにする
スプラインとして返すには、出力するカーブに primitiveアトリビュートを3つ 付けます。Primitive Wrangleで書きます。
i@unreal_output_curve = 1;
i@unreal_output_curve_linear = 1;
i@unreal_output_curve_closed = i@loopclosed;unreal_output_curve… HoudiniのカーブをUnrealのSpline Componentとして出力するための属性です。この属性を付与しない場合、カーブはSpline Componentとしては出力されません。unreal_output_curve_linear… Unreal側スプラインの補間タイプ。1でLinear、0だとカーブ補間になります。unreal_output_curve_closed… Unreal側で Closed Loop にするかどうか。ここでは自前のi@loopclosedを渡していて、HDAパラメータから閉じる/閉じないを切り替えられるようにしています。
5. Unrealで入力を繋ぐ
HDAをレベルに配置して、Details の Houdini Inputs を開きます。名前を付けておくと World Input が最初から選ばれています。

- Start Selection を押す
- Outliner かレベル上で、Spline Componentを持つActorを選択する
- Use Current Selection を押す
これで繋がります。Update Automatically がオンなら、Unrealでスプラインを動かすたびに再クックが走ります。
補足: 内部で何をやっているか
サブネットの入力にUnrealのSplineが送られる内部実装についてですが、Opusに調査させた感じだとポイントを送っているわけではなく、
Unreal側が「Houdiniの中にCurve SOPを建てて、それをHDAの入力コネクタに繋ぐ」という操作をリモートでやっているらしいです。
- 入力の数は
HAPI_AssetInfo.geoInputCountをそのまま使う(BuildAllInputs())。SOPアセットならサブネットの入力コネクタの数そのもの。名前はHAPI_GetNodeInputName()で取得していて、これが上のデフォルト判定に使われます。 - スプラインの変換は
FUnrealSplineTranslator::CreateInputNodeForSplineComponent()。GetLocationAtDistanceAlongSpline()でローカル空間の位置をサンプリングし、Houdini側に Curve SOPを1個作ってcoordsパラメータに座標文字列を流し込む。その後rot/scaleを点属性として追加します。 - 接続は
HAPI_ConnectNodeInput(アセットのノードID, 入力インデックス, 作ったカーブのノードID, 0)。
点数は ceil(スプライン長 / Unreal Spline Resolution) + 1 で、Resolutionのデフォルトは50。つまりUnreal上で50cmごとに1点です。0 にすると制御点だけが送られます。