static int _CreateHumanLimit(IntPtr L) { LuaScriptMgr.CheckArgsCount(L, 0); HumanLimit obj = new HumanLimit(); LuaScriptMgr.PushValue(L, obj); return(1); }
private void Serialize(BinaryWriter bn, HumanLimit value) { bn.Write(value.axisLength); Serialize(bn, value.center); Serialize(bn, value.max); Serialize(bn, value.min); bn.Write(value.useDefaultValues); }
private static HumanDescription ReadHumanDescription() { HumanDescription humanDescription = new HumanDescription(); List <HumanBone> humanBones = new List <HumanBone>(); HumanTemplate template = Resources.Load(humanTemplateFile) as HumanTemplate; string[] boneNames = HumanTrait.BoneName; //List<string> mapping = new List<string>(); foreach (string boneName in boneNames) { HumanBone newBone = new HumanBone(); newBone.humanName = boneName; newBone.boneName = template.Find(boneName); if (newBone.boneName != "") { HumanLimit limit = new HumanLimit(); limit.useDefaultValues = true; newBone.limit = limit; humanBones.Add(newBone); } } humanDescription.human = humanBones.ToArray(); humanDescription.upperArmTwist = 0.5f; humanDescription.lowerArmTwist = 0.5f; humanDescription.upperLegTwist = 0.5f; humanDescription.lowerLegTwist = 0.5f; humanDescription.armStretch = 0.05f; humanDescription.legStretch = 0.05f; humanDescription.feetSpacing = 0.0f; humanDescription.hasTranslationDoF = true; //if (secondPass && _isAnimation) { //skeletonDescription = modelImporter.humanDescription.skeleton; List <SkeletonBone> skeletonBones = new List <SkeletonBone>(); for (int i = 0; i < skeletonDescription.Length; i++) { SkeletonBone newSkeletonBone = new SkeletonBone(); newSkeletonBone.name = skeletonDescription[i].name; newSkeletonBone.position = skeletonDescription[i].position; newSkeletonBone.rotation = skeletonDescription[i].rotation; newSkeletonBone.scale = skeletonDescription[i].scale; //newSkeletonBone.transformModified = skeletonDescription[i].transformModified; skeletonBones.Add(newSkeletonBone); } humanDescription.skeleton = skeletonBones.ToArray(); } return(humanDescription); }
private HumanLimit DeSerializeHumanLimit(BinaryReader br) { var res = new HumanLimit(); res.axisLength = br.ReadSingle(); res.center = DeserializeVector3(br); res.max = DeserializeVector3(br); res.min = DeserializeVector3(br); res.useDefaultValues = br.ReadBoolean(); return(res); }
protected override void ReadFromImpl(object obj) { base.ReadFromImpl(obj); HumanLimit uo = (HumanLimit)obj; useDefaultValues = uo.useDefaultValues; min = uo.min; max = uo.max; center = uo.center; axisLength = uo.axisLength; }
protected override object WriteToImpl(object obj) { obj = base.WriteToImpl(obj); HumanLimit uo = (HumanLimit)obj; uo.useDefaultValues = useDefaultValues; uo.min = min; uo.max = max; uo.center = center; uo.axisLength = axisLength; return(uo); }
public HumanAxes(Avatar avatar, HumanBodyBones humanBone) { // bake non-uniform sign into quaternions var sign3 = GetLimitSignFull(avatar, humanBone); var signQ = Quaternion.LookRotation(new Vector3(0, 0, sign3.x * sign3.y), new Vector3(0, sign3.x * sign3.z, 0)); sign = sign3.x * sign3.y * sign3.z; preQ = (Quaternion)GetPreRotation.Invoke(avatar, new object[] { humanBone }) * signQ; postQ = (Quaternion)GetPostRotation.Invoke(avatar, new object[] { humanBone }) * signQ; limit = GetHumanLimit(avatar, humanBone); limit.axisLength *= sign3.y * sign3.z; }
public static int constructor(IntPtr l) { int result; try { HumanLimit humanLimit = default(HumanLimit); LuaObject.pushValue(l, true); LuaObject.pushValue(l, humanLimit); result = 2; } catch (Exception e) { result = LuaObject.error(l, e); } return(result); }
public HumanAxes(Transform bone, Vector3 dir = new Vector3()) { if (dir == Vector3.zero) // guess bone direction { foreach (Transform c in bone) { dir += c.localPosition; } if (dir == Vector3.zero) { dir = -bone.InverseTransformPoint(bone.parent.position); } dir = bone.InverseTransformVector(Vector3.down); } sign = 1; postQ = Quaternion.FromToRotation(Vector3.right, dir); preQ = bone.localRotation * postQ; limit = new HumanLimit { }; }
static int get_max(IntPtr L) { object o = LuaScriptMgr.GetLuaObject(L, 1); if (o == null) { LuaTypes types = LuaDLL.lua_type(L, 1); if (types == LuaTypes.LUA_TTABLE) { LuaDLL.luaL_error(L, "unknown member name max"); } else { LuaDLL.luaL_error(L, "attempt to index max on a nil value"); } } HumanLimit obj = (HumanLimit)o; LuaScriptMgr.PushValue(L, obj.max); return(1); }
static int set_axisLength(IntPtr L) { object o = LuaScriptMgr.GetLuaObject(L, 1); if (o == null) { LuaTypes types = LuaDLL.lua_type(L, 1); if (types == LuaTypes.LUA_TTABLE) { LuaDLL.luaL_error(L, "unknown member name axisLength"); } else { LuaDLL.luaL_error(L, "attempt to index axisLength on a nil value"); } } HumanLimit obj = (HumanLimit)o; obj.axisLength = (float)LuaScriptMgr.GetNumber(L, 3); LuaScriptMgr.SetValueObject(L, 1, obj); return(0); }
static int set_center(IntPtr L) { object o = LuaScriptMgr.GetLuaObject(L, 1); if (o == null) { LuaTypes types = LuaDLL.lua_type(L, 1); if (types == LuaTypes.LUA_TTABLE) { LuaDLL.luaL_error(L, "unknown member name center"); } else { LuaDLL.luaL_error(L, "attempt to index center on a nil value"); } } HumanLimit obj = (HumanLimit)o; obj.center = LuaScriptMgr.GetNetObject <Vector3>(L, 3); LuaScriptMgr.SetValueObject(L, 1, obj); return(0); }
static int set_useDefaultValues(IntPtr L) { object o = LuaScriptMgr.GetLuaObject(L, 1); if (o == null) { LuaTypes types = LuaDLL.lua_type(L, 1); if (types == LuaTypes.LUA_TTABLE) { LuaDLL.luaL_error(L, "unknown member name useDefaultValues"); } else { LuaDLL.luaL_error(L, "attempt to index useDefaultValues on a nil value"); } } HumanLimit obj = (HumanLimit)o; obj.useDefaultValues = LuaScriptMgr.GetBoolean(L, 3); LuaScriptMgr.SetValueObject(L, 1, obj); return(0); }
static HumanLimit GetHumanLimit(Avatar avatar, HumanBodyBones humanBone) { var limit = new HumanLimit { useDefaultValues = true }; #if UNITY_EDITOR // this can be improved when avatar.humanDescription is exposed in unity 2019 var importer = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(avatar)) as ModelImporter; var human = (importer?.humanDescription)?.human; if (human != null) { for (int i = 0; i < human.Length; i++) { if (human[i].humanName == HumanTrait.BoneName[(int)humanBone]) { limit = human[i].limit; break; } } } #endif limit.axisLength = (float)GetAxisLength.Invoke(avatar, new object[] { humanBone }); // not in humanDescription if (limit.useDefaultValues) { Vector3 min = new Vector3(), max = new Vector3(); for (int i = 0; i < 3; i++) { var m = HumanTrait.MuscleFromBone((int)humanBone, i); min[i] = m >= 0 ? HumanTrait.GetMuscleDefaultMin(m) : 0; // invalid input will crash max[i] = m >= 0 ? HumanTrait.GetMuscleDefaultMax(m) : 0; } limit.min = min; limit.max = max; } return(limit); }
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 HumanRigBone(string humanBoneName, HumanLimit humanLimit, params string[] boneNames) : this(humanBoneName, boneNames) { this.humanLimit = humanLimit; }