From bb6498a1931144b6b4584038e00012d47e014023 Mon Sep 17 00:00:00 2001 From: sergeypdev Date: Sun, 13 Jul 2025 01:08:53 +0400 Subject: [PATCH] Debug visualize tris of static tlas --- assets/blender/test_level_blend/NurbsPath.glb | 4 +-- assets/blender/test_level_blend/Scene.scn | 2 +- game/assets/assets.odin | 3 +- game/physics/bvh/debug.odin | 31 +++++++++++++++++++ game/physics/debug.odin | 22 +++++++++++++ src_assets/test_level.blend | 4 +-- src_assets/test_level.blend1 | 2 +- 7 files changed, 61 insertions(+), 7 deletions(-) diff --git a/assets/blender/test_level_blend/NurbsPath.glb b/assets/blender/test_level_blend/NurbsPath.glb index 2c3d4c8..abf8869 100644 --- a/assets/blender/test_level_blend/NurbsPath.glb +++ b/assets/blender/test_level_blend/NurbsPath.glb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2df3c576871ee4ab3327e70fa2dff12cf6f0ae7a715c314f87735781e65a8897 -size 19608 +oid sha256:32d2ebbdb78fe6f6121051c11926a24aba3bbfc672eb7878c4f60745a1c7719d +size 19628 diff --git a/assets/blender/test_level_blend/Scene.scn b/assets/blender/test_level_blend/Scene.scn index a11f3cb..70ace8d 100644 --- a/assets/blender/test_level_blend/Scene.scn +++ b/assets/blender/test_level_blend/Scene.scn @@ -40,6 +40,6 @@ :scale (1.000000 1.000000 1.000000)) (inst :model "assets/blender/test_level_blend/NurbsPath.glb" - :pos (0.000000 0.000000 0.000000) + :pos (0.000000 1.000000 0.000000) :rot (0.000000 0.000000 0.000000 1.000000) :scale (1.000000 1.000000 1.000000)) diff --git a/game/assets/assets.odin b/game/assets/assets.odin index 4736afc..08daa71 100644 --- a/game/assets/assets.odin +++ b/game/assets/assets.odin @@ -512,6 +512,8 @@ get_bvh :: proc(assetman: ^Asset_Manager, path: cstring) -> (Loaded_BVH, bool) { vert_count += int(mesh.vertexCount) indices_count += int(mesh.triangleCount * 3) } + assert(vert_count < int(max(u16))) + vertices := make([]bvh.Vec3, vert_count) indices := make([]u16, indices_count) @@ -526,7 +528,6 @@ get_bvh :: proc(assetman: ^Asset_Manager, path: cstring) -> (Loaded_BVH, bool) { for j in 0 ..< len(mesh_indices) { index := vert_count + int(mesh_indices[j]) - assert(index <= int(max(u16))) indices[indices_count + j] = u16(index) } diff --git a/game/physics/bvh/debug.odin b/game/physics/bvh/debug.odin index b225a39..a895e9d 100644 --- a/game/physics/bvh/debug.odin +++ b/game/physics/bvh/debug.odin @@ -92,6 +92,37 @@ debug_draw_bvh_bounds_mesh :: proc(bvh: ^BVH, mesh: Mesh, pos: rl.Vector3, node_ } } +Iterator :: struct { + bvh: ^BVH, + nodes_to_process: queue.Queue(i32), +} + +iterator :: proc(bvh: ^BVH) -> (it: Iterator) { + it.bvh = bvh + queue.init(&it.nodes_to_process, queue.DEFAULT_CAPACITY, context.temp_allocator) + + if len(bvh.nodes) > 0 { + queue.push_back(&it.nodes_to_process, 0) + } + + return +} + +iterator_next :: proc(it: ^Iterator) -> (node: Node, node_index: i32, ok: bool) { + if queue.len(it.nodes_to_process) == 0 { + return {}, -1, false + } + + node_index = queue.pop_front(&it.nodes_to_process) + node = it.bvh.nodes[node_index] + if !is_leaf_node(node) { + left_child := node.child_or_prim_start + queue.push_back_elems(&it.nodes_to_process, left_child, left_child + 1) + } + ok = true + return +} + debug_draw_bvh_bounds :: proc(bvh: ^BVH, primitive_bounds: []AABB, node_index: int) { tracy.Zone() diff --git a/game/physics/debug.odin b/game/physics/debug.odin index e2285c7..766bc60 100644 --- a/game/physics/debug.odin +++ b/game/physics/debug.odin @@ -70,6 +70,28 @@ draw_debug_scene :: proc(scene: ^Scene, debug_state: ^Debug_State) { sim_state.static_tlas.level_geom_aabbs, 0, ) + + it := bvh.iterator(&sim_state.static_tlas.bvh_tree) + + for node in bvh.iterator_next(&it) { + if bvh.is_leaf_node(node) { + prim_start := node.child_or_prim_start + + for level_geom_idx in prim_start ..< prim_start + node.prim_len { + level_geom_handle := index_to_level_geom(int(level_geom_idx)) + level_geom := get_level_geom(sim_state, level_geom_handle) + blas := get_level_geom_blas(sim_state, level_geom_handle) + vertices, indices := get_level_geom_data(sim_state, level_geom_handle) + + bvh.debug_draw_bvh_bounds_mesh( + &blas, + bvh.Mesh{vertices = vertices, indices = indices}, + level_geom.x, + 0, + ) + } + } + } } // Dynamic TLAS diff --git a/src_assets/test_level.blend b/src_assets/test_level.blend index 1babbcd..898fef7 100644 --- a/src_assets/test_level.blend +++ b/src_assets/test_level.blend @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:533225496bc26bb37bc4a1d760b34beb5868bee3835923c2ab78e1f2de05672c -size 511650 +oid sha256:5f5de4f5ba916f473b00f6f53a94af7d602ceaeede412b20aa50d1304e6fc07c +size 511651 diff --git a/src_assets/test_level.blend1 b/src_assets/test_level.blend1 index 13ae2ee..1babbcd 100644 --- a/src_assets/test_level.blend1 +++ b/src_assets/test_level.blend1 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7e8e7a7dbb89d5013fdde3302bccced191e784b7a09d86495317deeaca189121 +oid sha256:533225496bc26bb37bc4a1d760b34beb5868bee3835923c2ab78e1f2de05672c size 511650