@@ -20,54 +20,38 @@ vec3 grid(vec2 position, float scale, float thickness, float level) {
2020 const float base_line_width = thickness;
2121 position += base_line_width / scale / 2.0 ;
2222 vec2 grid_pos = mod (position, level);
23- vec2 grid_point = step (grid_pos, vec2 (base_line_width / scale)); // ensures constant line size, which I don't want...
24- float grid = min (1.0 , grid_point.x + grid_point.y); // float(grid_point.x != 0.0 || grid_point.y != 0.0)
23+ vec2 derivative = fwidth (grid_pos);
24+ vec2 grid_point = smoothstep (grid_pos - derivative, grid_pos, vec2 (base_line_width / scale)); // ensures constant line size
25+ float grid = min (1.0 , grid_point.x + grid_point.y);
2526 vec3 col = vec3 (grid);
26- if (abs (position.x) < base_line_width / scale) {
27- col = vec3 (0.0 , 1.0 , 0.0 ); // green at x=0
28- }
29- if (abs (position.y) < base_line_width / scale) {
30- col = vec3 (1.0 , 0.0 , 0.0 ); // red at y=0
31- }
3227 return col;
3328}
3429
3530
3631void main() {
37- const float logscale = 5.0 ;
32+ const float LOGSCALE = 5.0 ;
33+ const float MAX_LINE_THICKNESS = 0.010 ;
3834
3935 vec2 offset = (inverse(camera.view_proj) * vec4 (uv * 2 - 1 , 0.0 , 1.0 )).xy; // TODO: optimize
40- vec2 derivative = fwidth (offset);
4136
42- float grid_level = log (pan_and_zoom.zoom) / log (logscale ) + 3.0 + 1.20 ; // [0, 4] for zoom [0.001, 10]
37+ float grid_level = log (pan_and_zoom.zoom) / log (LOGSCALE ) + 3.0 + 1.20 ; // [0, 4] for zoom [0.001, 10] + 1.2 for styling
4338 uint grid_floor = uint (floor (grid_level));
4439 uint grid_ceil = uint (ceil (grid_level));
4540 float t = grid_level - float (grid_floor);
46- // t = t*t;//pow(t,t); // slightly more aggressive fadein
4741
48- float thickness0 = (1.0 - t) * 0.010 ;
49- float thickness1 = (t) * 0.010 ;
50- float scale0 = pow (logscale , 3.0 - grid_floor);
51- float scale1 = scale0 / logscale ;
42+ float thickness0 = (1.0 - t) * MAX_LINE_THICKNESS ;
43+ float thickness1 = (t) * MAX_LINE_THICKNESS ;
44+ float scale0 = pow (LOGSCALE , 3.0 - grid_floor);
45+ float scale1 = scale0 / LOGSCALE ;
5246 vec3 col0 = grid(offset, pan_and_zoom.zoom, thickness0, scale0);
53- // if (col0 == vec3(1.0)){
54- // col0 = vec3(1,0,0);
55- // }
5647 vec3 col1 = grid(offset, pan_and_zoom.zoom, thickness1, scale1);
57- // if (col1 == vec3(1.0)) {
58- // col1 = vec3(0,1,0);
59- // }
6048 vec3 col = mix (col0, col1, t);
61-
62- // vec3 col0 = grid(offset, pan_and_zoom.zoom, 0.005, 100); // grid valid for zoom ~0.001 (unused..?) 0
63- // vec3 col1 = grid(offset, pan_and_zoom.zoom, 0.005, 10); // grid valid for zoom ~0.01 1
64- // vec3 col2 = grid(offset, pan_and_zoom.zoom, 0.005, 1); // grid valid for zoom ~0.1 2
65- // vec3 col3 = grid(offset, pan_and_zoom.zoom, 0.005, 0.1); // grid valid for zoom ~1 3
66- // vec3 col4 = grid(offset, pan_and_zoom.zoom, 0.005, 0.01); // grid valid for zoom ~10 4
67- // vec3 grids[5] = {col0, col1, col2, col3, col4};
68-
69- // vec3 col = mix(grids[grid_floor], grids[grid_ceil], t);
70-
71-
49+ float thickness = max (thickness0, thickness1);
50+ if (abs (offset.x) < thickness / pan_and_zoom.zoom) {
51+ col.rb = vec2 (0.0 );
52+ }
53+ if (abs (offset.y) < thickness / pan_and_zoom.zoom) {
54+ col.gb = vec2 (0.0 );
55+ }
7256 out_FragColor = vec4 (col, 1.0 );
7357}
0 commit comments