2
$\begingroup$

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:

Geometry Node graph showing the drum instancing logic.

  • 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.

Screenshot of generated column meshes. One with entasis, one without.

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.

Geometry node graph showing the quadratic function logic.

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: Entire Geometry Nodes graph.

$\endgroup$
2
  • $\begingroup$ maybe i misunderstood your question, but isn't that exactly what curve to mesh does? [1]: i.sstatic.net/tnvh5.jpg $\endgroup$
    – Chris
    May 21, 2022 at 11:53
  • $\begingroup$ Hm, not really. If the whole column were just one continous mesh, that would probably work but the reason I'm doing it this way is that I need the grooves in between each column drum (i.e. the gaps in between the stone blocks that make up the column) to actually be 3D geometry so I need to do it with instanced meshes. Unless there's some way to scale instanced meshes using Curve to Mesh that I'm unaware of? $\endgroup$ May 21, 2022 at 12:05

1 Answer 1

3
$\begingroup$

Basically, this is the right way to influence the radius of a curve with the node Set Radius.

In your concrete example with the individual segments of a column and the column profile, it gets a little trickier.

enter image description here

enter image description here

I would solve it like this:

  1. Divide a curve, and create your column profile with the node Float Curve.

  2. Then instantiate this curve in the number of segments you need in exactly one place.

  3. Next, trim each of these curves so that it corresponds to exactly one segment at the corresponding position of the column with the node Trim Curve. This transfers the radius at the respective position to the segments of the shortened curves. Here you can also add a distance so that the segments have a small space between them.

  4. Then create the profile for the column (or use an existing curve with Object Info) and combine it with the node Curve to Mesh with the multi-segment curve you created earlier.

  5. Finally, you can add an additional object that represents the inside or the mortar of the column.

enter image description here

$\endgroup$
1
  • $\begingroup$ Thank you so much! I ended up changing it to use a pre-made base curve with predefined radii instead of generating one from scratch (which allows me to switch out the curve on a per-column basis). Also got rid of the gaps and mortar base since I want the drums to be flush with one another (added an angle-limited bevel modifier after the geometry node modifier to create the groove). The only issue with this approach is that it doesn't allow for as much versatility in the drum shape. A mesh-based approach would be best. But other than that this is perfect and way better than what I had! $\endgroup$ May 21, 2022 at 18:26

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .