Tuesday, June 19th 2018
I took the original p5.js code for challenge #1 (replicate a collection of circles of different colors on-screen) and ported it to Houdini. Some concepts translate well, others are more complex. Because each Attribute Wrangle needs a context (one piece of geometry, all points, all primitives, etc) I needed to seperate the work of creation from any downstream modifications of point positions, colors, or sizes.
Through analyzing the original sketch, my guesses were that the original circle colors used a weighted random (which I simulated with a Color Ramp parameter in Houdini) and that circle positions were based not on random values but on noise - it felt more controlled than a random distribution would create.
This sketch was easier because I already had some context in placing and moving points programmatically in Houdini. Again, I seperated the code into two Wrangles - the first created the points according to "Start location" and "End location" parameters, and the second randomly offset those points on each frame.
My increasing familiarity with VEX and Houdini paradigms allowed me to focus on solving the underlying problems. I was able to really dial in the parameters to create a close match to what I saw on the comp form site. The animation shows an example of moving through the noise parameter space.
With a clearer understanding of what belongs in what node, I was able to write terser wrangles and clearly break apart point creation and point animation in this sketch.
In order to reflect the parameters available on the original sketch, I broke out noise offet, frequency, speed, and amplitude in the animation wrangle.
The strategies section exposed me to some techniques I had never used before, one of which was noise culling. I parameterized the threshold and then keyframed it in Houdini to demonstrate increasing the threshold over time. This technique seems tailor made for procedural map making.
Noise displacement was a technique I've used, but without a lot of real understanding what is going on "under the hood" - I created a sketch displacing a grid of circles on the x and y axes. This is a powerful technique when used with subtlety and it is one I'll return to.
I seeded this sketch with a mix of values derived from geometry and time , in order to make it animate in a compelling way.
I wrote a relaxation displacement algorithm that iterates through a collection of one thousand randomly placed points, and then pushes or pulls the points closer together or further apart based on its relationship to a minimum and maximum threshold.
My first attempt at this used a naive algorithm combined with a slow, single-threaded approach to iterating through all the points. Coming back to this sketch, I used some common Houdini abstractions like a a For Loop combined with running the attribute wrangle in "Points Mode" – meaning it iterated over all of the points by default.
Code for this week's Procedural Systems sketches is available on GitHub