5
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?

CHOPsを使ってプリロールアニメーションを外挿する

Last updated at Posted at 2025-12-17

0. はじめに

この記事は Houdini Apprentice Advent Calendar 2025 の 18 日目の記事です

0-1. 動作環境

Houdini: 21.0.559 (Production Build)

0-2. 概要

エフェクトをやっているとアニメーションが付いたモデルをもらうことがあると思いますが, プリロールアニメーションが欲しいときってありますよね. (特にオブジェクトトラッキングなど)

手で簡単に付けてしまう方法もありますが毎回やるのは面倒なので, 今回は Houdini の CHOPs を使って自動でプリロールアニメーションを作る方法を書きます.

1. 実装

1-1. トランスフォーム情報の抽出

1-1-1. トランスフォーム行列の計算

Time Shift SOP でアニメーションのスタートフレームでホールドしたものと, ホールドしていないものを用意し, Extract Transform SOP でアニメーションのトランスフォーム行列を計算します.
Screenshot from 2025-12-15 02-06-42.png

Extraction Method パラメータは, アニメーションが移動と回転のみなら Translation and Rotation に, それ以外も含むなら内容に合わせて設定すると良いでしょう.
Output Attribute パラメータは Transform Matrix(4x4)
Screenshot from 2025-12-15 02-03-03.png

1-1-2. トランスフォーム行列の変換

以下の VEX で, トランスフォーム行列を XYZ の移動回転(スケール)に変換して, アトリビュートに設定します.

crack_transform(Detail Wrangle)
v@translate = {0, 0, 0};
v@rotate = {0, 0, 0};
v@scale = {0, 0, 0};
matrix m = point(0, "transform", 0);

cracktransform(0, 0, {0, 0, 0}, m, v@translate, v@rotate, v@scale);

$cf.$cracktransform VEX function

これにより, トランスフォーム行列と等価な移動回転スケール値を, Detail Attribute として取得することができます.
Screenshot from 2025-12-15 02-13-42.png

Detail Wrangle に Vector3 のパラメータを新たに作り, Name をそれぞれ t, r, s としておきます.ラベルはわかりやすいものにします.
Screenshot from 2025-12-15 02-17-42.png

追加したパラメータに以下のエクスプレッションを入れ, アトリビュートの値を取得します.
Screenshot from 2025-12-15 02-19-58.png
Screenshot from 2025-12-15 02-21-01.png

1-2. トランスフォーム情報の外挿

1-2-1. トランスフォーム情報を CHOPs にサンプリングする

chop net を作成し, Channel CHOP を作ります.
Screenshot from 2025-12-15 02-26-13.png

t, r, s という名前で Size 3 のチャンネルをそれぞれ作り, value を Detail Wrangle の Translate, Rotate, Scale パラメータをコピーし Paste Relative Reference で参照します. (スケールがないなら s は不要)
Screenshot from 2025-12-15 02-28-35.png

Motion FX View を見ると正しく値がサンプリングされていることがわかります.
Screenshot from 2025-12-15 02-32-09.png

しかし, デフォルトでは範囲外は境界値でホールドされています.
Screenshot from 2025-12-15 02-35-20.png

そこで, 範囲外の値をいい感じに補完します.

Channel CHOPChannel Range パラメータを Use Start/End にして,Start, End パラメータにアニメーションの存在する尺(ここでは1001〜1060)に,Extend Left パラメータを Slope にします.
尺の後ろ側を広げたい場合は Extend Right パラメータを Slope すると良いでしょう.
Screenshot from 2025-12-15 02-42-35.png

Channel CHOPUnits パラメータを Frames に設定します.

Screenshot from 2025-12-15 02-44-15.png

Motion FX View を見ると境界値の傾きを維持したまま拡張されていることが分かります.
Screenshot from 2025-12-15 02-45-24.png

1-3. トランスフォーム情報の適用

アニメーション開始フレームでホールドした Time Shift SOPTransform SOP をつなげます.
Screenshot from 2025-12-15 02-50-58.png

Export CHOPChannel CHOP につなげます.
Export Flag(左下の黄色いやつ)をつけます.
Export CHOPNode パラメータにさっき作った Transform SOP へのパス, Path パラメータには使いたいチャンネルを入力します.
Screenshot from 2025-12-15 02-53-46.png

すると Transform SOP のパラメータが自動的に CHOPs の値で上書きされます.(チャンネル名を t, r, s にしたのはこの Transform SOP のパラメータ名と一致させるため)
Screenshot from 2025-12-15 03-06-57.png
Screenshot from 2025-12-15 03-07-08.png

これにより, 外挿したアニメーションをモデルに適用することができます.

2. トラブルシュート

回転の値によっては、行列の分解時に画像のように不連続な箇所が現れることがあります.
2025-12-15_11-48.png

こういう場合には Euler Rotation Filter CHOP を使って修正することができます.
2025-12-15_11-53.png
2025-12-15_11-54.png
$cf.$Euler Rotation Filter channel node

3. おわりに

今回は CHOPs でのアニメーションの修正をやってみました.
CHOPs はやっぱり便利

5
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
5
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?