MouthMovement

[最終更新日:2020/01/30]

概要

MouthMovementは、リップシンク用パラメータの現在の値に対して開閉状態の値を適用する機能です。
モーションに設定されたリップシンク用のカーブや再生している音声ファイルからリアルタイムにサンプリングした値などをモデルに適用することが可能です。
モデルにリップシンクのパラメータを設定する方法については こちら をご覧ください。

MouthMovementで設定するものは口の開閉状態のみです。
口の形状を母音に合わせるというような操作をすることはできません。

Unity上でリップシンク用のパラメータを指定するには、Cubismエディタでモデルに設定しておく他、Unity上でユーザが任意に指定することができます。

Cubism SDK for Unity におけるMouthMovementは3種類の要素によって構成されています。

  1. パラメータ指定用のコンポーネント
  2. 各パラメータに値を適用するコンポーネント
  3. 2で適用する値の操作

 

1. パラメータ指定用のコンポーネント

MouthMovementに使用するパラメータを指定するには、CubismMouthParameterを使用します。

CubismMouthParameterはMonoBehaviourを継承したコンポーネントで、
[Prefabのルート]/Parameters/ 以下に配置されたGameObjectにアタッチして使用します。
これがアタッチされたGameObjectと同じIDのパラメータをリップシンク用のパラメータとして扱います。

モデル自体にリップシンク用のパラメータが設定されている場合、インポートの際にそのパラメータのGameObjectにCubismMouthParameterがアタッチされます。

CubismMouthParameterは参照先を取得するためのマーカーとして使用しているので、内部では何も処理を行っておらず、データも持っていません。

 

2. 各パラメータに値を適用するコンポーネント

各パラメータに開閉の値を適用するには、CubismMouthControllerを使用します。
これはMonoBehaviourを継承したコンポーネントで、使用する際はCubismのPrefabのルートにアタッチします。

初期化時に、PrefabにアタッチされたすべてのCubismMouthParameterの参照を取得します。
実行中にまばたき用のパラメータを追加/削除した場合、CubismMouthController.Refresh()を呼んで参照を取得し直します。

 

CubismMouthControllerは、毎フレームのLateUpdate()のタイミングで、CubismMouthParameterでマーキングされたパラメータに対してCubismMouthController.MouthOpeningの値を適用します。

 

MouthOpeningに設定する値は0.0f~1.0fの範囲です。
CubismMouthControllerはこの値を対象のパラメータに対して、CubismMouthController.BlendModeで設定された計算方式で適用します。

このMouthOpeningの値を外から操作することで、モデルの口を開閉させることができます。

 

 

3. 2で適用する値の操作

「2. 各パラメータに値を適用するコンポーネント」で説明した通り、CubismMouthController.MouthOpeningの値を操作することで、リップシンク用のパラメータに値を適用できます。

Cubism SDK for Unity には、以下の3種類の方法でこの値を操作することができます。

  • モーションによって値を操作
  • 周期的に値を操作
  • AudioClipからサンプリングして値を操作

また、ユーザ側でこの値を操作する処理を実装していただくことで、リップシンクの速度やタイミング等を独自にカスタマイズすることができます。

Tips
CubismMouthController.MouthOpeningを操作するコンポーネントの実行順がCubismMouthControllerよりも後である場合、意図した動作にならない可能性があります。
もし動作に問題が生じた、ユーザ側で明示的にコンポーネントの実行順を制御することで回避が可能です。
Cubism SDK for Unity では各コンポーネントの実行順をのCubismUpdateControllerで制御しているので、これを利用することもできます。

また、上記3種類の設定方法はそれぞれが同じ値を操作しているため、工夫無しで一つのモデルに共存させることは難しくなっております。

 

モーションによって値を操作

まばたき用のパラメータを設定したモデルを使用してCubismのAnimatorでモーションを作成する場合、まばたき用のカーブを設定することが可能です。

まばたき用のカーブが設定された.motion3.jsonをUnityプロジェクトにインポートした場合、AnimationClipにはCubismMouthController.MouthOpeningの値を対象としてそのカーブが生成されます。
そのため、そのAnimationClipをAnimatorコンポーネントなどで再生することでCubismMouthController.MouthOpeningの値が操作されます。

 

周期的に値を操作

周期的にリップシンク用の値を操作させるには、CubismAutoMouthInputを使用します。
CubismAutoMouthInputは、正弦波でリップシンクの値を算出して設定するコンポーネントです。

CubismAutoMouthInputを使用するには、CubismのPrefabのルートにアタッチします。

CubismAutoMouthInputには1つの設定項目があります。

  • Timescale

正弦波の周期が変化します。

 

 

AudioClipからサンプリングして値を操作

Unity上で再生���れる音声からリップシンクの値を設定する場合はCubismAudioMouthInputを使用します。

CubismAudioMouthInputは、AudioSourceから取得した再生中の音声情報からサンプリングしてリアルタイムにリップシンクの値を生成、設定します。

CubismAudioMouthInputを使用するには、CubismのPrefabのルートにアタッチします。

 

CubismAudioMouthInputには4つの設定項目があります。

  • AudioInput

サンプリングするAudioSourceの参照です。

  • SamplingQuality

サンプリングする音声の精度です。

  • Gain

サンプリングした値の倍率です。
1で等倍、値を大きくするほどリップシンクの値も大きくなります。

  • Smoothing

サンプリングした値のスムージング量です。
値が大きいほどリップシンクの値が滑らかに変化します。

© 2010 - 2020 Live2D Inc.