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"