![azblob://2023/06/29/eyecatch/2023-06-30-blender-control-mouth-shape-with-single-bone-000_0.png](https://prtechblogfd-crhzb5g6hkhqafdm.z01.azurefd.net/drupalimages/2023/06/29/eyecatch/2023-06-30-blender-control-mouth-shape-with-single-bone-000_0.png)
こんにちは!
本記事では、キャラクターモデリングでの口の形状をボーン1本で簡単に操作する方法について書いていこうと思います。
前提として、すでに口にボーンが通っているものを想定して話を進めていこうと思います。
口周りや顎のボーンの作り方は、mmCGさんのこちらの動画を参考に作っています。
それでは解説を始めていきます。
やりたいこと
まずはやりたいことを整理していこうと思います。
やりたいことは、1本のボーンを動かすだけで「あいうえお」を表現することです。これを実現するためにLive2Dのパラメータの概念を取り入れます。
「あいうえお」表現方法はこちらのサイトを参考にしました。
「あいうえお」表現
Live2Dでは「閉じた口」を0.0、「開いた口」を1.0と数値を設定し、その間を行き来することで口をパクパクさせます。
ここに、「口の横幅」のパラメータを足すと、「あいうえお」を表現することができます。
![Live2Dパラメータ2](https://prtechblogfd-crhzb5g6hkhqafdm.z01.azurefd.net/drupalimages/%5Bdate%3Acustom%3AY%5D/%5Bdate%3Acustom%3Am%5D/%5Bdate%3Acustom%3Ad%5D/articleimages/2023-06-30-blender-control-mouth-shape-with-single-bone-002_0.png)
今回はこれをBlenderで再現していこうと思います。
作るものとしては、マウスコントロールボーンを左右に動かすと口の横幅が変化し、上下に動かすと口の開閉が変化する、というものです。
主に必要になってくるボーンコンストレイントは「トランスフォーム変換」というものです。
トランスフォーム変換の使い方
ボーンコンストレイントの種類の1つである「トランスフォーム変換」とは、ターゲットボーンの位置・回転・拡縮の数値を任意のボーンの位置・回転・拡縮の数値に変換することができる機能です。
難しいので簡単に例を挙げて説明します。
![トランスフォーム変換の例](https://prtechblogfd-crhzb5g6hkhqafdm.z01.azurefd.net/drupalimages/%5Bdate%3Acustom%3AY%5D/%5Bdate%3Acustom%3Am%5D/%5Bdate%3Acustom%3Ad%5D/articleimages/2023-06-30-blender-control-mouth-shape-with-single-bone-004.gif)
例えば、ボーン1を右に動かしたとします。するとボーン1のX軸位置の数値は大きくなっていきます。このボーン1のX軸位置の数値をボーン2の拡縮の数値に変換すると、ボーン1が右に行くほどボーン2が大きくなっていきます。
今回はこの機能を応用していきます。
チュートリアル
それでは実際に作っていきます。
ボーンの配置はこのようにしました。
コントロールボーンの名称はこのように設定しました。
工程の手順は次のものになります。
- CON.mouthの位置制限をする
- CON.mouthのローカルZ軸の位置の数値をCON.lip.upper.000のローカルZ軸の位置の数値に変換する
- CON.mouthのローカルZ軸の位置の数値をCON.lip.lower.000のローカルZ軸の位置の数値に
(上下逆に)変換する - CON.mouthのローカルX軸の位置の数値をCON.lip.corner.RのローカルX軸の位置の数値に変換する
- CON.mouthのローカルX軸の位置の数値をCON.lip.corner.LのローカルX軸の位置の数値(左右逆に)に変換する
1.グラフの作成
まずは分かりやすいように、Live2Dのパラメータグラフグラフのようなものを作っておきます。グラフの大きさは0.1mの正方形としました。
![コントロール用グラフ](https://prtechblogfd-crhzb5g6hkhqafdm.z01.azurefd.net/drupalimages/%5Bdate%3Acustom%3AY%5D/%5Bdate%3Acustom%3Am%5D/%5Bdate%3Acustom%3Ad%5D/articleimages/2023-06-30-blender-control-mouth-shape-with-single-bone-007.png)
このグラフの中でCON.mouthを動かして口の形を決められる、という想定です。
縦軸は、一番下を0、一番上を1.0としました。
横軸は、一番左を-1.0、一番右を1.0としました。
つづいてCON.mouthとなる新しいボーンをグラフの左角(x=0, y=0)の場所に追加します。
親子関係は解除するのでどこから生やしてもらっても大丈夫です。CON.mouthのローカル軸はワールド軸と同じ方向に設定します。
また、コントロールボーンですので変形のチェックを外しておきます。CON.mouthには適当な円形のカスタムシェイプを設定しています。
![カスタムシェイプの設定](https://prtechblogfd-crhzb5g6hkhqafdm.z01.azurefd.net/drupalimages/%5Bdate%3Acustom%3AY%5D/%5Bdate%3Acustom%3Am%5D/%5Bdate%3Acustom%3Ad%5D/articleimages/2023-06-30-blender-control-mouth-shape-with-single-bone-009_1.png)
これでパラメータグラフは完成です。
![パラメータグラフ完成](https://prtechblogfd-crhzb5g6hkhqafdm.z01.azurefd.net/drupalimages/%5Bdate%3Acustom%3AY%5D/%5Bdate%3Acustom%3Am%5D/%5Bdate%3Acustom%3Ad%5D/articleimages/2023-06-30-blender-control-mouth-shape-with-single-bone-010.png)
編集モードでの作業はここまでとなりますので、armatureを選択しポーズモードに切り替えましょう。
2.位置制限
CON.mouthはグラフの範囲以上に動いてほしくないのでの位置制限をします。
ボーンコンストレイントの中の「位置制限」を追加します。
![位置制限の設定](https://prtechblogfd-crhzb5g6hkhqafdm.z01.azurefd.net/drupalimages/%5Bdate%3Acustom%3AY%5D/%5Bdate%3Acustom%3Am%5D/%5Bdate%3Acustom%3Ad%5D/articleimages/2023-06-30-blender-control-mouth-shape-with-single-bone-011_0.png)
X最小は-0.05m、Yは0m、Zは0m。
X最大は0.05m、Yは0m、Zは0.1m。
オーナーを「ローカル空間」
とします。
これでボーンがグラフの範囲外に動かなくなったと思います。
3.CON.mouthの上下移動で口を開閉させる
ここで編集するのは、CON.lip.upper.000、CON.lip.lower.000の2つです。
まずはCON.lip.upper.000に「トランスフォーム変換」を追加します。
![トランスフォーム変換の設定](https://prtechblogfd-crhzb5g6hkhqafdm.z01.azurefd.net/drupalimages/%5Bdate%3Acustom%3AY%5D/%5Bdate%3Acustom%3Am%5D/%5Bdate%3Acustom%3Ad%5D/articleimages/2023-06-30-blender-control-mouth-shape-with-single-bone-012_0.png)
ターゲットを「armature」
ボーンを「CON.mouth」
ターゲット、オーナーをどちらも「ローカル空間」
変換元は、
Zの最小値を「0m」
最大を「0.1m」
変換先は、
Zの変換元を「Z」
最小「-0.001m」
最大「0.005m」
としました。
続いて、CON.lip.lower.000に「トランスフォーム変換」を追加します。
CON.lip.upper.000の時とほぼ同じですが、変換先だけ少し違います。
CON.mouthの上下とは逆に動かなければいけないので、最大の方がマイナスの値となります。
Zの変換元を「Z」
最小「0m」
最大「-0.01m」
としました。
変換先の最小値、最大値は人によって違うと思いますので、適宜ちょうどいい値に設定してください。
4.CON.mouthの左右移動で口の横幅を変える
次は、CON.lip.corner.L、CON.lip.corner.Rに「トランスフォーム変換」を追加していきます。
基本設定はどちらも上と同じです。
口周りのコントロールボーンのローカル座標は、X軸がワールド座標とは逆方向を向いているので注意です。
CON.lip.corner.Rの変換元は、
Xの最小値を「-0.05m」
最大を「0.05m」
変換先は、
Xの変換元を「X」
最小「-0.005m」
最大「0.005m」
としました。
CON.lip.corner.Lの変換先は、
Xの変換元を「X」
最小「0.005m」
最大「-0.005m」
としました。
単純に横幅が変わるだけならこれで完成ですが、今回は「むすっとした口」と「にこやかな口」を行き来できるようにしてみました。
追加した設定は、変換先のZのパラメータです。
CON.lip.corner.L、CON.lip.corner.Rの変換先の設定に、
Zの変換元を「X」
最小「-0.005m」
最大「0.003m」
を追加しました。
完成品
![完成品](https://prtechblogfd-crhzb5g6hkhqafdm.z01.azurefd.net/drupalimages/%5Bdate%3Acustom%3AY%5D/%5Bdate%3Acustom%3Am%5D/%5Bdate%3Acustom%3Ad%5D/articleimages/2023-06-30-blender-control-mouth-shape-with-single-bone-013.gif)
まとめ
これでボーン1本で口を操作することができました。応用すれば、目や他の部位にも使えそうな気がします。
ぜひ皆さんも使ってみてください!
それでは、また。