Documentation how to get an Animated creature in OpenMW

C++20
Matjaž Lamut 3 years ago committed by psi29a
parent 2a7d28712f
commit 2d4d28fb8e

@ -18,7 +18,7 @@ Below is a quick overview of supported formats, followed by separate articles wi
:caption: Table of Contents
:maxdepth: 1
pipeline-blender-collada
pipeline-blender-collada-static-models
pipeline-blender-collada-animated-creature
pipeline-blender-osgnative
pipeline-blender-nif

@ -0,0 +1,221 @@
#############################
Animated Creature via COLLADA
#############################
This tutorial shows how to get an animated creature from Blender to OpenMW using
the COLLADA format. It does not cover using Blender itself, as there are many
better resources for that. The focus is solely on the animation pipeline and its
specific requirements. Most of them are related to how the model, rig, and
animations are set up in Blender.
.. note::
This tutorial builds upon the :doc:`pipeline-blender-collada-static-models` tutorial. All fundamentals of exporting static objects apply to animated ones as well.
Requirements
************
To use the Blender to OpenMW pipeline via COLLADA, you will need the following.
* `OpenMW 0.48 <https://openmw.org/downloads/>`_ or later
* `Blender 2.83 <https://www.blender.org/download/>`_ or later. Latest confirmed, working version is Blender 3.0
* `OpenMW COLLADA Exporter <https://github.com/openmw/collada-exporter>`_
* An animated model you would like to export. In our case the flamboyant Land Racer!
The Land Racer
**************
The creature, and its revelant files, are available from the `Example Suite repository <https://gitlab.com/OpenMW/example-suite/-/tree/master/example_animated_creature>`_.
This should be useful for further study of how to set things up in case this
tutorial is not clear on any particular thing.
* ``data/meshes/land_racer.dae`` exported model
* ``data/meshes/land_racer.txt`` animation textkeys
* ``data/textures/land_racer.dds`` diffuse texture
* ``data/textures/land_racer_n.dds`` - normal map
* ``source_assets/land_racer.blend`` source file configured as this tutorial specifies
Model
*****
The model needs to be a child of the rig and have an Armature modifier asigned.
Bone weights are limited to a maximum of 4 bones per vertex. The model needs to
have default location, rotation, and scale.
.. image:: https://gitlab.com/OpenMW/openmw-docs/-/raw/master/docs/source/reference/modding/custom-models/_static/landracer-in-blender.jpg
:align: center
Collision Shape
***************
Collision is set up with an empty named ``Collision`` or ``collision`` with a
single child mesh. OpenMW will use the bounding box of this mesh for physics
collision shape so a simple, cuboid mesh is enough. If no collision shape is
defined, the bounding box of the animated model will be used instead.
.. image:: https://gitlab.com/OpenMW/openmw-docs/-/raw/master/docs/source/reference/modding/custom-models/_static/landracer-collision-shape.jpg
:align: center
Armature / Rig
**************
.. note::
Only a single rig object should be included in the exported file. Exporting multiple rigs is not reliably supported and can lead to errors.
Root
----
The rig needs to be structured in a specific way. There should be a single top
bone in the rigs hierarchy, the root bone named ``Bip01``. The name is
required so OpenMW recognizes and uses it for root movement. For this same
reason, the bone should be by default aligned with the world. The root bone
needs to have its ``Deform`` flag **enabled**.
.. image:: https://gitlab.com/OpenMW/openmw-docs/-/raw/master/docs/source/reference/modding/custom-models/_static/landracer-root-bone.jpg
:align: center
Deform Bones
------------
Below the root bone, the bones are divided into two branches. One branch
contains the deform bones which get included in the final exported file. These
are otherwise not animated directly but inherit motion from other bones via
constraints. They have their ``Deform`` flag **enabled**. For creatures, the
deform bones can be named as you desire and dont need to follow the naming
convention used for NPC and player models.
.. image:: https://gitlab.com/OpenMW/openmw-docs/-/raw/master/docs/source/reference/modding/custom-models/_static/landracer-rig-hierarchy.jpg
:align: center
Control Bones
-------------
The other branch holds control and helper bones that enable comfortable
animation in Blender, but are neither required nor included in the exported
file. They have their ``Deform`` flag **disabled**. How these bones are
structured is a big separate topic on its own that this tutorial does not cover,
but you can study the provided source file.
Animations
**********
A creature in OpenMW is expected to have a set of animations to display its
various actions. These animations are recognized and used by their name.
.. list-table::
:widths: 25 25 50
:header-rows: 1
* - Animation name
- Possible variations
- Purpose
* - attack1
- attack2, attack3
- The creature performs an attack
* - death1
- death2 - death5
- The creature dies while upright
* - hit1
- hit2 - hit5
- The creature is hit in combat
* - idle
- idle2 - idle9
- Flavour animations when the creature does nothing in particular
* - knockout
- /
- When creature's fatigue goes below 0 and it staggers to the ground
* - deathknockout
- /
- The creature dies while knocked out
* - knockdown
- /
- When the creatures receives a heavy hit in combat or lands from a considerable height
* - deathknockdown
- /
- The creature dies while knocked down
* - runforward
- /
- Moving forward fast
* - walkforward
- /
- Moving forward at regular speed
Animating in Blender is done at 30 fps. Specific to how OpenMW works, each
exported animation needs to take a unique range on the timeline. To achieve
this, actions are placed as strips in the NLA editor with an obligatory one
frame gap between them.
.. image:: https://gitlab.com/OpenMW/openmw-docs/-/raw/master/docs/source/reference/modding/custom-models/_static/landracer-nla-strips.jpg
:align: center
NLA strips affect the exported result based on their scale, name, frame range,
repetition, or any other factor affecting the end animation result. It's
*What you see is what you get* principle.
Root movement is required for animations such as ``walkforward`` and
``runforward`` and is likely to work for other animations if needed.
Root movement works only when the root bone is named ``Bip01``.
Textkeys
********
The exported COLLADA file requires a corresponding textkeys file for OpenMW to
properly read the animations. Textkeys is a ``.txt`` file containing animation
definitions and events. At a minimum it needs to include at least animation
``start`` and ``stop`` values in a format as shown in this example.
.. code::
idle: start 0.033333
idle: stop 2.033333
walkforward: start 2.066667
walkforward: stop 3.666667
runforward: start 3.7
runforward: stop 4.433333
attack1: start 4.466667
attack1: stop 5.433333
...
The textkeys file is placed in the same folder as the model and matches the model's name.
* ``meshes/land_racer.dae``
* ``meshes/land_racer.txt``
While it's possible to write it by hand, OpenMW's Collada Exporter offers a
convenient option to export a textkeys file based on Blender's timeline markers
(not to be confused with pose markers which are contained per action). What you
need to do is create properly named timeline markers for each animation and
enable the ``Export Textkeys`` option in the exporter.
.. image:: https://gitlab.com/OpenMW/openmw-docs/-/raw/master/docs/source/reference/modding/custom-models/_static/landracer-textkey-markers.jpg
:align: center
In the example of ``walkforward`` the timeline markers should be named
``walkforward: start`` and ``walkforward: stop``.
Exporter Settings
*****************
For animated models, use the following exporter settings. Before export, select
all objects you wish to include in the exported file and have the ``Selected
Objects`` option enabled. Without this, the exporter could fail.
.. image:: https://gitlab.com/OpenMW/openmw-docs/-/raw/master/docs/source/reference/modding/custom-models/_static/landracer-exporter-settings.jpg
:align: center
Getting the Model In-game
*************************
Once the Land Racer is exported, both of its ``.dae`` and ``.txt`` files need to
be placed in the correct folder where OpenMW will read it. Afterwards in
OpenMW-CS, it should be visible in the Assets->Meshes table and can be assigned
to the ``Model/Animation`` field of a creature.
.. image:: https://gitlab.com/OpenMW/openmw-docs/-/raw/master/docs/source/reference/modding/custom-models/_static/landracer-in-openmwcs.jpg
:align: center
Loading…
Cancel
Save