Skip to content

Instantly share code, notes, and snippets.

@partybusiness
Last active September 23, 2020 04:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save partybusiness/6fdd309037d6608d33996b5a2f44668c to your computer and use it in GitHub Desktop.
Save partybusiness/6fdd309037d6608d33996b5a2f44668c to your computer and use it in GitHub Desktop.
Line rendering shaders
Shader "Unlit/DrawLine"
{
Properties
{
_Color("Line Colour", Color) = (0.5,0.5,0.5,1)
_Width ("Line Width", float) = 2.0
_FadeWidth("Fade Width", float) = 0.1
}
SubShader
{
Tags{
"RenderType" = "Transparent"
"Queue" = "Transparent"
}
LOD 100
Blend SrcAlpha OneMinusSrcAlpha
ZWrite off
Cull Off
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;
};
float4 _Color;
float _Width;
float _FadeWidth;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
fixed pythagWidth(float p) {
return sqrt(pow(ddy(p),2) + pow(ddx(p),2));
}
fixed fuzzEdges(float val, float maxWidth, float minWidth) {
//val<width;;//
return smoothstep(maxWidth, minWidth, val);
}
fixed4 frag (v2f i) : SV_Target
{
fixed lineWidth = pythagWidth(i.uv.y);
fixed minWidth = _Width-_FadeWidth;
fixed alpha = smoothstep(0, lineWidth, lineWidth - abs(i.uv.y - 0.5));
alpha = fuzzEdges (abs(i.uv.y - 0.5), lineWidth*_Width, lineWidth*minWidth);
return fixed4(_Color.rgb, _Color.a*alpha);
}
ENDCG
}
}
}
Shader "Unlit/LaserGrid"
{
Properties
{
_Color("Line Colour", Color) = (0.5,0.5,0.5,1)
_Width ("Line Width", float) = 2.0
_Freq("Line Frequency", float) = 1.0
}
SubShader
{
Tags{
"RenderType" = "Transparent"
"Queue" = "Transparent"
}
LOD 100
Blend SrcAlpha OneMinusSrcAlpha
ZWrite off
Cull Off
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;
};
float4 _Color;
float _Width;
float _Freq;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv * _Freq;
return o;
}
fixed4 frag (v2f i) : SV_Target
{
fixed2 newUv = abs(i.uv % 1.0);
fixed lineWidthY = fwidth(i.uv.y) * _Width;
fixed alphaY = smoothstep(0, lineWidthY, lineWidthY - abs(newUv.y - 0.5));
fixed lineWidthX = fwidth(i.uv.x) * _Width;
fixed alphaX = smoothstep(0, lineWidthX, lineWidthX - abs(newUv.x - 0.5));
return fixed4(_Color.rgb, _Color.a*max(alphaX,alphaY));
}
ENDCG
}
}
}
Shader "Skybox/SkyboxLaserGrid"
{
Properties
{
_Color("Line Colour", Color) = (0.5,0.5,0.5,1)
_BackColor("Background Colour", Color) = (0.5,0.5,0.5,1)
_Width ("Line Width", float) = 2.0
_Spacing("Line Spacing", float) = 1.0
_GridOffset("Grid Offset", Vector) = (0.0,1.0,0.0,2.0)
//w defines space from centre of offset to floor
}
SubShader
{
Tags{ "Queue" = "Background" "RenderType" = "Background" "PreviewType" = "Skybox" }
ZWrite Off
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
};
struct v2f
{
float4 vertex : SV_POSITION;
float4 wp : TEXCOORD0;
float3 viewDir : TEXCOORD1;
};
float4 _Color;
float _Width;
float _Spacing;
float4 _BackColor;
float4 _GridOffset;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.wp = mul(unity_ObjectToWorld, v.vertex);
o.viewDir = o.wp.xyz - _WorldSpaceCameraPos;
//o.uv = v.uv * _Freq;
return o;
}
fixed2 UVsForFloor(fixed3 viewDir, fixed4 wp) {
//Fine if you only need floor
/*
float3 oc = normalize(viewDir);
float t = (_GridOffset.y - _WorldSpaceCameraPos.y - _GridOffset.w) / oc.y;
fixed3 foundPoint = _WorldSpaceCameraPos + oc * t;
return (foundPoint.xz - _GridOffset.xz) / _Spacing;
// */
// This also handles ceiling
// /*
float3 oc = normalize(viewDir);
float t = (_GridOffset.y - _WorldSpaceCameraPos.y + lerp (-_GridOffset.w, _GridOffset.w, sign(oc.y)*0.5+0.5) ) / oc.y;
fixed3 foundPoint = _WorldSpaceCameraPos + oc * t;
return (foundPoint.xz - _GridOffset.xz) / _Spacing;
// */
}
fixed4 frag (v2f i) : SV_Target
{
fixed2 uv = UVsForFloor(i.viewDir, i.wp);
fixed2 newUv = abs(uv % 1.0);
fixed lineWidthY = fwidth(uv.y) * _Width;
fixed alphaY = smoothstep(0, lineWidthY, lineWidthY - abs(newUv.y - 0.5));
fixed lineWidthX = fwidth(uv.x) * _Width;
fixed alphaX = smoothstep(0, lineWidthX, lineWidthX - abs(newUv.x - 0.5));
//version that shows only floor grid and fades above horizon to _BackColor
//return fixed4(lerp(_BackColor.rgb,_Color.rgb, _Color.a*max(alphaX, alphaY)*clamp( (-normalize(i.viewDir).y*50) , 0 , 1 )), 1);
//version that shows top and bottom grid but covers horizon in solid colour to avoid one-pixel glitch
return fixed4(lerp(_BackColor.rgb, _Color.rgb, _Color.a*max(max(alphaX, alphaY), 1-abs(normalize(i.viewDir).y*50))), 1);
}
ENDCG
}
}
}
# Blender v2.80 (sub 75) OBJ File: 'wireCube.blend'
# www.blender.org
# This cube works with the DrawLine.shader
o WireCube_Cube
v -0.916256 -1.001575 1.086800
v -1.086800 -1.001575 0.916256
v -0.916256 1.001575 1.086800
v -1.086800 1.001575 0.916256
v -1.086800 -1.001575 -0.916256
v -0.916256 -1.001575 -1.086800
v -0.916256 1.001575 -1.086800
v -1.086800 1.001575 -0.916256
v 1.086800 -1.001575 0.916256
v 0.916256 -1.001575 1.086800
v 0.916256 1.001575 1.086800
v 1.086800 1.001575 0.916256
v 0.916256 -1.001575 -1.086800
v 1.086800 -1.001575 -0.916256
v 1.086800 1.001575 -0.916256
v 0.916256 1.001575 -1.086800
v -0.916598 -1.087205 1.001575
v -1.087205 -0.916597 1.001575
v -0.916598 1.087205 1.001575
v -1.087205 0.916597 1.001575
v -0.916598 -1.087205 -1.001575
v -1.087205 -0.916597 -1.001575
v -0.916598 1.087205 -1.001575
v -1.087205 0.916597 -1.001575
v 0.916598 -1.087205 1.001575
v 1.087205 -0.916597 1.001575
v 0.916598 1.087205 1.001575
v 1.087205 0.916597 1.001575
v 0.916598 -1.087205 -1.001575
v 1.087205 -0.916597 -1.001575
v 0.916598 1.087205 -1.001575
v 1.087205 0.916597 -1.001575
v -1.001575 -1.086800 0.916256
v -1.001575 -0.916256 1.086800
v -1.001575 0.916256 1.086800
v -1.001575 1.086800 0.916256
v -1.001575 -1.086800 -0.916256
v -1.001575 -0.916256 -1.086800
v -1.001575 1.086800 -0.916256
v -1.001575 0.916256 -1.086800
v 1.001575 -1.086800 0.916256
v 1.001575 -0.916256 1.086800
v 1.001575 1.086800 0.916256
v 1.001575 0.916256 1.086800
v 1.001575 -1.086800 -0.916256
v 1.001575 -0.916256 -1.086800
v 1.001575 1.086800 -0.916256
v 1.001575 0.916256 -1.086800
v -1.001575 0.916256 0.916256
v -1.001575 1.086800 1.086800
v 1.001575 1.086800 1.086800
v 1.001575 0.916256 0.916256
v -1.001575 0.916256 -0.916256
v -1.001575 1.086800 -1.086800
v 1.001575 0.916256 -0.916256
v 1.001575 1.086800 -1.086800
v -1.001575 -1.086800 -1.086800
v -1.001575 -0.916256 -0.916256
v 1.001575 -1.086800 -1.086800
v 1.001575 -0.916256 -0.916256
v -1.001575 -0.916256 0.916256
v -1.001575 -1.086800 1.086800
v 1.001575 -0.916256 0.916256
v 1.001575 -1.086800 1.086800
v 0.916256 -1.001575 0.916256
v 1.086800 -1.001575 1.086800
v 1.086800 1.001575 1.086800
v 0.916256 1.001575 0.916256
v 0.916256 -1.001575 -0.916256
v 1.086800 -1.001575 -1.086800
v 1.086800 1.001575 -1.086800
v 0.916256 1.001575 -0.916256
v -0.916598 0.916597 1.001575
v -1.087205 1.087205 1.001575
v -0.916598 0.916598 -1.001575
v -1.087205 1.087205 -1.001575
v -1.087205 -1.087205 1.001575
v -0.916597 -0.916597 1.001575
v -1.087205 -1.087205 -1.001575
v -0.916598 -0.916597 -1.001575
v 0.916598 0.916597 1.001575
v 1.087205 1.087205 1.001575
v 0.916598 0.916598 -1.001575
v 1.087205 1.087205 -1.001575
v 0.916598 -0.916598 1.001575
v 1.087205 -1.087205 1.001575
v 0.916598 -0.916597 -1.001575
v 1.087205 -1.087205 -1.001575
v -0.916256 -1.001575 -0.916256
v -1.086800 -1.001575 -1.086800
v -1.086800 1.001575 -1.086800
v -0.916256 1.001575 -0.916256
v -0.916256 -1.001575 0.916256
v -1.086800 -1.001575 1.086800
v -0.916256 1.001575 0.916256
v -1.086800 1.001575 1.086800
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vn -0.7071 0.0000 0.7071
vn -0.7071 0.0000 -0.7071
vn 0.7071 0.0000 -0.7071
vn 0.7071 0.0000 0.7071
vn -0.7071 -0.7071 0.0000
vn -0.7071 0.7071 0.0000
vn 0.7071 -0.7071 0.0000
vn 0.7071 0.7071 0.0000
vn 0.0000 -0.7071 -0.7071
vn 0.0000 0.7071 -0.7071
vn 0.0000 -0.7071 0.7071
vn 0.0000 0.7071 0.7071
s off
f 1/1/1 3/2/1 4/3/1 2/4/1
f 7/5/2 6/6/2 5/7/2 8/8/2
f 15/9/3 14/10/3 13/11/3 16/12/3
f 11/13/4 10/14/4 9/15/4 12/16/4
f 21/17/5 17/18/5 18/19/5 22/20/5
f 19/21/6 23/22/6 24/23/6 20/24/6
f 25/25/7 29/26/7 30/27/7 26/28/7
f 31/29/8 27/30/8 28/31/8 32/32/8
f 45/33/9 37/34/9 38/35/9 46/36/9
f 39/37/10 47/38/10 48/39/10 40/40/10
f 33/41/11 41/42/11 42/43/11 34/44/11
f 43/45/12 36/46/12 35/47/12 44/48/12
f 51/49/11 50/50/11 49/51/11 52/52/11
f 53/53/12 55/54/12 56/55/12 54/56/12
f 59/57/10 57/58/10 58/59/10 60/60/10
f 61/61/9 63/62/9 64/63/9 62/64/9
f 67/65/3 66/66/3 65/67/3 68/68/3
f 71/69/2 70/70/2 69/71/2 72/72/2
f 73/73/8 75/74/8 76/75/8 74/76/8
f 79/77/6 77/78/6 78/79/6 80/80/6
f 83/81/6 81/82/6 82/83/6 84/84/6
f 85/85/5 87/86/5 88/87/5 86/88/5
f 91/89/1 90/90/1 89/91/1 92/92/1
f 93/93/4 95/94/4 96/95/4 94/96/4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment