[Bf-blender-cvs] [3b5805eb326] cycles_procedural_api: add a parameter to control the maximum number of BVH refits
Kévin Dietrich
noreply at git.blender.org
Fri Nov 6 18:48:01 CET 2020
Commit: 3b5805eb326966ef9e4474a58c50961ce7214212
Author: Kévin Dietrich
Date: Fri Nov 6 16:47:59 2020 +0100
Branches: cycles_procedural_api
https://developer.blender.org/rB3b5805eb326966ef9e4474a58c50961ce7214212
add a parameter to control the maximum number of BVH refits
===================================================================
M intern/cycles/blender/addon/properties.py
M intern/cycles/blender/addon/ui.py
M intern/cycles/blender/blender_sync.cpp
M intern/cycles/bvh/bvh.cpp
M intern/cycles/bvh/bvh.h
M intern/cycles/render/geometry.cpp
M intern/cycles/render/scene.h
===================================================================
diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index 51492cd4b45..6c46a06e22a 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -677,10 +677,10 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
items=enum_bvh_types,
default='DYNAMIC_BVH',
)
- bvh_rebuild_rate: IntProperty(
- name="BVH Rebuild Rate",
- description="Only rebuild the BVH every N frame, for faster updates on frame change in the viewport",
- default=1,
+ max_bvh_refits: IntProperty(
+ name="Max BVH Refits",
+ description="Maximum number of times a BVH is refitted",
+ default=10,
min=1,
)
debug_use_spatial_splits: BoolProperty(
diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py
index f9c7ec9206c..c0c5f146dfb 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -723,7 +723,7 @@ class CYCLES_RENDER_PT_performance_acceleration_structure(CyclesButtonsPanel, Pa
sub.active = not cscene.debug_use_spatial_splits and not use_embree
sub.prop(cscene, "debug_bvh_time_steps")
sub = col.column()
- sub.prop(cscene, "bvh_rebuild_rate")
+ sub.prop(cscene, "max_bvh_refits")
class CYCLES_RENDER_PT_performance_final_render(CyclesButtonsPanel, Panel):
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 501bedb43b1..91d33a4478c 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -781,14 +781,7 @@ SceneParams BlenderSync::get_scene_params(BL::Scene &b_scene, bool background)
params.use_bvh_spatial_split = RNA_boolean_get(&cscene, "debug_use_spatial_splits");
params.use_bvh_unaligned_nodes = RNA_boolean_get(&cscene, "debug_use_hair_bvh");
params.num_bvh_time_steps = RNA_int_get(&cscene, "debug_bvh_time_steps");
-
- int bvh_rebuild_rate = RNA_int_get(&cscene, "bvh_rebuild_rate");
- if (bvh_rebuild_rate < 1) {
- bvh_rebuild_rate = 1;
- }
-
- int frame_delta = b_scene.frame_current() - b_scene.frame_start();
- params.use_bvh_refit = (frame_delta % bvh_rebuild_rate) != 0;
+ params.max_bvh_refits = RNA_int_get(&cscene, "max_bvh_refits");
PointerRNA csscene = RNA_pointer_get(&b_scene.ptr, "cycles_curves");
params.hair_subdivisions = get_int(csscene, "subdivisions");
diff --git a/intern/cycles/bvh/bvh.cpp b/intern/cycles/bvh/bvh.cpp
index a51ac4cf4a9..34f26908a2b 100644
--- a/intern/cycles/bvh/bvh.cpp
+++ b/intern/cycles/bvh/bvh.cpp
@@ -92,7 +92,7 @@ int BVHStackEntry::encodeIdx() const
BVH::BVH(const BVHParams ¶ms_,
const vector<Geometry *> &geometry_,
const vector<Object *> &objects_)
- : params(params_), geometry(geometry_), objects(objects_)
+ : params(params_), geometry(geometry_), objects(objects_), num_refits(0)
{
}
@@ -191,6 +191,7 @@ void BVH::refit(Progress &progress)
progress.set_substatus("Refitting BVH nodes");
refit_nodes();
+ num_refits += 1;
}
void BVH::refit_primitives(int start, int end, BoundBox &bbox, uint &visibility)
diff --git a/intern/cycles/bvh/bvh.h b/intern/cycles/bvh/bvh.h
index 705151e4e02..7430ae45494 100644
--- a/intern/cycles/bvh/bvh.h
+++ b/intern/cycles/bvh/bvh.h
@@ -89,6 +89,7 @@ class BVH {
device_ptr prim_vert_pointer;
size_t pack_verts_offset;
+ int num_refits;
static BVH *create(const BVHParams ¶ms,
const vector<Geometry *> &geometry,
diff --git a/intern/cycles/render/geometry.cpp b/intern/cycles/render/geometry.cpp
index 1db1a28f91e..7613a7ebe38 100644
--- a/intern/cycles/render/geometry.cpp
+++ b/intern/cycles/render/geometry.cpp
@@ -212,7 +212,7 @@ void Geometry::compute_bvh(
vector<Object *> objects;
objects.push_back(&object);
- if (bvh && (!need_update_rebuild || params->use_bvh_refit)) {
+ if (bvh && !need_update_rebuild && bvh->num_refits < params->max_bvh_refits) {
progress->set_status(msg, "Refitting BVH");
bvh->geometry = geometry;
diff --git a/intern/cycles/render/scene.h b/intern/cycles/render/scene.h
index 1b8252837f6..066b0f82f66 100644
--- a/intern/cycles/render/scene.h
+++ b/intern/cycles/render/scene.h
@@ -181,7 +181,7 @@ class SceneParams {
CurveShapeType hair_shape;
bool persistent_data;
int texture_limit;
- bool use_bvh_refit;
+ int max_bvh_refits;
bool background;
@@ -198,7 +198,7 @@ class SceneParams {
persistent_data = false;
texture_limit = 0;
background = true;
- use_bvh_refit = false;
+ max_bvh_refits = 10;
}
bool modified(const SceneParams ¶ms)
@@ -215,7 +215,7 @@ class SceneParams {
bool update_params(const SceneParams ¶ms)
{
/* We do not want to include use_bvh_refit in the modified detection as this will recreate the entire scene. */
- use_bvh_refit = params.use_bvh_refit;
+ max_bvh_refits = params.max_bvh_refits;
return modified(params);
}
More information about the Bf-blender-cvs
mailing list