Unity-DebugX/Runtime/Shaders/HandlesWire.shader

102 lines
2.4 KiB
Plaintext
Raw Normal View History

2025-02-22 17:25:54 +08:00
Shader "DCFApixels/DebugX/Handles Wire"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
}
SubShader
{
2025-03-03 15:56:20 +08:00
Tags { "Queue"="Transparent" "RenderType"="Transparent" "IgnoreProjector"="True" "ForceNoShadowCasting"="True" }
2025-02-22 17:25:54 +08:00
Blend SrcAlpha OneMinusSrcAlpha
2025-03-03 15:56:20 +08:00
ZWrite Off
Fog { Mode Off }
2025-02-22 17:25:54 +08:00
Lighting Off
2025-03-03 15:56:20 +08:00
Offset -1, -1
2025-02-22 17:25:54 +08:00
ZTest Off
CGINCLUDE
#pragma vertex vert
#pragma geometry geom
#pragma fragment frag
#pragma multi_compile_instancing
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float4 color : COLOR;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct v2g
{
float4 vertex : POSITION;
float4 color : COLOR;
};
struct g2f
{
float4 vertex : SV_POSITION;
float4 color : COLOR;
};
UNITY_INSTANCING_BUFFER_START(Props)
UNITY_DEFINE_INSTANCED_PROP(float4, _Color)
UNITY_INSTANCING_BUFFER_END(Props)
float4 _DebugX_GlobalColor;
v2g vert(appdata v)
{
v2g o;
UNITY_SETUP_INSTANCE_ID(v);
o.vertex = UnityObjectToClipPos(v.vertex);
o.color = v.color * UNITY_ACCESS_INSTANCED_PROP(Props, _Color) * _DebugX_GlobalColor;
return o;
}
[maxvertexcount(6)]
void geom(triangle v2g input[3], inout LineStream<g2f> lineStream)
{
g2f o;
2025-02-24 18:21:31 +08:00
for (uint i = 0; i < 3; i++)
2025-02-22 17:25:54 +08:00
{
o.vertex = input[i].vertex;
o.color = input[i].color;
lineStream.Append(o);
2025-02-24 13:16:30 +08:00
uint next = (i + 1) % 3;
2025-02-22 17:25:54 +08:00
o.vertex = input[next].vertex;
o.color = input[next].color;
lineStream.Append(o);
lineStream.RestartStrip();
}
}
ENDCG
Pass
{
ZTest LEqual
CGPROGRAM
half4 frag (g2f i) : SV_Target
{
return i.color;
}
ENDCG
}
Pass
{
ZTest Greater
CGPROGRAM
half4 frag (g2f i) : SV_Target
{
return i.color * half4(1, 1, 1, 0.05);
}
ENDCG
}
}
}