43 lines
904 B
Plaintext
43 lines
904 B
Plaintext
shader_type spatial;
|
|
|
|
render_mode unshaded;
|
|
|
|
uniform vec4 modelColor : source_color;
|
|
uniform vec4 wireframeColor : source_color;
|
|
|
|
uniform float width : hint_range(0.0, 15.) = 1.;
|
|
uniform float modelOpacity : hint_range(0.0, 1.0) = 1.;
|
|
|
|
uniform bool filtered = false;
|
|
|
|
const vec3 vectors[3] = {
|
|
vec3(1.0, 0.0 ,0.0),
|
|
vec3(0.0, 1.0 ,0.0),
|
|
vec3(0.0, 0.0 ,1.0)
|
|
};
|
|
|
|
varying vec3 baryCoord;
|
|
|
|
void vertex()
|
|
{
|
|
baryCoord = vectors[VERTEX_ID % 3];
|
|
}
|
|
|
|
void fragment() {
|
|
vec3 dBaryCoordX = dFdx(baryCoord);
|
|
vec3 dBaryCoordY = dFdy(baryCoord);
|
|
vec3 dBaryCoord = sqrt(dBaryCoordX*dBaryCoordX + dBaryCoordY*dBaryCoordY);
|
|
|
|
vec3 remap = smoothstep(
|
|
vec3(0.0),
|
|
dBaryCoord * width,
|
|
baryCoord
|
|
);
|
|
|
|
remap = filtered ? remap : step(.5, remap);
|
|
|
|
float closestEdge = min(min(remap.x, remap.y), remap.z);
|
|
|
|
ALBEDO = mix(wireframeColor, modelColor, closestEdge).xyz;
|
|
ALPHA = mix(1., modelOpacity, closestEdge);
|
|
} |