This is a bit of a rant, and I’m hoping someone will tell me I’m wrong.
/Start Rant
Creating expansive environments filled with trees and grass in Unity is a nightmare.
Each asset publisher creates their own tree and grass shaders. These arbitrary shaders rarely interoperate with environmental lighting and weather systems. To make it render with reasonable performance you’ll need a specialized renderer to replace Unity’s built-in tree and detail layer rendering. The leading renderer is expensive and unsupported. And now it’s time to add in imposters and bake assets, which works except when it doesn’t.
The whole thing is a hot mess.
So then you buy a third-party product to standardize vegetation. And you’ll find it works some of the time, but not all the time.
They are making a new worldbuilding solution built on DOTS (mentioned here DOTS development status and next milestones - May 2024 , probably elsewhere that I can’t find rn).
So hopefully your complaints will be somewhat alleviated.
With Unite just around the corner hopefully we’ll be seeing a lot more information about the whole thing.
Thanks for sharing the development status! DOTS certainly has great world building potential.
Ideally, I would want to see Unity implement a more efficient grass and tree renderer. Grass is loaded in chunks which causes framerate hitching – which then necessitates the use of an asset store solution. These solutions in the marketplace are not using DOTS.
Separately, if Unity produced a ‘reference design’ for tree and grass shaders, this would help standardize solutions in the marketplace.
Yes this is true… it is indeed absolute mess, The vegetation engine > Amplify Imposters has been my solution to just taking alot of the other tree/assets into something that uses the same shaders and can be given the imposter solution for larger distances… but going through doing all that is a pain, and LOD Group stuff hasn’t had an update in years LOD Group UX grayed out scene view … everything to do with Worldbuilding terrain and trees/grass has been neglected and they are only just looking at fixing it… after about 6years of a complaints. jbooth stuff and boxophobic and bunch of other asset developers trying to improve this mess in Unity for us users should be given nobel prizes.
I want to hear other people’s experiences and decisions
So which solution did you choose?
I’m looking for an alternative to TVE or SpeedTree.
TVE works, but I feel the overhead is very large.
There were a lot of things I didn’t like…
But I can’t seem to find a better solution than this right now.
I’ve never used SpeedTree.
But it’s heavy to try considering the cost of it (the monthly fee + the cost per sheet), the cost of the artist learning it, etc.
The recently released features of Unity’s New Generation World Building look great.
But as far as I know, it won’t be released in 6.0, 6.1.
It is impossible to expect a realistic solution for immediate development.
I really enjoy using Unity. I’ve found it to be the best engine for mobile games or for making quick prototypes. That said, I’d never consider using it for an open world game. Unreal is so far ahead with features like Nanite, procedural content generation and superior vegetation. The Unity Time Ghost demo is really impressive but it can’t compare to the Unreal matrix demo. If vegetation was a major feature then I feel like the best option would be to switch engines. Personally, I’m not really interested in open world games or procedural levels so I’m happy to stick with Unity.
This is a long reply… I just settled on a tool chain and the details are fresh for me. I hope it is helpful to you and possibly others.
Nature Renderer
It definitely works and the improved rendering performance justifies the headache of patching shaders for grass and trees.
The grass performance improvement was significant (2x improvement) due to improved culling and management of detail distance.
For trees, the performance improvement wasn’t great but the rendered triangle count dropped significantly.
It has numerous unresolved bugs, many of which are impactful. You can see from the unanswered GitHub issues list that the developer hasn’t provided support in over three months. You’ll be on your own.
It does not implement crossfade, which is very jarring when tree LODs pop in.
I anticipate having to replace it due to the existing bugs and lack of support. Proceed with caution on this one.
I have not tried Foliage Renderer or GPU Instancer, which are candidate assets for replacing Nature Renderer.
TVE
I am currently not using this asset.
TVE presets did not work reliably for me. I attempted manual configuration of assets.
I went through the steps to prepare a shader configuration for each tree and after eight hours I stopped trying because it was too fiddly.
It requires individual assignment of a shader to each tree submesh and I was getting inconsistent results with wind and seasonal color overlays.
Someone with more patience can probably get exactly what they need out of TVE. I had to weigh the end results with the required time commitment.
Ultimately, I decided to just use the vegetation shaders created by each asset author and let Nature Renderer do it’s automated patching.
I may return to use TVE or replace it with another solution.
Enviro 3
I have nothing but positive things to say about Enviro 3 for sky and weather.
The developer is very responsive, and he works hard to make it one of the best sky and weather solutions for Unity.
Performance is terrific and the API is very clean.
The only downside of note is that snow and rain is localized around the camera, and it does a poor job of tracking with camera.
Enviro Terrain
Enviro Terrain works in tandem with Enviro 3 to apply weather effects (rain puddles, snow) to the ground.
It’s plug-and-play and works well.
It does not support UV-free texturing for the y-axis, which can cause textures to look stretched. The developer says he is working on addressing it.
It supports terrain tessellation using height maps. It’s computationally expensive but worth it if you are shipping on PC. If you enable it, it will disable terrain instancing which will further impact performance. *edited
Staggart Terrain Painter
I needed a runtime procedural terrain painting solution. (I tried Microverse and disliked that it brought in a large number of assemblies. I couldn’t get Microverse to do what I needed procedurally and at runtime)
Terrain Painter by Staggart provides a clean API for procedural integration.
It is blazing fast and the results are stunning.
Staggart Vegetation Spawner
I needed procedural tree and grass placement.
To be honest, this solution wasn’t performant enough, and I ended up rewriting it until it no longer resembles the original asset.
The original version of this asset isn’t ideal for runtime procedural placement, but it’s great if you are working within the editor.
KWS Water
KWS is a terrific water system. The performance is great!
The API is clean and easy to use. It makes use of ScriptableObjects for settings, which simplifies changing water settings on-the-fly.
All of its shaders support the DXC compiler, which is needed for a certain game console.
Fluid Frenzy
I wanted to create realistic looking lava and rivers. I tried a few of the popular solutions out there found that they do not play well with runtime generation.
Fluid Frenzy is fantastic for generating rivers and lava.
I use it for at runtime creation of fluid systems and I embrace that it is a simulation because it is so performant.
The API is easy to use.
Amplify Imposters
This solution works amazingly well … except when it doesn’t.
About half my trees, which ironically use shaders created by Amplify, do not play well with the Imposter baking system.
Amplify is aware of the problem and they are working towards a fix but timing of that fix is very uncertain.
I need to analyze and compare performance. I think I saw an imposter with multiple texture channels and I need to confirm if this is the case to analyze memory vs performance. Also, is Nature Renderer instancing and batching draw calls for these Imposters?
The verdict is out on this one. More testing is needed.
Terrain Generation
I wrote my own procedural solution for generating terrain because I was dissatisfied with the runtime capabilities and performance of other assets (Gaia, Polaris).
I wanted to continue using Unity terrain instances because they integrate well with other solutions, i.e. Unity physics, Digger, etc.
I needed fast generation at runtime and that’s just NOT a goal of most solutions I reviewed.
Results
I’m able to generate gameplay areas which span in size from 1 km up to 100 km squared. Each generated gameplay area is a specific biome. Here are some examples:
Here is where I landed for procedural generation of the mountain scene shown above.
Create Terrain 526ms,
Create Terrain Features 68ms,
Update Heightmaps 839ms,
Painting 403ms,
Vegetation 55ms,
Grass 751ms,
Trees 165ms,
Spawn Objects 529ms,
Total 3601ms,
Area 16km
225ms per sq km
There is so much fragmentation in the tooling that you end up buying several assets that accomplish the same goal – just to find the one that meets your needs.
I am very interested to hear what you are working on. This is a hard problem to tackle… What works well for you?
I have used Nature Render, TVE, KWS Water, Amplify Imposters, etc.
For Water, I am currently trying to use the water function of HDRP.
The effect of entering the water from outside and the expression at the boundary were very satisfactory.
(HDRP Water Demo)
However, some of the features supported by kws are not yet available.
Nevertheless, it meets my requirements.
I’m also satisfied that I can solve the problem without using a third party.
Enviro 3
It looks good. I’ve never used it before, but I want to try it
The HDRP’s volume setting alone was enough to achieve its purpose
I used to make and use the weather effect myself.
(Using Shader, VFX)
But I think it would be good to try this in terms of productivity and a lot of things, so I’ll try it.
for tree, grass…
I haven’t decided that for sure yet.
sufficient and consistent quality
many kinds of asset
reasonable price (for my terms)
I’ve never used Unreal, but the demos and Quixel Megascans they offer seem to meet the conditions I want.
Of course, there may be another difficulty if i actually use it.
I think these are very common and would be the requirements that many people need.
I wish Unity had such a thing.
Your scene with volumetric lighting looks terrific. I’m glad to hear HDRP is working out!
Regarding Quixel, I downloaded the plugin and tried a few assets Friday. Many of them are configured nicely with appropriate LODs. One thing I noticed is that there are zero trees in their cross-platform catalog.
I tried it a few years ago, so I’m not sure about the recent changes.
If I want to use it in Unity, I will pay for each asset, right?
If look at how to use tree here, it seems like buying(free for unreal) and using an asset separately from the unreal asset store.
So maybe you can’t find a tree in the catalog?
It won’t be impossible to export them from Unreal and port them to Unity.
But I don’t think it’s an option that’s available because it won’t be allowed
The screenshots are a bit outdated, this is HDRP pipeline, but I’ll tell my experience. I’ve been a huge fanboy of custom assets from anything shaders to custom tooling. And I really burnt out here, maintaining such huge amount of assets that usually doesn’t work properly together. You either take all assets from one exact author or living in discord support of waiting for specific patch.
For example year or so ago, KWS water didn’t support foam lighting from ambient probe, making it unlit when sun below horizon.
Enviro didn’t support HDRP fog for quite some time
Amplify impostors stopped working like you said
And list goes on and on
And honestly, most visual assets for sky and water looks bland? Don’t get me wrong I love Enviro, but most HDRP built-in features covering a LOT of unneeded assets from the store. Not to mention that you can always open shader graph and write your own weather shader and it will work always.
Of course, you can’t start from scratch completely, so here’s my go-to assets, that solid hard reliable:
Microsplat for anything terrain painting, mesh blending
TVE for wind animation (In latest 20.0 release you can turn off features, making it lightweight)
GPUi for vegetation placing
Amplify impostors
The rest you can honestly cover with built-in solutions especially in HDRP
Looks great, Jack. I appreciate hearing about your tool chain. It’s interesting that you mention Amplify Imposters used to work. I get the impression that some asset publishers died trying to climb the hill, supporting three different pipelines. Unity has a replacement terrain workflow in the works, and that could discourage ongoing development and support for existing products.
Hello
My name is David and I work with the team at Amplify Creations. Unity has had a lot of changes over the years but we are still pushing out updates for every new api. We are not only maintaining, we have some massive updates coming down the road soon.
For vegetation I read a lot of great comments above, and I have also felt the pain about unifying workflows. The solution I ended up with was to build my own tools so I could bake any vegetation .mesh, FBX, .OBJ …. with a vertex color to drive the wind and tree bending similar to speedtree but with custom shaders made with the Amplify Editor. This method does take some patience as you need to hard bake the wind directly into the FBX so its stored in its data however it does reduce the need for use of texture based wind driven solutions that could give inconsistent effects due to every vegetation is different size and height.
For anyone reading this stop over into the Amplify Discord and say “Hello DE Environment” and for the first 3 people I will generate a coupon for it on asset store. This asset was created directly by me years ago and is battle tested.
NR incorrectly clips shadows for trees cast behind the camera viewing frustum.
NR incorrectly clips rendering for tall trees.
NR places tree shadows on the Default rendering layer, which is incompatible with my setup.
NR is completely unsupported and the above support tickets have not been responded to for multiple weeks.
Thankfully, I found a great alternative that is fully supported.
GPU Instancer Pro
Performs substantially better than NR. Less CPU utilization.
Renders more trees and grass with higher throughput.
Provides detailed diagnostics to show if it is working, how it is working, and how to further improve performance.
Combines tree, grass, and game object instancing into one solution.
Provides detailed configuration options (shadow distance, grass density, culling options) to get the exact look I am striving for, with maximum performance.
Fully supported by the developer who created the tool, via email and Unity Discussions.
Here’s an example scene using GPU Instancer Pro. 90+ FPS, with < 11% CPU utilization. This is in the Editor, which has higher overhead.
Imposters
The above scene does not use imposters. I am currently evaluating different Imposter solutions. @Amplify_David and his team are working to update Amplify Imposters, bringing back support for forward rendering only Amplify shaders.