It’s been a while! I’ve finally finished the new materials.
The new materials now use image textures instead of procedurals. While procedurals have many benefits, you get more bang for your buck with images. They bring lots of non-discrete details and variation, along with better performance in exchange for some flexibility. This change was possible now thanks to all the great CC0 texture sites that have been popping up in the last year or so.
I believe users should be able to do whatever they want with the terrains they generate with Mirage, so textures that can’t be redistributed are a no-no. This made things a bit more difficult. Even though there are scores of great CC0 textures available now, few of them are good landscape textures. The good news is that the new materials definitely look better than before, and both the material and textures are CC0. You can do anything you want with them, commercial or not.
The materials are more simple now. The slope and height masks are managed with colorramps, except for height offset. I plan on making a video walk through of the noodle setup once this version is released.
I’ve included the complete set of maps for each texture used, even when they are not used. There’s also a
textures.txt file in the assets folder with the license and the source of each texture and I included
the original names since I renamed them all to be more consistent.
While the new materials are an improvement, they are still far from perfect. Or at least from what I’d like to see in Mirage.
A common problem when texturing landscapes is tiling. You need to have textures look small so when you are standing in the terrain you can sell the illusion of scale. This makes the texture repeat a million times and look quite fake. One trick to solve this is mixing the texture with itself using a different scale
or rotation. This breaks the tiling somewhat. But it won’t save you if you used a really small scale and have a ton of repetition, though you could keep mixing it over and over until it’s gone.
The other way to deal with this problem is layering. Break up the space in the mesh into many textures and none of them will have enough space to show any obvious tiling. We could also include grass particles and objects in this solution.
So, why not just do this? It’s the limitations. More textures, more RAM. With Eevee this could cause the material to not render, depending on your GPU memory. It can spiral out of control quickly: Imagine having 2K-6K diffuse, roughness, normal and displacement for each “layer” of material, then we also have to consider the masks to mix all of those. Using height or slope alone looks artificial, we need to distort it with some noise. Oh yeah, and the displacement map should be at least 4K/16bits if you want micropoly without any pixelation or obvious banding. Cycles can handle more textures, but it can still murder your PC if go too far.
I’ve been considering mixing and baking all the textures into images in the future. Mirage would have a special UI to handle the look of the terrain and when the user is done, it would bake all the layers together into a single texture. That would be way better for performance, but it would also remove the ability to use texture paint for masking.
Or maybe Eevee/Cycles/the hardware we use in general will be able to handle this just fine in the future and I won’t have to get out of bed.
Have you also fought with performance in landscapes? Let me know in the comments, I’d love to know how other people are getting around this. Or whether this is a serious problem for everyone or I’m just overthinking things.
- No more features. Time to test everything and fight the horde of bugs.
- Time for documenting too. I also want to start writing some ideas for video tutorials.
If you want a seat in the first row when the next version of Mirage comes out you can check it out on the BlenderMarket.