※13.10.15 若干言葉を補って、ローカル軸関連情報リンク記事へのリンク追加。
※13.09.08 T0R0さんの「闇鍋プラグイン」新機能「LocalX軸でローカル軸を指定角度で回転する機能」の紹介を追加。
※13.08.05 どるるPの「ローカル軸を見た目で設定するプラグイン」を紹介。また、補足部分等を分かりやすくした。
※13.07.19 MEAさんから「■2.ツールを使わずにローカルz軸の方向を任意の角度にする方法(Excel等不要)」から、さらにxz軸の直交を保ったままz軸方向を調整する方法を教えてもらったのでその辺追記しました。
※13.07.18 PMXE上の軸回転のハンドルと回転軸の表記がごっちゃになっていたので、地の文で軸回転のハンドルを示している部分を「○軸」から「○軸の輪」にちょっと言葉を補いました(画像は面倒なので放置)
※13.07.16 22:12分頃 MMD上の表示と動作をよく確認したら、ローカルz軸の方向が他の指と逆になっていたので、その辺追記・修正しました。
※何でお前がそうしようと思ったのかとかいいから、やり方が見たいという人は「■0.」は飛ばして「■1.」のちょっと上あたりからだけ見ればいいと思います。
■0. 経緯
ぺんぎんさんの動画屋目線でのモデル評価基準を見てほーと思ったのですが、その中でこれなー、と思ったものが。
「さて、MMDモデルには一つ問題があって、親指の向きに関して統一見解がありません。ここはモデラーの裁量なので軸に関しては特に拘る必要はないと思うのですが、ひとつだけ言わせて下さい。爪があるモデルは他の指と同様、Z軸で爪のある面が曲がるようにして下さい。いやもうマジで困るんですよこれw」
これ、自分でもなんとかできんかなーと思ったことはあるのですが、PMD(X)Editorのローカル軸簡易設定だと、x軸を表示先方向にすることはできるんですけど、z軸(とそれによって決定されるy軸)は自動で設定されてて、自分で調整するには数値をどうすりゃいいのか分からんかったんですよ。
PMXEditorのreadmeだと
で、xとzに入る数字ってどういうことなのか。□ローカル軸 - ボーン操作時のローカルフレーム指定
X : ローカルX軸
Z : ローカルZ軸
※3軸はX/Zの設定により補正される(X/Zが直交ではない場合はZが補正される)
※軸設定はView側の軸制限簡易設定機能推奨 ([>]ボタンにより表示先方向への簡易設定可能)
よくわからんので【PMXエディタ】PMDEditor Part4スレ(http://jbbs.livedoor.jp/bbs/read.cgi/music/23040/1366702086/)で質問してみたところ、親切な人が教えてくれました。
299さんボーンのルートがある位置を原点とする半径1の球体があると仮想して、なるほどー。
その球体の表面と ローカルX軸にあたる直線との交点の座標(x,y,z)が、
ローカル軸X: の3つの欄に入れる数値になりますローカルz軸も同様の指定をするけど、ローカルx軸が決まった時点で
ローカルz軸と前述の仮想球体表面との交点の取りうる座標は
「ローカルx軸と直交し球の原点を通る平面が 仮想球の表面と交差する円周上のどこか」に
限定されるんだけど、
ローカルz軸の設定で その限定から外れるような指定をした場合は、
たしか 矛盾がなくなるように(z軸側が)自動的に調整されるんだったような
数値の意味がわかったので、ローカル軸欄のxの値はローカル軸簡易設定で得られた値そのままでよくて、z軸側を調整することになる、ってことのようなんですが、軸を意図した方向に向けるためにはかなりめんどくさい計算が必要そう…
記憶のかなたで霞むおぼろげな数学記憶からsinとかcosとかがなんかいりそうだなーとは思ったものの、それ以上のことは霧の向こうで、出てくる記憶といえば高校のころ数学のテストでダメ仲間の友人とジュースを賭けて競った結果、12点を取って(100点満点、平均点は70点くらいだったと思う)、友人が一桁点数だったので見事ジュースを勝ち取ったとかそんな使い物にならないものしか出てきません。
そしたら、便利なツール(Excel使用)を紹介してもらいました。
・ローカル軸回転設定+ポーズデータ作成 http://bowlroll.net/up/dl9253
これで!計算はExcelさんに任すことができる!さらに、いただいたレスから計算およびExcelさん不要の方法も思いつきました。(やや正確さには欠けます)
ということで、以下手順とかメモしてみました。
■1.がツール使用(要Excelまたは互換ソフト)、■2.がツール不要(やや正確さに欠ける)の手順になります。
※補足
・■2.を改良した手法をMEAさんが記事にまとめられてます
→「親指2ボーンのローカルz軸セッティング改」
・どるるPの下記プラグインを使うと、数値操作等なしで、視覚的な操作でローカル軸方向が調整できます
(MEAさん方式のcopyボーン作成・削除あたりを自動化したような使い勝手に思いました)
こちらを使う前に、いったん簡易ローカル軸設定を使って、x軸だけボーンの表示先方向にしておくと、TransformViewでのハンドル操作でy・z軸方向を決めるのがやりやすいと思います。
・T0R0さんの「闇鍋プラグイン」に新機能「LocalX軸でローカル軸を指定角度で回転する機能」がつきました。詳しくはこちらの記事へ→「闇鍋プラグイン ローカル軸・軸制限簡易設定機能/未設定連動ボーンの値リセット機能の説明」
下記「1-1. 回転させる角度を得る」で回転角度が分かったら(あるいは目視で検討がついたら)、「闇鍋プラグイン」内の「[BONE] ボーンのLocal軸/軸制限の設定」プラグインを使用して、回転させたい角度を入力すると、ローカルX軸が回転して、ローカルY・Z軸方向を変えることができます。
■1. ローカル軸回転設定+ポーズデータ作成 ツールを使ってローカルz軸の方向を任意の角度にする方法(要Excelまたは互換ソフト)
(Excel不要の方法は2.で)
※追記:ローカル軸について、詳しくは「ローカル軸関連の参考記事・動画メモ」あたりで参考になる人様記事についてリンクを張ってるのでそちらを参照してください。
●1-0. このツールで、z軸に入れる値を出す為に必要なもの
・現在の(簡易ローカル軸設定でx軸設定の済んだ)ローカル軸 x・zのベクトルの値
(PMXEditorからコピーすればよい)
・z軸を現在方向からx軸で何度回転させるかの角度の値
○1-1. 回転させる角度を得る
デスクトップ上の角度を測れるフリーソフトを落としてくる
・分度器で測りましょ
http://www.vector.co.jp/soft/winnt/util/se345469.html
(x軸の赤い輪が円、y・z軸が直角に交わる直線に見えるような視点にする)
分度器の中心をボーン位置に持ってきて、現在のz軸の輪(マウスオーバーしたので黄色くなってます)を0度に合わせて、爪面方向のマウスを動かすと、60度くらいになりました。
(この場合小数点以下は適当に丸めていいと思います)
(「分度器で測りましょ」は分度器の丸い穴ぽいところをドラッグすると、分度器そのものを回転できます)
親指を爪先方向から見るような視点になってる
ローカルz軸のリングが青点線の位置になると、ローカルz軸を動かした場合に、親指を指の腹側へ曲げられるようになります。(現状だと、z軸で回転させると親指が骨折します)
人差し指~小指はローカル軸設定をしていない状態でも、z軸回転で基本的に指の腹側に曲がります。今回は、その人差し指~小指の操作感に親指を合わせるようにしたいわけです。
○1-2. ツールに値を入力する。
現在角度と向いてほしい角度の差は60度ということで、ツールに値を入力…してみたら、z軸が逆側に回転したので、z軸の回転角度を-60度で入力し直し。
※MMD上の表示をよく確認したら、この値だと、他の指と親指のz軸の方向が逆になってしまい、使いづらそうなので、うちのモデルについては-60度ではなく、120度回転が適切なようです。
z軸の向きが逆の場合は、入力したPMXEのローカルz軸の値を全てプラスマイナスを反対にすると、軸方向を反転させられます。
○1-3. ツールで得られた値をPMX(D)Editorのローカル軸z欄に入れる
入力して、TransformViewでローカル軸の向きを確認してみましょう。
ちゃんとローカルz軸の輪が爪面方向を向くようになったー
MMD上でも動作確認。ローカルz軸を曲げると親指が自然に曲がるようになった。
親指2以外の親指1、親指0は、x軸方向が親指2と異なっていると思いますが、それぞれのx軸を回転軸としてz軸を回す角度は親指2ボーンと同様でいいと思います。
ローカル軸回転設定+ポーズデータ作成ツールにそれぞれのローカル軸の値を入力して、回転角度を親指2ボーンと同様の
左右反転させた指のローカルz軸の値は、ベクトルのx(3つならんだ最初の数字)のプラスマイナスを反転させればいいです。この場合だと0.7554245を-0.7554245-0.7554245を0.7554245にすればいい。
■2. ツールを使わずにローカルz軸の方向を任意の角度にする方法(Excel等不要)
※ MEAさんの「親指2ボーンのローカルz軸セッティング改」の方法だと、この記事だとややいい加減になってしまうxz軸の直交を、きちんと保ってz軸方向が調整できます。
○2-1. 親指の表示先に適当なダミーボーンを設定し、z軸にしたい方向に配置する
「接続先を追加」でダミーボーン用の新規ボーンを作ればいいと思います。
そのダミーボーンをz軸の向いていてほしい方向へ移動させる。
(視点の回転中心を親指の当該ボーンにした上で、爪面が正面を向くように画面を回転させ、
ダミーボーンを当該親指ボーンの真横に移動させると楽?)
○2-2. 当該親指ボーンをローカル軸簡易設定し、x軸の値をベクトルコピー
z軸のベクトルにしたい値が、x軸に入った状態になっています。
○2-3. 親指の表示先を戻し、ローカル軸簡易設定を再度行う
ローカルx軸角度を戻します。
○2-4. ローカルz軸に、先ほどコピーしたベクトルを貼り付け
(ダミーボーンは不要なので削除する)
z軸のベクトルを
「ローカルx軸と直交し球の原点を通る平面が 仮想球の表面と交差する円周上のどこか」
に厳密に持ってくることはできないので、自動補正されますが、持ってきたい軸方向に近似のところには設定できます。