From 53ba5968fd12f693e21fc8d41048124aed212a05 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Mon, 27 Jan 2025 11:42:59 +0100 Subject: [PATCH] Fix missing default value usage on GPU particle shape rotation and simplify CPU code #3104 --- .../ParticleEmitterGraph.CPU.ParticleModules.cpp | 15 +++++++-------- .../ParticleEmitterGraph.GPU.ParticleModules.cpp | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/Source/Engine/Particles/Graph/CPU/ParticleEmitterGraph.CPU.ParticleModules.cpp b/Source/Engine/Particles/Graph/CPU/ParticleEmitterGraph.CPU.ParticleModules.cpp index 4839151b4..42885f3c3 100644 --- a/Source/Engine/Particles/Graph/CPU/ParticleEmitterGraph.CPU.ParticleModules.cpp +++ b/Source/Engine/Particles/Graph/CPU/ParticleEmitterGraph.CPU.ParticleModules.cpp @@ -1161,15 +1161,14 @@ void ParticleEmitterGraphCPUExecutor::ProcessModule(ParticleEmitterGraphCPUNode* auto quatBox = node->GetBox(0); #define INPUTS_FETCH() \ -const Quaternion quat = (Quaternion)GetValue(quatBox, 2); + const Quaternion quat = (Quaternion)GetValue(quatBox, 2); #define LOGIC() \ -Quaternion nq = Quaternion::Invert(quat); \ -Float3 v3 = *((Float3*)positionPtr); \ -Float4 v4 = Float4(v3); \ -Quaternion q = Quaternion(v4); \ -Quaternion rq = quat * (q * nq); \ -*(Float3*)positionPtr = Float3(rq.X, rq.Y, rq.Z); \ -positionPtr += stride; + Quaternion nq = Quaternion::Invert(quat); \ + Float3 v3 = *((Float3*)positionPtr); \ + Quaternion q = Quaternion(v3.X, v3.Y, v3.Z, 0.0f); \ + Quaternion rq = quat * (q * nq); \ + *(Float3*)positionPtr = Float3(rq.X, rq.Y, rq.Z); \ + positionPtr += stride; if (node->UsePerParticleDataResolve()) { diff --git a/Source/Engine/Particles/Graph/GPU/ParticleEmitterGraph.GPU.ParticleModules.cpp b/Source/Engine/Particles/Graph/GPU/ParticleEmitterGraph.GPU.ParticleModules.cpp index 160097b75..0fb687157 100644 --- a/Source/Engine/Particles/Graph/GPU/ParticleEmitterGraph.GPU.ParticleModules.cpp +++ b/Source/Engine/Particles/Graph/GPU/ParticleEmitterGraph.GPU.ParticleModules.cpp @@ -636,7 +636,7 @@ void ParticleEmitterGPUGenerator::ProcessModule(Node* node) case 216: { auto positionAttr = AccessParticleAttribute(node, nodeGpu->Attributes[0], AccessMode::Write); - const Value quaternion = tryGetValue(node->GetBox(0), Value::InitForZero(VariantType::Quaternion)).Cast(VariantType::Quaternion); + const Value quaternion = GetValue(node->GetBox(0), 2).Cast(VariantType::Quaternion); _writer.Write( TEXT( " {{\n"