Rick's Blog
IOTM - Piazza San Marco - Are Geometry Nodes the Best Way To Model Complex Architecture?
My Image Of The Month (IOTM) series has been delayed by many things. One of those is the complexity of modeling detailed buildings. I get lost in the details. With the recent addition and improvements to Blender's Geometry Nodes, I wondered if that would be a good workflow for some of these buildings with complex but repetitive elements.
Piazza San Marco is surrounded by buildings which have repeating elements. An example is shown on the left. Ideally, a geometry nodes setup would be able to recreate the building. As a build-up, I'll try to recreate the arched columns.
I intend to have a column made of a base, crown and middle section. The middle section will be scalable, so that the entire column can change length without having to stretch the top and bottom sections. I've organized my file collections as shown to start. This separates the building blocks from the final geometry. It should also allow the user to change column styles, if I put multiple styles inside each collection.
I'll start with a mesh line. This will allow a column instance to be created on each vertex. The user can select the total number of columns and the spacing between column centers.
To produce the base, it is only required to create an instance of the base on each vertex of the mesh line. I've added a user input to the Instance Index which will allow the user to select column style, if more than one exists.
Creating the middle and top sections of the column are almost identical. In order to position the middle section, I need to know how high the base is. Additionally, since the middle section is scalable, I need to measure the height of the base and the crown, subtract that from the desired height and then scale the middle section accordingly.
The first problem is figuring out how to measure geometry. I found some solutions online using Attribute Statistics, but I couldn't get those to work for me. I couldn't get the bounding box method to work until I realized geometry first. So my solution takes a single-point line (also know as a vertex ;) ) to create a point on which the geometry in question can be instanced. That single instance is then realized and sent to a bounding box node. The difference between the max and min creates a vector of maximum dimensions. I knew I was going to be using this function a few times, so I encapsulated it in a separate group. I get the instance input (and the Instance Index, if that is necessary), and output the max dimensions in all three axes.
To position the crown, rather than measuring everything below it, I moved the 3D origin to the top and created the instance at the user-desired total height of the column. I had to add a feet-to-meter converter to keep Blender's internal units happy and combined that value with zero values for x and y to create a vector input to the offset value.
With the base and crown in place, I add the max height of each, subtract that value from the user-desired column height which gives me the height the middle section needs to be. Since the middle asset is 1-unit high, I use the desired height as a scale factor.
And voila! That creates one line of columns, without arches above. Arches and adding the option to add rows for a matrix of columns is the next step....
When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.
Comments