Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2017-05-03 13:05:52 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2017-05-03 13:14:05 +0300
commit44991a0132507091d5d702e53e7e1561252ee19e (patch)
treec822c5325713cb3030072ddb3bdce90eacc1e79a
parentcea0236026bf5c547534afe5a875255a1857ebab (diff)
Cycles: Use render visibility for duplis when Render Layer option in viewport is used
Previously the logic was different for duplis and regular objects: regular objects were using render visibility when Render Layer option is enabled which duplis were always using viewport visibility when rendering from the viewport. This was quite confusing because caused different results in viewport and render when artists were expecting them to match 1:1.
-rw-r--r--intern/cycles/blender/blender_object.cpp11
-rw-r--r--intern/cycles/blender/blender_sync.cpp3
-rw-r--r--intern/cycles/blender/blender_sync.h3
3 files changed, 7 insertions, 10 deletions
diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp
index 2810ad15b9a..a930c439370 100644
--- a/intern/cycles/blender/blender_object.cpp
+++ b/intern/cycles/blender/blender_object.cpp
@@ -478,7 +478,7 @@ static bool object_render_hide_duplis(BL::Object& b_ob)
/* Object Loop */
-void BlenderSync::sync_objects(BL::SpaceView3D& b_v3d, float motion_time)
+void BlenderSync::sync_objects(float motion_time)
{
/* layer data */
uint scene_layer = render_layer.scene_layer;
@@ -506,7 +506,7 @@ void BlenderSync::sync_objects(BL::SpaceView3D& b_v3d, float motion_time)
* 1 : DAG_EVAL_PREVIEW
* 2 : DAG_EVAL_RENDER
*/
- int dupli_settings = preview ? 1 : 2;
+ int dupli_settings = (render_layer.use_viewport_visibility) ? 1 : 2;
bool cancel = false;
bool use_portal = false;
@@ -541,7 +541,7 @@ void BlenderSync::sync_objects(BL::SpaceView3D& b_v3d, float motion_time)
for(b_ob.dupli_list.begin(b_dup); b_dup != b_ob.dupli_list.end(); ++b_dup) {
Transform tfm = get_transform(b_dup->matrix());
BL::Object b_dup_ob = b_dup->object();
- bool dup_hide = (b_v3d)? b_dup_ob.hide(): b_dup_ob.hide_render();
+ bool dup_hide = (render_layer.use_viewport_visibility)? b_dup_ob.hide(): b_dup_ob.hide_render();
bool in_dupli_group = (b_dup->type() == BL::DupliObject::type_GROUP);
bool hide_tris;
@@ -617,7 +617,6 @@ void BlenderSync::sync_objects(BL::SpaceView3D& b_v3d, float motion_time)
}
void BlenderSync::sync_motion(BL::RenderSettings& b_render,
- BL::SpaceView3D& b_v3d,
BL::Object& b_override,
int width, int height,
void **python_thread_state)
@@ -654,7 +653,7 @@ void BlenderSync::sync_motion(BL::RenderSettings& b_render,
b_engine.frame_set(frame, subframe);
python_thread_state_save(python_thread_state);
sync_camera_motion(b_render, b_cam, width, height, 0.0f);
- sync_objects(b_v3d, 0.0f);
+ sync_objects(0.0f);
}
/* always sample these times for camera motion */
@@ -688,7 +687,7 @@ void BlenderSync::sync_motion(BL::RenderSettings& b_render,
}
/* sync object */
- sync_objects(b_v3d, relative_time);
+ sync_objects(relative_time);
}
/* we need to set the python thread state again because this
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 3b071bf0e7d..ff6c749b99d 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -210,10 +210,9 @@ void BlenderSync::sync_data(BL::RenderSettings& b_render,
scene->need_motion() == Scene::MOTION_NONE ||
scene->camera->motion_position == Camera::MOTION_POSITION_CENTER)
{
- sync_objects(b_v3d);
+ sync_objects();
}
sync_motion(b_render,
- b_v3d,
b_override,
width, height,
python_thread_state);
diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h
index 36bedc505af..70a20400fa9 100644
--- a/intern/cycles/blender/blender_sync.h
+++ b/intern/cycles/blender/blender_sync.h
@@ -97,9 +97,8 @@ private:
/* sync */
void sync_lamps(bool update_all);
void sync_materials(bool update_all);
- void sync_objects(BL::SpaceView3D& b_v3d, float motion_time = 0.0f);
+ void sync_objects(float motion_time = 0.0f);
void sync_motion(BL::RenderSettings& b_render,
- BL::SpaceView3D& b_v3d,
BL::Object& b_override,
int width, int height,
void **python_thread_state);