Creating a Forest Biome with Photogrammetry

Creating a Forest Biome with Photogrammetry

Théophile Lebeau shared his breakdown of creating a Forest biome with seamless photogrammetric textures and scans.

Théophile Lebeau shared his breakdown of creating a Forest biome with seamless photogrammetric textures and scans using SpeedTree and Houdini.

Introduction

Hi everyone! my name is Théophile Lebeau. I work at Kylotonn Games (Paris) where I am currently a Junior vegetation artist for the production of V-rally 4. 

Photoscan

In the future, I would like to create a large database of textures for my personal work. In order to ease the creation, I decided to automate the production. For this, I created my own graph in Substance Designer.

For texture scan (2D), I used the scan processing in Substance Designer along with a 12×12 inch LED panel and a LED ribbon. Those allowed me to create normal maps, subsurface color textures, diffusion, and my alpha channel for foliage. The images are shot with a 5D Mark II and a 50mm f / 1.4.

I use a tripod, with my 5D connected to my computer, to import the image with EOS utility and Lightroom. I can see then the result immediately and apply the corrections in real time: Color Balance, Curve, Sharpen etc.

Seamless photogrammetry textures

Generally, for the ground textures, I shoot large areas. This allows me to bake two 4K textures from a single model generated by Agisoft. For trees, trunks, and branches, I shoot to create one texture (4K or 8K):

I bake my ground mesh directly on a plane. For trees, I use ZRemesher tool from Zbrush and I unwrap in Maya or 3ds Max.   

When the baking is done, I create roughness and glossiness textures from diffuse in Photoshop.

I created 9 planes placed next to each other. All planes have overlapped UVs.

We can now import the planes and textures into Substance Painter, where I use the stamp tool to hide the seams between the planes.

An example of the final textures:

Leaves and needles meshes

I used Maya to build the meshes and their LODs (for leaf, needle, and grass), that I imported next into SpeedTree.

For a good optimization and in order to avoid alpha overdraw, I cut my meshes with least alpha test space possible. It is necessary to strike a balance between polycount and alpha test space. An example of the mesh and LODs: LOD0 14tris, LOD1 8tris, LOD2 5tris.

Trees production

Passionate about the architectural models of the trees, I spend a lot of time observing them and I usually refer to botanists works such as Francis Hallé (his books) or Patrick Blanc and his wonderful vegetal walls.

Here are some references for the creation of the forest scene:

I observe the branches separation into the trunks, (vertically, horizontally),  rhythmic or random organization etc. Then I look at the global shape.
In the end, I try to reproduce the same characteristic in SpeedtTree. Obviously, I adapt the trees to my scene. I wanted a small scene, so it was necessary to block the view.  

I generated a trunk, branches and finally, I added the leaf/needle mesh. SpeedTree also creates a smooth LODs with the meshes it generates.  

Houdini and procedural heightmaps

We understand the potential of Houdini for the video game industry. I started using this software over the past few months. During my first try for the Forest scene, I generated my ground height map with the Houdini’s field map nodes. The nodes of highfield allows to create different noise or 2D mask for reinterpretation in height field.

An example of a step-by-step progression to create a ground mesh in Houdini:

The red line is painted as mask coupled to the node “height field terrace” which can flatten a path in a matter of second. After it, we can export the high and low poly meshes for the usual procedure (bake, import the low poly model in your engine etc.) or export a heightmap of your terrain directly from Houdini. As my scene did not need a complicated terrain, a simple heightmap was enough.

Another example of ground creation with Houdini:

I learned a lot about Houdini with Alexander Dracott‘s Conference, A Big thank for his work!

Material in Unreal Engine

Here is the material I made for flowers and other foliages. With this graph, I can simulate the wind effect with the simple grass wind node, but also adjust the strength of the normal map.

For the ground textures, I used several materials function blended into a single material. Then in my instance material, I could modify the tiling, roughness level and the glossiness for each material without recomputing them.

I used 2K ground textures, without tessellation for optimization reasons. Here is a screenshot of the 4K ground textures with tessellation:

Conclusion

My asset imported, materials set, a hint of lighting, here is a screenshot of the scene!  

I would like to thank Maximilien Torti and Kevin Darnis who taught me a lot about SpeedTree, as well as my Lead Environment Stéphane Cambier who was also mentoring me a lot and who trusted me with my work during the productions.

Théophile Lebeau, Junior Vegetation Artist at Kylotonn Games

Join discussion

Comments 6

  • Rafal

    Did you made trees textures also seamless? If yes, how? :)

    0

    Rafal

    ·8 months ago·
  • Lewis Cowles

    Looks amazing

    0

    Lewis Cowles

    ·a year ago·
  • 510340686@qq.com

    Hello boss, I am also studying this process. I would like to consult you, but I don't know how to connect it in Designer. If it is convenient for you, could you please send it to me for me to learn .

    0

    510340686@qq.com

    ·a year ago·
  • Peter Leban

    Oh my, this looks fantastic! Super insightful breakdown, too. Thank you!

    0

    Peter Leban

    ·a year ago·
  • luke van aarle

    You should checkout dabarti capture for Al the leaf scanning btw very nice work

    0

    luke van aarle

    ·a year ago·
  • Maxime Dumon

    Good article buddy

    0

    Maxime Dumon

    ·a year ago·

You might also like

We need your consent

We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more