2
$\begingroup$

I can generate pipe shapes from a collection fairly easily. My node setup only generates them on some points controlled but a colorRamp and a Noise texture. I've just now figured out how to use the pick index, and by replacing the randomValue node from my screenshot with an integer I can define which pipe I want to select; there are 5. Cap, Straight, Elbow, T, and Clover.

enter image description here

The points are not responsive to each-other in any way that I can find, however. I would like the points to obviously select the right pick index before spawning the instances, so that the pipes line up with each-other, or are capped with the Cap piece.

How can I detect if the other surrounding points in a Von-Nuemann neighborhood are selected and make change my integer pick index based on that? like this:

enter image description here

$\endgroup$

1 Answer 1

9
$\begingroup$

You could use a single integer number to describe all neighbors, by using the numbers bits (digits in binary representation) - I decided on a top-to-bottom, left-to-right ordering:

  • leftmost (technically last) bit for a top connection,
  • 2nd leftmost for left,
  • 3rd leftmost for right,
  • 4th leftmost (rightmost) for bottom.

The objects are sorted properly:

  1. 0000 (binary 0000 is decimal 0)
  2. 0001 (binary 0001 is decimal 1)
  3. 0010 (binary 0010 is decimal 2)
  4. 0011 (binary 0011 is decimal 3) etc.

Now use something like Geometry Proximity node, to check for neighbors of each point. Perhaps a more efficient way would be to delete geometry later and sample by indices if neighboring points are scheduled to be deleted or not, but I think this will be easier to understand:

Finally convert those four boolean values to one integer, by setting each integer's bit to the adequate boolean. Then pick instances using this integer as index:

$\endgroup$
2
  • $\begingroup$ as I am just beginning to use geometry nodes, how may I store a variable to each instance? use capture attribute? $\endgroup$
    – ruckus
    Commented Feb 20, 2023 at 1:58
  • 1
    $\begingroup$ Thanks for the clarification. This system seems like it is flexible to other polygons besides square as well, and has many uses $\endgroup$
    – ruckus
    Commented Feb 20, 2023 at 15:19

You must log in to answer this question.

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