Disable GIProbe emission when disabled on a material

Fixes https://github.com/godotengine/godot/issues/48230

(cherry picked from commit 0b723358bb)
This commit is contained in:
Sonoracpp 2021-05-17 20:24:33 +04:00 committed by Rémi Verschelde
parent c3732f0da8
commit d006f50db3
No known key found for this signature in database
GPG key ID: C3336907360768E1

View file

@ -525,6 +525,8 @@ VoxelLightBaker::MaterialCache VoxelLightBaker::_get_material_cache(Ref<Material
MaterialCache mc;
Ref<Image> empty;
if (mat.is_valid()) {
Ref<Texture> albedo_tex = mat->get_texture(SpatialMaterial::TEXTURE_ALBEDO);
@ -538,27 +540,28 @@ VoxelLightBaker::MaterialCache VoxelLightBaker::_get_material_cache(Ref<Material
mc.albedo = _get_bake_texture(img_albedo, Color(1, 1, 1), mat->get_albedo()); // no albedo texture, color is additive
}
Ref<Texture> emission_tex = mat->get_texture(SpatialMaterial::TEXTURE_EMISSION);
if (mat->get_feature(SpatialMaterial::FEATURE_EMISSION)) {
Ref<Texture> 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<Image> img_emission;
Ref<Image> 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<Image> 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));
}