From 333c310d5bb4d6b31cc16aa1f57a235e1ff495f9 Mon Sep 17 00:00:00 2001 From: tresabhi <43380238+tresabhi@users.noreply.github.com> Date: Sat, 13 Jun 2026 21:06:37 -0500 Subject: [PATCH] model transformations --- packages/game/Models/MonoGltf.cs | 47 +++++++++++++------ .../components/TankopediaSandbox/index.tsx | 5 +- 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/packages/game/Models/MonoGltf.cs b/packages/game/Models/MonoGltf.cs index 350476684..3f175e401 100644 --- a/packages/game/Models/MonoGltf.cs +++ b/packages/game/Models/MonoGltf.cs @@ -32,8 +32,8 @@ public class MonoGltf readonly SceneBuilder scene = new(); readonly Dictionary materialMap = []; - readonly MaterialBuilder emptyMaterial = new("empty_material"); - readonly ExporterOptions options = new() { TextureFormat = ETextureFormat.Jpeg }; + static readonly MaterialBuilder emptyMaterial = new("empty_material"); + static readonly ExporterOptions options = new() { TextureFormat = ETextureFormat.Jpeg }; public static readonly Dictionary knownChannels = new() { { "BaseColor", [KnownChannel.BaseColor] }, @@ -41,7 +41,8 @@ public class MonoGltf { "RMAO", [KnownChannel.MetallicRoughness, KnownChannel.Occlusion] }, // { "CDE", ?? }, }; - readonly byte[] stubBytes = File.ReadAllBytes("../game/stub/small.png"); + static readonly byte[] stubBytes = File.ReadAllBytes("../game/stub/small.png"); + static readonly float scaleCorrection = 0.01f; public MonoGltf(FStructFallback settings) { @@ -59,23 +60,43 @@ public class MonoGltf if (settings.TryGet(key, out var staticMesh)) { - AddMesh(key, parent, staticMesh); + AddMesh(parent.CreateNode(key), staticMesh); continue; } if (settings.TryGet(key, out var skeletalMesh)) { - AddMesh(key, parent, skeletalMesh); + AddMesh(parent.CreateNode(key), skeletalMesh); continue; } if (settings.TryGet(key, out var array)) { - var group = parent.CreateNode(key); - foreach (var item in array) { - Traverse(item, group); + Traverse(item, parent.CreateNode(key)); + } + + continue; + } + + if (key == "BoneTransform") + { + var transform = settings.Get(key); + + if (transform.TryGet("Rotation", out var rotation)) + { + parent.WithLocalRotation(rotation); + } + + if (transform.TryGet("Translation", out var translation)) + { + parent.WithLocalTranslation(SwapYZ(translation) * scaleCorrection); + } + + if (transform.TryGet("Scale3D", out var scale)) + { + parent.WithLocalScale(SwapYZ(scale)); } continue; @@ -87,10 +108,8 @@ public class MonoGltf } } - void AddMesh(string key, NodeBuilder parent, UObject mesh) + void AddMesh(NodeBuilder meshNode, UObject mesh) { - var meshNode = parent.CreateNode(key); - if (mesh is UStaticMesh staticMesh) { staticMesh.TryConvert(out var convertedStaticMesh); @@ -236,17 +255,17 @@ public class MonoGltf ) PrepareTriangles(CMeshVertex vert1, CMeshVertex vert2, CMeshVertex vert3) { var v1 = new VertexPositionNormalTangent( - SwapYZ(vert1.Position * 0.01f), + SwapYZ(vert1.Position * scaleCorrection), SwapYZAndNormalize((FVector)vert1.Normal), SwapYZAndNormalize((Vector4)vert1.Tangent) ); var v2 = new VertexPositionNormalTangent( - SwapYZ(vert2.Position * 0.01f), + SwapYZ(vert2.Position * scaleCorrection), SwapYZAndNormalize((FVector)vert2.Normal), SwapYZAndNormalize((Vector4)vert2.Tangent) ); var v3 = new VertexPositionNormalTangent( - SwapYZ(vert3.Position * 0.01f), + SwapYZ(vert3.Position * scaleCorrection), SwapYZAndNormalize((FVector)vert3.Normal), SwapYZAndNormalize((Vector4)vert3.Tangent) ); diff --git a/packages/website-ue/src/components/TankopediaSandbox/index.tsx b/packages/website-ue/src/components/TankopediaSandbox/index.tsx index ebf17cc70..b1195dc19 100644 --- a/packages/website-ue/src/components/TankopediaSandbox/index.tsx +++ b/packages/website-ue/src/components/TankopediaSandbox/index.tsx @@ -17,7 +17,6 @@ export function TankopediaSandbox({ parameters }: TankopediaSandboxProps) {
- + - +