Procedural Factory Summer 2024
Overview
For this project, I was motivated to create a tool to quickly generate simple factory forms to be used in a variety of projects, whether that be aerial landscapes or background structures. Using what I learned from the procedural building in VSFX-350 as a foundation, I ventured to build on those skills through this work. Some of the online resources I found most helpful include Junichiro Horikawa's procedural pipe network and Peter Arcara's SideFX course "The Joy of VEX". These resources helped me develop a deeper understanding of using coding to control parameters and geometries in Houdini.
​
In order to build the factory, I broke existing factories into a few key parts, identifying the main forms that give them their distinctive, industrial, detailed look. Some of my main references were sourced from Kobayashi Tetsurou's beautiful industrial photography, found at https://1x.com/kobateck. I observed four main features that may be brought together to depict the illusion of detail: X-frames, "random" horizontal and vertical piping, varying heights of structures, and protruding cylinders or chimneys.
​
Construction
Each group, accordingly, has its own structure that will be built in the given sections. I will be explaining the section labeled in purple as it includes the most detail / steps, however the process for each uses similar or repeated techniques.
​​
I first begin with a plane, subdivided using the Lot Subdivision node to create irregular, intricate, and randomized sections of a grid. This grid will then determine where different structures will be, allowing a scattered yet repeatable layout. Using VEX, I then separate each group by area, labeling each group by color. Important to note!, all parameters that will be discussed later are controlled in Null nodes for easier use of the tool.
​
For the purposes of this explanation, I have created a plane with a smaller area and few subdivisions, in order to isolate only the purple sections. Using another subdivision, I separate the existing primitives into smaller pieces - which will be important later on. Next, I separate these new primitives into their own area groups, then I assign attributes like floor heights to be used later.
After separating into groups, I then want to locate where to place tanks/pipes/chimneys. First, using VEX, I identify which primitives are closest to a square, then which primitives are more rectangular, respective to the axis the longer side is parallel to. This way, I can add points inside of the primitives that account for a few things: the direction, x or z, that the row of tanks will be in, and the number of tanks that can fit in the space, regardless of an even or odd number. I explain this further in the comments of the code.
In addition to the tanks, I also wanted to add cubic forms protruding from the main floors/brackets. To add a bit of detail or decoration, I also added pipes randomly coming in and out of these forms. Using floor heights / floor counts outlined previously, I can easily use an extrude node with these values to create this. Next, I extract the top plane, scattering points along these planes to set origins for the new pipes. Using VEX, I can randomize the height of these points. Lastly, I create lines branching off of these points, outlined more thoroughly in the code. A simple polyline node is used to add depth to the lines.
Lastly, and most satisfyingly, I can use the original primitives, outlined floor heights and floor counts to encase the pipes.
Moreso for the visual appeal rather than usefulness, here are the other node networks for other structures: