Refactor: Cycles: Deduplicate get camera object code

Pull Request: https://projects.blender.org/blender/blender/pulls/141796
This commit is contained in:
Brecht Van Lommel
2025-07-11 18:08:22 +02:00
parent a912102308
commit c7ae49b99f
5 changed files with 29 additions and 36 deletions

View File

@@ -648,7 +648,6 @@ static MotionPosition blender_motion_blur_position_type_to_cycles(
}
void BlenderSync::sync_camera(BL::RenderSettings &b_render,
BL::Object &b_override,
const int width,
const int height,
const char *viewname)
@@ -682,11 +681,7 @@ void BlenderSync::sync_camera(BL::RenderSettings &b_render,
}
/* camera object */
BL::Object b_ob = b_scene.camera();
if (b_override) {
b_ob = b_override;
}
BL::Object b_ob = get_camera_object(PointerRNA_NULL, PointerRNA_NULL);
if (b_ob) {
BL::Array<float, 16> b_ob_matrix;
@@ -719,14 +714,8 @@ void BlenderSync::sync_camera(BL::RenderSettings &b_render,
}
}
BL::Object BlenderSync::get_dicing_camera_object(BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d)
BL::Object BlenderSync::get_camera_object(BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d)
{
PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
BL::Object b_ob = BL::Object(RNA_pointer_get(&cscene, "dicing_camera"));
if (b_ob) {
return b_ob;
}
BL::Object b_camera_override = b_engine.camera_override();
if (b_camera_override) {
return b_camera_override;
@@ -741,6 +730,17 @@ BL::Object BlenderSync::get_dicing_camera_object(BL::SpaceView3D b_v3d, BL::Regi
return b_scene.camera();
}
BL::Object BlenderSync::get_dicing_camera_object(BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d)
{
PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
BL::Object b_ob = BL::Object(RNA_pointer_get(&cscene, "dicing_camera"));
if (b_ob) {
return b_ob;
}
return get_camera_object(b_v3d, b_rv3d);
}
void BlenderSync::sync_camera_motion(BL::RenderSettings &b_render,
BL::Object &b_ob,
const int width,

View File

@@ -644,7 +644,7 @@ void BlenderSync::sync_objects(BL::Depsgraph &b_depsgraph,
void BlenderSync::sync_motion(BL::RenderSettings &b_render,
BL::Depsgraph &b_depsgraph,
BL::SpaceView3D &b_v3d,
BL::Object &b_override,
BL::RegionView3D &b_rv3d,
const int width,
const int height,
void **python_thread_state)
@@ -654,10 +654,7 @@ void BlenderSync::sync_motion(BL::RenderSettings &b_render,
}
/* get camera object here to deal with camera switch */
BL::Object b_cam = b_scene.camera();
if (b_override) {
b_cam = b_override;
}
BL::Object b_cam = get_camera_object(b_v3d, b_rv3d);
const int frame_center = b_scene.frame_current();
const float subframe_center = b_scene.frame_subframe();

View File

@@ -133,12 +133,11 @@ void BlenderSession::create_session()
/* create sync */
sync = make_unique<BlenderSync>(
b_engine, b_data, b_scene, scene, !background, use_developer_ui, session->progress);
BL::Object b_camera_override(b_engine.camera_override());
if (b_v3d) {
sync->sync_view(b_v3d, b_rv3d, width, height);
}
else {
sync->sync_camera(b_render, b_camera_override, width, height, "");
sync->sync_camera(b_render, width, height, "");
}
/* set buffer parameters */
@@ -230,8 +229,7 @@ void BlenderSession::reset_session(BL::BlendData &b_data, BL::Depsgraph &b_depsg
sync->sync_recalc(b_depsgraph, b_v3d, b_rv3d);
}
BL::Object b_camera_override(b_engine.camera_override());
sync->sync_camera(b_render, b_camera_override, width, height, "");
sync->sync_camera(b_render, width, height, "");
BL::SpaceView3D b_null_space_view3d(PointerRNA_NULL);
BL::RegionView3D b_null_region_view3d(PointerRNA_NULL);
@@ -392,12 +390,11 @@ void BlenderSession::render(BL::Depsgraph &b_depsgraph_)
}
/* update scene */
BL::Object b_camera_override(b_engine.camera_override());
sync->sync_camera(b_render, b_camera_override, width, height, b_rview_name.c_str());
sync->sync_camera(b_render, width, height, b_rview_name.c_str());
sync->sync_data(b_render,
b_depsgraph,
b_v3d,
b_camera_override,
b_rv3d,
width,
height,
&python_thread_state,
@@ -689,13 +686,12 @@ void BlenderSession::bake(BL::Depsgraph &b_depsgraph_,
session->full_buffer_written_cb = [&](string_view filename) { full_buffer_written(filename); };
/* Sync scene. */
BL::Object b_camera_override(b_engine.camera_override());
sync->set_bake_target(b_object);
sync->sync_camera(b_render, b_camera_override, width, height, "");
sync->sync_camera(b_render, width, height, "");
sync->sync_data(b_render,
b_depsgraph,
b_v3d,
b_camera_override,
b_rv3d,
width,
height,
&python_thread_state,
@@ -815,11 +811,10 @@ void BlenderSession::synchronize(BL::Depsgraph &b_depsgraph_)
/* data and camera synchronize */
b_depsgraph = b_depsgraph_;
BL::Object b_camera_override(b_engine.camera_override());
sync->sync_data(b_render,
b_depsgraph,
b_v3d,
b_camera_override,
b_rv3d,
width,
height,
&python_thread_state,
@@ -829,7 +824,7 @@ void BlenderSession::synchronize(BL::Depsgraph &b_depsgraph_)
sync->sync_view(b_v3d, b_rv3d, width, height);
}
else {
sync->sync_camera(b_render, b_camera_override, width, height, "");
sync->sync_camera(b_render, width, height, "");
}
/* get buffer parameters */

View File

@@ -277,7 +277,7 @@ void BlenderSync::sync_recalc(BL::Depsgraph &b_depsgraph,
void BlenderSync::sync_data(BL::RenderSettings &b_render,
BL::Depsgraph &b_depsgraph,
BL::SpaceView3D &b_v3d,
BL::Object &b_override,
BL::RegionView3D &b_rv3d,
const int width,
const int height,
void **python_thread_state,
@@ -313,7 +313,7 @@ void BlenderSync::sync_data(BL::RenderSettings &b_render,
{
sync_objects(b_depsgraph, b_v3d);
}
sync_motion(b_render, b_depsgraph, b_v3d, b_override, width, height, python_thread_state);
sync_motion(b_render, b_depsgraph, b_v3d, b_rv3d, width, height, python_thread_state);
geometry_synced.clear();

View File

@@ -56,7 +56,7 @@ class BlenderSync {
void sync_data(BL::RenderSettings &b_render,
BL::Depsgraph &b_depsgraph,
BL::SpaceView3D &b_v3d,
BL::Object &b_override,
BL::RegionView3D &b_rv3d,
const int width,
const int height,
void **python_thread_state,
@@ -67,7 +67,6 @@ class BlenderSync {
bool background,
const DeviceInfo &denoise_device_info);
void sync_camera(BL::RenderSettings &b_render,
BL::Object &b_override,
const int width,
const int height,
const char *viewname);
@@ -117,7 +116,7 @@ class BlenderSync {
void sync_motion(BL::RenderSettings &b_render,
BL::Depsgraph &b_depsgraph,
BL::SpaceView3D &b_v3d,
BL::Object &b_override,
BL::RegionView3D &b_rv3d,
const int width,
const int height,
void **python_thread_state);
@@ -213,6 +212,8 @@ class BlenderSync {
bool object_can_have_geometry(BL::Object &b_ob);
bool object_is_light(BL::Object &b_ob);
bool object_is_camera(BL::Object &b_ob);
BL::Object get_camera_object(BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d);
BL::Object get_dicing_camera_object(BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d);
/* variables */