StickyChain - pose tool [Released]
StickyChain is a plug-in to pose a sequence of nodes in a catenary curve. Imitating a rope hanging from two points.
The primary intended use of StickyChain is to help in the posing of rigged ropes or chains.
While the StickyChain is ON, the catenary shape will update automatically when the StickyChain(or its parents) is moved and or when the ChainRoot (or its parents) is moved and or when the scene time is manually changed. The StickyChain will not update when the ChainEnd node or any of the nodes following ChainRoot to ChainEnd (i.e. excluding ChainRoot), are moved manipulated.
However, that movement will be overwritten/lost when StickyChain is triggered by movement of the ChainRoot or the StickyChain node. The stickyChain can be stopped from overwriting rotations on those chain node by simply turning the StickyChain OFF. Or alternatively lock the rotation property of those nodes.
StickyChain will not change the local orientation of a locked property, however locked properties may impede StickyChain’s ability to orient subsequent nodes so that the ChainEnd aligns with the position of the StickyChain node.
Important Limitation
StickyChain does not include any model or shape. StickyChain is designed to work with rigged figures. Figures that you own or create.
StickyChain is a pose tool designed to manipulate rigged figures’ node orientation.
StickyChain does not create or alter any morphs. StickyChain creates standard animation keys on the figure’s bones/nodes. StickyChain takes no part in and is not required for PlayBack of the animation keys that it creates.
StickyChain only works with rigged figures that have bone/nodes arranged in a recursive parent-child arrangement. The parent-child hierarchy provides a simple way for StichyChain to work out which nodes are in the chain and the order that they should be arranged when posing the node in a catenary curve.
StickyChain will not work with unrigged or figures rigged with bones/nodes arranged in parallel (brother-sister).
The product includes a manual, which after the plugin has been installed can be found in the DAZStudio4 install folder "/docs/Plugins/StickyChain/StickyChain Manual.pdf". Please read.
Demonstration Videos:
StickyChain plugin - part 1 - Creation and movement
StickyChain plugin - part 2 - Animation
StickyChain plugin - part 3 - Multiple chains
StickyChain plugin - part 4 - Example
Registration: Please make sure that you input your registration key. The plugin has a 14 day trial period to allow time for you to input your registration key.
Update: 25/Feb/2023
The StickyChain context menu item can now be shown or hidden as required.
The default is for the StickyChain menu item to be visible in the Viewports Context menu(right click) when the "Universal" or "Node Selection" or "ActivePose" view tools are in use.
If you wish to have the StickyChain context menu visible with other view tools then the attached script(StickyChainContextMenu.dsa) can be used to set/change registry keys that control the StickyChain's context visiblity. The registry keys are only read on application start so an application restart before changes will take effect.
The full details can be found in the updated user manual.
NOTE: The script is not included with the plugin distribution. The code for the script is included in the updated manual.
Details regarding the other fix in the update can be found in the StickyChain Plugin Product Notes page.
Comments
Interesting plugin.
As I understand, one can only move ChainRoot.
Does it have some collision detection?
For example: can one wrap a chain over some other object?
https://www.daz3d.com/stickychain-plugin
Is it possibly to create some simple rigged chain directly in Daz Studio?
If so, how to do it?
Sorry no collision detection in this version.
The nodes in the chain can be moved manually (or by any other method) at any time.
However, when the StickyChain is triggered, it will reposition the nodes in the chain by writing(or overwriting) their current rotation key values.
Turning the StickyChain OFF will prevent it from repositioning the nodes.
StickyChain means that you can move the chain by moving either end. The ChainRoot or the ChainEnd
i.e. moving the ChainEnd by moving the StickyChain node.
Except for the ChainRoot node (and the StickyChain node), moving any of the other nodes in the chain will not trigger the StickyChain action.
How proficient are you with DAZStudio. For the promo images I created multiple simple primative cube nodes and arranged them in a hiearchy.
Stretching the cubes I could create something resembling a rope bridge. That is a long way short of a rigged chain.
DAZStudio does allow you to manually create a hiearchy of bones(nodes with origin and endpoint) to which you could apply an object (e.g.model/mesh-shape) of a chain link to each.
StickyChain does not require the chain nodes to be a single skeleton(figure).
It can pose multiple figures as long as they can be arranged in a parent child hierarchy.
If you had a model(obj) of a single chain link and copied(imported) it multiple times and then arranged them in a parent-child hierarchy you could use that with StickyChain. After you arranged the link objects into a heirarchy you just need to translate each to position each end to end with its parent link. For best results you may need two obj's, one rotated 90deg longitudinally to the other to give the impression of how links fit together.
Does sticky chain work with rotation tool? If I rotate one end of a 10 link chain 100-degrees will each link in the chain then be rotated 90, 80, 70, 60, 50, 40, 30, 20 and 10 degrees respectively?
Just started playing with this tonight, it looks amazing. OK, there's all sorts of things it doesn't do, like collision detection, but it's brilliant at the thing that it does, and it's going to be super useful. Previously, if I've wanted to pose a slack rope between two points, I've just applied the same amount of bend to every segment of the rope, it's OK but looks kinda "off." Now I can get the perfect parabolic shape with a couple of clicks.
I found a typo in the pdf guide. On page 11 (and a couple of other places) it says
That's backwards. The ChainRoot must be an ancestor of ChainEnd (or ChainEnd must be descendant of ChainRoot).It gets it right on page 14 though.
Awesome product!
No.
When either the ChainRoot or StickyChain node are moved (triggering the StickyChain action), it will then try to rotate each node in the chain individually, to position each node into a catenary curve working from ChainRoot to ChainEnd.
The amount of rotation applied to each node will depend on the global position of its child node, as each node is rotated to position its child node
i.e. StickyChain rotates the first node in the chain to position the second node.
Troubleshooting:
RE: USING MULTIPLE FIGURES(SKELETONS) IN A SINGLE CHAIN
StickyChain can work with multiple figures in a single chain.
As long as the "chain" is a sequence of parent-child arranged nodes from ChainRoot to ChainEnd.
i.e. The ChainRoot is in the first figure and the ChainEnd is a second figure. The second figure would be parented to a node below the ChainRoot node in the first figure. The chain is then the sequence of nodes in the first figure from ChainRoot to the node under which the second figure is parented and then the second figure skeleton and its nodes to the ChainEnd node.
Any Skeleton node in that sequence will be treated as an individual node in the chain. This can cause gaps in the visual appearance of the chain, as StickyChain treats the distance between the skeleton origin and origin of the next node under the skeleton the same as any other link in the chain.
Resolution:
Grammer was never my best subject. I will include the correction to the document in any future update.
I have found that there is a huge difference between developing for one’ self and developing a product. Unfortunately software and 3D is a parttime interest, which limits what I can deliver and support as a product.
Thank you.
I'm not having much luck with this so far. I tried the rope from Strings. It ended up in a big twisted mess. I did read the PDF, but I didn't find a solution to this problem.
I tried it on the tail of the Hivewire Cat. The tail just went straight between his legs.
I do not own a copy of "Strings". I will investigate and see if I can find out what is wrong. !!Correction I do actually own a copy!! I will investigate and get back to you.
Looking at the image I see that the global position of of the StickyChain node("HiveWireHouseCat Tail18 StickyChain") is sitting at the origin(0,0,0).
The StickyChain function is to try to put the ChainEnd node at the same location as the StickyChain node(ie.your "HiveWireHouseCat Tail18 StickyChain").
As the tail is not long enough the tail just ends up pointing straight towards it.
Solution: Drag the location of "HiveWireHouseCat Tail18 StickyChain" to somewhere closer to the tail.
Interesting.
Solution: Drag the StickyChain node("Rope fibers top StickyChain") away from the position you currently have it in. The ChainEnd will follow the StickyChain's location and should then be able to position the node in the rope in a catenary curve between the "base and the position of the StickyChain node.
Root cause: You have your StickyChain node("Rope fibers top StickyChain") and its ChainRoot("base") both positioned at the same location. Which should not normally cause any problem, In such a situation StickyChain actually positions the ChainEnd node at a slight offset to the ChainRoot position.
For that model, the offset is not enough. The result is when the StickyChain tries to position the nodes into a catenary curve it ends up creating a spiral instead.
Thank you! That was the help I needed. It is working much better now. My last question about the rope is why is there the kink at the beginning?
The kink is due to the rotation limit of the "base" node. i.e XRotate +-120deg
Solution: The best solution to work around rotation limits, is to rotate a parent node thus changing the global rotation of the node that has the limit.
In your rope scene, select a parent node of "base", Which is the "Rope" node.
Try changing the "X Rotate" value. I found that a value of 95 removed the kink for me.
Root cause: The StickyChain function rotates each node in the chain to try to position its child node's position. It does the best it can working within the rotating limits set for the node.
If it hits a limit, it does the best it can and then moves on to the next node and recalculates the curve again from there.
Rotating the parent node works because it changes the effective global rotation of the node. Thus the required rotation may then be achievable working within the rotation limits.
That was very helpful!
NOTE: The parent node that you select to rotate, must be one that is outside of the chain.
Changing the rotation of one of the chain's nodes will be futile, as the StikyChain function will overwrite the rotation value that you set.
If your chain is just a set of individual nodes(arranged in a hiearchy) and the top node has no parent node.
Then add a null node to your scene.
Move the null node to the same location as the top node.
Parent the top node to the null node.
Then rotate the null node.
Suggestion: Looking at your HivewireCat scene, I see that the StickyChain node("HiveWireHouseCat Tail18 StickyChain") is not parented to anything.
Might I suggest that you parent it to the cat's pelvis.
That way if you animate the cat the StickyChain node will follow the cat. Rather than pull the tail straight as the cat moves forward.
Unfortunately when you parent the StickyChain node to the pelvis, DAZStudio will initially reposition it to the pelvis's position. So you will need to drag the StickyChain node back to a position behind the cat.
StickyChain does not have any inertia properties, however with the StickyChain parented to the pelvis, animating the translation properties of the StickyChain can mimic it a little.
The StickyChain functionality is suspended during PLAYBACK. After you have applied or changed the cat's animation, to update the catenary curve simply go to the different frames while StickyChain is turned ON. Or use the "Range update StichyChains" menu action to create/update all frames from the current frame to the last frame in the current play range.
I don't do much animation, but thanks for the additional tips. I'll try to keep that in mind. Parenting to the Pelvis seems logical.
Hey, I'm getting the hang of this thing (pun intended).
Wow, that looks very nice.
I need to test it for myself, after the recent sales are gone.
@surreal, I wanted a longer tube (from the Strings product again) so I scaled the tube to 300% in the Y direction. When I run the StickyChain, the tube becomes kinked. Is there a workaround for this?
The same StickyChain tube works fine when the Y scaling is 100%.
Here is an interesting observation, maybe related to the issue above. When I scale the tube 300% in the X axis (instead of the Y Axis), it visible shows that the StickyChain rotates alternating tube segments around the Y axis in very different directions. One will be positive and the next will be negative, then positive, then negative,,,
I notice with the tube alone (without StickyChain) when scaled up, any rotation of the tube's node causes the same distortion.
I will need to investigate to see if there is a workaround.
Workaround: Don't scale the FIGURE(i.e the "Tube" node). Leave it at 100%.
Scale the bone nodes(the "base" to "tip" nodes).
Select all the bone nodes under Tube(but do not select the Tube node itself) then set the Y scale on them to 300%.
That works wonderfully well! Thank you so much for the scaling advice. I'm updating my "real" image now and I'll attach it here when it is done.
Well, it took me a few days to get around to testing it, but I'm generally pretty happy.
I combined it here with one of SickleYield's dForce ropes to first get it in about the right place, then let dForce handle the collisions. (Making for a much shorter and more stable simulation than having dForce do all the dangling). For a final version I'd pose the end few bones of the chain manually, but this is still a massive improvement over having to do this whole process manually.
I do however have one feature query/request - is it possible to remove StickyChains from embedding itself in every viewport right click menu? It even shows up on the menu for things like the geometry editor, joint editor and spot render tools, which is just unnecessary clutter; I don't need to be able to instantly make a sticky chain when I'm trying to weight paint a new geograft, and I'd be perfectly happy if the options were only available through a top menu. Perhaps some people will want it all the time, but if there is some configuration file I can edit, that would be welcome. (Alternatively, just reducing it to only being on posing tool menus would be a good compromise, I'd say).