diff --git a/chunky/src/java/se/llbit/chunky/renderer/PathTracingRenderer.java b/chunky/src/java/se/llbit/chunky/renderer/PathTracingRenderer.java index 149f007aa..89c30ebfe 100644 --- a/chunky/src/java/se/llbit/chunky/renderer/PathTracingRenderer.java +++ b/chunky/src/java/se/llbit/chunky/renderer/PathTracingRenderer.java @@ -66,6 +66,8 @@ public void render(DefaultRenderManager manager) throws InterruptedException { double halfWidth = fullWidth / (2.0 * fullHeight); double invHeight = 1.0 / fullHeight; + resetTiles(manager); // reset previously skipped tiles + double[] sampleBuffer = scene.getSampleBuffer(); while (scene.spp < scene.getTargetSpp()) { diff --git a/chunky/src/java/se/llbit/chunky/renderer/PreviewRenderer.java b/chunky/src/java/se/llbit/chunky/renderer/PreviewRenderer.java index 5c8eb6d4e..9322ff835 100644 --- a/chunky/src/java/se/llbit/chunky/renderer/PreviewRenderer.java +++ b/chunky/src/java/se/llbit/chunky/renderer/PreviewRenderer.java @@ -75,6 +75,8 @@ public void render(DefaultRenderManager manager) throws InterruptedException { int ty = (int) Math.floor(target.o.y + target.d.y * Ray.OFFSET); int tz = (int) Math.floor(target.o.z + target.d.z * Ray.OFFSET); + resetTiles(manager); // reset previously skipped tiles + double[] sampleBuffer = scene.getSampleBuffer(); for (int i = 0; i < 2; i++) { diff --git a/chunky/src/java/se/llbit/chunky/renderer/TileBasedRenderer.java b/chunky/src/java/se/llbit/chunky/renderer/TileBasedRenderer.java index f87039e1a..1efb339c1 100644 --- a/chunky/src/java/se/llbit/chunky/renderer/TileBasedRenderer.java +++ b/chunky/src/java/se/llbit/chunky/renderer/TileBasedRenderer.java @@ -43,6 +43,7 @@ public abstract class TileBasedRenderer implements Renderer { public static class RenderTile { public int x0, x1; public int y0, y1; + public boolean skip = false; public RenderTile(int x0, int x1, int y0, int y1) { this.x0 = x0; @@ -67,7 +68,10 @@ public void setPostRender(BooleanSupplier callback) { protected void submitTiles(DefaultRenderManager manager, BiConsumer perPixel) { initTiles(manager); - cachedTiles.forEach(tile -> + cachedTiles.forEach(tile -> { + if (tile.skip) { + return; + } manager.pool.submit(worker -> { WorkerState state = new WorkerState(); state.ray = new Ray(); @@ -82,7 +86,12 @@ protected void submitTiles(DefaultRenderManager manager, BiConsumer