diff --git a/rtiow/renderer/src/bvh_triangles.rs b/rtiow/renderer/src/bvh_triangles.rs index 91b4f71..8833bd5 100644 --- a/rtiow/renderer/src/bvh_triangles.rs +++ b/rtiow/renderer/src/bvh_triangles.rs @@ -27,6 +27,11 @@ impl BVHNode { fn is_leaf(&self) -> bool { self.tri_count > 0 } + + fn cost(&self) -> f32 { + let area = self.aabb.area(); + self.tri_count as f32 * area + } } #[derive(Clone, PartialEq)] @@ -236,16 +241,14 @@ where axis: best_axis, } } - fn subdivide(&mut self, idx: usize) { - let node = &self.bvh_nodes[idx]; - let parent_area = node.aabb.area(); - let parent_cost = node.tri_count as f32 * parent_area; + fn subdivide(&mut self, idx: usize) { let (left_first, tri_count, left_count, i) = { let node = &self.bvh_nodes[idx]; let split = self.find_best_split_plane(&node); + let no_split_cost = node.cost(); // Stop subdividing if it isn't getting any better. - if split.cost >= parent_cost { + if split.cost >= no_split_cost { return; }