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