CRIWARE Unity Plugin Manual  Last Updated: 2024-07-12
[CriAtom]使用 LipSync 插件重用 CriLipsDeformerForAtomSource

示例内容

概述

重复使用一个 CriLipsDeformerForAtomSource 对多个角色进行口型同步。

cri4u_samples_criatom_expansion_lipsync_scene05_main.png

场景信息


中间件 ADX LipSync(CRI Lips), CRI ADX (CRI Atom)
示例 Expansion示例
存储位置 /CRIWARE/SDK/unity/samples/UnityProject/Assets/Scenes/criatom/expansion/LipSync
场景文件 Scene_05_LipSync_ReuseCriLipsDeformer.unity
ACF文件 /CRIWARE/SDK/unity/samples/UnityProject/Assets/StreamingAssets/ADXLipSync/ForADXLipSyncSample.acf
ACB文件 /CRIWARE/SDK/unity/samples/UnityProject/Assets/StreamingAssets/ADXLipSync/ForADXLipSyncSample.acb


程序说明

重复使用一个 CriLipsDeformerForAtomSource 对多个角色进行口型同步。

CriWare.CriLipsAtomAnalyzer 由 CriLipsDeformer 内部管理,消耗大量非托管内存。
因此,为了防止创建不必要的句柄,可以创建的 CriLipsAtomAnalyzer 的最大数量在初始化 Lips 库时确定。

我们建议重复使用生成的 CriWare.CriLipsAtomAnalyzer,而不是准备多个 CriWare.CriLipsAtomAnalyzer。

关于重复使用

示例中准备了以下资源以用于重复使用:

以下对每种资源进行说明。

CriAtomSource

播放角色的语音Cue。
该示例中每个角色有一个。
注意:
该示例假设为每个角色提供单独音频播放器。
音频播放播放器不一定需要按角色分隔。此情况请跳过下面对 CriWare.CriLipsDeformerForAtomSource.AttachToAtomSource 的调用。

private CriAtomExPlayback PlayAndLipSync(CriLipsDeformerForAtomSource lipsDeformer, CriAtomSource atomSource, ICriLipsMorph lipsMorph) {
// 不更换分析器
// var result = lipsDeformer.AttachToAtomSource(atomSource);
Debug.Assert(result);
lipsDeformer.LipsMorph = lipsMorph;
UpdateSamplingRate(lipsDeformer.atomAnalyzer, atomSource);
return atomSource.Play();
}

ICriLipsMorph

这是一个实际执行角色模型口型同步的类。 每个角色必须准备一个。
要从 C# 脚本生成实例,请执行以下操作:
private ICriLipsMorph criLipsMorphForRingo = null;
private void Start() {
criLipsMorphForRingo = new CriLipsMorphBlendShapeJapaneseVowel()
{
Target = ringo,
aIndex = ringo.sharedMesh.GetBlendShapeIndex("MOUTH_A"),
iIndex = ringo.sharedMesh.GetBlendShapeIndex("MOUTH_I"),
uIndex = ringo.sharedMesh.GetBlendShapeIndex("MOUTH_U"),
eIndex = ringo.sharedMesh.GetBlendShapeIndex("MOUTH_E"),
oIndex = ringo.sharedMesh.GetBlendShapeIndex("MOUTH_O"),
};
}
如果设置了 CriWare.CriLipsDeformerForAtomSource.LipsMorph ,则该被设置的类将从下次开始被用于口型同步。
private CriAtomExPlayback PlayAndLipSync(CriLipsDeformerForAtomSource lipsDeformer, CriAtomSource atomSource, ICriLipsMorph lipsMorph) {
lipsDeformer.LipsMorph = lipsMorph;
}
此时,原本设置到 CriWare.CriLipsDeformerForAtomSource.LipsMorph 的 ICriLipsMorph 会被调用 CriWare.ICriLipsMorph.Reset 并迁移至闭嘴状态。

CriLipsDeformerForAtomSource

内部有一个唇形同步音频分析仪。
负责AtomSource和ICriLipsMorph之间的引用关系。

我们建议在需要口型同步的场景中放置固定数量的资源,并在需要时提供对每个资源的引用,如本示例所示。