StickyChain - pose tool [Released]

surrealsurreal Posts: 169
edited February 2023 in Daz PA Commercial Products

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.

Paren-child arrangement.jpg
195 x 203 - 15K
DogLeash parent-child arrangement.jpg
404 x 423 - 35K
Does not work with Unriged arrangement.jpg
230 x 224 - 10K
Does not work with adjacent node hierarchies.png
246 x 245 - 13K
Does not work with parallel arrangement.jpg
239 x 235 - 16K
dsa
dsa
StickyChainContextMenu.dsa
9K
StickyChainContextMenu.jpg
256 x 256 - 17K
Post edited by surreal on
«13

Comments

  • ArtiniArtini Posts: 9,510

    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?

     

  • ArtiniArtini Posts: 9,510

    Is it possibly to create some simple rigged chain directly in Daz Studio?

    If so, how to do it?

     

  • surrealsurreal Posts: 169

    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.

  • surrealsurreal Posts: 169

    Is it possibly to create some simple rigged chain directly in Daz Studio?

    If so, how to do it?

     

    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.

  • surrealsurreal Posts: 169
    edited January 2023

    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.

    Post edited by surreal on
  • FirePro9FirePro9 Posts: 456

    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

    The ChainEnd must be an ancestor of ChainRoot and the StickyChain node must not be an ancestor of either.

    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!

  • surrealsurreal Posts: 169

    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?

     

    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.

  • surrealsurreal Posts: 169

    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: 

    1. If you are able to edit the figure and change the position(translation) of the next node, then position the next node at the origin of the skeleton node. StickyChain will still treat the skeleton node as a link in the chain, however as there would be no (or little distance) between skeleton node position and the next node position there would be no visible gap in the chain.
       
    2. If you are not able to edit the figure, then you could fake it by adding a seperate object to the skeleton which would cover the gap between skeleton origin and next node. The object should be parented to the sekeleton but not in the chain sequence. 
  • surrealsurreal Posts: 169

    "The ChainEnd must be an ancestor of ChainRoot and the StickyChain node must not be an ancestor of either."

    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!

    blush 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.

     

  • barbultbarbult Posts: 24,403
    edited January 2023

    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.

    Screenshot 2023-01-28 135720.jpg
    2125 x 1381 - 242K
    Post edited by barbult on
  • barbultbarbult Posts: 24,403

    I tried it on the tail of the Hivewire Cat. The tail just went straight between his legs.

     

    Screenshot 2023-01-28 155245.jpg
    1680 x 1397 - 265K
  • surrealsurreal Posts: 169
    edited January 2023

    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 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.

     

    I tried it on the tail of the Hivewire Cat. The tail just went straight between his legs.

    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.

    Post edited by surreal on
  • surrealsurreal Posts: 169
    edited January 2023

    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.

    laugh 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.

     

    Post edited by surreal on
  • barbultbarbult Posts: 24,403
    edited January 2023

    Thank you! That was the help I needed. It is working much better now. yes My last question about the rope is why is there the kink at the beginning?

     

    Screenshot 2023-01-28 194158.jpg
    1832 x 1613 - 238K
    Screenshot 2023-01-28 194800.jpg
    1891 x 1561 - 310K
    Post edited by barbult on
  • surrealsurreal Posts: 169

    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. 

  • barbultbarbult Posts: 24,403

    That was very helpful!

     

    Screenshot 2023-01-28 203729.jpg
    1603 x 1573 - 218K
  • surrealsurreal Posts: 169
    edited January 2023

    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. 

    Strings example rotation limit effect.jpg
    1542 x 995 - 291K
    Strings example rotation limit resolution.jpg
    1545 x 993 - 332K
    Post edited by surreal on
  • surrealsurreal Posts: 169

    Hivewire Cat

    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.

  • barbultbarbult Posts: 24,403

    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.

  • barbultbarbult Posts: 24,403
    edited January 2023

    Hey, I'm getting the hang of this thing (pun intended).wink

    G9 Freja with Boa.jpg
    2000 x 2600 - 3M
    Post edited by barbult on
  • surrealsurreal Posts: 169

    laugh

  • ArtiniArtini Posts: 9,510
    edited January 2023

    barbult said:

    Hey, I'm getting the hang of this thing (pun intended).wink

    Wow, that looks very nice.

    I need to test it for myself, after the recent sales are gone.

     

    Post edited by Artini on
  • barbultbarbult Posts: 24,403
    edited February 2023

    @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%.

     

     

    Screenshot 2023-02-04 000415.jpg
    635 x 607 - 90K
    Screenshot 2023-02-04 000323 scaled tube sticky chain.jpg
    2056 x 1767 - 335K
    Post edited by barbult on
  • barbultbarbult Posts: 24,403

    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,,,

     

    Screenshot 2023-02-04 000323 scaled tube X axis sticky chain.jpg
    2031 x 1548 - 278K
  • surrealsurreal Posts: 169

    "...tube to 300% in the Y direction. When I run the StickyChain, the tube becomes kinked. ..."

     

    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.

    Tube scaled Y-300 manual rotation.jpg
    1545 x 941 - 215K
    Tube scaled Y-300.jpg
    1298 x 1470 - 215K
  • surrealsurreal Posts: 169

    "...tube to 300% in the Y direction. When I run the StickyChain, the tube becomes kinked. ..."

    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%.

    Donot scale the figure.jpg
    2248 x 1261 - 301K
    Scale just the bones.jpg
    2245 x 1249 - 359K
  • barbultbarbult Posts: 24,403
    edited February 2023

    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.

    Dog and Retro UFO_002 StickyChain scale fixed_Default Camera.jpg
    2000 x 1500 - 2M
    Post edited by barbult on
  • Matt_CastleMatt_Castle Posts: 2,595

    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).

Sign In or Register to comment.