Procedural Wooden Bridge
This is my first project in Houdini. And here is the documentation of my learning process.
1) Starts off with a Box as a base of the column with Edit nodes to control it's dimension. Link the controller parts that modify the height and width to the separate controller. Add a Transform node to bring it above the grid. (Size of the box divided by 2, or ch("sy")/2)
2) Create a line to to form a guild line for columns and use a Blast node to delete the last point on the line. (So there will be no last column at the end of the bridge, enabling it to connect with the next section seamlessly.)
3) Use Copy To Points to put a column on each point on the line. Move them to the other side of the bridge with Transform, then Merge them with the original ones so both of them are visible.
1) Use Curve tool to create an outline for half of the rail, then use an Edit node to flip it to the other side of the X-Axis. (for symmetry) Use Divide node to make quads.
2) Merge the two sides together and Fuse them into one piece. Transform the piece perpendicular to the grid, and extrude the face into a rail. Fuse the pieces together
3) Add a Transform node for height and width
(Ignore the reverse node I accidentally put there)
4) To place the rail on top of the column, create a line with 2 points whose length is linked to the section's length. Move it up along the Y-Axis to the top of the column. Blast point 1 (leaving the first point which is point 0)
5) Use Copy To Points to put a column on each point on the line. Move them to the other side of the bridge with Transform, then Merge them with the original ones so both of them are visible.
1) Create a 1 x 1 Grid as a base for the deck.
2) Move the edges of one side to the center. (Unless you prefer that the planks stick out further to the side)
3) Add an Edit note to control the plank's width, and another one for the plank's length. Connect the parameters to its respective controllers.
4) Extrude the plank's thickness. Set extrusion's distance to the controller for plank's thickness.
5) Create a Line that starts off at the height of the deck with the length of the section, and the number of points connected to the controller that indicates the number of points.
5) Use Copy To Points to put a plank on each point on the line.
1) Created a 1 x 1 Grid as a base for the rail supporter. Connect its width and height with controller.
2) Extrude the grid to give it a height. Set Depth Scale to -ch("../BRIDGE_CONTROLL/column_heigth") -1 + ch("../BRIDGE_CONTROLL/deck_heigth"), which is the height of the column minus height of the the deck
3) To reposition it to the top of the columns, create a Line and link the Y-translation in the Transform node to the Column Height's Controller. In this case I had to also add a +1 because when i set up the columns, I moved the box up above the starting grid
4) Delete the first and the last points of the line with a Blast node with the set up as in the picture. ↑
(We don't want a supporter overlapping with the columns)
5) Going back to the Line node, link its length to the Section Length controller and Points to Support Number controller. Add +2 to make up for the first and last points that we deleted with Blast.
5) Use Copy To Points to put a support on each point on the line.
6) Use another Copy To Points to put the set of supports created in (5 after each column. Use the line from Column section.
7) Move them to the other side of the bridge with Transform, then Merge them with the original ones so both of them are visible. Make sure to link translation X of the Transform node to Bridge Width controller.
1) Create a 1 x 1 Grid whose width and height is linked to the respective controllers as a base for the beam.
2) Rotate 90゜on the X-axis.
3) Extrude the Grid. Link its Distance to Section Length so that the beam goes along all the way along the bridge.
4) Create a Line with 2 points, and its length linked to the Section Length controller.
5) Reposition the line so that the beam would be right underneath the plank by subtracting half of the beam's hight off of the deck's height. (When you use Copy to Line, the line will come out right at the middle of the mesh and therefore we only need to subtranct half of the height of the beam out and not the entire one.
ch("../BRIDGE_CONTROLL/deck_heigth") - ch("../BRIDGE_CONTROLL/beam_height")/2
6) We essentially only need one point to position a beam on one side of a bridge section. Use a Blast node to delete the second point on the line. Since there are two points, delete point 1.
7) Move the remaining point to the other side of the bridge with Transform, then Merge it with the original so both of them are visible. Make sure to link translation X of the Transform node to Bridge Width controller.
8) Add another Transformation node to control the width between the two beams. Make sure to modify the pivot so that the beams are pushed in/out symmetrically.
9) Use another Copy To Points to put Beam to each point on both sides.