先日、Twitterのタイムラインにて、
「腕とかのローカル軸はモデルによって違うのにモーションを流し込むと同じ動きになるのはなぜ?」
といった趣旨の内容が流れてきたので、
「ローカル軸使うとそのボーン独自の回転軸を持つことになるから腕の関節の向き通りに曲げられる。
でもモーションを流してキー登録したあとは
「『グローバル軸で』曲げた時の座標位置(どれだけ回転したか)」
が登録されるからローカル軸の向きが違っても流し込んだ時に一緒の位置まで回ってくれる。」(原文そのまま)
という内容のツイートを流したところ、少々反響があったようなので、拙い文章、そして少々長くなるかとは思いますが、まとめてみようと思います。
グローバルとローカルの違いは分かるよ!という方は最初の説明部分は飛ばして頂いて構いません。
まずローカル軸とグローバル軸の違いについて。
グローバル軸とは、
MMDを起動して一番に出てくるこの画面の、3本の色のついた軸です。(灰色の線は違いますよ!)
グローバルには、「地球全体の,世界的な」という意味がありますが、
ここでは「MMD世界の軸」と考えれば良いと思います。
一方でローカル軸とは、
腕ボーンなどを選択して、画面右下のアイコンにカーソルを持って行くと出るこの三本のカラフルな軸のことを指します。
「ローカル」を訳すと
- 場所の
- 土地の
- (特定の)地方の
…などといったように様々な訳が出てきますが、MMDでのローカル軸とは、
「各ボーンがグローバル軸とは別にそれぞれ1つずつ持っている軸」
と考えればいいと思います。
MMD初心者の方がまず思うのが、
「ややこしいからどっちか一つだけでいいじゃん…!」
ではないでしょうか? 私がそうでした。
ですが、ローカル軸とグローバル軸の違いがわかると、恐らく作業効率がかなり上がるのではないでしょうか。
次項で2つの軸の違いを説明していきます。
グローバル軸での操作とローカル軸での操作って何が違うの?
まずこの2つの操作の切り替えはMMD操作画面右下のアイコンの英字部分をクリック、
またはMMD ver 9.00以前が「G」キー、9.00以降では「L」キーで切り替えることが出来ます。
⇔
このように切り替わります。(モデル操作画面の場合)
↓ボーン操作パネルの「回転」をクリックするとこのようにハンドルが出ますが、
これは上の2つとはまた違う動き方をするので注意。
英字の下のXYZを使って操作した時だけ、グローバルとローカルの違いが分かります。
ここまで書きましたが、実際にモデルで試してみると、
「上半身ボーン(※例)をグローバルで回してもローカルで回しても一緒じゃん!」
と思う方がいらっしゃると思います。
確かに、モデルを読み込んだときの最初の姿勢で上半身ボーンなどをグローバル軸で回してもローカル軸で回しても同じように回ります。
ではひじボーンをそれぞれの軸で回すとどうなるでしょうか?
どちらもX軸を約90°、右下のアイコンを使って曲げてみました。
明らかに回り方が違うのがわかると思います。
なぜ回り方が違うのかというと、
「グローバルでは最初に画像で説明した、MMD世界の軸を使って回転をさせる。
ローカルではボーンが持っている軸を使って回転をさせる。」
ようになっているからです。
ここは実際に、お手元にあるモデルさんで見てみるとわかりやすいかと。
このようにモデルを読み込んだときの最初の姿勢でローカル軸とグローバル軸で違う回り方をするボーンは主に
「腕」「ひじ」「手首」「指」です。
これらのボーンは人体で実際に動かす時に回せる向きが決まっているので、ローカル軸を設定しておくことで簡単に関節のとおりに回せるようになっています。ローカル便利!
これら以外のボーンではモデルを読み込んだ最初の姿勢だとどちらの軸を使ってもあまり変わりません。
ただ上半身を前に倒した状態でY軸をそれぞれのモードで動かすとまた挙動が変わります。
だからといって○○軸モードを使わないといけない!という制約はないので 操作、把握しやすいモードで操作していくのがオススメです。
グローバル軸とローカル軸の違いについての説明は以上です。
それでは本題に入ります。
「なぜローカル軸の向きが違ってもモーションを流し込むと同じ動きをするの?」
ローカル軸の向きってなんだよ!と思う方がいると思うので説明します。
ここに二人のモデルさんがいます。拙作のニュージーランドさんモデルです。
左のモデルさんのローカル軸は見慣れた向きをしているのに対し、
右のモデルさんのローカル軸はあまり見たことのない方向を向いています。
これは右のモデルさんのローカル軸の設定をしていないからです。
(設定方法などは省略します)
この二人のモデルさんを全く同じモーションデータを使って踊らせてみます。
モーフで二人の区別をつけている以外はモーション修正は一切していません。
二人とも全く同じ動き方をしています。
(お借りしたものは動画説明文にて。)
本題の問いの答えはボーンを操作したあとのキーフレームの登録のされ方にあります。
キーフレームには
「ボーンがXYZ各軸でどれだけ回ったor動いたのか」
が登録されており、その情報はグローバル軸のXYZで登録されます。
MMDのバージョンによってはこのように操作画面下部にXYZ軸それぞれの数値が表示されます。
角度に限って説明すると、
この数値がボーンがどれだけ曲げられたかを表す数値です。
これもグローバル軸で曲げた時の数値です。
例えローカル軸を使った操作でボーンを動かしても、この部分にはグローバル軸で動かした時の数値に置き換えられて登録されます。
モーションデータであるVMD、ポーズデータであるVPDにも、ボーンを動かした時の角度、移動量はグローバル軸で動かした時の数値が登録されています。
私の解釈では、あくまでもローカル軸は
「モデルの関節通り、もしくは意図したとおりに動かしやすくする」
ためにあるのではないかと思います。
特に指の第一関節などは1方向にしか曲がらないのでこれをグローバル軸だけで骨折しないように曲げるのは大変ですからね。ローカル軸は本当に便利です。(二度目
長くなりましたが、これらをすべてまとめ、結論を述べると、
なぜ「ローカル軸の向きが違ってもモーションを流し込むと同じ動きをする」というと、
最初に述べたとおり、
「モーションデータにはグローバル軸で曲げた時の座標位置(どれだけ回転したか)」
が登録されているからローカル軸の向きが違っても流し込んだ時に一緒の位置まで回ってくれる。」
となります。
少しでも理解が進んだ方が入れば幸いです。
結局のところ、全部ローカル軸操作でモーションを作っていようが大体どのモデルも同じように踊ってくれます。腕などが体にめり込むのはこれとはまた別問題ですが…。
ローカルもグローバルもどちらも利点があるので使い分けをしていくといいと思います。
解釈など間違っている部分がございましたらそっと教えていただけると嬉しいです。
それでは、楽しいMMDライフを!