妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

Blender修行(19) ウェイトペイントと頂点グループ

「アーマチュア(スケルトン)とボーンの仕組みで避けて通れないのがウェイトマッピングの考え方。結局骨を動かしたいわけじゃなくて、肉を動かすための道具として骨を使ってるんで、どの骨にどの肉がくっついてるのか? というのが重要になってくる」

妹「うーん、でもSpriteStudioの時は別にそんなにやらなかった気がするんだけど。あれは2Dだったから?」

「あれはパーツアニメーションだけだったから、1つのパーツ画像が1つの骨に全部くっついてる仕組みだった。これは3Dでも出来る。プレイステーションの初期、例えばファイナルファンタジー7あたりのゲームではこの方式が多かった。今でもスマホゲームではこの方式じゃないかと思うのがある。欠点はパーツとパーツの継ぎ目が分離してしまうこと。FF7のキャラは、腕や脚がバラバラのパーツで、人形劇みたいになる」

妹「ロボっぽくなるのかな」

「関節部分を上手く隠したりすれば、人間系でもそれなりの見栄えに出来るんだけどね。今は人間の肌みたいに動かす、スキニングと言われる方式が主流。UE4のスケルタルメッシュもこれ。頂点ごとに骨の影響度を設定して、骨に完全についていく部分と、ちょっとだけ曲がる関節部分を設定できる」

f:id:una_unagi:20160705231021p:plain
f:id:una_unagi:20160705224213p:plain

「ボーンごとの影響度、ウェイトっていうけど、これはBlender語じゃなく共通語。ウェイトペイントモードでは、ウェイトが色で表示される。骨に完全に連動する1.0が赤、ない部分は0.0で青、中間が黄色とか緑に表示される。これを3Dペイントと同じ感じで塗っていく。昨日手を動かした時に髪が動いてきた理由は、自動設定したウェイトが髪に少しついてるから。青じゃなく水色の部分がある」

妹「ボーンごとっていうことは、これ骨の数だけやるの? めんどくさそう……」

「ほとんどの箇所は自動のままでいいし、今回みたいに反応しなくて骨に反応してるケースは、いちいち青く塗らなくても、その骨と同じ名前の頂点グループを削除すればいい」

妹「頂点グループ?」

「これは多分Blender用語だけど、各頂点のウェイト設定を頂点グループという。他のソフトだとウェイトマップとかいうと思う。各オブジェクトが複数の頂点グループというのを持っている。これがそれぞれのボーンに対応させることが出来る。頂点グループは他にモディファイアへの反応度合いを設定する時にも使う」

  1. オブジェクトとアーマチュアを関連付ける(昨日までの部分)
  2. アーマチュアをポーズモードにする
  3. 対象のオブジェクトを右クリックで選択し、ウェイトペイントモードに変える
  4. ボーンを右クリックすると、色が塗れる状態になる。
  5. ミラーリングのモディファイアを使用中の場合でも、_Lと_Rのボーンが両方あれば、左右で同じように動かすことが出来る

「先に2をやっておかないと、4でボーンを右クリックした時に、アーマチュア全体を選択してしまう。ボーンをクリックしにくい場合は、プロパティから頂点グループを直接選んでも同じ。対応する頂点グループがないボーンを選択すると、全体が紫色になる。ペイントすると新しい頂点グループが作られる」

妹「さっきのお腹のへんのボーンの写真、お腹のへんだけが赤くなってたけど、あれは腹筋をピクピク動かすの?」

「いや上半身全体を動かすやつだけど」

妹「だったら上の方も赤くないと変なのでは?」

「そこがむずかしいとこなんだけど、骨を動かすと、他の骨も連動して動くんだよ。だから他の骨で動く分は塗らない」

妹「うわーん、ややこしい。そんなの絶対わからない自信がある」

「だから自動のまま、あまりいじらない方がいい。調整としては硬い部分は青か赤かにする。中間で塗るってことはそこ曲がるってことだから。それで最後に正規化する」

妹「正規化ってどっかで聞いたことあるような」

「場面ごとに違うんだけど、ウェイトの場合、各ボーンのごとのウェイトが、合計で1.0になるようにすること。これをしないと、骨をどう動かしても微妙に肉が動かなかったり、肉が骨より大きく動いたりする。逆に言うと正規化さえしていれば、そうそうおかしな変形はしなくなる」