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のウェイトなし接線キーに変換されます。
変数 |
意味 |
---|---|
|
キーの値。 |
|
Mayaのキーを含んだフレーム。 |
|
Mayaアニメーションキーパラメータ。 |
|
Mayaアニメーションキーパラメータ。 |
|
Mayaのフレームレート(1秒あたりのフレーム数)。 |
|
Houdiniキーの“slope”パラメータ。 |
|
Houdiniキーの“acceleration”パラメータ。 |
|
任意の時間の差分。DTの単位は秒、DFの単位はフレームです。 |
|
任意の値の差分。 |
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にはマイナス値を入れることはできません。