Hi again Srek!
This is true - I noticed Position Velocity was returning 0;0;0 so I supposed that to mean that only a local transform animation could return a value for PV, whereas Global Position calls on an object’s relationship to the world’s origin, so I switched the output to GP just to see if I could figure out how to make use of its return values. Obviously I did not figure out how to take it further
Thanks for bringing this to my attention! I’m not sure it would have occured to me that simply setting up a new port would automatically introduce a new # value. I’ll certainly pay attention to this going forward.
In any event, Wow Srek - thanks a ton for the History -based setup. This is exactly the effect I was aiming for, and I’m not sure I could have ever arrived at this at my current skill level of xpresso. I did do a break-down for myself below to wrap my head around what each node is doing. This is the extent of my understand of things, and I called out some questions in all caps (not shouting, just inquiring ), but if you do have another minute, maybe you could correct any false assumptions I have…
Thanks so much again!
Time: with the Time output, we get a numeric value expressed in seconds and fractions of seconds (0.00) based on where we are in the timeline
Compare: In this case, we’re comparing the Time value from the Time node, with a value of 00:00:00 and returning ‘yes’ or ‘1’ to any value greater than 00:00:00 and then putting this into the emitter’s ‘On’ input. I suppose this simply turns the emitter on after the first frame in timeline.
I CAN’T SAY I UNDERSTAND WHY WE NEED TO DO THIS. IS IT A MATTER OF EXTRACTING A USABLE DATA TYPE? OR DOES IT RELATE TO USING THE MEMORY NODE SOMEHOW?
PMatterWaves: Drives / returns a full set of values for the array of particles being emitted
PGroup: Passes all p values into a particle group which can be referenced by other nodes or functions
Object Operator: Sphere1: this is where we plug in our sphere geo. Global Position output gives us absolute x/y/z coords for every frame. History Depth parameter is set to ‘2’ instead of ‘1’ so that history can be passed on to the next node, which is…
Memory: This node looks at the previous node’s return, in this case a Global Position vector, and takes the values from not the current frame, but the frame before it.
DO WE NEED TO INCLUDE THE HISTORY LEVEL INPUT (SET TO 1) IF WE SET THE HISTORY LEVEL ON THIS NODE TO ‘2’ ?
Math: Subtract: Here, we are subtracting the Memory node’s output (xyz) from Sphere1’s Global Position output (pos xyz). This gives us not the distance value (which would be a single real or float value per particle) but rather the difference in value for each xyz vector component.
Result: “Leave this node, it forces the evaluation of the memory node on frame 0”
HOW / WHY? OR IS THIS JUST AN XPRESSO IDIOSYNCRASY?
P Pass: This node just holds all the p values from the particle group we specify
PGetData: Here, we are extracting vector position values for every particle per every frame at the first frame it appears, and all frames thereafter.
I PRESUME THESE ARE ALWAYS ABSOLUTE XYZ VALUES RATHER THAN RELATIVE TO EMITTER’S LOCAL XYZ?
Math: Add: Here, we are adding the current particle positions to the difference in distance that the emitter’s local xyz traveled per each frame.
PSetData: This node tells C4D that this is the final evaluation we should call on, or in other words, “this should override the original emitter values”