diff --git a/chunky/src/java/se/llbit/chunky/renderer/scene/Scene.java b/chunky/src/java/se/llbit/chunky/renderer/scene/Scene.java index 5deefffcbf..0a42b262b4 100644 --- a/chunky/src/java/se/llbit/chunky/renderer/scene/Scene.java +++ b/chunky/src/java/se/llbit/chunky/renderer/scene/Scene.java @@ -725,12 +725,18 @@ private boolean worldIntersection(Ray ray) { } } else { r = new Ray(start); - r.setCurrentMaterial(start.getPrevMaterial(), start.getPrevData()); + Material mat = start.getPrevMaterial(); + int data = start.getPrevData(); + if (mat != Air.INSTANCE && !mat.isWater()) { + r.setCurrentMaterial(Air.INSTANCE, data); + } else { + r.setCurrentMaterial(mat, data); + } if (waterOctree.enterBlock(this, r, palette) && r.distance < ray.t) { ray.t = r.distance; ray.setNormal(r.getNormal()); ray.color.set(r.color); - ray.setPrevMaterial(r.getPrevMaterial(), r.getPrevData()); + ray.setPrevMaterial(mat, r.getPrevData()); ray.setCurrentMaterial(r.getCurrentMaterial(), r.getCurrentData()); hit = true; } diff --git a/chunky/src/java/se/llbit/math/Octree.java b/chunky/src/java/se/llbit/math/Octree.java index 3243d9d725..221d06e626 100644 --- a/chunky/src/java/se/llbit/math/Octree.java +++ b/chunky/src/java/se/llbit/math/Octree.java @@ -556,7 +556,7 @@ public boolean enterBlock(Scene scene, Ray ray, BlockPalette palette) { offsetZ = -ray.o.z * invDz; continue; } - } else if (!currentBlock.isSameMaterial(prevBlock) && currentBlock != Air.INSTANCE) { + } else if (!currentBlock.isSameMaterial(prevBlock)) { // Origin and distance of ray need to be updated ray.o.scaleAdd(distance, ray.d); ray.distance += distance;