【Houdini】Pivot Painter を活用し、WPO でオブジェクトを動かそう

この記事では、Pivot Painter の概要と使い方を紹介します。
Pivot Painter を用いることで、ゲームエンジンのパーティクルシステムでは難しい表現ができる場面があります。

対象読者

・エフェクトデザイナー
・Houdini を学習中の方
・Pivot Painter に興味がある方

環境

・Houdini 21.0.729
・SideFXLabs21.0

Pivot Painter とは?

メッシュの各パーツのピボット位置や向き、階層情報などをテクスチャや頂点カラーに格納し、シェーダーの WPO でアニメーションさせる手法です。
Unreal Engine などの商用エンジン以外でもシェーダーを準備すれば使用可能です。

通常、オブジェクト単位のアニメーションを大量に行うと負荷が高くなりやすいです。
ただ、Pivot Painter を使用することで、WPO で軽量に動かすことができます。

得意な表現

・草木の揺れ
・枝や葉の階層的な揺れ
・崩壊表現
・大量のメッシュを軽量に動かす表現

いつからある?

技術としては10年以上前から存在するようで、以下リンク先に “ピボットペインター” に関する記述があります。
(添付画像は Google 翻訳で日本語にしたもの)
https://www.unrealengine.com/blog/epic-games-releases-january-2012-unreal-development-kit-beta

できないこと

・コリジョンや衝突判定が必要な表現
・メッシュのトポロジーが変化する表現
・キャラクターのような複雑なスキニングアニメーション
・Houdini のシミュレーション結果を正確に再生する表現

この記事で取り扱う範囲について

階層構造を持たないシンプルな Pivot Painter (メッシュの各ピースを回転・移動)のみを扱います。
草木の枝葉のような親子階層を持つ揺れ表現や、親の動きに子が追従するような処理については解説しません。

また、Pivot Painter のバージョンは 2.0 を使用し、1.0 については触れません。

Pivot Painter を使ってみよう!

まずは、上記動画のように「各ピースが順番に拡縮する」処理を作ります。
実装環境として Unreal Engine 5.5.4 を使用しますが、Unity などでも大きな差はないかと思われます。

Houdini でのセットアップ

まず初めに SideFXLabs のダウンロードをお願いいたします。
ピボットペインターで使用する “unreal_pivotpainter” というノードがそちらに含まれています。

【全体像】

『box、grid、copytopoints』はデフォルトのままで問題ありません。
『copytopoints』からメッシュ、『enumerate』からピボットとなるポイントを『unreal_pivotpainter_edited』に繋いでいます。

enumerate

『unreal_pivotpainter』の使用にあたり、”hierarchy” という Attribute が必須です。
これはピースと pivot の対応付けのために使用されます。
例えば、”hierarchy = piece0″ のメッシュは、同じく “hierarchy = piece0” のポイントがピボットです。

unreal_pivotpainter

標準だと Index がズレていたため、一部処理を変更しています。
私が手順を間違えている可能性もありますが、この記事では問題ないとして進行します。

⇓ 標準だと UV の最初のポイントが上手く判定されず原点に移動している。

■標準

■処理を変更

// でコメントした3行目がもともとの処理です。
単純に index に対する “+1” を削除しました。

書き出しは『unreal_pivotpainter』上部の “Export” を押すことで実行されます。
また必須ではありませんが、”Restore Input Scale = true” にすることで Houdini 内でのスケールが正しくなり、作業がしやすくなります。

ゲームエンジン(UE5.5.4)でのセットアップ

書き出したメッシュとテクスチャをインポートし、テクスチャは以下のように設定します。

マテリアル

上記がマテリアルのノード構成です。
難しいことはしておらず、Pivot Painter の情報を取得したらただの WPO 処理です。

1. Pivot Painter テクスチャからピボット位置を取得する
2. ピースごとのインデックスを取得する
3. Time と組み合わせて、ピースごとに拡縮タイミングをずらす
4. 各頂点をピボット中心で拡縮する

マテリアル関数について

『ms_PivotPainter2_DecodePosition』と『ms_PivotPainter2_UnpackIntegerAsFloat』
Pivot Painter の情報を取得する専用のマテリアル関数です。
処理内容も簡単に紹介します。

『ms_PivotPainter2_DecodePosition』

座標を World Space に変換しているだけです。

『ms_PivotPainter2_UnpackIntegerAsFloat』

Houdini でテクスチャに詰め込まれた整数値を float に変換しています。
Houdini でテクスチャに値を入れる際は “0, 1, 2” のような形でなく、16ビットの形式で保存されます。
“0” なら “0.00006103515625” です。

Unreal Engine 側では保存時とは逆の手順で元の整数値に戻します。

『Custom』の処理内容は以下です。

uint uRes32 = asuint(float(N));

const uint sign2 = ((uRes32>>16)&0x8000);
const uint exp2  = ((((const int) ((uRes32>>23)&0xff))-127+15) << 10);
const uint mant2 = ((uRes32>>13)&0x3ff);
const uint bits = (sign2 | exp2 | mant2);
const uint result = bits - 1024;
return float(result);

作例:プレイヤーが近づくと崩れる

Pivot Painter を活用することで以下のような表現ができます。
すべて解説すると長くなりすぎるため、画像の添付をベースに記載します。

Houdini

  1. Box の形状にノイズを加える
  2. ボクセル化したうえで、ボクセルの中心点を取得
  3. 頂点数が増えすぎないように内側を少し減らす
  4. 先ほど同様の処理で Pivot Painter を書き出す

Box の形状にノイズを加える

ボクセル化したうえで、ボクセルの中心点を取得

頂点数が増えすぎないように内側を少し減らす

・『vdbfrompolygons2』は『vdbfrompolygons1』と同じ Voxel Size(VDB の形式が Distance or Fog でできる処理が変わるため分けている)
・『Group Create』 の “Iso Surface” は適切な値に任意で調整。

マテリアルパラメーターコレクション

・プレイヤー位置をマテリアルに渡すために、マテリアルパラメーターコレクションを使用。
・レベルブループリントから Tick で更新。

マテリアル

・左側でプレイヤーとの距離マスクを作成。
・中央で Pivot Painter の情報から各ピースごとの位置/拡縮を処理。
※実際のゲームでは処理負荷の観点から、『Noise』系ノードをノイズテクスチャに代替した方が良いかと思います。

まとめ

Pivot Painter を活用することで、インタラクティブなエフェクトや説得力のある破壊表現を作成することができます。
まだまだ使用タイトルは少ない印象ですので、差別化にもつながるかと思います。
この記事が Pivot Painter を学習するきっかけになりましたら幸いです。

VFX_Haku

3Dエフェクトデザイナー。たまに社内向け勉強会やってます。
興味がある分野は業務効率化やワークフロー整備、シェーダー開発。Python学習中!

投稿者記事

  1. READ MORE

    【Booth 商品紹介】テクスチャライブラリ配布

    2026-05-26

  2. READ MORE

    【Unreal Engine 5】円形に UV スクロールする方法3選

    2026-02-12

  3. READ MORE

    【Maya : Bifrost】Vector Field を書き出して UE5 の Niagara で使用する

    2026-01-06

  4. READ MORE

    【Maya : Bifrost】Dual Mesh(バリア形状)ノードを自作しよう

    2025-11-12

関連記事

  1. READ MORE

    【Houdini】Latticeノードの使い方

    2024-03-26

  2. READ MORE

    【Houdini/UE5】コペルニクスの Cop Pyro で作った煙をUE5のNiagaraに組み込んでみよう

    2025-11-27

  3. READ MORE

    【Houdini】ポイントアルファをカーブで制御しよう

    2024-04-17

  4. READ MORE

    【Houdini】エフェクトテクスチャ作成にコペルニクスを使ってみよう

    2025-10-14

ページ上部へ戻る