diff --git a/base/Sources/arm/render/RenderPathRaytraceBake.hx b/base/Sources/arm/render/RenderPathRaytraceBake.hx index a1dec85c..3c949e25 100644 --- a/base/Sources/arm/render/RenderPathRaytraceBake.hx +++ b/base/Sources/arm/render/RenderPathRaytraceBake.hx @@ -10,6 +10,7 @@ class RenderPathRaytraceBake { public static var raysPix = 0; public static var raysSec = 0; + public static var currentSample = 0; static var raysTimer = 0.0; static var raysCounter = 0; static var lastLayer: kha.Image = null; @@ -113,20 +114,29 @@ class RenderPathRaytraceBake { path.bindTarget("baketex2", "tex"); path.drawShader("shader_datas/copy_pass/copy_pass"); - raysPix = RenderPathRaytrace.frame * 64; - raysCounter += 64; + #if kha_metal + var samplesPerFrame = 4; + #else + var samplesPerFrame = 64; + #end + + raysPix = RenderPathRaytrace.frame * samplesPerFrame; + raysCounter += samplesPerFrame; raysTimer += iron.system.Time.realDelta; if (raysTimer >= 1) { raysSec = raysCounter; raysTimer = 0; raysCounter = 0; } + currentSample++; + Krom.delayIdleSleep(); return true; } else { RenderPathRaytrace.frame = 0; raysTimer = 0; raysCounter = 0; + currentSample = 0; return false; } } diff --git a/base/Sources/arm/ui/UIHeader.hx b/base/Sources/arm/ui/UIHeader.hx index 4caac036..311a8490 100644 --- a/base/Sources/arm/ui/UIHeader.hx +++ b/base/Sources/arm/ui/UIHeader.hx @@ -198,6 +198,9 @@ class UIHeader { }); UIBase.inst.hwnds[0].redraws = 2; History.pushUndo = true; + #if (kha_direct3d12 || kha_vulkan || kha_metal) + arm.render.RenderPathRaytraceBake.currentSample = 0; + #end } var bakeHandle = Id.handle({ position: Context.raw.bakeType }); @@ -258,8 +261,14 @@ class UIHeader { } #if (kha_direct3d12 || kha_vulkan || kha_metal) if (rtBake) { - ui.text(tr("Rays/pix:") + ' ${arm.render.RenderPathRaytraceBake.raysPix}'); - ui.text(tr("Rays/sec:") + ' ${arm.render.RenderPathRaytraceBake.raysSec}'); + var progress = Std.int(arm.render.RenderPathRaytraceBake.currentSample / Context.raw.bakeSamples * 100); + if (progress > 100) progress = 100; + ui.fill(0, 0, ui._w, ui._h, ui.t.SEPARATOR_COL); + ui.fill(0, 0, ui._w * progress / 100, ui._h, ui.t.HIGHLIGHT_COL); + ui.text(tr("Progress") + ": " + progress + "%"); + ui.text(tr("Samples") + ": " + arm.render.RenderPathRaytraceBake.currentSample); + ui.text(tr("Rays/pixel" + ": ") + arm.render.RenderPathRaytraceBake.raysPix); + ui.text(tr("Rays/second" + ": ") + arm.render.RenderPathRaytraceBake.raysSec); } #end if (Context.raw.bakeType == BakeCurvature) {