Ex Data
Overview
[edit | edit source]Ex Data exists in Project DIVA to add bones that aren't present in the original DIVA skeleton, allow expression-driven animation, and to add physics to bone strands. It can be edited in MikuMikuModel, and are usually referred to as "blocks." Most of the Ex Data system was seemingly based on AutoDesk's SoftImage
Expression Blocks (EXP)
[edit | edit source]Expression Blocks are the main way to add non-standard bones to a model, and provide a way to add simple animations and math-driven animation.
| Expressions | (Collection) | Collection of expression strings (see below) |
|---|---|---|
| Name | [Name of Block] | Name of the expression block internally |
| ParentName | [Name of Parent] | Name of the parent |
| Position | [Position in Local Space] | [X,Y,Z] |
| Rotation | [Rotation in Radians and Local Space] | [X,Y,Z] |
| Scale | [Scale of Block] | [X,Y,Z] |
| Signature | EXP | (Not Editable) |
Expressions themselves are formatted as such:
= [Component] [Instruction]
Here is the full list of Components and Instructions
Osage Blocks (OSG)
[edit | edit source]Osage Blocks are how Project DIVA determines what bones should receive real-time physics. It is important to note that an Osage Block generally applies to a whole chain of bones, instead of individual bones. The Osage block itself holds;
| ExternalName | [Name of Osage] | Name of the Osage block externally |
|---|---|---|
| Name | [Name of Block] | Name of the Osage block internally |
| Nodes | (Collection) | Collection of bones (nodes) for the Osage strand |
| ParentName | [Name of Parent] | Name of the parent |
| Position | [Position in Local Space] | [X,Y,Z] |
| Rotation | [Rotation in Radians and Local Space] | [X,Y,Z] |
| Scale | [Scale of Block] | [X,Y,Z] |
| Signature | OSG | (Not Editable) |
Note: ExternalName is what is used in the Skin Param to set settings for the Osage strand, not Name.
Osage Nodes
[edit | edit source]An Osage block holds a collection of nodes, the bones that belong to the Osage block. The collection of nodes is as such:
| Length | [Length of Node] | Actual length of the bone |
|---|---|---|
| Name | [Name of Node] | Name of the bone |
| Rotation | [Rotation in Radians and Local Space | [X,Y,Z] |
| SiblingMaxDistance | [Distance from Sibling] | Distance the node can travel from the Sibling |
| SiblingName | [Name of Sibling] | Name of the Sibling node |
Note: An Osage block can hold multiple Osage Nodes
Constraint Blocks (CNS)
[edit | edit source]Constraint blocks are the best way to copy the direction or orientation of another bone without using expressions, and are best used on bones that need to maintain an offset while being affected by another bone. A great example of this system is Skyth's Sonic Modules, being able to copy the DIVA skeleton while keeping the original model's armature intact.
Direction Constraint Block
[edit | edit source]This is the main way to point a bone towards another bone.
| Coupling | [Rigid or Soft] | Coupling method |
|---|---|---|
| Data | MikuMikuLibrary.Objects.Extra.Blocks.PositionConstraintData | Direction Constraint |
| ConstrainedObject | MikuMikuLibrary.Objects.Extra.Blocks.AttachPointData | Always AttachPointData(?) |
| AffectedByOrientation | [True or False] | Constrained bone uses orientation if true |
| AffectedByScaling | [True or False] | Constrained bone uses scale if true |
| Offset | [X, Y, Z] | Offset of constrained bone |
| ConstrainingObject | MikuMikuLibrary.Objects.Extra.Blocks.AttachPointData | Always AttachPointData(?) |
| AffectedByOrientation | [True or False] | Constraining bone uses orientation if true |
| AffectedByScaling | [True or False] | Constraining bone uses scale if true |
| Offset | [X, Y, Z] | Offset of constraining bone |
| Type | Position | Not Editable |
| UpVector | MikuMikuLibrary.Objects.Extra.Blocks.UpVectorData | Always UpVectorData(?) |
| Active | [True or False] | Constrained bone uses Up Vector if true |
| AffectedAxis | [X, Y, Z] | Determines which axis is used as the Up Vector |
| Name | [Name] |
Editors' Note: I can't find this used anywhere |
| PointAt | [X, Y, Z] | Where the Up Vector should point |
| Roll | [Value] | Roll of the Up Vector(?) |
| Name | [Name of Block] | Name of Constraint Block |
| ParentName | [Name of Parent] | Name of Parent |
| Position | [Position in Local Space] | [X,Y,Z] |
| Rotation | [Rotation in Radians and Local Space] | [X,Y,Z] |
| Scale | [Scale] | [X,Y,Z] |
| Signature | CNS | Not Editable |
| SourceNodeName | [Name of Source Node] | Constraining bone |
Note: Much of this is sourced from Softimage 2014's Manual
Orientation Constraint Block
[edit | edit source]This is the main way to copy a bone's orientation.
| Coupling | [Rigid or Soft] | Coupling method |
|---|---|---|
| Data | MikuMikuLibrary.Objects.Extra.Blocks.OrientationConstraintData | Orientation Constraint |
| Offset | [X, Y, Z] | Offset of rotation |
| Type | Orientation | Not Editable |
| Name | [Name of Block] | Name of Constraint Block |
| ParentName | [Name of Parent] | Name of Parent |
| Position | [Position in Local Space] | [X,Y,Z] |
| Rotation | [Rotation in Radians and Local Space] | [X,Y,Z] |
| Scale | [Scale] | [X,Y,Z] |
| Signature | CNS | Not Editable |
| SourceNodeName | [Name of Source Node] | Constraining bone |
Clothing Block (CLS)
[edit | edit source]Also referred to as "soft body physics", this is the best way to add physics to complex meshes, like Luka's skirt on her default module. Unfortunately, MikuMikuModel does not support this block in its entirety yet, and can't properly import models that make use of it.
| BackFaceName | [Name of Mesh] | Name of the mesh used for backfaces |
|---|---|---|
| Field08 | [Value] | Undocumented |
| Field10 | [Value] | Undocumented |
| Field14 | [Value] | Undocumented |
| Field18 | [Matrix4x4 Array] | Undocumented |
| Field1C | [Collection] | Undocumented |
| Field20 | [Collection] | Undocumented |
| Field24 | uInt16 Array | Undocumented (Array length is same as vertex count?) |
| Field28 | uInt16 Array | Undocumented (Array length is same as vertex count?) |
| Field30 | [Value] | Undocumented |
| Name | [Name of Mesh] | Name of the mesh |
| Signature | CLS | Not Editable |
Motion Block (MOT)
[edit | edit source]Motion blocks are able to animate bones on a character, but are only used in Project DIVA F, Project DIVA F2nd, and Project DIVA X.
| Name | [Name of Block] | Name of the motion block internally |
|---|---|---|
| Nodes | (Collection) | Collection of bones |
| ParentName | [Name of Parent] | Name of the parent |
| Position | [Position in Local Space] | [X,Y,Z] |
| Rotation | [Rotation in Radians and Local Space] | [X,Y,Z] |
| Scale | [Scale of Block] | [X,Y,Z] |
| Signature | MOT | (Not Editable) |
Unused Blocks (ITM, LGT)
[edit | edit source]There are two unused Ex Data signatures in Arcade Future Tone's data, being ITM and LGT. Both act as a CNS block internally.
