ALMotConv


目次

1. 概要
2. セクション
3. ノードに設定する値
4. 補間
5. 最終フレームについて
6. ベジエ補間
7. 整数スケーリング
8. コマンドラインオプション

第1章 概要

Aqualead用のモーションコンバータです。 拡張子.smtのファイルを.amtに変換します。

smtファイルはテキストファイルで、iniファイルに似たフォーマットで記述します。

例:

[Global]
RepeatFlag=True
ID=0x101
[1]
Scale=200,201,202
[1:0]
Position=1,2,3
Alpha=1
[1:10]
Position=11,12,13
[1:20]
Alpha=0

[3:10]
Position=21,22,23

第2章 セクション

セクションは、Globalと言う特殊セクションと、ノード単位のセクションがあります。 Globalセクションには、RepeatFlagとIDのみの指定が可能です。 RepeatFlagがTrueならループするモーション、Falseならループしないモーションです。 省略時はTrueです。 IDはこのモーションのIDを指定します。 複数モーションをパックするときなどの識別に使用します。 省略時は0になります。

セクションに:が入っていないのはノード初期化セクションです。 指定したノードに一度だけ一度だけ設定され、その後変化しない値を設定します。 セクションに指定するのはノードIDです。 数値か、4文字の文字列で指定します。 モーションロード時に、このノードIDが一致するノードに設定されます。 ロード時に該当するノードIDが見つからなければ、そのノードはスキップされます。

:が入っているセクションはモーションセクションです。 [ノードID:モーションフレーム]という形で指定します。 モーションはここに記述します。

第3章 ノードに設定する値

ノードに設定する値は、すべてプロパティに対しての設定になります。 実行時であれば、ノードのDumpProp()関数で見ることができます。 また、ツールフォルダのControlDef.iniでも見ることができます。 すべて プロパティ名=値 という形になります。

一つのセクションに複数のプロパティの記述があっても構いません。 また、セクションの順番に制限はありませんし、同じセクションが複数あっても構いません。 同一セクションは一つにまとめられます。

第4章 補間

デフォルトでは各プロパティに設定した値はそのまま利用され、値の補間等は行われません。 Aqualeadでは各ノードのプロパティ単位で補間のOnOffを設定ができます。

その場合、各ノードの初期化セクションに IP.Position=Liner という感じで、IP.プロパティ名=Liner と設定することで線形補間が有功になります。

同様にベジエ補間も可能ですが、これは設定が難しいので各種GUIツールで使用します。

第5章 最終フレームについて

RepeatFlagをtrueに設定して、リピートするモーションを作った場合、最終フレームは使用されません。 例えば

[1:0]

[1:5]

の0~5のモーションを作った場合、0,1,2,3,4,0,1,2~というように、最終フレームとなる5フレームは再生されません。 リピートしないモーションや、リピートを脱出するようにプログラムから指示した場合は最終フレームも再生されます。

なお、最終フレームの内容が空の場合、そのフレーム情報自体が削除されてしまうため、 最終フレームにもプロパティの情報は必須です。

第6章 ベジエ補間

ベジエ補間を行うには、プロパティへの設定値の他にベジエ用のパラメータを指定する必要があります。 通常一つの値につき、追加パラメータが二つ、計三つのパラメータが必要になります。 また、ベジエの点が常になめらかに接続する場合は、パラメータを一つに省略することもできます。

例:

[1]
IP.Alpha=Bezier2

[1:0]
Alpha=0.1,0,0.2

[1:10]
Alpha=0.9,0.8,1.0

[1:20]
Alpha=0.2,0.3,0

これは、パラメータが二つある場合の例です。 実際の値は以下のような計算式になります。

各変数は以下のようになります。 tを0~1に正規化したフレーム p1を前フレームの値 p1outを前フレームの二つ目の値 p2を次フレームの値 p2inを次フレームの二つ目の値

r = (1-t)*(1-t)*(1-t)*p1 + 3*t*(1-t)*(1-t)*p1out + 3*t*t*(1-t)*p2in + t*t*t*p2 

先ほどの例で2フレーム目だと

r = 0.8*0.8*0.8*0.1 + 3*0.2*0.8*0.8*0.2 + 3*0.2*0.2*0.8*0.8 + 0.2*0.2*0.2*0.9 で、0.212となります。

値が折れ曲がらず連続した値になる場合、 p-pin = pout-p となります。

この場合は、poutの省略が可能です。 先ほどの例もこのパターンに当てはまるので、以下の例と計算結果は同じになります。 この時は保管種別はBezierになります。

例:

[1]
IP.Alpha=Bezier

[1:0]
Alpha=0.1,0

[1:10]
Alpha=0.9,0.8

[1:20]
Alpha=0.2,0.3

なお、Positionの用にパラメータが複数ある場合などは、まず値*3,Inパラメータ*3,Outパラメータ*3の順になります。

第7章 整数スケーリング

amtファイルでは、4バイト整数型や4バイト実数型を2バイト整数型で表現することができます。 これにより、amtファイルのサイズを小さくすることができます。

容量を小さくする必要が無ければ、使う必要はありません。

その際には、どれだけシフトをするか、オフセットをずらすかを指定できます。

例:

[1]
IP.Alpha=Bezier
Scaling.Alpha=-12

[1:0]
Alpha=410,0

[1:10]
Alpha=3686,3277

[1:20]
Alpha=819,1229

この例では4バイト実数型プロパティを2バイト整数型で表しています。 初期化セクションで Scaling.Alpha=-12 の用に、Scaling.プロパティ名=シフトビット数で指定します。 この場合は、-12となっているので、12ビット右シフトを行います。 そのため、410の値は410/(1<<12)=0.1になります。

なお、出力は必ず2バイト整数型になります。 ちなみに、データフォーマットの関係上例え1バイト整数型を使用したとしてもサイズは変わりません。

値が0から大きくずれている場合、シフト値だけでなくオフセットも指定できます。

例:

[1]
IP.Alpha=Bezier
Scaling.Alpha=-12,-0.5

[1:0]
Alpha=2458,2048

[1:10]
Alpha=5734,5325

[1:20]
Alpha=2867,3277

この例では、実際にはオフセット指定をする必要はありませんが、 12ビットシフトした後、0.5を引くという指定になります。 2458の値は2458/(1<<12)-0.5で上の例と同じ0.1となります。

角度指定の場合など、シフトをする必要はないが、 16ビット型に変更したい場合は、シフト値0という指定も可能です。

Positionの用に複数の値がある場合は、シフト値は共通ですが、オフセットは個別に指定します。

第8章 コマンドラインオプション

通常はコマンドラインは ALMotConv infile outfile の用に指定します。

コマンドラインオプションは以下のものがあります 。

  • -optimize

    値が変化しないプロパティを初期化セクションに移動させます。 初期化セクションに書いたプロパティは初期化時以外は更新されないためパフォーマンスが上がります。

  • -bigendian

    通常はリトルエンディアンで出力しますが、ビッグエンディアンで出力します。 PowerPC等のビッグエンディアンCPUを使わない限り、設定する必要はありません。