I'm attempting to create a node tree using the Animation Nodes addon to have automatically scaling "Reaction Control System" plumes on any arbitrary mesh.
Essentially, I am hoping to create a single "RCS Plume" object (in my test case, a simple cone), which is then instanced via the object instancer node to occur once per face, with its local z axis facing along the normal of each face. After that, I run the object list of each "plume" through a loop that is supposed to scale each plume depending on the acceleration (currently only rotational, to make things simpler in my test cases), using ClockMender's My-AN-Nodes Object Speed & Acceleration node.
However, I've only been able to get all the plumes to scale the same amounts simultaneously, or to not scale at all. Is this something that's possible with Animation Nodes and Blender?
My attempts so far are:
The uppermost nodes, creating the instances of the cones.
The nodes being used to calculate the scale when provided the value of one axis on the current, previous, and previous previous frames.
The loop itself, and where I suspect the issue lies.
Specifically, I'm unsure as to why all three object transform inputs are providing the exact same value from their rotation output, given that each should be giving a different frame. (The "Use Current Transforms" option on the two using offsets is unchecked). If instead of giving the loop a object list of each plume, I instead give it the single object that the plumes are being created on, the rotation values are different, as expected. However, this results in the same scaling occurring to each plume regardless of position, as mentioned above.
Finally, a view of my test setup:
The cube is the object that the cones are being created on, and the selected objects are the cones, currently stuck at a local z scale of 0.
My desired result would consist of each cone only scaling when it is tangent (this may be the incorrect term, apologies) to some component of the rotation, and not on the half of the object that is in the direction of motion. Additionally, the scaling would be in proportion to the acceleration, up to cap. Effectively, I would like it to appear as if the cones "firing" are the cause of the rotation, and eventually translation.
Edit 2018-03-11 13:59 EDT: To better explain the effect I'm looking for I've created a small animation manually doing what I'm hoping to do automatically. In the dynamic version I would want a cone to scale to "slow down" the cube on the appropriate/opposite side, rather than it stopping itself.
Edit2 2018-03-13 00:28 EDT:
I've come up with a partial solution, which doesn't fulfill all of my initial requirements, but does come fairly close, and most importantly, looks decent. For reference to anyone looking to implement a RCS animation in blender with animation nodes in the future, who are looking for a (potentially useful) starting point, I've uploaded the file to Blend-Exchange: (Look at NodeTree.001, I forgot to rename it before uploading)
This solution seems computationally heavy, in addition to not being completely physically accurate. It requires each object being instanced to become an RCS plume to have fcurves for translation and rotation. This is accomplished via Animation Nodes' Set Keyframes node, inside a loop.
The RCS effect only fires appropriately for rotation, but if translating and rotating, it will take the translation into account. This can be removed by removing the translational acceleration frame in the nodegroup.
The key to getting only one side to fire, instead of the opposite firing at the same time, was to multiply the scales for each plume by the normals of each face of the base mesh. I've absolutely no idea why this seems to mostly work.
Again, this is not physically accurate, and doesn't take relative position on the base object into account, but hopefully may be useful to someone in the future.