This is essentially where the rubber meets the road for me. I’ve gotten back to the point I was at in Java, with all of the functional power of Scala at my disposal, and a completely redesigned TileForm library. Now it’s time to write the new terrain smoother.
After a great deal of refactoring, and building a unit testing harness with JUnit for the project, I finally implemented “diagonal hilltop smoothing”. This feature makes a second pass over the terrain and identifies locations that could benefit from a slope inversion. So, instead of “down and then over”, the hilltop pieces move “over and then down” in a diagonal direction. As you can see, this gets rid of a lot of the unnatural “scaling”, where there are diagonal rows of rounded corner bottoms on interior curves of the terrain.
Not all cliff edges are meant to go away. If that were the goal, I’d just make a surface mesh. I want impassable cliff-like edges between certain tiles. Next I’m going to work on improving the appearance of certain impassable ridges. Should be faster, with the new testing tools and refactored terrain processing code.
2nd demonstration of Isographer terrain heightmap processing. This demo uses the same terrain as the first demo, only with 65x65 datapoints gotten by expansion and diamond square recursion. Next steps will include discretizing the terrain height values, using the terrain slope data to swap out different angled tile types for smooth surface translation.
Early screenshots from Isographer, my new 3D isometric game terrain rendering library. Written in Java using the lightweight Java games library (LWJGL)