The aim of this project was to explore brutalist structures and the potential for motion in them in a way that makes concrete feel abstracted into a flowing structure.
The assets were mapped out as solving three main functions and having each asset to be able to interact with the other so they can be combined into more complex forms.
The first asset takes in splines and moves points continuously across it which can then be used as copy templates for structures that seem to keep looping along the line.
The key here is to access primUVs and offset them using different inputs to move the points along the original spline. The offset can be managed using the points' original positions on the spline.
By using this in combination with forms that are either designed to interlock with each other or overlap each other smoothly, it is simple to achieve the ‘flowing structures’ effect almost similar to the architectural effects in Dr.Strange. It is good to think about how the start and end of the looping structure can be hidden – either according to the shot or by just having a different asset around the ends.
The next asset was for dividing quads into parts (similar to Corbusier’s grids) that can be animated.
There are three ways to do this :
1)Use the EdgeDivide SOP with its notation and create different ‘morphs’ of a grid followed by blendshapes.
2)Use the transformation properties in PolyExtrude SOP to create different patterns and then animate the extrude parameters.
3)Create geometry using VEX – make quads or triangles with relative proportions to the input quad and then use the lerp VEX function to move the points around that in turn make the smaller quads.
This shows the 3rd method in use:
Making sure that the new points made along the edges have some relation to each other (here, it is that both of them move equally from opposite ends) helps in animating them using just one parameter and the grid can go back to its original state allowing for some looping animation to work.
Here, it is run through a loop :
The third asset that helps the earlier two assets interact with each other is the 'fit to quads' asset. This takes an input geometry, scales and fits it to the quads of a grid or any other geometry. Yet again, this one is made mainly using primUVs. The mesh to be copied upon the quads needs to be first normalised (here, a matchsize node does it, but it can also be done through a transform node) so the implicit UV space that goes from 0 to 1 can have corresponding points of that geometry within a 0-1 XY space. This will create flat copies of the input geometry on the quads of another geometry. To extrude or push them outward, the normal of the quad upon which it is copied can be sampled and used to push the points outward.
It is quite convenient to just use this asset and copy upon regular or subdivided grids, but it also generates interesting results if you extract quads from a Boolean mesh and then copy looping pieces of animated geometry upon them:
Once these pieces are ready, the challenge remains in animating the parameters so as to not have any geometry suddenly appear or vanish that might cause a visual disturbance. For this purpose, there are two ways to smooth out the motion so you get the loops to be in the same flow:
1)Use the ‘smooth’ function in parameters’ expressions with modulo and trigonometric function to get values repeating in a smooth way.
2)Base the smoothing on an ease attribute which can be controlled by parameters and could be any approximation of the sigmoid function.
Another point to note is to also manipulate the extrusions so as to have the geometry rise and fall in some ways and using a delete by expression if some polygons with low areas are acting weird. This makes the main looping animations without keyframes and can be controlled by modifying parameters of expressions.
These assets can be combined to form structures with different variations on the larger divisions that can contain the looping geometries on them as secondary shapes.
The main concept upon which all of these assets depend is the way to access implicit UVs and then applying attributes of the copy or the template geometry to get a desired result. Similar to how most results in Houdini go, getting good designs depends upon how they are composed together as big, medium and small shapes while also keeping in mind areas of visual rest since most of the geometry is morphing.