From 8caae0bd611a29a7017269b356c2b546502d236c Mon Sep 17 00:00:00 2001 From: luboslenco Date: Tue, 8 Oct 2019 22:10:23 +0200 Subject: [PATCH] Update raytracing interface --- Shaders/raytrace/raytrace_brute.cso | Bin 14920 -> 15020 bytes Shaders/raytrace/src/raytrace_brute.hlsl | 7 +- Sources/arm/io/ImportEnvmap.hx | 3 - Sources/arm/render/RenderPathDeferred.hx | 33 ------ Sources/arm/render/RenderPathRaytrace.hx | 122 +++++++++++++++++------ Sources/arm/ui/TabViewport.hx | 2 + 6 files changed, 96 insertions(+), 71 deletions(-) diff --git a/Shaders/raytrace/raytrace_brute.cso b/Shaders/raytrace/raytrace_brute.cso index 02b250897aad67eda59d3d009d503e23e88c2b3e..8022ea88bb202dfef1a9c1d107a4df70ad0d85a5 100644 GIT binary patch delta 8883 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 C(YMI} diff --git a/Shaders/raytrace/src/raytrace_brute.hlsl b/Shaders/raytrace/src/raytrace_brute.hlsl index 998f5a6f..483cc7c9 100644 --- a/Shaders/raytrace/src/raytrace_brute.hlsl +++ b/Shaders/raytrace/src/raytrace_brute.hlsl @@ -12,6 +12,7 @@ struct Vertex { struct RayGenConstantBuffer { float4 eye; // xyz, frame float4x4 inv_vp; + float4 params; // envstr, envshow }; struct RayPayload { @@ -76,7 +77,9 @@ void raygeneration() { if (payload.color.a < 0) { if (i == 0) { // return; - payload.color.rgb = float3(0.05, 0.05, 0.05); + if (constant_buffer.params.y == 0) { + payload.color.rgb = float3(0.05, 0.05, 0.05); + } } break; } @@ -157,6 +160,6 @@ void closesthit(inout RayPayload payload, in BuiltInTriangleIntersectionAttribut [shader("miss")] void miss(inout RayPayload payload) { float2 tex_coord = equirect(WorldRayDirection()); - float3 texenv = mytexture_env.Load(uint3(tex_coord.x * 1024, tex_coord.y * 512, 0)).rgb * 3; + float3 texenv = mytexture_env.Load(uint3(tex_coord.x * 4096, tex_coord.y * 2048, 0)).rgb * constant_buffer.params.x; payload.color = float4(payload.color.rgb * texenv.rgb, -1); } diff --git a/Sources/arm/io/ImportEnvmap.hx b/Sources/arm/io/ImportEnvmap.hx index 97fe6fc4..9288a154 100644 --- a/Sources/arm/io/ImportEnvmap.hx +++ b/Sources/arm/io/ImportEnvmap.hx @@ -117,9 +117,6 @@ class ImportEnvmap { Scene.active.world.probe.radiance = image; Scene.active.world.probe.radianceMipmaps = mips; Context.ddirty = 2; - #if kha_direct3d12 - arm.render.RenderPathRaytrace.ready = false; - #end } }, true); // Readable mw = Std.int(mw / 2); diff --git a/Sources/arm/render/RenderPathDeferred.hx b/Sources/arm/render/RenderPathDeferred.hx index 9c54068b..50b9d26f 100644 --- a/Sources/arm/render/RenderPathDeferred.hx +++ b/Sources/arm/render/RenderPathDeferred.hx @@ -190,39 +190,6 @@ class RenderPathDeferred { } #end - #if kha_direct3d12 - { - Scene.active.embedData("bnoise_sobol.png", function() {}); - Scene.active.embedData("bnoise_scramble.png", function() {}); - Scene.active.embedData("bnoise_rank.png", function() {}); - - { - var t = new RenderTargetRaw(); - t.name = "bsobol"; - t.width = 256; - t.height = 256; - t.format = "RGBA32"; - path.createRenderTarget(t); - } - { - var t = new RenderTargetRaw(); - t.name = "bscramble"; - t.width = 128; - t.height = 1024; - t.format = "RGBA32"; - path.createRenderTarget(t); - } - { - var t = new RenderTargetRaw(); - t.name = "brank"; - t.width = 128; - t.height = 1024; - t.format = "RGBA32"; - path.createRenderTarget(t); - } - } - #end - { var t = new RenderTargetRaw(); t.name = "bloomtex"; diff --git a/Sources/arm/render/RenderPathRaytrace.hx b/Sources/arm/render/RenderPathRaytrace.hx index a56fdc79..ff41ccbf 100644 --- a/Sources/arm/render/RenderPathRaytrace.hx +++ b/Sources/arm/render/RenderPathRaytrace.hx @@ -13,7 +13,8 @@ class RenderPathRaytrace { public static var raysPix = 0; public static var raysSec = 0; public static var ready = false; - static var f32 = new kha.arrays.Float32Array(20); + static var first = true; + static var f32 = new kha.arrays.Float32Array(24); static var helpMat = iron.math.Mat4.identity(); static var vb:kha.arrays.Float32Array; static var ib:kha.arrays.Uint32Array; @@ -22,23 +23,87 @@ class RenderPathRaytrace { static var brank:kha.Image; static var raysTimer = 0.0; static var raysCounter = 0; + static var lastLayer:kha.Image = null; + static var lastEnvmap:kha.Image = null; - static function init() { - iron.data.Data.getBlob("raytrace_brute.cso", function(shader:kha.Blob) { + static function init(shaderName:String, targetW:Int, targetH:Int) { + + if (first) { + Scene.active.embedData("bnoise_sobol.png", function() {}); + Scene.active.embedData("bnoise_scramble.png", function() {}); + Scene.active.embedData("bnoise_rank.png", function() {}); + + var path = RenderPathDeferred.path; + + { + var t = new RenderTargetRaw(); + t.name = "bsobol"; + t.width = 256; + t.height = 256; + t.format = "RGBA32"; + path.createRenderTarget(t); + } + { + var t = new RenderTargetRaw(); + t.name = "bscramble"; + t.width = 128; + t.height = 1024; + t.format = "RGBA32"; + path.createRenderTarget(t); + } + { + var t = new RenderTargetRaw(); + t.name = "brank"; + t.width = 128; + t.height = 1024; + t.format = "RGBA32"; + path.createRenderTarget(t); + } + { + var t = new RenderTargetRaw(); + t.name = "envrt"; + t.width = 4096; + t.height = 2048; + t.format = "RGBA128"; + path.createRenderTarget(t); + } + } + + iron.data.Data.getBlob(shaderName, function(shader:kha.Blob) { buildData(); - - var layer = Context.layer; - var savedEnvmap = Scene.active.world.probe.radiance; - Krom.raytraceInit( - shader.bytes.getData(), untyped vb.buffer, untyped ib.buffer, iron.App.w(), iron.App.h(), - layer.texpaint.renderTarget_, layer.texpaint_nor.renderTarget_, layer.texpaint_pack.renderTarget_, - savedEnvmap.texture_, bsobol.renderTarget_, bscramble.renderTarget_, brank.renderTarget_); + shader.bytes.getData(), untyped vb.buffer, untyped ib.buffer, targetW, targetH, + bsobol.renderTarget_, bscramble.renderTarget_, brank.renderTarget_); }); } public static function commands() { - if (!ready) { ready = true; init(); return; } + if (!ready) { + ready = true; + init("raytrace_brute.cso", iron.App.w(), iron.App.h()); + lastEnvmap = null; + lastLayer = null; + } + + var path = RenderPathDeferred.path; + var savedEnvmap = Scene.active.world.probe.radiance; + if (lastEnvmap != savedEnvmap) { + lastEnvmap = savedEnvmap; + lastLayer = null; + + var envrt = path.renderTargets.get("envrt").image; + envrt.g2.begin(false); + envrt.g2.drawScaledImage(savedEnvmap, 0, 0, envrt.width, envrt.height); + envrt.g2.end(); + } + + var layer = Context.layer; + if (lastLayer != layer.texpaint) { + lastLayer = layer.texpaint; + var envrt = path.renderTargets.get("envrt").image; + Krom.raytraceSetTextures(layer.texpaint.renderTarget_, layer.texpaint_nor.renderTarget_, layer.texpaint_pack.renderTarget_, envrt.renderTarget_); + } + var cam = Scene.active.camera; var ct = cam.transform; helpMat.setFrom(cam.V); @@ -65,6 +130,8 @@ class RenderPathRaytrace { f32[17] = helpMat._31; f32[18] = helpMat._32; f32[19] = helpMat._33; + f32[20] = Scene.active.world.probe.raw.strength; + f32[21] = UITrait.inst.showEnvmap ? 1.0 : 0.0; var path = RenderPathDeferred.path; var framebuffer = path.renderTargets.get("taa").image; @@ -77,24 +144,6 @@ class RenderPathRaytrace { Context.rdirty--; } - public static function initBake() { - iron.data.Data.getBlob("raytrace_bake.cso", function(shader:kha.Blob) { - buildData(); - - var path = RenderPathDeferred.path; - var baketex0 = path.renderTargets.get("baketex0").image; - var baketex1 = path.renderTargets.get("baketex1").image; - var baketex2 = path.renderTargets.get("baketex2").image; - var savedEnvmap = Scene.active.world.probe.radiance; - var layer = Context.layer; - - Krom.raytraceInit( - shader.bytes.getData(), untyped vb.buffer, untyped ib.buffer, layer.texpaint.width, layer.texpaint.height, - baketex0.renderTarget_, baketex1.renderTarget_, baketex2.renderTarget_, - savedEnvmap.texture_, bsobol.renderTarget_, bscramble.renderTarget_, brank.renderTarget_); - }); - } - public static function commandsBake() { var path = RenderPathDeferred.path; @@ -142,7 +191,14 @@ class RenderPathRaytrace { UITrait.inst.bakeType = 0; // MaterialParser.parsePaintMaterial(); - initBake(); + init("raytrace_bake.cso", Config.getTextureRes(), Config.getTextureRes()); + + var baketex0 = path.renderTargets.get("baketex0").image; + var baketex1 = path.renderTargets.get("baketex1").image; + var baketex2 = path.renderTargets.get("baketex2").image; + var savedEnvmap = Scene.active.world.probe.radiance; + Krom.raytraceSetTextures(baketex0.renderTarget_, baketex1.renderTarget_, baketex2.renderTarget_, savedEnvmap.texture_); + return; } @@ -213,13 +269,13 @@ class RenderPathRaytrace { bscramble = path.renderTargets.get("bscramble").image; brank = path.renderTargets.get("brank").image; - bsobol.g2.begin(); + bsobol.g2.begin(false); bsobol.g2.drawImage(bnoise_sobol, 0, 0); bsobol.g2.end(); - bscramble.g2.begin(); + bscramble.g2.begin(false); bscramble.g2.drawImage(bnoise_scramble, 0, 0); bscramble.g2.end(); - brank.g2.begin(); + brank.g2.begin(false); brank.g2.drawImage(bnoise_rank, 0, 0); brank.g2.end(); } diff --git a/Sources/arm/ui/TabViewport.hx b/Sources/arm/ui/TabViewport.hx index 5c683e72..bb149649 100644 --- a/Sources/arm/ui/TabViewport.hx +++ b/Sources/arm/ui/TabViewport.hx @@ -43,6 +43,7 @@ class TabViewport { p.raw.strength = ui.slider(envHandle, "Environment", 0.0, 8.0, true); if (envHandle.changed) Context.ddirty = 2; + #if (!kha_direct3d12) ui.row([1/2, 1/2]); if (Scene.active.lights.length > 0) { var light = Scene.active.lights[0]; @@ -68,6 +69,7 @@ class TabViewport { light.data.raw.strength = ui.slider(lhandle, "Light", 0.0, 4.0, true) * scale; if (lhandle.changed) Context.ddirty = 2; } + #end ui.row([1/2, 1/2]); var cam = Scene.active.camera.data.raw;