Files
spacerace/Assets/Materials/Skybox Shaders/SnakeSkine.shader
T
2025-10-23 17:43:57 +11:00

86 lines
2.1 KiB
Plaintext

// https://www.shadertoy.com/view/tt3SDf
Shader "Unlit/SnakeSkine"
{
Properties
{
_Scale("Scale",Range(1,50)) = 10.0
_Col1("Color 1",Color) = (0.12545, 0.1686, 0.2)
_Col2("Color 2",Color) = (0.921, 0.945, 0.96)
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
fixed _Scale;
fixed3 _Col1, _Col2;
#define SF 1. / _Scale * .5
#define SS(l, s) smoothstep(SF, -SF, l - s)
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
fixed4 frag (v2f i) : SV_Target
{
fixed2 uv = (i.uv - 0.5) * _Scale;
fixed ssf = SF * .004;
fixed2 id = floor(uv);
uv = frac(uv) - 0.5;
fixed mask = 0.0;
fixed rmask = 0.0;
for (int k = 0; k < 9; k++)
{
fixed2 P = fixed2(k % 3, k / 3) - 1.;
fixed2 rid = id - P;
fixed2 ruv = uv + P + fixed2(0, fmod(rid.x, 2.) * .5) + fixed2(0, sin(_Time.y * 2. + rid.x * 5. + rid.y * 100.) * .2);
fixed l = length(ruv);
fixed d = SS(l, .75) * (ruv.y + 1.);
mask = max(mask, d);
if (d >= mask)
{
mask = d;
rmask = SS(abs(l - .65), SF * .007);
}
}
fixed3 col = lerp(_Col1, _Col2, rmask);
return fixed4(col, 1.0);
}
ENDCG
}
}
}