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:
parent
9cae631059
commit
2cd7b80cae
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user