Ex Data: Difference between revisions

From DivaDocs
Made the whole page
 
Platonic (talk | contribs)
 
Line 35: Line 35:
|}
|}
Expressions themselves are formatted as such:
Expressions themselves are formatted as such:
  [Component] = [Instruction]
  = [Component] [Instruction]
Here is the full list of [[Expression Components and Instructions|Components and Instructions]]
Here is the full list of [[Expression Components and Instructions|Components and Instructions]]



Latest revision as of 04:17, 17 September 2025

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.

Expression Block
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;

Osage Block
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:

Osage Node
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.

Direction Constraint Block
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.

Orientation Constraint Block
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.

Clothing Block
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.

Motion Block
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.