BlenderでMMDモデルを作成 #3【IK】


はじめに

『BlenderでMMDをモデル作成 #2』の続きです。

前回でモデルに「回転付与」の設定を済ませました。今回は作成したボーンに「IK」の設定をします。

尚、記事の内容については正確性を保証致しません。「解説」ではなく、個人のメモ、備忘録のような情報としてお読みください。
また、以下の環境でモデルの作成を行っています。

ソフト、アドオン
Blnender2.83LTS
MMD Tools2.4.0
PmxEditor0.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」に設定

『IK.foot.L』は『左足IK』『leg2.L』は『左ひざ』、『leg1.L』は『左足』
チェーンの長さ

下記「ターゲット」に動かされるボーンの「数」を設定します。

例えば「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」含まれるボーンの「数」で指定します。

BlenderPmxEditor
項目チェーンの長さLink
具体例(『左足IK』)2左ひざ、左足
ボーンコンストレイント「IK」

簡単にまとめると、以下のようになります。

ソフトウェアIKの設定先IKの対象IKの目標
Blender左ひざチェーンの長さ:2ターゲット:左足IK
PmxEditor左足IKLink:左ひざ,左足設定先
『左足IK』の設定例

繰り返しになりますが、BlenderとPmxEditorでは「IK」を設定するボーンが異なります。ここは大きな違いだと思います。
「IK」だけに限れば、Blenderでは目標である「IKボーン」自体には何か設定をすることはありません。

Blenderでは「IK」の目標を指定しますが、PmxEditorでは「IK」を設定するボーンそのものが目標になります。

Pmxeditorのtarget

PmxEditorの「IK」設定項目「Target」は「IK」の目標ではなく、別の設定項目になります。

同じ「ターゲット」でややこしいのですが、ユーザーが「IK」のコントローラーとして使用するボーンではありません。


Blenderのポールターゲット

設定しなくても問題はないようなので、読み飛ばしていただいて構いません。

機能

Blenderにおいても、「IK」の影響下にあるボーンは、そのボーンを直接操作することはできません。

ポールターゲット」を設定すれば、「IK」の影響を受ける肘や膝等の関節を操作することが可能となります。

簡単な参考動画を作ってみました。

足の操作に使用している『PIVOT』は『左足IK』の親です。

「IK」で操作した状態でも、「ポールターゲット」に指定したボーンを操作して関節の位置を変更しています。

ポールターゲットを再現してみる

PmxEditor上で似たような機構を作れないか試してみました。

移動付与がヒント?

ポールターゲット」の設定を行い、かつMMD向けに調整していないモデルがあります。
以下のような設定になっています。

『左腕IK』が『左ひじ捩・左ひじ・左腕』を操作し、ポールターゲット設定有り
設定先ターゲットチェーンの長さポールターゲット
左ひじ捩左腕IK4
左ひじ捩 左ひじ 左腕捩 左腕
左ひじPOLE
BlenderでのIK設定

このモデルをエクスポートしてみました。

結果、PmxEditor上では『左ひじ』に対して『左ひじPOLE』を付与親とした「移動付与」が設定されました。

設定先付与親付与率
左ひじ左ひじPOLE1.00
PmxEditor上の移動付与設定

このモデルはMMD向けの調整をしていないので、『左ひじPOLE』に関わらず、このままではまともに操作することはできません。

複雑骨折…。

しかし、「ポールターゲット」をPmxEditor上で再現するには「移動付与」を活かせば良さそう、というヒントを得られました。

MMD版ポールターゲット(みたいなもの)作成

今回のモデルで試してみました。

新たに腕と足に「POLEボーン」を作成し、それぞれ「IK」の「ポールターゲット」に設定しました。
変形のチェックは外し、親は『全ての親』に設定しました。「ポールの角度」も変形の様子を見て調整してあります。

ひとまずエクスポートしてみます。
今度は「移動付与」の設定はされませんでした。

どうやら「ポールターゲット」が移動付与」に変換される、という仕様ではないようです。

先程の失敗例を参考に「移動付与」を設定してみます。

『arm2.L』は『左ひじ』、『POLE.elbow.L』は『左ひじPOLE』

左右の肘・膝に設定を済ませ、MMDで動かしてみました。

『Ik.foot.L』が『左足IK』、『POLE.knee.L』が『左ひざPOLE』

『左足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ボーン変形階層
左足IK1左足、左ひざ0左足D、左ひざD1

変形階層で実験

「IK」と「変形階層」について細かく見ていきます。

実験Ⅰ

「IKボーン」と、その「Link」から複製し作成した「Dボーン」との関係が、変形階層の値でどう変化するのか調べてみました。

左足部分の「IK」と「変形階層」を例に挙げ、「変形階層」の値を変化させて実験してみました。

実験Aです。

IKボーン変形階層Link変形階層Dボーン変形階層
左足IK0左足、左ひざ0左足D、左ひざD0 or 1
実験A
実験A

ボーンを動かす前から滅茶苦茶な状態です。

実験Bです。

IKボーン変形階層Link変形階層Dボーン変形階層
左足IK1左足、左ひざ0左足D、左ひざD0
実験B
実験B

オレンジ色の『左足・左ひざ』は「IK」の影響を受け移動していますが、『左足D・左ひざD』は移動していません。

実験Cです。

IKボーン変形階層Link変形階層Dボーン変形階層
左足IK1左足、左ひざ0左足D、左ひざD1
実験C
実験C

『左足D・左ひざD』が「回転付与」で移動し、メッシュが変形しています。

実験Ⅱ

調べる範囲を広げてみます。
「IKボーン」の親子関係、「Dボーン」の親子関係、それと「変形階層」の値の変化がどう影響するか調べてみました。

実験Dです。下の条件で試してみました。

ボーン種変形階層変形階層
IK左足IK1左つま先IK1
D左足D → 左ひざD1左足首D 1
実験D:「変形階層」の値は全て「1」

この設定で.pmxを編集し、MMDで動かしてみました。

実験D

問題なく動作をしているように思うのですが、どうでしょうか?

次に、実験Eです。
親子関係で「変形階層」の値を変化させた場合も試してみました。

ボーン種変形階層変形階層
IK左足IK1左つま先IK2
D左足D → 左ひざD1左足首D 2
実験E:親子関係で「変形階層」を分ける

この設定でMMDで動かしてみましたが、同じように問題なく動作しました。

さらに、実験Fです。
「Dボーン」のみ親子関係で「変形階層」の値を変化させた場合です。

ボーン種変形階層変形階層
IK左足IK1左つま先IK1
D左足D → 左ひざD1左足首D 2
実験F:「Dボーン」のみ親子関係で「変形階層」を分ける

こちらの設定でも、問題なく動きました。

最後に、実験Gです。
「Dボーン」は「変形階層」値「1」で統一、「IKボーン」のみ親子関係で「変形階層」の値を調整した場合も試してみました。

ボーン種変形階層変形階層
IK左足IK1左つま先IK2
D左足D → 左ひざD1左足首D 1
実験G:「IKボーン」のみ親子関係で「変形階層」を分ける

これはダメでした。

実験G

『左足IK』は問題なさそうですが、『左つま先IK』は動作していませんね。
「Dボーン」の複製元のボーンのみ動いています。

『左つま先IK』が移動する時には、もう『左足首D 』の変形は済んでいる、という判断がされているのでしょうか。

結論

「IKボーン」の「変形階層」の値は「Dボーン」の「変形階層」の値より大きくてはならない、ようです。

余談

単純な親子関係で「子」の「変形階層」の値が「親」のそれより小さいとエラーが出ます。
下図のような場合です。

ボーン名左ひざD左足首D左つま先D
変形階層121

こういった場合、「Pmxデータの状態確認」で以下の警告が出ます。

親の変形順序が子より後になります(ボーン順と変形順序を確認してください)

PMXデータの状態検証

この例では『左つま先D』の「変形階層」の値を「2」又は「3」に変更すれば問題はなくなります。


IKの動作を確認

Blenderで確認

次に、手首と指の「IK」をOFFにした状態です。

手首と指の「IK」をOFFで『左手IK』を操作

そして、手首と指の「IK」をONにした状態です。

手首と指の「IK」をONで『左手IK』を操作

指が捩れてしまっています。これは、Blender上であれば、手首と指の「IKボーン」の親をそれぞれ「標準ボーン」に変更すれば解決できます。

手首と指の「IKボーン」の親をそれぞれ『左手捩』『左手首』に変更

ただ、今回の目的は「Blenderで作成したモデルをMMDで動かす」ことですから、これで解決とは言えないですね。

PmxEditorで確認

親子関係は『左手IK』 – 『左手首IK』 – 『各指IK』

以下の問題があります。

  1. 指の「IK」が機能していない
  2. 「捩ボーン」が回って欲しくない方向に回る

問題の修正

PmxEditroでエクスポートしたファイルを開き、問題点を探し、修正を試みます。

指の「IK」を機能させる

指の「IK」が機能していない問題の解決を試みます。

原因

結論を言ってしまえば、「Loop」の設定が「0」であったのが原因でした。

問題の確認

各指の「IKボーン」は、エクスポートしてみると「IK」として設定されていませんでした。

ここでは『左親指IK』を例に挙げます。

『IK.a.L』は『左親指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をロック」が点灯しています。

『arm2.twist.L』は『左手捩』

X軸及びZ軸はロックされているようです。
「IK」の影響下にあり「軸制限」を設定していない他のボーンを見てみます。

「軸制限」を未設定の『左ひざ』は「IK」の影響を受けますが、「IKをロック」は設定されていません。
「軸制限」と「IKをロック」の設定には関連があるようです。

「軸制限」をした結果、「IK」の影響を受ける際にもX・Z軸はロックされ、Y軸のみ回転を行う、つまり腕が捩れる回転だけを行う、ということではないか、と思います。

エクスポートしたモデルの『左手捩』『左手IK』をPmxEditorで見てみます。

『左手捩』の「軸制限」は継承されているようです。「>」ボタンを押すと値が更新されました。

「>」クリック前

「>」クリック後

次に『左手IK』の「角度制限」を確認します。
「軸制限」が設定されている『左腕捩』『左手捩』を見てみます。

「>」クリック後『左腕捩』
「>」クリック後『左手捩』

「軸制限」の「>」クリック前後で「角度制限」の値が変化しました。画像はクリック後です。

ボーン名「>」クリック前「>」クリック前
左腕捩X:-180:180X:-180:180
左手捩X:-180:180Y:-180:180

エクスポートしたままの状態では『左手捩』があらぬ方向に回転してしまうので、何かが間違っているのだと思います。
しかし、「>」クリック後、『左腕捩』『左手捩』で制限される軸が異なるというのものおかしい気がします。

問題の修正

『左腕捩』『左手捩』に「ローカル軸」を採用しTransformViewを確認します。

これを見る限りでは、回転して欲しいのは赤のX軸だと思います。
ですので、『左手捩』の「角度制限」を「X軸:-180:180」に変更します。

結果、特に変化は見られませんでした。やはり『左手捩』があらぬ方向に動いてしまっています。


結果としては、どこかひとつでも回転できる軸があると『左腕捩』『左手捩』があらぬ方向に動いてしまいました。
「角度制限」の値を全ての軸で最小最大共に「0」に設定すると、メッシュの崩れがなく、肘の関節が大きめに動いてくれるという点では、期待した動作になりました。

ただ、これでは「IK」で操作する時に、自然な腕の捩れを表現できなくなってしまうと思います。
現時点では解決方法がわからないので、今後の課題です。要勉強です。

実験してみた

各「IKボーン」の親を変更してみました。

ボーン名LinkTarget
左手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/241~360p
参考文献
サイト名URL参考にした日付
Blenderhttps://www.blender.org/2022/12/11
UuuNyaa/blender_mmd_toolshttps://github.com/UuuNyaa/blender_mmd_tools2022/12/11
とある工房https://kkhk22.seesaa.net/2022/12/11
Vocaloid Promotion Video Projecthttps://sites.google.com/view/vpvp/%E3%83%9B%E3%83%BC%E3%83%A02022/12/11
MMD用ボーンの作り方【技術書】https://booth.pm/ja/items/34225582022/12/11
参考URL

参考にさせていただいたモデルについて

readme等を読み、禁止事項に当たらないよう注意し、今回の投稿をしております。

モデル制作者の皆様には、この場を借りてお礼を申し上げます。
制作者の皆様、素晴らしいモデルを使用させていただき、ありがとうございます。

モデル名製作者様URL
Tda式初音ミク・アペンド_ver1.10Tdahttps://bowlroll.net/file/4576
YYB Hatsune Miku_10th_v1.02YYBhttps://bowlroll.net/file/146083
つみ式ミクさんv4つみだんごhttps://3d.nicovideo.jp/works/td56081
参考MMDモデル

comment