Firstborn/Library/PackageCache/com.unity.render-pipelines..../Runtime/VFXGraph/Shaders/VFXLitPixelOutput.hlsl

101 lines
3.6 KiB
HLSL
Raw Normal View History

2023-03-28 13:24:16 -04:00
#ifndef SHADERPASS
#error SHADERPASS must be defined
#endif
#ifndef UNIVERSAL_SHADERPASS_INCLUDED
#error ShaderPass has to be included
#endif
#if (SHADERPASS == SHADERPASS_FORWARD)
float4 VFXCalcPixelOutputForward(const SurfaceData surfaceData, const InputData inputData)
{
float4 color = UniversalFragmentPBR(inputData, surfaceData);
color.rgb = MixFog(color.rgb, inputData.fogCoord);
#if IS_OPAQUE_PARTICLE
float _Surface = 0.0f;
#else
float _Surface = 1.0f;
#endif
color.a = OutputAlpha(color.a, _Surface);
return color;
}
#ifndef VFX_SHADERGRAPH
float4 VFXGetPixelOutputForward(const VFX_VARYING_PS_INPUTS i, float3 normalWS, const VFXUVData uvData)
{
SurfaceData surfaceData;
InputData inputData;
VFXGetURPLitData(surfaceData, inputData, i, normalWS, uvData, (uint2)0);
return VFXCalcPixelOutputForward(surfaceData, inputData);
}
#else
float4 VFXGetPixelOutputForwardShaderGraph(const VFX_VARYING_PS_INPUTS i, SurfaceData surfaceData, float3 normalWS)
{
float3 posRWS = VFXGetPositionRWS(i);
float4 posSS = i.VFX_VARYING_POSCS;
PositionInputs posInput = GetPositionInput(posSS.xy, _ScreenSize.zw, posSS.z, posSS.w, posRWS, (uint2)0);
VFXUVData uvData = (VFXUVData)0;
InputData inputData = VFXGetInputData(i, posInput, surfaceData, normalWS);
return VFXCalcPixelOutputForward(surfaceData, inputData);
}
#endif
#elif (SHADERPASS == SHADERPASS_DEPTHNORMALSONLY)
void VFXComputePixelOutputToNormalBuffer(float3 normalWS, out float4 outNormalBuffer)
{
#if defined(_GBUFFER_NORMALS_OCT)
float2 octNormalWS = PackNormalOctQuadEncode(normalWS); // values between [-1, +1], must use fp32 on some platforms
float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5); // values between [ 0, 1]
half3 packedNormalWS = PackFloat2To888(remappedOctNormalWS); // values between [ 0, 1]
outNormalBuffer = float4(packedNormalWS, 0.0);
#else
outNormalBuffer = float4(normalWS, 0.0);
#endif
}
#else
#ifndef VFX_SHADERGRAPH
void VFXComputePixelOutputToGBuffer(const VFX_VARYING_PS_INPUTS i, const float3 normalWS, const VFXUVData uvData, out FragmentOutput gBuffer)
{
SurfaceData surfaceData;
InputData inputData;
VFXGetURPLitData(surfaceData, inputData, i, normalWS, uvData, (uint2)0);
BRDFData brdfData;
InitializeBRDFData(surfaceData.albedo, surfaceData.metallic, surfaceData.specular, surfaceData.smoothness, surfaceData.alpha, brdfData);
half3 color = GlobalIllumination(brdfData, inputData.bakedGI, surfaceData.occlusion, inputData.positionWS, inputData.normalWS, inputData.viewDirectionWS);
gBuffer = BRDFDataToGbuffer(brdfData, inputData, surfaceData.smoothness, surfaceData.emission + color, surfaceData.occlusion);
}
#else
void VFXComputePixelOutputToGBufferShaderGraph(const VFX_VARYING_PS_INPUTS i, SurfaceData surfaceData, const float3 normalWS, out FragmentOutput gBuffer)
{
float3 posRWS = VFXGetPositionRWS(i);
float4 posSS = i.VFX_VARYING_POSCS;
PositionInputs posInput = GetPositionInput(posSS.xy, _ScreenSize.zw, posSS.z, posSS.w, posRWS, (uint2)0);
VFXUVData uvData = (VFXUVData)0;
InputData inputData = VFXGetInputData(i, posInput, surfaceData, normalWS);
BRDFData brdfData;
InitializeBRDFData(surfaceData.albedo, surfaceData.metallic, surfaceData.specular, surfaceData.smoothness, surfaceData.alpha, brdfData);
half3 color = GlobalIllumination(brdfData, inputData.bakedGI, surfaceData.occlusion, inputData.positionWS, inputData.normalWS, inputData.viewDirectionWS);
gBuffer = BRDFDataToGbuffer(brdfData, inputData, surfaceData.smoothness, surfaceData.emission + color, surfaceData.occlusion);
}
#endif
#endif