CRIWARE Unity Plugin Manual  Last Updated: 2024-12-05
[CriAtom]ICriLipsMorphインターフェースを継承したカスタムクラス

サンプル内容

概要

CriWare.ICriLipsMorph を継承したアプリケーション独自のモーフィングカスタムクラスの実装サンプルです。

Lips Expansion では以下の Unity エンジンの標準機能に対応したモーフィングクラスを用意しています。
  • UnityEngine.Animator
  • UnityEngine.SkinnedMeshRenderer
ただし、以下のような
  • 他社製ミドルウェアや内製の独自アニメーション機構などでキャラクターを制御している場合
  • Lipsライブラリの複数の解析結果を組み合わせてモーフィングさせたい場合
状況では Lips Expansion が提供しているモーフィングクラスでは十分にリップシンクができない場合があります。
このような場合は CriWare.ICriLipsMorph を継承することで
CriLipsDeformerコンポーネントのAtomSourceへの管理機能はそのまま、モーフィング部分の実装を差し替えできます。

以下ではインターフェースの継承方法とその取り扱い方法について説明します。

なお、 ICriLipsMorph を登録するコンポーネント自体の詳しい説明は以下のページを参考ください。


cri4u_samples_criatom_expansion_lipsync_scene06_main.png


シーン情報


ミドルウェア ADX LipSync(CRI Lips), CRI ADX (CRI Atom)
サンプル Expansionサンプル
格納場所 /cri/unity/samples/UnityProject/Assets/Scenes/criatom/expansion/LipSync
シーンファイル Scene_06_LipSync_InheritanceICriLipsMorph.unity
ACFファイル /cri/unity/samples/UnityProject/Assets/StreamingAssets/ADXLipSync/ForADXLipSyncSample.acf
ACBファイル /cri/unity/samples/UnityProject/Assets/StreamingAssets/ADXLipSync/ForADXLipSyncSample.acb


プログラムの解説

ICriLipsMorph を継承

本サンプルでは ICriLipsMorph を継承して、 OpenInfo によって口の開閉割合を制御しつつ
ボリューム値によって extraBlendShapeIndex を反応させるモーフィングクラスを実装します。
public class CustomLipsMorphBlendShapeExtra : ICriLipsMorph {
// OpenInfoの解析結果を反映するブレンドシェイプのインデックス
public int openIndex;
// ボリューム値によって反応するブレンドシェイプのインデックス
public int extraBlendShapeIndex;
public void Update(ICriLipsAnalyzeModule analyzeModule) {
analyzeModule.GetOpenInfo(out CriLipsMouth.OpenInfo openInfo);
Target.SetBlendShapeWeight(openIndex, openInfo.openY * 100);
float vol = analyzeModule.GetVolume();
float th = analyzeModule.GetSilenceThreshold();
// ノイズしきい値と比較することで、Lipsの無音判定がされたときにブレンドシェイプが0になる
Target.SetBlendShapeWeight(extraBlendShapeIndex, (vol > th) ? 100 : 0);
}
~以下略~
}

インスペクタ上で設定

ICriLipsMorph を継承したクラスは自動的に Morph Target プルダウンメニューから選択できます。
CustomLipsMorphBlendShapeExtra を選択し、必要な値を入力しています。

独自で実装したクラスの Editor 拡張をする場合は CustomPropertyDrawer を実装してください。