3D Asset Workflow: Vegetation

From Frozenbyte Wiki
Revision as of 15:39, 28 July 2023 by Mio Mäkijärvi (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
3D Asset Workflow


  • Creating 3D vegetation has lots of different tricks to it - there is no single solution to what works for everything
    • Some techniques used for one type of vegetation might work for other type of vegetation too, but not for others
  • From this page, you can find:
  1. More general sense of how to create vegetation
  2. How to take sway into account
  3. Separate sections for some different types of vegetation

General Methods for Creating Vegetation

  • Start by gathering lots of reference
    • Best way is to look for what real nature has to offer, and starting to twist the ideas from there
    • This is best way to make vegetation look natural!
    • Photo bashing, drawing concepts, and quick sketch sculpts all work nicely
    • Once you have done a few vegetation assets, it's also easy to quickly experiment with existing different sculpted pieces, and try if you can make something new with them
  • If some vegetation asset seems tricky to create, check other games, and try to look how they might have solved similar issues

  • Usually the biggest thing when making vegetation are the leaves
    • Stalks / stems can often be vertically tileable material
  • Plan what your texture map might look like early on
    • By having even a rough plan at this stage, you avoid creating unnecessary parts, and can make notes for yourself for e.g. different color variations
    • If possible, use one material for all of your vegetation (meaning, leafs and stalks/stems of the same model in the same texture)
      • More materials mean more drawcalls in the Editor, making the asset a bit heavier to use
  • One good way to start making highpoly leaves is to use reference image of a real life leaf
    • You can also do the same progress using your own photo-bashed / concept drawing as basis
  1. Create the silhouette of the leaf with Modo's Pen Tool
  2. Make that in to flat polygonal plane, and export it to ZBrush
  3. In ZBrush, run ZRemesher function for the leaf shape
  4. Add thickness with Panel Loops found under Geometry → EdgeLoop
  5. Tweak the Panel Loops settings to get the kind of result you want
  6. Usually Polish at 0, low bevel amount and elevation set to -100 give good results
  7. Thickness amount value depends on the size of the mesh
  8. Start twisting and bending the leaf shapes from real nature's leaf
  9. Before you start subdividing, you can do simple project unwrapping for the ZRemeshed leaf in Modo
    • This way you can have e.g. some simple color gradient in your highpoly

Coloring Highpoly Vegetation

  • This section covers instructions for how to color your highpoly vegetation with either textures or vertex colors
  • Having base colors on your highpoly mesh before you go to baking can speed up your texturing later, and in some cases, it might be really hard to precisely texture some really small parts without the base colors
  • Texture or vertex color for is not necessary all vegetation
    • E.g. a simple, big leaf does not benefit much from this, since you will be texturing it in Substance Painter anyways
    • Usually highpoly vegetation pieces that are in groups are helped by having color/texture already on them

Projection Type Unwrap

  • Simplest way to add some color to your highpoly mesh is by just doing a projection type unwrap, and by using few gradients
    • More detail can be added in Substance Painter later
  1. Model the highpoly leaves in Modo by having them be really lowpoly
  2. Preview with subdivision key how they will loo, when subdivided (default is tab key)
  3. Create support edges where they're needed, just like in hard edge modeling
  4. Example pictures below show how this was done for these grass and hay highpoly models:
  • You can model the leaf even more in Modo, and have better unwrapping and more detailed texture for it
    • However, be careful to not create something too detailed or it will look noisy in game
  • Example images below show steps Tom Deerberg used in making one of his vegetation assets:
  • When you import the unwrapped highpoly meshes to Zbrush, be careful to not break your unwrapping on them
    • This can happen easily when you e.g. merge meshes


  • Remember that Zbrush requires that textures are inverted vertically

Zbrush texture flip.jpg

Using Vertex Colors

  • If you do not want to deal with having textures for highpoly meshes, you can also transform the textures into vertex color for the sculpt
    • If you do this, your highpoly needs to have lots of subdividions, because the vertex paint detail precision is dependent on vertex amount on the mesh
    • Later you need to bake highpoly vertex color map in XNormal, or use the map that Substance Painter bakes for ID slot
      • If you do this method, you will lose ID selection, unless you have another version of the highpoly with simple ID colors that you bake too
    • Using complex vertex coloring for the highpoly can make the mesh really heavy to handle, so this method is not always recommended
  • Images below show how to transfer texture into vertex color in ZBrush:

TextureMapToVC 01.jpgTextureMapToVC 02.jpg

Baking and Texturing Lowpoly Vegetation

  • Once you are done with your highpoly models:
  1. Simplest way to create lowpoly versions is usually by making reference meshes of your highpoly meshes
  2. Decimate your highpoly a lot, name it (e.g. flower_hp_reference)
  3. Import that highpoly to Modo, and create the low poly planes with the Pen Tool
    • At this stage it does not matter if your lowpoly plane is completely flat
      • In fact, it's more helpful to bend and modify the lowpoly planes later, because creating cages for flat lowpoly models is really easy
  4. Move your lowpoly planes behind the highpoly meshes for baking
  5. When unwrapping the planes, you can have some overlap in the UV islands to get the maximum space out of the texture
    • Be careful though and don't over do this
      • Otherwise you might have problems later when you are editing the lowpoly version, and need to maybe need to move some edge or reduce triangle count - only to notice that other plant parts are now showing in the plane
  6. Also if you try to squeeze more resolution with some overlapping UV islands, remember to tweak them properly for sway (check "Sway for vegetation" section)
  7. Image below shows the setup of lowpoly, highpoly, and cage models in Modo for baking grass.

Vegetation baking 01.jpg Vegetation cage meshes.jpg

Baking Opacity Maps and Vertex Maps in xNormal

  • Once you have highpoly texture and the opacity map baked, import them to your Substance Painter project
  • In Substance Painter, bake the rest of the maps for the lowpoly planes, like you normally would
    • Usually high antialiasing is good to have when baking vegetation, because of the small details in them
  • After that, create two Fill Layers for XNormals opacity map and the baked highpoly texture map
    • On top of these you can start to do texturing
  • Export the textures from Substance Painter using the "T4_asset_export_alphatest" export settings

Baking your opacity map without using xNormal

There is another way of baking your alpha without using xNormal. Substance painter and Photoshop are required. Although Substance painter won't bake a perfect ready to use for the opacity. You will have to bake a texture without any padding then tweak it in Photoshop. The process is quite simple and short.

  • Import first your low poly and bake the way you usally do.

Alpha substancepainter 01.JPG

  • Now we are going to bake a texture (Normal) without any dilation Width. Untick "Apply diffusion" so we won't have any padding. This texture will be use as a base for the Opacity map.

Alpha substancepainter 04.JPG

  • Go to your Shelf > Textures. You will find your Normal map texture without any padding. Right click on it then "Export resource". Find the texture in your folder then open it in Photoshop. The transparency layer is required so the texture should be a PNG.

Alpha substancepainter 05.JPG

  • In photoshop, we are going to create the Opacity map ready for Substance painter. Black area is the transparency so you have to create a black background. Create a new layer placed at the bottom of you list and fill it with black color. Then double click on your layer 1 and create a color overlay with white color. Your opacity texture is ready !

Alpha substancepainter 11.JPG

  • Import your freshly made texture in Substance painter. In Texture Set Settings add a new "Opacity" channel. Create a new layer and disable everything except OP (opacity) and drag and drop your texture in the opacity material from your shelf.

Alpha substancepainter 09.JPG

  • And the last step is to display your opacity map on your model in Substance painter ! By default Substance painter display on "PBR". There is not alpha treatment. To render the display you have to go to your shader settings and change it for PBR with alpha test. Done !

Alpha substancepainter 10.JPG

Sway for Vegetation

Vertex Normals for Vegetation

  • New vertex normals are usually needed for large leaf plane groups
  • Vertex normals can be captured from another mesh, so that they look like one mass, and not separate planes
    • Usually a sphere is used for capturing the vertex normals
  • Example gif image below shows what the vertex normal transfer does to tree leafs
Eric Chadwick tree.gif
  • You can capture vertex normals in Modo with Vertex Normal Tools window
  1. Switch to Tools tab, and use Transfer Normals
  2. Make sure that only the leaf mass and the half sphere are visible
    • If you separate some of your meshes into different layers for transferring normals, remember to copy and paste them back together
      • Don't use Modo's Merge Layers command, as that often seems to break the normals!
  3. Transfer the normals from the visible, inactive mesh(es) to the active mesh

Vegetation Specific Tips


Ways to Unwrap Trees

  • There are few ways to unwrap your tree
  1. One way is to do custom UVs for the trunk and branches
    • This is done when more unique material and shapes are needed
  2. Second way is to use tiling texture for trunk
    • This is useful when lots of variations are needed for the trunks
  • Pictures below showing the two ways

Tree unwrapping way01.jpgTree unwrapping way02.jpg

Deciduous Trees

  • For deciduous trees, e.g. trees with leaves, it is not good idea to create every single leaf as a separate plane
    • If each leaf is a separate plane, the lowpoly of it will be too heavy to use in the end, or not many of them can be used in a same level
  • Instead, make branches that have multiple leaves on them
    • When you create different branches, try to make few with different overall silhouette
      • E.g. one filler branch, with much more leaves in it, and more simple silhouette
      • Then other branches with less leaf mass for the outer edges of the overall leaf mass of the tree
      • Usually 3-5 different kind of branch variations get the job done, you don't need tons of different variations
  • Try to keep the leaf branches relatively flat in the sculpting phase
    • It is good to have height difference in the branches of the plane, but too much difference will make a bad looking normal map, that can cause weird shadowing
  • Example image of leaf branches below.

Coniferous Trees

  • Coniferous tree branches can be made easily with Modo's Mesh Paint Instance Tool
  1. First, create 1-3 different needles, that have different sizes, shapes, and bends
  2. Unwrap those needles, and create texture for the highpoly
    • Creating texture for the highpoly needles is very important, because without it texturing them would be very hard later in Substance Painter
  3. Test with Modo's subdivision preview how they look when subdivided
    • Default is tab key for subdiv preview
  4. Center those needles, and make each of them as a separate object
  5. Name the needles logically so you know which is which kind, when you start to duplicate/clone them
  6. Model a few very simple thin branch shapes, where you will next use Mesh Paint Instance Tool and paint them full with needles
  • Below images show steps
  • Below are some example trees


  • Usually trees also require billboard versions of them done, for background use
  • Check this wiki page for instructions on how to create those: 3D Asset Workflow: Billboards

Very Large Vegetation

  • With very large foliage, think first if leaves should be just modeled meshes, instead of thin planes
    • This depends very much on each case
    • A good rule is, that when leaves start to be bigger than a character, they might work better as thicker mesh than planes
    • Advantage of planes is that their silhouette does not show any lowpolyness
      • When sculpting leaves for large plant, you can already quickly make a decimated version of that leaf, and check in Modo, what kind of a triangle count that kind of a leaf might have
      • Reduce the triangle count further with Modo’s reduction tool (found under the Polygon Tab) to see a bit more accurately what the triangle count might be at the end
      • If the triangle counts seem crazy, then cheaper option might be to use a plane with transparency
        • Huge transparent planes, that use alpha maps, can be heavy on the performance, if they are starting to cover large parts of the screen - so in those cases too, think if just a mesh would be better
  • For large trees, it might be better that the trunk is modular, and branches with leaves are added as separate assets entirely
    • This way, the level artists can assemble different variations
    • Trees like this are very large and more of a special case

Grass and Hay

  • Easiest way to make grass is to model the highpoly grass blades with texturing in Modo
    • Some small tweaks can be also done in ZBrush after
  1. Start by modeling single grass blade and unwrap it'
  2. Keep the grass blade very lowpoly and check with Modo’s subdivision toggle how the highpoly will look like when the mesh is later subdivided
    • Default hotkey for it in Modo is Tab
  3. Now, depending on how far you want to go with your highpoly's textures, you can either do simple project unwrapping for simple texture map (like gradient), or do proper unwrap for more detailed texture
  4. Might be good idea to also make couple of duplicates of the blade and map them, to use slightly different a color variation
  • For grass, it’s good to make the normals blend more with the ground
    • Easy way to do this is to select all the bottom vertices of grass planes, and then run Transfer Normals when a separate planar object is under the grass and is set to be visible

Vegetation Coverage Assets

  • These are assets that are meant to cover up a large are with e.g. leaves
    • They help dressing a level quickly with vegetation, and give an illusion of lush nature easily
    • More specific vegetation might be added on top of these later
  • It's good to have a value difference in the leaf planes, so that darker are at the bottom, and on top of those layer more bright leaf planes
    • Also the leaf planes at the bottom should be more full of leafs to cover and hide more, while the next layer on top of those can have less leaves to create interesting silhouettes to the outer edges of the leaf mass, and to also show the darker color underneath, and give depth from the layers under them
  • Remember to also capture normals for vegetation coverage assets - this is crucial especially for them, so they look like on mass when light hits them in game

Small Undergrowth and Flowers

  • General workflows for vegetation work for small undergrowth, except oftentimes the UV map does not need space for as many variations on the type of leaves one plant might have
  • Triangle count is also very important, and it's best to keep it low as possible
  • Some undergrowth also benefits from capturing normals from a sphere or other smooth shape
  • When making undergrowth, have one single plant asset and groups made of that same asset
    • This helps level artist to fill levels faster


  • Tips on how to create variation to ground decals
Decal composition.jpg

Are the Leaves Too Noisy?

  • Sometimes your leaves might look too noisy in the Editor
    • One reason could be that the normals have too much going on in the individual leaf shapes
    • Too much depth difference in the leaves especially can do this
    • You can try to tone down the effect by quickly smoothing your highpoly leaves, and baking another normal map from them
      • Then, in Substance Painter, you can mix it with the original normal map and adjust how much the leafs get smoothed
    • This same thing can also happen if the high poly leaf plane has too much height differences in it's placement of small branches
Smoothed leaves example:
SmoothedLeafs 01.jpg


Video 01 : pixelfondue. [accessed June 7, 2018] MODO - Create Grass and Hair Alpha Maps. Available at: https://youtu.be/E_QYtANycq4
Video 02 : pixelfondue. [accessed June 7, 2018] MODO - Using Fur to Create Polygon Strips Available at: https://youtu.be/gfmJyg_qIg4