バーチャル3Dクリエイター神部まゆみです(*^_^*)
この記事はuLipSyncをいじってみたのでそれについての記事です。
動作確認したバージョンはUnity2022.3.22、Unity6000.0.32です。
uLipSyncとは
Unityで音声を元に口を動かせるリップシンクアセット。
3Dだけじゃなくて2Dのテクスチャも動かせるっぽいです。
音声データをもとに口の形状がどうなるか解析してるみたい?↓こちらの先輩の説明が分かりやすかったです。ありがとうございます。




似たようなリップシンクアセットにOVRLipsyncっていうのもあるけど…
Metaが開発してた?というか買収したOculusの技術だったのかな?でOVR Lipsync(Oculus Lipsync Unity)っていうのもあるけど、こちらは2021年以降更新されてないっぽいですね…。
一応Unity2022.3.22でもまだ動いたけど。
↓こっちのページには「現在はサポート終了段階にあります。」「このドキュメントは今後更新されることはなく、削除される場合もあります。」などいつ消えるか分からないようなことも書いてありますね…。
End-of-Life Notice for Oculus Spatializer Plugin
Oculus Spatializer Pluginは、Meta XR Audio SDKに置き換えられ、現在はサポート終了段階にあります。v47より後については、サポートは提供されません。このSDKの使用を停止することを強くおすすめします。以下の中から、実際に使っているエンジンに対応するMeta XR Audio SDKのドキュメントをご覧ください。
– Unity Native用Meta XR Audio SDK
– FMODとUnity用Meta XR Audio SDK
– WwiseとUnity用Meta XR Audio SDK
– Unreal Native用Meta XR Audio SDK
– FMODとUnreal用Meta XR Audio SDK
– WwiseとUnreal用Meta XR Audio SDKこのドキュメントは今後更新されることはなく、削除される場合もあります。
uLipSyncはまだ更新されてるから、unityでリップシンクを使いたいなら有力な乗り換え先なのかな?
とはいえ作者さんは有能なエンジニアの方でかなり忙しそうだから、今後どうなるかは分からないけども。
今は有能なエンジニアの方は引く手あまたで、良い仕事には困らないでしょうからね(;^_^A
さっそく導入してみる
ここから最新版をダウンロードできます。

パッケージマネージャー経由からもできるみたいだけど、今回はunitypackageをダウンロードしてやってみます。


とりあえずアセットフォルダにunitypackageを放り込んでインポートします。
サンプルを動かしてみる
オーディオクリップを指定して動かすサンプルを使ってみます。
↓ここにあります。 Assets/uLipSync/Samples/01. Play AudioClip/01-1. Play Audio Clip.unity


おお、しっかり動いてますぞ!Σ(゚Д゚)
ユニティちゃんについてるコンポーネントを見てみる
とりあえず↓この三つで動いてるっぽい?他のコンポーネントは多分ユニティちゃんのデフォルトのやつかな。


・Audio Source
・U Lip Sync Blend Shape
・U Lip Sync
VRMモデルのサンプルもついてるから見てみる
VRoidのVRMモデルのサンプルもついてるから、これを使えばそのまま動かせるかな?
VRM0.xとVRM1.0用のものまであって便利です。


Assets/uLipSync/Samples/04. VRM/04-2. VRM 1.0.unity
Assets/uLipSync/Samples/04. VRM/04-1. VRM 0.X.unity
とりあえずVRM1.0用でやってみます。
VRMモデルの場合はプレイヤー設定をいじる必要があるっぽい
このままでは動かないため、プレイヤー設定をいじる必要がありました。
↓スクリプティング定義シンボルとかいうところにVRM関連のやつを追加する必要があった。
詳しくは公式ページに書いてあります。
パッケージマネージャー経由の場合は自動で追加されるから不要っぽいけど、今回はunitypackageで追加したので必須でした。



VRM パッケージを .unitypackage からインストールする場合は、Scripting Define Symbols を手動で追加する必要があります。VRM 0.X の場合は を、VRM 1.0 の場合は を追加します。パッケージマネージャーを使用してパッケージを追加すると、これらのシンボルは自動的に追加されます。
USE_VRM0X
USE_VRM10
これで動いた!
私のモデルを動かしてみる
とりあえずサンプルの三つのコンポーネントをコピペしてみます。
・Audio Source
・U Lip Sync Expression VRM
・U Lip Sync
を一つずつコピーして「新しいコンポーネントとして貼り付け」で。
VRM0の場合は U Lip Sync Expression VRM が U Lip Sync Blend shape VRM になります。
これだけだとダメっぽいので、On LipSync Updateのところを私のモデルに書き換えたら動きました!
↓書き換えたのはここで、ヒエラルキーのモデルをD&DすればOK。プロファイルはユニティちゃんのやつのままで大丈夫だった。




↑はVRM1.0の場合で、VRM0.xの場合はuLipSyncBlendShapeってやつでした。
これで無事動きました。
サンプルの子をプレハブにして配置するとコピペしやすい
好きなシーンでuLipSyncを動かしたい場合、サンプルシーンの子をプレハブにして配置したらコンポーネントをコピペしやすかったです。
VRM0用のシーンだとここにあります。VRM1モデルでセットアップしたいなら横のやつで。


Assets/uLipSync/Samples/04. VRM/04-1. VRM 0.X.unity
これで動いた!ちゃんとアニメーションとも併用できるっぽい
おお!ちゃんと動いたでござるぞ( *´艸`)
しかし強制無表情になってしまった
アニメーションには笑顔のブレンドシェイプを設定してあるのだけど、強制無表情になってしまった。
OVRLipsyncだとアニメーションに表情つけとけばそのまま口だけ動かしてくれたのだけど、uLipSyncだとダメとか?


ユニティちゃんはデフォルトが笑顔だから良いのか…でも悲しい顔や怒った顔でリップシンクできないとちょっと不便かなあ。


アニメーションベイクすると良いっぽい?
これやるとリップシンクのデータをアニメーションとして保存して、既存のアニメーションと組み合わせることができるみたいです。


アニメーションベイク
また、事前に計算されたリップシンク データである を に変換することもできます。アニメーションとして保存すると、他のアニメーションと組み合わせたり、既存のワークフローに統合したり、後でキーを動かして調整したりすることが容易になります。サンプルシーンはSamples/07です。アニメーションベイク。BakedDataAnimationClipセットアップ
[ウィンドウ] > [uLipSync > アニメーション クリップ ジェネレーター] を選択して、uLipSync アニメーション クリップ ジェネレーター ウィンドウを開きます。
トマシープ先輩のこの記事が参考になりそうです。








しかしベイクは成功したけど口パクが生成されてなかったんですよね…私にはちょっと難易度が高くてよくわかりませんでした(-_-;)後でいじってみます…。
【解決?】VRM0.xでやったら普通に表情ついてた
あれ、でもVRoid StudioでVRM0.0で出力して動かしてみたら普通に表情ついてました。
表情ついてたというか、表情をつけたアニメーションクリップにリップシンクを合成することができた。
どうもVRM1.0はExpressionとかいう、VRM0.xとは違う方式を使ってるっぽい?たぶんそのあたりが原因かな…。
uLipSyncのコンポーネントもVRM1.0用だとExpressionなんとかっていうやつになってるっぽいですね。
VRM1.0は2022年9月に出た比較的新しい規格だから、もうしばらくはVRM0.xで行けば良いかなあ。
以前からあるVRM0.xのほうがエラー解決の情報とかも多いし…。
VRM0.xはURPに対応してないのがネックだけど、UTS3は全部のレンダーパイプラインに対応していてVRMに近い感じに調整できるのでおススメです。
VRM1.0はVRM Instanceの設定を変えたら表情は動いたけど、uLipSyncが動かなくなった
↓の記事で書いたけど、これやったら表情は動いたけど今度はuLipSyncが動かなくなった。
Updateなしの設定にしたわけだから、リップシンクのフレームもUpdateされなくなったってことか…?
VRM1.0はなんかめんどくさそうだから、とりあえずVRM0のほうを使おうかな…。
追記:UniVRMのバージョンを変えたらVRM1.0でも普通に動いた
UniVRMのバージョン変えてみたら普通に動きました。
UniVRM 0.128.3とUnity6000.0.32f1の組み合わせだとVRM1のLate Updateでも普通にブレンドシェイプもuLipSyncも動きました。


一旦UniVRMを削除して別のバージョンを入れ直してみたら直る可能性があるかも?
UniVRMを削除して入れ直す方法は↓の記事で書きましたが、マテリアルエラーになって設定し直す羽目になる可能性があるので自己責任で(^_^;)
UniVRMはバージョンによって挙動が安定しなくて結構こういう不具合は遭遇してますね…。
結構UniVRMのバージョンを変えてみると直ることが多い気がします。
まぁ無料で使わせてもらってるから文句は言えないけども(^_^;)
スクリプトで表情を変えることもできた
↓以前キー入力でブレンドシェイプを切り替えるスクリプトを書いたけど、これも動かせました。
↓こんな感じで動かせました。
うーん、キャラが生きてる感が出て凄いなこれは…!
胸がキュンキュンしてきますぜ( *´艸`)
VRoidの表情はこちらの記事でまとめておいたので興味がある方はどうぞ。
パラメータを調整すれば口の大きさを微調整できるっぽい
オーディオクリップのボリュームを調整するか、uLipSyncBlendShapeのVolume Min/Max(log10)を調整したら口の大きさを微調整できた。
Volume Min/Maxってのは多分どのくらいの音量でリップシンクが反応するか?みたいな閾値設定かな…?VRChatにもあって、閾値以下の音だとリップシンクを動かないようにできる。
オーディオクリップのボリュームを調整する場合は当然ながら音も小さくなってしまうため、Volume Min/Maxをいじったほうが良いかな。
COEIROINKさんで作ったヒソヒソ声を入れてみたら音が小さくてデフォルトだと検知しなかったため、音声によってここをいじって調整したほうが良いかもしれない。
VRoidは口を開けすぎるとメッシュがはみ出るのでほどほどで…
これVRoidだけってわけでもないかもしれないけど、あんまり口を開けすぎるとモデルの表示に不具合が出る可能性があります(-_-;)
少なくともVRoidは口を開けすぎると、口の中の白いメッシュ?が顎のあたりを貫通して突き出てくるっぽいので↓、大口を開けるのはほどほどにしといたほうが良いですね…。
たぶんこれは歯のあたりのメッシュが突き出てるのかな?まぁあんまり口を開けすぎないほうがいいっす(-_-;)
アニメーションやオーディオクリップ切り替えスクリプトと併用すると良い感じに使えるかな?
アニメーション切り替えスクリプトやオーディオクリップ切り替えスクリプトも書いたけど、これと併用したら任意にセリフや動作を変えられて可能性の幅が広がるかな?
あとマテリアル切り替えスクリプトも書いたけど、赤面させたりとかできるのでこういうのも使うと良いかな。
用途次第だけど、VTuber的な動画を作ったりする場合はこうやって切り替えられると使い道が広がるかもしれない。
これ組み合わせればアニメとか作れそうだな…。いつか作ってみたいけど大変そうだ(^_^;)
EVMC4U+XR Animatorでモーションキャプチャーしながらでも使えた
EVMC4Uっていうアセットを使うとモーションキャプチャーしたモデルをunity内に表示できるので、VTuber的な動画を作るのに使えそうです。
↓併用してみたけど普通に使えましたね。
生放送の場合はボイチェンか、音声入力で音声合成するのが無難かな…。
でも動画作成で使う場合にはスクリプトでオーディオクリップを切り替えながら動かせば、普通にVTuber的な動画を作るには十分な気がします。
Amazonとかで売ってるキーボード一体型のリモコンマウスみたいなのを使えば、キャラを動かしながらスクリプトを作動させて音声やブレンドシェイプを切り替えたりできそうです。
VOICEVOXやCOEIROINKだと、音声モデルによってヒソヒソ声みたいなASMRっぽい音声も作れるので、主観視点のシチュエーション動画とかも作れそうですw
おわりに
案外簡単にできて良かった。
モーションキャプチャーと併用したりオーディオクリップ切り替えスクリプトと連動させたりすれば、普通にVTuberのシチュエーション動画とかも作れそうですね。
合成音声を使って耳かきや添い寝動画とかも頑張れば作れそうだけど、今度挑戦してみるかな…w
こんな凄いアセットが無料で使えるなんて良い時代になったもんだなぁ。
また何かあれば追記します(*^_^*)