private void FindMesh() { if (m_avatar.VisemeSkinnedMesh == null) { var smrs = m_avatar.GetComponentsInChildren <SkinnedMeshRenderer>(); foreach (var smr in smrs) { if (smr.sharedMesh.blendShapeCount >= (_visemeNames.Length + 4)) { m_avatar.VisemeSkinnedMesh = smr; GetBlendShapeNames(); return; } } } }
void AutoDetectLipSync() { FillVisemeNames(); var smrs = avatarDescriptor.GetComponentsInChildren <SkinnedMeshRenderer>(); foreach (var smr in smrs) { for (int i = 0; i < visemeNames.Count; ++i) { for (int b = 0; b < smr.sharedMesh.blendShapeCount; ++b) { if (visemeNames[i] == smr.sharedMesh.GetBlendShapeName(b) || (smr.sharedMesh.GetBlendShapeName(b) == "vrc.v_ee" && visemeNames[i] == "vrc.v_e")) { avatarDescriptor.lipSync = VRCSDK2.VRC_AvatarDescriptor.LipSyncStyle.VisemeBlendShape; avatarDescriptor.VisemeSkinnedMesh = smr; avatarDescriptor.VisemeBlendShapes = null; return; } } } } foreach (var smr in smrs) { if (smr.sharedMesh.blendShapeCount > 0) { avatarDescriptor.lipSync = VRCSDK2.VRC_AvatarDescriptor.LipSyncStyle.JawFlapBlendShape; avatarDescriptor.VisemeSkinnedMesh = null; avatarDescriptor.lipSyncJawBone = null; return; } } if (avatarDescriptor.GetComponent <Animator>().GetBoneTransform(HumanBodyBones.Jaw) != null) { avatarDescriptor.lipSync = VRCSDK2.VRC_AvatarDescriptor.LipSyncStyle.JawFlapBone; avatarDescriptor.lipSyncJawBone = avatarDescriptor.GetComponent <Animator>().GetBoneTransform(HumanBodyBones.Jaw); avatarDescriptor.VisemeSkinnedMesh = null; return; } }
void AutoDetectLipSync() { var smrs = avatarDescriptor.GetComponentsInChildren <SkinnedMeshRenderer>(); foreach (var smr in smrs) { if (smr.sharedMesh.blendShapeCount > 0) { avatarDescriptor.lipSyncJawBone = null; if (smr.sharedMesh.blendShapeCount > 1) { avatarDescriptor.lipSync = VRCSDK2.VRC_AvatarDescriptor.LipSyncStyle.VisemeBlendShape; avatarDescriptor.VisemeSkinnedMesh = smr; shouldRefreshVisemes = true; } else { avatarDescriptor.lipSync = VRCSDK2.VRC_AvatarDescriptor.LipSyncStyle.JawFlapBlendShape; avatarDescriptor.VisemeSkinnedMesh = null; } return; } } Animator a = avatarDescriptor.GetComponent <Animator>(); if (!a) { EditorUtility.DisplayDialog("Ooops", "This avatar has no Animator and can have no lipsync.", "OK"); } else if (a.GetBoneTransform(HumanBodyBones.Jaw) != null) { avatarDescriptor.lipSync = VRCSDK2.VRC_AvatarDescriptor.LipSyncStyle.JawFlapBone; avatarDescriptor.lipSyncJawBone = avatarDescriptor.GetComponent <Animator>().GetBoneTransform(HumanBodyBones.Jaw); avatarDescriptor.VisemeSkinnedMesh = null; return; } }
void AutoDetectLipSync() { var smrs = avatarDescriptor.GetComponentsInChildren <SkinnedMeshRenderer>(); foreach (var smr in smrs) { if (smr.sharedMesh.blendShapeCount > 0) { avatarDescriptor.lipSync = VRCSDK2.VRC_AvatarDescriptor.LipSyncStyle.JawFlapBlendShape; avatarDescriptor.VisemeSkinnedMesh = null; avatarDescriptor.lipSyncJawBone = null; return; } } if (avatarDescriptor.GetComponent <Animator>().GetBoneTransform(HumanBodyBones.Jaw) != null) { avatarDescriptor.lipSync = VRCSDK2.VRC_AvatarDescriptor.LipSyncStyle.JawFlapBone; avatarDescriptor.lipSyncJawBone = avatarDescriptor.GetComponent <Animator>().GetBoneTransform(HumanBodyBones.Jaw); avatarDescriptor.VisemeSkinnedMesh = null; return; } }