Files
Convention-Unity-Demo/Assets/Plugins/Unity-URP-Volumetric-Light-0.5.8/Shaders/VolumetricFog.shader
2025-09-25 19:04:05 +08:00

200 lines
5.6 KiB
Plaintext

Shader "Hidden/VolumetricFog"
{
SubShader
{
Tags
{
"RenderPipeline" = "UniversalPipeline"
}
Pass
{
Name "VolumetricFogRender"
ZTest Always
ZWrite Off
Cull Off
Blend Off
HLSLPROGRAM
#include "./VolumetricFog.hlsl"
#pragma multi_compile _ _FORWARD_PLUS
#pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
#pragma multi_compile _ _ADDITIONAL_LIGHTS
#pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS
#pragma multi_compile_fragment _ _LIGHT_COOKIES
#if UNITY_VERSION >= 202310
#pragma multi_compile_fragment _ PROBE_VOLUMES_L1 PROBE_VOLUMES_L2
#endif
#pragma multi_compile_local_fragment _ _MAIN_LIGHT_CONTRIBUTION_DISABLED
#pragma multi_compile_local_fragment _ _ADDITIONAL_LIGHTS_CONTRIBUTION_DISABLED
#pragma multi_compile_local_fragment _ _APV_CONTRIBUTION_ENABLED
#pragma vertex Vert
#pragma fragment Frag
float4 Frag(Varyings input) : SV_Target
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
return VolumetricFog(input.texcoord, input.positionCS.xy);
}
ENDHLSL
}
Pass
{
Name "VolumetricFogHorizontalBlur"
ZTest Always
ZWrite Off
Cull Off
Blend Off
HLSLPROGRAM
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"
#include "./DepthAwareGaussianBlur.hlsl"
#pragma vertex Vert
#pragma fragment Frag
#if UNITY_VERSION < 202320
float4 _BlitTexture_TexelSize;
#endif
float4 Frag(Varyings input) : SV_Target
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
return DepthAwareGaussianBlur(input.texcoord, float2(1.0, 0.0), _BlitTexture, sampler_PointClamp, _BlitTexture_TexelSize.xy);
}
ENDHLSL
}
Pass
{
Name "VolumetricFogVerticalBlur"
ZTest Always
ZWrite Off
Cull Off
Blend Off
HLSLPROGRAM
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"
#include "./DepthAwareGaussianBlur.hlsl"
#pragma vertex Vert
#pragma fragment Frag
#if UNITY_VERSION < 202320
float4 _BlitTexture_TexelSize;
#endif
float4 Frag(Varyings input) : SV_Target
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
return DepthAwareGaussianBlur(input.texcoord, float2(0.0, 1.0), _BlitTexture, sampler_PointClamp, _BlitTexture_TexelSize.xy);
}
ENDHLSL
}
Pass
{
Name "VolumetricFogUpsampleComposition"
ZTest Always
ZWrite Off
Cull Off
Blend Off
HLSLPROGRAM
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"
#include "./DepthAwareUpsample.hlsl"
#pragma target 4.5
#pragma vertex Vert
#pragma fragment Frag
TEXTURE2D_X(_VolumetricFogTexture);
SAMPLER(sampler_BlitTexture);
float4 Frag(Varyings input) : SV_Target
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
float4 volumetricFog = DepthAwareUpsample(input.texcoord, _VolumetricFogTexture);
float4 cameraColor = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_BlitTexture, input.texcoord);
return float4(cameraColor.rgb * volumetricFog.a + volumetricFog.rgb, cameraColor.a);
}
ENDHLSL
}
}
SubShader
{
Tags
{
"RenderPipeline" = "UniversalPipeline"
}
UsePass "Hidden/VolumetricFog/VOLUMETRICFOGRENDER"
UsePass "Hidden/VolumetricFog/VOLUMETRICFOGHORIZONTALBLUR"
UsePass "Hidden/VolumetricFog/VOLUMETRICFOGVERTICALBLUR"
Pass
{
Name "VolumetricFogUpsampleComposition"
ZTest Always
ZWrite Off
Cull Off
Blend Off
HLSLPROGRAM
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"
#include "./DepthAwareUpsample.hlsl"
#pragma vertex Vert
#pragma fragment Frag
TEXTURE2D_X(_VolumetricFogTexture);
SAMPLER(sampler_BlitTexture);
float4 Frag(Varyings input) : SV_Target
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
float4 volumetricFog = DepthAwareUpsample(input.texcoord, _VolumetricFogTexture);
float4 cameraColor = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_BlitTexture, input.texcoord);
return float4(cameraColor.rgb * volumetricFog.a + volumetricFog.rgb, cameraColor.a);
}
ENDHLSL
}
}
Fallback Off
}