Snow-Covered Tree in Blender
written by Thomas Cairns.
Written for Blender 2.74
Download the basic version of the completed tree here.
Download the scene above here. (High poly count)
Textures used in this
tutorial can be found from cgtextures.com
and are not included with the .blend files
this tutorial we'll go over the process of taking a complex model
outputted from a tree generator such as Blender's Sapling addon and
creating a snow model to coat it, without modeling the snow manually.
We'll also get to use a few of the less commonly used nodes
modifiers in Blender that you may find useful in other applications
besides adding snow. Specifically, we'll get to see one way
result will be most useful at a medium-long range distance as shown in
the render above, since at very close distances it would require a
massive polycount to get the required detail for so many branches and
leaves. Since we are going to be using a fairly detailed
the final polygon count will be approximately 100,000-150,000 triangles
at the lowest subdivision levels.
- Geometry node
- Separate XYZ node
- Mask modifier
- VertexWeightMix modifier
If you would
like to skip the process of generating the tree prior to snow
being added, you can download a copy here.
the Sapling addon under user preferences.
Blender Render to Cycles Render
|Generating the Tree
a Sapling Addon tree to the scene.
Bevel and curve resolution are set low in the sapling generation
since subsurf will be later used to smooth out the model.
Using subsurf allows us to have the option of later reducing
polycount by disabling subsurf when not necessary, useful for trees
further in the background.
- The above
resulted in a reasonable looking snow-covered tree
Generating the Snow Mesh
the tree and set up the material nodes as shown.
- The geometry and separate XYZ nodes will
result in the faces with
normals pointing upwards being differentiated from the rest.
We will later use this to generate the snow since snow will
be resting on only the top-facing parts of the tree.
- The color ramp will allow us to adjust
- The diffuse and emission shader will
us to see the effect in
preview renders so that we can see what we are doing.
the viewport shading to "Rendered".
the color ramp so that the model
to the above.
- We will use the material to separate a
part of the tree for snow to be
its own mesh, so anywhere that should have snow should be solid white.
Avoid grays much as possible at this stage.
- The trunk of the tree will remain black
since its normals do not face
- Select the
tree, turn off any subsurf modifiers, and
convert it to a mesh.
may want to duplicate the mesh and
move it to another layer as a backup.
- Select the leaves and hide them (hotkey H)
the UV window, add a new image and
give it a name.
the tree trunk and separate it from the rest of the tree (hotkey P
- This will save UV space and allow more
displacement for the snow.
- Go into
edit mode and unwrap the tree with
Smart UV project as shown
- Go into
the node editor for the tree material
- Add a new image texture and assign the
image that we made earlier.
the image texture node and then go to
bake type to Emit.
- This will take the black and white
material and bake it into an
that we can then use to make the snow mesh.
- The emission material will appear as
white, while the diffuse
will appear as black.
- The result of the bake should look
similar to the above right.
the tree and hide it (hotkey H).
- It will later be used as the
wood of the tree.
- The original will be turned into snow.
- Add a
new vertex group to the original
- Add one
level of subsurf and then add a VertexWeightMix modifier.
VertexWeightMix modifier is going to take our black and white texture
that we baked earlier, and assign all of the vertices that lie on the
white (high intensity) colored areas
to our new vertex group.
- Set up the settings as shown above.
- The Texture Mask should be set up as shown
right. Choose the image that we baked earlier for the texture.
add a Mask modifier and select the vertex group that we made earlier.
mask modifier is going to take the altered vertex group from the
VertexWeightMix modifier and get rid of anything that isn't in that
vertex group (anything that was black on our baked texture).
- The completed modifier setup is shown
result of this step is shown on the right. Only the areas
appeared white in the material setup should be showing.
Note: The order of modifiers is important!
the modifiers starting from the top
down to the bottom, in order.
into the material nodes for the snow mesh and adjust the color ramp
this time so that instead of mostly white or black, there is a
gradient of values.
- Later, white
will be taller piles of snow, and lower value colors will be shorter.
Ideally the small ends of branches should be dark gray while
thicker parts remain white.
- My color ramp adjustment is shown on the
left, and the
result on the
we will bake this material to an
image using the same process as before.
- We can
bake it to the same image that we
used to separate the snow from
the tree mesh since we no longer need it, since we've already separated
our snow from the rest of the mesh.
time, however, we save the newly baked image.
- Adding a subsurf modifier here is
but will give slighly better looking displacement.
- Add a displacement modifier to the snow
mesh as shown above.
- Make sure coordinates are set to UV and
that the texture is set to the
one we just saved, as shown in the left and middle images.
- Once you unhide the tree mesh that
will be used as wood, it should
look similar to the image on the right.
- For a basic snow shader I used a 50:50
glossy and blue transparent shader as shown above.
- For a
very basic wood shader I used only a
diffuse shader with a tileable texture of bark with spots of snow on it.
- Since we unwrapped the whole tree
the trunk) earlier, the wood
mesh should already have UVs ready for textures.
the tree trunk, join it with the
wood tree mesh, and add your
tileable snowy wood texture.
a single seam along one long, vertical edge and unwrapping will work
fine for the trunk. SmartUV will also work.
unwrapping will work if you change your viewport to front-view.
- For a
basic leaf shader I combined a
transparent and diffuse shader with a black and white alpha map of
most downloaded leaf textures will be very green, they can be
the Hue Saturation Value node to better fit with the winter-time
|Final (optional) Adjustments
this point the snow resting on the branches will look fairly light and
flat, so if we want thicker or puffier snow we can do the following:
- Add another
displacement modifier to the snow mesh with midlevel set to 0 and with
the same texture as the previous displacement modifier.
thickness with the strength value.
cannot use the original displacement modifier because that first
displacing geometry based on normals that are mostly facing straight
upwards in the positive Z direction, so adjusting strength will only
make the snow go taller.
we use a new
displacement modifier placed immediately after the
original modifier, it displaces geometry based on the normals of the
displaced geometry from the previous modifier, allowing the mesh to
become thicker in all directions, rather than mostly in
the Z direction.
- If some branches have no snow and you would like there to be
some, we can add another displacement modifier with midlevel set to
zero and no texture applied, and set it to a low strength value
there is no texture, all areas of the snow mesh will be displaced by
the same amount, including those places where no snow was showing.
there is not enough density of branches and snow in the tree, we can
duplicate the branches and snow and rotate them around the Z axis.
- This will dramatically
increase the poly count.
- If you want the
tree to be bent as if there were strong winds, a lattice modifier can
be applied to everything on the tree at once and then adjusted.