VirtualFramework/Assets/Shader/WireframeWhiteSurface.shader

71 lines
2.0 KiB
Plaintext
Raw Normal View History

Shader "Custom/WireframeWhiteSurface" {
Properties {
_WireColor ("Wire Color", Color) = (0,0,0,1) // <20>߿<EFBFBD><DFBF><EFBFBD>ɫ
_SurfaceColor ("Surface Color", Color) = (1,1,1,1) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
_Thickness ("Thickness", Range(0, 0.5)) = 0.05
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 100
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma geometry geom
#include "UnityCG.cginc"
struct appdata {
float4 vertex : POSITION;
};
struct v2g {
float4 vertex : POSITION;
};
struct g2f {
float4 pos : SV_POSITION;
float3 bary : TEXCOORD0;
};
float _Thickness;
fixed4 _WireColor;
fixed4 _SurfaceColor;
v2g vert (appdata v) {
v2g o;
o.vertex = v.vertex;
return o;
}
[maxvertexcount(3)]
void geom(triangle v2g IN[3], inout TriangleStream<g2f> stream) {
g2f o;
o.bary = float3(1, 0, 0);
o.pos = UnityObjectToClipPos(IN[0].vertex);
stream.Append(o);
o.bary = float3(0, 1, 0);
o.pos = UnityObjectToClipPos(IN[1].vertex);
stream.Append(o);
o.bary = float3(0, 0, 1);
o.pos = UnityObjectToClipPos(IN[2].vertex);
stream.Append(o);
}
fixed4 frag (g2f i) : SV_Target {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD>
float minBary = min(min(i.bary.x, i.bary.y), i.bary.z);
// <20>߿򲿷֣<F2B2BFB7><D6A3><EFBFBD>ɫ
if (minBary < _Thickness) {
return _WireColor;
}
// <20><><EFBFBD>沿<EFBFBD>֣<EFBFBD><D6A3><EFBFBD>ɫ
return _SurfaceColor;
}
ENDCG
}
}
}