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

157 lines
4.2 KiB
HLSL

// Copyright Epic Games, Inc. All Rights Reserved.
#include "/Engine/Private/Common.ush"
//#include "ColorUtils.ush"
#include "/Engine/Private/GammaCorrectionCommon.ush"
#include "NiagaraCommon.ush"
//#include "NiagaraDebugDraw.ush"
////////////////////////////////////////////////////////////////////////////////////
#if NIAGARA_2DARRAY_ATTRIBUTE_PS
#define INDEX_NONE -1
Texture2DArray InTexture;
SamplerState InTextureSampler;
int4 InAttributeSlices;
float4x4 InColorWeights;
float InGamma;
void MainPS(
in float2 InTextureCoordinate : TEXCOORD0,
in float4 InColor : TEXCOORD1,
in float4 InHitProxyId : TEXCOORD2,
in float4 InPosition : SV_POSITION,
out float4 OutColor : SV_Target0
#if WRITE_TO_GBUFFER
,out float4 OutWorldNormal : SV_Target1
#endif
)
{
float4 Sample = 0;
for ( int i=0; i < 4; ++i )
{
//Sample[i] = InAttributeSlices[i] == INDEX_NONE ? 0.0f : InTexture.Load(int3(Input.Position.x, Input.Position.y, InAttributeSlices[i])).x;
Sample[i] = InAttributeSlices[i] == INDEX_NONE ? 0.0f : Texture2DArraySample(InTexture, InTextureSampler, float3(InTextureCoordinate.x, InTextureCoordinate.y, InAttributeSlices[i])).x;
}
float4 Color;
Color.r = dot(Sample, InColorWeights[0]);
Color.g = dot(Sample, InColorWeights[1]);
Color.b = dot(Sample, InColorWeights[2]);
Color.a = dot(Sample, InColorWeights[3]);
Color *= InColor;
if( InGamma != 1.0 )
{
Color.rgb = ApplyGammaCorrection(saturate(Color.rgb), 2.2 / (1.0 / InGamma));
}
OutColor = RETURN_COLOR(Color);
#if WRITE_TO_GBUFFER
// Set the G buffer bits that indicate that deferred lighting and image reflections are not enabled
OutWorldNormal = 0;
#endif
}
#endif //NIAGARA_2DARRAY_ATTRIBUTE_PS
////////////////////////////////////////////////////////////////////////////////////
#if NIAGARA_VOLUME_ATTRIBUTE_PS
Texture3D InTexture;
SamplerState InTextureSampler;
int InNumAttributes;
float4 InAttributeUVAndChannel[4];
float2 InTileUV;
float4x4 InColorWeights;
float InGamma;
void MainPS(
in float2 InTextureCoordinate : TEXCOORD0,
in float4 InColor : TEXCOORD1,
in float4 InHitProxyId : TEXCOORD2,
in float4 InPosition : SV_POSITION,
out float4 OutColor : SV_Target0
#if WRITE_TO_GBUFFER
,out float4 OutWorldNormal : SV_Target1
#endif
)
{
float4 Sample = 0;
float3 TileUV = float3(InTextureCoordinate * InTileUV, 0);
for ( int i=0; i < InNumAttributes; ++i )
{
int Channel = asint(InAttributeUVAndChannel[i].w);
Sample[i] = Texture3DSample(InTexture, InTextureSampler, InAttributeUVAndChannel[i].xyz + TileUV)[Channel];
}
float4 Color;
Color.r = dot(Sample, InColorWeights[0]);
Color.g = dot(Sample, InColorWeights[1]);
Color.b = dot(Sample, InColorWeights[2]);
Color.a = dot(Sample, InColorWeights[3]);
Color *= InColor;
if( InGamma != 1.0 )
{
Color.rgb = ApplyGammaCorrection(saturate(Color.rgb), 2.2 / (1.0 / InGamma));
}
OutColor = RETURN_COLOR(Color);
#if WRITE_TO_GBUFFER
// Set the G buffer bits that indicate that deferred lighting and image reflections are not enabled
OutWorldNormal = 0;
#endif
}
#endif //NIAGARA_VOLUME_ATTRIBUTE_PS
////////////////////////////////////////////////////////////////////////////////////
#if NIAGARA_SIMPLE_PS
Texture2D InTexture;
SamplerState InTextureSampler;
float4x4 InColorWeights;
float InGamma;
void MainPS(
in float2 InTextureCoordinate : TEXCOORD0,
in float4 InColor : TEXCOORD1,
in float4 InHitProxyId : TEXCOORD2,
in float4 InPosition : SV_POSITION,
out float4 OutColor : SV_Target0
#if WRITE_TO_GBUFFER
,out float4 OutWorldNormal : SV_Target1
#endif
)
{
float4 Sample = Texture2DSample(InTexture, InTextureSampler, InTextureCoordinate);
float4 Color;
Color.r = dot(Sample, InColorWeights[0]);
Color.g = dot(Sample, InColorWeights[1]);
Color.b = dot(Sample, InColorWeights[2]);
Color.a = dot(Sample, InColorWeights[3]);
Color *= InColor;
if( InGamma != 1.0 )
{
Color.rgb = ApplyGammaCorrection(saturate(Color.rgb), 2.2 / (1.0 / InGamma));
}
OutColor = RETURN_COLOR(Color);
#if WRITE_TO_GBUFFER
// Set the G buffer bits that indicate that deferred lighting and image reflections are not enabled
OutWorldNormal = 0;
#endif
}
#endif //NIAGARA_SIMPLE_PS
////////////////////////////////////////////////////////////////////////////////////