On this page |
概要
Mayaのアニメーションキーの接線パラメータは フレーム ベースであるのに対して、Houdiniのアニメーションキーの接線パラメータは 秒 ベースです。 この違いを除けば、Mayaの接線パラメータの"angle"はHoudiniの"slope"に相当し、Mayaの接線パラメータの"weight"はHoudiniの"acceleration"に相当します。 どちらの場合でも、キーの"value"の単位は同じです。
以下の式は、Mayaのangle/weightパラメータとHoudiniのslope/accelerationパラメータを変換する方法について載せています。
変数 |
意味 |
---|---|
|
キーの値。 |
|
Mayaのキーを含んだフレーム。 |
|
Mayaアニメーションキーパラメータ。 |
|
Mayaアニメーションキーパラメータ。 |
|
Mayaのフレームレート(1秒あたりのフレーム数)。 |
|
Houdiniキーの"slope"パラメータ。 |
|
Houdiniキーの"acceleration"パラメータ。 |
|
任意の時間の差分。DTの単位は秒、DFの単位はフレームです。 |
|
任意の値の差分。 |
Note
三角関数を使用する際は、入力の単位(ラジアンまたは度)が正しいことを確認してください。ソフトウェアパッケージによってはtan()
関数で使用する単位が異なります。
例えば、VEXとPythonのtan()
関数ではラジアンを指定しますが、HScriptエクスプレッションのtan()
では度を指定します。
MayaからHoudiniへの変換
例としてMayaを使っていますが、以下の式はキーの接線パラメータに秒ではなくフレームを使用しているどのアニメーションソフトウェアでも当てはまります。 Houdiniのアニメーションキーは秒で表現されているので、シーンのフレームレートに依存していません。
Note
以下の式は、bezier()
表現で値がHoudiniキーに変換されることを想定しています。
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) )