summaryrefslogtreecommitdiff
path: root/bin/chroma-bvh
diff options
context:
space:
mode:
authorStan Seibert <stan@mtrr.org>2012-01-24 16:21:02 -0500
committertlatorre <tlatorre@uchicago.edu>2021-05-09 08:42:38 -0700
commit70db095406da6a9ffd6d0234298d282b4d6cc12f (patch)
tree1f5f9d007f1be9030259792f79e3126123556c45 /bin/chroma-bvh
parentfd835f2266fdf28febb7e15591c907f8f28776f8 (diff)
downloadchroma-70db095406da6a9ffd6d0234298d282b4d6cc12f.tar.gz
chroma-70db095406da6a9ffd6d0234298d282b4d6cc12f.tar.bz2
chroma-70db095406da6a9ffd6d0234298d282b4d6cc12f.zip
If the node_swap optimization is run with a minus sign after the layer number, it will be done to that layer, and all layers above it.
Diffstat (limited to 'bin/chroma-bvh')
-rw-r--r--bin/chroma-bvh36
1 files changed, 25 insertions, 11 deletions
diff --git a/bin/chroma-bvh b/bin/chroma-bvh
index d67904a..ed3b500 100644
--- a/bin/chroma-bvh
+++ b/bin/chroma-bvh
@@ -31,7 +31,14 @@ def parse_bvh_id(id_str):
def node_swap(cache, args):
geo_name, bvh_name = parse_bvh_id(args[0])
- opt_layer_index = int(args[1])
+
+ if args[1].endswith('-'):
+ redo_all_above = True
+ opt_layer_index = int(args[1][:-1])
+ else:
+ redo_all_above = False
+ opt_layer_index = int(args[1])
+
mesh_hash = cache.get_geometry_hash(geo_name)
bvh = cache.load_bvh(mesh_hash, bvh_name)
@@ -39,20 +46,27 @@ def node_swap(cache, args):
print 'Can only optimize node order in this tree for layers 1 through %d' % (bvh.layer_count() - 1)
return
- original_parent_area = bvh.get_layer(opt_layer_index-1).area()
+ if redo_all_above:
+ opt_range = range(2, opt_layer_index+1)
+ opt_range.reverse()
+ else:
+ opt_range = [opt_layer_index]
+
context = create_cuda_context()
+ for opt_layer_index in opt_range:
+ original_parent_area = bvh.get_layer(opt_layer_index-1).area()
- print 'Optimizing layer %d through node swaps' % opt_layer_index
- opt_layer = bvh.get_layer(opt_layer_index)
- new_layer_nodes = optimize_layer(bvh.get_layer(opt_layer_index).nodes)
- bvh.nodes[bvh.layer_bounds[opt_layer_index]:bvh.layer_bounds[opt_layer_index+1]] = new_layer_nodes
+ print 'Optimizing layer %d through node swaps' % opt_layer_index
+ opt_layer = bvh.get_layer(opt_layer_index)
+ new_layer_nodes = optimize_layer(bvh.get_layer(opt_layer_index).nodes)
+ bvh.nodes[bvh.layer_bounds[opt_layer_index]:bvh.layer_bounds[opt_layer_index+1]] = new_layer_nodes
- print 'Rebuilding tree...'
- new_nodes = rebuild_tree(bvh, opt_layer_index)
- bvh.nodes = new_nodes
+ print 'Rebuilding tree...'
+ new_nodes = rebuild_tree(bvh, opt_layer_index)
+ bvh.nodes = new_nodes
- print 'Original parent area: %e' % original_parent_area
- print 'New parent area: %e' % bvh.get_layer(opt_layer_index-1).area()
+ print 'Original parent area (layer %d): %e' % (opt_layer_index, original_parent_area)
+ print 'New parent area (layer %d): %e' % (opt_layer_index, bvh.get_layer(opt_layer_index-1).area())
print 'Saving new BVH...'
context.pop()