Once again, this visualization iterates upon the previous. In the last one the top layer was able to “see” the bottom, and was therefore able to bolster or penalize its own elements which were on or near bottom layer elements, but not vice-versa. This time both layers can see each other, and the “Layer Neighbor Scalar” can be used to adjust lifetime of elements which are on/near elements of the neighboring layer.
By default, the bottom layer has a high affinity to the top, and the top layer has a some (but not as much) affinity in return.
Another addition is the “likeness” scalar. Likeness is defined as the degree to which one element is like another. In this visualization likeness is determined by color. The “Layer Neighbor Likeness Scalar” adjusts the lifetime of elements based on how like they are to nearby elements on the neighboring layer.
By default, the top layer has a high affinity for the bottom’s color, but the bottom doesn’t care about the top’s color at all (and so its color will drift aimlessly).
And finally “Color Drift” can be used to adjust the degree to which the color of new elements can diverge from its parents. This has always been hardcoded, but can now be adjusted separately across the different layers.
In the default configuration the top layer will (eventually) converge to roughly match the bottom both in shape and color. When I first implemented the likeness scaling I thought it was broken, because the top would never converge to the bottom’s color.
What I eventually realized was that the top must have a higher color drift than the bottom in order for it to do so, otherwise the top would always be playing catchup. However, if the drift difference is too high then the top layer becomes chaos and also doesn’t really follow the color of the bottom. A difference of 10 (degrees out of 360) is seemingly enough.