Trees of the Immortal Gardens


New Dota 2 Compendium exclusive terrain came with the most pleasing to the eye set of trees that sparked their own controversy. We’re going to take a (literal) look inside and figure out how do this ourselves.


  Now, somewhere between the introduction of this terrain and today Valve changed up their trees a little bit, but the method will work regardless, it’s just a matter of little tweaks here and there.

Valve are notorious for using every trick in the book for their Dota 2 art and this one is no exception.

Let’s take a peek.


As you can see, both old and new trees are just a bunch of planes with an inside and outer shell.old_new With the main difference being that old trees are using one Scatter method and the new ones are using the other one. With the old one being all vertices, and the new one being downsized planes with even/area scatter methods, most likely.

Now let’s get on with making our own tree!

I’m using Max, but i’m sure your 3D software of choices has a similar function.

Navigating to Create tab, Geometry and select Compound Objects in the drop-down menu. It’ll apply Scatter modifier on your currently selected mesh.


Now after playing around with the settings (and keep in mind that the sphere is intact and it’s duplicated as an element of our scattered object, Plane in our case) i’m going to use IdleNormalThief for Max (Maya has this as a native function i believe) and the sphere we used as a distribution object to copy vertex normals from the sphere to our crumpled bunch of planes. normal_thief

I’ve separated the sphere element from under the scatter object and assigned separate materials for the sphere shell and all the planes (if you set random rotation when scattering the planes, you don’t have to worry about the repeating elements!)

Now we’ll need to bake the leaves for both our shell sphere and plane materials. I created a simple leaf element and turbosmoothed it before exporting for baking. Your shell UV doesn’t matter that much, since you won’t see seams with an unarmed eye.


Using the Scatter modifier i’ve prepared meshes for baking. I’m going to use a normal map for extra detail and zero-padding base texture bake for a quick object mask.scatter2

Giving our base element bevels will help the leaves pop out a little bit. You can do without the normal map though, if you look at the Dota 2 images again, but i used for the sake of this tutorial.


Now keep in mind that the size of your shell/plane and the scatter method will produce different results, so you might want to experiment with that.

Adding rotation random to your planes will help you remove the repeating elements, like on number 4 and 5shell_size

After contrusting a really basic trunk let’s jump into what and how we can tweak.

Also, keep in mind that the density of your bake will affect the look of your tree a lot, with denser bake resulting in “denser” look.trans_maps

Having planes drop shadows is really important, since it gives that sweet variation and some volume to your tree. shadow_importance  Let’s separate our shells and see how everything looks.

First is the outer shell, obviously a very crude look.

Second is just the planes, the look nicer and have a natural silhouette, but under the light you can spot that it’s a bunch of planes and they don’t look that natural.

Third is jsut the planes with shadows turned off. Now, the silhouette is nice and there’s a lot of variation, but it looks pretty flat. This might be the spherical form at fault here though, if you add more variation to the placement of the planes and do the vertex normal magic you can get that Witness look easily.planes_sphere

Now let’s break it down. Outer shell gives us the main body, allows planes to cast shadow on it and creates volume and variation.

Planes add variation and create a natural, wispy silhouette. Combined with the vertex normal manipulation and a “noisy” texture it removes that infamous planar look, while utilizing every strenght of that method.

On the Sketchfab embed:

Top: Final result

Bottom: Area, Even, Random Faces, All Vertices, All Edge Midpoints, All Vertices + Rotation Random.

Feel free to download the model, the textures are included.

  • trevj

    Thank you for the tutorial, this is really useful. What’s the reason for baking a 0-padding alpha? It looks like you have 2 different uv unwraps in order to have 0 padding in the alpha bake, just curious as to why?