<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/growing-trees-lnyu6xohy" -->

---
title: Growing Trees | daily.dev
description: Procedural trees can be grown by simulating buds competing for light across seasons. A voxel grid tracks shadow cast by each bud, light is summed from tips to...
canonical: https://daily.dev/posts/growing-trees-lnyu6xohy
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Growing Trees | daily.dev
og:description: Procedural trees can be grown by simulating buds competing for light across seasons. A voxel grid tracks shadow cast by each bud, light is summed from tips to...
og:url: https://daily.dev/posts/growing-trees-lnyu6xohy
og:image: https://api.daily.dev/og/posts/LnyU6XoHY.png
og:image:alt: Growing Trees
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Growing Trees

**[Hacker News](https://daily.dev/sources/hn)** · 4 min read · 1 upvotes · 0 comments

## Summary

Procedural trees can be grown by simulating buds competing for light across seasons. A voxel grid tracks shadow cast by each bud, light is summed from tips to root, and a growth resource is distributed back using the extended Borchert-Honda model, where the main continuation gets a biased share and the lateral branch gets the rest. Dormant buds need at least one resource unit to sprout. Branches are shed when their subtree's light per metamer count drops below a threshold, and thickness is set afterward with a pipe model. Foliage is rendered using twig spray cards blended toward an ellipsoid, with baked impostors at distance.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://brashandplucky.com/2026/10/15/growing-trees.html>

## Questions this post answers

### How does the self-organizing tree model from Palubicki et al. simulate light competition for procedural tree growth?

Each bud casts shadow into a voxel grid as a widening pyramid that decays with depth, so shadows from all buds accumulate and the tree interior darkens naturally. Light values are summed from branch tips down to the root each season, then a proportional growth resource is distributed back up, letting well-lit buds produce new shoots while poorly lit ones stay dormant or get shed.

_Developers building procedural nature systems can find implementation breakdowns like this one through daily.dev._

### How does the extended Borchert-Honda model decide how growth resources split between a tree's main stem and lateral branches?

The main continuation receives a biased larger share of the summed light-based growth resource, while the lateral branch receives the remainder. This small bias toward the main axis has a surprisingly large effect on overall crown shape over multiple growth iterations, since a bud needs at least one resource unit to avoid staying dormant.

_Anyone tuning growth or allocation algorithms can track detailed modeling writeups like this via daily.dev._

### What is a pipe model used for in procedural tree generation?

A pipe model calculates branch thickness after the tree's skeleton has already grown, starting from a fixed radius at the branch tips and accumulating girth toward the root. Width and passive sag are derived purely from the finished skeleton and do not feed back into the growth simulation itself, keeping thickness and growth as separate passes.

_Graphics developers refining tree or plant renderers can surface techniques like this through daily.dev._

## Community take

How the wider developer community reacted, aggregated from 2 discussions and 24 comments across hackernews (as of 2026-10-26).

**TL;DR:** Commenters are impressed by the realism and elegance of the light-competition growth model, with several pointing out follow-up questions like forest-scale interactions and degenerate growth conditions, though a brief meta-argument about reductionism and account quality broke out.

**Sentiment:** 75% positive · 20% mixed · 5% skeptical

**The case for**

- Many found the generated trees visually impressive and the approach to deriving crown shape from a feedback loop clever and unexpected.
- Several appreciated that the light-based model could plausibly generalize to different lighting situations or species.
- Some found the writeup itself well-written and enjoyable to read.

**The pushback**

- Some questioned whether the voxel grid approach would scale to simulating whole forests or crown shyness between neighboring trees.
- One commenter raised concern about a wave of new, antagonistic accounts derailing threads rather than discussing the content.

**By community**

- hackernews (positive): Overwhelmingly positive reception praising the visual results and the light-competition growth model, with curious extensions suggested like forests, degenerate trees, and insect damage.

**Open questions**

- Could the model realistically simulate crown shyness or interactions between multiple trees in a forest?
- Could the approach be extended to show degenerate or stressed tree growth (e.g., next to buildings, culled branches)?
- Could foresters make practical use of this kind of simulation?

**Highlights**

> now i am wondering if that would correctly imitate crown shyness etc. When several trees grow close to each other
> — [busssard on hackernews · 1 comments](https://news.ycombinator.com/item?id=50241789)

> This is amazing. Now I'm imagining the ability to simulate less-than-ideal conditions for tree growth. Placing the tree next to a building or on a hill or culling branches at certain stages in its life to see what happens next, etc. I think my overall thought is: we see plenty of nice looking trees in games and graphics. What about authentically degenerate trees?
> — [Waterluvian on hackernews · 1 comments](https://news.ycombinator.com/item?id=50242894)

> All their growth models do involve light, however. So it probably does make sense to have a common light representation - ideally some sort of sparse cone storage though, not a voxel grid the size of a forest.
> — [swiftcoder on hackernews](https://news.ycombinator.com/item?id=50244665)

> There has been a complete deluge of new accounts sometimes only hours or days old being extremely condescending, overly negative, sometimes antagonistic, and sometimes they seem like a kind of LLM prompted to cause arguments.
> — [lloydatkinson on hackernews](https://news.ycombinator.com/item?id=50244997)

> Pretty cool idea: "buds compete for light, the tree distributes a growth resource among them, and the successful ones produce new shoots. Those shoots change the light available for the next round. The crown shape emerges from this feedback loop." I would never have thought to generate tree shapes by simulating real life
> — [abrookewood on hackernews](https://news.ycombinator.com/item?id=50241011)

**Source threads**

- [hackernews](https://news.ycombinator.com/item?id=50209278) · 162 points · 24 comments
- [hackernews](https://news.ycombinator.com/item?id=50179579) · 4 points · 0 comments

## Similar posts on daily.dev

- [scallyw4g/bonsai: The procedural generation voxel engine](https://daily.dev/posts/scallyw4g-bonsai-the-procedural-generation-voxel-engine-piyeni57n) · Hacker News · 4 upvotes · 1 comments
- [Creating Grasslands and Trees for a Nature Environment](https://daily.dev/posts/creating-grasslands-and-trees-for-a-nature-environment-6ghyuemd7) · 80 LEVEL · 0 upvotes · 0 comments

---

Tags: [#game-development](https://daily.dev/tags/game-development), [#3d](https://daily.dev/tags/3d), [#algorithms](https://daily.dev/tags/algorithms), [#graphics-programming](https://daily.dev/tags/graphics-programming)

[View this post on daily.dev](https://daily.dev/posts/growing-trees-lnyu6xohy)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Growing Trees","url":"https://daily.dev/posts/growing-trees-lnyu6xohy","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/growing-trees-lnyu6xohy"},"datePublished":"2026-10-26T13:12:33.741Z","dateModified":"2026-10-26T17:10:33.125Z","description":"Procedural trees can be grown by simulating buds competing for light across seasons. A voxel grid tracks shadow cast by each bud, light is summed from tips to...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/e45552ff4a6c3424d53ac8b5654fbd93?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/e45552ff4a6c3424d53ac8b5654fbd93?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Hacker News","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Hacker News","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/hn","url":"https://daily.dev/sources/hn"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/growing-trees-lnyu6xohy","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"game-development,3d,algorithms,graphics-programming","timeRequired":"PT4M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Hacker News","item":"https://daily.dev/sources/hn"},{"@type":"ListItem","position":3,"name":"Growing Trees"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/growing-trees-lnyu6xohy#faq","mainEntity":[{"@type":"Question","name":"How does the self-organizing tree model from Palubicki et al. simulate light competition for procedural tree growth?","acceptedAnswer":{"@type":"Answer","text":"Each bud casts shadow into a voxel grid as a widening pyramid that decays with depth, so shadows from all buds accumulate and the tree interior darkens naturally. Light values are summed from branch tips down to the root each season, then a proportional growth resource is distributed back up, letting well-lit buds produce new shoots while poorly lit ones stay dormant or get shed. Developers building procedural nature systems can find implementation breakdowns like this one through daily.dev."}},{"@type":"Question","name":"How does the extended Borchert-Honda model decide how growth resources split between a tree's main stem and lateral branches?","acceptedAnswer":{"@type":"Answer","text":"The main continuation receives a biased larger share of the summed light-based growth resource, while the lateral branch receives the remainder. This small bias toward the main axis has a surprisingly large effect on overall crown shape over multiple growth iterations, since a bud needs at least one resource unit to avoid staying dormant. Anyone tuning growth or allocation algorithms can track detailed modeling writeups like this via daily.dev."}},{"@type":"Question","name":"What is a pipe model used for in procedural tree generation?","acceptedAnswer":{"@type":"Answer","text":"A pipe model calculates branch thickness after the tree's skeleton has already grown, starting from a fixed radius at the branch tips and accumulating girth toward the root. Width and passive sag are derived purely from the finished skeleton and do not feed back into the growth simulation itself, keeping thickness and growth as separate passes. Graphics developers refining tree or plant renderers can surface techniques like this through daily.dev."}}]}
```

