Thanks to the family over at Reddit, I was able to figure out the best possible way to render more detail onto the landscape! So I popped open a few beers and decided to take some time and mess around with the ideas in a clean Unity Project. If you do not feel like reading the comments I will go ahead and try to sum up what I learned.

The original system was Instantiating multiple gameobjects to draw the grass (Currently only one mesh). This was causing a HUGE issue as Instantiating multiple gameobjects at runtime will cause computers to implode more so when you’re adding multiple objects like grass which can be in the range of 200-500 types of objects in one chunk depending on the level of detail you wish to obtain.

Thanks to reddit user: Romestus for pointing out the wonderful idea of using DrawMeshInstanced which just to quickly sum it up allows us to draw all of the detail in the map (Grass, small rocks, flowers etc..) with just one draw call. HUGE DIFFERENCE!

Using this I was able to create a Matrix4x4 list to store all of the possible locations for our grass by using Perlin Noise to determine the location per chunk.

For all of you copy and paste lovers here is a small example script I came up with to see the limitations of

DrawMeshInstanced as I have never really used it before.

(Click image to view gif)

Your terrain can be either be a Unity Terrain or a Mesh terrain like what GLYPH uses, just make sure you set your proper size to the terrain as this will cause some lag. Im just using a simple While loop to spawn in all the objects so that I can reach the max amount for testing purposes so I would suggest if you were to use this for your game to throw it in a for loop and run some iterations with lib noise instead of this very basic perlin noise.

(Copy and past code listed below)