[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