فهرست منبع

Improve lightmap bake

luboslenco 1 هفته پیش
والد
کامیت
da9776537b
1فایلهای تغییر یافته به همراه24 افزوده شده و 7 حذف شده
  1. 24 7
      paint/sources/render_path_raytrace_bake.ts

+ 24 - 7
paint/sources/render_path_raytrace_bake.ts

@@ -5,13 +5,17 @@ let render_path_raytrace_bake_current_sample: i32 = 0;
 let render_path_raytrace_bake_rays_timer: f32 = 0.0;
 let render_path_raytrace_bake_rays_counter: i32 = 0;
 let render_path_raytrace_bake_last_layer: gpu_texture_t = null;
-let render_path_raytrace_bake_last_bake: i32 = 0;
+let render_path_raytrace_bake_last_bake_type: i32 = 0;
+let render_path_raytrace_bake_last_bake_type2: i32 = 0;
 
 function render_path_raytrace_bake_commands(parse_paint_material: (b?: bool)=>void): bool {
 
-	if (!render_path_raytrace_ready || !render_path_raytrace_is_bake || render_path_raytrace_bake_last_bake != context_raw.bake_type) {
-		let rebuild: bool = !(render_path_raytrace_ready && render_path_raytrace_is_bake && render_path_raytrace_bake_last_bake != context_raw.bake_type);
-		render_path_raytrace_bake_last_bake = context_raw.bake_type;
+	if (!render_path_raytrace_ready ||
+		!render_path_raytrace_is_bake ||
+		render_path_raytrace_bake_last_bake_type != context_raw.bake_type) {
+
+		let rebuild: bool = !(render_path_raytrace_ready && render_path_raytrace_is_bake && render_path_raytrace_bake_last_bake_type != context_raw.bake_type);
+		render_path_raytrace_bake_last_bake_type = context_raw.bake_type;
 		render_path_raytrace_ready = true;
 		render_path_raytrace_is_bake = true;
 		render_path_raytrace_last_envmap = null;
@@ -76,9 +80,13 @@ function render_path_raytrace_bake_commands(parse_paint_material: (b?: bool)=>vo
 	let probe: world_data_t = scene_world;
 	let saved_envmap: gpu_texture_t = context_raw.show_envmap_blur ? probe._.radiance_mipmaps[0] : context_raw.saved_envmap;
 
-	if (render_path_raytrace_last_envmap != saved_envmap || render_path_raytrace_bake_last_layer != context_raw.layer.texpaint) {
+	if (render_path_raytrace_last_envmap != saved_envmap ||
+		render_path_raytrace_bake_last_layer != context_raw.layer.texpaint ||
+		render_path_raytrace_bake_last_bake_type2 != context_raw.bake_type) {
+
 		render_path_raytrace_last_envmap = saved_envmap;
 		render_path_raytrace_bake_last_layer = context_raw.layer.texpaint;
+		render_path_raytrace_bake_last_bake_type2 = context_raw.bake_type;
 
 		let bnoise_sobol: gpu_texture_t = map_get(scene_embedded, "bnoise_sobol.k");
 		let bnoise_scramble: gpu_texture_t = map_get(scene_embedded, "bnoise_scramble.k");
@@ -86,9 +94,18 @@ function render_path_raytrace_bake_commands(parse_paint_material: (b?: bool)=>vo
 
 		let baketex0: render_target_t = map_get(render_path_render_targets, "baketex0");
 		let baketex1: render_target_t = map_get(render_path_render_targets, "baketex1");
-		let texpaint_undo: render_target_t = map_get(render_path_render_targets, "texpaint_undo" + history_undo_i);
 
-		iron_raytrace_set_textures(baketex0._image, baketex1._image, texpaint_undo._image, saved_envmap, bnoise_sobol, bnoise_scramble, bnoise_rank);
+		let tex2: gpu_texture_t = null;
+		if (context_raw.bake_type == bake_type_t.LIGHTMAP) {
+			let flat: slot_layer_t = layers_flatten(true);
+			tex2 = flat.texpaint;
+		}
+		else {
+			let texpaint_undo: render_target_t = map_get(render_path_render_targets, "texpaint_undo" + history_undo_i);
+			tex2 = texpaint_undo._image;
+		}
+
+		iron_raytrace_set_textures(baketex0._image, baketex1._image, tex2, saved_envmap, bnoise_sobol, bnoise_scramble, bnoise_rank);
 	}
 
 	if (context_raw.brush_time > 0) {