Files
UnrealEngine/Engine/Plugins/FX/Niagara/Shaders/Private/NiagaraTransformUtils.ush
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

53 lines
1.3 KiB
HLSL

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "/Plugin/FX/Niagara/Private/NiagaraCommon.ush"
#include "/Plugin/FX/Niagara/Private/NiagaraQuaternionUtils.ush"
struct FNiagaraTransform
{
float3 Translation;
float4 Rotation;
float3 Scale;
};
FNiagaraTransform LoadTransform(ByteAddressBuffer RawBufferData, uint Offset)
{
FNiagaraTransform R;
R.Translation = asfloat(RawBufferData.Load3(Offset + 0));
R.Rotation = asfloat(RawBufferData.Load4(Offset + 12));
R.Scale = asfloat(RawBufferData.Load3(Offset + 28));
return R;
}
FNiagaraTransform MakeTransform(float3 Translation, float4 Rotation, float3 Scale)
{
FNiagaraTransform R;
R.Translation = Translation;
R.Rotation = Rotation;
R.Scale = Scale;
return R;
}
FNiagaraTransform MultiplyTransform(in FNiagaraTransform A, in FNiagaraTransform B)
{
FNiagaraTransform R;
R.Translation = RotateVectorByQuat(A.Translation * B.Scale, B.Rotation) + B.Translation;
R.Rotation = MultiplyQuat(B.Rotation, A.Rotation);
R.Scale = A.Scale * B.Scale;
return R;
}
float4x4 TransformToMatrix44(FNiagaraTransform T)
{
const float3x3 Rotation = NiagaraQuatTo3x3(T.Rotation);
return float4x4(
float4(Rotation[0] * T.Scale.x, 0.0f),
float4(Rotation[1] * T.Scale.y, 0.0f),
float4(Rotation[2] * T.Scale.z, 0.0f),
float4(T.Translation, 1.0f)
);
}