Houdini 19.0 アニメーション

HoudiniとMaya間でアニメーションキーの値を変換する

Houdiniでは秒ベースの“slope(勾配)”と“acceleration(加速度)”を使ってキー接線が記録されているのに対して、Mayaではフレームベースの“angle”と“weight”が使用されています。このページでは、HoudiniとMaya間でアニメーションキーを変換する方法について説明しています。

On this page

概要

Mayaのアニメーションキーの接線パラメータは フレーム ベースであるのに対して、Houdiniのアニメーションキーの接線パラメータは ベースです。 この違いを除けば、Mayaの接線パラメータの“angle”はHoudiniの“slope”に相当し、Mayaの接線パラメータの“weight”はHoudiniの“acceleration”に相当します。 どちらの場合でも、キーの“value”の単位は同じです。

以下の式は、Mayaのangle/weightパラメータとHoudiniのbezier()エクスプレッションキーによるslope/accelerationパラメータを変換する方法について載せています。 このbezier()エクスプレッションキーは、Mayaのウェイト付き接線キーに相当します。 Houdiniの(slope値のみを使用する)cubic()エクスプレッションキーに関しては、Mayaのウェイトなし接線キーに変換されます。

変数

意味

V

キーの値。

F

Mayaのキーを含んだフレーム。

Angle

Mayaアニメーションキーパラメータ。

Weight

Mayaアニメーションキーパラメータ。

FPS

Mayaのフレームレート(1秒あたりのフレーム数)。

S

Houdiniキーの“slope”パラメータ。

A

Houdiniキーの“acceleration”パラメータ。

DT, DF

任意の時間の差分。DTの単位は秒、DFの単位はフレームです。

DV

任意の値の差分。

Note

三角関数を使用する際は、入力の単位(ラジアンまたは度)が正しいことを確認してください。ソフトウェアパッケージによってはtan()関数で使用する単位が異なります。 例えば、VEXとPythonのtan()関数ではラジアンを指定しますが、HScriptエクスプレッションのtan()では度を指定します。

MayaからHoudiniへの変換

例としてMayaを使っていますが、以下の式はキーの接線パラメータに秒ではなくフレームを使用しているどのアニメーションソフトウェアでも当てはまります。 Houdiniのアニメーションキーは秒で表現されているので、シーンのフレームレートに依存していません。

以下の式は、bezier()エクスプレッションで値がHoudiniキーに変換されることを想定しています。 このbezier()エクスプレッションはMayaのウェイト付き接線キーに相当します。 Mayaのウェイトなし接線キーに関しては、Houdiniの(slope値のみを使用する)cubic()エクスプレッションに相当します。

AngleからSlopeへの変換

次の関係式から:

DF = FPS * DT                                  (1)
tan(Angle) = DV / DF                           (2)
S = DV / DT                                    (3)

以下のように代入することで、Slopeの式を導き出すことができます:

S = DV / DT                                    (3)
  = (DF * tan(Angle)) / (DF / FPS)             (それぞれに(2)、(1)を代入)
  = (DF * tan(Angle)) * (FPS / DF)
  = FPS * tan(Angle)                           (4)

Slopeの最終式は以下のように求まります:

S = FPS * tan(Angle)

WeightからAccelerationへの変換

次の関係式から:

DF = FPS * DT                                  (1)
tan(Angle) = DV / DF                           (2)
tan(Angle) = S / FPS                           (5, 上記の(4)を代入)
Weight^2 = DF^2 + DV^2                         (6)
A^2 = DT^2 + DV^2                              (7)

以下のように代入することで、Accelerationの式を導き出すことができます:

DV^2 / DF^2 = S^2 / FPS^2                      (8, 上記の(2)から(5)を代入)

Weight^2 / DF^2 = 1 + DV^2 / DF^2              ((6)をDF^2で除算)
                = 1 + S^2 / FPS^2              ((8)を代入)
                = (FPS^2 + S^2) / FPS^2
==> DF^2 = (Weight^2 * FPS^2) / (S^2 + FPS^2)  (9)

A^2 / DF^2 = DT^2 / DF^2 + DV^2 / DF^2         ((7)をDF^2で除算)
           = 1 / FPS^2 + DV^2 / DF^2           (DT^2 = DF^2 / FPS^2なので、それを(1)に代入)
           = 1 / FPS^2 + S^2 / FPS^2           ((8)を代入)
           = (S^2 + 1) / FPS^2
==> A^2 = DF^2 * (S^2 + 1) / FPS^2
        = ((Weight^2 * FPS^2) * (S^2 + 1)) / ((S^2 + FPS^2) * FPS^2)  ((9)を代入)
        = (Weight^2 * (S^2 + 1)) / (S^2 + FPS^2)
==>   A = sqrt( (Weight^2 * (S^2 + 1)) / (S^2 + FPS^2) )              (10)

Accelerationの最終式は以下のように求まります:

A = sqrt( (Weight^2 * (S^2 + 1)) / (S^2 + FPS^2) )

Note

Weightにはマイナス値を入れることはできません。

HoudiniからMayaへの変換

SlopeからAngleへの変換

求めた上記のS式からSlopeをAngleに変換することができます:

Angle = atan2(S, FPS)

Note

atan2(S, FPS)atan(S / FPS)と等価です。ただし、atan2の方が堅牢で正しく象限を求めることができます。 できるだけatanの代わりにatan2を使用してください。

AccelerationからWeightへの変換

求めた上記のA式からAccelerationをWeightに変換することができます:

Weight = sqrt( (A^2 * (S^2 + FPS^2)) / (S^2 + 1) )

アニメーション

はじめよう

次のステップ

導師レベル