This repository has been archived on 2026-05-02. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
CompuLogic/Assets/Shaders/Gridshader.shader
T
2020-12-11 15:55:39 +01:00

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
}
}
}