The Grove 2.1
The Grove 2.1
For this release I follow the long chain of events that drives the buildup of thickness, to finally figure out the true cause of this so-called secondary growth. I distilled the complex process into an elegantly simple theory that works beautifully well – it will surely make you appreciate trees even more!
The implementation of this theory makes the all-important secondary growth closely tied to the local light environment. And the increased contrast in light-and-shade further improves this, and also just about every other aspect of the simulation, including phototropism, reaction wood, and the eventual demise of a branch. All of these aspects now work together in a newfound equilibrium where the trees grow surprisingly more balanced!
To top it off, a long list of fixes addresses every known issue! Most issues stemmed from the massive rewrite of the previous release, and then there were some long-lasting ones that were particularly hard to tackle. Release 2.1 of the Grove is as rock solid as it was before – enjoy!
Secondary growth
Gravity plays a big role in the shaping of trees. Although gravity is a constant, its increasing grip on growing masses makes it hard for a tree to ignore. The tree’s response and opposing force is that of secondary growth, and this makes it incredibly important to get the buildup of thickness just right.
In The Grove, up until now, the thickness of branches grew according to Leonardo da Vinci’s rule of trees. This 500-year-old observation looked pretty naturalistic and worked well for older branches, but it lacked the nuances found on relatively new and thin branches. I tried building on this age-old empirical rule, but that only made it more complex, and eventually I hit a dead end. It was time to find the actual cause of secondary growth, instead of using the observed outcome as a magic formula.
Sorry Leonardo, it was time to finally drop the oldest lines of code in The Grove and come up with a new rule of trees.
And so I did. Thickness now builds up in a more accurate way, by means of the branch’s photosynthetic production, and its actual use of this energy. With more leaves and plenty of light, the branch can produce more energy. And when the branch is longer and has more surface area, it spends more of this energy, which the leaves then continuously need to replenish, in turn boosting photosynthesis even more.
It’s clear that a successful branch has plenty of energy to grow, but this surplus of energy is not the actual driver for growing thicker. No, tree cells won’t simply grow wherever and whenever there is energy to spend, instead the tree seeks balance by using growth hormones that regulate where and when it grows.
So the real driver for growing thicker is the flow of hormones. How? Well, it turns out that photosynthesis is an incredibly inefficient process that uses a lot of water. An increase in photosynthesis also evaporates more water, which constantly needs to be replenished. And it is this flow of water that brings along hormones from the roots. Summarized in just one sentence:
“The most successful branches pull in most water, which brings along most hormones that promote most growth.”
The impact of the accurate buildup of thickness can best be seen in relatively thin branches, which are more susceptible to gravity and simply bend more because of it. The slightest change in the buildup of thickness completely changes the character of the tree over time. Use the Thicken > Gain slider to further boost this new rule of trees.
Bend up
Let’s move to another aspect that relies on accurate buildup of thickness: reaction wood. First a quick summary of how a branch bends.
- It starts with gravity that pulls the branch down.
- Then, as an opposing force, the branch grows in thickness.
- Lastly, a special type of wood, reaction wood, is so strong that it can even completely reverse the bend upright.
The strength of its upward bend is directly proportional to how fast the branch grows thicker, which is why the above improved buildup of thickness also has a big impact on this upward bend.
- For clarity, Bend > Reaction is now called Bend > Up.
- Bend > Up is further improved by factoring in the center of gravity.
- Now that thickening is so dependent on light, there is no more need for the separate Turn > Up in Shade, so that slider is gone.
Now we have Turn > Up for new growth, and Bend > Up for successful older growth. These two are probably the same effect, and I’m still looking for a way to combine them into one parameter.
Life and death
Every year a tree adds numerous new branches, but many of these don’t last very long. By constantly dropping redundant branches, a tree creates an optimal structure of branches that captures as much light as possible. Each new branch explores new space, to check out the local light environment.
Let’s take a branch that finds itself in shade, one that can’t produce enough energy to support itself. It could take away energy from the rest of the tree, and research does show that sugar flows freely and, in theory, each branch can take as much sugar as it needs. But it would be futile and even detrimental for the tree to invest energy in this branch. Research also shows that after springtime, each branch takes nearly no energy from the rest of the tree. In other words, most trees show a high degree of so-called branch autonomy. That’s strange – so how does the tree stop an unsuccessful branch from leeching on the rest of the tree? Well, my theory is that it’s the exact same hormonal mechanism as explained above in secondary growth.
Quick recap – more photosynthesis and more branch surface that uses this energy uses up more water that brings in growth hormone and causes the branch to expand and grow. Nice and simple, but this can’t go on forever.
It’s easy to see that a new twig growing in the shade loses less water through its leaves and gets less growth hormone, so it stops growing. But the same mechanism is at play on older branches that were once successful, when the tree keeps adding new branches on top that shade the leaves underneath. The lower branches keep growing outward to the light, all the while losing leaves closer to the shaded center of the crown. The elongated branch has just a tuft of foliage at the end, and the growth hormone gets diluted over a much larger cambium surface area and eventually the branch stops growing, dies and drops.
The same fate awaits the whole tree itself, because trees just keep on growing indefinitely – their biggest strength is also their eventual demise. So yes, this change does mean that trees eventually die, whereas before trees would grow indefinitely in The Grove. And in some cases they die earlier than the reported maximum height of that species. That needs further research and tweaking of presets, something to work on.
On the flip side, real trees are practically immortal if you keep them small.
“A branch will now die at any point where its photosynthesis-to-cambium ratio drops too low.”
You can see how this is intricately tied to both the improved rate of secondary growth and the improved contrast in light-and-shade. That made it extra hard to get to this release. The good news is that Drop > Shaded, Drop > Weak and Drop > Obsolete are now mostly united in just one slider! For most trees you can get by using only the Drop > Weak slider. I didn’t remove the Shaded and Obsolete sliders just yet and a few presets still use them. I’m working to eventually remove them completely and create an even more refined simulation that gets to the core of how trees grow.
Decay
With a focus on dying branches and eventually even the whole tree dying, it was important to refactor the way that The Grove handles dead branches. Behind the scenes this means that death is now a property of a node, instead of an entire branch, so that any part of a branch can now die. This is important to make the new way of dropping weak branches work, and it results in a more natural decay of old branches.
The old Drop > Stick Around slider’s effect has been flipped around and is now called Decay. With zero decay, dead branches stick around indefinitely. As the rate of decay rises, dead branches crumble off faster. And you can clearly see this happening, because dead branches are now shown in red while you grow.
Light and shade
The Grove uses ray tracing for light calculations. The so-called local light environment at every point in the tree is calculated by how much of the above foliage occludes the sky. To make these calculations fast, the tree’s foliage is abstracted to simple triangles. This works great, and in this release it works even better with the following improvements.
- First, we add an extra triangle at each branch end that will block more light from the sides entering the tree crown.
- Second, there is now an option to include the branch geometry in the light calculations. Now a full 3d model build of the branches would be too slow for this, so this is again a rough approximation that does the job just as well.
- Third, you can increase the diameter of the latest years of growth to include the shade from older needles along pine branches. And there are other trees where this would be a more accurate approximation of their foliage. To use this, first enable Shade > Branches, then use the Shade > Alongside and Shade > Diameter sliders.
- And lastly, the biggest improvement is a total shift of the shade geometry so that it better aligns with the branch end. In the old scenario, a branch measured more shade than there really was. The result was a lack in contrast along the shade-to-light spectrum. The newly gained contrast makes your trees much more defined, with much stronger character. With this improvement we can use higher values for Favor > Bright, which supports the theory of branch autonomy.
And because light plays a fundamental role, the fourth change has far-reaching implications on every other aspect of the simulation. Even thickness buildup now depends heavily on local light, underscoring its importance in shaping the entire tree.
And think about phototropism, this has been improved too. The effect of Turn > To Light was way too strong before, and now we know why. Each branch was looking out from within the shaded crown, with only a small tunnel of light to grow towards. Now, after the shift, the effect is much weaker on most branches, while it remains strong on the branches that actually need it – another case of improved contrast in the character of trees.
Scientific names
The same species of tree can have many different names across regions, cultures and languages. That’s why scientists came up with a uniform naming scheme, so that we can all talk about the same tree. The Grove has users all over the world, so it makes sense to adopt this naming scheme. A scientific name orders the tree in a family, a genus, and then its species.
Each preset name now starts with the scientific name of the plant family, to group together similar trees that are closely related in families like Betulaceae, Fagaceae, Pinaceae and Rosaceae.
A level lower than a family, each tree species is referred to with a two-part name, the genus followed by the species. This has the advantage that similar trees in the same genus are also grouped together with alphabetic sorting. A new option in the preferences enables the use of scientific names for twigs.
Twigs now take their scientific name from the .blend file, and the (currently) English name from the folder that they are in. You can freely change the name of the folder to change the twig names to your native language if you like. Just stick to the CamelCase standard. Not all twigs have been updated yet to this new naming scheme, but the option is there for the future.
The road ahead
Developing a natural growth algorithm turned out to be a quite a journey rather than a quick destination, much like how tree research keeps uncovering small aspects of tree growth that work together in magnificent ways. Each release of The Grove is a finished, polished piece of software that grows beautiful trees, but the simulation itself is constantly evolving with new insights, and through these release notes you’re along for the ride. Here are some of the next steps…
Heavy pruning can kill trees much faster now, and performing a complete trunk chop, as is common in a coppice or pollard, is made impossible by the new simplified drop. With no leaves, the photosynthesis drops to zero, which instantly kills the tree.
To fix this, we need to take into account the energy reserves in the roots and what’s left of the trunk, and maybe even the photosynthesis of the bark on some species. These should allow an otherwise healthy tree to recover.
For healthy growth above-ground, the roots need to be in good health, after all it is the hormones that create a balance. Damaged roots can set the tree back for years. Less roots produce less of this hormone, tipping the balance to promote root growth, while above-ground growth grinds to a halt. This also happens to perfectly healthy trees, where the balance tips several times each year, first growing above, then the roots, then back to the above-ground tree.
And the same is true the other way around, when if you prune a tree way more than you should, it tips the balance of hormones, creating strong regenerative shoots. This is an area to work on in the future.
Fixes
The previous release was an immense project with a complete rewrite of thousands of lines of code from Python to Rust, and the creation of new modules for ray tracing, quaternions and vector math. This inadvertently brings along some small bugs. And then there were some long standing bugs that needed fixing once and for all. This long list of fixes will make The Grove rock solid once more!
- Fix for flipping twigs in wind animation!
- Fix for creases on very thick trunks. Improved mesh building by detecting and smoothing out angles on nodes that would otherwise create a crease in the bark.
- Fix for branches escaping React > Block objects. A simple object like the default cube has faces that perfectly align with the axis planes. The bounding box of these faces was infinitely thin, making them invisible to ray tracing. Fixed by adding a slight thickness the bounding box.
- Fix for a rounding error in UV texture repetition. A rounding error made the repetition step down way too quickly, resulting in inconsistent scaling of the bark texture across the range from thin to thick. This looks much better now.
- Fix for the Prune tool, where a few stubborn branches refused to be pruned. It turns out that after the first prune, cut branches would lose a lot of weight at the ends, causing them to bend upwards. The problem was that a second cut after that would mistakenly use the original branch positions.
- Fix for the Draw tool not working on trees with simulation scales other than 1. The snapping points would be scaled twice, messing up the line you drew.
- Fix for twig duplication triangles, which are now equilateral triangles. The previous triangles had an incorrect midpoint that incorrectly aligned twigs with branch ends. The triangles are now also twice as small, to fit them into even thinner branches like those on birch trees.
- Fix for the Breeze modifier, which added a slight, unintentional rotation offset to twigs.
- Fix for Auto Prune not working when set to 0.0 meters.
- Fix for Record, which was broken when growing 1 flush at a time. Fixed by always calling the modal operator when recording.
- Fix for Thicken > Base > Scale not working well with Record.
- Fix for a division by zero error with zero twig mass or zero solidify.
- Fix for a division by zero error with trunks growing exactly straight up, which happened with a strong bend_up, Turn > Random of 0 degrees.
- Fix for Draw and Bend tools, snapping points were transformed incorrectly after using scroll to zoom.
- Fix for the start thickness of a new tree which would not respect the tip thickness parameter.
- Fix for handling the default preset. When there is no preset named Ash or Elm, the Blender add-on would instead read no preset at all, resulting in an awful looking tree. Fixed by simply reading the first preset in the presets menu.
Miscellaneous
- The draw tool now includes the shade geometry of the existing tree while growing new branches.
- Speed boost! Prior to ray tracing, long-edged triangles are recursively subdivided to reduce their size. This leads to fewer hits during ray tracing, which makes growing with Surround and React much, much faster.
- Extend the cap point for tips of thin branches, for a more natural look and better smooth shading. The previous tips had a harsh perpendicular cut-off, which would usually be hidden with twigs, but you can also grow winter trees without twigs, and use twig sets without a dead twig.
- The Grove Core for macOS is now signed by Apple.
- Reshuffled the presets panel – removing the delete button gives extra horizontal room for the preset name.
- Moved the Thicken > Base parameters from the Thicken panel to the Build panel. They are not part of the simulation, but are an extra thickening that is applied at build time.
- Change the default twig menu selection from Scene Objects to None, to give the user an uncluttered interface to start from. After picking a twig, the twig object fields can now be edited, where before they would be greyed out.
Keywords: secondary growth, local light environment, reaction wood, branch autonomy, cladoptosis