Fix T49570: Cycles baking can't handle materials with no images

If users wanted to bake only a few of the mesh materials, they would
still need to create dummy textures for the other parts.

This commit report (as RPT_INFO) the materials with no texture, but move
on to bake the others materials.
This commit is contained in:
Dalai Felinto 2017-05-30 14:41:21 +02:00
parent 9cae631059
commit 2cd7b80cae
Notes: blender-bot 2023-02-14 07:47:59 +01:00
Referenced by issue #49570, cycles render bake image problem
2 changed files with 12 additions and 4 deletions

View File

@ -414,16 +414,16 @@ static bool bake_object_check(Scene *scene, Object *ob, ReportList *reports)
else {
Material *mat = give_current_material(ob, i);
if (mat != NULL) {
BKE_reportf(reports, RPT_ERROR,
BKE_reportf(reports, RPT_INFO,
"No active image found in material \"%s\" (%d) for object \"%s\"",
mat->id.name + 2, i, ob->id.name + 2);
}
else {
BKE_reportf(reports, RPT_ERROR,
BKE_reportf(reports, RPT_INFO,
"No active image found in material slot (%d) for object \"%s\"",
i, ob->id.name + 2);
}
return false;
continue;
}
image->id.tag |= LIB_TAG_DOIT;
@ -563,7 +563,11 @@ static void build_image_lookup(Main *bmain, Object *ob, BakeImages *bake_images)
Image *image;
ED_object_get_active_image(ob, i + 1, &image, NULL, NULL, NULL);
if ((image->id.tag & LIB_TAG_DOIT)) {
/* Some materials have no image, we just ignore those cases. */
if (image == NULL) {
bake_images->lookup[i] = -1;
}
else if (image->id.tag & LIB_TAG_DOIT) {
for (j = 0; j < i; j++) {
if (bake_images->data[j].image == image) {
bake_images->lookup[i] = j;

View File

@ -684,6 +684,10 @@ void RE_bake_pixels_populate(
int mat_nr = mp->mat_nr;
int image_id = bake_images->lookup[mat_nr];
if (image_id < 0) {
continue;
}
bd.bk_image = &bake_images->data[image_id];
bd.primitive_id = ++p_id;