正確な角度の計算方法


(2009.05.09) 【注意】
MMD Ver.4.02 より、ボーンおよびカメラの移動・回転に対する直接数値入力が可能となりました。そちらの機能をぜひご利用下さい。

MMDでは座標の移動については、「軸の初期化」や「バイアス設定」により正確な位置を操作、数値入力により特定することが出来ますが、回転については数値での直截的な指定は出来ません。(初期化による設定しかありません)
特に回転についてはMMD上で「変化量が少ない方向に最適化」しますので、一回転させたい場合に反対側に1つのキーフレームを打った場合、一回転せずに戻ってしまいます。この為、中間地点を指定した最低3回はキーフレームを打つ必要があります。(場合によってはそれ以上の回数が必要です)

動画作成においては回転角度に多少ズレがあったとしてもカメラワークなどで気にならないことも多いですが、(性格的に、あるいは意図的に)『キッチリしたい』という場合もあります。

メニューとしては正確な角度の計算方法があるわけではありませんが、「別フレームへのペースト」機能を利用することで、事前に回転用のポーズデータを作成しておいて使い回すということが可能です。

本ページでは、その準備の方法と利用の仕方を簡単に説明します。
※ ページの内容は長いですが、作業自体は難しいものではありません。

  • 注意)
    • 「別フレームへのペースト」機能はモデル間のモーションの互換性を保つためのフォロー機能です。
      • ボーン名が異なる場合のモーションの共有を行う機能です(左髪とポニーテール、名称の異なるダミーボーン間など)
      • 全てのモデルの柔軟な互換性を保障するものではありません。
    • 本説明は基本的にMMDのみ(一部メモ帳による編集説明はあります)で正確な角度計算を行う場合の具体例です。
      • MMD以外のツールを利用したモーションの変換/管理方法もあります。(下記、関連情報参照)
    • 本作業内でポーズデータ(VPD)を直接編集する箇所があります。慎重に作業を行ってください。
    • この方法はあくまでも参考であり、ボーン構造やモデルの状態によっては結果が異なる場合があります。
    • 本ページの内容は「数字」や「計算」の成分が若干多く含まれています。 あらかじめご了承下さい。

CalcRotate00.png
別フレームへのペースト


■ 目次 ■

MMDの「回転」について


MMDのモーションの内、回転の値はX,Y,Zの座標ではなく、「クウォータニオン(Quatanion)」と呼ばれる四次元数によって表されています。(詳しいことは判りませんが、とても計算が速いそうです)
数学的な難しい話は置いておいて、MMDを操作する上での「回転」とは、

  • MMDの回転とは
    • モデルの初期位置(角度)からの変化量
    • 直前のキーフレームとの変化において、(変化量の少ない)「最短の距離」で移動

と理解しておけば特に問題はありません。「最短の距離」が重要なポイントとなります。

MMDの「反転コピー」について


MMDの便利な機能として「反転コピー」があります。説明する必要の無い、多用される機能ですが、反転コピーをあえて言葉として説明すると、以下の特徴があります。

  • MMDの反転コピーとは
    • ボーン名に「左」または「右」が含まれている場合、反対側に位置するボーンにキーフレームをコピーする。
      • 反対側とは「左」のボーン名の場合は「右」、またはその逆であり、ボーン名によって判断される。
    • コピーされる際、移動および回転の値は「Y軸反転」(プラスマイナス反転)が行われる。
      • ボーンの初期位置、親ボーンとの関係によって相対的に設定される。
    • ボーン名に「左」も「右」も存在しない場合は自分自身に対して反転した値をセットする。

となります。今回の説明においては、「ボーン名によらず、値は反転される」ことがポイントとなります。


ダミーボーンを利用した回転ポーズデータの作成


MMDには「別フレームへのペースト」というモーションコピーのサポート機能があります。
これは、名称の異なる(コピー出来るボーンは1回に付き1つだけです)ボーン間でモーションのコピーを実現するもので、この機能を利用することで、事前に用意しておいたポーズデータ他のボーンに適用することが出来ます。

今回は「ダミーボーン」を利用し、正確な角度のポーズデータ(VPD)を作成します。

なお、この作業は一度行ってしまい、ポーズデータが作成できれば、再利用するだけとなりますので以降は不要となります。また、この方法はあくまでも「できるだけ正確にしたい場合」であり、指定した角度からの正確に分割点を求める場合にとどめるのであれば、 (4) と (5) の部分はあえて行う必要はありません。

(1) ダミーボーンの読み込み
ダミーボーンをMMD上に読み込みます。以下の説明においては「矢印アクセサリ」を作成して説明していますが、自分で利用される場合には、自分がわかりやすいアクセサリをご利用下さい。(アクセサリを利用しなくても設定は可能です)
CalcRotate01.png
ダミーボーンの読み込み

(2) ダミーボーンの回転
自分が利用したい座標軸を回転させ、「フレーム登録」を行います。
回転量は目算で構いませんが「180度」行ってください。(本例ではY軸で実施)
ポーズデータとして保存する為、必ず「フレーム登録」を行ってください。
CalcRotate02.png
ダミーボーンの回転
  • 上図では、"Y軸 : 180度" の回転を行っています。

(3) ポーズデータの保存
変更したボーンの「ポーズデータ」を保存します。
ただし、MMDでは「保存できるポーズデータはボーン2つ以上」の制限があります。1つのボーンしか選択していない場合はエラーメッセージが表示されますので、必ず2つ指定してください。
CalcRotate03.png
ポーズデータの保存
  • 上図では、"ボーン01"と"ボーン02"を選択して実行しています。利用するのは "ボーン01" のみです。

(4) ポーズデータの確認と変更
作成されたポーズデータは「テキストファイル」です。メモ帳等での編集が可能です。
以下のような形で出力されていると思いますので、内容を書き換えます。(計算は不要です。下記例を参考としてください。)
CalcRotate04.png
保存ポーズデータの確認
  • Y軸:180度回転
Vocaloid Pose Data file

ダミーボーン.osm; // 親ファイル名
1 ; // 総ポーズボーン数

Bone0{ボーン01
0.000000,0.000000,0.000000; // trans x,y,z
0.000000, 1.000000 ,0.000000, 0.000000 ; // Quatanion x,y,z,w
}
※ 以降削除 ※
  • 編集上の参考情報
    • 基本的に、180度回転の場合はいずれかの値も「0」または「1」にする。(組み合わせ)
    • マイナスが付く場合もある。
    • MMD上での保存は2つボーンが必要だが、読み込み時は1つでも問題ない(総ポーズボーン数を修正のこと)
    • メモ帳を利用する場合、拡張子が「.txt」に変更される場合があるので要注意。
なお、2軸以上動かした場合、残りの1軸を移動させた方が変化量が少なくなるため、結果として2軸の180度移動のポーズファイルを作成しても、意図通りの動きをしない場合があります。
+ 参考情報(X軸、Z軸)

(5) 変更したポーズデータの取り込みによる確認
変更されたポーズデータをMMD上で取り込み、回転軸が想定通りかどうか確認してください。
(3)で出力した状態で再度取り込むと、同じ状態(見た目的に)となります。
正しく取り込めなかった場合は、上記(4)を再度行ってポーズデータの内容を確認してください。
CalcRotate05.png CalcRotate06.png
ポーズデータの取り込みと確認
  • 上図では、一旦「初期化」して取り込み、確認を行っています。


MMDによる正確な角度のポーズデータの作成


MMD上に角度計算用の計算機があるワケではありませんが、MMDの補完機能を利用して、正確な角度のポーズデータが作成できます。

(6) フレームを移動させたポーズデータの読み込み
上記 (5) までで作成したポーズデータが 180 度ですので、フレームを180まで進めてポーズデータを取り込みます。
なお、ポーズデータは「フレーム登録」を行わないと反映されませんので、必ず行ってください。
CalcRotate07.png CalcRotate08.png
フレームを変更してポーズデータの取り込み
  • 上図は説明の為、上面からの視点としています。

(7) 目的の角度のフレームでのポーズ保存
上記 (6) の後、自分の希望する角度までフレームを戻します。
60度の角度が欲しい場合、60のフレームまで戻ります。MMDの補完機能(線形)により、正確な角度までボーンが回転されます。回転されたボーンの情報(位置)で「フレーム登録」し、新たなポーズデータとして保存します。
上記 (4) では、手で直接変更しましたが、数値についてはMMDによって正確に計算されていますので、変更の必要はありません。2つ以上のボーンを指定する必要がありますので、不要なボーンの情報は削除しても問題ありません。
  • 180度の回転方向は MMD により決定されており、反対側については移動されませんが、「反転コピー」を利用出来ます。お試し下さい。
CalcRotate09.png
フレームを変更して保存


MMD上での利用(別フレームへペースト)


上記 (7) までで作成したポーズデータは、ダミーボーンを利用していますが、MMDの「別フレームへペースト」の機能を利用すれば、他のボーンに対しても同様の角度調整が可能です。(ボーンにより初期角度が違いますので注意)

(8) 適用対象モデルとダミーボーンの読み込み
ポーズデータを適用したいモデルを読み込みます。また、保存したポーズデータを利用するためのダミーボーンを読み込みます。(ポーズデータはモーションデータと同様、保存時と同一のボーン名の場合にしか取り込まれません)
※ 図、省略

(9) ダミーボーンへのポーズデータの読み込み
ダミーボーンを選択し、作成したポーズデータを読み込みます。特に注意点はありません。
※ 図、省略

(10) ボーンの選択とコピー
角度のポーズデータが読み込まれているボーン、フレームを「ボーン・フレーム操作」パネル上で選択します。ボーンとフレームの選択の後、同一のパネル上にある「コピー」ボタンを押下してください。
  • 注意)
    • ボーン・フレーム操作パネル上の「コピー」のみ、以降の操作が可能となります。
    • また、指定できるボーンは1つのみです。(フレームは複数可)
CalcRotate11.png
モデルの読み込みとポーズデータの適用

(11) 「別フレームへコピー」
コピー先の対象モデルに移動し、コピーしたいボーンを選択します。(上記同様、「ボーン・フレーム操作」パネル上で選択してください。)
CalcRotate12.png CalcRotate13.png CalcRotate14.png
「別フレームへのコピー」による異なるボーン間のモーションコピー
  • 上図は、センターボーンへのコピーを行っています。足IK、つま先IKを切った状態で確認しています。

(12) 座標の影響範囲と「フレーム位置角度調整」
初期ポーズが垂直でないボーンに対しても、同様にポーズデータを適用することは可能です。その場合、Localの角度は関係なく、Globalな座標軸に対して初期位置からの移動が行われます。
CalcRotate15.png
右腕に適用した例。Y軸の水平移動
なお、この計算は「フレーム位置角度調整」についても同様ですので、この機能を利用して角度を変更することも可能です。
  • 注意)
    • あくまでも初期位置からの移動量の倍率なので、初期位置の状態からは倍率をいくつで指定しても移動は行われません。
    • 倍率はマイナスを指定することも可能です。その場合は逆方向の座標として反映されます。
      • 振り子的な運動を行いたい場合などにも利用可能です。
    • 倍率を0倍にすると、その軸のみ「初期位置」に戻りますので、移動の「座標軸初期化」に近い使い方も可能です。
CalcRotate16.png
フレーム位置角度調整も利用可能


おまけ


回転するアクセサリ(時計の針や車輪、背景のオブジェクトなど)への応用はもちろん、「全ての親」ボーンと組み合わせることで、より正確な回転による機械的なモーション付けを行うことも可能です。
CalcRotate17.png
スケートの真似

また、本説明はMMDを利用して正確な角度計算を行う例を記載いたしましたが、公開中の「VMDConverter」(Yumin Space)を利用すれば、CSV形式でのモーション管理を行うことも出来ます。下記の関連情報よりご確認下さい。


関連情報




コメント

名前:
コメント: