はじめに
Content Examplesに表題の「GroomをBoneで動かす」仕組みのサンプルが追加となっていたので、少し処理を見てみたときの備忘録です。
調査対象はレベルAnimation_Groomsに配置されているBPBP_Aera_Guides_Childです。

環境
- Windows 11
- UE 5.7
各種設定
Groomアセット(DataflowAsset)
GroomをBoneで動かすにはDataflowAssetが必要なので
GroomアセットのDataflowタブにあるCreate Groom Dataflowボタンを押すことで
DataflowAssetが作成されます。
このDataflowAssetにGroomアセットとBone用のSkeletal Meshを連携する処理を追加していきます。

今回はサンプルのBP_Aera_Guides_Childで利用されいるGroomアセットHair_L_DutchBraidを見ていきます。

GroomアセットHair_L_DutchBraidは既にDataflowAssetが設定されているので、開くと下記のような表示となります。

詳細に見ていく前に、DataflowAssetのグラフの見方を簡単にご紹介します。
各ノードはInputとOutputにCollection(FManagedArrayCollection)を持っています。
各ノードはそれぞれの用途に応じたデータ(Attributes)を設定していき、Dataflow Terminalノード(今回の場合はGroomAssetTermani)で設定してきたデータをGroomアセットに保存しています。


閑話休題。
Groomは基本的にガイド(レンダリングの髪の毛の本数より少ないガイド用の髪の毛)で動かすので、GroomAssetToCollectionノードのCurvesTypeGuidesをベースに処理をしていきます。
CurvesTypeStrandsはそのままGroomAssetTerminalノードに繋げて、何もしません。

TransferGeometrySkinWeightsノードでダミーメッシュのスキンウェイトを転送します。
BoneでGroomを動かすときもBoneインデックスとウェイトは必要です。


EditSkinWeightsノードでエディタ内でウェイトなどのパラメータを直接調整することも可能です。

SetSkinningSkeletalMeshノードでランタイム時にGroomをBoneで動かすにはメッシュは不要なので 、メッシュがないSkeletal MeshHair_L_DutchBraid_TriをCollectionに設定します。

Skeletal MeshHair_L_DutchBraid_TriはBP_Aera_Guides_ChildのSkeletal MeshコンポーネントHair_Deformに設定しています。
Hair_L_DutchBraid_TriのBoneを動かせばGroom(今回だとポニーテール)も連動して動くということです。

最後にGroomAssetTerminalノードでこれまでCollectionに設定してきた値を
GroomアセットHair_L_DutchBraidに書き込みます。

Dataflowの設定はUGroomAsset::DataflowSettingsに入り、
SetSkinningSkeletalMeshノードで指定したメッシュがないSkeletal MeshはUGroomAsset::DataflowSettings::SkeletalMeshesに入ります。
ソースコードに興味がある人は FGroomAssetTerminalDataflowNode_v2::SetAssetValue辺りを読んでみてください。
Deformer Graph
Skeletal MeshHair_L_DutchBraid_TriのBoneアニメーションをGroomHair_L_DutchBraidに適用するにはDeformer Graphを利用します。
BP_Aera_Guides_ChildのGroomコンポーネントHairにDG_GuidesSkinningが設定されています。

DG_GuidesSkinningはGroomプラグインに含まれているアセットです。

中身を軽く見てみましょう。
Deformer Graphを設定しているGroomコンポーネント(今回はHair)を参照します。
これで、GroomHair_L_DutchBraidの値が参照できます。

Groomのガイド、DataflowAssetで設定したボーンのインデックス・ウェイト、Skeletal Mesh(今回はHair_L_DutchBraid_Tri)を参照します。

上記で参照した値を元にシェーダコードでGroomのガイド(頂点)をBoneに従い動かして、結果を書き込みます。
シェーダコードの一部の処理はライブラリ(DSL_Xxx)にあるのは注意。

ソースコードに興味がある人は下記辺りを起点に読んでみてください。
BoneでGroomを動かす
試しにシーケンサーでSkeletal MeshコンポーネントHair_DeformのBoneを動かして
連動してGroomが動くか見てみます。
無事に動いているようです。
アニメーターではないので雑なのはご勘弁をw