Continuing my exploration of feeding back points into themselves, i got my points stuck together (FeedbackList.vuo). It seems like the culprit is the "Hold" node not quite coping with holding different streams of data within a build list node (FeedbackList.vuo). So for a solution, holding the entire list of points, picking out the one corresponding to the point being calculated, and then... no feedback.

The FeedbackHoldList2 is where I've gotten until now, but it still seems like it's only using the point from the Perlin noise instead of applying it as velocity in a feedback loop (shouldn't oscillate if feeding back into itself). There is also some weird behavior when cutting the list. Then all the points gather somewhat to one point, although that node shouldn't do anything else than removing the points in the list that exceeds the size (this is needed to adjust the list back to only the points you want if shrinking the list).

So now I'm a bit stumped. Is it a bug, is it me doing stuff the wrong way (again), or is it just not possible at this time? Have a look if you feel for it (the limitToSceen has to go in your user modules folder), and shout out if you see a glaring mistake. I'll go drown my sorrows now.

Cheers!

Comments

Got it! The short answer is

jstrecker's picture
Submitted by

Got it! The short answer is that you need to replace Enqueue -> Get Item from List -> Add velocity with Enqueue -> Get First Item in List -> Add velocity, at which point it looks really cool :)

Here are some of the steps I went through to get there (intermediate compositions attached):

  • Clean up, remove distractions.
    • Lots of curlicue cables, so I moved nodes around to make it easier to follow the feedback loop.
    • Removed unneeded Spin Off Event node.
    • Removed Limit to Screen, since the points weren't going offscreen so it wasn't making a difference.
  • Check for common problems.
    • Checked for any places where extra events are going into the feedback loop. (The major places already had Hold nodes — good.)
  • Slow down, watch output.
    • Changed the Build List input from 20 to 2.
    • Replaced the Render Layers to Window -> Build List cable with Fire Periodically -> Build List, firing every 1 second.
    • Colored the 2 ovals differently so I could follow them individually.
    • Added a Display Console Window and fed in data from different points in the feedback loop to see how the 2 items differed.
  • Think of hypotheses and test them.
    • Could there be something amiss with the inputs to Make Gradient Noise? Replaced it with the simpler Make Random Value, still had the problem.
    • The Add velocity node is supposed to be adding each point's previous velocity to its current velocity. Maybe the points end up in nearly the same place because the current velocity is being added to the same number instead of different numbers? Checked Enqueue output and node description, realized that this was indeed the problem. Fixed.

Thanks! Now I get it to work,

MartinusMagneson's picture
Submitted by

Thanks! Now I get it to work, but I dont quite understand why it's the first item in list that gets the correct point? The FeedbackHoldList is a different approach where I don't use the enqueue, but instead changes items in a list based on the item number. This shows about the same behavior, but doesn't get corrected by using a first item in list node. Am I correct thinking that the list being held gets created on an item basis so that instead of addressing a point for each item in the build list (intended) I address a point for one item on its own? If so, is there a way to use a "common" list for all the items in the build list?

Is there also a button to press to get only trigger data from the refresh port of the render layers node? I only get the option to choose rounding when trying to connect it to the "Fire" port of the build list node.

I have to argue that the "limit to screen" node is quite useful if you take a look at the attached composition and give it a couple minutes ;) (it also shows what I believe is a consequence of using the enqueue node as opposed to the approach in the FeedbackHoldList ones).

PetriDish.vuo

jstrecker's picture
Submitted by

PetriDish.vuo

Awesome :)

I dont quite understand why it's the first item in list that gets the correct point?

Because of the way Enqueue works. As you enqueue items, the output of Enqueue sort of cycles around, so that the newly added item is always last and the "Max Item Count"-th oldest item is always first. Since "Max Item Count" is the same as the list size for Build List, they sync up — the first item in the queue ends up being the one you want for the current iteration in Build List.

The FeedbackHoldList is a different approach where I don't use the enqueue, but instead changes items in a list based on the item number. This shows about the same behavior, but doesn't get corrected by using a first item in list node.

Yeah, there it's a different problem. The list stays empty because it starts out empty (from Initial Value) and that emptiness keeps getting fed back into the Change Item in List -> Hold List feedback loop. There is probably a smarter way to accomplish this, but if you just delete the cable into Initial Value and expand the drawer out to 24 items (matching Build List : Fire), that fixes it.

Is there also a button to press to get only trigger data from the refresh port of the render layers node? I only get the option to choose rounding when trying to connect it to the "Fire" port of the build list node.

Hold down Option while dragging the cable. That turns the data-and-event cable into an event-only cable.

I have to argue that the "limit to screen" node is quite useful if you take a look at the attached composition and give it a couple minutes ;)

Oh, of course! I just meant that it wasn't necessary for debugging since it doesn't have any visible effect until the composition has run for a while.