From 54a599fa121a4c7df12b18b06a7293292e347329 Mon Sep 17 00:00:00 2001 From: Asval Date: Sat, 4 Jul 2026 20:05:37 +0200 Subject: [PATCH] disable root bone scaling on preview --- CUE4Parse | 2 +- FModel/Views/Snooper/Animations/Skeleton.cs | 3 +++ FModel/Views/Snooper/Renderer.cs | 8 ++++---- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/CUE4Parse b/CUE4Parse index 2b00fcf9..76a4c53a 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit 2b00fcf9de27eb4047c8fb41aa509940e43a8475 +Subproject commit 76a4c53afe1f26c24a84973f5228a6ef475de8b7 diff --git a/FModel/Views/Snooper/Animations/Skeleton.cs b/FModel/Views/Snooper/Animations/Skeleton.cs index 31a8ef4d..e35d0530 100644 --- a/FModel/Views/Snooper/Animations/Skeleton.cs +++ b/FModel/Views/Snooper/Animations/Skeleton.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Numerics; using CUE4Parse_Conversion.Writers.ActorX.Structs.Animations; using CUE4Parse.UE4.Assets.Exports.Animation; +using CUE4Parse.UE4.Objects.Core.Math; using CUE4Parse.UE4.Objects.Core.Misc; using FModel.Views.Snooper.Buffers; using FModel.Views.Snooper.Shading; @@ -64,6 +65,7 @@ public class Skeleton : IDisposable bone.Rest.Relation = parentBone.Rest.Matrix; parentBone.LoweredChildNames.Add(boneName); } + else bone.Rest.Scale = FVector.OneVector; if (boneIndex == 0) SelectedBone = boneName; BonesByLoweredName[boneName] = bone; @@ -203,6 +205,7 @@ public class Skeleton : IDisposable sequence.Tracks[bone.SkeletonIndex].GetBoneTransform(f, sequence.NumFrames, ref boneOrientation, ref bonePosition, ref boneScale); if (!bone.IsRoot) boneMatrix = _boneMatriceAtFrame[bone.ParentIndex]; + else boneScale = bone.Rest.Scale; bonePosition = rotationOnly ? bone.Rest.Position : bonePosition * Constants.SCALE_DOWN_RATIO; boneMatrix = new Transform diff --git a/FModel/Views/Snooper/Renderer.cs b/FModel/Views/Snooper/Renderer.cs index a8e22e76..3102ca5f 100644 --- a/FModel/Views/Snooper/Renderer.cs +++ b/FModel/Views/Snooper/Renderer.cs @@ -184,7 +184,7 @@ public class Renderer : IDisposable { addedModel.AddInstance(t); } - else if (st.TryConvert(out var mesh)) + else if (st.TryConvert(out var mesh, EMeshQuality.Highest)) { addedModel = new StaticModel(st, mesh, t); Options.Models[guid] = addedModel; @@ -194,7 +194,7 @@ public class Renderer : IDisposable case USkeletalMesh sk: { guid = Guid.NewGuid(); - if (!Options.Models.ContainsKey(guid) && sk.TryConvert(out var mesh)) + if (!Options.Models.ContainsKey(guid) && sk.TryConvert(out var mesh, EMeshQuality.Highest)) { addedModel = new SkeletalModel(sk, mesh, t); Options.Models[guid] = addedModel; @@ -363,7 +363,7 @@ public class Renderer : IDisposable private void LoadSkeletalMesh(USkeletalMesh original) { var guid = new FGuid((uint) original.GetFullName().GetHashCode()); - if (Options.Models.ContainsKey(guid) || !original.TryConvert(out var mesh)) return; + if (Options.Models.ContainsKey(guid) || !original.TryConvert(out var mesh, EMeshQuality.Highest)) return; var skeletalModel = new SkeletalModel(original, mesh); Options.Models[guid] = skeletalModel; @@ -394,7 +394,7 @@ public class Renderer : IDisposable return; } - if (!editorCube.TryConvert(out var mesh)) + if (!editorCube.TryConvert(out var mesh, EMeshQuality.Highest)) return; Options.Models[guid] = new StaticModel(original, mesh);