7
$\begingroup$

I am currently trying to create an array of circles of different radii in geometry nodes such that it forms a sphere. I currently have an array of curve circles instanced on a curve line. I have attempted to set the radius of each circle by using the Length output on the Spline Parameter node but it indicates an Invalid Link error each time.

This is what I am trying to achieve:

Desired outcome

Here is the setup:

Geonodes setup

Here is the result of the setup:

Current result

How can I effectively achieve this?

$\endgroup$
1
  • 1
    $\begingroup$ Your problem is your mixing Field-based data (Diamond shaped sockets) with static data (circular sockets). Basically blender is asking for one specific value and you're giving it values that vary depending on which part of the mesh it's referring to. I would set the first curve radius to a static value (like .1 or 1 to make multiplying easier) and then use a Scale Instances node after that with some math on your Spline Factor as the scale amount. $\endgroup$
    – Jakemoyo
    Commented Aug 8 at 13:20

2 Answers 2

6
$\begingroup$

You cannot plug the Length of a Spline Parameter (or the Factor what you actually did according to your screenshot) into the Radius of a Curve Circle node, because it produces a single circle which can only have a single radius. This is why there is a red dashed line and an error message "Invalid Link".

field to scalar

What you have to do is scale the instances. Then you need to do something to match the factor going from 0 to 1 from bottom to top to something more useful for a sphere. I used a Map Range node to map the 0 to 1 range to a -1 to 1 range. Then the result x would be the sine value and to get the radius you need cos(arcsin x). This you plug into the Scale input of the Instnace on Points node.

create sphere

However note that the top and bottom circles have a scale of 0 which makes them disappear. So if you want to have at least little circles there, you might want to change the Map Range node to not fully go to -1 and 1, but maybe -0.999 and 0.999:

map range

$\endgroup$
5
$\begingroup$

I have 2 possible solutions for you. Solution 1 gives worse result but is closer to your original process, solution 2 gives a perfect result but the process is completely different.

Solution 1: Your problem is that the radius input only accepts a single value instead of a field. You have to scale the circles after you instance them, and at the point you can't use spline parameter. circles1 This node tree takes the Z coordinate of an instance and uses it to scale the circles on the X and Y axis. You also control the scale through a float curve node. And here's the result: circles 2

Solution 2: This solution adds a uv sphere and deletes edges based on the absolute value of the difference of the Z coordinate of the start and end vertex. So, if the start of the edge is at a different height than the end, that edge is deleted. circles 3

And here's the result: circles 4

$\endgroup$

You must log in to answer this question.

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