You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
3.6 KiB
100 lines
3.6 KiB
#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
|
|
|