POP Interaction Forces HDA
An HDA implementation of DreamWorks Animation's paper "Shaping Particle Simulations with Interaction Forces" (Can Yuksel et al.)
This tool enables detailed and art-directable particle motion and shaping derived from the existing intrinsic qualities of the particle field.
I referenced Juraj Tomori's (https://github.com/jtomori/) fantastic implementation of the paper as I was learning the theory, but I started from scratch and took a different approach on some of the core mechanics such as computing the LDNP centers and eigenvectors, and added some features to align with the design and UI of other POP nodes.
To use this tool effectively, it is helpful to broadly understand how it works under the hood. First, each point in the point cloud looks at all of its neighbors within a given radius. Next, the average/mean of all of the neighbors is marked as the "LDNP center"/center of mass. Then, the local axes of the cluster are calculated so that the X/U axis is aligned down the longest part of the cluster, the Y/V axis is aligned to the second longest, and the Z/W axis is aligned to the shortest part of the cluster. After that, the local axes are "stabilized" to prevent flipping between frames. The X axis is stabilized so that it points more towards the velocity vector of the point than it does away from it, the Y axis is stabilized to a user defined "Eigen Y Target" vector, and the Z axis is reconstructed from those.
Once the local axes have been found and stabilized, they can be used to create custom forces based on user parameters:
The first force option is "To Center", which is simply a force that directs the particle towards the center of mass of its neighbors.
The next force is "Along Axes", which allows you to push/pull particles in the direction (or the opposite direction) of each local axis.
"To Axes" allows you to move particles towards (or away from) the nearest point on the local axis from the LDNP center.
The final force, "Around Axes", moves the particles so that they orbit around the local axes.