特集、その他
窓辺とおこをもっと可愛くしたい! VRChatで口パクとスカートのヒラヒラ感を再現してみた
リップシンクと布の物理演算を導入、自然な人らしさを再現 text by 坂本はじめ
2018年10月19日 06:05
前回、「窓辺とおこ」の3DモデルをVRChatにアップロードし、自身のアバターとして利用できるようになるまでの手順を紹介した。
オリジナルアバターでVRChatを楽しむための最低限の設定は前回の記事で紹介しているが、もう一手間を加えることで3Dモデルが持つ魅力をより引き出すことができる。
手軽ではないが、アバターをよりかわいく見せたりするに非常に有効で、作り込もうと思えばまさに“命を吹き込む”といったレベルでこだわることも可能だ。
今回はVRChat上で「窓辺とおこ」をより魅力的に見せるため、「リップシンク」と「スカートの物理演算」を導入する手順を紹介しよう。
なお、「窓辺とおこ」の3DデータはDIGITAL DIYのサイトで公開されている記事から期間限定で入手可能だ。
アバターの魅力をより高める「リップシンク」と「スカートの物理演算」
今回3Dモデルに追加するのは、「リップシンク」と「スカートの物理演算」の2つ。
リップシンクとは、ユーザーの音声に応じて3Dモデルが口パクをすることだ。アバター同士が顔を突き合わせてボイスチャットを楽しむVRChatにおいて、リップシンクはアバター自身が喋っているという印象を相手に与える重要な要素だ。
また、スカートの物理演算は、窓辺とおこが身に着けているスカートを物理演算によって布らしく振舞わせるために行う設定だ。
前回記事でおこなった基本設定では、スカートは他の物体と干渉せず、変形もしない状態となっている。従って、しゃがんだり椅子に座ったりした場合、足はスカートを貫通してしまう。今回は物理演算によってこのリアリティの無い描画の解消を図りたい。
ただたっている状態であれば違いとしてわからない部分なので、地味に思うかもしれない。しかし、こうした部分の作り込みがアバターに命を吹き込むと言いえる。実際に作り込まれたアバターが動いている様をみるとなかなか感動するものだ。
“人形”と“人”くらいの違いが生まれるリップシンク
VRChat用アバターでリップシンクを行うには、3Dモデル側で音声に対応した表情パターンを作成しておく必要がある。
幸いなことに、今回利用する「窓辺とおこ」の3Dモデルには、リップシンク用に母音に相当する「あいうえお」の表情パターンが用意されているので、これを活用する。なお、VRChatは英語ベースで作られているため、この素材を英語の発音にあわせてあてはめていくことになる。
Unityを起動し、前回記事で設定を行ったプロジェクトファイルを開いたら、まずは画面左の「Hierarchy」で「Model」を選択する。
画面右側のInspector内の「VRC_Avator_Descriptor (Script)」にある「Lip Sync」を「Viseme Blend Shape」に変更する。
Lip Syncの下に追加された「Face Mesh」の項目が表示されるので、右側の丸いボタンをクリックして「Select SkinnedMeshRenderer」を開く。
Select SkinnedMeshRendererで「face」を選択する。選択後Select SkinnedMeshRendererを閉じる。
Face Mesh以下に「Visame:○○○」という15個の項目が表示される。これが発音と表情パターンを紐づけるための設定項目だ。
各項目はドロップダウンリストとなっており、クリックすると3Dモデルに用意された表情パターンを選択していく。なお、該当する表情が無くても「-none-」を選択せず、いずれかの表情パターンを適用しなければならない。
今回利用した窓辺とおこの3Dモデルには、15パターンの表情は用意されていないので、各項目に近いと思われる表情パターンを設定していくことになる。VRChatが用意している「設定ガイド(Part 3: Visemes And Other Blend Shapesに記載)」を参照しつつ、各項目に適した表情パターンを設定しよう。
なお、この項目をガイドに従って設定した場合であっても完璧なリップシンクにはならないので、表情の選択はざっくりとしたものでOKだ。以下のような設定でも、アバターがしゃべっているという演出には十分、かなり良い雰囲気にはなる。
アバターの作り物感が大幅に減少、スカートの物理演算の実装手順
スカートの物理演算は、Unityが備える「Cloth コンポーネント」を利用することで行える。これは布を物理演算によってシミュレーションする機能で、設定することでスカートに布らしい振舞いをさせることができる。
スカートの物理演算を実装する手順は、「スカート部分への物理演算の実装」と「スカートと干渉する部分への当たり判定の実装」の2つに分けることができる。ここでは、前者から順を追って紹介していく。
【手順1】Unityの「Cloth コンポーネント」による物理演算の実装
まず、HierarchyのModelを展開し、Model内の「clothes」を選択する。
Inspectorの「Add Component」をクリックし、「Physics」→「Cloth」の順で選択する。
ここまでの手順により、Inspectorに「Cloth」という項目が追加されるので、同項目内のEdit Constraintsボタンを押す。
プレビュー画面上にclothesの各頂点が表示されるので、「Ctrl+A」キーを押して全ての頂点を選択する。
プレビュー画面右下に表示されたCloth Constraints内にある「Max Distance」にチェックを入れる。
ここまでの操作により、物理演算の対象となる頂点の全てに対して「Max Distance=0」が適用され赤色で表示される。Max Distanceは頂点の移動距離を制限するもので、0が適用された頂点は固定された状態となる。これは、スカート以外の部分が変形しないようにするための措置だ。
つづいて、3Dモデルの中で物理演算を適用したい箇所、今回の場合はスカート部分のMax Distanceを調整する。
行う作業は、スカート部分の頂点を選択し、Max Distanceの値を大きなものに設定するというものだ。各頂点はマウスのドラッグ操作による範囲選択が可能だが、範囲選択はプレビュー画面の視点に正対しているものしか反映されないので、カメラの視点をかえつつ設定を行っていこう。
今回は、スカート部分のMax Distanceはすべて「10」を適用した。これでも問題なく物理演算は適用されるが、スカートの裾から遠ざかるほどMax Distanceの値を小さくすることで、よりリアリティのある動作にすることもできる。
物理演算で動かす範囲の設定が終わったら、InspectorのClothから物理演算のパラメーターを調整する。Clothコンポーネントの各項目の意味と機能はUnityのマニュアルを参照して貰いたい。
各パラメーターの設定値によって、スカートの動きは様々に変化する。今回はとりあえずスカートのような動作が得られる値として以下の数値を適用してみた。この数値は後から変更することも可能なので、アップロード後に想像していた動作でなかった場合は再調整すると良いだろう。
【手順2】足が貫通しないスカートを実現する「当たり判定の実装」
ここではCloth コンポーネントの「Sphere Colliders」で当たり判定を設定する手順を紹介する。
Cloth コンポーネントのSphere Collidersは、2つの球形オブジェクトの間を補完する形で当たり判定を実装するものだ。今回はこの機能を使って、スカートに対する足の当たり判定を設定する。
まず、Hierarchyからclothesを選択し、Inspector最上段のオブジェクト名の隣にあるチェックボックスを外す。これにより、当たり判定の実装作業の邪魔となる服を非表示にできる。
なお、以降のスクリーンショットではボディ部分の表示をワイヤーフレームにしているが、これは特に必要の無い設定なので手順は省略する。
Hierarchyから「body」を選択。右クリックして「3D Object」→「Sphere」の順に選択してSphereを追加する。
bodyに追加された「Sphere」を選択し、Inspectorの「Transform」でPositionとScaleを調整することで、右足の付け根部分にSphereオブジェクトを埋め込む。
埋め込むSphereオブジェクトのサイズは、足の大きさよりも多少大きい程度にしておくと、スカートに足がめりこみにくくなる。あまり大きく設定し過ぎると、足からスカートが浮き上がる形になるので、多少大きい程度にとどめておくことがポイントだ。配置は正面と側面から調整しておこう。
Hierarchyから右足付け根に埋め込んだSphereオブジェクトを選択し、オブジェクトの名前を「Right_up」に変更する。オブジェクト名は自分が判別できるのであれば何でも構わない。
先ほどリネームした「Right_up」をコピー&ペーストして、Sphereオブジェクトを追加する。
コピー&ペーストで複製したオブジェクトは、Inspectorの「Transform」でPositionとScaleを調整して右足の膝付近に埋め込む。
今回の3Dモデルでは、膝部分は足の付け根より細くなっているが、膝の太さに合わせてオブジェクトのサイズを調整してしまうと、2つのオブジェクト間を繋いだ際に当たり判定が太ももに埋没してしまうため、あえて大きめに設定した。
Hierarchyで、右膝に埋め込んだオブジェクトの名前を「Right_down」にリネームする。
「Right_up」と「Right_down」の2つをコピー&ペーストして、両オブジェクトの複製を作成する。複製したオブジェクトは左足用なので、それぞれ名前を「Left_up」と「Left_down」にリネームする。
3Dモデルの足の位置は左右対称なので、「Left_up」と「Left_down」の位置調整は、PositionのX値をマイナスにするだけで完了だ。
Hierarchyで、「Right_up」、「Right_down」、「Left_up」、「Left_down」の4つを選択する。
Inspector最上段左側のチェックボックスを外し、先ほど選択した4つのオブジェクトをすべて非表示にする。
Hierarchyから、Model → Root → Hipsの順で展開し、足の可動部である「L_UpperLeg」と「R_UpperLeg」を表示する。
L_UpperLegに「Left_up」と「Left_down」、R_UpperLegに「Right_up」と「Right_down」をそれぞれ移動する。左右を間違えないように注意しよう。
Hierarchyでclothesを選択。Inspector最上段左側のチェックボックスにチェックを入れて服を再表示する。
InspectorのClothの最下段にあるSphere Collidersをクリックして、sizeに「2」を入力する。これにより、Sphere Collidersに「Element 0」と「Element 1」が追加され、それぞれにFirstとSecondの設定項目が表示される。
FirstとSecondの項目右側の丸いボタンを押すと「Select SphereCollider」が開くので、Element毎に左または右のupとdownの組み合わせを設定する。これで、当たり判定の設定は完了だ。
手間はかかるが、それに見合う価値のあるアバターの調整
以上で、アバターに「リップシンク」と「スカートの物理演算」を追加する手順は完了だ。後はVRChatにアップロードして動きを確認し、不具合があるようなら各パラメーターの微調整を行うことになる。
同じプロジェクトで同じアバターをVRChatにアップロードすれば、基本的に古いアバターを上書き更新する形となるが、もしアップロード済みのアバターを削除したい場合、Unityのメニューバーから「VRChat SDK」→「Manage Upload Content」と選択すれば管理画面が表示される。
それなりに手間のかかる作業ではあるが、リップシンクもスカートの物理演算も、ちゃんとVRChat上で機能しているのを見ると、まるでアバターに命が吹き込まれたかのような躍動感に感動すること間違いなしだ。
今回は触れられなかったが、まばたきなど目の表現や、髪の毛などの設定も可能で、作り込めば作り込むほどキャラクターの存在感が増す。
VRChatにオリジナルアバターをアップロードするのであれば、手間を惜しまずアバターの調整を行うことをおすすめしたい。