200 lines
5.6 KiB
Plaintext
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
|
||
|
|
}
|