• atwiki
  • VPVP wiki
  • アドバイス/正確な角度の計算方法の編集履歴ソース
「アドバイス/正確な角度の計算方法」の編集履歴(バックアップ)一覧に戻る

アドバイス/正確な角度の計算方法 - (2009/04/12 (日) 18:58:37) のソース

*正確な角度の計算方法

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

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

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

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

-&b(){注意)}
--「別フレームへのペースト」機能はモデル間のモーションの互換性を保つためのフォロー機能です。
---ボーン名が異なる場合のモーションの共有を行う機能です(左髪とポニーテールなど)
---全てのモデルの柔軟な互換性を保障するものではありません。
--本作業内でポーズデータ(VPD)を直接編集する箇所があります。慎重に作業を行ってください。
--本ページの内容は「数字」や「計算」の成分が若干多く含まれています。 あらかじめご了承下さい。

|&blankimg(CalcRotate00.png,width=200,height=150)|
|BGCOLOR(YELLOW):&b(){別フレームへのペースト}|

----
&b(){■ 目次 ■}
#contents(fromhere)
----
**MMDの「回転」について

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

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

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

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

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

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

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

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

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

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

|なお、この作業は一度行ってしまい、ポーズデータが作成できれば、再利用するだけとなりますので以降は不要となります。|

:(1) ダミーボーンの読み込み|

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

|&blankimg(CalcRotate01.png,width=160,height=120)|
|BGCOLOR(YELLOW):&b(){ダミーボーンの読み込み}|

:(2) ダミーボーンの回転|

自分が利用したい座標軸を回転させ、「フレーム登録」を行います。
回転量は目算で構いませんが「180度」行ってください。(本例ではY軸で実施)

ポーズデータとして保存する為、&b(){必ず「フレーム登録」を行ってください。

|&blankimg(CalcRotate02.png,width=160,height=120)|
|BGCOLOR(YELLOW):&b(){ダミーボーンの回転}|
-上図では、"Y軸 : 180度" の回転を行っています。

:(3) ポーズデータの保存|

変更したボーンの「ポーズデータ」を保存します。
ただし、MMDでは「保存できるポーズデータはボーン2つ以上」の制限があります。1つのボーンしか選択していない場合はエラーメッセージが表示されますので、&b(){必ず2つ指定}してください。

|&blankimg(CalcRotate03.png,width=160,height=120)|
|BGCOLOR(YELLOW):&b(){ポーズデータの保存}|
-上図では、"ボーン01"と"ボーン02"を選択して実行しています。利用するのは "ボーン01" のみです。

:(4) ポーズデータの確認と変更|

作成されたポーズデータは「テキストファイル」です。メモ帳等での編集が可能です。
以下のような形で出力されていると思いますので、内容を書き換えます。(計算は不要です。下記例を参考としてください。)

|&blankimg(CalcRotate04.png,width=180,height=92)|
|BGCOLOR(YELLOW):&b(){保存ポーズデータの確認}|

-Y軸:180度回転
>Vocaloid Pose Data file
>
>ダミーボーン.osm;		// 親ファイル名
>&color(red){1};				// 総ポーズボーン数
>
>Bone0{ボーン01
>0.000000,0.000000,0.000000;				// trans x,y,z
>0.000000,&color(red){1.000000},0.000000,&color(red){0.000000};		// Quatanion x,y,z,w
>}
>&color(red){※ 以降削除 ※}
-&b(){編集上の参考情報}
--基本的に、180度回転の場合はいずれかの値も「0」または「1」にする。(組み合わせ)
--マイナスが付く場合もある。

|なお、2軸以上動かした場合、残りの1軸を移動させた方が移動量が少なくなるため、結果として2軸の移動のポーズファイルを作成するのは意味がありません。|

#region(参考情報(X軸、Z軸))
-X軸:180度回転
>Vocaloid Pose Data file
>
>ダミーボーン.osm;		// 親ファイル名
>&color(red){1};				// 総ポーズボーン数
>
>Bone0{ボーン01
>0.000000,0.000000,0.000000;				// trans x,y,z
>&color(red){1.000000},0.000000,0.000000,&color(red){0.000000};		// Quatanion x,y,z,w
>}
-Z軸:180度回転
>Vocaloid Pose Data file
>
>ダミーボーン.osm;		// 親ファイル名
>&color(red){1};				// 総ポーズボーン数
>
>Bone0{ボーン01
>0.000000,0.000000,0.000000;				// trans x,y,z
>0.000000,0.000000,&color(red){1.000000},&color(red){0.000000};		// Quatanion x,y,z,w
>}
#endregion

:(5) 変更したポーズデータの取り込みによる確認|

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

|&blankimg(CalcRotate05.png,width=160,height=120)|&blankimg(CalcRotate06.png,width=160,height=120)|
|>|BGCOLOR(YELLOW):&b(){ポーズデータの取り込みと確認}|
-上図では、一旦「初期化」して取り込み、確認を行っています。

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

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

:(6) フレームを移動させたポーズデータの読み込み|

上記 (5) までで作成したポーズデータが 180 度ですので、フレームを180まで進めてポーズデータを取り込みます。
なお、ポーズデータは&b(){「フレーム登録」を行わないと反映されません}ので、必ず行ってください。

|&blankimg(CalcRotate07.png,width=160,height=120)|&blankimg(CalcRotate08.png,width=160,height=120)|
|>|BGCOLOR(YELLOW):&b(){フレームを変更してポーズデータの取り込み}|
-上図は説明の為、上面からの視点としています。

:(7) 目的の角度のフレームでのポーズ保存|

上記 (6) の後、自分の希望する角度までフレームを戻します。
60度の角度が欲しい場合、60のフレームまで戻ります。MMDの補完機能(線形)により、正確な角度までボーンが回転されます。回転されたボーンの情報(位置)で「フレーム登録」し、新たなポーズデータとして保存します。

|上記 (4) ではマニュアルにより数値を変更しましたが、数値についてはMMDによって正確に計算されていますので、変更の必要はありません。2つ以上のボーンを指定する必要がありますので、不要なボーンの情報は削除しても問題ありません。|

|&blankimg(CalcRotate09.png,width=160,height=120)|
|BGCOLOR(YELLOW):&b(){フレームを変更して保存}|

なお、180度の回転方向は MMD により決定されており、反対側については移動されませんが、「反転コピー」を利用出来ます。お試し下さい。

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

&color(red){※ 現在作成中 ※}

----
**コメント
#comment(below,vsize=3)
記事メニュー
目安箱バナー