[Bf-blender-cvs] [05c899a158f] cycles_procedural_api: Merge branch 'master' into cycles_procedural_api

Kévin Dietrich noreply at git.blender.org
Mon Oct 26 23:27:06 CET 2020


Commit: 05c899a158f56d97508def66b63c67d7c2db3e46
Author: Kévin Dietrich
Date:   Thu Oct 22 13:14:45 2020 +0200
Branches: cycles_procedural_api
https://developer.blender.org/rB05c899a158f56d97508def66b63c67d7c2db3e46

Merge branch 'master' into cycles_procedural_api

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



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

diff --cc intern/cycles/blender/blender_geometry.cpp
index e4f0d4da86c,14da8075903..b5d3f6a4129
--- a/intern/cycles/blender/blender_geometry.cpp
+++ b/intern/cycles/blender/blender_geometry.cpp
@@@ -74,11 -76,18 +76,18 @@@ Geometry *BlenderSync::sync_geometry(BL
      if (material_override)
        find_shader(material_override, used_shaders, default_shader);
      else
 -      used_shaders.push_back(default_shader);
 +      used_shaders.push_back_slow(default_shader);
    }
  
-   /* Test if we need to sync. */
+   /* Ensure we only sync instanced geometry once. */
    Geometry *geom = geometry_map.find(key);
+   if (geom) {
+     if (geometry_synced.find(geom) != geometry_synced.end()) {
+       return geom;
+     }
+   }
+ 
+   /* Test if we need to sync. */
    bool sync = true;
    if (geom == NULL) {
      /* Add new geometry if it did not exist yet. */
@@@ -157,10 -173,11 +174,11 @@@ void BlenderSync::sync_geometry_motion(
                                         BL::Object &b_ob,
                                         Object *object,
                                         float motion_time,
-                                        bool use_particle_hair)
+                                        bool use_particle_hair,
+                                        TaskPool *task_pool)
  {
    /* Ensure we only sync instanced geometry once. */
 -  Geometry *geom = object->geometry;
 +  Geometry *geom = object->get_geometry();
  
    if (geometry_motion_synced.find(geom) != geometry_motion_synced.end())
      return;
diff --cc intern/cycles/blender/blender_object.cpp
index 2010935863c,c3420c24469..115195dad54
--- a/intern/cycles/blender/blender_object.cpp
+++ b/intern/cycles/blender/blender_object.cpp
@@@ -195,14 -199,17 +201,19 @@@ Object *BlenderSync::sync_object(BL::De
        /* Set transform at matching motion time step. */
        int time_index = object->motion_step(motion_time);
        if (time_index >= 0) {
 -        object->motion[time_index] = tfm;
 +        array<Transform> motion = object->get_motion();
 +        motion[time_index] = tfm;
 +        object->set_motion(motion);
        }
  
--      /* mesh deformation */
-       if (object->get_geometry())
-         sync_geometry_motion(b_depsgraph, b_ob, object, motion_time, use_particle_hair);
 -      if (object->geometry)
++	  /* mesh deformation */
++	  if (object->get_geometry())
+         sync_geometry_motion(b_depsgraph,
+                              b_ob_instance,
+                              object,
+                              motion_time,
+                              use_particle_hair,
 -                             object_geom_task_pool);
++							 object_geom_task_pool);
      }
  
      return object;
@@@ -215,9 -222,15 +226,16 @@@
      object_updated = true;
  
    /* mesh sync */
-   Geometry *geometry = sync_geometry(
-       b_depsgraph, b_ob, b_ob_instance, object_updated, use_particle_hair);
+   /* b_ob is owned by the iterator and will go out of scope at the end of the block.
+    * b_ob_instance is the original object and will remain valid for deferred geometry
+    * sync. */
 -  object->geometry = sync_geometry(b_depsgraph,
++  Geometry *geometry = sync_geometry(b_depsgraph,
+                                    b_ob_instance,
+                                    b_ob_instance,
+                                    object_updated,
+                                    use_particle_hair,
+                                    object_geom_task_pool);
 +  object->set_geometry(geometry);
  
    /* special case not tracked by object update flags */
  
@@@ -444,21 -395,15 +465,22 @@@ void BlenderSync::sync_objects(BL::Deps
  
      /* Object itself. */
      if (b_instance.show_self()) {
 -      sync_object(b_depsgraph,
 -                  b_view_layer,
 -                  b_instance,
 -                  motion_time,
 -                  false,
 -                  show_lights,
 -                  culling,
 -                  &use_portal,
 -                  &geom_task_pool);
 +      BL::MeshSequenceCacheModifier b_mesh_cache = object_alembic_cache_find(b_ob);
 +
 +      if (b_mesh_cache) {
 +        sync_procedural(b_ob, b_mesh_cache, b_depsgraph.scene().frame_current(), motion_time);
 +      }
-       else {
-         sync_object(b_depsgraph,
-                     b_view_layer,
-                     b_instance,
-                     motion_time,
-                     false,
-                     show_lights,
-                     culling,
-                     &use_portal);
-       }
++	  else {
++		  sync_object(b_depsgraph,
++					  b_view_layer,
++					  b_instance,
++					  motion_time,
++					  false,
++					  show_lights,
++					  culling,
++					  &use_portal,
++					  &geom_task_pool);
++	  }
      }
  
      /* Particle hair as separate object. */
diff --cc intern/cycles/blender/blender_sync.h
index b039d6d086a,a17db128957..f6588ca8ad8
--- a/intern/cycles/blender/blender_sync.h
+++ b/intern/cycles/blender/blender_sync.h
@@@ -145,15 -146,11 +146,16 @@@ class BlenderSync 
                        bool use_particle_hair,
                        bool show_lights,
                        BlenderObjectCulling &culling,
-                       bool *use_portal);
+                       bool *use_portal,
+                       TaskPool *geom_task_pool);
  
 +  void sync_procedural(BL::Object &b_ob,
 +                       BL::MeshSequenceCacheModifier &b_mesh_cache,
 +                       int frame_current,
 +                       float motion_time);
 +
    /* Volume */
 -  void sync_volume(BL::Object &b_ob, Volume *volume, const vector<Shader *> &used_shaders);
 +  void sync_volume(BL::Object &b_ob, Volume *volume, array<Node *> &used_shaders);
  
    /* Mesh */
    void sync_mesh(BL::Depsgraph b_depsgraph,



More information about the Bf-blender-cvs mailing list