|
????????????????????????????????????????????????Unreal??Unity???????????
???????????????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????
????????????????????????????
1.1 ???????
???????????????????????????????????????????????????????????????????????????????????????
??????????????????????????????
- ??????????????????????????????????????????????????????????
- ?????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????
1.2 ??????
?????????????????????????????????RMS???????????????????
???????????????????????????RMS???????????????????????????
??????????????????????????????????????????????
?????????????
??????????????????RMS?????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????
??????????ADX LipSync???????
ADX LipSync?Criware??????????????ADX2????????
?????????????ADX2??????????????
2.1 LipSync??
LipSync??????????????????????????????????????????????????????????????????????????????????????????????
LipSync????????????????????
- ?????????????????????????????????????????????????????
- ????????????????wav???????????????????????wav???????????????????????????????
LipSync????????????????ADX2?????
- ?????LipSync?????????LipSync???????????????????
- ?ADX2?????????LipSync??ADX2??????????ADX2?Cue?Track????????????????????????????????????????????????ADX LipSync?????????????
????ADX LipSync??????????????????????????3D Max??????????????
2.2 ????????
????????????????????????3D Max??
???????Shift???????
??????
??????????????????
?????????????????????????????????????????????????
????????????????????????????????????
?????????????????
2.3 ??????
???????????????????????
ADX LipSync????????ADX2??????????????????ADX2????????
??????ADX LipSync????????Track???????????????????????
??????????????????????????????????????????????????????????????
???????????????????
- ??????????????????????????????????????????????????????????????????ADX2????????????????????????????
- ???????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????
???
- ???????????????????????????????????????
- ?????????????????????????AEUIO?????????????????????
???ADX LipSync????ADX2???????????ADX2?????????????????????????????????????????????
?????????????????????????????????????????????????
2.4 Unreal??
???????????????????Unreal????????????????????????????????Unreal?????????????
????????3D Max?????????????Unreal????????Unreal????????????????????????
?????????ADX2????????????????????Cue???????
???????Cue?????????????????????????????????????????
???????????????
??????
????????????????
????Atom Component?Atom Component????Cue??????Cue???wav????ADX LipSync????Cue???????????????????????????Cue??????
????LipSync
?????????????????????????????????LipSync??????????????Set ADXLipSync??????????LipSync??????
?????Lips Atom Analyzer??????????????????Init?????????Init?????Attach??
???Get Info??Lip Width???????????????????????????????0???????????????????
?????????????????????????????
??Event BeginPlay?????Set ADXLipSync??????????????Play Atom????????????????
?????????
????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????
?????????????
?????Get Info????????Lip Width???????LipWidthOpen???Lip Height?????LipHeightOpen?????Tongue Position?????Tongue_Up????Info???????????????????????????????????????
????????????????
??????????????????????????????????????????????????
???????????
??????????????????????????????????????????????
??????????????Bus??Peak Leavels???????LipWidthOpen??LipHeightOpen???
????????????????????????????????????????????????????????????
???????????
?????Unreal??????????????????Cue??????????????????????????????????????UI?????????????
????????"TextBlock300"?"TextBlock492"???????TXT?????
??????String?????????CueNameParam??LipsyncModleNamePara????Cue????????????
?????????????????3?????????????UI????????UI?????????????????
????????????UI????????????????
?????????????????????????bool?????
???bool???????????????
???????????????????????bool??????????UI????????????
??????????????????????????????bool?????????UI??LipsyncModleNamePara?????
??????????????????bool???????????bool?????????????????????????
??????Event Tick???????????bool???????????????????????????????????Cue??????????info???????????????????????????
????????????????????????????????????????????????????????????????UI??????
?????????????????????????
?????????????????????????
??????????????????????????????????????????????????????????????????????????????bool???????Event Tick????????????????????????????
????????Sequence Flip????????????????????????????????????????????
????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????0???????Reset???????
????Reset????????????????????????????????0????????????????????????????????????
???????Event Tick??????
?????????????????????????Finish?False?????Reset???Reset????????????????????????
???????????????ADX LipSync????????????????????????????????
??????????????????????????????????????
?????
??ADX LipSync???????ADX2????????????????????????????????????????????Cue????????????????????
???????????CueList??????Sound Atom Cue???????????Cue?????????
?????????????CueChoice???????????????
???UI????Cue Index????????UI??????????
???????????????????????????????????????CueList??Cue????????Cue??????????
CueIndex??????UI????????????????UI????????????????CueIndex????
????????????Cue?Index??????????????????????????????Cue Index?????????Cue?
??????????Cue??????????????????????????
????????
???????CueIndex????????????????1?????????????????????????????????????????????????????????CueList?Length???????????
??????????CueChoice????????????Cue Index????????????CueList??Cue?????????
???????????Cue?????????????Cue??????????????????????
?????????????UI???????????????????????Cue????????????????????????????????
????????????????????????????????????????????????????Cue?????????????????????????????????????
?????????
????????????????????Volume?????????????????????????????????????????????????????????????????????????????
??????????????????????????????
2.5 Unity??
?Unreal????????????????Unity?????Object?????????????????????????????????????????????????
?????
??????????????????????????????????????????????????
????Hierarchy????????
???????
???????????????????????????????????????????????????????
??????6????????????????
- "Button_play"???Cue????????????????????
- "Button_stop"???Cue??????????????????????
- "Button_>"???Cue???????????????????????
- "Button_<"???Cue???????????????????????
- "Button_textshowcue"???Cue??????????Cue????????Cue?????
- "Button_modleselector"??????????????????????????????????
????????????????????????????????????????????Cue?????????????????????????????????????
???????
?????????????????????????????????????ADX2????????Unity????????????Object?Hierarchy???????CRIWARE?????Add Component?????Cri Atom?????
???????Cri Atom?????acf?acb??awb??????????
?????
???????????????????????????????????????
?????Hierarchy???????Object?????ModelControl????????Add Component?????????"Cri Lips Shape For Atom Source"?
????????????????????Cri Atom Source??SkinnedMeshRenderer?
Cri Atom Source??????????SkinnedMeshRenderer????????Hierarchy????????????????SkinnedMeshRenderer??????
???????????????
????BlendShapeType??????????????????????????????????????? ??????????????????
?????????????????????????????????????????????????????????
????ModelControl???Add Component????Cri Atom Source???
????????Hierarcgy??ModelControl??????????"Cri Lips Shape For Atom Source"??????CriAtomSource??
???????"Cri Lips Shape For Atom Source"??????????????????????????
?????
????????????????????????????????????????Play?Stop???????Cue?????????????????????????????
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- public class ADXLipsync : MonoBehaviour
- {
- #region
- public CriAtomSource atomsource = null;
- public string cueSheetName = "";
- public CriLipsShapeForAtomSource shapeForAtomSource = null;
- private CriAtomExAcb acb = null;
- private CriAtomEx.CueInfo[] cueInfos;
- private int selectedCueIndex = 0;
- public Text textname;
- public Text modelName;
- #endregion
- // ???????/????????/????????
- #region
- void Start()
- {
- if (!string.IsNullOrEmpty(cueSheetName))
- {
- acb = CriAtom.GetAcb(cueSheetName);
- cueInfos = acb.GetCueInfoList();
- modelName.text = "JapaneseAIUEO";
- shapeForAtomSource.blendShapeType = CriLipsShape.BlendShapeType.JapaneseAIUEO;
- }
- }
- // ????????
- void Update()
- {
- textname.text = cueInfos[selectedCueIndex].name;
- }
- // play????????
- public void PlayCue()
- {
- atomsource.player.SetCue(acb, cueInfos[selectedCueIndex].name);
- if (atomsource.status == CriAtomSource.Status.Playing)
- {
- atomsource.player.Stop();
- }
- atomsource.player.Start();
- }
- // stop????????
- public void StopCue()
- {
- atomsource.player.Stop();
- }
- // ???????index
- public void SetSelectedCueIndexIncrease()
- {
- if (selectedCueIndex >= cueInfos.Length - 1)
- {
- selectedCueIndex = 0;
- }
- else
- {
- selectedCueIndex++;
- }
- }
- public void SetSlectedCueIndexDecrease()
- {
- if (selectedCueIndex <= 0)
- {
- selectedCueIndex = cueInfos.Length - 1;
- }
- else
- {
- selectedCueIndex--;
- }
- }
- // ??????
- public void changeModle()
- {
- switch (shapeForAtomSource.blendShapeType)
- {
- case CriLipsShape.BlendShapeType.WidthHeight:
- shapeForAtomSource.blendShapeType = CriLipsShape.BlendShapeType.JapaneseAIUEO;
- SetBlendShapeWidthHeightAtSilence(shapeForAtomSource);
- modelName.text = "JapaneseAIUEO";
- break;
- case CriLipsShape.BlendShapeType.JapaneseAIUEO:
- shapeForAtomSource.blendShapeType = CriLipsShape.BlendShapeType.WidthHeight;
- setSetBlendShapeJapaneseAIUEOAtSilence(shapeForAtomSource);
- modelName.text = "WidthHeight";
- break;
- default:
- break;
- }
- }
- // ????????
- /// <summary>
- /// ????????
- /// </summary>
- private void SetBlendShapeWidthHeightAtSilence(CriLipsShapeForAtomSource lipsShapeForAtomSurce)
- {
- BlendShapeWeighString(lipsShapeForAtomSurce.skinnedMeshRenderer, lipsShapeForAtomSurce.nameMapping.WidthHeightName.lipHeightOpenName, 0.0f);
- BlendShapeWeighString(lipsShapeForAtomSurce.skinnedMeshRenderer, lipsShapeForAtomSurce.nameMapping.WidthHeightName.lipWidthCloseName, 0.0f);
- BlendShapeWeighString(lipsShapeForAtomSurce.skinnedMeshRenderer, lipsShapeForAtomSurce.nameMapping.WidthHeightName.lipWidthOpenName, 0.0f);
- BlendShapeWeighString(lipsShapeForAtomSurce.skinnedMeshRenderer, lipsShapeForAtomSurce.nameMapping.WidthHeightName.tonguePosition, 0.0f);
- }
- /// <summary>
- /// ??????
- /// </summary>
- private void setSetBlendShapeJapaneseAIUEOAtSilence(CriLipsShapeForAtomSource lipsShapeForAtomSurce)
- {
- BlendShapeWeighString(lipsShapeForAtomSurce.skinnedMeshRenderer, lipsShapeForAtomSurce.nameMapping.japaneseAIUEOName.a, 0.0f);
- BlendShapeWeighString(lipsShapeForAtomSurce.skinnedMeshRenderer, lipsShapeForAtomSurce.nameMapping.japaneseAIUEOName.e, 0.0f);
- BlendShapeWeighString(lipsShapeForAtomSurce.skinnedMeshRenderer, lipsShapeForAtomSurce.nameMapping.japaneseAIUEOName.i, 0.0f);
- BlendShapeWeighString(lipsShapeForAtomSurce.skinnedMeshRenderer, lipsShapeForAtomSurce.nameMapping.japaneseAIUEOName.o, 0.0f);
- BlendShapeWeighString(lipsShapeForAtomSurce.skinnedMeshRenderer, lipsShapeForAtomSurce.nameMapping.japaneseAIUEOName.u, 0.0f);
- }
- private void BlendShapeWeighString(SkinnedMeshRenderer skinnedMeshRenderer,string blendShapeName,float weight)
- {
- if (string.IsNullOrEmpty(blendShapeName))
- {
- return;
- }
- int index = skinnedMeshRenderer.sharedMesh.GetBlendShapeIndex(blendShapeName);
- if (index < 0)
- {
- return;
- }
- skinnedMeshRenderer.SetBlendShapeWeight(index, weight);
- }
- #endregion
- }
复制代码
???????????????????
- ?????acb?acb?????????????????????Cue???
- ????acb??????cue????????????
- ???????PlayCue?StopCue?SetSelectedCueIndexIncrease??SetSlectedCueIndexDecrease?????????Cue???Cue????Cue????????acb????CueIndex?
- ???????changeModle??????????????????????????????????????
- ?changeModle??????SetBlendShapeWidthHeightAtSilence?setSetBlendShapeJapaneseAIUEOAtSilence??????????????????????????????????????
??????????????????????????????????????
?????????????????????????????????????
ADX LipSync??????????????ADX2????????????????????????????????????????????
???????????????????????????????????
??????????
?????GWB????
????https://mp.weixin.qq.com/s/aVwiImNgcNs_q_OShyLvtw
|
|