Selaa lähdekoodia

Disable GIProbe emission when disabled on a material

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

(cherry picked from commit 0b723358bbf84fb9b30d3c6f96a41080f79fefa1)
Sonoracpp 4 vuotta sitten
vanhempi
commit
d006f50db3
1 muutettua tiedostoa jossa 16 lisäystä ja 13 poistoa
  1. 16 13
      scene/3d/voxel_light_baker.cpp

+ 16 - 13
scene/3d/voxel_light_baker.cpp

@@ -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);
-
-		Color emission_col = mat->get_emission();
-		float emission_energy = mat->get_emission_energy();
+		if (mat->get_feature(SpatialMaterial::FEATURE_EMISSION)) {
+			Ref<Texture> emission_tex = mat->get_texture(SpatialMaterial::TEXTURE_EMISSION);
 
-		Ref<Image> img_emission;
+			Color emission_col = mat->get_emission();
+			float emission_energy = mat->get_emission_energy();
 
-		if (emission_tex.is_valid()) {
+			Ref<Image> img_emission;
 
-			img_emission = emission_tex->get_data();
-		}
+			if (emission_tex.is_valid()) {
+				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));
 	}