top of page

Play-Tester

PROCEDURAL MOSS AND IVY IN HOUDINI

January-March 2019

 

For my final project for CS348C: Computer Graphics: Animation and Simulation, I used Houdini to simulate moss and plant growth on a model as if it had been left outside and begun to decay. Ultimately, I was able to implement both moss and plant growth by procedurally modeling different forms of growth along the surface of a model. I also did my best to make the process somewhat general so that a variety of models could be used without having to make many changes to the network.

 

moss.png

MOSS GROWTH GUIDES

Referenced tutorials: https://vimeo.com/259364278 (Berika Lobzhanidze: Growth FX in Houdini)
In order to control the mosses growth over time I used a combination of DOP networks and VDB volumes to simulate something growing over a material.

I first generated random start points for the moss growth by scattering points in a DOP network, freezing any points that hit the model and deleting all the points that do not collide with the model. I used an attribute transfer to mark the area each frozen point occupies on the model and then followed Lobzhanidze’s strategy of using a DOP network to simulate surface growth. The DOP network does this by continually producing particles constrained to the surface of the model at each of the marked areas, resulting in the particles being pushed out along the surface of the model over time. I then converted all the particles into VDB volumes, merged the overlapping particles into one volume and converted them back to polygons again. This results in masses appearing to spread over the surface of the object. Initially I also used boolean subtract to delete the parts of the growths which were inside the model, but this would subtract the models incorrectly occasionally for reasons I could not figure out so I chose to remove these nodes.

I noticed that my project had a lot of bottlenecking around this stage so I added some file caches to speed things up.
 

.

Screen Shot 2021-09-21 at 3.29.39 PM.png

MOSS APPEARANCE

https://www.youtube.com/watch?v=cDHhrqzcobk (David Kahl: Procedural Fur with Houdini - Island Grass 🌲)
Initially I was planning to model the moss using a fur procedural shader and set up my moss networks with that in mind, but in the interest of time I rendered them as normal models.

I used Houdini to create two different moss models: a long stem meant to be a sprout coming out of a moss growth and a short spiky model meant to look furry like moss. From there I used a copy to points node to copy these models to the surface of the moss growths. The sprouts also use an attribute swap between the surface of the model and the growth to limit the sprout growth area to the center of the moss, and use an attribute wrangler to randomize the location the moss that the sprouts appear in.
 

Screenshot from 2019-03-20 23-51-09.png

IVY PATH

Referenced tutorials: https://vimeo.com/197596529 (Entagma: Special Guest - Ben Watts: Shortest Path Growth)
I did not want to specify the paths the ivy would grow along for each model so I experimented with a variety of methods to procedurally generate paths for the ivy. In the end, I settled on using group by range nodes to select a few points at the top and bottom of the model. Then I used a shortest path node to generate lines between the bottom and top sets of nodes creating relatively natural looking ivy branches. I noticed that shortest path would struggle with very high poly models so I downsample all the models to around 1500 polygons to ensure models will have similar behavior regardless of initial poly count. I use a carve node to grow each path over time and a solver node to keep track of how long each point on a path has been visible, which I later use to control when leaves start growing at certain points.

Screen Shot 2021-09-21 at 3.31.02 PM.png

IVY APPEARANCE

Referenced tutorials: https://vimeo.com/212483416 (Simon Fiedler: Building an ivy growth solver in Houdini), vimeo.com/128296265 (Rohan Dalvi: Creating animated ivy in Houdini)

I generate vines by creating a poly wire along the ivy paths. The width of each wire is controlled by how far in the y direction each vine is. I also separate the vines a bit from the model by using an attribute wrangle to push the paths away in the direction of the model’s normals.

I followed Fiedler’s tutorial to generate the ivy roots. First I scattered points along the ivy paths and use the growth of ivy due to the carve node to “trigger” each scattered point over time using an attribute transfer. I then use a solver to keep track of how long it has been since the point was “triggered.” Then I use an attribute wrangle to generate lines starting at each of the scattered points when they are “triggered” by the carve node and project the end points of the line onto the model’s surface. I also use an attribute VOP to add noise to the lines so they look more natural. 

I created a single leaf model which is basically a grid with bend and transform nodes used to make an unfurling animation. I generate the leaves using the same scattered points from the root generation process and a copy to points in a for each loop. They are scaled based on how long each point has been in existence and I use an attribute wrangle and randomize nodes to vary the leaves’ rotation and which points they spawn at.
 

bottom of page