So I've been trying to build a classical column generator using geometry nodes and run into a bit of an issue.
The way my generator works so far is:
- I input a column height and the number of column drums.
- I generate a mesh that's basically just a single edge the height of the column (minus one drum) and give it the same number of vertices as there are column drums.
- I instance my pre-made column drum mesh on these vertices.
You can see the result of just those nodes on the left side in the screenshot above. So far so good. However, classical columns are not just straight, they're tapered towards the top and this taper is not linear but rather curved (this curved taper is called entasis), like in the column on the right side. I've been bashing my head in trying to figure out how to create this entasis using geometry nodes.
The way I'm doing it right now is by using a quadratic function that roughly matches the entasis of one specific column (see above). However, this method doesn't give me precise control over the curvature and it also makes it very tedious to change the entasis from column to column (which I'd like to be able to do) since that will require me to calculate a new quadratic function for each new entasis profile.
What I would like to be able to do is to specify a pre-made curve that's basically just a straight line oriented along the Z axis with an arbitrary number of control points, each of which has a radius corresponding to the (normalised) width of the column at the given height and to then access these radius values in the Geometry Nodes graph to scale the column mesh. This would allow me to easily author different entasis profiles and switch between them. However, I have been unsuccessful in implementing this system (I can capture the radius values just fine but scaling the mesh according to those values at the corresponding Z positions is eluding me) and I am starting to wonder if it's even currently doable in geometry nodes.
So my question is either how can I get this radius scaling to work or, if there's no way to make it work, is there a different way for me to easily create this type of curved taper using geometry nodes (in a way where I can precisely control the curvature)?
Screenshot of the entire Geometry Nodes graph for reference: