57 lines
No EOL
1.6 KiB
Text
57 lines
No EOL
1.6 KiB
Text
shader_type spatial;
|
|
|
|
uniform int scale_0 : hint_range(1, 1024, 1);
|
|
uniform int scale_1 : hint_range(1, 1024, 1);
|
|
|
|
uniform float line_scale_0 : hint_range(0.001, 1, 0.001);
|
|
uniform float line_scale_1 : hint_range(0.001, 1, 0.001);
|
|
|
|
uniform vec4 color_0 : source_color;
|
|
uniform vec4 color_1 : source_color;
|
|
|
|
render_mode blend_add;
|
|
|
|
float pristineGrid( vec2 uv, vec2 lineWidth)
|
|
{
|
|
vec2 ddx = dFdx(uv);
|
|
vec2 ddy = dFdy(uv);
|
|
|
|
vec2 uvDeriv = vec2(length(vec2(ddx.x, ddy.x)), length(vec2(ddx.y, ddy.y)));
|
|
bvec2 invertLine = bvec2(lineWidth.x > 0.5, lineWidth.y > 0.5);
|
|
|
|
vec2 targetWidth = vec2(
|
|
invertLine.x ? 1.0 - lineWidth.x : lineWidth.x,
|
|
invertLine.y ? 1.0 - lineWidth.y : lineWidth.y
|
|
);
|
|
|
|
vec2 drawWidth = clamp(targetWidth, uvDeriv, vec2(0.5));
|
|
vec2 lineAA = uvDeriv * 1.5;
|
|
vec2 gridUV = abs(fract(uv) * 2.0 - 1.0);
|
|
|
|
gridUV.x = invertLine.x ? gridUV.x : 1.0 - gridUV.x;
|
|
gridUV.y = invertLine.y ? gridUV.y : 1.0 - gridUV.y;
|
|
|
|
vec2 grid2 = smoothstep(drawWidth + lineAA, drawWidth - lineAA, gridUV);
|
|
|
|
grid2 *= clamp(targetWidth / drawWidth, 0.0, 1.0);
|
|
grid2 = mix(grid2, targetWidth, clamp(uvDeriv * 2.0 - 1.0, 0.0, 1.0));
|
|
grid2.x = invertLine.x ? 1.0 - grid2.x : grid2.x;
|
|
grid2.y = invertLine.y ? 1.0 - grid2.y : grid2.y;
|
|
return mix(grid2.x, 1.0, grid2.y);
|
|
}
|
|
|
|
void vertex()
|
|
{
|
|
//UV = VERTEX.xz;
|
|
}
|
|
|
|
void fragment()
|
|
{
|
|
vec3 grid_0 = vec3(pristineGrid(UV * float(scale_0), vec2(line_scale_0)));
|
|
vec3 grid_1 = vec3(pristineGrid(UV * float(scale_1), vec2(line_scale_1)));
|
|
|
|
vec3 grid_3 = mix(grid_1 * color_1.rgb, grid_0 * color_0.rgb, grid_0);
|
|
|
|
ALBEDO = grid_3;
|
|
ALPHA = 1.5;
|
|
} |