public override void PostHook(NodeImporter impoter, Transform trans, VGltf.Types.Node gltfNode) { if (!GE.ContainsExtensionUsed(impoter.Container.Gltf, AvatarType.ExtensionName)) { return; } AvatarType extAvatar; if (!gltfNode.GetExtension(AvatarType.ExtensionName, out extAvatar)) { return; } var extHD = extAvatar.HumanDescription; var hd = new HumanDescription(); hd.upperArmTwist = extHD.UpperArmTwist; hd.lowerArmTwist = extHD.LowerArmTwist; hd.upperLegTwist = extHD.UpperLegTwist; hd.lowerLegTwist = extHD.LowerLegTwist; hd.armStretch = extHD.ArmStretch; hd.legStretch = extHD.LegStretch; hd.feetSpacing = extHD.FeetSpacing; hd.skeleton = extHD.Skeleton.Select(s => { // TODO: Coord return(new SkeletonBone { name = s.Name, position = PrimitiveImporter.AsVector3(s.Position), rotation = PrimitiveImporter.AsQuaternion(s.Rotation), scale = PrimitiveImporter.AsVector3(s.Scale), }); }).ToArray(); hd.human = extHD.Human.Select(h => { var extLimit = h.Limit; var limit = new HumanLimit { useDefaultValues = extLimit.UseDefaultValues, min = PrimitiveImporter.AsVector3(extLimit.Min), max = PrimitiveImporter.AsVector3(extLimit.Max), center = PrimitiveImporter.AsVector3(extLimit.Center), axisLength = extLimit.AxisLength, }; return(new HumanBone { boneName = h.BoneName, humanName = h.HumanName, limit = limit, }); }).ToArray(); var go = trans.gameObject; var anim = go.AddComponent <Animator>(); anim.avatar = AvatarBuilder.BuildHumanAvatar(go, hd); }
public override void PostHook(NodeExporter exporter, Transform trans, VGltf.Types.Node gltfNode) { var go = trans.gameObject; var anim = go.GetComponent <Animator>(); if (anim == null) { return; } var extAvatar = new AvatarType(); var hd = anim.avatar.humanDescription; var extHD = new AvatarType.HumanDescriptionType(); extHD.UpperArmTwist = hd.upperArmTwist; extHD.LowerArmTwist = hd.lowerArmTwist; extHD.UpperLegTwist = hd.upperLegTwist; extHD.LowerLegTwist = hd.lowerLegTwist; extHD.ArmStretch = hd.armStretch; extHD.LegStretch = hd.legStretch; extHD.FeetSpacing = hd.feetSpacing; // Regenerate skeleton by referencing bones to support normalized bones. var allNodes = anim.GetComponentsInChildren <Transform>(); extHD.Skeleton = allNodes.Where(n => { return(!( (n.GetComponent <MeshRenderer>() != null) || (n.GetComponent <SkinnedMeshRenderer>() != null) )); }).Select(n => { // TODO: Coord return(new AvatarType.HumanDescriptionType.SkeletonBone { Name = n.name, Position = PrimitiveExporter.AsArray(n.localPosition), Rotation = PrimitiveExporter.AsArray(n.localRotation), Scale = PrimitiveExporter.AsArray(n.localScale), }); }).ToList(); extHD.Human = hd.human.Select(h => { // TODO: Coord var extLimit = new AvatarType.HumanDescriptionType.HumanLimit { UseDefaultValues = h.limit.useDefaultValues, Min = PrimitiveExporter.AsArray(h.limit.min), Max = PrimitiveExporter.AsArray(h.limit.max), Center = PrimitiveExporter.AsArray(h.limit.center), AxisLength = h.limit.axisLength, }; return(new AvatarType.HumanDescriptionType.HumanBone { BoneName = h.boneName, HumanName = h.humanName, Limit = extLimit, }); }).ToList(); extAvatar.HumanDescription = extHD; // gltfNode.AddExtension(AvatarType.ExtensionName, extAvatar); GE.AddExtensionUsed(exporter.Gltf, AvatarType.ExtensionName); }