I think I might have made loops in geometry-nodes.
Loops are a much-wanted feature for geometry nodes, but the developers have been busy providing us with other amazing and useful nodes. This may be a workaround.
The concept is that 2 objects use the “Object Info” node to extract each other’s information, allowing them to create data that is stored for the next iteration. The main problem is tricking the evaluator into reevaluating the group every something. In this case, I chose to use the “Scene Time” node because it was easily available and would work reasonably well. There is only one problem with this approach: the possibility of a race condition, where the evaluator keeps going back and forth between the groups, reevaulating them repeatedly, back and forth, until the computer crashes. I avoided this by making the group’s output stabilize after 1 iteration of each group, and it runs fine.
To activate the group, I first clear the counter by activating File->Reload (Ctrl-Shift-W). I then move the timeline to any other position (in 1 hop) and the group iterates forward, which could be incredibly useful if this could evolve into particle systems or physics solvers, both high-priority tasks of the developers. The biggest problem is the loop building up so much geometry that it crashes the computer (been there, done that, had to reload blender 6-7 times during development). This neccessitates an iteration cap, making things even more complicated.
For the attached example file, I generated a cube fractal of cubes instanced on the corners of the cubes of the previous “generation”. I only let it go 4 levels deep to avoid crashing my computer, but you could go much farther by changing a single number.
The other scene in the file (Accumulator) was a test to see if things could work, and it has a simple accumulator (a reduce() for the programmer) looped in.
I don’t know what all blender versions it will work with, but I made it on 3.3.
Let me know if you come up with something better or take it in a new direction!
GN_loop_test.blend (1.0 MB)