minesweeper_game/Library/PackageCache/com.unity.render-pipelines.universal@506b3deb0041/Shaders/Utils/ScreenSpaceAmbientOcclusion.shader
2025-03-15 14:30:26 -04:00

219 lines
7.4 KiB
Plaintext

Shader "Hidden/Universal Render Pipeline/ScreenSpaceAmbientOcclusion"
{
HLSLINCLUDE
#pragma editor_sync_compilation
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"
ENDHLSL
SubShader
{
Tags
{
"RenderType" = "Opaque"
"RenderPipeline" = "UniversalPipeline"
}
Cull Off
ZWrite Off
ZTest Always
// ------------------------------------------------------------------
// Ambient Occlusion
// ------------------------------------------------------------------
// 0 - Occlusion estimation
Pass
{
Name "SSAO_Occlusion"
ZTest Always
ZWrite Off
Cull Off
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment SSAO
#pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT
#pragma multi_compile_local_fragment _INTERLEAVED_GRADIENT _BLUE_NOISE
#pragma multi_compile_local_fragment _SOURCE_DEPTH_LOW _SOURCE_DEPTH_MEDIUM _SOURCE_DEPTH_HIGH _SOURCE_DEPTH_NORMALS
#pragma multi_compile_local_fragment _ _ORTHOGRAPHIC
#pragma multi_compile_local_fragment _SAMPLE_COUNT_LOW _SAMPLE_COUNT_MEDIUM _SAMPLE_COUNT_HIGH
#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
ENDHLSL
}
// ------------------------------------------------------------------
// Bilateral Blur
// ------------------------------------------------------------------
// 1 - Horizontal
Pass
{
Name "SSAO_Bilateral_HorizontalBlur"
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment HorizontalBlur
#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
ENDHLSL
}
// 2 - Vertical
Pass
{
Name "SSAO_Bilateral_VerticalBlur"
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment VerticalBlur
#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
ENDHLSL
}
// 3 - Final
Pass
{
Name "SSAO_Bilateral_FinalBlur"
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment FinalBlur
#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
ENDHLSL
}
// 4 - After Opaque
Pass
{
Name "SSAO_Bilateral_FinalBlur_AfterOpaque"
ZTest Off
ZWrite Off
Cull Off
Blend One SrcAlpha, Zero One
BlendOp Add, Add
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment FragBilateralAfterOpaque
#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
half4 FragBilateralAfterOpaque(Varyings input) : SV_Target
{
half ao = FinalBlur(input).r;
return half4(0.0, 0.0, 0.0, ao);
}
ENDHLSL
}
// ------------------------------------------------------------------
// Gaussian Blur
// ------------------------------------------------------------------
// 5 - Horizontal
Pass
{
Name "SSAO_Gaussian_HorizontalBlur"
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment HorizontalGaussianBlur
#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
ENDHLSL
}
// 6 - Vertical
Pass
{
Name "SSAO_Gaussian_VerticalBlur"
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment VerticalGaussianBlur
#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
ENDHLSL
}
// 7 - After Opaque
Pass
{
Name "SSAO_Gaussian_VerticalBlur_AfterOpaque"
ZTest Off
ZWrite Off
Cull Off
Blend One SrcAlpha, Zero One
BlendOp Add, Add
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment FragGaussianAfterOpaque
#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
half4 FragGaussianAfterOpaque(Varyings input) : SV_Target
{
half ao = VerticalGaussianBlur(input).r;
return half4(0.0, 0.0, 0.0, ao);
}
ENDHLSL
}
// ------------------------------------------------------------------
// Kawase Blur
// ------------------------------------------------------------------
// 8 - Kawase Blur
Pass
{
Name "SSAO_Kawase"
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment KawaseBlur
#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
ENDHLSL
}
// 9 - After Opaque Kawase
Pass
{
Name "SSAO_Kawase_AfterOpaque"
ZTest Off
ZWrite Off
Cull Off
Blend One SrcAlpha, Zero One
BlendOp Add, Add
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment FragKawaseAfterOpaque
#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SSAO.hlsl"
half4 FragKawaseAfterOpaque(Varyings input) : SV_Target
{
half ao = KawaseBlur(input).r;
return half4(0.0, 0.0, 0.0, ao);
}
ENDHLSL
}
}
}