フェイシャルのボーン制御について
目次
概要
モデルの表情の作成方法として一般的なのはブレンドシェイプです。
ジョイントでフェイシャルを行うこと自体はそれほど難しくはないのですが、一見「これ」というセオリーが無く、梨璃から数えて2年ほど試行錯誤を要したので、誰でも表情をボーン制御できるようにノウハウを書いていきたいと思います。
※正直3年間で関わった案件ベースなのでオリジナリティはあまりないです。
フェイシャルボーンの利点
・データ容量の削減
ブレンドシェイプは動かしたポリゴン数×モーフ数の容量が必要(たぶん)になるのでフェイシャルボーンの方がデータとしては軽くなります。
※フェイシャルボーンは代わりにjoint数が増えるため処理負荷が重くなる可能性はあります。
・仕様変更の柔軟性
ブレンドシェイプでは大きな修正が難しいですが、ジョイントモーフだとトポロジーが変わろうがオブジェクトの数が変わろうがウェイトの転写を行えばアニメーションはそのまま使えます。
骨を追加してウェイトを入れるだけなので><などのオプションパーツが追加しやすいです。
眉間のシワ用にケシカスを仕込んだりアニメっぽい表現に向きます。
・アニメーションの自由度増加
ブレンドシェイプの実装は意外と面倒で、アニメーションと同じタイミングでシェイプキーを再生する仕組みが必要です。
ボーンモーフはアニメーションとして扱えるので、デモシーンなどでアニメーターの表現の幅が広がります。
よくあるこういった大口を開けるカットもボーンモーフで作られることが多いかと思います。(この画角だけ成り立つように大げさに動かしています。)
割の入れ方(トポロジー)
・オススメはギルティ割り
ボーンモーフ制御しやすいのは所謂ギルティ割りです。
・動かす方向に頂点が整列していること
・アウトラインにならない部分は極力割らない
・特に目の縦方向の割は少ないほうが制御しやすいです。
逆に目や口を同心円状に割られているモデルだとウェイトが面倒になります。(できなくはないと思いますが…)
あとメッシュはつなげておいたほうがかなり楽です。
骨の入れ方
・目の骨
基本は上段と下段3本づつ
目や口はUの字、逆Uの字になるので両端と真ん中という風に入れます。
目の場合縦方向にも入れたくなりますがダメです。(2年間無駄にします。)
縦方向に閉じるのに間にボーンがあると邪魔な上にあまり使わないので無いほうがいいです。
まつげは先端にひとつづつ
目を閉じたときなどに流れを合わせるために飛び出た部分に骨を入れます。
中間地点にまつ毛がある場合はその先端にも骨を入れると動かしやすいです。
(コハルの頃は骨が多く目じりにも入っていますね…動かしにくかったです。)
・口の骨
口は上下7本あればたいていの表情は可能です。
やりたい表情に合わせて骨数を決め、割りと合わせて作成する必要があります。
・歯の骨
アニメ的な表現として前歯だけが見えている表情があります。
歯も上下3本づつ入れてUの字に曲げることでこの表情が作れます。
・眉の骨
眉は意外と難しく、骨をたくさん入れてみたりしたこともありますが、回転も視野に入れて作れば5本程度で事足ります。
両端はジョイントの間隔を狭くしたほうが困り等も作りやすいです。
・その他の骨
あご、頬は大口を開けたり特定の画角でよく見えるように調整するときに使います。
あごを動かさずに口を大きく開けると幼く見えてしまうこともあるため、印象を合わせるためには重要なjointです。
・なるべくXY移動のみで済む設定
親ボーンでなるべく面に垂直になるように回転値を付けておくと各骨はXY面だけの移動で完結できます。
なるべくZ方向の調整を減らせると制御がしやすいです。
※要リガーと相談
ウェイトの入れ方
・ウェイトは真ん中が強め
瞼などはUの字、逆Uの字に変形するので真ん中のウェイトを強めに塗ると表情がつけやすくなります。
口はまず「あ」の形にしてキーフレームを登録しておけば作業しやすいです
まずはボーン周辺を1で塗ってからがたつきを取っていくように調整していくとスムーズに作業出来ます。
mayaであればSIwaiteditorで調整するのがおすすめです。
複数の頂点をスライダーで調整出来るので直観的に作業出来ます。
口の外周の割が多いとウェイトも減衰させていく必要があるのでここが難しくなります。
・タイムラインに表情パターンを登録
各表情パターンをタイムラインに登録しておけば瞬時に切り替えて確認することが可能です。
また、mayaのゲームエクスポータではフレームを指定して書き出しが出来るのでアニメーションを一括で更新することができます。
なぜか1フレーム単位では書き出せないのでフレームを開けて2フレームづつ書き出しをしています。
便利なツールや機能
・ジョイントの値ミラーツール
選択したjoint(複数可)の移動値、回転値を反対のjointにコピーするスクリプトです。(chatGPT製なので中身は改行位置とかぐちゃぐちゃです)
mayaではjointの位置のミラーコピーが無いため、アコまではjointを複製して反転させ、右の骨を左の骨にスナップさせて作業していました・・・(これがまたよくクラッシュする)そのため表情作成が非常に非常に非常におっくうでした。
このスクリプトは2022~2024では動作確認できています。
※2018~2020ではPythonのバージョンが違い動きませんでした。
chatGPTに「このスクリプトをPython○○で動くようにして」という風にすると対応してくれると思います
あと_R_Lにしか対応していないため、他のプリフィックスを使っている場合改良する必要があります。(TAじゃないのでよくわからない)
案件では上司にキレイに清書してもらって使ってます。
※ほぼ必須です。
・アニメーションレイヤでの表情流用
mayaで作業する場合、流用で骨を動かした差分はアニメーションレイヤを使って調整することで一括でオフセットをかけることができます。
例えば、Aのモデルから目の位置を下げてBのモデルを作ったとして、通常はアニメーションを一つづつ目の位置を下げていく必要がありますが、アニメーションレイヤーで最初のフレームの目の位置を下げることですべてのアニメーションに乗算されます。
余談・・・
アコの顔ですが、骨はコハルから流用してアニメーションレイヤで調整しているため、アニメーションレイヤを非表示にするとコハルっぽくなります。
流石に別キャラは流用の方がめんどくさすぎたので一から作ったほうが楽かもです。
ホシノ→ホシノ1年みたいなのはかなり便利でした。
※アニメーションレイヤーは後でマージすることも出来ます。
まとめ
簡単とは言いつつ割りから整える必要があるのですぐ取り入れるのは難しい部分があるかと思います。
VRchatでもフェイシャルをボーンで置き換えることができ、うまく設定できれば表情の微調整がアニメーション書き出しだけで行えたりします。
準備が大変な割に利点が実践的すぎて個人製作で行うメリットはあまり無いかもしれません…何かの役に立てば幸いです。
この記事が気に入ったらサポートをしてみませんか?