GameVsJam/3d Prototyp/Assets/UMotionEditor/Manual/InverseKinematics.html

313 lines
19 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="shortcut icon" type="image/png" href="styles/UMotionFavicon.png" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>UMotion Manual - Inverse Kinematics</title>
<link rel="stylesheet" type="text/css" href="styles/theme_styles.css" media="screen">
<link rel="stylesheet" type="text/css" href="styles/treeview_styles.css" media="screen">
<link rel="stylesheet" type="text/css" href="styles/element_styles.css" media="screen">
</head>
<body>
<div class="header">
<div class="headerLogo">
<img src="styles/UMotionLogoHeader.png"></img>
</div>
<div class="headerBlueRight">
<a href="https://www.soxware.com" class="headerLink">soxware.com</a>
</div>
</div>
<div class="versionHeader">
<p class="versionText">Version: <b>1.29p03</b> </p>
</div>
<div class="leftContent">
<div class="leftContentInner">
<div class="leftContentHeadline">
UMotion Manual
</div>
<!-- Tree View -->
<ol class="tree">
<li class="file"><a href="UMotionManual.html">UMotion Manual</a></li>
<li class="file"><a href="Introduction.html">Introduction & Tips</a></li>
<li class="file"><a href="GettingStarted.html">Getting Started</a></li>
<li>
<label for="VideoTutorials"><a href="VideoTutorials.html" class="treeFolderLink">Video Tutorials</a></label> <input type="checkbox" id="VideoTutorials" />
<ol>
<li>
<label for="GeneralTutorials"><a href="GeneralTutorials.html" class="treeFolderLink">General</a></label> <input type="checkbox" id="GeneralTutorials" />
<ol>
<li class="file"><a href="QuickStart.html">Quick Start Tutorial</a></li>
<li class="file"><a href="Lesson1.html">1) Installation & First Steps</a></li>
<li class="file"><a href="Lesson2.html">2) Pose Editing</a></li>
<li class="file"><a href="Lesson3.html">3) Clip Editor</a></li>
<li class="file"><a href="Lesson4.html">4) Curves & Rotation Modes</a></li>
<li class="file"><a href="Lesson5.html">5) Config Mode</a></li>
<li class="file"><a href="Lesson6.html">6) Export Animations</a></li>
<li class="file"><a href="Lesson7.html">7) Root Motion</a></li>
<li class="file"><a href="Lesson8.html">8) Animation Events</a></li>
<li class="file"><a href="Lesson9.html">9) Pose Mirroring</a></li>
</ol>
</li>
<li>
<label for="ProfessionalExclusive"><a href="ProfessionalExclusive.html" class="treeFolderLink">UMotion Pro</a></label> <input type="checkbox" id="ProfessionalExclusive" />
<ol>
<li class="file"><a href="ProLesson1.html">1) Importing Animations</a></li>
<li class="file"><a href="ProLesson2.html">2) Inverse Kinematics</a></li>
<li class="file"><a href="ProLesson3.html">3) Child-Of Constraint</a></li>
<li class="file"><a href="ProLesson4.html">4) Custom Properties</a></li>
<li class="file"><a href="ProLesson5.html">5) IK Pinning</a></li>
</ol>
</li>
<li>
<label for="InPractice"><a href="InPractice.html" class="treeFolderLink">In Practice</a></label> <input type="checkbox" id="InPractice" />
<ol>
<li class="file"><a href="InPractice1.html">1) Our First Animation</a></li>
<li class="file"><a href="InPractice2.html">2) Editing Animations</a></li>
<li class="file"><a href="InPractice3.html">3) Customizing an animation for a RPG</a></li>
<li class="file"><a href="InPractice4.html">4) Unity Timeline & Weighted Tangents</a></li>
</ol>
</li>
<li>
<label for="Jayanam"><a href="Jayanam.html" class="treeFolderLink">Jayanam</a></label> <input type="checkbox" id="Jayanam" />
<ol>
<li class="file"><a href="Jayanam1.html">UMotion Tutorial</a></li>
</ol>
</li>
</ol>
</li>
<li class="file"><a href="HowToCreateBetterAnimations.html">How to create better animations</a></li>
<li>
<label for="ClipEditor"><a href="ClipEditor.html" class="treeFolderLink">Clip Editor</a></label> <input type="checkbox" id="ClipEditor" />
<ol>
<li>
<label for="MenuBar"><a href="MenuBar.html" class="treeFolderLink">Menu Bar</a></label> <input type="checkbox" id="MenuBar" />
<ol>
<li class="file"><a href="MenuBarFile.html">File</a></li>
<li class="file"><a href="MenuBarEdit.html">Edit</a></li>
<li class="file"><a href="MenuBarHelp.html">Help</a></li>
</ol>
</li>
<li class="file"><a href="Preferences.html">Preferences</a></li>
<li class="file"><a href="ImportExport.html">Import / Export</a></li>
<li class="file"><a href="FKtoIKConversion.html">FK to IK Conversion</a></li>
<li>
<label for="MainNavigation"><a href="MainNavigation.html" class="treeFolderLink">Main Navigation</a></label> <input type="checkbox" id="MainNavigation" />
<ol>
<li class="file"><a href="ProjectSettings.html">Project Settings</a></li>
<li class="file"><a href="ClipSettings.html">Clip Settings</a></li>
</ol>
</li>
<li class="file"><a href="AnimatedPropertiesList.html">Animated Properties List</a></li>
<li class="file"><a href="RootMotion.html">Root Motion</a></li>
<li class="file"><a href="RotationModes.html">Rotation Modes</a></li>
<li>
<label for="DopesheetCurves"><a href="DopesheetCurves.html" class="treeFolderLink">Dopesheet / Curves View</a></label> <input type="checkbox" id="DopesheetCurves" />
<ol>
<li class="file"><a href="Dopesheet.html">Dopesheet</a></li>
<li class="file"><a href="Curves.html">Curves View</a></li>
</ol>
</li>
<li class="file"><a href="Playback.html">Playback Navigation</a></li>
<li class="file"><a href="Layers.html">Layers</a></li>
</ol>
</li>
<li>
<label for="PoseEditor"><a href="PoseEditor.html" class="treeFolderLink">Pose Editor</a></label> <input type="checkbox" checked id="PoseEditor" />
<ol>
<li>
<label for="ConfigMode"><a href="ConfigMode.html" class="treeFolderLink">Config Mode</a></label> <input type="checkbox" id="ConfigMode" />
<ol>
<li>
<label for="RigHierarchy"><a href="RigHierarchy.html" class="treeFolderLink">Rig Hierarchy</a></label> <input type="checkbox" id="RigHierarchy" />
<ol>
<li class="file"><a href="IKSetupWizard.html">IK Setup Wizard</a></li>
<li class="file"><a href="MirrorMapping.html">Mirror Mapping</a></li>
</ol>
</li>
<li class="file"><a href="Configuration.html">Configuration</a></li>
<li class="file"><a href="ConfigDisplay.html">Display</a></li>
</ol>
</li>
<li>
<label for="PoseMode"><a href="PoseMode.html" class="treeFolderLink">Pose Mode</a></label> <input type="checkbox" id="PoseMode" />
<ol>
<li class="file"><a href="Tools.html">Tools</a></li>
<li class="file"><a href="Channels.html">Channels</a></li>
<li class="file"><a href="Selection.html">Selection</a></li>
<li class="file"><a href="PoseDisplay.html">Display</a></li>
<li class="file"><a href="Animation.html">Animation</a></li>
</ol>
</li>
<li>
<label for="Constraints"><a href="Constraints.html" class="treeFolderLink">Constraint System</a></label> <input type="checkbox" checked id="Constraints" />
<ol>
<li class="file"><a href="InverseKinematics.html"><b><u>Inverse Kinematics</u></b></a></li>
<li class="file"><a href="ChildOf.html">Child-Of</a></li>
<li class="file"><a href="CustomProperty.html">Custom Property</a></li>
</ol>
</li>
<li class="file"><a href="Options.html">Options</a></li>
<li class="file"><a href="ToolAssistant.html">Tool Assistant</a></li>
</ol>
</li>
<li class="file"><a href="EditInPlayMode.html">Edit In Play Mode</a></li>
<li class="file"><a href="UnityTimelineIntegration.html">Unity Timeline Integration</a></li>
<li class="file"><a href="UMotionAPI.html">UMotion API</a></li>
<li class="file"><a href="ExportingAnimationsFAQ.html">Exporting Animations FAQ</a></li>
<li class="file"><a href="Support.html">Support / FAQ</a></li>
<li class="file"><a href="ReleaseNotes.html">Release Notes</a></li>
<li class="file"><a href="KnownIssues.html">Known Issues</a></li>
<li class="file"><a href="Credits.html">Credits</a></li>
</ol>
</div>
</div>
<div class="mainContent">
<div class="mainContentInner">
<h1 class="headline1" id="">Inverse Kinematics <span class="professionalTag">Professional</span></h1><p class="textBlock">There are 2 approaches on how to modify the orientation of bones in UMotion.</p><ul class="listMain">
<li class="listItem"><span class="listText">The traditional forward kinematics approach lets you directly modify the orientation of every bone. This is a simple and straight-forward way to define poses. While animating you often have situations where you want to place e.g. a hand of the character at a certain position. To achieve this in forward kinematics it is necessary to rotate every bone of the arm until the hand is in the correct position. It is hard and time consuming to do a precise placement of the hand.</span></li>
<li class="listItem"><span class="listText">Inverse kinematics allows modifying the end point of a bone chain directly. For example, the hand position can be modified directly and all bones of the arm are updated accordingly. This results not only in a faster workflow but it also enables new possibilities like sticking the hands to a world position.</span></li>
</ul><h3 class="headline3" id="">Rig Layers</h3><p class="textBlock">Most of the time it depends on the situation if forward kinematics or inverse kinematics is more suitable. UMotion allows you to seamlessly switch between both approaches during an animation. This is possible due to the so called rig layers:</p><p class="textBlock">There is one rig layer for forward kinematics and one for inverse kinematics. It's like the animated GameObject has two skeletons - one that is affected by forward kinematics and one that is affected by inverse kinematics. Each inverse kinematics constraint has a switch that can be used to smoothly blend between the two skeletons.</p><h3 class="headline3" id="">Explanation Of Terms</h3><p class="textBlock">The <b>IK handle</b> is the joint/transform that has the Inverse Kinematics Constraint attached. It controls the rotation of a chain of bones whereby the end of the chain is the IK target.</p><p class="textBlock">The pole axis is the line between the start of the first bone in the IK chain to the start of the target bone.</p><img src="images/IKNamingDefinitions.png" class="image"></img>
<p class="imageText">Inverse Kinematics - Naming Definitions</p><h3 class="headline3" id="">Inverse Kinematics Goal</h3><p class="textBlock">The IK constraint's goal is to rotate all bones of the chain in such a way, that the IK target's position is the same as the position of the IK handle. So by moving the IK handle in Pose Mode (all Constraints are disabled during Config Mode) the whole IK chain will update automatically.</p><p class="textBlock">The IK solver used by the IK constraint is a <b>Rotate Plane Solver</b>. This type of solver is incredible easy to use and produces robust results (no jitter, sudden bone movements). The algorithm projects the bone chain and the IK handle onto a 2D plane (shown in blue in the screenshot below) and applies the IK solving algorithm in 2D space. Elbows, knees, etc. are only bending in the direction the arrow of the IK plane is pointing to. The bone chain is then rotated in such a way that it points into the IK handle's direction thus making the IK target position match the IK handle's position.</p><img src="images/IKPlane.png" class="image"></img>
<p class="imageText">Inverse Kinematics Plane</p><p class="textBlock">When configuring an IK constraint the IK plane should always point into the direction the elbow, knee, etc. should bend. The surface of the plane defines the space in which the bones will be bended or stretched by the IK algorithm.</p><p class="textBlock">The IK handle can't be a child of a joint/transform in its chain.</p><p class="textBlock">If the parent of the IK handle is set to be the hips, then for example, the hands will stay at the same place relative to the hips. If the parent is set to be the animated GameObject's root, then the hands won't move when the character's hips are moved. This way it is possible to pin the hands at a certain location (useful for climbing animations etc.).</p><p class="textBlock">Only one Inverse Kinematics Constraint can be added per joint/transform.</p><h3 class="headline3" id="">IK Pinning</h3><p class="textBlock">The <a href="ChildOf.html" class="link">Child-Of Constraint</a> can be used to extend the Inverse Kinematics Constraint with IK pinning functionality. When an IK handle is pinned, it keeps its current position even if the rest of the rig is moved. When an IK handle is not pinned it moves with the rest of the rig.</p><h2 class="headline2" id="Setup">Setup</h2><img src="images/IKConstraintSetup.png" class="image"></img>
<p class="imageText">Inverse Kinematics Constraint - Setup</p><table class="themeTable">
<tr class="themeTableRow">
<th class="themeTableHeader">UI Element</th>
<th class="themeTableHeader">Description</th>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Target</td>
<td class="themeTableCell">The joint/transform that should be controlled by the Inverse Kinematics Constraint. The inverse kinematics will try to find a way to rotate all bones in the chain so that the target joint/transform is at the same position as the joint/transform with the Inverse Kinematics Constraint attached.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Pole Target</td>
<td class="themeTableCell">An optional joint/transform can be added as pole target. By moving the pole target it is possible to rotate the whole IK chain around the pole axis whereby the arrow of the IK plane will always point towards the IK pole target.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Chain Length</td>
<td class="themeTableCell">The number of bones that should be affected by the Inverse Kinematics Constraint. Incrementing this number adds additional parents of the target joint/transform to the chain.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Chain Mask</td>
<td class="themeTableCell">The chain mask can be used to exclude certain bones within the chain from being affected by the IK solver. This is especially useful for excluding "twist" or "roll" bones.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Plane Angle</td>
<td class="themeTableCell">The angle of the plane at which the IK algorithm is applied in degrees. The plane should be rotated in such a way that it points into the direction where the knee, elbow, etc. should be bent.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Front / Right / Up</td>
<td class="themeTableCell">Sets the plane angle so that it points into the corresponding direction (seen from the animated GameObject).</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Invert</td>
<td class="themeTableCell">Inverts the plane angle by rotating it 180 degrees.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Reference</td>
<td class="themeTableCell">Before the Inverse Kinematics Constraint is executed, all bones in its chain are reset to the reference pose. From there the Inverse Kinematics algorithm will try to find a way to rotate all bones in the chain so that the target joint/transform is at the same position as the IK handle.
</br>
</br>The reference pose has great influence on how natural the result of the inverse kinematics looks. The inverse kinematics will usually choose one of the shortest ways to rotate from the reference pose to the target position. Due to this fact the reference pose also somehow gives the algorithm the hint in which direction e.g. an elbow or knee should bend.
</br>
</br>If the elbow or knee is rotated in strange ways when the IK is applied it should be slightly bended in the reference pose.
</br>
</br>The reference for the IK constraint can either be the <a href="Configuration.html#ReferencePose" class="link"><b>reference pose</b></a> that was set in <a href="ConfigMode.html" class="link">Config Mode</a> or the current pose of the <b>forward kinematics rig layer</b>. The latter one is useful when you want to have different reference poses in different clips or in different situations during a clip. It gives you great control on the end result of the IK Constraint.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Target Rotation</td>
<td class="themeTableCell">The target joint/transform can either copy the rotation of the IK handle so that the rotation of the target can be changed by rotating the <b>IK handle</b> or by using the <b>forward kinematics</b> rotation. With the latter one you can rotate the IK target by selecting it in the Scene View and by using the rotation tool just as you would rotate any other bone in FK mode.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Legacy Mode</td>
<td class="themeTableCell">In UMotion V1.08 the IK solver was updated. The new IK solver produces better results especially in combination with IK pinning. Enabling the legacy mode will use the old IK solver (UMotion V1.07 and below). Projects that have been created in UMotion V1.07 and below use the legacy mode to ensure compatibility.
</br></br>
For updating to the new IK solver disable the legacy mode.</td>
</tr>
</table><h2 class="headline2" id="AnimatedProperties">Animated Properties</h2><table class="themeTable">
<tr class="themeTableRow">
<th class="themeTableHeader">Property</th>
<th class="themeTableHeader">Description</th>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">FK/IK Blend</td>
<td class="themeTableCell">As mentioned before, UMotion has a forward kinematics rig layer and an inverse kinematics rig layer. With this property you can smoothly adjust the influence of each rig layer on the mesh.
</br>
</br>0 means the mesh will be 100% influenced by forward kinematics and 1 means the mesh will be 100% influenced by inverse kinematics.
</br>
</br>The property only affects the bone chain of the related Inverse Kinematics Constraint. If there are multiple Inverse Kinematics Constraints, blending has to be adjusted for each of them. A <a href="CustomProperty.html" class="link">Custom Property Constraint</a> can be used to control all blending properties together.</td>
</tr>
<tr class="themeTableRow">
<td class="themeTableCell" style="white-space: nowrap;">Pole Rotation</td>
<td class="themeTableCell">This is only visible when no Pole target was selected. It controls the rotation around the pole axis in degrees.</td>
</tr>
</table>
<div class="mainContentFooter">
<p class="textBlock" style="float:left">Copyright © 2017 - 2021 Soxware Interactive ALL RIGHTS RESERVED</p>
<p class="textBlock" align="right"><a href="https://forum.unity.com/threads/new-umotion-animation-editor-released.490618/" class="link">Unity Forum Thread</a> | <a href="https://www.facebook.com/Soxware/" class="link">Facebook</a> | <a href="https://twitter.com/SoxwareInteract" class="link">Twitter</a> | <a href="https://www.youtube.com/channel/UCCuE6nI5gHvUQjx0lo6Twtg" class="link">Youtube</a></p>
</div>
</div>
</div>
</body>
</html>