CRIWARE Unity Plugin Manual  Last Updated: 2024-04-24
[CriAtom]LipSyncプラグインをスクリプトから生成してリップシンク

サンプル内容

概要

アプリケーション実行中にリップシンク用コンポーネントを生成し、
キャラクターモデル向けに設定を行つつリアルタイムにリップシンクを行います。
cri4u_samples_criatom_expansion_lipsync_scene02_main.png

操作方法


  • [SetUp Component]ボタン
    • リップシンク用コンポーネントCriWare.CriLipsDeformerForAtomSource のセットアップを行います。
  • [Unsetup Component]ボタン
    • リップシンク用コンポーネントCriWare.CriLipsDeformerForAtomSource のセットアップを解除します。

  • [Playback Cue]ボタン
    • 音声をCriAtomSourceによって再生します。

シーン情報


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


プログラムの解説

まず Start() 関数内で CriLipsDeformerForAtomSource コンポーネントを AddComponent() し
LipSyncライブラリの初期化や口形状解析機の生成を行わせます。
private void Start()
{
this.criLipsDeformer = this.gameObject.AddComponent<CriLipsDeformerForAtomSource>();
}
キャラクターモデルの持つ各モーフターゲット情報を元に、CriWare.CriLipsMorphBlendShapeWidthHeight オブジェクトを生成し、
CriWare.CriLipsDeformerForAtomSource::LipsMorph へ登録します。
このとき、モーフターゲット名は GetBlendShapeIndex() などによって
インデックス値に変換してCriWare.CriLipsMorphBlendShapeWidthHeight::lipHeightIndex へ渡す必要があります。
CriLipsMorphBlendShapeWidthHeight lipsMorph = new CriLipsMorphBlendShapeWidthHeight();
lipsMorph.Target = skinnedMeshRenderer;
// Set morph target index to CriLipsMorphBlendShapeWidthHeight.
lipsMorph.lipHeightIndex
= skinnedMeshRenderer.sharedMesh.GetBlendShapeIndex("blendShape.LipHeightOpen");
lipsMorph.lipWidthOpenIndex
= skinnedMeshRenderer.sharedMesh.GetBlendShapeIndex("blendShape.LipWidthOpen");
lipsMorph.lipWidthCloseIndex
= skinnedMeshRenderer.sharedMesh.GetBlendShapeIndex("blendShape.LipWidthClose");
lipsMorph.tongueUpIndex
= skinnedMeshRenderer.sharedMesh.GetBlendShapeIndex("blendShape.Tongue_Up");
criLipsDeformer.LipsMorph = lipsMorph;
その後、CriWare.CriLipsDeformerForAtomSource をCriWare.CriAtomSource へ取り付けることで
取り付けたCriAtomSourceから再生される音声がADX LipSyncによって解析され、キャラクターモデルのモーフターゲットへ反映されます。
なお、取り付けたCriAtomSourceで再生予定の音声のサンプリングレートをCriWare.CriLipsDeformerForAtomSource::atomAnalyzer へ登録する必要があります。
criLipsDeformer.AttachToAtomSource(atomSource)
// Set the sampling rate of the cue to be played.
CriAtomEx.WaveformInfo waveformInfo;
CriAtom.GetAcb(atomSource.cueSheet).GetWaveFormInfo(atomSource.cueName, out waveformInfo);
criLipsDeformer.atomAnalyzer.SetSamplingRate(waveformInfo.samplingRate);