悪のアバター研究室 Vol.2-リップシンクで発光-
記録日:
はじめまして、「内儀・似非」です。喋ると光る怪人です。Avatars3.0も実装から随分と経ちましたね。
ヴァリアールの理念、それはこの仮想世界を我らのような異形・怪人・悪の姿を持つ者達が堂々と闊歩する場所に造り替える事にある。
そこでこの「悪のアバター研究室」シリーズでは、異形・怪人の姿を持ちたいが、未だそのイメージの定まらない眠れる同志諸君に対し、アバターの怪人化改変に向けたアイデアソースとして、
特殊なVRChatアバターギミックを紹介する事を目的としている。
本記事が新たなる異形誕生の切っ掛けとなれば幸いである。
※基本的に当シリーズでは公開時点でのPCVR環境での動作を想定している。Oculus Questでは使用不可ギミックを紹介する事がある点にご注意頂きたい。
確認したい方は「Oculus Quest対応 VRChat」にて検索を勧める。
また、筆者はQuest環境で一般的なシェーダーであるToon Litでの使用を想定していない点もご注意を。
◆第二回はリップシンク改造!!!喋って光れる3.0◆
今回はAvatars3.0のギミックを紹介する。
さて昨今は結社としても喜ばしい事に、メカ系の身体や装備を持つアバターが溢れている。とても喜ばしい。
しかし、フルフェイスヘルメットや完全にロボットの頭部を持つ者の悩みが一つ、ある。
それはリップシンクしない事だ。
これは音と視覚情報でコミュニケーションを行うVRChatにおいて、声とアバターの結び付きを一つ失っているという事である…
特に複数人が入り混じる交流所やイベントにおいては、尚更今誰が喋っているのか分かり辛いと言えるだろう。
そこで今回ご紹介するのはメカ系アバターにふさわしい改造…「リップシンクによる発光」である。
メカなんだから喋ったら光るでしょう。
勘の良い市民諸君は気が付いたかもしれないが、応用すれば別に発光以外の挙動を仕込む事も可能である。
↓喋ると光るメカの例
◆必要な環境と準備◆
◆環境◆
Unityバージョン→Unity 2018.4.20f1
SDK→VRCSDK3(Avatars3.0用)
◆準備◆
・アバター本体にSDK3のVRC Avatar Descriptorが追加されている。
・↑のPlayable Layers項目の、FXにAnimatorControllerが設定されている。
・アバターのシェーダーにEmissionまたはこれに相当する項目がある。
・アバター用のアニメーションを作ったことがある。
事前知識としてはgoogle検索にて
「avatars 3.0 出し入れ」
で検索して出て来る記事を理解出来る事が望ましいが、今回はExpressions Menuを作らないので
「FXにAnimatorControllerを設定する」「ParameterにVisemeを作成」「AnimatorControllerの新しいレイヤーを追加し、歯車アイコンでWeightを1にする」「Stateを作り遷移の矢印を繋ぐ」などが理解出来るならば問題無しだ。
もしSDK2のアバターを何らかのツールで3.0へ変換していた場合は知らぬ間にFXにAnimatorControllerが設定されている事もあるだろう。
◆上のアニメーター設定とか知らない初心者だけどFXにAnimatorControllerを設定するぜ◆
※もし、既にFX欄へAnimatorControllerが設定されているのならこの(1)(2)の作業自体が不要なのですよ!!!
(1)Asset/VRCSDK/Example3/Animation/Controllers内のvrc_AvatarV3HandsLayerを念の為にShift+Dでコピーして、これを左に並んでいる自分の作業し易いフォルダへ、ドラッグ&ドロップで構わないので移動するのです。
(2)アバターのVRC Avatar Descriptorの、Playable Layers項目の、FXのボタンをクリックし、先程のAnimatorControllerを設定してください。
◆リップシンクのモードを確認する◆
アバターのVRC Avatar Descriptorの、LipSyncのModeがDefault以外であれば大丈夫だと思う。
なお筆者は[Viseme Parameter Only]と[Viseme Blend Shape]でしか動作確認していないです。特に今までリップシンクの付いて無かったロボ系なら[Viseme Parameter Only]で大丈夫。
◆発光アニメーションを作る◆
※もし既にアバターのマテリアルのEmissionを最も明るい白に設定している場合には、普段の明るさを若干暗く設定するとアニメーション時との差が分かりやすいと思う。
※また、Emissionにマスクが設定されていないアバターは全身が光る。仕様です。
まず発光させるアバター(CubeChanと命名している)をShift+Dで複製する。きっと名前の後ろに(1)とか付くと思う。
以後アニメーション作成作業はこちらで行う。
明らかにキューブだがGenelicアバターでの動作確認はしていない。多分機能しないと思う。
(1)アニメーションを作成(HikaruVoiceと命名した)し、このアニメーションを上記のコピーされたアバターへドラッグ&ドロップ。
(2)Animationウィンドウから赤丸の録画ボタンをクリックする。発光させたいメッシュを選択し、一旦アニメーションの0:30辺りでマテリアルのEmissionの初期値のキーを入力する。
(3)アニメーションの0:00(先頭)でアバターのマテリアルのEmissionを白にし、更にIntensityの値を+2程度に調整する。赤丸を再度クリックし、録画を終了する。
これで「発光後に0:30秒で元の明るさに戻るアニメーション」が作成された。
もっと高速点滅するアニメーションでも構わないが、目が痛い。むしろ先頭に初期値カラーのキーを打ってもっとゆっくり丁寧に光る位で丁度いいんじゃないですか?
Intensityの値はUnity上では確認し辛いテクスチャを使用しているアバターもあるが、この値を大きくすると発光する箇所はより白に近くなる。またBloomの設定されたワールドでは特により強く光る事がわかりやすい。筆者は+10くらいに設定した結果、Bloomで光り過ぎて目が潰れた。
◆vrc_AvatarV3HandsLayerのパラメーター設定◆
FXへ設定したAnimatorControllerを開き、Animatorウィンドウを確認。
Parametersをクリック、+アイコンをクリックして「int」をクリックで新しいparameterが作成されます。
このparameter名を「Viseme」としてください。大文字と小文字が区別されるのでコピペが無難。
この「Viseme」parameterはリップシンクに用いられます。
参考:公式ドキュメント https://docs.vrchat.com/docs/animator-parameters
◆vrc_AvatarV3HandsLayerのレイヤー設定◆
引き続きAnimatorウィンドウを確認。
Layersをクリック、+アイコンをクリックし新しいレイヤー(HikaruVoiceLayerと命名)を作成。
歯車アイコンからWeightを1にします。Weightの値を入れ忘れると機能しなくなるので注意。
濃いグレーの枠を右クリック→Create state→Emptyでまずはオレンジ色のEmptyを作り(デフォルトでNew Stateという名前)次に先程作成したアニメーション(HikaruVoice)をProjectから隣にドラッグします。グレーの四角がさらに増え、矢印の少ない下記画像のようになると思う。
[New State]→[HikaruVoice]→[Exit]と矢印が繋がるよう、[New State]と[HikaruVoice]の四角枠(Stateと呼ぶ)を右クリックし、Make Transitionをクリック、伸びた線を次のStateへ繋げるようクリックします。矢印の向きには注意だ。
◆Stateの遷移(Transition)条件の設定◆これが最後◆
まず[New State]→[HikaruVoice]間の矢印(Transition)の条件設定をする。
その矢印をクリック、上から順に設定すると
◇Has Exit Time:チェックを外す
▼Settings内
◇Transition Duration(s):0
◆Conditions内
◇右下の+アイコンをクリックし、左から順に[Viseme][Greater][1]とする。これは0が無言状態のパラメーターであり、1~14が何かしらの音声を発している際のパラメーターな為である。
※もちろん前述の公式ドキュメントを参照して1~14それぞれに細かく条件を設定すれば、一般的なアバターの様なリップシンクを設定する事も可能だ。内容に応じて色が違うとか。その場合は[Any State]を用いた方法も検討したい。
次に[HikaruVoice]→[Exit]間の条件設定をする。
これ↓には「前のStateのアニメーションを完全に再生し終えてから次のStateへ遷移する」という意図があるらしいが、筆者もあまり意味を分かっていない。
これも上から順に設定すると、
◇Has Exit Time:チェックを入れたままにする
▼Settings内
◇Exit Time:1
◇Transition Duration(s):0
◆Conditions内
◇無編集でよい
以上で設定は完了です。あとは通常の3.0同様にアップロードを済ませれば完璧だ。
発声する度にアバターが発光点滅すれば成功です。
なお最初の方で本ギミックはGenelicアバターでは機能しないと書いている。
きちんと筆者以外のHumanoidアバターに設定できたのか気になる市民諸君も居るだろう。
そこで筆者が以前に個人的にお借りしている
DJ⑨氏の量産型アバターに、この発光リップシンクを設定した動画ツイートを引用しますよ!
Emissionのマップは無いので、代わりに既に設定されているテクスチャを再度Emissionに設定して自然な発光に寄せられている…はずだ。
◆余談◆
ところで筆者の場合は発声に加えて「左手のハンドサインが丁度HandOpenであるならば」という条件、つまり[GestureLeft][Equals][2]という条件を加えたものも作成し、更にStateも複数繰り返し並べることで「左手のハンドサインが丁度HandOpenの状態に、0.5秒おきに発声しているという条件を4度満たせば(2秒間発声し続ければ)更なるアニメーションを再生する」というものを作成している。更にショートカット機能も加えたりしてこんな事になっている。別に真似しなくてもいい。
工夫次第では「喋るほどにどんどん顔が青くなっていくアバター」「アイウエオに応じて虹色各色に光るゲーミング・リップシンク」「喋ると煙パーティクルを放出する」「モニターが光りノイズ音を再生する」といったアバターを作成する事も可能かと思います。
※本ギミックはVisemeの値を参照してギミックを作成している為、EXメニューを用いたギミックとは異なり、場合によっては同期しない相手が居る事があります。多分参照した公式ドキュメントにもVisemeの項目でそう書いていた気がする。ギミック表示時間が長いなど、目の前の相手以外にもギミックを見せる事を想定する場合には、EXメニューを使用するのが無難と思う。
それでは、諸君の新たな姿を楽しみにしているよ。