Critias Vegetation System [Asset Store]

Hello!

‘Critias Tree & Grass’ is an system that is designed to paint, render and extract millions of instances of foliage without taking into account all the foliage but only the one that is in the proximity of the player.

Based on Unreal’s foliage flow and UI and the ‘Critias Tree/Grass’ systems, I have decided to merge all of them for people who are interested in a all-in-one system, for trees, grass and any other terrain details that you might require in huge quantities.

But that is only a bonus, the core of the system is an super-fast instancing based rendering engine, that batches together foliage based on cells and sends them packed to the GPU so that your game’s FPS is happy even with millions of foliage instances!

For a significant performance difference you should use more than 10000 mesh grass instances and more than 5000 trees. Only then you can unlock the full power of the system.

With ‘Critias Tree & Grass System’ you can:

  • Paint your grass/meshes on your objects/terrain
  • Extract existing trees or meshes from your scene
  • Render at awesome FPS your foliage

Features (V 1.3.0):

  • Primitive colliders for navmesh generation
  • Add a ‘Cleanup’ command
  • Convert items to native Unity game object format

Bug Fixes:

  • Collision duplicating mesh rendering

Features (V 1.2.1):

  • YOffset’ per-type and not global any more. Works with extraction too
  • Code fixes, improved caching

Bug Fixes:

  • Changing foliage types from ‘OTHER_GRASS’ to ‘OTHER_TREE’ works
  • Data does not get duplicated when changing the foliage type any more
  • Fixed the ‘NullShader’ depth issues

Features (V 1.2.0):

  • GPU distance foliage bending (experimental)
  • Adding foliage instances
  • DrawMeshInstancedIndirect with GPU caching
  • Runtime hue/color changes
  • Grass shadow fade
  • Billboard shadows
  • Foliage align to terrain in case of heightmap change
  • Detail extraction from multiple terrains at once is possible now
  • Auto-set the names of the extracted items
  • Advanced Foliage Shader 5 integration
  • Per foliage type surface align options
  • Better painting
  • Allow higher and lower densities
  • Code examples
  • Editor performance optimization
  • Documentation notes on common pitfalls like: billboard lighting, foliage normals facing etc…

Bug Fixes:

  • Billboard hue variation always matches tree hue variation now
  • Various other resource releasing and cleanup bugs are fixed
  • Wind not working in certain conditions (could not reproduce any more on my spec)

Features (V 1.1):

  • Artist friendly
  • Foliage instance batching and culling
  • Existing tree and details extracting from terrains
  • Hand painting
  • Spatial hashed foliage placement. Terrains are not required any more!
  • Paint your foliage on absolutely anything! Terrains, objects etc
  • Not dependent on SpeedTree only!
  • Awesome FPS (actually that’s the whole point of this system)
  • Smarter billboard batching
  • Automatic setup. No need for any fancy setup like the old system
  • Per foliage type culling distances
  • Per foliage shadow casting
  • Global grass density scaler
  • GPU Instance calculations, very low CPU overhead
  • Possibility to remove trees at runtime (destructible trees)
  • Labels - The system will remember from which source it’s instances came from
  • Hard-drive serialization
  • Support for 100k+ tress with collisions
  • Support for multiple foliage types
  • Instancing support
  • Tillable terrain support
  • Billboard rotation
  • Billboard Tree Y rotation
  • Tree/Grass SpeedTree wind
  • LOD System for trees
  • Animated SpeedTree style CrossFade
  • Uber-fast billboard system (SpeedTree only)
  • Everything from Critias Grass System
  • Everything from Critias Tree System

System:

Demo:

Documentation:

Tutorials:

Support:
Found a bug or have some great idea of improvement? No problem, just grab your torch and pitchfork and join me here on the forum!

UI:

Compatibility:
For good performance and support this system will target Unity 5.6.3f/2017+ due to shader managing issues for lower versions. DX11 and any other platform that supports instancing. I would really not recommend this system for mobile, mobile games have enough from the Unity default systems.

The requirements are:

  • Unity 2017+
  • DX11
  • DX11 equivalent graphic API’s with instancing support
  • GTX570/GTX750TI Golden Sample or equivalent GPU

Other Assets Compatibility:

Limitations:
Based on feedback with the other systems it is clear that a good video card with true GPU instancing is required. The minimum GPU would be an GTX570. I’ve also tested on a GTX750TI Golden Sample with very good results. I’ll have a demo shortly where you can test if the performance is good for your PC before downloading the system. And check the PassMark of your GPU. A value higher than 4000 is required.

If it works bad on your PC with instancing on, you can try disabling it and keeping only the tree rendering.

If the system or the demo behaves bad on your machine or on the machines that you are testing on, I recommend to use Unity’s build TreeCreator and foliage systems that are designed for very low-end machines!

12 Likes
  • Reserved *

Is it planned to make some interactive stuff like this?:

Well, that is more of a shader work than my system’s work that batches together a ton of details, but I have added it to the list of user proposed major features.

The only shaders I provide are the SpeedTree grass/tree shaders, the rest of the details use your own shaders that can do about anything.

Where is that screen from?

1 Like

Maybe you can allow external shaders to work with your system?
I am not a shader expert, just looking for some amazing environment system :wink:

Quoting myself: “The only shaders I provide are the SpeedTree grass/tree shaders, the rest of the details use your own shaders that can do about anything.”

If the item is not a SpeedTree then the shader that you have assigned to the prefab is going to be used, whatever shader that might be.

1 Like

substance shaders supported for grass?

For SpeedTree it uses the default (modified) shaders. For you grass you can use any shader you wish, including PBR shaders.

In the first image the rocks on the terrain have a PBR (standard) material from megascans.

1 Like

For people curious on how this would work, plus the setup, check out the quick tutorial video here.

When do you plan on releasing this system?

I’ll submit it to the asset store review either today, tomorrow or Monday. From then on it is going to be something like around 2 weeks until the asset store at 15$(excluding VAT).

For people in very big curiosity or hurry I think we can arrange something quicker and cheaper right after I submit it to for review (since I want to test it from A to Z before that).

Hey please count me in to the “people in a hurry” category I’ve been using the tree system for a while and can’t wait to see the next version! Let me know how we can do that…

No probls. I’ll make a post here. At the moment I’m writing documentation (/cry).

As an update the I have finished the system, I’ll submit it for review Monday.

1 Like

Will new system be able to serialize tree data to some kind of ScriptableObject? Currently I’m rewriting Critias Tree System to store all data like terrainData is stored (due to bloated scene size)

UPD: do you have any plans about direct TerrainComposer2 integration? Currently we generate data into Unity terrain system and then we copy it to critias system

Yes, that is a bad part of the tree system it has all the data stored in the script. However since it’s trees i never thought it might grow too large and I didn’t bothered with a scriptable object.

However for the grass system the approach was different. It uses a file on the disk (stored in the ‘StreamingAssets’) with my internal format. I used ‘ScriptableObjects’ initially but due to the huge amount of instance data it was crashing quite often and I always had to reimport the scripts to get that ScriptableObject to work.

Long story short, the approach for this foliage system is the same like the grass system. It doesn’t use ScriptableObjects since it works really bad at big amounts of data but it uses a file stored in the ‘StreamingAssets’ that contains all the data.

For integration with any 3rd party tools, I have it on my list, however that would require a strong integration, and that would require the developer of that tool to agree and write the code for the integration. I am not sure if anyone would want to do that. Anyway, In the system I am exposing 2 API’s one for runtime and one for edit-time where you can add your data programmatically, whatever that sourre might be.

Great! Waiting for it on asset store!

Thanks!

It is official, I have just submitted the first version for review, 18 September 2017.

In the meantime, while we wait for the approval, I’ll start working on the detailed and advanced tutorial that will try and cover the system from A to Z.

1 Like

Sent PM about early access to your new incredible system ))

Hello, I have received your email and responded.