101 lines
2.2 KiB
GLSL
Executable File
101 lines
2.2 KiB
GLSL
Executable File
Shader "Shaders101/Colored UV"
|
|
{
|
|
Properties
|
|
{
|
|
_Width("Width", Range(0.00001,0.05)) = 0.001
|
|
_SmoothWidth("Smooth Width", Range(0.00001,0.05)) = 0.0002
|
|
_Size("Object Size", Range(0.01,1000)) = 100
|
|
_MiddlePoint("Middle Point", Range(0, 1)) = 0.6
|
|
_Background("Background Color", Color) = (.2, .2, .2, 1)
|
|
_Foreground("Foreground Color", Color) = (.5, .5, .5, 1)
|
|
_Step("Step", Int) = 5
|
|
_MainTex("Texture", 2D) = "white" {}
|
|
}
|
|
SubShader
|
|
{
|
|
Tags
|
|
{
|
|
"PreviewType" = "Plane"
|
|
}
|
|
Pass
|
|
{
|
|
CGPROGRAM
|
|
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
|
|
#include "UnityCG.cginc"
|
|
|
|
struct appdata
|
|
{
|
|
float4 vertex : POSITION;
|
|
float2 uv : TEXCOORD0;
|
|
};
|
|
|
|
struct v2f
|
|
{
|
|
float4 vertex : SV_POSITION;
|
|
float2 uv : TEXCOORD0;
|
|
float4 scrPos : TEXCOORD1;
|
|
};
|
|
|
|
sampler2D _MainTex;
|
|
|
|
float _Width;
|
|
float _SmoothWidth;
|
|
float _Size;
|
|
float4 _Background;
|
|
float _MiddlePoint;
|
|
float4 _Foreground;
|
|
int _Step;
|
|
|
|
v2f vert(appdata v)
|
|
{
|
|
v2f o;
|
|
o.vertex = UnityObjectToClipPos(v.vertex);
|
|
o.scrPos = ComputeScreenPos(v.vertex);
|
|
o.uv = v.uv;
|
|
return o;
|
|
}
|
|
|
|
float grid(float2 uv, float w, float s)
|
|
{
|
|
return clamp(1
|
|
- smoothstep(w - _SmoothWidth, w + _SmoothWidth, fmod(uv.x + w * .5, s)) + 1
|
|
- smoothstep(w - _SmoothWidth, w + _SmoothWidth, fmod(uv.y + w * .5, s)), 0, 1);
|
|
}
|
|
|
|
float4 frag(v2f i) : SV_Target
|
|
{
|
|
float d = length(ObjSpaceViewDir(i.scrPos));
|
|
float w = d * _Width;
|
|
|
|
float k = log(d) / log(_Step);
|
|
float k0 = floor(k);
|
|
|
|
float x = d / pow(_Step, k0);
|
|
|
|
float s1 = pow(_Step, k0) * .1 / _Step;
|
|
float c1 = smoothstep(0, 1, _MiddlePoint * (_Step - x) / (_Step - 1));
|
|
|
|
float s2 = s1 * _Step;
|
|
float c2 = smoothstep(0, 1, (1 - _MiddlePoint) * (_Step - x) / (_Step - 1) + _MiddlePoint);
|
|
|
|
float s3 = s2 * _Step;
|
|
|
|
i.uv *= _Size;
|
|
|
|
float grid1 = grid(i.uv, w, s1);
|
|
float grid2 = grid(i.uv, w, s2);
|
|
float grid3 = grid(i.uv, w, s3);
|
|
grid2 = clamp(grid2 - grid3, 0, 1);
|
|
grid1 = clamp(grid1 - grid2, 0, 1);
|
|
|
|
float a = (grid1 * c1 + grid2 * c2 + grid3);
|
|
|
|
return (1 - a) * _Background + a * _Foreground;
|
|
}
|
|
ENDCG
|
|
}
|
|
}
|
|
} |