Skip to main content

On Sale: GamesAssetsToolsTabletopComics
Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

Complete feature list (last updated 06/01/2023) Sticky Locked

A topic by TwistedTwigleg created Dec 13, 2020 Views: 1,406 Replies: 1
This topic was locked by TwistedTwigleg Dec 26, 2020
Viewing posts 1 to 4
Developer (6 edits)

Version 1.0.0:

  • Twisted_Skeleton3D node and Twisted_Bone3D nodes. These nodes make it simple to edit bone transforms both in Godot, and in the Godot editor.
    • Twisted_Bone3D nodes can follow and override the global poses of any bones in a Godot Skeleton. You can use the normal transform gizmo to edit poses directly in the Godot editor. Translation, rotation, and scaling all supported.
      • This makes it easier than ever to animate 3D models entirely in Godot! You can combine the Twisted_Bone3D nodes with Godot's powerful AnimationPlayer node to make stunning hand-done animations.
    • Twisted_Bone3D nodes all face in the same direction: It's always the negative-Z axis, the default Godot forward direction, that is forward for all Twisted_Bone3D nodes regardless of the 3D model used!
      • This is thanks to the new Twisted_Skeleton3D node, which takes the bone rotations and converts them to the correct forward direction for the skeleton. This process is done automatically, but you can also manually tell the Twisted_Skeleton3D node which direction is forward for maximum control.
      • This makes writing anything that works with bones, like IK, much easier as there isn't any guess work or special considerations needed to be taken into account for bone forward directions.
      • It also allows you to use the Transform class's look_at function with bones!
    • Only add the bones you need. You do not have to have Twisted_Bone3D nodes for every single bone in the Skeleton. You can pick and choose which bones you need for maximum performance.
      • You do need to make sure the node tree is correct, but outside of that, there is no constraints. For example, the head bone needs to be a child of the neck bone if you are going to override the head pose. However, if the neck bone is only following the bone pose, it does not have to be a child of the spine bone! Only bones that are overriding have to have the proper bone/node tree layout.
    • All Twisted_Bone3D nodes have a length property, as it's needed for several IK solvers so it knows how long the bone is.
      • This is automatically calculated for you, with only leaf/tip bones needing manual input! You can also override the automatic system and manually input the bone length if you need.
  • New and enhanced IK for 3D. Each IK algorithm is in a modifier node that exposes properties that change how the IK algorithm works.
    • (2D coming in a future update! For now the plugin only supports 3D)
    • Mix and match IK to get the procedurally animated result you are looking for. Each IK modifier node is standalone and they are designed so they can be used on their own or together. This is especially useful for full body IK, which requires using multiple IK solvers.
    • Over 5 IK solvers so far! This includes well known IK solvers like FABRIK and CCDIK.
      • The IK solvers are listed in more detail a little further below.
    • The base IK modifier class is fully expandable, allowing you to create your own IK modifiers.
    • IK modifiers currently only work with the new Twisted_Bone3D nodes.
  • The following IK solvers are fully implemented and working in 3D: LookAt, CCDIK, FABRIK, TwoBoneIK, Jiggle, and CurveIK!
    • LookAt - Rotates a bone to look at a target node. This node is extremely helpful for making a character look at an item of interest. Example uses cases for LookAt are rotating heads and eyes of a 3D character to look at the player.
      • Additional rotation adjustments can be added! For example, you can add bone twist, or adjust the final result slightly so the bone is looking at the target with a small offset.
    • CCDIK - Coordinate Cyclic Decent Inverse Kinematics (CCDIK) is a well-known and utilized IK solver. CCDIK works by rotating bones on a single hinge, going through a chain and applying hinge rotation to each bone. CCDIK works great with angle constraints and is very performant. Example use cases for CCDIK are rotating a turret to face the player, moving robotic arms, or really anything that can use hinge-like joints.
    • FABRIK - Forward And Backwards Inverse Kinematics (FABRIK) is an extremely well-known and utilized IK solver. FABRIK works by solving first in a forwards pass, and then in a backwards pass. This gives FABRIK a very natural looking result without being too costly for performance. FABRIK is one of the most popular IK solvers in game development because of its power and flexibility. Example use cases for FABRIK are for the arms of a FPS character, the legs of a character so they can stand on uneven terrain, or almost anything!
      • Godot's SkeletonIK node uses FABRIK! FABRIK is a really solid and reliable IK solver.
      • Every FABRIK joint in Twisted IK 2 can have its own magnet position and additional rotation, for maximum control and flexibility.
      • Currently FABRIK does not have constraint support. This may come in a future update though!
    • TwoBoneIK - A IK solver that uses the law of cosigns to find a set of angles for both bones so the tip of the second bone reaches the target position. Two Bone IK is a great IK solver for arms and legs, as it's faster than FABRIK but gives similarly natural looking results. Example use cases for Two Bone IK is for arms and legs of a character, the arms for VR, or really any joint that is composed of just two bones.
      • An optional pole node can be used to control the direction that the two bones bend in. This is extremely helpful for getting a consistent, controlled result every time.
    • Jiggle - A IK* solver (technically not IK...) that moves a series of bones using a simplified physics algorithm. Jiggle is designed to give bones a wiggly bit of motion in a controllable way. Example use cases for Jiggle are strands for hair, edges of clothing, or really anything that needs small, procedurally animation and motion.
      • Jiggle can also detect collision objects in Godot! If enabled, when solving Jiggle will attempt to avoid clipping into collision geometry.
      • * Technically Jiggle is a FK, or Forwards Kinematics, solver. I'm counting it as IK here though because its used and written in a method that is very similar to IK.
      • Can use either a target node, or a target Vector3 direction! Also, can send motion down the chain for more predictable results (less jiggly though) or have each joint calculate its own motion without taking the parent joint's motion into account (more jiggly, especially further down the chain. Harder to control)
    • CurveIK - A IK* solver that manipulates a set of bones so that it follows the path defined in a curve. Using Godot's Path3D node, you can move bones along a curve to get really nice, curvy results with your 3D models. Example use cases for CurveIK are for hair, spider arms/legs, or anything whose position and rotation you want to map to a 3D curve.
      • Can stretch and scale to fit the curve, or just follow without any manipulation! Its a really flexible, but really awesome IK* solver!
      • * Technically CurveIK is a FK, or Forwards Kinematics, solver. I'm counting it as IK here though because its used and written in a method that is very similar to IK.
  • New Twisted_PhysicsBone3D node: Use Godot's physics engine to add physics to the bones in your 3D character!
    • The new Twisted_PhysicsBone3D extends Godot's RigidBody node, giving you access to the familiar API and features.
    • An optional origin offset can be applied so you can position the center of mass of the Twisted_PhysicsBone3D to the center of the bone in the 3D model, giving more realistic physics results.
    • Scaled Skeletons are not a problem with the Twisted_PhysicsBone3D node! Input in the size of the Skeleton and it will dynamically handle scaling, allowing it to be used freely with scaled skeletons and bones.
    • Works with all the Godot 3D physics joints.
    • New Twisted_PhysicsBoneMotor3D node included: Allows for applying forces to a set of bones so that it reaches a target node! This shows one way that the Twisted_PhysicsBone3D node can be used as a dynamic, controllable rag-doll!
      • Dynamic, controllable rag-dolls still need work before they are comparable to offerings in other game engines, but these nodes are a great first step in that direction!
    • The Twisted_PhysicsBone3D only works with the new Twisted_Skeleton3D node.
  • Godot editor plugin included. A Godot editor plugin is included to help give editor-specific functionality to the plugin.
    • Currently the only feature being the ability to quickly create new Bone3D nodes from a new Skeleton without having to make each one manually.
    • More features coming soon!
  • All of the code is written in C#, for fast performance and portability.
    • Because everything here is a plugin, you do not need to build Godot from source or touch any C++ code. Just drop the plugin in your project, build the C# source in Godot, and you are ready to go!
    • No C# libraries or external code used! Its super portable code that should work in any Godot C# project and platform.
    • C# source code included (restrictions apply! Please see FAQ for more info)
    • Fully supports Godot 3.2+, no waiting for Godot needed.
  • All new nodes start with "Twisted_" and use yellow and orange color scheme, so you can quickly find the node you are looking for in the Godot editor.
    • If you want to find one of the new nodes, just search "Twisted_" in the new node search menu and all of the nodes will pop up!
Developer unlocked this topic
Developer (12 edits)

Version 2.8.0:

  • (Godot 4.0 only) Fixed 3D IK not working with negative scales (https://itch.io/t/2862332/ik-solvers-doesnt-work-after-changing-scale-to-negativ...)
    • Now using a negative scale will not always cause it to fail. It is not recommended to use negative scales, but it should now be doable.
  • (Godot 4.0 only) Added setting to change the basis direction for all look_at based IK solvers in 3D. (https://itch.io/t/2891678/twisted-lookat-bugfix)
    • This helps fix issues where the default basis direction of Y leads to twisting and otherwise undesired results. For the majority of use cases, a basis direction of Y is recommended, but there are cases where it isn't the correct approach. Now it can be selected on a per-bone basis on all 3D IK solvers that use look_at.


Version 2.7.0:

  • Godot 4.0 support added! Godot 4.0 support added as new, separate downloads.
  • Adjusted example project to work with Godot 4.0.


Version 2.6.0:

  • Adjusted Twisted_Skeleton3D and Twisted_Bone3D code so they can function without a Skeleton node, allowing for IK use without the requirement of a rigged mesh
  • Bug fixes - fixed issue in several 3D IK solvers where scales could become infinite if the parent bone is animated or scaled - fixed issue in several 3D IK solvers where they would not always work correctly with bones that have -Z as the forward axis



Version 2.5.0:

  • Added Twisted_ModifierVelvet3D and Twisted_ModifierVelvet2D! Uses Velvet integration and can be used similarly to Jiggle bones
  • Bug fixes - fixed issue where joint count would suddenly become zero on project rebuild - fixed issue where Twisted_Skeleton3D would not always be in sync


Version 2.4.0:

  • Added Twisted_DuoBone3D and Twisted_DuoBone2D. Both are faster, simpler alternatives to TwoBoneIK that give the same great results.
  • (NOTE) Twisted_TwoBoneIK3D is now deprecated and will be removed in a future release
  • Twisted_PhysicsBone3D nodes can now track ordinary Twisted_Bone3D nodes. Two modes available, one that requires using Godot Joint nodes (not 1:1 but allows fully physics interaction) and one that uses code to keep joints together (cannot react to physics but can influence other physics objects)
  • Twisted_ModiferStack3D now has an option to turn its execute on in the _ready function, so you can have a scene instantly start IK without having to have it active in the Godot editor. (Will be added to Twisted_ModifierStack2D soon!)
  • Minor bug fixes

Version 2.3.0:

  • Added Twisted_PhysicsMotor2D and the look_at_target function to Twisted_PhysicsBone2D! This should allow for better, semi-controllable physics bones in 2D

Version 2.2.0:

  • Added Twisted_PhysicsBone2D!
  • Added Twisted_ModifierSliderJoint2D and Twisted_ModifierSliderJoint3D!
  • Fixed bug in 3D FABRIK and TwoBoneIK that causes it to give different results when entire assembly is rotated
  • Added utility script folder to example project

Version 2.1.0:

  • Added initial 2D Constrained FABRIK support. Isn't totally where I want it, but its workable and shows promise. Will likely continue to work on in the future.
  • Added new options to CCDIK
  • Added documentation for 2D Skeleton setups

Version 2.0.0:

  • 2D Support added! All 3D IK modifiers have been implemented in 2D
  • Added a new Twisted_Bone2D node, which allows for IK use. Twisted_Modifier2D and Twisted_ModifierStack2D have also been added.
  • Added Twisted_ModifierLookAt2D, Twisted_ModifierCCDIK2D, Twisted_ModifierFABRIK2D, Twisted_ModifierCurveIK2D, Twisted_ModifierJiggle2D, and Twisted_ModifierTwoBoneIK2D!

Version 1.3.0:

  • Jiggle can now optionally use a Spatial-based node as a reference node for the input target vector. This allows you to set the target vector relative to the node, making it possible to rotate the target vector by rotating the reference node.
    • In the video above, the hips bone is used as the reference node, so when the hips move, so does all of the jiggle bones. This should make it possible to use the Jiggle modifier with bone-based animations, real-time or exported from software like Blender.
  • Jiggle can now use Quat-based rotation. This has some limitations, like no rotation offset, but it does give different results which may be desired.
    • This option is disabled by default! Initially I added it because it helps reduce twist, which was especially problematic for the dress used in the video above, but later adjusted the LookAt code, so now both are about equal in not twisting bones.
    • Quat-based rotation is accumulative, it doesn't override the rotation like LookAt does. This can make it more suitable for certain applications.
  • The Jiggle modifier now correctly calculates gravity based on the rotation of the Twisted_Skeleton3D node, making it always point in the right direction.
  • Added a Quat-based LookAt function to Twisted_3DFunctions for easier use. FABRIK and Jiggle both now use this function.
  • Added a function called "get_bone_global_pose" to Twisted_Bone3D, which will return a Transform that is the global pose data from the Skeleton node that the bone is assigned to.
    • Optionally can convert the global pose to world space, which is configurable through a boolean argument (on by default).

Version 1.2.0:

  • Added initial documentation pages! Currently just the landing page for the documentation and Skeleton setup, but more will be added over time! All documentation is provided in Markdown files in a folder called "Documentation" along with the plugin downloads.
  • The 3D jiggle modifier can now use a Vector3 direction as the target instead of a Spatial-based node.
  • The 3D jiggle modifier has new properties that allow for sending motion down the chain for more predictable results. This makes the joints less jiggly, but more predictable and controllable. Really depends on the use, but this option should help for cases where joints further down the chain become too jiggly and hard to control.

Version 1.1.0:

  • Class reference documentation for all current code!
    • All custom public functions and almost all public variables now have class reference documentation.
    • This is especially helpful for intellisense!
    • Class reference documentation is directly in the source code for portability (was going to be external files, but I couldn't get it working...)
Developer locked this topic