Property test optimizations/improvements
#1
Hey,

I am using the property test a decent amount to accumulate neighbor particles and add them up over time. This works great however whenever i use the option to accumulate the values, the property test can no longer send out to the next event. I need to add a second neighbor test for the command to send the event to the next flow. As you can imagine, when the property test is being run on several million particles it can get very slow, so adding a second property test to each flow just to send it out just makes it even slower. Would you be able to add the option to accumulate and send out from the same property test operator? This way it only has to do the calculations on one property test operator to speed things up.

Other things that might help speed up certain test actions is if we had a maximum value so i can clamp the results of the test. Also, an Nth particle option in the test particle section, this should help reduce the amount of tests required for massive scenes.

Another improvement that could be done for the neighbors test is to also test the distance to the neighbor and also a weight to each particle based on the neighbor count and distance. (output that weight as either an absolute value or accumulated over time.) The equation krakatoa magma uses for this is Weight = 1 - (distance/radius) ^ falloffpower. The falloff power controls the curve on the weight.

Thanks!
  Reply
#2
I'm not sure how your first suggestion would work, unless I don't understand what you mean. If the Property Test is accumulating the values, then you'd need some kind of secondary test to check them, otherwise it's a chicken and egg scenario, where you're asking the Property Test to accumulate values, but also test those accumulated values, which would be a different test altogether (a custom float value check, rather than a neighbor test).

For 'nth particle' tests you can just use filters to reduce which particles are affected by the operator (namely the filter which tests a random value between 0-100...set your condition to 'less than' and the number you choose to test will be equivalent to the percentage of particles that will be filtered through).
  Reply
#3
(02-29-2020, 11:40 PM)tyFlow Wrote: I'm not sure how your first suggestion would work, unless I don't understand what you mean. If the Property Test is accumulating the values, then you'd need some kind of secondary test to check them, otherwise it's a chicken and egg scenario, where you're asking the Property Test to accumulate values, but also test those accumulated values, which would be a different test altogether (a custom float value check, rather than a neighbor test).

For 'nth particle' tests you can just use filters to reduce which particles are affected by the operator (namely the filter which tests a random value between 0-100...set your condition to 'less than' and the number you choose to test will be equivalent to the percentage of particles that will be filtered through).

Ah sorry if i wasn't clear. On the first request, the property test isn't checking against itself, the value is being saved for use with a mapping operator later on in a different flow. I wanted the property test to accumulate the values, but also at the same time output a true/false output that could be linked to another flow. Right now in my flow i need 2 property test operators with the same test settings, one to accumulate the values, and a second one outputting a true/false signal that sends the particles to another flow. Since the settings are exactly the same aside from the test result action, i was hoping they could be combined into one so the system isn't doing unnecessary steps during calculation, as doing it with several million particles takes a long time.

I will also look into the filters section. I haven't really used it much yet, thanks! Big Grin
  Reply
#4
Hey,

I am still not quite sure what the min/max is doing. If you could drop explaination here that would be awesome. Big Grin

Would we be able to add a multiply option to the property transfer? Something like this.
((property a * property b) * transfer strength)

IE: Vert colors
((255, 255, 0) * (0, 128, 255) * 1)
yellow + cyan = green

Just a random idea.
Thanks. Big Grin
  Reply
#5
Min/Max just gets all the values from the neighbors and uses either the min or max value as the value to interpolate all particles towards. So for example, if you used the "max" mode, you could simulate like a viral spread, rather than a dissolution.

I'm not sure a multiply mode would work as you've intended....the values would very quickly approach 0.
  Reply
#6
Hmm, What if you could clamp the min/max after the multiply?
  Reply
#7
I don't see how that would solve the issue. Then you'd be negating the multiplication operation.

Either way, Property Transfer isn't doing anything that the Script operator cannot also do, if you need to inject different operations.
  Reply
#8
Fair enough, was just a random thought. Smile

I really need to learn scripting...
  Reply
#9
It's really very simple. If you run into roadblocks, just post the issue here on the forum or the Facebook group and I'll try to help.
  Reply


Forum Jump: