はじめに
『BlenderでMMDをモデル作成 #2』の続きです。
前回でモデルに「回転付与」の設定を済ませました。今回は作成したボーンに「IK」の設定をします。
尚、記事の内容については正確性を保証致しません。「解説」ではなく、個人のメモ、備忘録のような情報としてお読みください。
また、以下の環境でモデルの作成を行っています。
ソフト、アドオン | 版 |
---|---|
Blnender | 2.83LTS |
MMD Tools | 2.4.0 |
PmxEditor | 0.2.5.7 |
各機能や設定についてハイライトで色を分けています。
- Blenderの機能・設定
- MMD Toolsの機能・設定
- MMD Toolsの機能で作成されたもの
IKについて
作成したボーンに「IK」を設定をするその前に「IK」について確認をします。
IKとMMD Tools
IKの設定方法
設定したいボーンに対して、Blenderの機能「ボーンコンストレイント」から「IK」を追加し設定します。
「回転付与」「移動付与」とは異なり、「ボーンプロパティ」ではなく「ボーンコンストレイントプロパティ」から設定します。
IKのドライバー
MMD Toolsのサイドバーから「プロパティ」をクリックすると「影響」の値にドライバーが設定されます。
「影響」を右クリックし、「ドライバーエディターを開く」を選択すると、下の画像のウィンドウが開きます。
PmxEditorの編集を開いてみます。
Blenderのドライバーエディター上の編集が、エクスポート後の「IK」にどういった影響があるのかはわかりませんでした。
今回作成したモデルはドライバーエディターで編集を行っていません。
ドライバーエディターで編集をしないとエクスポートできない、ということはないようです。
BlenderのIKとPmxEditorのIK
BlenderとPmxEditorでは「IK」を設定するボーンが異なります。また、設定項目も値やボーン名称等で違いがありますので、それを確認します。
BlenderのIK
「IKボーン」に「IK」の設定をするのではなく、「IKボーン」に操作される先端のボーンに対して「IK」の設定をすることになります。
具体例
『左足IK』を例に挙げます。脚に「捩ボーン」がない前提です。
①『左ひざ』に対して「ボーンコンストレイント」「IK」を追加
②「ターゲット」を『左足IK』に指定
③「チェーンの長さ」を「2」に設定
チェーンの長さ
下記「ターゲット」に動かされるボーンの「数」を設定します。
例えば「1」を設定すれば、「IK」を設定した『左ひざ』のみが「ターゲット」に動かされます。
この場合、『左ひざ』、『左足』を動かすので「2」というわけですね。
ターゲット
「IK」の目標です。
このボーンを操作すると、「IK」を設定されたボーンから「チェーンの長さ」に指定されたボーンまでが目標を追いかけます。
PmxEditorのIK
先程の『左足IK』の設定でモデルをエクスポートし、PmxEditorで確認してみます。
IKボタン点灯
「性能:」項目にある「IK」ボタンをクリックすると、ボタンが青色で点灯します。点灯状態で「IK」の設定項目が使用可能となり、そのボーンが「IK」の目標として機能します。
上の画像の場合、エクスポートした.pmxファイルを読み込んだ状態で「IK」ボタンは点灯していました。
Link
「IK」の影響を受けるボーンを指定します。目標である『左足IK』に動かされるボーン、つまり『左ひざ』、『左足』を指定されてます。
Target
「Link」に指定されたボーンの、先端のボーンのテールにヘッドが位置するボーンを指定するのが良さそうです。この場合、『左足首』です。
まとめ
概要
Blenderの「チェーンの長さ」はPmxEditorでは「Link」に相当する項目です。
Blenderではボーンの名称ではなく、「Link」含まれるボーンの「数」で指定します。
Blender | PmxEditor | |
---|---|---|
項目 | チェーンの長さ | Link |
具体例(『左足IK』) | 2 | 左ひざ、左足 |
簡単にまとめると、以下のようになります。
ソフトウェア | IKの設定先 | IKの対象 | IKの目標 |
---|---|---|---|
Blender | 左ひざ | チェーンの長さ:2 | ターゲット:左足IK |
PmxEditor | 左足IK | Link:左ひざ,左足 | 設定先 |
繰り返しになりますが、BlenderとPmxEditorでは「IK」を設定するボーンが異なります。ここは大きな違いだと思います。
「IK」だけに限れば、Blenderでは目標である「IKボーン」自体には何か設定をすることはありません。
Blenderでは「IK」の目標を指定しますが、PmxEditorでは「IK」を設定するボーンそのものが目標になります。
Pmxeditorのtarget
PmxEditorの「IK」設定項目「Target」は「IK」の目標ではなく、別の設定項目になります。
同じ「ターゲット」でややこしいのですが、ユーザーが「IK」のコントローラーとして使用するボーンではありません。
Blenderのポールターゲット
設定しなくても問題はないようなので、読み飛ばしていただいて構いません。
機能
Blenderにおいても、「IK」の影響下にあるボーンは、そのボーンを直接操作することはできません。
「ポールターゲット」を設定すれば、「IK」の影響を受ける肘や膝等の関節を操作することが可能となります。
簡単な参考動画を作ってみました。
「IK」で操作した状態でも、「ポールターゲット」に指定したボーンを操作して関節の位置を変更しています。
ポールターゲットを再現してみる
PmxEditor上で似たような機構を作れないか試してみました。
移動付与がヒント?
「ポールターゲット」の設定を行い、かつMMD向けに調整していないモデルがあります。
以下のような設定になっています。
設定先 | ターゲット | チェーンの長さ | ポールターゲット |
---|---|---|---|
左ひじ捩 | 左腕IK | 4 左ひじ捩 左ひじ 左腕捩 左腕 | 左ひじPOLE |
このモデルをエクスポートしてみました。
結果、PmxEditor上では『左ひじ』に対して『左ひじPOLE』を付与親とした「移動付与」が設定されました。
設定先 | 付与親 | 付与率 |
---|---|---|
左ひじ | 左ひじPOLE | 1.00 |
このモデルはMMD向けの調整をしていないので、『左ひじPOLE』に関わらず、このままではまともに操作することはできません。
しかし、「ポールターゲット」をPmxEditor上で再現するには「移動付与」を活かせば良さそう、というヒントを得られました。
MMD版ポールターゲット(みたいなもの)作成
今回のモデルで試してみました。
新たに腕と足に「POLEボーン」を作成し、それぞれ「IK」の「ポールターゲット」に設定しました。
変形のチェックは外し、親は『全ての親』に設定しました。「ポールの角度」も変形の様子を見て調整してあります。
ひとまずエクスポートしてみます。
今度は「移動付与」の設定はされませんでした。
どうやら「ポールターゲット」が移動付与」に変換される、という仕様ではないようです。
先程の失敗例を参考に「移動付与」を設定してみます。
左右の肘・膝に設定を済ませ、MMDで動かしてみました。
『左足IK』を動かした後、『左ひざPOLE』を動かしています。
動画には含まれていませんが、このまま『左足D』『左ひざD』等でさらに変形も可能です。
一応、目的は果たしていますかね?
ここまで作成してみたものの、「ポールターゲット」の設定は空欄でも問題ないので、無理に行う必要はないのではないか、と思います。
IKを設定する
前置きが長くなりましたが、実際に設定します。
今回いろいろな部分に「IK」を設定してみました。画像に多数の「IK」が表示されているのはそのためです。
うまくできなかった箇所も多いので、その部分は割愛します。
IKの設定手順
概要
左足を例に挙げます。
①『左足首』のヘッドから後方へ『左足IK』を作成
②『左ひざ』に「ボーンコンストレイント」「IK」を設定
③「ターゲット」を『New_MMD_Model_arm』を指定
④「ボーン」に『左足IK』を指定
⑤「チェーンの長さ」を「2」に設定
注意点
②では、繰り返しになりますが、「IK」の設定先が「IKボーン」ではない点が重要かと思います。
⑤では、もし足部分にも「捩」を作成していれば「チェーンの長さ」はその分ブ増えると思います。
IKと変形階層
「IKボーン」と「IK」の影響下にあるボーンを複製した「Dボーン」は「変形階層」を揃えた方が良さそうです。
大雑把に言ってしまえば、以下のような設定になっていれば問題ないようです。
IKボーン | 変形階層 | Link | 変形階層 | Dボーン | 変形階層 |
---|---|---|---|---|---|
左足IK | 1 | 左足、左ひざ | 0 | 左足D、左ひざD | 1 |
変形階層で実験
「IK」と「変形階層」について細かく見ていきます。
実験Ⅰ
「IKボーン」と、その「Link」から複製し作成した「Dボーン」との関係が、変形階層の値でどう変化するのか調べてみました。
左足部分の「IK」と「変形階層」を例に挙げ、「変形階層」の値を変化させて実験してみました。
実験Aです。
IKボーン | 変形階層 | Link | 変形階層 | Dボーン | 変形階層 |
---|---|---|---|---|---|
左足IK | 0 | 左足、左ひざ | 0 | 左足D、左ひざD | 0 or 1 |
ボーンを動かす前から滅茶苦茶な状態です。
実験Bです。
IKボーン | 変形階層 | Link | 変形階層 | Dボーン | 変形階層 |
---|---|---|---|---|---|
左足IK | 1 | 左足、左ひざ | 0 | 左足D、左ひざD | 0 |
オレンジ色の『左足・左ひざ』は「IK」の影響を受け移動していますが、『左足D・左ひざD』は移動していません。
実験Cです。
IKボーン | 変形階層 | Link | 変形階層 | Dボーン | 変形階層 |
---|---|---|---|---|---|
左足IK | 1 | 左足、左ひざ | 0 | 左足D、左ひざD | 1 |
『左足D・左ひざD』が「回転付与」で移動し、メッシュが変形しています。
実験Ⅱ
調べる範囲を広げてみます。
「IKボーン」の親子関係、「Dボーン」の親子関係、それと「変形階層」の値の変化がどう影響するか調べてみました。
実験Dです。下の条件で試してみました。
ボーン種 | 親 | 変形階層 | 子 | 変形階層 |
---|---|---|---|---|
IK | 左足IK | 1 | 左つま先IK | 1 |
D | 左足D → 左ひざD | 1 | 左足首D | 1 |
この設定で.pmxを編集し、MMDで動かしてみました。
問題なく動作をしているように思うのですが、どうでしょうか?
次に、実験Eです。
親子関係で「変形階層」の値を変化させた場合も試してみました。
ボーン種 | 親 | 変形階層 | 子 | 変形階層 |
---|---|---|---|---|
IK | 左足IK | 1 | 左つま先IK | 2 |
D | 左足D → 左ひざD | 1 | 左足首D | 2 |
この設定でMMDで動かしてみましたが、同じように問題なく動作しました。
さらに、実験Fです。
「Dボーン」のみ親子関係で「変形階層」の値を変化させた場合です。
ボーン種 | 親 | 変形階層 | 子 | 変形階層 |
---|---|---|---|---|
IK | 左足IK | 1 | 左つま先IK | 1 |
D | 左足D → 左ひざD | 1 | 左足首D | 2 |
こちらの設定でも、問題なく動きました。
最後に、実験Gです。
「Dボーン」は「変形階層」値「1」で統一、「IKボーン」のみ親子関係で「変形階層」の値を調整した場合も試してみました。
ボーン種 | 親 | 変形階層 | 子 | 変形階層 |
---|---|---|---|---|
IK | 左足IK | 1 | 左つま先IK | 2 |
D | 左足D → 左ひざD | 1 | 左足首D | 1 |
これはダメでした。
『左足IK』は問題なさそうですが、『左つま先IK』は動作していませんね。
「Dボーン」の複製元のボーンのみ動いています。
『左つま先IK』が移動する時には、もう『左足首D 』の変形は済んでいる、という判断がされているのでしょうか。
結論
「IKボーン」の「変形階層」の値は「Dボーン」の「変形階層」の値より大きくてはならない、ようです。
余談
単純な親子関係で「子」の「変形階層」の値が「親」のそれより小さいとエラーが出ます。
下図のような場合です。
親 | 子 | 孫 | |
---|---|---|---|
ボーン名 | 左ひざD | 左足首D | 左つま先D |
変形階層 | 1 | 2 | 1 |
こういった場合、「Pmxデータの状態確認」で以下の警告が出ます。
親の変形順序が子より後になります(ボーン順と変形順序を確認してください)
PMXデータの状態検証
この例では『左つま先D』の「変形階層」の値を「2」又は「3」に変更すれば問題はなくなります。
IKの動作を確認
Blenderで確認
前々回の投稿と同じ内容です。
次に、手首と指の「IK」をOFFにした状態です。
そして、手首と指の「IK」をONにした状態です。
指が捩れてしまっています。これは、Blender上であれば、手首と指の「IKボーン」の親をそれぞれ「標準ボーン」に変更すれば解決できます。
ただ、今回の目的は「Blenderで作成したモデルをMMDで動かす」ことですから、これで解決とは言えないですね。
PmxEditorで確認
以下の問題があります。
- 指の「IK」が機能していない
- 「捩ボーン」が回って欲しくない方向に回る
問題の修正
PmxEditroでエクスポートしたファイルを開き、問題点を探し、修正を試みます。
指の「IK」を機能させる
指の「IK」が機能していない問題の解決を試みます。
原因
結論を言ってしまえば、「Loop」の設定が「0」であったのが原因でした。
問題の確認
各指の「IKボーン」は、エクスポートしてみると「IK」として設定されていませんでした。
ここでは『左親指IK』を例に挙げます。
以下の作業をします。
- 「IK」ボタンをクリック
- 「Target」を指定
- 「Link」にボーンを指定
「Loop」が「0」で設定されています。
PmxEditor付属の『readme』ファイルを参照します。
Loop : IK計算のループ回数 (近似状態へ到達するまでの最大回数/MMDでは無視される場合があります)
PmxEditor『readme』
この値が「0」だと「IK」としての演算が行われないようですね。
下の画像はエクスポート時に「IK」として設定が継承されたボーンです。
「Loop」回数は「500」で設定されていました。
問題の修正
「Loop」に数値を指定します。ここでは他の「IKボーン」に合わせて「500」に設定しました。
「捩ボーン」を固定する
「捩ボーン」が回って欲しくない方向に回る問題の解決を試みます。
原因
「IK」の「角度制限」の設定が原因かと思われます。
問題の確認
先程の動画を見るに、Blender上では「捩ボーン」は軸制限が働いているようです。
『左手IK』を例に挙げます。
『左手捩』は「軸制限」を読み込み、適用済みです。「ボーンプロパティ」を見てみると、「IK」の設定で「IKをロック」が点灯しています。
X軸及びZ軸はロックされているようです。
「IK」の影響下にあり「軸制限」を設定していない他のボーンを見てみます。
「軸制限」を未設定の『左ひざ』は「IK」の影響を受けますが、「IKをロック」は設定されていません。
「軸制限」と「IKをロック」の設定には関連があるようです。
「軸制限」をした結果、「IK」の影響を受ける際にもX・Z軸はロックされ、Y軸のみ回転を行う、つまり腕が捩れる回転だけを行う、ということではないか、と思います。
エクスポートしたモデルの『左手捩』『左手IK』をPmxEditorで見てみます。
『左手捩』の「軸制限」は継承されているようです。「>」ボタンを押すと値が更新されました。
→
次に『左手IK』の「角度制限」を確認します。
「軸制限」が設定されている『左腕捩』『左手捩』を見てみます。
「軸制限」の「>」クリック前後で「角度制限」の値が変化しました。画像はクリック後です。
ボーン名 | 「>」クリック前 | 「>」クリック前 |
---|---|---|
左腕捩 | X:-180:180 | X:-180:180 |
左手捩 | X:-180:180 | Y:-180:180 |
エクスポートしたままの状態では『左手捩』があらぬ方向に回転してしまうので、何かが間違っているのだと思います。
しかし、「>」クリック後、『左腕捩』『左手捩』で制限される軸が異なるというのものおかしい気がします。
問題の修正
『左腕捩』『左手捩』に「ローカル軸」を採用しTransformViewを確認します。
これを見る限りでは、回転して欲しいのは赤のX軸だと思います。
ですので、『左手捩』の「角度制限」を「X軸:-180:180」に変更します。
結果、特に変化は見られませんでした。やはり『左手捩』があらぬ方向に動いてしまっています。
結果としては、どこかひとつでも回転できる軸があると『左腕捩』『左手捩』があらぬ方向に動いてしまいました。
「角度制限」の値を全ての軸で最小最大共に「0」に設定すると、メッシュの崩れがなく、肘の関節が大きめに動いてくれるという点では、期待した動作になりました。
ただ、これでは「IK」で操作する時に、自然な腕の捩れを表現できなくなってしまうと思います。
現時点では解決方法がわからないので、今後の課題です。要勉強です。
実験してみた
各「IKボーン」の親を変更してみました。
ボーン名 | 親 | Link | Target |
---|---|---|---|
左手IK | 左手捩 | 左手捩,左ひじ,左腕捩,左腕 | 左手首 |
左手首IK | 左手首 | 左手首 | 左中指0 |
各指IK | 左手首 | 各指の関節 | 各指の先端 |
理由は以下です。
- 「IKボーン」の操作時に「Target」より先にあるボーンを回転させたい
- アーマチュアの中心付近の回転を「IKボーン」に継承させたい
不自然な方向には回らないで欲しいけど、自然な方向には回って欲しいです。
PmxEditorのTransformViewで動かしてみます。
良い感じで動いてくれていますね。
MMDでも試してみました。
残念ながら、腕の「IK」は動作しませんでした。「IK」の親を変更したことに問題があるのだと思います。
まとめ
概要
- 「Loop」の値に注意する
- 「角度制限」を全て「0」にすれば「捩」は回らなくなる
「捩ボーン」の問題
「捩ボーン」の捩れる回転は再現したかったのですが、現状、力不足でできませんでした。手間は増えますが「Dボーン」を手動で回転させれば捩らせることは可能でした。
今回は「角度制限」を全て「0」に設定し、問題の根本的な解決は次の機会にしたいと思います。
手首・指「IK」の問題
「IK」のコントローラーはワールド座標軸で表示されるようですね。
手首や指の「IKボーン」を作ってはみたものの、そもそも「Link」と同じ軸でないと操作性に難があります。
手首の動き、指の曲げ伸ばしを簡単に操作できないかと思い作ってみましたが、これも力不足でできませんでした。
手「IK」について
『BlenderでMMDモデルを作成』の目標達成確認として、MMDで今回のモデル躍らせてみたい、と思っています。
その際は操作できるボーンに腕系統の「IK」がないモデル向けの.vmdを読み込む予定です。ですので、今回の場合、この腕・手首・指の「IK」は問題にならないのが幸いです。
削除する必要もないので、腕系統の「IK」はOFFに設定します。
手の「IKボーン」の親は『全ての親』に指定を戻しておきます。
終わりに
次回は作成したモデルを.pmxに変換してエクスポートし、PmxEditorで編集をする予定です。
読んでくださった方、ありがとうございました。
著者名 | 書籍名 | 出版 | 発行年月日 | 参照頁 |
---|---|---|---|---|
緋子 | Blenderで作るキャラクターモデリング入門実践ガイド | マイナビ出版 | 初版:2021/5/24 | 1~360p |
サイト名 | URL | 参考にした日付 |
---|---|---|
Blender | https://www.blender.org/ | 2022/12/11 |
UuuNyaa/blender_mmd_tools | https://github.com/UuuNyaa/blender_mmd_tools | 2022/12/11 |
とある工房 | https://kkhk22.seesaa.net/ | 2022/12/11 |
Vocaloid Promotion Video Project | https://sites.google.com/view/vpvp/%E3%83%9B%E3%83%BC%E3%83%A0 | 2022/12/11 |
MMD用ボーンの作り方【技術書】 | https://booth.pm/ja/items/3422558 | 2022/12/11 |
参考にさせていただいたモデルについて
readme等を読み、禁止事項に当たらないよう注意し、今回の投稿をしております。
モデル制作者の皆様には、この場を借りてお礼を申し上げます。
制作者の皆様、素晴らしいモデルを使用させていただき、ありがとうございます。
モデル名 | 製作者様 | URL |
---|---|---|
Tda式初音ミク・アペンド_ver1.10 | Tda | https://bowlroll.net/file/4576 |
YYB Hatsune Miku_10th_v1.02 | YYB | https://bowlroll.net/file/146083 |
つみ式ミクさんv4 | つみだんご | https://3d.nicovideo.jp/works/td56081 |