The only way to produce consistent “random” values per particle is to use a Noise operator with the ID of the particle as the input. But since ID is an Integer, you have to convert it to a Float first, and then divide by a float to produce a fractional value since round values (1.0, 2.0, 3.0) will always produce the SAME noise value.
So
InputChannel ID -> ToFloat -> Divide (<-123.456) -> Noise (Normalize On) -> Add (1.0) -> Divide (2.0)
should produce unique per-particle values between 0.0 and 1.0.
The Normalize option produces output between -1.0 and 1.0, so adding 1 and dividing by 2 should bring it to the 0 to 1 range.
If you want your values to be between 0.9 and 1.1, you can use instead
InputChannel ID -> ToFloat -> Divide (<-123.456) -> Noise (Normalize On) -> Multiply (0.1) -> Add (1.0)
-1.0 to 1.0 times 0.1 will give you -0.1 to 0.1, and adding that to 1.0 will produce 0.9 to 1.1.
You can change the Divisor to any other value to control how often the values repeat.
Then we come to the partitioning part.
We can add an InputValue multiplied by a large Integer (e.g. 1000000) to the ID channel to shift the noise input by a million for each partition.
When the option to affect Modifiers of PRT Loaders is on, the Krakatoa partitioning code will look for Modifiers that contain a “seed” property.
Unfortunately, simply exposing a Magma InputValue called “seed” to the UI will not help, because internally the property is not called “seed” when exposed to the UI. But you can work around it like this:
*Create an AttributeHolder modifier below the Magma.
*Animation > Parameters Editor > Add a new Integer with name Seed and range 0 to 100.
*Now create a bi-directional Wire Controller from the new Seed parameter to the InputValue node’s track.
Now if you partition, the AttributeHolder’s Seed parameter will be incremented by 1, and the Magma will shift the IDs by a million for each partition, producing new randomization on each iteration!
Please let me know if you have any questions…