From 918ed7fccf7d9e5a0ff2ff8d6768fadfaf828b9d Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 10 Nov 2019 02:01:52 +1100 Subject: [PATCH] Fix for leg jankyness. Added PBBNCCTTX shader --- .../GameFiles/Resources/Drawable.cs | 2 +- Rendering/Renderable.cs | 53 +++++++++++-- Rendering/Shaders/BasicShader.cs | 10 ++- Shaders/BasicVS_PBBNCCTTX.cso | Bin 0 -> 11836 bytes Shaders/BasicVS_PBBNCCTTX.hlsl | 75 ++++++++++++++++++ Shaders/CodeWalkerShaders.vcxproj | 10 +++ Shaders/CodeWalkerShaders.vcxproj.filters | 1 + 7 files changed, 141 insertions(+), 10 deletions(-) create mode 100644 Shaders/BasicVS_PBBNCCTTX.cso create mode 100644 Shaders/BasicVS_PBBNCCTTX.hlsl diff --git a/CodeWalker.Core/GameFiles/Resources/Drawable.cs b/CodeWalker.Core/GameFiles/Resources/Drawable.cs index 6159a61..791bb48 100644 --- a/CodeWalker.Core/GameFiles/Resources/Drawable.cs +++ b/CodeWalker.Core/GameFiles/Resources/Drawable.cs @@ -924,7 +924,7 @@ namespace CodeWalker.GameFiles var pbone = Parent; while (pbone != null) { - pos = pbone.AnimRotation.Multiply(pos * pbone.AnimScale) + pbone.AnimTranslation; + pos = pbone.AnimRotation.Multiply(pos /** pbone.AnimScale*/) + pbone.AnimTranslation; ori = pbone.AnimRotation * ori; pbone = pbone.Parent; } diff --git a/Rendering/Renderable.cs b/Rendering/Renderable.cs index e1b1888..a33b715 100644 --- a/Rendering/Renderable.cs +++ b/Rendering/Renderable.cs @@ -537,27 +537,68 @@ namespace CodeWalker.Rendering bone.AnimRotation = q; break; case 2: //scale? + v0 = aseq.EvaluateVector(f0); + v1 = aseq.EvaluateVector(f1); + v = interpolate ? (v0 * ialpha) + (v1 * falpha) : v0; + bone.AnimScale = v.XYZ(); break; - case 5://vector3... - //v0 = aseq.EvaluateVector(f0); - //v1 = aseq.EvaluateVector(f1); - //v = interpolate ? (v0 * ialpha) + (v1 * falpha) : v0; - //bone.AnimScale = v.XYZ(); + case 5://root motion vector + if (bone.Tag != 0) + { } + //v0 = aseq.EvaluateVector(f0); + //v1 = aseq.EvaluateVector(f1); + //v = interpolate ? (v0 * ialpha) + (v1 * falpha) : v0; + //bone.AnimTranslation += v.XYZ(); break; - case 6://quaternion... + case 6://quaternion... root rotation? + if (bone.Tag != 0) + { } + //q0 = new Quaternion(aseq.EvaluateVector(f0)); + //q1 = new Quaternion(aseq.EvaluateVector(f1)); + //q = interpolate ? Quaternion.Slerp(q0, q1, falpha) : q0; + //bone.AnimRotation *= q; break; + case 7://vector3... (camera position?) + break; + case 8://quaternion... (camera rotation?) + break; + case 27: + case 50: case 134://single float? case 136: case 137: case 138: case 139: case 140: + if (bone.Tag != 0) + { } break; default: break; } } + for (int i = 0; i < bones.Count; i++) + { + var bone = bones[i]; + var tag = bone.Tag; + switch (bone.Tag) + { + case 23639: tag = 58271; break; //RB_L_ThighRoll: SKEL_L_Thigh + case 6442: tag = 51826; break; //RB_R_ThighRoll: SKEL_R_Thigh + //case 61007: tag = 61163; break; //RB_L_ForeArmRoll: SKEL_L_Forearm //NOT GOOD + //case 5232: tag = 45509; break; //RB_L_ArmRoll: SKEL_L_UpperArm + } + if (tag != bone.Tag) + { + var obone = bone; + if (skel.BonesMap.TryGetValue(tag, out obone)) + { + bone.AnimRotation = obone.AnimRotation; + } + } + } + for (int i = 0; i < bones.Count; i++) { var bone = bones[i]; diff --git a/Rendering/Shaders/BasicShader.cs b/Rendering/Shaders/BasicShader.cs index 0d8ad01..40eb297 100644 --- a/Rendering/Shaders/BasicShader.cs +++ b/Rendering/Shaders/BasicShader.cs @@ -138,6 +138,7 @@ namespace CodeWalker.Rendering VertexShader basicvspbbncttt; VertexShader basicvspbbncct; VertexShader basicvspbbncctx; + VertexShader basicvspbbnccttx; VertexShader basicvspbbncttx; VertexShader basicvsbox; VertexShader basicvssphere; @@ -199,6 +200,7 @@ namespace CodeWalker.Rendering byte[] vspbbnctttbytes = File.ReadAllBytes("Shaders\\BasicVS_PBBNCTTT.cso"); byte[] vspbbncctbytes = File.ReadAllBytes("Shaders\\BasicVS_PBBNCCT.cso"); byte[] vspbbncctxbytes = File.ReadAllBytes("Shaders\\BasicVS_PBBNCCTX.cso"); + byte[] vspbbnccttxbytes = File.ReadAllBytes("Shaders\\BasicVS_PBBNCCTTX.cso"); byte[] vspbbncttxbytes = File.ReadAllBytes("Shaders\\BasicVS_PBBNCTTX.cso"); byte[] vsboxbytes = File.ReadAllBytes("Shaders\\BasicVS_Box.cso"); @@ -225,6 +227,7 @@ namespace CodeWalker.Rendering basicvspbbncttt = new VertexShader(device, vspbbnctttbytes); basicvspbbncct = new VertexShader(device, vspbbncctbytes); basicvspbbncctx = new VertexShader(device, vspbbncctxbytes); + basicvspbbnccttx = new VertexShader(device, vspbbnccttxbytes); basicvspbbncttx = new VertexShader(device, vspbbncttxbytes); basicvsbox = new VertexShader(device, vsboxbytes); basicvssphere = new VertexShader(device, vsspherebytes); @@ -281,7 +284,7 @@ namespace CodeWalker.Rendering layouts.Add(VertexType.PBBNCCTX, new InputLayout(device, vspbbncctxbytes, VertexTypePBBNCCTX.GetLayout())); layouts.Add(VertexType.PBBNCTTX, new InputLayout(device, vspbbncttxbytes, VertexTypePBBNCTTX.GetLayout())); layouts.Add(VertexType.PBBNCTTTX, new InputLayout(device, vspbbncttxbytes, VertexTypePBBNCTTTX.GetLayout()));//TODO - layouts.Add(VertexType.PBBNCCTTX, new InputLayout(device, vspbbncctxbytes, VertexTypePBBNCCTTX.GetLayout()));//TODO + layouts.Add(VertexType.PBBNCCTTX, new InputLayout(device, vspbbnccttxbytes, VertexTypePBBNCCTTX.GetLayout())); //PBBCCT todo //PBBNC todo @@ -469,8 +472,8 @@ namespace CodeWalker.Rendering case VertexType.PBBNCTTX: vs = basicvspbbncttx; break; - case VertexType.PBBNCCTTX://not used? - vs = basicvspbbncctx;//TODO + case VertexType.PBBNCCTTX: + vs = basicvspbbnccttx; break; case VertexType.PBBNCTTTX: vs = basicvspbbncttx;//TODO @@ -1023,6 +1026,7 @@ namespace CodeWalker.Rendering basicvspbbncttt.Dispose(); basicvspbbncct.Dispose(); basicvspbbncctx.Dispose(); + basicvspbbnccttx.Dispose(); basicvspbbncttx.Dispose(); basicvsbox.Dispose(); basicvssphere.Dispose(); diff --git a/Shaders/BasicVS_PBBNCCTTX.cso b/Shaders/BasicVS_PBBNCCTTX.cso new file mode 100644 index 0000000000000000000000000000000000000000..d3482f569b9d1beaa2f935f364ba7a407752e8ef GIT binary patch literal 11836 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 4.0 + + Vertex + 4.0 + Vertex + 4.0 + Vertex + 4.0 + Vertex + 4.0 + Vertex 4.0 diff --git a/Shaders/CodeWalkerShaders.vcxproj.filters b/Shaders/CodeWalkerShaders.vcxproj.filters index e871bd8..1d5f731 100644 --- a/Shaders/CodeWalkerShaders.vcxproj.filters +++ b/Shaders/CodeWalkerShaders.vcxproj.filters @@ -75,6 +75,7 @@ +