// Copyright UShaderLab. All Rights Reserved. // // Particle / sprite intrinsics. These only produce meaningful values on particle vertex factories; // the instance enables the matching usage, so there is no base-level usage gate here. #include "ShaderLabIntrinsics.h" #include "Materials/MaterialExpressionParticleColor.h" #include "Materials/MaterialExpressionParticleDirection.h" #include "Materials/MaterialExpressionParticleMacroUV.h" #include "Materials/MaterialExpressionParticleMotionBlurFade.h" #include "Materials/MaterialExpressionParticlePositionWS.h" #include "Materials/MaterialExpressionParticleRadius.h" #include "Materials/MaterialExpressionParticleRandom.h" #include "Materials/MaterialExpressionParticleRelativeTime.h" #include "Materials/MaterialExpressionParticleSize.h" #include "Materials/MaterialExpressionParticleSpeed.h" #include "Materials/MaterialExpressionParticleSpriteRotation.h" #include "Materials/MaterialExpressionParticleSubUVProperties.h" #include "Materials/MaterialExpressionSphericalParticleOpacity.h" void RegisterParticleIntrinsics(FShaderLabIntrinsicRegistry& Registry) { using namespace ShaderLabIntrinsic_Private; using EFreq = EShaderLabIntrinsicFrequency; AddSimple(Registry, TEXT("ParticleColor"), EFreq::Any, TEXT("float4"), [](UMaterial& M) { return MakeSimple(M); }); AddSimple(Registry, TEXT("ParticlePositionWS"), EFreq::Any, TEXT("float3"), [](UMaterial& M) { return MakeSimple(M); }); AddSimple(Registry, TEXT("ParticleDirection"), EFreq::Any, TEXT("float3"), [](UMaterial& M) { return MakeSimple(M); }); AddSimple(Registry, TEXT("ParticleSpeed"), EFreq::Any, TEXT("float"), [](UMaterial& M) { return MakeSimple(M); }); AddSimple(Registry, TEXT("ParticleRadius"), EFreq::Any, TEXT("float"), [](UMaterial& M) { return MakeSimple(M); }); AddSimple(Registry, TEXT("ParticleSize"), EFreq::Any, TEXT("float2"), [](UMaterial& M) { return MakeSimple(M); }); AddSimple(Registry, TEXT("ParticleRelativeTime"), EFreq::Any, TEXT("float"), [](UMaterial& M) { return MakeSimple(M); }); AddSimple(Registry, TEXT("ParticleMotionBlurFade"), EFreq::Any, TEXT("float"), [](UMaterial& M) { return MakeSimple(M); }); AddSimple(Registry, TEXT("ParticleRandom"), EFreq::Any, TEXT("float"), [](UMaterial& M) { return MakeSimple(M); }); AddSimple(Registry, TEXT("ParticleSpriteRotation"), EFreq::Any, TEXT("float"), [](UMaterial& M) { return MakeSimple(M); }); AddSimple(Registry, TEXT("ParticleMacroUV"), EFreq::Any, TEXT("float2"), [](UMaterial& M) { return MakeSimple(M); }); AddSimple(Registry, TEXT("SphericalParticleOpacity"), EFreq::PixelOnly, TEXT("float"), [](UMaterial& M) { return MakeSimple(M); }); // ParticleSubUVProperties is multi-output (TexCoord0, TexCoord1, Blend) — one intrinsic per pin. AddSimple(Registry, TEXT("ParticleSubUVTexCoord0"), EFreq::Any, TEXT("float2"), [](UMaterial& M) { return MakeSimple(M); }, 0); AddSimple(Registry, TEXT("ParticleSubUVTexCoord1"), EFreq::Any, TEXT("float2"), [](UMaterial& M) { return MakeSimple(M); }, 1); AddSimple(Registry, TEXT("ParticleSubUVBlend"), EFreq::Any, TEXT("float"), [](UMaterial& M) { return MakeSimple(M); }, 2); }