Files
Cielonos/Assets/Shaders/ScriptablePostProcessor/Shaders/RGBSplitGlitch.shader
2025-12-22 18:36:29 -05:00

57 lines
2.1 KiB
Plaintext

Shader "SLS/Postprocessing/RGBSplitGlitch"
{
SubShader
{
Tags
{
"RenderType" = "Opaque"
"RenderPipeline" = "UniversalPipeline"
}
ZWrite Off
Cull Off
HLSLINCLUDE
// 1. 引入 Unity 核心库 (替代原本的 #include "PostProcessingPass.hlsl")
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
// 引入 Blit 库以获得 Vert 顶点函数和 _BlitTexture
#include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"
// 2. 定义该效果专用的变量
float4 _RGBSplitGlitchParams;
#define _RGBSplitGlitchIntensity _RGBSplitGlitchParams.x
#define _TimeX _RGBSplitGlitchParams.y
// 3. 辅助函数 (仅在此 Shader 内部使用)
float randomNoise(float x, float y)
{
return frac(sin(dot(float2(x, y), float2(12.9898, 78.233))) * 43758.5453);
}
// 4. 片段着色器逻辑
float4 RGBSplitGlitchPassFragment(Varyings input) : SV_Target
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
float splitAmount = _RGBSplitGlitchIntensity * randomNoise(_TimeX, 2);
// 使用 _BlitTexture 采样当前画面
half4 colorR = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, input.texcoord);
half4 colorG = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp,
float2(input.texcoord.x + splitAmount, input.texcoord.y + splitAmount));
half4 colorB = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp,
float2(input.texcoord.x - splitAmount, input.texcoord.y - splitAmount));
return half4(colorR.r, colorG.g, colorB.b, 1);
}
ENDHLSL
Pass
{
Name "RGB Split Glitch"
HLSLPROGRAM
#pragma vertex Vert // 使用 Blit.hlsl 中的 Vert
#pragma fragment RGBSplitGlitchPassFragment
ENDHLSL
}
}
}