人型3Dモデル規格のVRMでは、表情をきめ細かく設定することができます。しかしきめ細かいがゆえに、実際に使うときに意図しない表情になることがあります。
この記事では、VRM(特にVRoid Studio)の表情設定について状況確認し、VRMの表情編集をどのようにすればよいのか、またVRMを使うアプリケーションで表情操作についてどのように設計すればよいかを考察します。
VRM・VRoidの表情設定
ブレンドシェイプとブレンドシェイププロキシ
VRMでは眉・目・口・歯といった顔のパーツを動かすパラメータが設定されており、ブレンドシェイプと呼ばれています。
ブレンドシェイプはパーツ単体を動かすパラメータなのですが、複数のパーツを組み合わせてセットで動かすパラメータも用意されておりブレンドシェイププロキシと呼ばれています。
ブレンドシェイプはVRMの顔(Face)の設定項目として、ブレンドシェイププロキシはVRMファイル全体の設定項目としてそれぞれ位置づけられています。
ブレンドシェイプはVRMを作った人が自由に設計できるのでVRMファイルによって多種多様の設定項目になりますが、ブレンドシェイププロキシはVRMの仕様である程度設定項目が定められています。ただし、ユーザーが自由にブレンドシェイププロキシの項目を追加することも可能です。
ブレンドシェイププロキシは複数のパーツをセットで動かせるので喜怒哀楽といった典型的な表情を少ない労力で表現するのに適していますが、パラメータは0~1までの幅でしか設定できません。
一方、ブレンドシェイプは通常値は0~100までの幅ですが、マイナスや100以上の設定(いわゆる「限界突破」)も可能です。
VRoidのブレンドシェイプの種類
VRMファイルを楽に作れるツールであるVRoid StudioでVRMファイルを作ると、下記のブレンドシェイプが設定されます。(赤文字は後述しますが、UniVRMで調整できない項目です)
- 眉:喜・怒・哀・楽・驚
- 目:喜び閉じ(左・右・両方)・怒・哀・楽・驚・閉じ(左・右・両方)・ナチュラル・見開く・瞳を隠す・ハイライトを隠す・Extra
- 口:喜・怒・哀・楽・驚・通常・上げる・下げる・八重歯(肌,左・右・両方)・あ・い・う・え・お・閉じ・縮める・広げる
- 歯:隠す・牙1(上・下・両方)・牙2(上・下・両方)・牙3(上・下・両方)・短くする(上・下・両方)
ブレンドシェイププロキシの種類
VRMで標準設定されているブレンドシェイププロキシは下記の通りです。(カテゴリ分けは私の解釈です)
- 表情系:通常(Neutral)・喜(Joy)・怒(Angry)・哀(Sorrow)・楽(Fun)
- 母音系:あ・い・う・え・お
- 視線系:上(LookUp)・下(LookDown)・左(LookLeft)・右(LookRight)
- ウインク系:左ウインク(Blink_L)・右ウインク(BLink_R)
VRoidの場合は、表情系に驚(Surprised)・Extraが、ウインク系に両目閉じ(Blink)が加わります。
注意すべきは通常(Neutral)もプロキシの一つとして定められていることです。ブレンドシェイプですべての設定項目をゼロにした場合の表情とは違う表情を「通常」として設定できるのです。
例えばこちらの東北きりたんのVRMモデルですが、まずはすべてのブレンドシェイプをゼロとした表情をごらんください。
これでは元気が良すぎというか優等生っぽすぎてきりたんらしくないですね。いかにも徹夜でゲームやってそうな感じにするには、普段の表情をジト目にしたい所です。
そこで、ブレンドシェイプで怒りや哀しみを適度に加えるとジト目っぽくなります。
こちらの表情を「通常」にすることで、自然にジト目キャラを作ることができます。
ウマ娘のツインターボなど、歯をむき出しにしたキャラもこの方法で普段から歯を出した表情にすることができます。
VRMの表情にまつわる問題点
表情の「加算」
ブレンドシェイプにもブレンドシェイププロキシにも言えることですが、VRMを使ったアプリで表情を操作するときに、操作した表情が元の表情に「加算」される挙動を取る場合があります。
先ほどの東北きりたんの例で行くと、笑顔(Joy)の表情をこのように設定します。
この笑顔は目を喜び閉じにする形で設定しましたが、一方でもともと先ほどの通常(Neutral)の表情でもけだるさのようなものを表現するためにちょっと閉じ目にしてあります。
で、通常の目閉じと笑顔の目閉じが「加算」されてしまうと、下のようなバグ表情になってしまうというわけです。
このように加算の結果意図しない表情になってしまうのを防ぐため、ブレンドシェイププロキシを設定するときには加算されることを見越して設定する必要があります。
特に難しいのはアプリによって挙動に違いがあることで、1.表情を操作するとブレンドシェイププロキシで設定した通りの表情になる(通常(Neutral)の表情は解除されるか、もともと反映されない)場合と、2.通常(Neutral)の表情がデフォルトとなっていて解除できず、他のブレンドシェイププロキシが強制的に加算される場合とがあります。
1.のアプリは素直に各表情のブレンドシェイププロキシを設定すればよいのですが、2.のアプリの場合、それぞれの表情のブレンドシェイププロキシを設定する際にNeutralの表情分は設定しないでおく(またはあらかじめ差し引いておく)必要があります。このため、1.2.2つのVRMファイルを作らなければならなかったり、2.のブレンドシェイププロキシの設定はNeutral分のパラメータを覚えておいて差し引く作業をせねばならなかったりと、非常に面倒になっています。
2.の作りになっているアプリがまた多いんですよね。。
表情の種類を増やすには
ブレンドシェイププロキシでは普通の表情は喜怒哀楽の4種類しかないので、とぼけた表情とか決め顔・ドヤ顔といったオリジナルの表情を増やしたくなりますよね。
VRMの設計思想としてはブレンドシェイププロキシの表情を新しく追加設定すればよいのですが、現状多くのVRMを使ったアプリでは使えるブレンドシェイププロキシが固定されていて、喜怒哀楽のほかは母音系(あいうえお)とウインク系(左右・目閉じ)しか表情を変えられないため、オリジナルの表情はどうしても母音系のブレンドシェイププロキシで設定したくなります。
しかし母音系(ウインク系もそうですが)のブレンドシェイププロキシはブレンドシェイプにも同じ項目が存在しており、ブレンドシェイプで操作してもブレンドシェイププロキシで操作した場合と同様に表情が変わります。
もっとわかりやすく言うと、ブレンドシェイププロキシで「あ」にドヤ顔を設定したとすると、ブレンドシェイプで「あ」の口の形をさせてくてもできなくなってしまうのです。
ただし、ブレンドシェイプはブレンドシェイププロキシと違って「限界突破」ができるので、これを利用していくつかの顔パーツを組み合わせて「表情の限界突破」を考慮して設定しに行くテクニックも考えられます。
一方、視線系のブレンドシェイププロキシは母音系のようにブレンドシェイプの設定とは重複していないことと、VRMには別途視線を操作するための仕様(LookAt)があり、こちらを使えばブレンドシェイプとして視線操作を使うことはありません。ですので、キャラ特有の表情は視線系のブレンドシェイププロキシを間借りして設定する方が扱いやすいです。しかし、視線系のブレンドシェイププロキシはVRoid Studioの顔編集機能では設定できません。他のVRMを扱うアプリでも操作できない場合も多いので注意が必要です。
まばたき問題
VRoid StudioやVRoid Hubの3Dプレビュー機能をはじめ、VRMキャラがまばたきする機能を持ったアプリが多くあります。
が、このまばたきが問題で、まばたきの処理として通常の表情(Neutral)に、右目閉じ(EYE_Close_R)と左目閉じ(EYE_Close_L)を加算しているアプリケーションが多く存在します。
例えばちょっとキツめの性格付けのキャラがいたとして、Neutralの表情としてもともと少し口元を怒らせて、右目閉じも左目閉じも同様に口元を少し怒らせる表情にしたとすると、そのようなアプリでまばたきした時には目を閉じるだけでなく、口が3倍怒ったような表情になります。これがものすごく違和感があって、見てて耐えられない場合が多いんですよね。。
例えばこちらのキャラはかわいく作りたかったのでNeutralの表情と、ウインク系の表情両方で口をすぼめて点状にする設定をしました。
すると、VRoid Hubの3Dプレビューではまばたきの時に口が3倍すぼめられてしまってこのような口になってしまいます。せっかくのかわいらしさがこれではグロ表現になってしまいます。。
なお、写真撮影などスナップショット画像を切り出す機能があるアプリではそもそもまばたき機能自体が邪魔(半目の写真になってしまう。そんなことまでリアルにしなくていいのに。。)なことがよくあり、これを「まばたき問題」と称することもあります。
これらを防ぐにはまばたき機能をOFFにすることができるアプリではこまめにOFFにすることですが、VRoid HubのプレビューなどOFFにできない(かつ、強制的にみんなに見られてしまう)場合もあります。その場合は、ブレンドシェイププロキシで右目閉じ・左目閉じの両表情を設定するときには目だけを動かして、口などほかのパーツはパラメータをゼロにするしかないでしょう。
VRoidStudioとUniVRMとで設定項目が少し違う
VRoid Studioでは撮影機能でブレンドシェイプのパラメータ調整が、顔編集の表情設定機能でブレンドシェイププロキシの設定がそれぞれできます。
が、VRMファイルをエクスポートしてUnityでUniVRMを使って読み込むとブレンドシェイプの設定項目が少し違っています。
まずブレンドシェイププロキシの設定では、UniVRMでは歯関係の設定ができるのにVRoid Studioでは歯の設定ができません。かわいい系のキャラでは歯を隠したい場合も多いのですが、、Unity側で設定するしかないですね。
一方、「口を閉じる・広げる・縮める」設定はVRoid Studioではできるのですが、UniVRMではできません。特に口を縮めて点にする表現はよく使いますが、VRoid Studioで設定するときに顔編集の表情設定で仕込んでおく方が良いでしょう。(ただ、VRoid Studioでは視線操作系のブレンドシェイププロキシが設定できず、ウインク系はまばたき問題に直結し、母音系は本来使いたい口の形を作れる可能性を断つことになりかねないため現実問題どの表情に仕込むのかは非常に悩ましいですが、、)
なお、口を縮める表現は「う」で代用できますが、多少違った形の口になります。
また、VRoid StudioではExtraの表情の設定はできません。
VRMの表情で気を付けること
以上の問題を踏まえて、VRMの表情設定周りで気を付けたい点をまとめます。
VRMファイルの編集
・キャラ固有の表情はNeutralだけに折り込む
・ウインク系(BLINK R/L)のは目以外はデフォルトのままとし、キャラ固有の表情は織り込まない
・母音系(AIUEO)も同様に口以外はデフォルトのままとし、キャラ固有の表情は織り込まない
・口の拡縮・口閉じはVRoid Studioの顔編集で折り込んでおく
VRMを使ったアプリの設計
・ブレンドシェイププロキシではなくブレンドシェイプを操作するようにする方が表情の自由度は高くなる。一方でブレンドシェイププロキシによって複数のパーツをセットで設定できるメリットは大きいので、アプリの目的によって使い分ける
・ユーザーはオリジナルのブレンドシェイププロキシを追加してVRMファイルを編集する可能性があり、オリジナルのブレンドシェイププロキシこそがそのVRMモデルの個性なので、アプリの設計にあたってはVRM標準だけでなくすべてのブレンドシェイププロキシを拾う設計にする方が良い
・ブレンドシェイプを調整する機能を持つアプリでは、限界突破できるように設計すると表現の自由度がより上がる
・ブレンドシェイププロキシを追加する場合、その追加したブレンドシェイププロキシの保存は「VRMファイルの保存」を意味する
以上