「アドバイス/正確な角度の計算方法」の編集履歴(バックアップ)一覧に戻る
アドバイス/正確な角度の計算方法」を以下のとおり復元します。
*正確な角度の計算方法

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上での利用(別フレームへペースト)

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

:(8) 適用対象モデルとダミーボーンの読み込み|

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

※ 図、省略

:(9) ダミーボーンへのポーズデータの読み込み|

ダミーボーンを選択し、作成したポーズデータを読み込みます。特に注意点はありません。

※ 図、省略

:(10) ボーンの選択とコピー|

角度のポーズデータが読み込まれているボーン、フレームを&b(){「ボーン・フレーム操作」パネル上で選択}します。ボーンとフレームの選択の後、同一のパネル上にある「コピー」ボタンを押下してください。

-&b(){注意)}
--ボーン・フレーム操作パネル上の「コピー」のみ、以降の操作が可能となります。
--また、指定できるボーンは1つのみです。(フレームは複数可)

|&blankimg(CalcRotate11.png,width=160,height=120)|
|BGCOLOR(YELLOW):&b(){モデルの読み込みとポーズデータの適用}|

:(11) 「別フレームへコピー」|

コピー先の対象モデルに移動し、コピーしたいボーンを選択します。(上記同様、「ボーン・フレーム操作」パネル上で選択してください。)

|&blankimg(CalcRotate12.png,width=160,height=120)|&blankimg(CalcRotate13.png,width=120,height=46)|&blankimg(CalcRotate14.png,width=160,height=120)|
|BGCOLOR(YELLOW):&b(){モデルの読み込みとポーズデータの適用}|
-上図は、センターボーンへのコピーを行っています。足IK、つま先IKを切った状態で確認しています。

:(12) 座標の影響範囲と「フレーム位置角度調整」|

初期ポーズが垂直でないボーンに対しても、同様にポーズデータを適用することは可能です。その場合、Localの角度は関係なく、Globalな座標軸に対して初期位置からの移動が行われます。

|&blankimg(CalcRotate15.png,width=160,height=120)|
|BGCOLOR(YELLOW):&b(){右腕に適用した例。Y軸の水平移動}|

なお、この計算は「フレーム位置角度調整」についても同様ですので、この機能を利用して角度を変更することも可能です。

-&b(){注意)}
--あくまでも初期位置からの移動量の倍率なので、初期位置の状態からは倍率をいくつで指定しても移動は行われません。
--倍率はマイナスを指定することも可能です。その場合は逆方向の座標として反映されます。
---振り子的な運動を行いたい場合などにも利用可能です。
--倍率を0倍にすると、その軸のみ「初期位置」に戻りますので、移動の「座標軸初期化」に近い使い方も可能です。

|&blankimg(CalcRotate16.png,width=160,height=120)|
|BGCOLOR(YELLOW):&b(){フレーム位置角度調整も利用可能}|

----
**おまけ

アクセサリへの応用はもちろん、「全ての親」ボーンと組み合わせることで、より正確な回転による機械的なモーション付けを行うことも可能です。

|&blankimg(CalcRotate17.png,width=160,height=120)|
|BGCOLOR(YELLOW):&b(){スケートの真似}|

----
**コメント
#comment(below,vsize=3)

復元してよろしいですか?

記事メニュー
目安箱バナー