[Bf-blender-cvs] [16d8a683be4] blender-v2.83-release: Fix T73984: unnecessary Cycles viewport updates with object texture coordinates

Brecht Van Lommel noreply at git.blender.org
Thu May 14 17:39:51 CEST 2020


Commit: 16d8a683be4348b5c6eff48cbb16c7454863d9ea
Author: Brecht Van Lommel
Date:   Thu May 14 17:26:04 2020 +0200
Branches: blender-v2.83-release
https://developer.blender.org/rB16d8a683be4348b5c6eff48cbb16c7454863d9ea

Fix T73984: unnecessary Cycles viewport updates with object texture coordinates

Remove old code that added extra updates for shaders that have a dependency on
objects. The dependency graph can now tell Cycles when a material is affected by
an object transform.

===================================================================

M	intern/cycles/blender/blender_shader.cpp
M	intern/cycles/blender/blender_sync.cpp
M	intern/cycles/render/graph.h
M	intern/cycles/render/nodes.h
M	intern/cycles/render/osl.cpp
M	intern/cycles/render/shader.cpp
M	intern/cycles/render/shader.h
M	intern/cycles/render/svm.cpp

===================================================================

diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp
index edde1fd243e..7297ce829c5 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -1231,12 +1231,11 @@ void BlenderSync::sync_materials(BL::Depsgraph &b_depsgraph, bool update_all)
     Shader *shader;
 
     /* test if we need to sync */
-    if (shader_map.add_or_update(&shader, b_mat) || shader->need_sync_object || update_all) {
+    if (shader_map.add_or_update(&shader, b_mat) || update_all) {
       ShaderGraph *graph = new ShaderGraph();
 
       shader->name = b_mat.name().c_str();
       shader->pass_id = b_mat.pass_index();
-      shader->need_sync_object = false;
 
       /* create nodes */
       if (b_mat.use_nodes() && b_mat.node_tree()) {
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 0c120b944a7..e8031be7dd1 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -85,8 +85,6 @@ void BlenderSync::sync_recalc(BL::Depsgraph &b_depsgraph, BL::SpaceView3D &b_v3d
   /* Sync recalc flags from blender to cycles. Actual update is done separate,
    * so we can do it later on if doing it immediate is not suitable. */
 
-  bool has_updated_objects = b_depsgraph.id_type_updated(BL::DriverTarget::id_type_OBJECT);
-
   if (experimental) {
     /* Mark all meshes as needing to be exported again if dicing changed. */
     PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
@@ -189,19 +187,6 @@ void BlenderSync::sync_recalc(BL::Depsgraph &b_depsgraph, BL::SpaceView3D &b_v3d
   if (viewport_parameters.modified(new_viewport_parameters)) {
     world_recalc = true;
   }
-
-  /* Updates shader with object dependency if objects changed. */
-  if (has_updated_objects) {
-    if (scene->default_background->has_object_dependency) {
-      world_recalc = true;
-    }
-
-    foreach (Shader *shader, scene->shaders) {
-      if (shader->has_object_dependency) {
-        shader->need_sync_object = true;
-      }
-    }
-  }
 }
 
 void BlenderSync::sync_data(BL::RenderSettings &b_render,
diff --git a/intern/cycles/render/graph.h b/intern/cycles/render/graph.h
index 0ea7935f714..febd7a76f03 100644
--- a/intern/cycles/render/graph.h
+++ b/intern/cycles/render/graph.h
@@ -204,10 +204,6 @@ class ShaderNode : public Node {
   {
     return false;
   }
-  virtual bool has_object_dependency()
-  {
-    return false;
-  }
   virtual bool has_attribute_dependency()
   {
     return false;
diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h
index 8316fa3cf9b..83c3ad071ae 100644
--- a/intern/cycles/render/nodes.h
+++ b/intern/cycles/render/nodes.h
@@ -359,10 +359,6 @@ class PointDensityTextureNode : public ShaderNode {
   {
     return true;
   }
-  bool has_object_dependency()
-  {
-    return true;
-  }
 
   /* Parameters. */
   ustring filename;
@@ -896,10 +892,6 @@ class TextureCoordinateNode : public ShaderNode {
   {
     return true;
   }
-  bool has_object_dependency()
-  {
-    return use_transform;
-  }
 
   float3 normal_osl;
   bool from_dupli;
diff --git a/intern/cycles/render/osl.cpp b/intern/cycles/render/osl.cpp
index 06d832a29ca..5c62ae73e47 100644
--- a/intern/cycles/render/osl.cpp
+++ b/intern/cycles/render/osl.cpp
@@ -764,10 +764,6 @@ void OSLCompiler::add(ShaderNode *node, const char *name, bool isfilepath)
       current_shader->has_volume_attribute_dependency = true;
   }
 
-  if (node->has_object_dependency()) {
-    current_shader->has_object_dependency = true;
-  }
-
   if (node->has_integrator_dependency()) {
     current_shader->has_integrator_dependency = true;
   }
@@ -1142,7 +1138,6 @@ void OSLCompiler::compile(OSLGlobals *og, Shader *shader)
     shader->has_surface_spatial_varying = false;
     shader->has_volume_spatial_varying = false;
     shader->has_volume_attribute_dependency = false;
-    shader->has_object_dependency = false;
     shader->has_integrator_dependency = false;
 
     /* generate surface shader */
diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp
index 747fc58f81a..8403a636e1c 100644
--- a/intern/cycles/render/shader.cpp
+++ b/intern/cycles/render/shader.cpp
@@ -206,7 +206,6 @@ Shader::Shader() : Node(node_type)
   has_surface_spatial_varying = false;
   has_volume_spatial_varying = false;
   has_volume_attribute_dependency = false;
-  has_object_dependency = false;
   has_integrator_dependency = false;
   has_volume_connected = false;
   prev_volume_step_rate = 0.0f;
@@ -218,7 +217,6 @@ Shader::Shader() : Node(node_type)
 
   need_update = true;
   need_update_geometry = true;
-  need_sync_object = false;
 }
 
 Shader::~Shader()
diff --git a/intern/cycles/render/shader.h b/intern/cycles/render/shader.h
index 7801fd29276..993b467b396 100644
--- a/intern/cycles/render/shader.h
+++ b/intern/cycles/render/shader.h
@@ -98,7 +98,6 @@ class Shader : public Node {
   /* synchronization */
   bool need_update;
   bool need_update_geometry;
-  bool need_sync_object;
 
   /* If the shader has only volume components, the surface is assumed to
    * be transparent.
@@ -121,7 +120,6 @@ class Shader : public Node {
   bool has_surface_spatial_varying;
   bool has_volume_spatial_varying;
   bool has_volume_attribute_dependency;
-  bool has_object_dependency;
   bool has_integrator_dependency;
 
   /* displacement */
diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp
index b4858f488c3..ea3dbaf8e03 100644
--- a/intern/cycles/render/svm.cpp
+++ b/intern/cycles/render/svm.cpp
@@ -448,10 +448,6 @@ void SVMCompiler::generate_node(ShaderNode *node, ShaderNodeSet &done)
       current_shader->has_volume_attribute_dependency = true;
   }
 
-  if (node->has_object_dependency()) {
-    current_shader->has_object_dependency = true;
-  }
-
   if (node->has_integrator_dependency()) {
     current_shader->has_integrator_dependency = true;
   }
@@ -863,7 +859,6 @@ void SVMCompiler::compile(Shader *shader, array<int4> &svm_nodes, int index, Sum
   shader->has_surface_spatial_varying = false;
   shader->has_volume_spatial_varying = false;
   shader->has_volume_attribute_dependency = false;
-  shader->has_object_dependency = false;
   shader->has_integrator_dependency = false;
 
   /* generate bump shader */



More information about the Bf-blender-cvs mailing list