123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- Shader "Skybox Gradient"
- {
- Properties
- {
- _Top("Top", Color) = (1,1,1,0)
- _Bottom("Bottom", Color) = (0,0,0,0)
- _mult("mult", Float) = 1
- _pwer("pwer", Float) = 1
- [Toggle(_SCREENSPACE_ON)] _Screenspace("Screen space", Float) = 0
- }
-
- SubShader
- {
-
-
- Tags { "RenderType"="Opaque" }
- LOD 100
- CGINCLUDE
- #pragma target 3.0
- ENDCG
- Blend Off
- Cull Back
- ColorMask RGBA
- ZWrite On
- ZTest LEqual
- Offset 0 , 0
-
-
-
- Pass
- {
- Name "Unlit"
- Tags { "LightMode"="ForwardBase" }
- CGPROGRAM
-
- #ifndef UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX
- #define UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input)
- #endif
- #pragma vertex vert
- #pragma fragment frag
- #pragma multi_compile_instancing
- #include "UnityCG.cginc"
- #pragma shader_feature_local _SCREENSPACE_ON
- struct appdata
- {
- float4 vertex : POSITION;
- float4 color : COLOR;
- UNITY_VERTEX_INPUT_INSTANCE_ID
-
- };
-
- struct v2f
- {
- float4 vertex : SV_POSITION;
- #ifdef ASE_NEEDS_FRAG_WORLD_POSITION
- float3 worldPos : TEXCOORD0;
- #endif
- UNITY_VERTEX_INPUT_INSTANCE_ID
- UNITY_VERTEX_OUTPUT_STEREO
- float4 ase_texcoord1 : TEXCOORD1;
- float4 ase_texcoord2 : TEXCOORD2;
- };
- uniform float4 _Bottom;
- uniform float4 _Top;
- uniform float _mult;
- uniform float _pwer;
-
- v2f vert ( appdata v )
- {
- v2f o;
- UNITY_SETUP_INSTANCE_ID(v);
- UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
- UNITY_TRANSFER_INSTANCE_ID(v, o);
- float4 ase_clipPos = UnityObjectToClipPos(v.vertex);
- float4 screenPos = ComputeScreenPos(ase_clipPos);
- o.ase_texcoord2 = screenPos;
-
- o.ase_texcoord1 = v.vertex;
- float3 vertexValue = float3(0, 0, 0);
- #if ASE_ABSOLUTE_VERTEX_POS
- vertexValue = v.vertex.xyz;
- #endif
- vertexValue = vertexValue;
- #if ASE_ABSOLUTE_VERTEX_POS
- v.vertex.xyz = vertexValue;
- #else
- v.vertex.xyz += vertexValue;
- #endif
- o.vertex = UnityObjectToClipPos(v.vertex);
- #ifdef ASE_NEEDS_FRAG_WORLD_POSITION
- o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
- #endif
- return o;
- }
-
- fixed4 frag (v2f i ) : SV_Target
- {
- UNITY_SETUP_INSTANCE_ID(i);
- UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
- fixed4 finalColor;
- #ifdef ASE_NEEDS_FRAG_WORLD_POSITION
- float3 WorldPosition = i.worldPos;
- #endif
- float4 screenPos = i.ase_texcoord2;
- float4 ase_screenPosNorm = screenPos / screenPos.w;
- ase_screenPosNorm.z = ( UNITY_NEAR_CLIP_VALUE >= 0 ) ? ase_screenPosNorm.z : ase_screenPosNorm.z * 0.5 + 0.5;
- #ifdef _SCREENSPACE_ON
- float staticSwitch13 = ase_screenPosNorm.y;
- #else
- float staticSwitch13 = i.ase_texcoord1.xyz.y;
- #endif
- float4 lerpResult3 = lerp( _Bottom , _Top , pow( saturate( ( staticSwitch13 * _mult ) ) , _pwer ));
-
-
- finalColor = lerpResult3;
- return finalColor;
- }
- ENDCG
- }
- }
-
-
- }
|