فهرست منبع

Dynamic bones: slackness ok

lviguier 7 ماه پیش
والد
کامیت
16499b9193
4فایلهای تغییر یافته به همراه8 افزوده شده و 18 حذف شده
  1. 2 2
      h3d/anim/Skin.hx
  2. 4 14
      h3d/scene/Skin.hx
  3. 1 1
      hxd/fmt/fbx/HMDOut.hx
  4. 1 1
      hxd/fmt/hmd/Library.hx

+ 2 - 2
h3d/anim/Skin.hx

@@ -42,9 +42,9 @@ class DynamicJoint extends Joint {
 	public var speed : h3d.Vector;
 	public var speed : h3d.Vector;
 	public var radius : Float = 0.0;
 	public var radius : Float = 0.0;
 	public var damping : Float = 0.4;
 	public var damping : Float = 0.4;
-	public var stiffness : Float = 0.05;
+	public var stiffness : Float = 0.1;
 	public var resistance : Float = 0.9;
 	public var resistance : Float = 0.9;
-	public var slackness : Float = 0.1;
+	public var slackness : Float = 0.01;
 
 
 	public function new() {
 	public function new() {
 		super();
 		super();

+ 4 - 14
h3d/scene/Skin.hx

@@ -355,7 +355,6 @@ class Skin extends MultiMaterial {
 
 
 		for( j in skinData.allJoints ) {
 		for( j in skinData.allJoints ) {
 			if ( j.follow != null ) continue;
 			if ( j.follow != null ) continue;
-			if (j.index >= currentPalette.length) continue;
 
 
 			var dynJoint = Std.downcast(j, h3d.anim.Skin.DynamicJoint);
 			var dynJoint = Std.downcast(j, h3d.anim.Skin.DynamicJoint);
 			if (dynJoint == null) continue;
 			if (dynJoint == null) continue;
@@ -369,7 +368,7 @@ class Skin extends MultiMaterial {
 			// var globalForce = new h3d.Vector(0, 0, 0);
 			// var globalForce = new h3d.Vector(0, 0, 0);
 			// dynJoint.speed += globalForce * (1.0 - dynJoint.resistance);
 			// dynJoint.speed += globalForce * (1.0 - dynJoint.resistance);
 
 
-			// // Damping (inertia attenuation)
+			// Damping (inertia attenuation)
 			// dynJoint.speed *= 1.0 - dynJoint.damping;
 			// dynJoint.speed *= 1.0 - dynJoint.damping;
 			// if (dynJoint.speed.lengthSq() > DynamicJoint.SLEEP_THRESHOLD) {
 			// if (dynJoint.speed.lengthSq() > DynamicJoint.SLEEP_THRESHOLD) {
 			// 	newWorldPos += dynJoint.speed * deltaTime;
 			// 	newWorldPos += dynJoint.speed * deltaTime;
@@ -382,18 +381,9 @@ class Skin extends MultiMaterial {
 
 
 			// Slackness (length keeper)
 			// Slackness (length keeper)
 			var dirToParent = (newWorldPos - tmp2CurrentAbsPose[j.parent.index].getPosition()).normalized();
 			var dirToParent = (newWorldPos - tmp2CurrentAbsPose[j.parent.index].getPosition()).normalized();
-			if (parentMovement.length() != 0) {
-
-			}
-			trace(dynJoint.name + " " + convertVec(dirToParent));
-			// var tmp = new h3d.Matrix();
-			// tmp.multiply3x4(dynJoint.relPos, tmp3CurrentAbsPose[j.parent.index]);
-            // var lengthToParent = tmp.getPosition().length();
-
-            // expectedPos = currentAbsPose[j.parent.index].getPosition() - dirToParent * lengthToParent;
-			// // if (j.name == "B_Tail02")
-			// // 	trace(lengthToParent);
-			// newWorldPos.lerp(expectedPos, newWorldPos, dynJoint.slackness);
+            var lengthToParent = dynJoint.relPos.getPosition().length();
+            expectedPos = tmp2CurrentAbsPose[j.parent.index].getPosition() + dirToParent * lengthToParent;
+			newWorldPos.lerp(expectedPos, newWorldPos, dynJoint.slackness);
 
 
 			// Collision
 			// Collision
 			// TODO
 			// TODO

+ 1 - 1
hxd/fmt/fbx/HMDOut.hx

@@ -1059,7 +1059,7 @@ class HMDOut extends BaseLibrary {
 		// create joints
 		// create joints
 		for( o in joints ) {
 		for( o in joints ) {
 			if( o.isMesh ) throw "assert";
 			if( o.isMesh ) throw "assert";
-			var j = isDynamic('B_Tail02', o) ? new h3d.anim.Skin.DynamicJoint() : new h3d.anim.Skin.Joint();
+			var j = isDynamic('_Cape', o) ? new h3d.anim.Skin.DynamicJoint() : new h3d.anim.Skin.Joint();
 			getDefaultMatrixes(o.model); // store for later usage in animation
 			getDefaultMatrixes(o.model); // store for later usage in animation
 			j.index = o.model.getId();
 			j.index = o.model.getId();
 			j.name = o.model.getName();
 			j.name = o.model.getName();

+ 1 - 1
hxd/fmt/hmd/Library.hx

@@ -368,7 +368,7 @@ class Library {
 		}
 		}
 
 
 		for( joint in skin.joints ) {
 		for( joint in skin.joints ) {
-			var j = isDynamic('B_Tail02', joint) ? new h3d.anim.Skin.DynamicJoint() : new h3d.anim.Skin.Joint();
+			var j = isDynamic('B_Cape02', joint) ? new h3d.anim.Skin.DynamicJoint() : new h3d.anim.Skin.Joint();
 			j.name = joint.name;
 			j.name = joint.name;
 			j.index = s.allJoints.length;
 			j.index = s.allJoints.length;
 			j.defMat = joint.position.toMatrix();
 			j.defMat = joint.position.toMatrix();