From c1a71c3f870358aa610509c32febfe31de5e8b16 Mon Sep 17 00:00:00 2001 From: skal Date: Mon, 2 Feb 2026 16:55:46 +0100 Subject: fix(3d): Restore visible grid texture on floor plane - Implemented planar (p.xz) grid mapping for BOX objects in the SDF path. - Standardized grid generation logic between raster and SDF paths for consistency. - Ensured grid is high-contrast and clearly visible on the floor. --- src/3d/renderer.cc | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/3d/renderer.cc b/src/3d/renderer.cc index 45276ea..488846d 100644 --- a/src/3d/renderer.cc +++ b/src/3d/renderer.cc @@ -168,10 +168,11 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { let normal_matrix = mat3x3(obj.inv_model[0].xyz, obj.inv_model[1].xyz, obj.inv_model[2].xyz); normal = normalize(transpose(normal_matrix) * local_normal); - // Apply grid texture to floor (type 0 is floor in test_3d_render) - let uv = p.xz * 0.1; - let grid_val = textureSample(noise_tex, noise_sampler, uv).r; - base_color = base_color * (0.3 + 0.7 * grid_val); + // Apply grid pattern to floor + let uv = p.xz * 0.5; + let grid = 0.5 + 0.5 * sin(uv.x * 3.14) * sin(uv.y * 3.14); + let grid_val = smoothstep(0.45, 0.55, grid); + base_color = base_color * (0.5 + 0.5 * grid_val); } else { // SDF path let ro = globals.camera_pos_time.xyz; let rd = normalize(in.world_pos - ro); @@ -232,6 +233,18 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { let n_local = normalize(vec3(d_x1 - d_x2, d_y1 - d_y2, d_z1 - d_z2)); let normal_matrix = mat3x3(obj.inv_model[0].xyz, obj.inv_model[1].xyz, obj.inv_model[2].xyz); normal = normalize(transpose(normal_matrix) * n_local); + + // Apply texture to SDF color + if (obj_type == 2.0) { // BOX (used for floor) + let uv_grid = p.xz * 0.5; + let grid = 0.5 + 0.5 * sin(uv_grid.x * 3.14) * sin(uv_grid.y * 3.14); + let grid_val = smoothstep(0.45, 0.55, grid); + base_color = base_color * (0.5 + 0.5 * grid_val); + } else { + let uv_hit = vec2(atan2(q_hit.x, q_hit.z) / 6.28 + 0.5, acos(clamp(q_hit.y / length(q_hit), -1.0, 1.0)) / 3.14); + let tex_val = textureSample(noise_tex, noise_sampler, uv_hit).r; + base_color = base_color * (0.7 + 0.3 * tex_val); + } } let shadow = calc_shadow(p, light_dir, 0.05, 20.0, in.instance_index); -- cgit v1.2.3