Created
March 13, 2019 02:58
-
-
Save Janooba/b7136737dc016523c6e6b29c173c3106 to your computer and use it in GitHub Desktop.
Custom graph shader that allows the input of a line thickness value
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Shader "Graphy/Graph Custom" | |
{ | |
Properties | |
{ | |
[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} | |
_Color("Tint", Color) = (1,1,1,1) | |
[MaterialToggle] PixelSnap("Pixel snap", Float) = 0 | |
_LineThickness("Line Thickness", Int) = 1 | |
_GoodColor("Good Color", Color) = (1,1,1,1) | |
_CautionColor("Caution Color", Color) = (1,1,1,1) | |
_CriticalColor("Critical Color", Color) = (1,1,1,1) | |
_GoodThreshold("Good Threshold", Float) = 0.5 | |
_CautionThreshold("Caution Threshold", Float) = 0.25 | |
} | |
SubShader | |
{ | |
// Tags | |
// { | |
// "Queue" = "Overlay" | |
// "IgnoreProjector" = "True" | |
// "RenderType" = "Transparent" | |
// "PreviewType" = "Plane" | |
// "CanUseSpriteAtlas" = "True" | |
// } | |
Cull Off | |
Lighting Off | |
ZWrite Off | |
ZTest Off | |
Blend One OneMinusSrcAlpha | |
Pass | |
{ | |
CGPROGRAM | |
#pragma vertex vert | |
#pragma fragment frag | |
#pragma multi_compile _ PIXELSNAP_ON | |
#include "UnityCG.cginc" | |
struct appdata_t | |
{ | |
float4 vertex : POSITION; | |
float4 color : COLOR; | |
float2 texcoord : TEXCOORD0; | |
}; | |
struct v2f | |
{ | |
float4 vertex : SV_POSITION; | |
fixed4 color : COLOR; | |
float2 texcoord : TEXCOORD0; | |
}; | |
fixed4 _Color; | |
v2f vert(appdata_t IN) | |
{ | |
v2f OUT; | |
OUT.vertex = UnityObjectToClipPos(IN.vertex); | |
OUT.texcoord = IN.texcoord; | |
OUT.color = IN.color * _Color; | |
#ifdef PIXELSNAP_ON | |
OUT.vertex = UnityPixelSnap(OUT.vertex); | |
#endif | |
return OUT; | |
} | |
sampler2D _MainTex; | |
sampler2D _AlphaTex; | |
float4 _MainTex_TexelSize; | |
float _AlphaSplitEnabled; | |
fixed4 SampleSpriteTexture(float2 uv) | |
{ | |
fixed4 color = tex2D(_MainTex, uv); | |
#if UNITY_TEXTURE_ALPHASPLIT_ALLOWED | |
if (_AlphaSplitEnabled) | |
color.a = tex2D(_AlphaTex, uv).r; | |
#endif //UNITY_TEXTURE_ALPHASPLIT_ALLOWED | |
return color; | |
} | |
fixed _LineThickness; | |
fixed4 _GoodColor; | |
fixed4 _CautionColor; | |
fixed4 _CriticalColor; | |
fixed _GoodThreshold; | |
fixed _CautionThreshold; | |
uniform float Average; | |
// NOTE: The size of this array can break compatibility with some older GPUs | |
// If you see a pink box or that the graphs are not working, try lowering this value | |
// or using the GraphMobile.shader | |
uniform float GraphValues[512]; | |
uniform float GraphValues_Length; | |
fixed4 frag(v2f IN) : SV_Target | |
{ | |
fixed4 color = IN.color; | |
fixed xCoord = IN.texcoord.x; | |
fixed yCoord = IN.texcoord.y; | |
fixed xPixelSize = 1 / _ScreenParams.x; | |
fixed yPixelSize = 1 / _ScreenParams.y; | |
float graphValue = GraphValues[floor(xCoord * GraphValues_Length)]; | |
// Define the width of each element of the graph | |
float increment = 1.0f / (GraphValues_Length - 1); | |
// Assign the corresponding color | |
if (graphValue > _GoodThreshold) | |
{ | |
color *= _GoodColor; | |
} | |
else if (graphValue > _CautionThreshold) | |
{ | |
color *= _CautionColor; | |
} | |
else | |
{ | |
color *= _CriticalColor; | |
} | |
// Point coloring | |
if (yCoord < graphValue - (yPixelSize * _LineThickness * 0.5f)) | |
{ | |
color.a = 0; | |
} | |
// Set as transparent the part on top of the current point value | |
if (yCoord > graphValue + (yPixelSize * _LineThickness * 0.5f)) | |
{ | |
color.a = 0; | |
} | |
// Average white bar | |
if (yCoord < Average && yCoord > Average - 0.02) | |
{ | |
color = fixed4(1, 1, 1, 1); | |
} | |
// CautionColor bar | |
if (yCoord < _CautionThreshold && yCoord > _CautionThreshold - 0.02) | |
{ | |
color = _CautionColor; | |
} | |
// GoodColor bar | |
if (yCoord < _GoodThreshold && yCoord > _GoodThreshold - 0.02) | |
{ | |
color = _GoodColor; | |
} | |
// Fade the alpha of the sides of the graph | |
if (xCoord < 0.03) | |
{ | |
color.a *= 1 - (0.03 - xCoord) / 0.03; | |
} | |
else if (xCoord > 0.97) | |
{ | |
color.a *= (1 - xCoord) / 0.03; | |
} | |
fixed4 c = SampleSpriteTexture(IN.texcoord) * color; | |
c.rgb *= c.a; | |
return c; | |
} | |
ENDCG | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment