summaryrefslogtreecommitdiff
path: root/Assets/AmplifyShaderEditor/Plugins/EditorResources/Previews/Preview_GradientSample.shader
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/AmplifyShaderEditor/Plugins/EditorResources/Previews/Preview_GradientSample.shader')
-rw-r--r--Assets/AmplifyShaderEditor/Plugins/EditorResources/Previews/Preview_GradientSample.shader123
1 files changed, 123 insertions, 0 deletions
diff --git a/Assets/AmplifyShaderEditor/Plugins/EditorResources/Previews/Preview_GradientSample.shader b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Previews/Preview_GradientSample.shader
new file mode 100644
index 00000000..28aebf55
--- /dev/null
+++ b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Previews/Preview_GradientSample.shader
@@ -0,0 +1,123 @@
+Shader "Hidden/GradientSample"
+{
+ Properties
+ {
+ _GTime( "_Time", 2D ) = "white" {}
+ _GType( "_GType", Int ) = 0
+ _GColorNum( "_GColorNum", Int ) = 0
+ _GAlphaNum( "_GAlphaNum", Int ) = 0
+ _Col0( "_Col0", Vector ) = ( 0, 0, 0, 0 )
+ _Col1( "_Col1", Vector ) = ( 0, 0, 0, 0 )
+ _Col2( "_Col2", Vector ) = ( 0, 0, 0, 0 )
+ _Col3( "_Col3", Vector ) = ( 0, 0, 0, 0 )
+ _Col4( "_Col4", Vector ) = ( 0, 0, 0, 0 )
+ _Col5( "_Col5", Vector ) = ( 0, 0, 0, 0 )
+ _Col6( "_Col6", Vector ) = ( 0, 0, 0, 0 )
+ _Col7( "_Col7", Vector ) = ( 0, 0, 0, 0 )
+ _Alp0( "_Alp0", Vector ) = ( 0, 0, 0, 0 )
+ _Alp1( "_Alp1", Vector ) = ( 0, 0, 0, 0 )
+ _Alp2( "_Alp2", Vector ) = ( 0, 0, 0, 0 )
+ _Alp3( "_Alp3", Vector ) = ( 0, 0, 0, 0 )
+ _Alp4( "_Alp4", Vector ) = ( 0, 0, 0, 0 )
+ _Alp5( "_Alp5", Vector ) = ( 0, 0, 0, 0 )
+ _Alp6( "_Alp6", Vector ) = ( 0, 0, 0, 0 )
+ _Alp7( "_Alp7", Vector ) = ( 0, 0, 0, 0 )
+ }
+ SubShader
+ {
+ Pass
+ {
+ CGPROGRAM
+ #pragma vertex vert_img
+ #pragma fragment frag
+ #include "UnityCG.cginc"
+
+ sampler2D _GTime;
+ int _GType;
+ int _GColorNum;
+ int _GAlphaNum;
+ float4 _Col0;
+ float4 _Col1;
+ float4 _Col2;
+ float4 _Col3;
+ float4 _Col4;
+ float4 _Col5;
+ float4 _Col6;
+ float4 _Col7;
+ float4 _Alp0;
+ float4 _Alp1;
+ float4 _Alp2;
+ float4 _Alp3;
+ float4 _Alp4;
+ float4 _Alp5;
+ float4 _Alp6;
+ float4 _Alp7;
+
+ struct Gradient
+ {
+ int type;
+ int colorsLength;
+ int alphasLength;
+ float4 colors[ 8 ];
+ float2 alphas[ 8 ];
+ };
+
+ Gradient NewGradient( int type, int colorsLength, int alphasLength,
+ float4 colors0, float4 colors1, float4 colors2, float4 colors3, float4 colors4, float4 colors5, float4 colors6, float4 colors7,
+ float2 alphas0, float2 alphas1, float2 alphas2, float2 alphas3, float2 alphas4, float2 alphas5, float2 alphas6, float2 alphas7 )
+ {
+ Gradient g;
+ g.type = type;
+ g.colorsLength = colorsLength;
+ g.alphasLength = alphasLength;
+ g.colors[ 0 ] = colors0;
+ g.colors[ 1 ] = colors1;
+ g.colors[ 2 ] = colors2;
+ g.colors[ 3 ] = colors3;
+ g.colors[ 4 ] = colors4;
+ g.colors[ 5 ] = colors5;
+ g.colors[ 6 ] = colors6;
+ g.colors[ 7 ] = colors7;
+ g.alphas[ 0 ] = alphas0;
+ g.alphas[ 1 ] = alphas1;
+ g.alphas[ 2 ] = alphas2;
+ g.alphas[ 3 ] = alphas3;
+ g.alphas[ 4 ] = alphas4;
+ g.alphas[ 5 ] = alphas5;
+ g.alphas[ 6 ] = alphas6;
+ g.alphas[ 7 ] = alphas7;
+ return g;
+ }
+
+ float4 SampleGradient( Gradient gradient, float time )
+ {
+ float3 color = gradient.colors[ 0 ].rgb;
+ UNITY_UNROLL
+ for( int c = 1; c < 8; c++ )
+ {
+ float colorPos = saturate( ( time - gradient.colors[ c - 1 ].w ) / ( gradient.colors[ c ].w - gradient.colors[ c - 1 ].w ) ) * step( c, (float)gradient.colorsLength - 1 );
+ color = lerp( color, gradient.colors[ c ].rgb, lerp( colorPos, step( 0.01, colorPos ), gradient.type ) );
+ }
+ #ifndef UNITY_COLORSPACE_GAMMA
+ color = GammaToLinearSpace( color );
+ #endif
+ float alpha = gradient.alphas[ 0 ].x;
+ UNITY_UNROLL
+ for( int a = 1; a < 8; a++ )
+ {
+ float alphaPos = saturate( ( time - gradient.alphas[ a - 1 ].y ) / ( gradient.alphas[ a ].y - gradient.alphas[ a - 1 ].y ) ) * step( a, (float)gradient.alphasLength - 1 );
+ alpha = lerp( alpha, gradient.alphas[ a ].x, lerp( alphaPos, step( 0.01, alphaPos ), gradient.type ) );
+ }
+ return float4( color, alpha );
+ }
+
+ float4 frag( v2f_img i ) : SV_Target
+ {
+ Gradient gradient = NewGradient( _GType, _GColorNum, _GAlphaNum, _Col0, _Col1, _Col2, _Col3, _Col4, _Col5, _Col6, _Col7, _Alp0.xy, _Alp1.xy, _Alp2.xy, _Alp3.xy, _Alp4.xy, _Alp5.xy, _Alp6.xy, _Alp7.xy );
+ float time = tex2D( _GTime, i.uv ).r;
+ return SampleGradient( gradient, time );
+ }
+ ENDCG
+ }
+ }
+}