1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GroomをBoneで動かす

Posted at

はじめに

Content Examplesに表題の「GroomをBoneで動かす」仕組みのサンプルが追加となっていたので、少し処理を見てみたときの備忘録です。

調査対象はレベルAnimation_Groomsに配置されているBPBP_Aera_Guides_Childです。
2025-12-09_21h40_10.png

環境

  • Windows 11
  • UE 5.7

各種設定

Groomアセット(DataflowAsset)

GroomをBoneで動かすにはDataflowAssetが必要なので
GroomアセットのDataflowタブにあるCreate Groom Dataflowボタンを押すことで
DataflowAssetが作成されます。
このDataflowAssetにGroomアセットとBone用のSkeletal Meshを連携する処理を追加していきます。
2025-12-09_22h40_11.png

今回はサンプルのBP_Aera_Guides_Childで利用されいるGroomアセットHair_L_DutchBraidを見ていきます。
2025-12-09_22h48_29.png
GroomアセットHair_L_DutchBraidは既にDataflowAssetが設定されているので、開くと下記のような表示となります。
2025-12-09_22h52_26.png

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

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

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

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

SetSkinningSkeletalMeshノードでランタイム時にGroomをBoneで動かすにはメッシュは不要なので 、メッシュがないSkeletal MeshHair_L_DutchBraid_TriCollectionに設定します。
2025-12-09_23h22_16.png
Skeletal MeshHair_L_DutchBraid_TriBP_Aera_Guides_ChildのSkeletal MeshコンポーネントHair_Deformに設定しています。
Hair_L_DutchBraid_TriのBoneを動かせばGroom(今回だとポニーテール)も連動して動くということです。
2025-12-09_23h36_26.png

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

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コンポーネントHairDG_GuidesSkinningが設定されています。
2025-12-11_21h50_11.png

DG_GuidesSkinningはGroomプラグインに含まれているアセットです。
2025-12-11_21h52_02.png

中身を軽く見てみましょう。

Deformer Graphを設定しているGroomコンポーネント(今回はHair)を参照します。
これで、GroomHair_L_DutchBraidの値が参照できます。
2025-12-11_21h54_12.png

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

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

ソースコードに興味がある人は下記辺りを起点に読んでみてください。

BoneでGroomを動かす

試しにシーケンサーでSkeletal MeshコンポーネントHair_DeformのBoneを動かして
連動してGroomが動くか見てみます。
無事に動いているようです。
アニメーターではないので雑なのはご勘弁をw

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?