Call of Duty: XMODEL formats: Difference between revisions

From COD Modding & Mapping Wiki
Jump to navigation Jump to search
(Initial post, xmodel_export v5 format specs)
 
(Format specs v5 and v6 completion)
Line 1: Line 1:
= Intermediate (*.XMODEL_EXPORT)=
= Intermediate (*.XMODEL_EXPORT) =


== Version 5 (vCoD) ==
== Version 6 ==


=== Header ===
=== Header ===
<pre>// Source filename: 'C:\trees\model_source\character_models\character_lod\airborne_Low.max'
<pre>// Export filename: 'C:/Program Files/Activision/Call of Duty 4 - Modern Warfare/model_export/base_character/base_character.XMODEL_EXPORT'
// Export time: Fri Aug 01 15:44:31 2003
// Source filename: 'C:/Program Files/Activision/Call of Duty 4 - Modern Warfare/bin/maya/rigs/character/COD_DefMesh.mb'
// Export time: Mon Jan 07 15:55:16 2008
MODEL
MODEL
VERSION 5</pre>
VERSION 6</pre>
*// Comments (optional)
*'''// Comments''' (optional)
*MODEL data type definition (magic word)
*'''MODEL''' data type definition (magic word)
* VERSION number  
*'''VERSION''' format version number
 


=== Bone hierarchy table ===
=== Bone hierarchy table ===
[[File:Xmodel_TagTree.png|right|thumb|Visual bone hierarchy tree (section)]]
[[File:Xmodel_TagTree.png|right|thumb|Visual bone hierarchy tree (section)]]
<pre>NUMBONES 73
<pre>NUMBONES 126
BONE 0 -1 "TAG_ORIGIN"
BONE 0 -1 "TAG_ORIGIN"
BONE 1 0 "Bip01 Pelvis"
BONE 1 0 "J_MainRoot"
BONE 2 1 "Bip01 L Thigh"
BONE 2 0 "TAG_SYNC"
BONE 3 1 "Bip01 R Thigh"
BONE 3 1 "J_CoatFront_LE"
BONE 4 1 "J_CoatFront_RI"
BONE 5 1 "J_CoatRear_LE"
BONE 6 1 "J_CoatRear_RI"
BONE 7 1 "J_Hip_LE"
BONE 8 1 "J_Hip_RI"
BONE 9 1 "J_SpineLower"
BONE 10 1 "TAG_STOWED_HIP_REAR"
BONE 11 7 "J_HipTwist_LE"
BONE 12 8 "J_HipTwist_RI"
BONE 13 7 "J_Knee_LE"
...</pre>
...</pre>
*NUMBONES number of bones (note: bone numeration starts with zero, BONE 0 + BONE 1 + BONE 2 = NUMBONES 3)
*'''NUMBONES''' number of bones<br />Note: Numerations starts with zero, e.g. BONE 0 + BONE 1 + BONE 2 = NUMBONES 3<br />---
*BONE description:
*'''BONE''' description:
**Bone number
**Bone number
**Bone parent number (-1 = root origin, a model can only have one!)
**Parent number (-1 = root origin, a model can only have one!)
**Bone "name string" (has to be unique per model)
**"name string" (has to be unique per model)
 


=== Bone orientations===
=== Bone orientations===
Line 43: Line 56:
...</pre>
...</pre>


*BONE number (as declared in the hierarchy table)
*'''BONE''' number (as declared in the hierarchy table)
*OFFSET translations / position in the 3d space, like a coordinate (3x float)
*'''OFFSET''' translations / position in the 3d space, like a coordinate (3x float)
*SCALE bone scale, appears to be always 1.000000 (3x float)
*'''SCALE''' bone scale, appears to be always 1.000000 (3x float)
*'''X''' part of rotation matrix, basically the local x-axis of the bone (3x float)
*'''Y''' part of rotation matrix, basically the local y-axis of the bone = bone direction (3x float)
*'''Z''' part of rotation matrix, basically the local z-axis of the bone (3x float)


*X part of rotation matrix, basically the local x-axis of the bone (3x float)
*Y part of rotation matrix, basically the local y-axis of the bone = bone direction (3x float)
*Z part of rotation matrix, basically the local z-axis of the bone (3x float)


=== Vertices ===
=== Vertices ===
<pre>NUMVERTS 93
<pre>NUMVERTS 93
VERT 0
VERT 0
OFFSET 0.091243 -5.213182 29.123474
OFFSET -17.273228, -12.413740, 43.184647
BONES 2
BONE 88 0.020674
BONE 103 0.979326
 
VERT 1
OFFSET -16.432205, -12.622912, 43.149212
BONES 3
BONES 3
BONE 3 0.333333
BONE 103 0.657893
BONE 4 0.333333
BONE 115 0.232664
BONE 2 0.333333
BONE 125 0.109443
 
VERT 2
OFFSET -16.693701, -12.187638, 43.322441
BONES 1
BONE 103 1.000000
...</pre>
* '''NUMVERTS''' number of vertices in model<br />---
*'''VERT''' number
*'''OFFSET''' coordinate (3x float)
*'''BONES''' number of bones influencing this vertex
*'''BONE''' bone number as declared in the hierarchy table, normalized influence (float, between 0.000001 and 1.000000, all listed influences sum up to ~1.0)<br />The influences are controlled via weight painting in the 3d modelling application.
 
 
=== Faces ===
[[File:Triangulated Cube with Normals.png|thumb|right|Triangulated Cube, face normals shown in blue, selected triangle in orange]]
Faces are flat surfaces described by vertices. Call of Duty doesn't support quads or polygons with 5+ vertices. Each face is made up of 3 vertices. Thus, a face is always a triangle. A triangle definition is started with a TRI line, followed by 3 blocks of VERT, NORMAL, COLOR and UV to set up all triangle properties.
<pre>NUMFACES 6292
TRI 0 0 0 0
VERT 4
NORMAL -0.773691 0.437762 -0.458003
COLOR 0.679886 0.686872 0.684380 1.000000
UV 1 0.863103 0.886260
VERT 5
NORMAL 0.194225 0.477258 -0.857030
COLOR 0.455880 0.463456 0.460754 1.000000
UV 1 0.863439 0.887645
VERT 0
NORMAL -0.738602 0.340904 -0.581594
COLOR 0.696122 0.701748 0.699741 1.000000
UV 1 0.865185 0.885729
TRI 4 1 0 0
VERT 779
NORMAL -0.874954 -0.363632 0.319730
COLOR 1.149123 1.155146 1.152998 1.000000
UV 1 0.454800 0.496727
VERT 769
NORMAL -0.707711 -0.706459 0.007776
COLOR 1.233310 1.238597 1.236711 1.000000
UV 1 0.484654 0.505479
VERT 778
NORMAL -0.886900 -0.450325 -0.103034
COLOR 1.172201 1.178101 1.175997 1.000000
UV 1 0.455714 0.506690
...
</pre>
*'''NUMFACES''' number of faces in model<br />---
*'''TRI''' description:
**Number of the object, the triangle belongs to
**Material number,
**0 0 (static numbers)
*'''VERT''' vertex number
*'''NORMAL''' Face normal vector, normalized (3x float)
*'''COLOR''' Vertex color (4x float, RGBA?)
*'''UV''' description:
**1 (static number)
**UV texture coords (2x float)
 
 
 
=== Objects ===
This data block seems to have no effect on an xmodel file.
<pre>NUMOBJECTS 15
OBJECT 0 "_handRIShape"
OBJECT 1 "_handLEShape"
OBJECT 2 "polySurfaceShape3796"
OBJECT 3 "polySurfaceShape3797"
OBJECT 4 "_headShape"
...</pre>
*'''NUMOBJECTS''' number of objects in xmodel_export file<br />---
*'''OBJECT''' description:
**Object number
**"name string"
 
 
=== Materials ===
<pre>NUMMATERIALS 3
MATERIAL 0 "mtl_desert_marines" "Lambert" "marines_col_desert.tga"
COLOR 0.000000 0.000000 0.000000 1.000000
TRANSPARENCY 0.000000 0.000000 0.000000 1.000000
AMBIENTCOLOR 0.000000 0.000000 0.000000 1.000000
INCANDESCENCE 0.000000 0.000000 0.000000 1.000000
COEFFS 0.800000 0.000000
GLOW 0.000000 0
REFRACTIVE 6 1.000000
SPECULARCOLOR -1.000000 -1.000000 -1.000000 1.000000
REFLECTIVECOLOR -1.000000 -1.000000 -1.000000 1.000000
REFLECTIVE -1 -1.000000
BLINN -1.000000 -1.000000
PHONG -1.000000
...</pre>
 
*'''NUMMATERIALS''' number of materials<br />---
*'''MATERIAL''' description:
**Material number
**Material name
**Type (taken from 3d application, has no effect on xmodel)
**"texture file name"
Note: None of the following material data is useful, it will be ignored by the xmodel converter
*'''COLOR''' material RGBA color (4x float)
*'''TRANSPARENCY''' transparency RGBA color (4x float)
*'''AMBIENTCOLOR''' ambient RGBA color (4x float)
*'''INCANDESCENCE''' incandescence RGBA color (4x float)
*'''COEFFS''' coefficients (2x float)
*'''GLOW''' glow (float, int)
*'''REFRACTIVE''' refraction (int, float)
*'''SPECULARCOLOR''' specular RGBA color (4x float)
*'''REFLECTIVECOLOR''' reflection RGBA color (4x float)
*'''REFLECTIVE''' reflection (int, float)
*'''BLINN''' blinn (2x float)
*'''PHONG''' phong (float)
 
 
== Version 5 (CoD1) ==
 
Only differences compared to version 6 are listed.
 
=== Header ===
<pre>// Source filename: 'C:\trees\model_source\character_models\character_lod\airborne_Low.max'
// Export time: Fri Aug 01 15:44:31 2003
MODEL
VERSION 5</pre>
*'''// Comments''' (optional)
*'''MODEL''' data type definition (magic word)
*'''VERSION''' format version number


VERT 1
OFFSET 7.581652 -4.076623 29.466268
BONES 2
BONE 2 0.500000
BONE 4 0.500000</pre>
* NUMVERTS number of vertices in model
* Vertex description:
**VERT number
**OFFSET coordinate (3x float)
**BONES number of bones influencing this vertex
**BONE bone number as declared in the hierarchy table, normalized influence (float, between 0.000001 and 1.000000, all listed influences sum up to ~1.0)<br />The influences are controlled via weight painting in the 3d modelling application.


=== Faces ===
=== Faces ===
Line 85: Line 217:
VERT 2 0.503285 0.902194 0.830325 0.552277 0.074499
VERT 2 0.503285 0.902194 0.830325 0.552277 0.074499
VERT 1 0.435323 0.925295 0.690132 -0.722368 -0.043609
VERT 1 0.435323 0.925295 0.690132 -0.722368 -0.043609
VERT 6 0.399969 0.721943 0.699542 -0.713791 -0.033821</pre>
VERT 6 0.399969 0.721943 0.699542 -0.713791 -0.033821
*NUMFACES number of faces in model (face = triangle, quads are not supported!)
...</pre>
*Face description:
*'''NUMFACES''' number of faces in model (face = triangle, quads are not supported!)<br />---
**TRI triangle belonging to object n, unknown number, material number, 1
*'''TRI''' description:
**VERT vertex number, UV texture coords (2x float), face normal (3x float)
**Number of the object, the triangle belongs to
**''unknown number''
**Material number,
**1 (static number)
*'''VERT''' description:
**Vertex number
**UV texture coords (2x float)
**Face normal vector, normalized (3x float)


=== Objects ===
This data block seems to have no effect on an xmodel file.
<pre>NUMOBJECTS 3
OBJECT 0 "LowModel"
OBJECT 1 "lowhand"
OBJECT 2 "lowhand01"</pre>
*NUMOBJECTS number of objects in xmodel_export file
*Object description:
**OBJECT number, "name string"


=== Materials ===
=== Materials ===
Line 109: Line 239:
MATERIAL 4 "body@air_lowerleg.tga"
MATERIAL 4 "body@air_lowerleg.tga"
MATERIAL 5 "[email protected]"
MATERIAL 5 "[email protected]"
MATERIAL 6 "body@air_boots.tga"</pre>
MATERIAL 6 "body@air_boots.tga"
*NUMMATERIALS number of materials
...</pre>
*Material description:
*'''NUMMATERIALS''' number of materials<br />---
**MATERIAL number, "texture file name"
*'''MATERIAL''' description:
 
**Material number
 
**"texture file name"
== Version 6 (CoD2+) ==
=== Header ===
=== Bone hierarchy table ===
=== Bone orientations ===
=== Vertices ===
=== Faces ===
=== Objects ===
=== Materials ===
 
= Converted =
== Version ? ==
...

Revision as of 20:02, 28 August 2011

Intermediate (*.XMODEL_EXPORT)

Version 6

Header

// Export filename: 'C:/Program Files/Activision/Call of Duty 4 - Modern Warfare/model_export/base_character/base_character.XMODEL_EXPORT'
// Source filename: 'C:/Program Files/Activision/Call of Duty 4 - Modern Warfare/bin/maya/rigs/character/COD_DefMesh.mb'
// Export time: Mon Jan 07 15:55:16 2008
MODEL
VERSION 6
  • // Comments (optional)
  • MODEL data type definition (magic word)
  • VERSION format version number


Bone hierarchy table

Visual bone hierarchy tree (section)
NUMBONES 126
BONE 0 -1 "TAG_ORIGIN"
BONE 1 0 "J_MainRoot"
BONE 2 0 "TAG_SYNC"
BONE 3 1 "J_CoatFront_LE"
BONE 4 1 "J_CoatFront_RI"
BONE 5 1 "J_CoatRear_LE"
BONE 6 1 "J_CoatRear_RI"
BONE 7 1 "J_Hip_LE"
BONE 8 1 "J_Hip_RI"
BONE 9 1 "J_SpineLower"
BONE 10 1 "TAG_STOWED_HIP_REAR"
BONE 11 7 "J_HipTwist_LE"
BONE 12 8 "J_HipTwist_RI"
BONE 13 7 "J_Knee_LE"
...
  • NUMBONES number of bones
    Note: Numerations starts with zero, e.g. BONE 0 + BONE 1 + BONE 2 = NUMBONES 3
    ---
  • BONE description:
    • Bone number
    • Parent number (-1 = root origin, a model can only have one!)
    • "name string" (has to be unique per model)


Bone orientations

Local bone axis, corresponding to vectors of the bone's rotation matrix
BONE 0
OFFSET 0.000002 -2.222280 0.000042
SCALE 1.000000 1.000000 1.000000
X 0.000000 -1.000000 -0.000001
Y 1.000000 0.000000 0.000000
Z -0.000000 -0.000001 1.000000

BONE 1
OFFSET 4.866636 1.218493 37.227966
SCALE 1.000000 1.000000 1.000000
X -0.008941 0.033732 -0.999391
Y -0.004868 -0.999420 -0.033689
Z -0.999948 0.004564 0.009100
...
  • BONE number (as declared in the hierarchy table)
  • OFFSET translations / position in the 3d space, like a coordinate (3x float)
  • SCALE bone scale, appears to be always 1.000000 (3x float)
  • X part of rotation matrix, basically the local x-axis of the bone (3x float)
  • Y part of rotation matrix, basically the local y-axis of the bone = bone direction (3x float)
  • Z part of rotation matrix, basically the local z-axis of the bone (3x float)


Vertices

NUMVERTS 93
VERT 0
OFFSET -17.273228, -12.413740, 43.184647
BONES 2
BONE 88 0.020674
BONE 103 0.979326

VERT 1
OFFSET -16.432205, -12.622912, 43.149212
BONES 3
BONE 103 0.657893
BONE 115 0.232664
BONE 125 0.109443

VERT 2
OFFSET -16.693701, -12.187638, 43.322441
BONES 1
BONE 103 1.000000
...
  • NUMVERTS number of vertices in model
    ---
  • VERT number
  • OFFSET coordinate (3x float)
  • BONES number of bones influencing this vertex
  • BONE bone number as declared in the hierarchy table, normalized influence (float, between 0.000001 and 1.000000, all listed influences sum up to ~1.0)
    The influences are controlled via weight painting in the 3d modelling application.


Faces

Triangulated Cube, face normals shown in blue, selected triangle in orange

Faces are flat surfaces described by vertices. Call of Duty doesn't support quads or polygons with 5+ vertices. Each face is made up of 3 vertices. Thus, a face is always a triangle. A triangle definition is started with a TRI line, followed by 3 blocks of VERT, NORMAL, COLOR and UV to set up all triangle properties.

NUMFACES 6292
TRI 0 0 0 0
VERT 4
NORMAL -0.773691 0.437762 -0.458003
COLOR 0.679886 0.686872 0.684380 1.000000
UV 1 0.863103 0.886260 
VERT 5
NORMAL 0.194225 0.477258 -0.857030
COLOR 0.455880 0.463456 0.460754 1.000000
UV 1 0.863439 0.887645 
VERT 0
NORMAL -0.738602 0.340904 -0.581594
COLOR 0.696122 0.701748 0.699741 1.000000
UV 1 0.865185 0.885729
TRI 4 1 0 0
VERT 779
NORMAL -0.874954 -0.363632 0.319730
COLOR 1.149123 1.155146 1.152998 1.000000
UV 1 0.454800 0.496727 
VERT 769
NORMAL -0.707711 -0.706459 0.007776
COLOR 1.233310 1.238597 1.236711 1.000000
UV 1 0.484654 0.505479 
VERT 778
NORMAL -0.886900 -0.450325 -0.103034
COLOR 1.172201 1.178101 1.175997 1.000000
UV 1 0.455714 0.506690
...
  • NUMFACES number of faces in model
    ---
  • TRI description:
    • Number of the object, the triangle belongs to
    • Material number,
    • 0 0 (static numbers)
  • VERT vertex number
  • NORMAL Face normal vector, normalized (3x float)
  • COLOR Vertex color (4x float, RGBA?)
  • UV description:
    • 1 (static number)
    • UV texture coords (2x float)


Objects

This data block seems to have no effect on an xmodel file.

NUMOBJECTS 15
OBJECT 0 "_handRIShape"
OBJECT 1 "_handLEShape"
OBJECT 2 "polySurfaceShape3796"
OBJECT 3 "polySurfaceShape3797"
OBJECT 4 "_headShape"
...
  • NUMOBJECTS number of objects in xmodel_export file
    ---
  • OBJECT description:
    • Object number
    • "name string"


Materials

NUMMATERIALS 3
MATERIAL 0 "mtl_desert_marines" "Lambert" "marines_col_desert.tga"
COLOR 0.000000 0.000000 0.000000 1.000000
TRANSPARENCY 0.000000 0.000000 0.000000 1.000000
AMBIENTCOLOR 0.000000 0.000000 0.000000 1.000000
INCANDESCENCE 0.000000 0.000000 0.000000 1.000000
COEFFS 0.800000 0.000000
GLOW 0.000000 0
REFRACTIVE 6 1.000000
SPECULARCOLOR -1.000000 -1.000000 -1.000000 1.000000
REFLECTIVECOLOR -1.000000 -1.000000 -1.000000 1.000000
REFLECTIVE -1 -1.000000
BLINN -1.000000 -1.000000
PHONG -1.000000
...
  • NUMMATERIALS number of materials
    ---
  • MATERIAL description:
    • Material number
    • Material name
    • Type (taken from 3d application, has no effect on xmodel)
    • "texture file name"

Note: None of the following material data is useful, it will be ignored by the xmodel converter

  • COLOR material RGBA color (4x float)
  • TRANSPARENCY transparency RGBA color (4x float)
  • AMBIENTCOLOR ambient RGBA color (4x float)
  • INCANDESCENCE incandescence RGBA color (4x float)
  • COEFFS coefficients (2x float)
  • GLOW glow (float, int)
  • REFRACTIVE refraction (int, float)
  • SPECULARCOLOR specular RGBA color (4x float)
  • REFLECTIVECOLOR reflection RGBA color (4x float)
  • REFLECTIVE reflection (int, float)
  • BLINN blinn (2x float)
  • PHONG phong (float)


Version 5 (CoD1)

Only differences compared to version 6 are listed.

Header

// Source filename: 'C:\trees\model_source\character_models\character_lod\airborne_Low.max'
// Export time: Fri Aug 01 15:44:31 2003
MODEL
VERSION 5
  • // Comments (optional)
  • MODEL data type definition (magic word)
  • VERSION format version number


Faces

NUMFACES 172
TRI 0 0 0 1
VERT 10 0.873177 0.502103 0.514332 0.849479 0.117676
VERT 3 0.875169 0.254302 0.964290 0.262399 -0.035947
VERT 65 0.910332 0.493356 0.583699 0.238673 -0.776100
TRI 0 0 0 1
VERT 6 0.399969 0.721943 0.699542 -0.713791 -0.033821
VERT 3 0.470804 0.723883 0.964290 0.262399 -0.035947
VERT 2 0.503285 0.902194 0.830325 0.552277 0.074499
TRI 0 0 0 1
VERT 2 0.503285 0.902194 0.830325 0.552277 0.074499
VERT 1 0.435323 0.925295 0.690132 -0.722368 -0.043609
VERT 6 0.399969 0.721943 0.699542 -0.713791 -0.033821
...
  • NUMFACES number of faces in model (face = triangle, quads are not supported!)
    ---
  • TRI description:
    • Number of the object, the triangle belongs to
    • unknown number
    • Material number,
    • 1 (static number)
  • VERT description:
    • Vertex number
    • UV texture coords (2x float)
    • Face normal vector, normalized (3x float)


Materials

NUMMATERIALS 7
MATERIAL 0 "body@air_chest.tga"
MATERIAL 1 "body@air_upperarm.tga"
MATERIAL 2 "body@air_forearm.tga"
MATERIAL 3 "body@air_upperleg.tga"
MATERIAL 4 "body@air_lowerleg.tga"
MATERIAL 5 "[email protected]"
MATERIAL 6 "body@air_boots.tga"
...
  • NUMMATERIALS number of materials
    ---
  • MATERIAL description:
    • Material number
    • "texture file name"