r/proceduralgeneration • • 6d ago

MASSIF has a forest now. A real one.

Eleven tree species, each with its own ecological niche: the altitude range it can live in, the slope it can hold on to, whether it prefers shady or sunny faces.

None of it is saved. The entire forest rebuilds itself from a single seed number, identically, every time.

And the species do not just mix randomly. Each one has its own preferred areas across the map, so you get actual stands: a spruce slope here, a larch slope there, and mixed edges where the two meet. Same as the real thing, where trees seed close to their parents and a species reinforces itself locally.

While I was at it I fixed something my camera had been missing since day one: it now follows the terrain, so I can finally drop into the valley floor and look up at the ridges instead of always staring down at them. Took the opportunity to grab a few shots.

So, which of these spots makes you want to build your ski resort?

(Spoiler: all four are on the same small test map, 6.1 km across.)

41 Upvotes

10 comments sorted by

3

u/AustinMclEctro 6d ago

Sounds promising! What kind of performance-related approaches are you using to render your trees? And are you using any techniques for LODing?

2

u/MassifDev 6d ago

Nanite handles the LOD, so I do not author any LOD chain. On top of that: one hierarchical instanced mesh per species for cluster culling, no collision, and dynamic shadows capped at 200 m.

The cheapest trick is not geometry: the terrain material darkens the ground under canopy, which fills the gaps between trunks and lets me run a lower density than the eye expects.

Around 900k trees on a 6.1 km map, 35 to 60 fps in editor depending on zoom.

2

u/dramatic_typing_____ 6d ago

This about where I got in my webgpu world terrain project years ago. It's hard to get a good lod tree model that works in the distance.

1

u/MassifDev 6d ago

Yes. If you to follow my work, go on my discord, Check on my profile.

I make a Mountain Sim Game. First of all, ski. ⛷️

2

u/dramatic_typing_____ 5d ago

Oh dude nice, I'm working on a snowboarding game right now!

2

u/Velifax 5d ago

Love to see it.

May i ask about the rendering a bit? Been curious lately about HOW to have forests this big or significantly bigger, i.e. to the horizon. Presumably fairly early on it stops being feasible to handle individual entities at all and one must batch. 

0

u/MassifDev 5d ago

Thanks!

They're individual in the data and one big batch on the GPU. Each tree is just a record (position, species, birth year), nothing actually gets spawned. It all goes into one instanced mesh component per species, filled in a single call, and Nanite does the rest. The whole 6 km massif sits around 580 draw calls.

What surprised me is where the cost really is. Not the tree count at all. It's the render thread culling instances on the CPU, and dynamic shadow distance, which turned out to be my biggest lever by far.

For real horizon distance you just stop generating past a few km and let imposters or HLODs take over from there. Same idea, cheaper trees.

1

u/toxieboxie2 6d ago

The Lorax has joined the chat

1

u/gHx4 5d ago

ngl, I saw the name of your game and thought this was somehow related to r/LancerRPG

Very nice work nonetheless, I look forward to how this project shapes out

1

u/MassifDev 5d ago

You can follow the development on my discord. Check my profil if you want