Unfolding City
Procedural Rigging, Animation, Instancing | Maya, Houdini, Python | 2022
Part 1: Paper Unfolding Script
Building off the procedural rigging and animation script I had explored earlier, I wanted to find ways to scale this technique into a full city
Using the script I had written earlier, I created several walls with different heights, number of folds, and animation speeds
Then, I exported each wall as animated geometry, which I imported back into Maya to create "buildings". For each building, I could then offset the animation cache for each wall to add variation to every building unfolding. I then created 3-5 different unfolding building animations for each wall I had created. With all the variation in the initial wall animation, combined with the added variation in animation offsets, I was able to create about 25 different buildings that could be instanced
Using the script I had written earlier, I created several walls with different heights, number of folds, and animation speeds
Then, I exported each wall as animated geometry, which I imported back into Maya to create "buildings". For each building, I could then offset the animation cache for each wall to add variation to every building unfolding. I then created 3-5 different unfolding building animations for each wall I had created. With all the variation in the initial wall animation, combined with the added variation in animation offsets, I was able to create about 25 different buildings that could be instanced
Once I had completed my initial animation setup, I brought each animated building into Houdini in order to be instanced into a "city". I used a fairly simple setup for instancing buildings along a grid, while also creating "street" groups to delete by bounding volumes. I also applied some random scaling and some extreme vertical scaling for "skyscraper" buildings.
Here are some of the key techniques:
Here I create a random offset value to represent the Frame offset for each building animation. There is also a randomized speed value to add some more variation to each animation
Here is a fun technique for creating more appealing animation. Initially using the animation script (even with some hand-animated follow-through), the resulting unfolding was very linear.
Here I am mixing in a squared version of the linear animation to create more interesting ramped motion. I then have some more finer controls for speed and initial start Once the buildings are distributed as a city with proper variables, we can then apply the actual offset values to each instance downstream
With all the baked-in variation through creating multiple versions, combined with then offsetting and re-timing their clips even more, we get a very large animation system with a great deal of complexity in motion |
it's really a Crowds Project disguised as a Set Extensions Project :)
The actual setup and tech behind it resembles a Crowds workflow in that we are creating "character" buildings that essentially have different animation clips through creating multiple versions. We then further offset and retime the animation, much like how we would accomplish that in a Crowds workflow.
As such, for future similar projects, I'd like to explore actually creating buildings as Houdini Crowd Agents that would allow me to leverage the Houdini Crowds tools and pipeline in order to create even more interesting and complex animated structures
The actual setup and tech behind it resembles a Crowds workflow in that we are creating "character" buildings that essentially have different animation clips through creating multiple versions. We then further offset and retime the animation, much like how we would accomplish that in a Crowds workflow.
As such, for future similar projects, I'd like to explore actually creating buildings as Houdini Crowd Agents that would allow me to leverage the Houdini Crowds tools and pipeline in order to create even more interesting and complex animated structures