405 lines
17 KiB
HLSL
405 lines
17 KiB
HLSL
#ifndef ECHOVOID_POSTPROCESSING_PASS
|
||
#define ECHOVOID_POSTPROCESSING_PASS
|
||
|
||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||
#include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"
|
||
|
||
TEXTURE2D_X(_CameraOpaqueTexture);
|
||
SAMPLER(sampler_CameraOpaqueTexture);
|
||
|
||
// PostProcessor - RGB Split Glitch Pass || BEGIN ------
|
||
float4 _RGBSplitGlitchParams;
|
||
|
||
#define _RGBSplitGlitchIntensity _RGBSplitGlitchParams.x
|
||
#define _TimeX _RGBSplitGlitchParams.y
|
||
|
||
float randomNoise(float x, float y)
|
||
{
|
||
return frac(sin(dot(float2(x, y), float2(12.9898, 78.233))) * 43758.5453);
|
||
}
|
||
|
||
float4 RGBSplitGlitchPassFragment(Varyings input) : SV_Target
|
||
{
|
||
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
|
||
|
||
float splitAmount = _RGBSplitGlitchIntensity * randomNoise(_TimeX, 2);
|
||
|
||
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);
|
||
}
|
||
// PostProcessor - RGB Split Glitch Pass || END ------
|
||
|
||
|
||
// PostProcessor - RGB Split Glitch Pass || BEGIN ------
|
||
float4 _RadialBlurParams;
|
||
|
||
#define _BlurRadius _RadialBlurParams.x
|
||
#define _RadialCenter _RadialBlurParams.yz
|
||
|
||
half4 RadialBlurPassFragment_4Tap(Varyings input): SV_Target
|
||
{
|
||
float2 uv = input.texcoord - _RadialCenter;
|
||
|
||
half scale = 1;
|
||
half4 color = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 2 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 3 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
color *= 0.25f; // 1/4
|
||
|
||
return color;
|
||
}
|
||
|
||
half4 RadialBlurPassFragment_8Tap(Varyings input): SV_Target
|
||
{
|
||
float2 uv = input.texcoord - _RadialCenter;
|
||
|
||
half scale = 1;
|
||
half4 color = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 2 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 3 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 4 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 5 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 6 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 7 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
color *= 0.125f; // 1/8
|
||
|
||
return color;
|
||
}
|
||
|
||
half4 RadialBlurPassFragment_12Tap(Varyings input): SV_Target
|
||
{
|
||
float2 uv = input.texcoord - _RadialCenter;
|
||
|
||
half scale = 1;
|
||
half4 color = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 2 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 3 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 4 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 5 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 6 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 7 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 8 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 9 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 10 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 11 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
color *= 0.0833f; // 1/12
|
||
|
||
return color;
|
||
}
|
||
|
||
half4 RadialBlurPassFragment_20Tap(Varyings input): SV_Target
|
||
{
|
||
float2 uv = input.texcoord - _RadialCenter;
|
||
|
||
half scale = 1;
|
||
half4 color = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 2 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 3 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 4 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 5 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 6 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 7 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 8 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 9 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 10 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 11 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 12 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 13 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 14 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 15 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 16 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 17 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 18 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 19 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
|
||
color *= 0.05f; // 1/20
|
||
|
||
return color;
|
||
}
|
||
|
||
|
||
half4 RadialBlurPassFragment_30Tap(Varyings input): SV_Target
|
||
{
|
||
float2 uv = input.texcoord - _RadialCenter;
|
||
|
||
half scale = 1;
|
||
half4 color = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 2 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 3 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 4 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 5 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 6 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 7 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 8 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 9 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 10 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 11 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 12 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 13 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 14 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 15 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 16 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 17 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 18 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 19 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 20 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 21 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 22 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 23 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 24 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 25 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 26 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 27 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 28 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
scale = 29 * _BlurRadius + 1; //1 MAD
|
||
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter); //1 MAD
|
||
|
||
color *= 0.0333f; // 1/30
|
||
|
||
return color;
|
||
}
|
||
// PostProcessor - RGB Split Glitch Pass || END ------
|
||
|
||
|
||
// PostProcessor - Anime Speed Lines || BEGIN ------
|
||
|
||
float4 _Colour;
|
||
float _SpeedLinesTiling;
|
||
float _SpeedLinesRadialScale;
|
||
float _SpeedLinesPower;
|
||
float _SpeedLinesRemap;
|
||
float _SpeedLinesAnimation;
|
||
float _MaskScale;
|
||
float _MaskHardness;
|
||
float _MaskPower;
|
||
|
||
// 2. 移植原 Shader 中的 snoise (Simplex Noise) 函数
|
||
// (这段代码从原 shader 中原封不动地复制过来)
|
||
float3 mod2D289( float3 x ) { return x - floor( x * ( 1.0 / 289.0 ) ) * 289.0; }
|
||
float2 mod2D289( float2 x ) { return x - floor( x * ( 1.0 / 289.0 ) ) * 289.0; }
|
||
float3 permute( float3 x ) { return mod2D289( ( ( x * 34.0 ) + 1.0 ) * x ); }
|
||
float snoise( float2 v )
|
||
{
|
||
const float4 C = float4( 0.211324865405187, 0.366025403784439, -0.577350269189626, 0.024390243902439 );
|
||
float2 i = floor( v + dot( v, C.yy ) );
|
||
float2 x0 = v - i + dot( i, C.xx );
|
||
float2 i1 = ( x0.x > x0.y ) ? float2( 1.0, 0.0 ) : float2( 0.0, 1.0 );
|
||
float4 x12 = x0.xyxy + C.xxzz; x12.xy -= i1; i = mod2D289( i );
|
||
float3 p = permute( permute( i.y + float3( 0.0, i1.y, 1.0 ) ) + i.x + float3( 0.0, i1.x, 1.0 ) );
|
||
float3 m = max( 0.5 - float3( dot( x0, x0 ), dot( x12.xy, x12.xy ), dot( x12.zw, x12.zw ) ), 0.0 );
|
||
m = m * m; m = m * m;
|
||
float3 x = 2.0 * frac( p * C.www ) - 1.0; float3 h = abs( x ) - 0.5;
|
||
float3 ox = floor( x + 0.5 ); float3 a0 = x - ox;
|
||
m *= 1.79284291400159 - 0.85373472095314 * ( a0 * a0 + h * h );
|
||
float3 g;
|
||
g.x = a0.x * x0.x + h.x * x0.y; g.yz = a0.yz * x12.xz + h.yz * x12.yw;
|
||
return 130.0 * dot( m, g );
|
||
}
|
||
|
||
// 3. 移植原 Shader 的 frag 函数逻辑
|
||
half4 SpeedLinesPassFragment(Varyings input) : SV_Target
|
||
{
|
||
// input.texcoord 是 URP 框架提供的正确 UV 坐标
|
||
half2 uv = input.texcoord;
|
||
|
||
// [cite: 26] 用 URP 的方式采样屏幕纹理(原图)
|
||
half4 SceneColour7 = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv);
|
||
|
||
// --- 下面是原 frag 函数 [cite: 27-34] 的核心逻辑,几乎是 1:1 复制 ---
|
||
|
||
// [cite: 27] 计算中心 UV
|
||
float2 CenteredUV15_g1 = ( uv - float2( 0.5,0.5 ) );
|
||
float2 break17_g1 = CenteredUV15_g1;
|
||
|
||
// [cite: 27] 转换为极坐标(长度和角度)并应用 Tiling
|
||
float2 appendResult23_g1 = (float2(( length( CenteredUV15_g1 ) * _SpeedLinesRadialScale * 2.0 ) , ( atan2( break17_g1.x , break17_g1.y ) * ( 1.0 / 6.28318548202515 ) * _SpeedLinesTiling )));
|
||
|
||
// [cite: 28] 应用时间动画
|
||
// _Time.y 是 Unity 内置的 Shader 变量,可以直接使用
|
||
float2 appendResult58 = (float2(( -_SpeedLinesAnimation * _Time.y ) , 0.0));
|
||
|
||
// [cite: 28, 29] 采样 Simplex Noise
|
||
float simplePerlin2D10 = snoise( ( appendResult23_g1 + appendResult58 ) );
|
||
simplePerlin2D10 = simplePerlin2D10*0.5 + 0.5; // 重新映射到 0-1
|
||
|
||
// [cite: 29] 应用 Power 和 Remap,生成线条
|
||
float temp_output_1_0_g6 = _SpeedLinesRemap;
|
||
float SpeedLines21 = saturate( ( ( pow( simplePerlin2D10 , _SpeedLinesPower ) - temp_output_1_0_g6 ) / ( 1.0 - temp_output_1_0_g6 ) ) );
|
||
|
||
// [cite: 30, 31] 计算中心径向遮罩
|
||
float2 texCoord60 = uv * float2( 2,2 ) + float2( -1,-1 );
|
||
float temp_output_1_0_g5 = _MaskScale;
|
||
float lerpResult71 = lerp( 0.0 , _MaskScale , _MaskHardness);
|
||
float Mask24 = pow( ( 1.0 - saturate( ( ( length( texCoord60 ) - temp_output_1_0_g5 ) / ( ( lerpResult71 - 0.001 ) - temp_output_1_0_g5 ) ) ) ) , _MaskPower );
|
||
|
||
// [cite: 32] 组合线条和遮罩
|
||
float MaskedSpeedLines29 = ( SpeedLines21 * Mask24 );
|
||
|
||
// [cite: 33] 获取颜色
|
||
float3 ColourRGB38 = (_Colour).rgb;
|
||
float ColourA40 = _Colour.a; // Alpha 用作混合强度
|
||
|
||
// [cite: 33] 创建速度线颜色
|
||
float4 speedLineColor = float4( ( MaskedSpeedLines29 * ColourRGB38 ) , SceneColour7.a );
|
||
|
||
// [cite: 34] 最终混合:(原图, 速度线, 混合量)
|
||
// 混合量 = 线条 * 遮罩 * 颜色Alpha
|
||
float4 lerpResult2 = lerp( SceneColour7 , speedLineColor , ( MaskedSpeedLines29 * ColourA40 ));
|
||
|
||
return lerpResult2;
|
||
}
|
||
// PostProcessor - Anime Speed Lines || END ------
|
||
|
||
#endif // ECHOVOID_POSTPROCESSING_PASS (确保这是你文件的最后一行)
|