[Bf-blender-cvs] [24ccacd3c9b] cycles_procedural_api: apply changes and fixes from optimization branch
Kévin Dietrich
noreply at git.blender.org
Mon Nov 16 13:11:22 CET 2020
Commit: 24ccacd3c9bf2cf03d7c860cb48b0b8067997f3b
Author: Kévin Dietrich
Date: Wed Nov 11 17:56:51 2020 +0100
Branches: cycles_procedural_api
https://developer.blender.org/rB24ccacd3c9bf2cf03d7c860cb48b0b8067997f3b
apply changes and fixes from optimization branch
===================================================================
M intern/cycles/blender/blender_sync.cpp
M intern/cycles/render/geometry.cpp
M intern/cycles/render/integrator.cpp
M intern/cycles/render/light.cpp
M intern/cycles/render/object.cpp
===================================================================
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 7f7ec17cb38..8b8f1579ab7 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -306,11 +306,6 @@ void BlenderSync::sync_integrator()
integrator->set_sample_clamp_direct(get_float(cscene, "sample_clamp_direct"));
integrator->set_sample_clamp_indirect(get_float(cscene, "sample_clamp_indirect"));
if (!preview) {
- if (integrator->get_motion_blur() != r.use_motion_blur()) {
- scene->object_manager->tag_update(scene, MOTION_BLUR_MODIFIED);
- scene->camera->tag_modified();
- }
-
integrator->set_motion_blur(r.use_motion_blur());
}
diff --git a/intern/cycles/render/geometry.cpp b/intern/cycles/render/geometry.cpp
index 3ff952e81ab..16049f0be3b 100644
--- a/intern/cycles/render/geometry.cpp
+++ b/intern/cycles/render/geometry.cpp
@@ -1247,27 +1247,28 @@ void GeometryManager::device_update_bvh(Device *device,
if (bvh) {
bvh->pack = {};
- if (!(device_update_flags & DEVICE_DATA_NEEDS_REALLOC) &&
- bparams.bvh_layout == BVHLayout::BVH_LAYOUT_OPTIX) {
- bvh->refit(progress);
- }
-
+ if (!(device_update_flags & DEVICE_DATA_NEEDS_REALLOC)) {
+ if (bparams.bvh_layout == BVHLayout::BVH_LAYOUT_OPTIX) {
+ std::cerr << "Tag BVH for refit\n";
+ bvh->refit(progress);
+ }
#if 1
- PackedBVH &pack = bvh->pack;
- dscene->prim_tri_verts.give_data(pack.prim_tri_verts);
+ PackedBVH &pack = bvh->pack;
+ dscene->prim_tri_verts.give_data(pack.prim_tri_verts);
#else
- PackedBVH &pack = bvh->pack;
- // dscene->bvh_nodes.give_data(pack.nodes);
- // dscene->bvh_leaf_nodes.give_data(pack.leaf_nodes);
- // dscene->object_node.give_data(pack.object_node);
- dscene->prim_tri_index.give_data(pack.prim_tri_index);
- dscene->prim_tri_verts.give_data(pack.prim_tri_verts);
- dscene->prim_type.give_data(pack.prim_type);
- dscene->prim_visibility.give_data(pack.prim_visibility);
- dscene->prim_index.give_data(pack.prim_index);
- dscene->prim_object.give_data(pack.prim_object);
- dscene->prim_time.give_data(pack.prim_time);
+ PackedBVH &pack = bvh->pack;
+ // dscene->bvh_nodes.give_data(pack.nodes);
+ // dscene->bvh_leaf_nodes.give_data(pack.leaf_nodes);
+ // dscene->object_node.give_data(pack.object_node);
+ dscene->prim_tri_index.give_data(pack.prim_tri_index);
+ dscene->prim_tri_verts.give_data(pack.prim_tri_verts);
+ dscene->prim_type.give_data(pack.prim_type);
+ dscene->prim_visibility.give_data(pack.prim_visibility);
+ dscene->prim_index.give_data(pack.prim_index);
+ dscene->prim_object.give_data(pack.prim_object);
+ dscene->prim_time.give_data(pack.prim_time);
#endif
+ }
}
if (!bvh || (device_update_flags & DEVICE_DATA_NEEDS_REALLOC)) {
@@ -1723,7 +1724,9 @@ void GeometryManager::device_update(Device *device,
return;
}
- bool need_update_scene_bvh = false;
+ /* update the bvh even when there is no geometry so the bvh data in the kernel is still valid,
+ * especially when removing all the objects in interactive rendering */
+ bool need_update_scene_bvh = scene->geometry.size() == 0;
{
scoped_callback_timer timer([scene](double time) {
if (scene->update_stats) {
diff --git a/intern/cycles/render/integrator.cpp b/intern/cycles/render/integrator.cpp
index e43ea89e1b2..0461cfec62d 100644
--- a/intern/cycles/render/integrator.cpp
+++ b/intern/cycles/render/integrator.cpp
@@ -17,9 +17,11 @@
#include "render/integrator.h"
#include "device/device.h"
#include "render/background.h"
+#include "render/camera.h"
#include "render/film.h"
#include "render/jitter.h"
#include "render/light.h"
+#include "render/object.h"
#include "render/scene.h"
#include "render/shader.h"
#include "render/sobol.h"
@@ -298,6 +300,11 @@ void Integrator::tag_update(Scene *scene, UpdateFlags flag)
}
}
}
+
+ if (motion_blur_is_modified()) {
+ scene->object_manager->tag_update(scene, MOTION_BLUR_MODIFIED);
+ scene->camera->tag_modified();
+ }
}
CCL_NAMESPACE_END
diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp
index 4bd226d2cdb..b4490e51f03 100644
--- a/intern/cycles/render/light.cpp
+++ b/intern/cycles/render/light.cpp
@@ -1118,7 +1118,7 @@ void LightManager::remove_ies(int slot)
/* If the slot has no more users, update the device to remove it. */
if (ies_slots[slot]->users == 0) {
update_flags |= UPDATE_ALL;
- need_update_background |= need_update();
+ need_update_background = true;
}
}
diff --git a/intern/cycles/render/object.cpp b/intern/cycles/render/object.cpp
index e013114c42e..6e9f07e1936 100644
--- a/intern/cycles/render/object.cpp
+++ b/intern/cycles/render/object.cpp
@@ -745,8 +745,6 @@ void ObjectManager::device_update(Device *device,
foreach (Object *object, scene->objects) {
object->clear_modified();
}
-
- update_flags = UPDATE_NONE;
}
void ObjectManager::device_update_flags(
@@ -903,7 +901,9 @@ void ObjectManager::device_free(Device *, DeviceScene *dscene)
dscene->object_volume_step.free();
}
-void ObjectManager::apply_static_transforms(DeviceScene *dscene, Scene *scene, Progress &progress)
+void ObjectManager::apply_static_transforms(DeviceScene * /*dscene*/,
+ Scene *scene,
+ Progress &progress)
{
/* todo: normals and displacement should be done before applying transform! */
/* todo: create objects/geometry in right order! */
@@ -927,8 +927,6 @@ void ObjectManager::apply_static_transforms(DeviceScene *dscene, Scene *scene, P
if (progress.get_cancel())
return;
- uint *object_flag = dscene->object_flag.data();
-
/* apply transforms for objects with single user geometry */
foreach (Object *object, scene->objects) {
/* Annoying feedback loop here: we can't use is_instanced() because
More information about the Bf-blender-cvs
mailing list