Переглянути джерело

[lab] Show selected node in viewport when using path-traced mode

luboslenco 2 роки тому
батько
коміт
fac974d41c

BIN
base/Shaders/raytrace/raytrace_brute_core.cso


BIN
base/Shaders/raytrace/raytrace_brute_core.spirv


BIN
base/Shaders/raytrace/raytrace_brute_full.cso


BIN
base/Shaders/raytrace/raytrace_brute_full.spirv


+ 6 - 0
base/Shaders/raytrace/src/raytrace_brute.hlsl

@@ -187,8 +187,14 @@ void closesthit(inout RayPayload payload, in BuiltInTriangleIntersectionAttribut
 	};
 	float3 n = normalize(hit_attribute(vertex_normals, attr));
 
+	mytexture1.GetDimensions(size.x, size.y);
+	utex_coord = uint3((tex_coord - uint2(tex_coord)) * size, 0);
 	float4 texpaint1 = mytexture1.Load(utex_coord);
+
+	mytexture2.GetDimensions(size.x, size.y);
+	utex_coord = uint3((tex_coord - uint2(tex_coord)) * size, 0);
 	float4 texpaint2 = mytexture2.Load(utex_coord);
+
 	float3 texcolor = pow(texpaint0.rgb, float3(2.2, 2.2, 2.2));
 
 	float3 tangent = float3(0, 0, 0);

+ 11 - 0
base/Sources/arm/App.hx

@@ -2127,6 +2127,17 @@ class App {
 		var texpaint = arm.logic.BrushOutputNode.inst.texpaint;
 		var texpaint_nor = arm.logic.BrushOutputNode.inst.texpaint_nor;
 		var texpaint_pack = arm.logic.BrushOutputNode.inst.texpaint_pack;
+
+		if (UINodes.inst.getNodes().nodesSelected.length > 0) {
+			var node = UINodes.inst.getNodes().nodesSelected[0];
+			var brushNode = arm.logic.LogicParser.getLogicNode(node);
+			if (brushNode != null && brushNode.getCachedImage() != null) {
+				texpaint = brushNode.getCachedImage();
+				texpaint_nor = iron.RenderPath.active.renderTargets.get("texpaint_nor_empty").image;
+				texpaint_pack = iron.RenderPath.active.renderTargets.get("texpaint_pack_empty").image;
+			}
+		}
+
 		return { texpaint: texpaint, texpaint_nor: texpaint_nor, texpaint_pack: texpaint_pack };
 	}
 

+ 22 - 1
base/Sources/arm/render/RenderPathRaytrace.hx

@@ -30,6 +30,10 @@ class RenderPathRaytrace {
 	public static inline var ext = ".spirv";
 	#end
 
+	#if is_lab
+	static var lastTexpaint: kha.Image = null;
+	#end
+
 	public static function init(_path: RenderPath) {
 		path = _path;
 	}
@@ -47,16 +51,33 @@ class RenderPathRaytrace {
 			Context.loadEnvmap();
 			Context.updateEnvmap();
 		}
+
 		var probe = Scene.active.world.probe;
 		var savedEnvmap = Context.raw.showEnvmapBlur ? probe.radianceMipmaps[0] : Context.raw.savedEnvmap;
+
 		if (lastEnvmap != savedEnvmap) {
 			lastEnvmap = savedEnvmap;
+
 			var bnoise_sobol = Scene.active.embedded.get("bnoise_sobol.k");
 			var bnoise_scramble = Scene.active.embedded.get("bnoise_scramble.k");
 			var bnoise_rank = Scene.active.embedded.get("bnoise_rank.k");
+
 			var l = App.flatten(true);
-			Krom.raytraceSetTextures(l.texpaint.renderTarget_, l.texpaint_nor.renderTarget_, l.texpaint_pack.renderTarget_, savedEnvmap.texture_, bnoise_sobol.texture_, bnoise_scramble.texture_, bnoise_rank.texture_);
+			Krom.raytraceSetTextures(l.texpaint, l.texpaint_nor, l.texpaint_pack, savedEnvmap.texture_, bnoise_sobol.texture_, bnoise_scramble.texture_, bnoise_rank.texture_);
+		}
+
+		#if is_lab
+		var l = App.flatten(true);
+		if (l.texpaint != lastTexpaint) {
+			lastTexpaint = l.texpaint;
+
+			var bnoise_sobol = Scene.active.embedded.get("bnoise_sobol.k");
+			var bnoise_scramble = Scene.active.embedded.get("bnoise_scramble.k");
+			var bnoise_rank = Scene.active.embedded.get("bnoise_rank.k");
+
+			Krom.raytraceSetTextures(l.texpaint, l.texpaint_nor, l.texpaint_pack, savedEnvmap.texture_, bnoise_sobol.texture_, bnoise_scramble.texture_, bnoise_rank.texture_);
 		}
+		#end
 
 		if (Context.raw.pdirty > 0 || dirty > 0) {
 			App.flatten(true);

+ 1 - 1
base/Sources/arm/render/RenderPathRaytraceBake.hx

@@ -92,7 +92,7 @@ class RenderPathRaytraceBake {
 			var bnoise_scramble = Scene.active.embedded.get("bnoise_scramble.k");
 			var bnoise_rank = Scene.active.embedded.get("bnoise_rank.k");
 			var texpaint_undo = RenderPath.active.renderTargets.get("texpaint_undo" + History.undoI).image;
-			Krom.raytraceSetTextures(baketex0.renderTarget_, baketex1.renderTarget_, texpaint_undo.renderTarget_, savedEnvmap.texture_, bnoise_sobol.texture_, bnoise_scramble.texture_, bnoise_rank.texture_);
+			Krom.raytraceSetTextures(baketex0, baketex1, texpaint_undo, savedEnvmap.texture_, bnoise_sobol.texture_, bnoise_scramble.texture_, bnoise_rank.texture_);
 		}
 
 		if (Context.raw.brushTime > 0) {