The built in painting system can be slow and tedious while random terrain generators can be hard to control and tweak. Terrain Smith is a terrain creation solution that aims to be as simple and fast to work with as I can get it. Place height maps like GameObjects, using the built in Transform system to position, scale, and rotate. Height maps, alpha layers (textures), detail layers (grass), and trees are all controlled by “stamps” with many tweakable settings.
video plays at 2x-3x speed.
Features
Place heightmaps similar to how you would place a GameObject with transform control over position, scale, and rotation.
Path system for creating roads, mountain paths, rivers, and more.
This looks like the start of a very promising system… I can’t believe noone has commented here yet. being able to adjust terrain in realtime with splines is awesome
I’m currently rewriting it from the ground up (as I have a better understanding on Unity terrain system now.) so if any one has any feature requests go ahead and post them.
Upcoming features:
Custom data storage system for making infinite terrain easier to work on, and to more easily save changes made in play mode.
Faster overall. Stuff will stay on the GPU until you are done modifying it. Passing data from GPU → CPU was the majority of the slow down.
Better tools for blending terrain features (height, textures, grasses) with objects. So you can prevent grass from growing directly below objects but can increase the amount of grass grown directly around/beside objects.
Development is slow so this wont be ready very soon.
This is the sort of asset I have been looking for. I know it is in alpha but will the tool support mesh terrains or will it have an exprt to mesh option? Unity terrains are great but somtimes the best option is to go with a mesh terrain and having both options would make me buy this in a heart beat.
Just noticed that your Texture Smith asset has a terrain stamping tool. Is this the same asset as Terrain Smith and are you planning to combine both assets? What is your road map?
I could add an export option eventually. I was experimenting with creating slanted mountains that can basically overhang terrain, and created a custom terrain collider for it which could be refactored for a mesh export.
No the Texture Smith terrain system will be removed later. This started as a Texture Smith feature, but it’s evolved to be it’s own asset.
My current roadmap is to do a full rewrite because I understand Unitys terrain better, and Terrain Smith isn’t optimized enough. The next version will be faster and hopefully include a runtime level editing + save system. But I’m slow to develop atm.
Yes this works fine with Megasplat and Microsplat as those are shaders and this is a terrain system. I think I was using Microsplat while creating the demo video.
Thank you for the support. I’m working on a number of things at once so I’m not sure when the next version will be ready. Maybe I’ll try to post more development progress in this thread.
Making slow and steady progress on the rewrite. If I could afford to I’d work on it everyday.
Here’s some of what I’m working on:
New path system. Used for painting features (height, alphas…), road/path generation, and placing objects along splines. Imagine mass placing trees and prefabs with splines that can have rule-sets (larger trees in center, bushes at edges…).
Culling system, so only modified areas of the world are updated. The aim is to make things fast enough for runtime development.
In the old version if you had a height map of 2048x2048, it would draw every single stamp to a 2048x2048 texture, and then read + update the entire terrain. Now it will only update specific cells and draw the stamps in that cell.
2) New path system.
Rapidly design mountains, rivers, and roads with splines. Everything live updates in editor. I’m trying to make it all as fast as possible, so it’s chunk based and somewhat multithreaded.
There is a system that allows you work “on top” of a previous terrain, which means you could generate your terrain with any other terrain system, and then place these “stamps” over it.
Multi-terrain support nearly complete.
I also have a way of saving + loading terrains as compressed files which are smaller than the built in Unity terrain .asset.
Another thing is that stamping is material based instead of texture based. So you can do stuff with shader based noise, and or textures.
Here I splined out an area that was then stylized with a voroni * turbulence noise shader. Since the noise is calculated with world space coords other stamps will be able to blend with it if they have the same setup + seed.
I really hope I can upload a new version to the asset store before the end of the month.
Here’s a quick overview of some new things.
1) Robust chunk system.
Can load and unload chunks quite quickly. (Depends on tile resolutions.)
Stamps automatically work across all chunks they cover.
Chunks are saved in a custom format that is almost 5x smaller than Unity terrain. (A 56.6 mb Unity terrain saves as a 12.3 mb file.)
I accomplished the small file size by first converting all height + alpha + detail layers to textures, and encoding these as PNGs, and then compressing the combined byte array. This method might be slightly lossy. Unity detail map data is in the range of 0-14 for some reason. I convert that to 0.0f-1.0f and place them in the RGBA of a texture, then encode to PNG + compress. I did a quick test of the average difference between a saved maps detail and a loaded maps and got: 0.0006134547. There was no visible difference so it’s a worthwhile trade off (imo) for ~5x smaller files.
The green and red nibs are buttons for loading + unloading terrains.
I also began on a GUI, which will have common tools + maybe a minimap for more easily moving around + orienting yourself. The minimap looks noisy because I use encoding on the height maps values to store them across all 4 texture channels.
2) Mountain sculpting video.
With a few splines to define height limits, and a noise generating material you can quickly sculpt mountains, craters, lakes or whatever else wherever you want.
Note that this is runtime speed. I want you to see results as quickly as possible.
3) Path placement video.
Notice the blend function slider, which is how much to blend the path with the surrounding terrain.
Not shown is that paths can use a noise filter and define how strong the noise is per control point.
This tool is also great for creating rivers, or canyons.
4) Point area system.
This is a general purpose system for mass placing objects within a defined area.
It could be for placing farms with neatly ordered rows trees/plants, or for clustered forests that can have smaller trees at the edges.
It will have filters for responding to terrain (height, slope, normal, splats, details…), GameObjects, game layers… other point area systems?
Almost ready with an update, just need a few million more years.
Features upcoming: 1) Terrain Import
Use terrain from any other system by simply exporting it as a World Smith “stack”. The following images and videos show me building on top of a Gaia generated terrain.
2) Height map path
It’s nearly possible to make an entire level with a single height map path.
Path jitter for quick rivers and canyons.
Edge jitter. Good for cliffs.
Edge blending distance. Left and right edges can blend over different distances, so one side can be cliff-like, while the other is more of a slope.
Noise and blending are per control point, and blend into each other. So you can limit it in some areas, or use different noise types in others.
Much better terracing method and options.
Pattern/noise textures can blend differently for slope and non slopes.
3) Mesh to terrain feature
Any mesh can be converted into height map, splat map, or detail map features. Pro Builder is now free and an official Unity Asset so it’s good fun to quickly map areas out. World Smith will let you add noise to your blocky models, and update the editor as you make changes.
4) Tree paths
Finally place nice ordered (or disordered) rows of trees!
Path jitter.
Position jitter.
Number of trees planted “horizontally” and “vertically” along the spline on a per node basis.
Control which tree prefabs are planted on a per node basis. (With weighted random.)
Filter to prevent placement on splats, objects, or slopes.
5) Holes
2 methods available. You can paint them as a splat, or use a mesh + special material. There are pros and cons to both methods. (Also includes a basic script to handle collision ignoring.)
Goddammit, this looks wonderful! I’ve been keeping an eye on this asset for some time and I can see it gradually shaping into a very robust solution for working with unity terrain.
Quick question:
Is it possible to brush-paint height across multiple terrains or otherwise somehow stitch those together?
The stamp system will set the height, splat, detail of any terrains that are under them, and then automatically stitch the seams.
The built in Unity brushes don’t really work in my system as whenever you modify a stamp it clears any changes to the terrain in that area. The goal of my system was to never have to use the brushes because I find them tedious. I do have plans for a splat painting feature that should let you do multiple splats at once, and be more rule based (fade on slopes…) but I’m not sure how I will do that yet.
Unity released their C# source code, so it was easy to copy their brush tool.
It’s not as fast as the built in tool, but it will allow you to:
-“Paint” features that won’t be erased when stamps are adjusted.
-Scale and rotate based on stroke. (Optional.)
-Filter based on height, normal, curvature, or slope.
-Paint multiple layers at once. (Including details and trees.)
-Use Photoshop and Gimp brush sets.