96 lines
7.5 KiB
Plaintext
96 lines
7.5 KiB
Plaintext
========================================================================================================================
|
|
-------------------------------------------------------- BIO IK --------------------------------------------------------
|
|
========================================================================================================================
|
|
Hello! First of all, thank you for your interest and trust in this asset! I hope (and believe!) you will not be disappointed. :)
|
|
|
|
Everything you need 'BioIK' component. Add it to your character, and add joints and objectives wherever you like. I suggest you
|
|
take a look at the various demo scenes to get a quick understanding of how it all works! Note that the online step-by-step tutorial
|
|
is still online, it was much more complex at that time and is now outdated, but can still be used to get an impression about the concept.
|
|
If you are happy with this asset, please let me know! If you use it for scientific research or related purposes, I'd be glad
|
|
if you reference my corresponding publications on my website. If you have any questions or suggestions for improvements,
|
|
just contact me. If you experience any bugs or unexpected behaviour - please let me know! I will fix it as soon as possible
|
|
since I'm very interested in consistently improving this asset. Hence, further updates will frequently come! :)
|
|
|
|
--- HOW TO SETUP YOUR KINEMATIC MODEL ---
|
|
#Step 1: Provide an arbitrary model with a hierarchical structure of game objects.
|
|
#Step 2: Add the 'BioIK' component somewhere to your character. You should then see the controllable segments connected by chains.
|
|
#Step 3: Add joints and objectives where desired. Joints define the motion, Objectives define the goals to be reached by the optimisation.
|
|
Note that each segment can only have one joint, but multiple objectives at the same time. However, be aware that a higher number
|
|
of objectives naturally increases the complexity, but can also help to constrain the motion or possible solutions.
|
|
#Step 4: Fill the parameters for the objectives (i.e. Transform references).
|
|
#Step 5: If desired, play around with the settings parameters for the algorithm, or the weights for the objectives.
|
|
#Step 6: Everything should be fine now. Go play around and see the magic happen! :)
|
|
|
|
--- PARAMETERS ---
|
|
===BioIK===
|
|
Generations (Recommended: 1-3):
|
|
The number of generations (iterations) per frame. Increasing this parameter linearly increases the computation time.
|
|
Individiuals (Recommended: 40-120):
|
|
This is the number of individuals (potential solutions) that are heuristically created and evolved during each evolutionary generation.
|
|
This number should always be significantly higher than the elitist individuals.
|
|
Elites (Recommended: 1-3):
|
|
This is the number of individuals that are currently most successfull among the population. Those are tracked and are
|
|
exploited to track multiple solutions (local extrema) simultaneously. 1 Elite will cause strictly unimodal solutions
|
|
but might get stuck in suboptimal extrema. Multiple elites are likely to cause small fluctuations due to multimodal optimisation.
|
|
For simple kinematic structures, one elite should be sufficient. If you observe the algorithm getting stuck, try using two or three elites.
|
|
Smoothing (Recommended: 0.1-0.5):
|
|
This simply blends between the last joint positions and the current joint positions, introducing a smoother transition between postures.
|
|
Animation Weight:
|
|
This factor weights animation into solving IK by manipulating the reference frame and then by post-modulating the animation.
|
|
Hence, 0 = zero animation added and 1 = full animation added into IK.
|
|
Note that this factor also shifts the predefined joint limits in direction of the animation offset.
|
|
Animation Blend:
|
|
This factor blends between the animation posture and the evolved IK posture, where 0 = IK posture and 1 = animation posture.
|
|
Motion Type:
|
|
Realistic - Creates smooth motion to the target configuration depending on acceleration and velocity.
|
|
Instantaneous - Immediately assigns the target configuration.
|
|
|
|
===Joints===
|
|
Anchor:
|
|
The connected anchor to which the motion is relative to.
|
|
Orientation:
|
|
The orientation of the motion relative to the connected body.
|
|
Default Frame:
|
|
This is the reference transformation for computing relative joint motion.
|
|
|
|
X/Y/Z Motion:
|
|
Constrained:
|
|
Use this if you want to use joint limits.
|
|
Lower Limit:
|
|
Assign a lower limit for this joint.
|
|
Upper Limit:
|
|
Assign an upper limit for this joint.
|
|
Target Value:
|
|
This value is controlled by BioIK, but you can also individually set this value if you want and if you turn off solving IK automatically :)
|
|
|
|
===Objective Component=== (See individual files for further description)
|
|
Weight:
|
|
How important is this objective for the optimisation?
|
|
---Position---
|
|
This objective optimises a given target position with XYZ coordinates. The target can either be a transform or a Vector3.
|
|
The maximum error is the threshold for which a solution is considered as converged for this objective.
|
|
---Orientation---
|
|
This objective optimises a given target orientation. The target can either be a transform or a Quaternion.
|
|
The maximum error is the threshold for which a solution is considered as converged for this objective.
|
|
---LookAt---
|
|
This objective optimises a target by looking into its direction relative to the objective. The target can either be a transform or a Vector3.
|
|
The direction vector is defined relative to the objective. The maximum error is the threshold for which a solution is considered as converged for this objective.
|
|
---Distance--- (beta development)
|
|
This objective ensures that the distance from the objective to the target becomes not lower than the given distance threshold.
|
|
---Displacement--- (beta development)
|
|
This objective aims to achieve minimal joint value changes during optimisation, and thus to avoid fluctuations or larger posture changes.
|
|
Note that the weight should typically be chosen comparatively small.
|
|
---JointValue--- (beta development)
|
|
This objective aims to maintain given joint value for a specific joint.
|
|
---Projection--- (beta development)
|
|
This objective projects a transform onto the surface with respect to the normal vector and the projection distance. (Will be integrated into position and orientation soon)
|
|
|
|
|
|
========================================================================================================================
|
|
--------------------------------------------------- ADDITIONAL NOTES ---------------------------------------------------
|
|
========================================================================================================================
|
|
#1 - Please avoid non-uniform scaling. It's the root of all evil and might destroy the IK solutions. The implemented FK solver does
|
|
not consider this mainly for performance reasons.
|
|
#2 - BIO IK NOW USES THREADING - IF YOU ARE USING THE HOLOLENS ON WINDOWS, THERE MIGHT BE SOME ISSUES. IN THIS CASE, PLEASE CONTACT ME!
|
|
========================================================================================================================
|