9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AniLipSyncを用いてOVRLipSyncの遅延(レイテンシ)を軽減する

Last updated at Posted at 2018-06-19

#はじめに
OVRLipSyncは約60ms~200msほどの遅延(レイテンシ)が存在します。AniLipSyncを用いて、OVRLipSyncのモーフ変更はそのまま使いつつ、その遅延だけを軽減する方法について書いていきます。今回の処理を行うことで、遅延は約40msとなり、約150msほどの遅延を軽減します。

なお、OVRLipSyncの使い方に関しては解説しません。既にOVRLipSyncが実装できているプロジェクトを前提として進めていきます。

#動作環境

  • Windows 10 Version 1709 Build 16299.431
  • OVRLipSync Version 1.25.0
  • AniLipSync Ver.1.0.0
  • Unity2017.1.2f1
  • UnityChan_1_2_1

※AniLipSyncはOVRLipSyncのバージョンに依存しています。対応したバージョンを選択しましょう。

#ざっくりとした説明
OVRLipSyncの音声取得の方法を変えます。OVRLipSyncではMicrophone.Start()OnAudioFilterRead()の組み合わせによって音声を取得しています。それをAniLipSyncを使ってMicrophone.Start()AudioClip.GetData()の組み合わせによって音声を取得するように変えます。

また、AniLipSyncにはリミテッドアニメーションを再現できる機能がありますが、今回はそれを使いません。モーフの変更はこれまで通りOVRLipSyncのものを使い、遅延(レイテンシ)だけ軽減させます。

音声取得のより詳しい解説は以下が非常に参考になります
Unityでのマイク録音3種盛り:レイテンシ比較
【Unite Tokyo 2018】AniCast!東雲めぐちゃんの魔法ができるまで

#実装方法

  1. OVRLipSyncが動いているプロジェクトを用意
  2. AniLipSync.unitypackageをインポート
  3. AniLipSyncプレファブをシーンに配置
  4. OVRLipSyncのスクリプトを無効化
  5. AniLipSyncプレファブのAnimMorphTargetOVRLipSyncContextMorphTargetを入れ替える

複雑そうに見えますが、やることはOVRLipSyncを無効化し(OVRlipSyncコンポーネントは残す)、AniLipSyncプレファブを置いてAnimMorphTargetOVRLipSyncContextMorphTargetを入れ替えるだけです。

##1. OVRLipSyncが動いているプロジェクトを用意
前提として、OVRLipSyncが動いているプロジェクトがあるとします。状態としては以下の画像のようにOVRLipSyncコンポーネントがアタッチされたオブジェクト、OVRLipSyncContextMorphTarget.csOVRLipSyncContext.csOVRLipSyncMicInput.csの3つのコンポーネントがアタッチされたオブジェクトが存在しているとします。

LipSync.PNG

ovrbase.PNG

##2. AniLipSync.unitypackageをインポート。
以下よりAniLipSync.unitypackageをダウンロードできます。

DLができたらOVRLipSyncが実装されているプロジェクトにAniLipSync.unitypackageをUnityにインポートします。このAniLipSync.unitypackageをインポートすれば、AniLipSyncのスクリプトやプレファブなど必要なものを一括でインポートできます。なお、OVRLipSyncに関するファイルは含まれていないので注意してください。

##3. AniLipSyncプレファブをシーンに配置
Asesets/AniLipSync/PrefabsにAniLipSycプレファブがあります。それをシーンに配置しましょう。

##4. OVRLipSyncのスクリプトを無効化
AniLipSyncとOVRlipSyncで機能が被っているスクリプトや、競合するスクリプトがあります。音声入力と音声の受け渡し関連だけAniLipSyncを使い、モーフの変更部分だけOVRLipSyncを使いたいので関係のないコンポーネントを無効化していきます。

以下の3つのコンポーネントを無効化します(画像ではチェックを外してるだけですが、コンポーネントそのものをRemoveしてしまって大丈夫です)。
・ OVRLipSyncContextMorphTarget
・ OVRLipSyncContext
・ OVRLipSyncMicInput
talk.PNG

##5. AniLipSyncプレファブのAnimMorphTargetOVRLipSyncContextMorphTargetを入れ替える
AnimMorphTargetは、AniLipSyncに含まれるスクリプトで、リミテッドアニメーションを再現した上でリップシンクを行います。こちらのコンポーネントを無効化し、OVRLipSyncのOVRLipSyncContextMorphTargetを設定します。

  1. AniLipSyncのAnimMorphTargetコンポーネントを無効化する。
  2. AniLipSyncにOVRLipSyncContextMorphTargetをアタッチする。
  3. これまで通りOVRLipSyncContextMorphTargetの各パラメータを設定して完成。(特にSkinned Mesh RendereViseme To Blend Tagetsの設定は忘れないように)

lastset.PNG

##遅延と音声の合わせ方(配信)
配信ソフトの設定で250ms音声を遅延させるようにすると大体丁度良くなります。
OBSを使っている場合は、左上の編集>オーディオの詳細プロパティと選択し、そこからマイクの同期オフセットに入力するとできます。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3134303237312f64383234386632342d363238322d393637652d616637622d3834643365363230616639622e706e67.png
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3134303237312f34356664653761312d373863352d653562382d313633392d3963643562366330346561372e706e67.png

#参考

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?