HeavenStudioPlus/Assets/X-PostProcessing/Effects/GlitchRGBSplitV3/Shader/GlitchRGBSplitV3.shader

155 lines
4.1 KiB
Plaintext

//----------------------------------------------------------------------------------------------------------
// X-PostProcessing Library
// https://github.com/QianMo/X-PostProcessing-Library
// Copyright (C) 2020 QianMo. All rights reserved.
// Licensed under the MIT License
// You may not use this file except in compliance with the License.You may obtain a copy of the License at
// http://opensource.org/licenses/MIT
//----------------------------------------------------------------------------------------------------------
Shader "Hidden/X-PostProcessing/Glitch/RGBSplitV3"
{
HLSLINCLUDE
#include "../../../Shaders/StdLib.hlsl"
#include "../../../Shaders/XPostProcessing.hlsl"
#pragma shader_feature USING_Frequency_INFINITE
half3 _Params;
#define _Frequency _Params.x
#define _Amount _Params.y
#define _Speed _Params.z
float4 RGBSplit_Horizontal(float2 uv, float Amount, float time)
{
Amount *= 0.001;
float3 splitAmountX = float3(uv.x, uv.x, uv.x);
splitAmountX.r += sin(time * 0.2) * Amount;
splitAmountX.g += sin(time * 0.1) * Amount;
half4 splitColor = half4(0.0, 0.0, 0.0, 0.0);
splitColor.r = (SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, float2(splitAmountX.r, uv.y)).rgb).x;
splitColor.g = (SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, float2(splitAmountX.g, uv.y)).rgb).y;
splitColor.b = (SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, float2(splitAmountX.b, uv.y)).rgb).z;
splitColor.a = 1;
return splitColor;
}
float4 RGBSplit_Vertical(float2 uv, float Amount, float time)
{
Amount *= 0.001;
float3 splitAmountY = float3(uv.y, uv.y, uv.y);
splitAmountY.r += sin(time * 0.2) * Amount;
splitAmountY.g += sin(time * 0.1) * Amount;
half4 splitColor = half4(0.0, 0.0, 0.0, 0.0);
splitColor.r = (SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, float2(uv.x, splitAmountY.r)).rgb).x;
splitColor.g = (SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, float2(uv.x, splitAmountY.g)).rgb).y;
splitColor.b = (SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, float2(uv.x, splitAmountY.b)).rgb).z;
splitColor.a = 1;
return splitColor;
}
float4 RGBSplit_Horizontal_Vertical(float2 uv, float Amount, float time)
{
Amount *= 0.001;
//float3 splitAmount = float3(uv.y, uv.y, uv.y);
float splitAmountR= sin(time * 0.2) * Amount;
float splitAmountG= sin(time * 0.1) * Amount;
half4 splitColor = half4(0.0, 0.0, 0.0, 0.0);
splitColor.r = (SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, float2(uv.x + splitAmountR,uv.y +splitAmountR)).rgb).x;
splitColor.g = (SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, float2(uv.x , uv.y)).rgb).y;
splitColor.b = (SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, float2(uv.x + splitAmountG, uv.y + splitAmountG)).rgb).z;
splitColor.a = 1;
return splitColor;
}
float4 Frag_Horizontal(VaryingsDefault i): SV_Target
{
half strength = 0;
#if USING_Frequency_INFINITE
strength = 1;
#else
strength = 0.5 + 0.5 *cos(_Time.y * _Frequency);
#endif
half3 color = RGBSplit_Horizontal(i.texcoord.xy, _Amount * strength, _Time.y * _Speed).rgb;
return half4(color, 1);
}
float4 Frag_Vertical(VaryingsDefault i): SV_Target
{
half strength = 0;
#if USING_Frequency_INFINITE
strength = 1;
#else
strength = 0.5 + 0.5 *cos(_Time.y * _Frequency);
#endif
half3 color = RGBSplit_Vertical(i.texcoord.xy, _Amount * strength, _Time.y * _Speed).rgb;
return half4(color, 1);
}
float4 Frag_Horizontal_Vertical(VaryingsDefault i) : SV_Target
{
half strength = 0;
#if USING_Frequency_INFINITE
strength = 1;
#else
strength = 0.5 + 0.5 *cos(_Time.y * _Frequency);
#endif
half3 color = RGBSplit_Horizontal_Vertical(i.texcoord.xy, _Amount * strength, _Time.y * _Speed).rgb;
return half4(color, 1);
}
ENDHLSL
SubShader
{
Cull Off ZWrite Off ZTest Always
Pass
{
HLSLPROGRAM
#pragma vertex VertDefault
#pragma fragment Frag_Horizontal
ENDHLSL
}
Pass
{
HLSLPROGRAM
#pragma vertex VertDefault
#pragma fragment Frag_Vertical
ENDHLSL
}
Pass
{
HLSLPROGRAM
#pragma vertex VertDefault
#pragma fragment Frag_Horizontal_Vertical
ENDHLSL
}
}
}