diff --git a/pages/docs/Miscellaneous/global-blackboard-component.md b/pages/docs/Miscellaneous/global-blackboard-component.md index a2cec48..446a73f 100644 --- a/pages/docs/Miscellaneous/global-blackboard-component.md +++ b/pages/docs/Miscellaneous/global-blackboard-component.md @@ -24,4 +24,4 @@ By adding a global blackboard component to a scene or prefab, you can ensure tha * [Blackboards](blackboards.md) * [Blackboard Template Asset](blackboard-template-asset.md) * [Local Blackboard Component](local-blackboard-component.md) -* [Animation Controller](../animation/skeletal-animation/animation-controller/animation-controller-overview.md) +* [Animation Graph (TODO)](../animation/skeletal-animation/animation-controller/animation-graph-overview.md) diff --git a/pages/docs/Miscellaneous/local-blackboard-component.md b/pages/docs/Miscellaneous/local-blackboard-component.md index 359d094..280992c 100644 --- a/pages/docs/Miscellaneous/local-blackboard-component.md +++ b/pages/docs/Miscellaneous/local-blackboard-component.md @@ -4,7 +4,7 @@ The *local blackboard component* contains a [blackboard](blackboards.md). The co If a system requires a blackboard, it will typically search for a blackboard component by traversing its own object structure upwards (in C++ you can use `ezBlackboardComponent::FindBlackboard()` to do so). -For example the [animation controller](../animation/skeletal-animation/animation-controller/animation-controller-overview.md) is controlled by modifying blackboard entries, which the controller reads. You can modify the entries through [custom code](../custom-code/custom-code-overview.md). For this, the blackboard component has to be attached either to the same object, or a parent object. +For example the [animation graph (TODO)](../animation/skeletal-animation/animation-controller/animation-graph-overview.md) is controlled by modifying blackboard entries, which the controller reads. You can modify the entries through [custom code](../custom-code/custom-code-overview.md). For this, the blackboard component has to be attached either to the same object, or a parent object. ## Component Properties @@ -23,4 +23,4 @@ For example the [animation controller](../animation/skeletal-animation/animation * [Blackboards](blackboards.md) * [Blackboard Template Asset](blackboard-template-asset.md) * [Global Blackboard Component](global-blackboard-component.md) -* [Animation Controller](../animation/skeletal-animation/animation-controller/animation-controller-overview.md) +* [Animation Graph (TODO)](../animation/skeletal-animation/animation-controller/animation-graph-overview.md) diff --git a/pages/docs/animation/skeletal-animation/animation-clip-asset.md b/pages/docs/animation/skeletal-animation/animation-clip-asset.md index c7ec229..b26c2ee 100644 --- a/pages/docs/animation/skeletal-animation/animation-clip-asset.md +++ b/pages/docs/animation/skeletal-animation/animation-clip-asset.md @@ -4,7 +4,7 @@ The *animation clip asset* is used to import a single animation for an [animated -An animation clip represents a single motion, such as a walk cycle, a jump or other action. Simple animations can be played on a mesh using a [simple animation component](simple-animation-component.md). For complex behavior you will need to use multiple clips and fade from one to the other at the right times. Use an [animation controller](animation-controller/animation-controller-overview.md) for that. +An animation clip represents a single motion, such as a walk cycle, a jump or other action. Simple animations can be played on a mesh using a [simple animation component](simple-animation-component.md). For complex behavior you will need to use multiple clips and fade from one to the other at the right times. Use an [animation graph (TODO)](animation-controller/animation-graph-overview.md) for that. ## Asset Properties diff --git a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-blackboard.md b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-blackboard.md index cc17d76..078dec4 100644 --- a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-blackboard.md +++ b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-blackboard.md @@ -1,5 +1,8 @@ # Blackboard Nodes + + + The animation controller provides nodes to read and write values from and to a [blackboard](../../../Miscellaneous/blackboards.md). For this, the [game object](../../../runtime/world/game-objects.md) on which the [animation controller component](animation-controller-component.md) is attached, also needs to hold a blackboard component. > **Note:** @@ -55,5 +58,5 @@ This node outputs the value of a specific blackboard entry. The number value can ## See Also -* [Animation Controller](animation-controller-overview.md) +* [Animation Graph (TODO)](animation-graph-overview.md) * [Skeletal Animations](../skeletal-animation-overview.md) diff --git a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-bone-weights.md b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-bone-weights.md index 76bb232..bb103b8 100644 --- a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-bone-weights.md +++ b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-bone-weights.md @@ -1,5 +1,8 @@ # Bone Weight Nodes + + + Bone weight nodes are used to generate a weight mask. The mask defines how strongly an animation clip will influence different parts of the skeleton. This is frequently used to apply an animation only to certain parts of a character, for example only the upper or lower body, or even only the left or right arm. For example it is common to play a walking animation only on the bones below the hip, whereas on the spine and upwards one would want to play an attack animation. @@ -12,7 +15,7 @@ Bone weights are often in the range of zero to one, with zero meaning that that > > Not all animations will work correctly when they are layered on top of each other. If one animation rotates a bone into one direction, and another animation rotates the same bone very differently, it is possible for the interpolation of the rotations to result in an invalid value. This will manifest as jerking or jumping bones at specific points in the animation. If that happens, you have to use an inverse bone mask to fully filter out the base animation, such that in the end only one of the animations really influences those bones. -Bone weights are typically connected directly to an animation clip sampling node, and the information that this animation clip shall only influence a part of the skeleton is passed along until it reaches a [combine poses node](anim-nodes-combine-poses.md) where the result is baked into one pose. Without such a node in the graph, the bone weights won't have an effect. +Bone weights are typically connected directly to an animation clip sampling node, and the information that this animation clip shall only influence a part of the skeleton is passed along until it reaches a [combine poses node (TODO)](anim-nodes-combine-poses.md) where the result is baked into one pose. Without such a node in the graph, the bone weights won't have an effect. ## Bone Weight Config Node @@ -30,9 +33,7 @@ This node creates a mask for every bone in the skeleton. By default, the mask is * **InverseWeights**: If this pin is connected, the node generates the inverse mask as well. So for example, if the node would generate a mask that only affects the head, then the inverse mask will affect everything but the head. - ## See Also - -* [Animation Controller](animation-controller-overview.md) +* [Animation Graph (TODO)](animation-graph-overview.md) * [Skeletal Animations](../skeletal-animation-overview.md) diff --git a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-combine-poses.md b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-combine-poses.md index aeacc25..2fbdce7 100644 --- a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-combine-poses.md +++ b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-combine-poses.md @@ -1,5 +1,8 @@ # Combine Poses Nodes + + + An animation controller typically samples more than one animation. For example you may want to play a walking animation on the lower part of a character, and an aim weapon animation on the upper part. These animations are generally independent of each other, but have to be combined at some point, to form the final single animation pose. Certain nodes in the animation controller graph allow you to accomplish this. @@ -18,21 +21,20 @@ This is used to clamp the maximum performance cost of the animation blending. ### Input Pins -* **LocalPoses**: This is a single input pin that allows an unlimited number of connections. Each incoming pose carries not only the bone transformations, but also the *bone weights*. These are typically determined by the animation clip sampling nodes and the [bone weight nodes](anim-nodes-bone-weights.md). All poses are mixed together according to their overall weight. +* **LocalPoses**: This is a single input pin that allows an unlimited number of connections. Each incoming pose carries not only the bone transformations, but also the *bone weights*. These are typically determined by the animation clip sampling nodes and the [bone weight nodes (TODO)](anim-nodes-bone-weights.md). All poses are mixed together according to their overall weight. -In practice that means that two animations that don't use custom [bone weights](anim-nodes-bone-weights.md) will be blended 50:50. +In practice that means that two animations that don't use custom [bone weights (TODO)](anim-nodes-bone-weights.md) will be blended 50:50. ### Output Pins -* **LocalPose**: The single combined pose in *local space*. It is common to pass this directly on to a [Local To Model Pose node](anim-nodes-modelspace.md). +* **LocalPose**: The single combined pose in *local space*. It is common to pass this directly on to a Local To Model Pose node. ### Performance Considerations -You can use multiple nodes to combine many poses in several steps. However, for best performance prefer to use only a single node to combine many poses and make use of [bone weights](anim-nodes-bone-weights.md) to control each ones overall influence. +You can use multiple nodes to combine many poses in several steps. However, for best performance prefer to use only a single node to combine many poses and make use of [bone weights (TODO)](anim-nodes-bone-weights.md) to control each ones overall influence. ## See Also - -* [Animation Controller](animation-controller-overview.md) +* [Animation Graph (TODO)](animation-graph-overview.md) * [Skeletal Animations](../skeletal-animation-overview.md) diff --git a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-debug.md b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-debug.md index 6032fc1..55a4beb 100644 --- a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-debug.md +++ b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-debug.md @@ -1,23 +1,24 @@ # Debug Nodes -These animation controller nodes can be used to find problems. +These animation graph nodes are used to find problems. -## Log Node +## Log Nodes -The *log node* simply prints a *dev* string to the [log](../../../debugging/logging.md) whenever it gets activated. +The `Log Info` and `Log Error` nodes print a string to the [log](../../../debugging/logging.md) whenever they get activated. ### Node Properties -* `Text`: The text to print. This may include placeholders for the input values. Use `{0}` to `{3}` to embed the values from `Input0` to `Input3` respectively. +* `Text`: The text to print. This may include placeholders for the input values. Use `{0}`, `{1}`, `{2}`, etc to embed the value from the respective `In Numbers[]` pin. + +* `Number Count`: Specifies how many number input pins the node should have. ### Input Pins -* `Active`: Every frame in which this pin is triggered, the node will log `Text` as a *Dev* message to the [log](../../../debugging/logging.md). +* `In Activate`: Every frame in which this pin gets triggered, the node will log `Text` to the [log](../../../debugging/logging.md). -* `Input0` to `Input3`: These pins allow you to pass in values that can be printed to the log. +* `In Numbers[]`: These pins allow you to pass in number values for embedding in the output text. ## See Also - -* [Animation Controller](animation-controller-overview.md) +* [Animation Graph (TODO)](animation-graph-overview.md) * [Skeletal Animations](../skeletal-animation-overview.md) diff --git a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-events.md b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-events.md index fe27e2d..98f2217 100644 --- a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-events.md +++ b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-events.md @@ -1,5 +1,8 @@ # Event Nodes + + + Event nodes are used to broadcast [event messages](../../../runtime/world/world-messaging.md#event-messages) on the [game object](../../../runtime/world/game-objects.md) on which the animation controller is running. This allows other code to react at the right moment to things like an animation being finished. Event nodes allow you to broadcast custom events under exactly defined conditions. Additionally, every time an [animation clip](../animation-clip-asset.md) is played, and actively contributes to the final pose, events that are defined on that clip will automatically be broadcast on the associated game object. @@ -20,6 +23,5 @@ When this node is triggered, it broadcasts an `ezMsgGenericEvent` with `Message` ## See Also - -* [Animation Controller](animation-controller-overview.md) +* [Animation Graph (TODO)](animation-graph-overview.md) * [Skeletal Animations](../skeletal-animation-overview.md) diff --git a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-input.md b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-input.md index 999514c..5234a92 100644 --- a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-input.md +++ b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-input.md @@ -1,8 +1,11 @@ # Input Nodes + + + Input nodes expose the state of input devices to the animation controller. Input nodes are mainly provided for convenience during prototyping, as they may circumvent key mappings and general game state (e.g. whether the player is even allowed to move a character at all, at the moment). -For a proper game, it is better to use an [input component](../../../input/input-component.md) to forward input state to [custom code](../../../custom-code/custom-code-overview.md) and then decide their which animation shall get played. Then you can forward that state to the animation controller, through a [blackboard](../../../Miscellaneous/blackboards.md). The animation controller itself would retrieve what it shall do through the [blackboard nodes](anim-nodes-blackboard.md). +For a proper game, it is better to use an [input component](../../../input/input-component.md) to forward input state to [custom code](../../../custom-code/custom-code-overview.md) and then decide their which animation shall get played. Then you can forward that state to the animation controller, through a [blackboard](../../../Miscellaneous/blackboards.md). The animation controller itself would retrieve what it shall do through the [blackboard nodes (TODO)](anim-nodes-blackboard.md). ## XBox Controller Input Node @@ -12,10 +15,9 @@ This node completely ignores any kind of button mapping. It is purely meant for ### Output Pins -* This node has one output pin for every button and stick direction. If you need to turn an analog signal into a trigger value, use the [Compare Number node](anim-nodes-logic-math.md). +* This node has one output pin for every button and stick direction. If you need to turn an analog signal into a trigger value, use the [Compare Number node (TODO)](anim-nodes-logic-math.md). ## See Also - -* [Animation Controller](animation-controller-overview.md) +* [Animation Graph (TODO)](animation-graph-overview.md) * [Skeletal Animations](../skeletal-animation-overview.md) diff --git a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-logic-math.md b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-logic-math.md index c9b99c9..1374296 100644 --- a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-logic-math.md +++ b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-logic-math.md @@ -1,6 +1,9 @@ # Logic and Math Nodes -The animation controller provides a couple of nodes to evaluate basic arithmatic and logic. This is meant for very simple use cases and for quick prototyping. Often animation logic requires much more complex rules than what would be feasible to express in the animation controller graph. Instead use [custom code](../../../custom-code/custom-code-overview.md) to decide which animation should run under which circumstances, and pass the result to the animation controller via a [blackboard](../../../Miscellaneous/blackboards.md). The animation controller can then simply read the state for each animation using the [blackboard nodes](anim-nodes-blackboard.md). + + + +The animation controller provides a couple of nodes to evaluate basic arithmatic and logic. This is meant for very simple use cases and for quick prototyping. Often animation logic requires much more complex rules than what would be feasible to express in the animation controller graph. Instead use [custom code](../../../custom-code/custom-code-overview.md) to decide which animation should run under which circumstances, and pass the result to the animation controller via a [blackboard](../../../Miscellaneous/blackboards.md). The animation controller can then simply read the state for each animation using the [blackboard nodes (TODO)](anim-nodes-blackboard.md). ## Logic AND Node @@ -73,6 +76,5 @@ The expression must be syntactically correct, otherwise the node prints an error ## See Also - -* [Animation Controller](animation-controller-overview.md) +* [Animation Graph (TODO)](animation-graph-overview.md) * [Skeletal Animations](../skeletal-animation-overview.md) diff --git a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-mix1d.md b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-mix1d.md index 1bccce3..2457c17 100644 --- a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-mix1d.md +++ b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-mix1d.md @@ -1,5 +1,8 @@ # Mix Clips 1D Node + + + The *Mix Clips 1D* animation controller node is used to linearly interpolate between a fixed set of animations. @@ -34,8 +37,7 @@ See [common output pins](anim-nodes-playclip.md#common-output-pins). ## See Also - -* [Animation Controller](animation-controller-overview.md) +* [Animation Graph (TODO)](animation-graph-overview.md) * [Skeletal Animations](../skeletal-animation-overview.md) -* [Mix Clips 2D Node](anim-nodes-mix2d.md) -* [Play Single Clip Nodes](anim-nodes-playclip.md) +* [Mix Clips 2D Node (TODO)](anim-nodes-mix2d.md) +* [Play Single Clip Nodes (TODO)](anim-nodes-playclip.md) diff --git a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-mix2d.md b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-mix2d.md index 01e83e5..862ca08 100644 --- a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-mix2d.md +++ b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-mix2d.md @@ -1,5 +1,8 @@ # Mix Clips 2D Node + + + The *Mix Clips 2D* animation controller node is used to interpolate between a set of animations which are positioned in 2D space. You give it a 2D coordinate, and it will determine which animation clips are relevant and mix them together with proper weights depending on how close the coordinate is to each clip. The purpose of this node is to generate a continuous animation space from just a few discrete clips. This is often used for locomotion, where you only have animation clips for walking into a fixed number of directions and at certain speeds, but you'd like to be able to move a character into any direction and at any speed in between. @@ -12,11 +15,11 @@ Be aware that the poses will be combined linearly, though. If the poses from two ## How To Use -You add multiple animation clips and give each clip a position (`X` and `Y`). As with the [mix clips 1D node](anim-nodes-mix1d.md), the playback of all clips is synchronized, meaning that the length of each clip may differ, but they will be played back such that they start and end in unison. That means your clips must be authored accordingly, so for example for locomotion all clips should start with the left foot forwards, then move the right foot forwards, then the left again. From that point on the clips will be looped. +You add multiple animation clips and give each clip a position (`X` and `Y`). As with the [mix clips 1D node (TODO)](anim-nodes-mix1d.md), the playback of all clips is synchronized, meaning that the length of each clip may differ, but they will be played back such that they start and end in unison. That means your clips must be authored accordingly, so for example for locomotion all clips should start with the left foot forwards, then move the right foot forwards, then the left again. From that point on the clips will be looped. What the coordinates represent is up to you. For locomotion you could say that `X` represents left/right movement and `Y` forwards/backwards. You would then position a *walk left* clip at `(-1, 0)` a *walk right* clip at `(+1, 0)` a *walk forward* clip at `(0, +1)` and a *run forward* clip at `(0, +2)`. -Through the `X` and `Y` input pins you provide a 2D coordinate. During testing you may hook this up directly to an [input node](anim-nodes-input.md), though later you'll probably need more control. +Through the `X` and `Y` input pins you provide a 2D coordinate. During testing you may hook this up directly to an [input node (TODO)](anim-nodes-input.md), though later you'll probably need more control. The node will then take that input coordinate to decide which clips should be used with what influence, and mix them together to a single output pose. @@ -42,8 +45,7 @@ See [common output pins](anim-nodes-playclip.md#common-output-pins). ## See Also - -* [Animation Controller](animation-controller-overview.md) +* [Animation Graph (TODO)](animation-graph-overview.md) * [Skeletal Animations](../skeletal-animation-overview.md) -* [Mix Clips 1D Node](anim-nodes-mix1d.md) -* [Play Single Clip Nodes](anim-nodes-playclip.md) +* [Mix Clips 1D Node (TODO)](anim-nodes-mix1d.md) +* [Play Single Clip Nodes (TODO)](anim-nodes-playclip.md) diff --git a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-modelspace.md b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-modelspace.md deleted file mode 100644 index 701fe4d..0000000 --- a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-modelspace.md +++ /dev/null @@ -1,23 +0,0 @@ -# Local To Model Pose Node - -The `Local To Model Pose` node is used to convert a pose from *local space* to *model space*. - -Animation clips store animation data in so called *local space*. That means that every bone stores its transformation (rotation, position and scale) relative to its parent bone. Therefore the actual full position of any given bone is not readily available, but instead has to be computed by concatenating the transformations of all ancestor bones. - -Having the data in this representation is advantageous for mixing multiple animations together, which is why this is done in local space. However, to apply a pose to a mesh, the final position and rotation has to be known for every bone. Additionally, operations like inverse kinematics (IK) also have to be done in model space. - -Therefore this node is necessary to convert a pose from one representation to the other, before it can be passed to an [output node](anim-nodes-output.md). - -## Input Pins - -* **LocalPose**: A single pose in local space. - -## Output Pins - -* **ModelPose**: The converted pose in model space. - -## See Also - - -* [Animation Controller](animation-controller-overview.md) -* [Skeletal Animations](../skeletal-animation-overview.md) diff --git a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-output.md b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-output.md index ca99347..80e4a42 100644 --- a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-output.md +++ b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-output.md @@ -1,6 +1,9 @@ # Output Nodes -Every [animation controller](animation-controller-overview.md) must have exactly one `output` node. Only animation poses that are ultimately connected to an output node will affect the [animated mesh](../animated-mesh-asset.md). + + + +Every [animation graph (TODO)](animation-graph-overview.md) must have exactly one `output` node. Only animation poses that are ultimately connected to an output node will affect the [animated mesh](../animated-mesh-asset.md). This allows you to quickly deactivate an entire part of the graph simply by removing the connection to the output node. Nodes that are not connected to the output are not evaluated at runtime and therefore don't cost any performance. @@ -10,12 +13,11 @@ The `Model Pose Output` node is currently the only available type of output node ### Input Pins -* **ModelPose**: The one pose to use as the output. This pose has to be in model space. It is thefore quite common that the input is directly connected to a [Local To Model Pose node](anim-nodes-modelspace.md). +* **ModelPose**: The one pose to use as the output. This pose has to be in model space. It is thefore quite common that the input is directly connected to a Local To Model Pose node. * **RotationZ**: This *number value* adds angular [root motion](../root-motion.md) to the final pose. This enables the animation to change the rotation of the [game object](../../../runtime/world/game-objects.md) on which it is played. This is mainly convenient for simpler use cases and for prototyping. In more complex scenarios you may prefer control the object's orientation with [custom code](../../../custom-code/custom-code-overview.md). ## See Also - -* [Animation Controller](animation-controller-overview.md) +* [Animation Graph (TODO)](animation-graph-overview.md) * [Skeletal Animations](../skeletal-animation-overview.md) diff --git a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-playclip.md b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-playclip.md index 14f98af..6574dda 100644 --- a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-playclip.md +++ b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-playclip.md @@ -1,5 +1,8 @@ # Play Single Clip Nodes + + + Animation controller graphs provide multiple node types that are used for sampling animation clips. The *play single clip node* is the most basic one. This node samples an animation clip and outputs the respective animation pose. It is thus used for typical playback of a single animation either once or in a loop. For added variety you may reference multiple animation clips, in which case the node will randomly pick one of them for playback. @@ -8,7 +11,7 @@ Animation controller graphs provide multiple node types that are used for sampli All animation controller nodes that sample animation clips share these properties: -* `Loop`: If enabled the node will loop playback while its `Active` pin is triggered. Which clip exactly gets looped depends on the node. The *play single clip node* for example just loops playback in general, but randomly picks a different clip in every iteration. The [play clip sequence node](anim-nodes-sequence.md) on the other hand will loop its middle clip instead. +* `Loop`: If enabled the node will loop playback while its `Active` pin is triggered. Which clip exactly gets looped depends on the node. The *play single clip node* for example just loops playback in general, but randomly picks a different clip in every iteration. The [play clip sequence node (TODO)](anim-nodes-sequence.md) on the other hand will loop its middle clip instead. * `ApplyRootMotion`: If enabled, the node will compute the [root motion](../root-motion.md) from the sampled clips and forward this to the [animation controller component](animation-controller-component.md), which may apply this to the game object's position. @@ -32,7 +35,7 @@ Many animation controller nodes have some or all of these input pins: * `Active`: This pin determines whether the node samples its animation clips *at all*. Once it gets triggered in a frame, the node starts to sample its animation clips, fades them in etc. If `Loop` is enabled, the playback will repeat as long as the `Active` pin is triggered. Once the pin is not triggered anymore, the node will start to fade out its animations. Either right away (`ImmediateFadeOut` on) or when it reaches the end of the currently playing clip (`ImmediateFadeOut` off). -* `Weights`: If this pin is connected to a [bone weight node](anim-nodes-bone-weights.md), then the sampled animation clip is only applied to that part of the character. This is used to limit playback of an animation to selected body parts. +* `Weights`: If this pin is connected to a [bone weight node (TODO)](anim-nodes-bone-weights.md), then the sampled animation clip is only applied to that part of the character. This is used to limit playback of an animation to selected body parts. * `Speed`: This pin adjusts the overall playback speed. @@ -44,15 +47,14 @@ Many animation controller nodes have some or all of these input pins: Many animation controller nodes have some or all of these output pins: -* `LocalPose`: The final pose from the sampled animation clips is output through this pin. This has to be passed to a [combine poses node](anim-nodes-combine-poses.md) or a [local to model pose node](anim-nodes-modelspace.md). +* `LocalPose`: The final pose from the sampled animation clips is output through this pin. This has to be passed to a [combine poses node (TODO)](anim-nodes-combine-poses.md) or a local to model pose node. * `OnFadeOut`: This pin gets triggered for a single frame once the node changes its internal state to fade out the animation (affected by `ImmediateFadeOut` and `FadeOut`). This is typically a good time to start fading in another animation to take over. This pin is guaranteed to get triggered, even if the `FadeOut` time is zero. ## See Also - -* [Animation Controller](animation-controller-overview.md) +* [Animation Graph (TODO)](animation-graph-overview.md) * [Skeletal Animations](../skeletal-animation-overview.md) -* [Bone Weight Nodes](anim-nodes-bone-weights.md) -* [Play Clip Sequence Node](anim-nodes-sequence.md) -* [Mix Clips 2D Node](anim-nodes-mix2d.md) +* [Bone Weight Nodes (TODO)](anim-nodes-bone-weights.md) +* [Play Clip Sequence Node (TODO)](anim-nodes-sequence.md) +* [Mix Clips 2D Node (TODO)](anim-nodes-mix2d.md) diff --git a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-sequence.md b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-sequence.md index 0f2a434..1dbaa3f 100644 --- a/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-sequence.md +++ b/pages/docs/animation/skeletal-animation/animation-controller/anim-nodes-sequence.md @@ -1,6 +1,9 @@ # Play Clip Sequence Node -The *play clip sequence node* is similar to the [play single clip node](anim-nodes-playclip.md), however, instead of playing just a single clip (looped), the sequence node plays at least three clips in a row. One to enter an animation state, one (looped) animation while it stays active, and one to exit the animation state. + + + +The *play clip sequence node* is similar to the [play single clip node (TODO)](anim-nodes-playclip.md), however, instead of playing just a single clip (looped), the sequence node plays at least three clips in a row. One to enter an animation state, one (looped) animation while it stays active, and one to exit the animation state. Such sequences are common for actions such as jumping or climbing a ladder. The start clip transitions the character from a start state, such as idle or walking into the new state, such as *jumping*. The middle clip is then played as long as the jumping state needs to continue, and once the character hits the ground again, the end clip is played to transition back. @@ -34,6 +37,5 @@ See [common output pins](anim-nodes-playclip.md#common-output-pins). ## See Also - -* [Animation Controller](animation-controller-overview.md) +* [Animation Graph (TODO)](animation-graph-overview.md) * [Skeletal Animations](../skeletal-animation-overview.md) diff --git a/pages/docs/animation/skeletal-animation/animation-controller/animation-controller-asset.md b/pages/docs/animation/skeletal-animation/animation-controller/animation-controller-asset.md deleted file mode 100644 index 5ac3a02..0000000 --- a/pages/docs/animation/skeletal-animation/animation-controller/animation-controller-asset.md +++ /dev/null @@ -1,41 +0,0 @@ -# Animation Controller Asset - -The *animation controller asset* is used to configure complex animations. See the [animation controller](animation-controller-overview.md) chapter for a conceptiual description. - -![Animation Controller Asset](media/anim-controller-asset.png) - -## Animation Controller Graph - -Animation controllers are set up as graph structures. Nodes represent actions. Data flows from left to right. Nodes have **input pins** and **output pins** which represent different kinds of data, such as trigger states (*on/off*), number values, animation poses and bone weights. - -The goal of an animation controller is to sample a number of [animation clips](../animation-clip-asset.md), combine them together, and generate a final pose which can then be applied to an [animated mesh](../animated-mesh-component.md). - -### Creating Nodes - -Right click into the main area to open a context menu. Here you select which nodes to add to the graph. Every graph requires at least an [output node](anim-nodes-output.md), a [model space conversion node](anim-nodes-modelspace.md) and a node to sample a clip, for example a [play single clip node](anim-nodes-playclip.md). Once the graph samples two different clips you also need a [combine poses node](anim-nodes-combine-poses.md). - -### Connecting Nodes - -You connect nodes through their pins. Just left click and drag from one output pin to another input pin. The UI will display which pins can be connected once you start dragging. Since every pin represents a certain data type, only compatible pin types may get connected. - -Some pins allow to connect to multiple other pins, or have multiple incoming connections. If a pin does not allow this, creating a new connection removes previous connections automatically. - -Nodes that are not ultimately connected to the output node, will not have any effect. - -### Node Properties - -Nodes may additionally have *properties*. These are displayed in the property pane when a node is selected. See the documentation for the different node types for more detailed descriptions. - -## Using Animation Controller Assets - -Once an animation controller asset is set up, it can be applied to an [animated mesh](../animated-mesh-component.md) by adding an [animation controller component](animation-controller-component.md) to the same game object. The component will evaluate the graph in every update, and send the final animation pose to the animated mesh. - -To control what the animation controller does, you may also need a [blackboard](../../../Miscellaneous/blackboards.md) for storing state, and potentially a script component to decide when which animation should be active. - -## See Also - - -* [Skeletal Animations](../skeletal-animation-overview.md) -* [Animation Controller Component](animation-controller-component.md) -* [Blackboards](../../../Miscellaneous/blackboards.md) -* [Simple Animation Component](../simple-animation-component.md) diff --git a/pages/docs/animation/skeletal-animation/animation-controller/animation-controller-component.md b/pages/docs/animation/skeletal-animation/animation-controller/animation-controller-component.md index f3d403f..f5b7312 100644 --- a/pages/docs/animation/skeletal-animation/animation-controller/animation-controller-component.md +++ b/pages/docs/animation/skeletal-animation/animation-controller/animation-controller-component.md @@ -1,18 +1,19 @@ # Animation Controller Component -The *animation controller component* is used to apply complex animation playback and blending functionality to an [animated mesh](../animated-mesh-component.md). It is the big brother of the [simple animation component](../simple-animation-component.md). Instead of playing just a single animation clip, it uses an [animation controller asset](animation-controller-asset.md) to determine the animation pose. +The *animation controller component* is used to apply complex animation playback and blending functionality to an [animated mesh](../animated-mesh-component.md). It is the big brother of the [simple animation component](../simple-animation-component.md). Instead of playing just a single animation clip, it uses an [animation graph asset (TODO)](animation-graph-asset.md) to determine the animation pose. -The component itself doesn't do much, other than updating the animation pose and sending it to the animated mesh. For how to control the animation playback, please see the [Animation Controller](animation-controller-overview.md) chapter. +The component itself doesn't do much, other than updating the animation pose and sending it to the animated mesh. For how to control the animation playback, please see the [Animation Graph (TODO)](animation-graph-overview.md) chapter. ## Component Properties -* `AnimController`: The [animation controller](animation-controller-asset.md) to use. +* `AnimGraph`: The [animation graph (TODO)](animation-graph-asset.md) to use. * `RootMotionMode`: Selects how [root motion](../root-motion.md) is applied to the owning game object. -## See Also +* `InvisibleUpdateRate`: How often to update the animation when the object is not visible. For performance reasons the update rate should be very low or even paused when an object isn't visible. However, since animations may have an important impact on gameplay, it can be undesirable to have a lower update rate even when the object is not visible. Note that this affects the update rate of objects that are not visible by the main camera, but by a shadow casting light. Objects whose shadow can be seen generally get updated, but at a low rate, unless this setting forces a higher update rate. +## See Also * [Skeletal Animations](../skeletal-animation-overview.md) * [Simple Animation Component](../simple-animation-component.md) -* [Animation Controller](animation-controller-overview.md) +* [Animation Graph (TODO)](animation-graph-overview.md) diff --git a/pages/docs/animation/skeletal-animation/animation-controller/animation-controller-overview.md b/pages/docs/animation/skeletal-animation/animation-controller/animation-controller-overview.md deleted file mode 100644 index 59f668e..0000000 --- a/pages/docs/animation/skeletal-animation/animation-controller/animation-controller-overview.md +++ /dev/null @@ -1,48 +0,0 @@ -# Animation Controller - -Animating characters is a complex task. Even simple creatures typically already need tens of different [animation clips](../animation-clip-asset.md) for locomotion and basic actions. However, having the animation clips is not enough, they also need to be played on the [animated mesh](../animated-mesh-asset.md) in such a way that animations blend over nicely and play perfectly in sequence. Additionally you may need to apply an animation only to a certain part of the body. Animations should fade in and out smoothly as they are activated and deactivated, and certain clips need to be synchronized to achieve the desired effect. - -An *animation controller* is used to configure how each animation clip of a character should behave when it is actively played on the mesh. Animation controllers are the basis for complex animation playback. They also provide some very basic functionality for logic and math, such that one can build simple state machines. For more complex decisions which animations should play when, use [custom code](../../../custom-code/custom-code-overview.md). - -## Creating and Using Animation Controllers - -Animation controllers are configured through the [animation controller asset type](animation-controller-asset.md). To apply the output pose of an animation controller to an [animated mesh](../animated-mesh-component.md), add an [animation controller component](animation-controller-component.md) to the same [game object](../../../runtime/world/game-objects.md). The controller will send the output pose to the mesh every frame, but only while the scene is [simulated](../../../editor/run-scene.md). - -To control what an animation controller will output, you typically also need a [blackboard](../../../Miscellaneous/blackboards.md). The blackboard is used to store state. Scripts or other [custom code](../../../custom-code/custom-code-overview.md) decide which animations should be played and write that state to the blackboard. The animation controller in turn reads state from the blackboard and then activates the desired animation clip playback. The controller can also write back state to the blackboard, for example to communicate back that an animation clip has finished playing. - -## Animation Controller Concept - -The following image shows a very basic animation controller: - -![Basic Graph](media/anim-graph-basic.png) - -The flow of information is from left to right. - -On the far left side the two green nodes are used to [read state from the blackboard](anim-nodes-blackboard.md). Here we read the blackboard values *PlayIdle* and *PlayWave* to see which animation clips should get played. The pink output pins are *trigger pins*, meaning they can be *active* (*triggered*) or *inactive*. When the read value is `1` (in this case) the pins are set to *triggered* which then activates the connected nodes to the right. - -The two light blue nodes are used to [sample animation clips](anim-nodes-playclip.md). There are different ways how animation clips can be played, but here we only use very basic (looped) playback. When the *PlayIdle* blackboard value is set, the *Idle* clip will be sampled. When the *PlayWave* blackboard value is set, the *Wave* clip will get sampled. Any combination is possible, so both clips can be played at the same time. - -The sampling nodes have a *LocalPose* output pin. This pin represents the animation pose that was determined. The pin also carries information about *weighting* the pose. That means when the clip playback was just started, the pose may still be fading and shouldn't immediately have full influence. Similarly, if a pose shall only be applied to a certain body part these [bone weights](anim-nodes-bone-weights.md) are also included here and will be forwarded to any following node. - -In the middle of the graph the [combine poses](anim-nodes-combine-poses.md) node is used to gather multiple poses and turn them into one. This node uses the aforementioned bone weights and overall pose weight to blend all the available poses together. - -Note that the blue nodes output *local poses*. That means the pose data is in a certain format. Data in this format can be used for certain operations, however, the data cannot be output in this format. Therefore the next step is to convert the pose from *local space* to *model space*. Once the data is in *model space* there are other operations that can be done with it. - -In this graph, though, the converted pose is simply forwarded to the [output node](anim-nodes-output.md). This is always the final step. - -## Summary - -The animation controller uses a graph based workflow to let you visually configure how animation clips are combined. Nodes have inputs to control their behavior, and they output data or state that can (or must) be forwarded to the next step in the pipeline, until an animation pose ultimately reaches the output. - -The system is intelligent enough to optimize away operations that don't affect the output. - -You typically control which animations are played when through a [blackboard](../../../Miscellaneous/blackboards.md). For quick prototyping you can also use the [input nodes](anim-nodes-input.md) to get certain input data directly into the graph. - -Simple animation state machines can be built directly in the animation controller graph using the [logic and math nodes](anim-nodes-logic-math.md) as well as the [blackboard nodes](anim-nodes-blackboard.md). For more complex logic you should use [custom code](../../../custom-code/custom-code-overview.md). - -## See Also - -* [Skeletal Animations](../skeletal-animation-overview.md) -* [Animation Controller Asset](animation-controller-asset.md) -* [Animation Controller Component](animation-controller-component.md) -* [Animated Mesh Component](../animated-mesh-component.md) diff --git a/pages/docs/animation/skeletal-animation/animation-controller/animation-graph-asset.md b/pages/docs/animation/skeletal-animation/animation-controller/animation-graph-asset.md new file mode 100644 index 0000000..21bb983 --- /dev/null +++ b/pages/docs/animation/skeletal-animation/animation-controller/animation-graph-asset.md @@ -0,0 +1,46 @@ +# Animation Graph Asset + +The *animation graph asset* is used to configure complex animations. See the [animation graph (TODO)](animation-graph-overview.md) chapter for a conceptiual description. + + + + +![Animation Graph Asset](media/anim-controller-asset.png) + +## Animation Graph + +In the animation graph nodes represent actions. Data flows from left to right. Nodes have **input pins** and **output pins** which represent different kinds of data, such as trigger events, number values, animation poses and bone weights. + +The goal of an animation graph is to sample a number of [animation clips](../animation-clip-asset.md), combine them together, and generate a final pose which can then be applied to an [animated mesh](../animated-mesh-component.md). + +### Creating Nodes + + + +Right click into the main area to open a context menu. Here you select which nodes to add to the graph. Every graph requires at least an [output node (TODO)](anim-nodes-output.md), a model space conversion node and a node to sample a clip, for example a [play single clip node (TODO)](anim-nodes-playclip.md). Once the graph samples two different clips you also need a [combine poses node (TODO)](anim-nodes-combine-poses.md). + +### Connecting Nodes + +You connect nodes through their pins. Just left click and drag from one output pin to another input pin. The UI will display which pins can be connected once you start dragging. Since every pin represents a certain data type, only compatible pin types may get connected. + +Some pins allow to connect to multiple other pins, or have multiple incoming connections. If a pin does not allow this, creating a new connection removes previous connections automatically. + +Nodes that are not ultimately connected to the output node, will not have any effect. + +### Node Properties + +Nodes may additionally have *properties*. These are displayed in the property pane when a node is selected. See the documentation for the different node types for more detailed descriptions. + +## Using Animation Graph Assets + +Once an animation graph asset is set up, it can be applied to an [animated mesh](../animated-mesh-component.md) by adding an [animation controller component](animation-controller-component.md) to the same game object. The component will evaluate the graph in every update, and send the final animation pose to the animated mesh. + +To control what the animation controller does, you may also need a [blackboard](../../../Miscellaneous/blackboards.md) for storing state, and potentially a script component to decide when which animation should be active. + +## See Also + + +* [Skeletal Animations](../skeletal-animation-overview.md) +* [Animation Controller Component](animation-controller-component.md) +* [Blackboards](../../../Miscellaneous/blackboards.md) +* [Simple Animation Component](../simple-animation-component.md) diff --git a/pages/docs/animation/skeletal-animation/animation-controller/animation-graph-overview.md b/pages/docs/animation/skeletal-animation/animation-controller/animation-graph-overview.md new file mode 100644 index 0000000..b3f8f27 --- /dev/null +++ b/pages/docs/animation/skeletal-animation/animation-controller/animation-graph-overview.md @@ -0,0 +1,51 @@ +# Animation Graphs + +Animating characters is a complex task. Even simple creatures typically already need tens of different [animation clips](../animation-clip-asset.md) for locomotion and basic actions. However, having the animation clips is not enough, they also need to be played on the [animated mesh](../animated-mesh-asset.md) in such a way that animations blend over nicely and play perfectly in sequence. Additionally you may need to apply an animation only to a certain part of the body. Animations should fade in and out smoothly as they are activated and deactivated, and certain clips need to be synchronized to achieve the desired effect. + +An *animation graph* is used to configure how each animation clip of a character should behave when it is actively played on the mesh. Animation graphs are the basis for complex animation playback. They also provide some very basic functionality for logic and math, such that one can build simple state machines. For more complex decisions which animations should play when, use [custom code](../../../custom-code/custom-code-overview.md). + +## Creating and Using Animation Graphs + +Animation graphs are configured through the [animation graph asset type (TODO)](animation-graph-asset.md). To apply the output pose of an animation graph to an [animated mesh](../animated-mesh-component.md), add an [animation controller component](animation-controller-component.md) to the same [game object](../../../runtime/world/game-objects.md). The controller will send the output pose to the mesh every frame, but only while the scene is [simulated](../../../editor/run-scene.md). + +To control what an animation graph will output, you typically also need a [blackboard](../../../Miscellaneous/blackboards.md). The blackboard is used to store state. Scripts or other [custom code](../../../custom-code/custom-code-overview.md) decide which animations should be played and write that state to the blackboard. The animation graph in turn reads state from the blackboard and then activates the desired animation clip playback. The graph can also write back state to the blackboard, for example to communicate back that an animation clip has finished playing. + +## Animation Graph Concept + + + + +The following image shows a very basic animation graph: + +![Basic Graph](media/anim-graph-basic.png) + +The flow of information is from left to right. + +On the far left side the two green nodes are used to [read state from the blackboard (TODO)](anim-nodes-blackboard.md). Here we read the blackboard values *PlayIdle* and *PlayWave* to see which animation clips should get played. The pink output pins are *trigger pins*, meaning they can be *active* (*triggered*) or *inactive*. When the read value is `1` (in this case) the pins are set to *triggered* which then activates the connected nodes to the right. + +The two light blue nodes are used to [sample animation clips (TODO)](anim-nodes-playclip.md). There are different ways how animation clips can be played, but here we only use very basic (looped) playback. When the *PlayIdle* blackboard value is set, the *Idle* clip will be sampled. When the *PlayWave* blackboard value is set, the *Wave* clip will get sampled. Any combination is possible, so both clips can be played at the same time. + +The sampling nodes have a *LocalPose* output pin. This pin represents the animation pose that was determined. The pin also carries information about *weighting* the pose. That means when the clip playback was just started, the pose may still be fading and shouldn't immediately have full influence. Similarly, if a pose shall only be applied to a certain body part these [bone weights (TODO)](anim-nodes-bone-weights.md) are also included here and will be forwarded to any following node. + +In the middle of the graph the [combine poses (TODO)](anim-nodes-combine-poses.md) node is used to gather multiple poses and turn them into one. This node uses the aforementioned bone weights and overall pose weight to blend all the available poses together. + +Note that the blue nodes output *local poses*. That means the pose data is in a certain format. Data in this format can be used for certain operations, however, the data cannot be output in this format. Therefore the next step is to convert the pose from *local space* to *model space*. Once the data is in *model space* there are other operations that can be done with it. + +In this graph, though, the converted pose is simply forwarded to the [output node (TODO)](anim-nodes-output.md). This is always the final step. + +## Summary + +The animation graph uses a graph based workflow to let you visually configure how animation clips are combined. Nodes have inputs to control their behavior, and they output data or state that can (or must) be forwarded to the next step in the pipeline, until an animation pose ultimately reaches the output. + +The system is intelligent enough to optimize away operations that don't affect the output. + +You typically control which animations are played when through a [blackboard](../../../Miscellaneous/blackboards.md). For quick prototyping you can also use the [input nodes (TODO)](anim-nodes-input.md) to get certain input data directly into the graph. + +Simple animation state machines can be built directly in the animation controller graph using the [logic and math nodes (TODO)](anim-nodes-logic-math.md) as well as the [blackboard nodes (TODO)](anim-nodes-blackboard.md). For more complex logic you should use [custom code](../../../custom-code/custom-code-overview.md). + +## See Also + +* [Skeletal Animations](../skeletal-animation-overview.md) +* [Animation Graph Asset (TODO)](animation-graph-asset.md) +* [Animation Controller Component](animation-controller-component.md) +* [Animated Mesh Component](../animated-mesh-component.md) diff --git a/pages/docs/animation/skeletal-animation/animation-controller/toc.txt b/pages/docs/animation/skeletal-animation/animation-controller/toc.txt index 51ac4e1..434da88 100644 --- a/pages/docs/animation/skeletal-animation/animation-controller/toc.txt +++ b/pages/docs/animation/skeletal-animation/animation-controller/toc.txt @@ -1,5 +1,5 @@ -animation-controller-overview.md -animation-controller-asset.md +animation-graph-overview.md +animation-graph-asset.md animation-controller-component.md anim-nodes-blackboard.md anim-nodes-bone-weights.md @@ -10,7 +10,6 @@ anim-nodes-input.md anim-nodes-logic-math.md anim-nodes-mix1d.md anim-nodes-mix2d.md -anim-nodes-modelspace.md anim-nodes-output.md anim-nodes-playclip.md anim-nodes-sequence.md \ No newline at end of file diff --git a/pages/docs/animation/skeletal-animation/animation-events.md b/pages/docs/animation/skeletal-animation/animation-events.md index df41bdc..7a1581e 100644 --- a/pages/docs/animation/skeletal-animation/animation-events.md +++ b/pages/docs/animation/skeletal-animation/animation-events.md @@ -20,6 +20,6 @@ The clip above shows the event track at the bottom of an [animation clip asset]( * [Skeletal Animations](skeletal-animation-overview.md) -* [Event Nodes](animation-controller/anim-nodes-events.md) +* [Event Nodes (TODO)](animation-controller/anim-nodes-events.md) * [Custom Code](../../custom-code/custom-code-overview.md) * [Messaging](../../runtime/world/world-messaging.md) diff --git a/pages/docs/animation/skeletal-animation/simple-animation-component.md b/pages/docs/animation/skeletal-animation/simple-animation-component.md index be3adfe..000503d 100644 --- a/pages/docs/animation/skeletal-animation/simple-animation-component.md +++ b/pages/docs/animation/skeletal-animation/simple-animation-component.md @@ -6,7 +6,7 @@ The *simple animation component* is used to play a single [animation clip](anima The component has to be attached on a [game object](../../runtime/world/game-objects.md) that also has an [animated mesh component](animated-mesh-component.md). The selected animation clip has to be compatible with the mesh's [skeleton](skeleton-asset.md). -For more complex scenarios use an [animation controller](animation-controller/animation-controller-overview.md) instead. +For more complex scenarios use an [animation graph (TODO)](animation-controller/animation-graph-overview.md) instead. ## Component Properties @@ -33,4 +33,4 @@ The component will broadcast the event `ezMsgGenericEvent` every time it encount * [Skeletal Animations](skeletal-animation-overview.md) * [Animation Clip Asset](animation-clip-asset.md) * [Animated Mesh Component](animated-mesh-component.md) -* [Animation Controller](animation-controller/animation-controller-overview.md) +* [Animation Graph (TODO)](animation-controller/animation-graph-overview.md) diff --git a/pages/docs/animation/skeletal-animation/skeletal-animation-overview.md b/pages/docs/animation/skeletal-animation/skeletal-animation-overview.md index 5583d01..fe26846 100644 --- a/pages/docs/animation/skeletal-animation/skeletal-animation-overview.md +++ b/pages/docs/animation/skeletal-animation/skeletal-animation-overview.md @@ -50,7 +50,7 @@ Here we have also attached a [visual script](../../custom-code/visual-script/vis To create a playable character, you need multiple animations for all the actions that the character should be able to do. A big part revolves around *locomotion*, ie making the character walk around. Here it is not sufficient anymore to just play one animation, you will need to have multiple animations and blend them together in a convincing way. -This is where the [animation controller](animation-controller/animation-controller-overview.md) comes into play. This asset allows you to define how animations should be combined to make a character move fluidly and react to various inputs. +This is where the [animation graph (TODO)](animation-controller/animation-graph-overview.md) comes into play. This asset allows you to define how animations should be combined to make a character move fluidly and react to various inputs. Once you have basic animation playback working, getting familiar with animation controllers is the next step to make the most out of your animated characters. @@ -83,4 +83,4 @@ In the sample scene there are two objects for each turret that override two bone * [Animated Mesh Asset](animated-mesh-asset.md) * [Skeleton Asset](skeleton-asset.md) * [Animation Clip Asset](animation-clip-asset.md) -* [Animation Controller](animation-controller/animation-controller-overview.md) +* [Animation Graph (TODO)](animation-controller/animation-graph-overview.md) diff --git a/pages/docs/physics/jolt/ragdolls/jolt-ragdoll-component.md b/pages/docs/physics/jolt/ragdolls/jolt-ragdoll-component.md index 6506054..2806514 100644 --- a/pages/docs/physics/jolt/ragdolls/jolt-ragdoll-component.md +++ b/pages/docs/physics/jolt/ragdolls/jolt-ragdoll-component.md @@ -33,7 +33,7 @@ Use the properties `CenterPosition`, `CenterVelocity` and `CenterAngularVelocity * `SelfCollision`: Whether the individual bones of a ragdoll shall collide with each other. If disabled, they will pass through each other and only the joint constraints will prevent unnatural motion. Wether self collision works well or not on a given character highly depends on how the colliders for the bones are set up. * `StartMode`: In which *pose* the ragdall should start: * `WithBindPose`: The ragdoll starts immediately and uses the default bind pose (or rest pose) of the skeleton. - * `WithNextAnimPose`: The ragdoll waits for the next animation pose from and then starts from there. This requires a [simple animation component](../../../animation/skeletal-animation/simple-animation-component.md) or [animation controller](../../../animation/skeletal-animation/animation-controller/animation-controller-overview.md) to be active. + * `WithNextAnimPose`: The ragdoll waits for the next animation pose from and then starts from there. This requires a [simple animation component](../../../animation/skeletal-animation/simple-animation-component.md) or [animation graph (TODO)](../../../animation/skeletal-animation/animation-controller/animation-graph-overview.md) to be active. * `WithCurrentMeshPose`: The ragdoll starts immediately with the current pose. This does not require another component to regularly provide new poses and thus can also be used with a [skeleton pose component](../../../animation/skeletal-animation/skeleton-pose-component.md). * `GravityFactor`: How much gravity to use. * `Mass`: How heavy the ragdoll should be. diff --git a/pages/docs/toc.md b/pages/docs/toc.md index 4263cb5..63af062 100644 --- a/pages/docs/toc.md +++ b/pages/docs/toc.md @@ -176,22 +176,21 @@ ### [Simple Animation Component](animation/skeletal-animation/simple-animation-component.md) ### [Skeleton Pose Component](animation/skeletal-animation/skeleton-pose-component.md) ### Animation Controller -#### [Animation Controller](animation/skeletal-animation/animation-controller/animation-controller-overview.md) -#### [Animation Controller Asset](animation/skeletal-animation/animation-controller/animation-controller-asset.md) +#### [Animation Graphs (TODO)](animation/skeletal-animation/animation-controller/animation-graph-overview.md) +#### [Animation Graph Asset (TODO)](animation/skeletal-animation/animation-controller/animation-graph-asset.md) #### [Animation Controller Component](animation/skeletal-animation/animation-controller/animation-controller-component.md) -#### [Blackboard Nodes](animation/skeletal-animation/animation-controller/anim-nodes-blackboard.md) -#### [Bone Weight Nodes](animation/skeletal-animation/animation-controller/anim-nodes-bone-weights.md) -#### [Combine Poses Nodes](animation/skeletal-animation/animation-controller/anim-nodes-combine-poses.md) +#### [Blackboard Nodes (TODO)](animation/skeletal-animation/animation-controller/anim-nodes-blackboard.md) +#### [Bone Weight Nodes (TODO)](animation/skeletal-animation/animation-controller/anim-nodes-bone-weights.md) +#### [Combine Poses Nodes (TODO)](animation/skeletal-animation/animation-controller/anim-nodes-combine-poses.md) #### [Debug Nodes](animation/skeletal-animation/animation-controller/anim-nodes-debug.md) -#### [Event Nodes](animation/skeletal-animation/animation-controller/anim-nodes-events.md) -#### [Input Nodes](animation/skeletal-animation/animation-controller/anim-nodes-input.md) -#### [Logic and Math Nodes](animation/skeletal-animation/animation-controller/anim-nodes-logic-math.md) -#### [Mix Clips 1D Node](animation/skeletal-animation/animation-controller/anim-nodes-mix1d.md) -#### [Mix Clips 2D Node](animation/skeletal-animation/animation-controller/anim-nodes-mix2d.md) -#### [Local To Model Pose Node](animation/skeletal-animation/animation-controller/anim-nodes-modelspace.md) -#### [Output Nodes](animation/skeletal-animation/animation-controller/anim-nodes-output.md) -#### [Play Single Clip Nodes](animation/skeletal-animation/animation-controller/anim-nodes-playclip.md) -#### [Play Clip Sequence Node](animation/skeletal-animation/animation-controller/anim-nodes-sequence.md) +#### [Event Nodes (TODO)](animation/skeletal-animation/animation-controller/anim-nodes-events.md) +#### [Input Nodes (TODO)](animation/skeletal-animation/animation-controller/anim-nodes-input.md) +#### [Logic and Math Nodes (TODO)](animation/skeletal-animation/animation-controller/anim-nodes-logic-math.md) +#### [Mix Clips 1D Node (TODO)](animation/skeletal-animation/animation-controller/anim-nodes-mix1d.md) +#### [Mix Clips 2D Node (TODO)](animation/skeletal-animation/animation-controller/anim-nodes-mix2d.md) +#### [Output Nodes (TODO)](animation/skeletal-animation/animation-controller/anim-nodes-output.md) +#### [Play Single Clip Nodes (TODO)](animation/skeletal-animation/animation-controller/anim-nodes-playclip.md) +#### [Play Clip Sequence Node (TODO)](animation/skeletal-animation/animation-controller/anim-nodes-sequence.md) ### [Animation Events](animation/skeletal-animation/animation-events.md) ### [Root Motion](animation/skeletal-animation/root-motion.md) ### [Joint Attachment Component](animation/skeletal-animation/joint-attachment-component.md)