アニメ調のキャラでは眼が大きい場合が多々あります。
あまりに眼が大きいためそれにあわせて眼球を作ると頭から飛び出すほどの大きさになっちゃうこともよくあります。
頭から飛び出すわけにはいかないので、球はあきらめて平面で作るとか、以前 「[Blender] 平面に近い眼球を作る方法」 で紹介したような球を empty でスケール変換して見かけ上ひらべったくするとか、そういった方法で何とかするわけです。
で、あるとき、ふと 「平面を曲げて眼を作ってやればいいんじゃね?」 と思い立ちました。
以下、長々と解説を書いてますが、blend ファイルを見りゃわかるって方は下のほうにサンプル blend ファイルへのリンクを貼りつけてありますのでそいつをどうぞ。
■ 平面とカーブで眼を作る
- Curve ? Bezier Curve でカーブを追加します。横方向用と縦方向用の 2つのカーブを追加してそれぞれ好みの形にします。(下図の (1) ) ここでは、角を丸めたホッチキスの針みたいな形にしました。また、横方向用と縦方向用を同じ形にしていますが、もちろん違う形で問題ありません。
- カーブの前に平面 (Plane) を置きます。動かさないのであれば平面の位置はどこでも構わないと思いますが、ボーンを入れて動かす場合は平面とカーブとの位置関係が Curve Modifier の結果に影響するのでオブジェクトの原点をあわせておいた方が良さそうです。
で、この平面を適当に分割しておきます。(下図の (2) ) - 平面に Curve Modifier を 2つ追加します。それぞれの Modifier の Ob: に横方向用と縦方向用のカーブのオブジェクトを指定します。(下図の (3) ) カーブを追加した時の向きによっては X, Y, Z, ?X, ?Y, ?Z のボタンを調整する必要があるかもしれません。
- これで下図の (4) のように平面がカーブに沿うようにグニャッと曲がるはず。
基本はこれだけです。
Curve Modifier を知っていれば何も特別なことはやってないんですけどね。
アニメ調の眼にする場合は、この平面を UV 展開してテクスチャを貼ることになると思います。その辺は書きませんが、単なる平面なので UV 展開も簡単です。
■ ボーンを組み込む
眼を動かせるようにボーンを組み込みます。ここでいくつか注意点があります。
以下、ごちゃごちゃと書いてますが 「理屈はいいから方法だけ教えれ」 という方は適当に読み飛ばしてくださいw
まず、眼をキョロキョロさせる前に、そもそも頭が動いたときにそれにあわせて眼も動いてくれないと困ります。
すなわち、上で作った平面とカーブを頭にあわせて動くようにする必要があるということです。
普通に、Armature Modifier を追加して、Weight Paint で頂点にウエイトを設定して、、、もちろん平面はこれで問題ありません。ところがカーブでこれをやろうとすると困ったことになります。
Curve には Armature Modifier はあるのですが、Weight Paint がありません。というか、Vertex Group がありません。なので Armature Modifier を追加してもアーマチュアにあわせて頂点を動かすことができません。なにか方法があるのかもしれませんが私にはわかりませんでした。
そこで別の方法で眼を頭にあわせて動かす必要があります。以下、その方法です。
ここでは、下図 (1) のように Neck ボーン(首)→Head ボーン(頭)と繋がっていて、この Head ボーンに追随するように眼を動かしたいとします。そして、これらのボーンは BodyArmature というオブジェクト名のアーマチュアになってるとします。
- Object Mode で右クリックで横方向用カーブを選択。
- Shift キーを押しながらボーンを右クリック。(これで横方向用カーブと BodyArmature 全体とが選択された状態になるはず)
- 2つが選択された状態のまま Pose Mode に切り替える。
- Head ボーンを右クリックで選択。(Shift キーは押す必要がないので注意)
- Ctrl + P で 「Make Parent To」 を出し、「Bone」 を選択。
これで横方向用カーブが Head ボーンの子になりました。
試しに Pose Mode で Head ボーンを動かしてみれば、それにあわせて横方向用カーブが動くはずです。
あとは同じ手順で縦方向用カーブ、平面を Head ボーンの子にします。
これで Head ボーンにあわせて眼が動くようになったはずです。
続いて、眼をキョロキョロさせられるようにします。
普通なら Head ボーンの子ボーンとして Eye ボーンを追加して、眼の平面に Armature Modifier を追加して Weight Paint で頂点ウエイトを設定して、、、とするところです。
ところがこの方法ではうまくいきません。
眼の平面は Head ボーンの子オブジェクトです。Head ボーンが動けばそれにあわせてオブジェクトが動きますが、これはオブジェクト自体がグローバル座標系で動いているだけです。当然、オブジェクト内のローカル座標系は動いていません。それに対して、Eye ボーンは BodyArmature オブジェクトの座標系の中にあり、その位置はEye→Head→Neck→...というように根っこのボーンからの動きがすべて累積された状態にあります。そのため、Eye ボーンの変位量を眼の平面に適用しても期待した結果になりません。
ではどうするか?以下、その方法です。
- Object Mode で新たに Armature を追加。この Armature を EyeArmature と名付けます。この EyeArmature は眼の平面のオブジェクト原点とあわせておいた方がいいんじゃないかと思います。
また、この EyeArmature の中のボーンを Eye という名前にしておきます。 - Object Mode で右クリックで EyeArmature を選択。
- Shift キーを押しながら BodyArmature を右クリック。
- 2つが選択された状態のまま Pose Mode に切り替える。
- Head ボーンを右クリックで選択。(Shift キーは押す必要がないので注意)
- Ctrl + P で 「Make Parent To」 を出し、「Bone」 を選択。
ここまでやったのが下図 (2) です。
パッと見では Eye ボーンが Head ボーンの子ボーンのように見えますが、上記の手順のようにやれば 「Head ボーンの子オブジェクトとして EyeArmature があり、その中に Eye ボーンがひとつだけある」 という状態になっています。
上で座標系がどうのと書きましたが、要するに 「眼のオブジェクトが Head ボーンの子オブジェクトになってるんだから、それを動かすボーンも Head ボーンの子オブジェクトにする必要がある」 ってことなわけです。(余計わかりにくいか?w)
あとは眼の平面に Eye ボーンのウエイトを設定してやれば OK です。
- 眼の平面に Armature Modifier を追加。このとき Modifiers パネルで Curve Modifier より Armature Modifier が上になるように移動する。(下図 (3) )
- 平面の頂点にウエイト付けする。このとき、周囲一周は Eye の Weight: 0.0、それ以外は Weight: 1.0 にする。(下図 (3) )
ここでも注意があります。
まず、Modifier の順番。これは上記の通り Armature Modifier が上になるようにする必要があります。(スキニングしてからカーブで曲げるか、カーブで曲げてからスキニングするか、の違い)
次に頂点のウエイトですが、周囲一周を Weight: 0.0 のまま残しているのはわけがあります。
Curve Modifier はオブジェクトの原点を見ているのではなく、メッシュの一番左側 (もしくは右側) を調べてそこを原点に処理しているようです。メッシュすべてを Weight: 1.0 とすると Eye ボーンを動かすとメッシュ全体が動くわけですが、そうするとメッシュの一番左側もいっしょに動き、その動いた結果を原点として Curve に貼りつけるので結果として何も動かないことになります。(こんな書き方でわかるかな?w)
そのため周囲は動かないように Weight: 0.0 のままにしているわけです。
また、もともと一番左にある頂点ではなく、スキニング後にもっとも左になった頂点が原点とみなされるようです。そのため Curve Modifier を使っているメッシュをスキニングで変形させると予想と違う位置になってしまう場合があります。これはどこが原点になっているかを考えながらうまいこと調整するしかないと思います。(うーん、文章で説明するのは難しい)
基本的な構造は以上です。
上記は片目分ですが、両目必要な場合は同じものをもう 1セット作ることになります。
■ サンプル blend ファイル
blend ファイルをあげておきます。
http://cid-ca42d76a68f54d16.skydrive.live.com/self.aspx/Public/Blender/CurveEye.blend
(Blender 2.49b で作った blend ファイルです)
このサンプルには両目分入っています。
また、左右の目をまとめて操作できるコントローラのボーンも入れてあります。
- CtrlEyeMove ボーン … 両目をキョロキョロ。あまり大きく動かすと眼のメッシュが壊れる。
- CtrlEyeCross ボーン … 両目のヨリ目具合を調整。あまり大きく動かすと眼のメッシュが壊れる。
- CtrlEyeSize ボーン … 両目のメッシュのサイズを調整。テクスチャが貼ってあれば瞳の大きさを変えたりできます。あまり大きく動かすと眼のメッシュが壊れる。
とりあえず、横着して Grease Pencil ですがコメント書いといたので見ればわかるんじゃないかと思います。
ちなみに Move と Cross は EyeArmature.L/R の Eye ボーンにしこんだ Copy Location で連動させてます。(Local 座標系の Offset で)
Size は同じくしこんだ Transform で X 方向、Z 方向への移動をサイズに変換してます。
また、「あまり大きく動かすと眼のメッシュが壊れる」 の理由はカーブの長さが足りなくなったり、メッシュのサイズがカーブからはみ出したりするからです。このあたりは必要十分になるように適当に調整すれば OK です。
以上、長々と書きましたが、自分ではかなりいい方法だと思っています。
カーブなのでかなり柔軟に形状を調整できますし、肝心なところは単なる平面なのでテクスチャの調整も楽です。
アニメ調のキャラの眼だけでなく、ザクやドムのモノアイみたいなやつとかにも使えそうです。