Fix T102514: wrong scene reported for missing compositing camera

If compositing uses renderlayers, and a camera was missing in the
associated scenes, the error message also referred to the scene the comp
tree was in (not the scene of the renderlayer -- which can potentionally
be different).

This was confusing and is now rectified.

Maniphest Tasks: T102514

Differential Revision: https://developer.blender.org/D16542
This commit is contained in:
Philipp Oeser 2022-11-16 09:58:41 +01:00
parent 331e8007ed
commit 63c4ec89e1
Notes: blender-bot 2023-02-14 02:58:19 +01:00
Referenced by issue #88449: Blender LTS: Maintenance Task 2.93
Referenced by issue #88449, Blender LTS: Maintenance Task 2.93
Referenced by issue #100749, Blender LTS: Maintenance Task 3.3
Referenced by issue #102514, No Camera Found in Scene - Not True
1 changed files with 16 additions and 8 deletions

View File

@ -1397,7 +1397,9 @@ static void do_render_full_pipeline(Render *re)
}
}
static bool check_valid_compositing_camera(Scene *scene, Object *camera_override)
static bool check_valid_compositing_camera(Scene *scene,
Object *camera_override,
ReportList *reports)
{
if (scene->r.scemode & R_DOCOMP && scene->use_nodes) {
LISTBASE_FOREACH (bNode *, node, &scene->nodetree->nodes) {
@ -1408,6 +1410,11 @@ static bool check_valid_compositing_camera(Scene *scene, Object *camera_override
}
if (sce->camera == nullptr) {
/* all render layers nodes need camera */
BKE_reportf(reports,
RPT_ERROR,
"No camera found in scene \"%s\" (used in compositing of scene \"%s\")",
sce->id.name + 2,
scene->id.name + 2);
return false;
}
}
@ -1416,7 +1423,12 @@ static bool check_valid_compositing_camera(Scene *scene, Object *camera_override
return true;
}
return (camera_override != nullptr || scene->camera != nullptr);
const bool ok = (camera_override != nullptr || scene->camera != nullptr);
if (!ok) {
BKE_reportf(reports, RPT_ERROR, "No camera found in scene \"%s\"", scene->id.name + 2);
}
return ok;
}
static bool check_valid_camera_multiview(Scene *scene, Object *camera, ReportList *reports)
@ -1459,8 +1471,6 @@ static bool check_valid_camera_multiview(Scene *scene, Object *camera, ReportLis
static int check_valid_camera(Scene *scene, Object *camera_override, ReportList *reports)
{
const char *err_msg = "No camera found in scene \"%s\"";
if (camera_override == nullptr && scene->camera == nullptr) {
scene->camera = BKE_view_layer_camera_find(scene, BKE_view_layer_default_render(scene));
}
@ -1481,8 +1491,7 @@ static int check_valid_camera(Scene *scene, Object *camera_override, ReportList
/* camera could be unneeded due to composite nodes */
Object *override = (seq->scene == scene) ? camera_override : nullptr;
if (!check_valid_compositing_camera(seq->scene, override)) {
BKE_reportf(reports, RPT_ERROR, err_msg, seq->scene->id.name + 2);
if (!check_valid_compositing_camera(seq->scene, override, reports)) {
return false;
}
}
@ -1494,8 +1503,7 @@ static int check_valid_camera(Scene *scene, Object *camera_override, ReportList
}
}
}
else if (!check_valid_compositing_camera(scene, camera_override)) {
BKE_reportf(reports, RPT_ERROR, err_msg, scene->id.name + 2);
else if (!check_valid_compositing_camera(scene, camera_override, reports)) {
return false;
}