【Blender】口の形状「あいうえお」をボーン1本で操作【キャラクターモデリング】
2023-07-06
azblob://2023/06/29/eyecatch/2023-06-30-blender-control-mouth-shape-with-single-bone-000_0.png

 こんにちは!

本記事では、キャラクターモデリングでの口の形状をボーン1本で簡単に操作する方法について書いていこうと思います。

前提として、すでに口にボーンが通っているものを想定して話を進めていこうと思います。

口周りや顎のボーンの作り方は、mmCGさんのこちらの動画を参考に作っています。

https://youtu.be/wV1KRifHvUg

それでは解説を始めていきます。

やりたいこと

まずはやりたいことを整理していこうと思います。

やりたいことは、1本のボーンを動かすだけで「あいうえお」を表現することです。これを実現するためにLive2Dのパラメータの概念を取り入れます。

「あいうえお」表現方法はこちらのサイトを参考にしました。

https://forum.live2d.com/discussion/381/facerig%E3%81%A7%E3%81%AE%E5%8F%A3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9%E3%82%84%E6%96%B9%E5%BC%8F%E3%81%AE%E6%A4%9C%E8%A8%8E

「あいうえお」表現

Live2Dでは「閉じた口」を0.0、「開いた口」を1.0と数値を設定し、その間を行き来することで口をパクパクさせます。

Live2Dパラメータ1

ここに、「口の横幅」のパラメータを足すと、「あいうえお」を表現することができます。

Live2Dパラメータ2

今回はこれをBlenderで再現していこうと思います。

作るものとしては、マウスコントロールボーンを左右に動かすと口の横幅が変化し、上下に動かすと口の開閉が変化する、というものです。

主に必要になってくるボーンコンストレイントは「トランスフォーム変換」というものです。

トランスフォーム変換の使い方

トランスフォーム変換とは

ボーンコンストレイントの種類の1つである「トランスフォーム変換」とは、ターゲットボーンの位置・回転・拡縮の数値を任意のボーンの位置・回転・拡縮の数値に変換することができる機能です。

難しいので簡単に例を挙げて説明します。

トランスフォーム変換の例

例えば、ボーン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の正方形としました。

コントロール用グラフ

このグラフの中でCON.mouthを動かして口の形を決められる、という想定です。

縦軸は、一番下を0、一番上を1.0としました。

横軸は、一番左を-1.0、一番右を1.0としました。

つづいてCON.mouthとなる新しいボーンをグラフの左角(x=0, y=0)の場所に追加します。

CON.mouthの追加

親子関係は解除するのでどこから生やしてもらっても大丈夫です。CON.mouthのローカル軸はワールド軸と同じ方向に設定します。

また、コントロールボーンですので変形のチェックを外しておきます。CON.mouthには適当な円形のカスタムシェイプを設定しています。

カスタムシェイプの設定

これでパラメータグラフは完成です。

パラメータグラフ完成

編集モードでの作業はここまでとなりますので、armatureを選択しポーズモードに切り替えましょう。

2.位置制限

CON.mouthはグラフの範囲以上に動いてほしくないのでの位置制限をします。

ボーンコンストレイントの中の「位置制限」を追加します。

位置制限の設定

X最小は-0.05m、Yは0m、Zは0m

X最大は0.05m、Yは0m、Zは0.1m

オーナーを「ローカル空間

とします。

これでボーンがグラフの範囲外に動かなくなったと思います。

3.CON.mouthの上下移動で口を開閉させる

ここで編集するのは、CON.lip.upper.000CON.lip.lower.000の2つです。

まずはCON.lip.upper.000に「トランスフォーム変換」を追加します。

トランスフォーム変換の設定

ターゲットを「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.LCON.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.LCON.lip.corner.Rの変換先の設定に、

Zの変換元を「X

最小「-0.005m

最大「0.003m

を追加しました。

完成品

完成品

まとめ

これでボーン1本で口を操作することができました。応用すれば、目や他の部位にも使えそうな気がします。

ぜひ皆さんも使ってみてください!

それでは、また。