Thermal erosion is now fully ported! There isn’t a very noticeable difference this time around, I think it looks a bit better though (but maybe I’m biased!).
I also changed the setting names to make them easier to understand:
- Repose Angle is now Threshold
- Iterations is now Time
They are also shorter too, so they work nicely in Blender’s new UI.
Also, some bad news. I was making terrains seamless while they were generated, but thermal erosion has to run after that. And since both erosions modify the terrain, the seamless effect is broken when using them. So now I have to find a completely different way of making terrains seamless. One step forward, one step back I guess 🙁
After I was done with thermal I decided to take a little detour from erosions to improve the way I’m generating the initial heights. I used to generate the initial heightmap and the x/y vertex coordinates at the same time and store them in a vector of tuples (like a list of tuples in Python). While this might have a small performance gain (which is why I did it in the first place). It coupled terrain generation with the mesh’s geometry which made heightmaps complicated. It was also annoying to work with when the heights had to be modified (since I had to replace the entire tuple).
One of the hardest things about moving from Python to Rust is shaking that fear of loops killing performance. Some loops in Rust even have no overhead at all!
Now that the heightmaps issue is done, it’s time to get back on track with hydraulic erosion.
If you want to have a seat in the first row when the next version of Mirage is released you can check it out on the BlenderMarket.