mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-16 07:10:08 +00:00
91 lines
4.4 KiB
ReStructuredText
91 lines
4.4 KiB
ReStructuredText
Animation blending
|
|
##################
|
|
|
|
Animation blending introduces smooth animation transitions between essentially every animation in the game without affecting gameplay. Effective if ``smooth animation transitions`` setting is enabled in the launcher or the config files.
|
|
|
|
Animation developers can bundle ``.yaml``/``.json`` files together with their ``.kf`` files to specify the blending style of their animations. Those settings will only affect the corresponding animation files.
|
|
|
|
The default OpenMW animation blending config file (the global config) affects actors only, that restriction doesn't apply to other animation blending config files; they can affect animated objects too.
|
|
Do not override the global config file in your mod, instead create a ``your_modded_animation_file_name.yaml`` file and put it in the same folder as your ``.kf`` file.
|
|
|
|
For example, if your mod includes a ``newAnimations.kf`` file, you can put a ``newAnimations.yaml`` file beside it and fill it with your blending rules.
|
|
Animation config files shipped in this fashion will only affect your modded animations and will not meddle with other animations in the game.
|
|
|
|
Local (per-kf-file) animation rules will only affect transitions between animations provided in that file and transitions to those animations; they will not affect transitions from the file animation to some other animation.
|
|
|
|
Editing animation config files
|
|
------------------------------
|
|
|
|
In examples below ``.yaml`` config file will be used. You can provide ``.json`` files instead of ``.yaml`` if you adhere to the same overall structures and field names.
|
|
|
|
Animation blending config file is a list of blending rules that look like this:
|
|
|
|
::
|
|
|
|
blending_rules:
|
|
- from: "*"
|
|
to: "*"
|
|
easing: "sineOut"
|
|
duration: 0.25
|
|
- from: "*"
|
|
to: "idlesneak*"
|
|
easing: "springOutWeak"
|
|
duration: 0.4
|
|
|
|
See `files/data/animations/animation-config.yaml <https://gitlab.com/OpenMW/openmw/-/tree/master/files/data/animations/animation-config.yaml>`__ for an example of such a file.
|
|
|
|
Every blending rule should include a set of following fields:
|
|
|
|
``from`` and ``to`` are rules that will attempt to match animation names; they usually look like ``animationGroupName:keyName`` where ``keyName`` is essentially the name of a specific action within the animation group.
|
|
Examples: ``"weapononehanded: chop start"``, ``"idle1h"``, ``"jump: start"`` e.t.c.
|
|
|
|
.. note::
|
|
|
|
``keyName`` is not always present and if omitted - the rule will match any ``keyName``.
|
|
The different animation names the game uses can be inspected by opening ``.kf`` animation files in Blender.
|
|
|
|
|
|
Both ``animationGroupName`` and ``keyName`` support wildcard characters either at the beginning, the end of the name, or instead of the name:
|
|
|
|
- ``"*"`` will match any name.
|
|
- ``"*idle:sta*"`` will match an animationGroupName ending with ``idle`` and a keyName starting with ``sta``.
|
|
- ``"weapon*handed: chop*attack"`` will not work since we don't support wildcards in the middle.
|
|
|
|
``easing`` is an animation blending function, i.e., a style of transition between animations, look below to see the list of possible easings.
|
|
|
|
``duration`` is the transition duration in seconds, 0.2-0.4 are usually reasonable transition times, but this highly depends on your use case.
|
|
|
|
.. note::
|
|
|
|
The bottom-most rule takes precedence in the animation config files.
|
|
|
|
|
|
List of possible easings
|
|
------------------------
|
|
|
|
- "linear"
|
|
- "sineOut"
|
|
- "sineIn"
|
|
- "sineInOut"
|
|
- "cubicOut"
|
|
- "cubicIn"
|
|
- "cubicInOut"
|
|
- "quartOut"
|
|
- "quartIn"
|
|
- "quartInOut"
|
|
- "springOutGeneric"
|
|
- "springOutWeak"
|
|
- "springOutMed"
|
|
- "springOutStrong"
|
|
- "springOutTooMuch"
|
|
|
|
``"sineOut"`` easing is usually a safe bet. In general ``"...Out"`` easing functions will yield a transition that is fast at the beginning of the transition but slows down towards the end, that style of transitions usually looks good on organic animations e.g. humanoids and creatures.
|
|
|
|
``"...In"`` transitions begin slow but end fast, ``"...InOut"`` begin fast, slowdown in the middle, end fast.
|
|
|
|
Its hard to give an example of use cases for the latter 2 types of easing functions, they are there for developers to experiment.
|
|
|
|
The possible easings are largely ported from `easings.net <https://easings.net/>`__ and have similar names. Except for the ``springOut`` family, those are similar to ``elasticOut``, with ``springOutWeak`` being almost identical to ``elasticOut``.
|
|
|
|
Don't be afraid to experiment with different timing and easing functions!
|