diff --git a/scene/3d/voxel_light_baker.cpp b/scene/3d/voxel_light_baker.cpp index 0af8cbf20c..98c1aa142a 100644 --- a/scene/3d/voxel_light_baker.cpp +++ b/scene/3d/voxel_light_baker.cpp @@ -525,6 +525,8 @@ VoxelLightBaker::MaterialCache VoxelLightBaker::_get_material_cache(Ref empty; + if (mat.is_valid()) { Ref albedo_tex = mat->get_texture(SpatialMaterial::TEXTURE_ALBEDO); @@ -538,27 +540,28 @@ VoxelLightBaker::MaterialCache VoxelLightBaker::_get_material_cache(Refget_albedo()); // no albedo texture, color is additive } - Ref emission_tex = mat->get_texture(SpatialMaterial::TEXTURE_EMISSION); + if (mat->get_feature(SpatialMaterial::FEATURE_EMISSION)) { + Ref emission_tex = mat->get_texture(SpatialMaterial::TEXTURE_EMISSION); - Color emission_col = mat->get_emission(); - float emission_energy = mat->get_emission_energy(); + Color emission_col = mat->get_emission(); + float emission_energy = mat->get_emission_energy(); - Ref img_emission; + Ref img_emission; - if (emission_tex.is_valid()) { + if (emission_tex.is_valid()) { + img_emission = emission_tex->get_data(); + } - img_emission = emission_tex->get_data(); - } - - if (mat->get_emission_operator() == SpatialMaterial::EMISSION_OP_ADD) { - mc.emission = _get_bake_texture(img_emission, Color(1, 1, 1) * emission_energy, emission_col * emission_energy); + if (mat->get_emission_operator() == SpatialMaterial::EMISSION_OP_ADD) { + mc.emission = _get_bake_texture(img_emission, Color(1, 1, 1) * emission_energy, emission_col * emission_energy); + } else { + mc.emission = _get_bake_texture(img_emission, emission_col * emission_energy, Color(0, 0, 0)); + } } else { - mc.emission = _get_bake_texture(img_emission, emission_col * emission_energy, Color(0, 0, 0)); + mc.emission = _get_bake_texture(empty, Color(0, 0, 0), Color(0, 0, 0)); } } else { - Ref empty; - mc.albedo = _get_bake_texture(empty, Color(0, 0, 0), Color(1, 1, 1)); mc.emission = _get_bake_texture(empty, Color(0, 0, 0), Color(0, 0, 0)); }