Video Example Of Trees With Wind
These images and videos are from an unreleased project that I had the pleasure of being a Senior Technical Artist for. They represent experiments to better represent complex canopy surfaces in our 2.5D stylized world. It was important to art direction that content, while stylized and clean, was not "low fidelity". Foliage was no exception, but definitely an interesting problem to tackle.
The solution for canopies came from a handful of different tricks all working in concert. Earlier experiments involved populating cards on top of blob meshes with customized normals so that both the cards and blobs they would blend together nicely. Further the cards could be masked with a fresnel towards the core, allowing us to retain complexity along the silhouette where it really mattered and simplify the body for a clear read. Unfortunately finding the balance on masking proved difficult and when you'd see cards perpendicular to the camera it would break the 2D illusion.
Instead we went with a camera facing quad solution where each blob mesh was made of quads mapped in 0-1 UV space. This allowed us to warp them using World Position Offset to always face the camera and be scalable/rotatable around a unique center point. Combined with a painted leaf mask and our stylization this resulted in a really nice result. Working in Blender also really helped this process along as geometry nodes and modifiers made it easy to automate setup of UVs and vertex colors per tree allowing quick iteration between DCC and engine.
Unfortunately this technique is not often used in production due to the overwhelming overdraw cost of so many masked cards overlapping each other. When reviewed in PIX a handful of tree assets layered on top of each other was by far and away the biggest eater of milliseconds. We were very confident in the look at this point and felt strongly that other techniques would not yield desired results so the next step was creative problem solving for performance. Once again being in 2.5D really saved us. Very specifically out bottleneck was masked materials rather than vertex counts. As an art style we already relied heavily on extra edge loops and cuts in geometry to drive material transitions on surfaces without using mask textures so we weren't worried about throwing more triangles at the problem so far. What if we only relied on a single layer of high fidelity trees directly inside of the gameplay space and then filled in the rest of the midground/background with high fidelity mesh cutouts that had no masking? In Blender I modeled some basic cut out shapes similar to the 3D canopies. Then to add fidelity I cut out tiny leafs cards from our mask texture using a geometry script and scattered them along the edge of the larger body.
This got us closer, but there were two more problems to solve. This was a static shape and running a unified WPO noise through it would look very different than the localize rotations being achieved with the quad technique. Also it was still a flat surface so there was no lighting profile that suggested a rounded body like a true canopy. With movement it turned out we were already half way there. Since we had cut out each tiny leaf shape if we planar mapped them all into 0-1 UV space relative to their position from the center of the card we could extrapolate a center point for each leaf mesh to have them rotate around their own axis. Coupled with some noise offsetting and a larger macro rotation to imply canopy sway from a trunk this proved to be close enough in effect as to blend in with the originals. For lighting information I calculated a sphereical normal map by remapping the UVs to (-1,1) range and then blended in a stylized normal map that was projected along the cameras forward axis and stabilized to each actors position and scale so the noise normals could be randomized and scaled relative to each actor.
This version, while not 1 to 1 with the original technique in terms of quality, proved to be substantially cheaper and worked well when blended into the overall scene. We ended up swapping all trees outside of immediately gameplay spaces to these simplified cards combined with separated/LOD'd trunks.
Of note our Creative Director Duncan Drummond was responsible for the initial trunk design and modeling. When I came in to solve for canopies I added some level of detail to the original trunk and then extrapolated it out to a couple of variant designs.
Creative Direction - Duncan Drummond
Art Direction - Jeramy Cooke
Initial Trunk Modeling - Duncan Drummond