| 1 | <!ELEMENT mesh (sharedgeometry?, submeshes,  | 
|---|
| 2 |         skeletonlink?, boneassignments?, levelofdetail?, submeshnames?, poses?, animations?, extremes?)> | 
|---|
| 3 | <!ELEMENT sharedgeometry (vertexbuffer+)> | 
|---|
| 4 | <!ATTLIST sharedgeometry | 
|---|
| 5 |         vertexcount CDATA #REQUIRED> | 
|---|
| 6 | <!ELEMENT submeshes (submesh+)> | 
|---|
| 7 | <!ELEMENT submesh (textures?,faces,geometry?,boneassignments?)> | 
|---|
| 8 | <!ATTLIST submesh  | 
|---|
| 9 |         material                        CDATA                   #REQUIRED | 
|---|
| 10 |         usesharedvertices       (true|false)    "true" | 
|---|
| 11 |         use32bitindexes         (true|false)    "false" | 
|---|
| 12 |         operationtype       (triangle_list|triangle_strip|triangle_fan) "triangle_list"> | 
|---|
| 13 | <!ELEMENT textures (texture+)> | 
|---|
| 14 | <!ELEMENT texture EMPTY> | 
|---|
| 15 | <!ATTLIST texture | 
|---|
| 16 |         alias   CDATA   #REQUIRED | 
|---|
| 17 |         name    CDATA   #REQUIRED> | 
|---|
| 18 | <!ELEMENT faces (face+)> | 
|---|
| 19 | <!ATTLIST faces  | 
|---|
| 20 |         count           CDATA   #IMPLIED> | 
|---|
| 21 | <!ELEMENT face EMPTY> | 
|---|
| 22 | <!-- Do not need all 3 vertex indexes if triangle_strip or triangle_fan | 
|---|
| 23 |      since every face after the first one is defined by a single vertex --> | 
|---|
| 24 | <!ATTLIST face  | 
|---|
| 25 |         v1              CDATA   #REQUIRED | 
|---|
| 26 |         v2              CDATA   #IMPLIED | 
|---|
| 27 |         v3              CDATA   #IMPLIED> | 
|---|
| 28 | <!ELEMENT geometry (vertexbuffer+)> | 
|---|
| 29 | <!ATTLIST geometry | 
|---|
| 30 |         vertexcount             CDATA           #IMPLIED > | 
|---|
| 31 | <!ELEMENT skeletonlink EMPTY> | 
|---|
| 32 | <!ATTLIST skeletonlink | 
|---|
| 33 |         name    CDATA   #REQUIRED> | 
|---|
| 34 | <!ELEMENT boneassignments (vertexboneassignment+)> | 
|---|
| 35 | <!ELEMENT vertexboneassignment EMPTY> | 
|---|
| 36 | <!ATTLIST vertexboneassignment  | 
|---|
| 37 |         vertexindex             CDATA   #REQUIRED | 
|---|
| 38 |         boneindex               CDATA   #REQUIRED | 
|---|
| 39 |         weight                  CDATA   "1.0"> | 
|---|
| 40 | <!ELEMENT levelofdetail ( (lodmanual|lodgenerated)+ )> | 
|---|
| 41 | <!ATTLIST levelofdetail  | 
|---|
| 42 |         numlevels               CDATA                   #REQUIRED | 
|---|
| 43 |         manual                  (true|false)    "false"> | 
|---|
| 44 | <!ELEMENT lodmanual EMPTY> | 
|---|
| 45 | <!ATTLIST lodmanual | 
|---|
| 46 |         fromdepthsquared        CDATA   #REQUIRED | 
|---|
| 47 |         meshname                        CDATA   #REQUIRED> | 
|---|
| 48 | <!ELEMENT lodgenerated (lodfacelist)> | 
|---|
| 49 | <!ATTLIST lodgenerated | 
|---|
| 50 |         fromdepthsquared        CDATA   #REQUIRED | 
|---|
| 51 |         meshname                        CDATA   #REQUIRED> | 
|---|
| 52 | <!ELEMENT lodfacelist (face)+> | 
|---|
| 53 | <!ATTLIST lodfacelist | 
|---|
| 54 |         submeshindex            CDATA   #REQUIRED | 
|---|
| 55 |         numfaces                        CDATA   #REQUIRED> | 
|---|
| 56 |          | 
|---|
| 57 | <!ELEMENT vertexbuffer (vertex+)> | 
|---|
| 58 | <!ATTLIST vertexbuffer | 
|---|
| 59 |         positions                                       (true|false)    "false" | 
|---|
| 60 |         normals                                         (true|false)    "false" | 
|---|
| 61 |         colours_diffuse                         (true|false)    "false" | 
|---|
| 62 |         colours_specular                        (true|false)    "false" | 
|---|
| 63 |         texture_coords                          (0|1|2|3|4|5|6|7|8)     "0" | 
|---|
| 64 |         texture_coord_dimensions_0      (0|1|2|3)                       "2" | 
|---|
| 65 |         texture_coord_dimensions_1      (0|1|2|3)                       "2" | 
|---|
| 66 |         texture_coord_dimensions_2      (0|1|2|3)                       "2" | 
|---|
| 67 |         texture_coord_dimensions_3      (0|1|2|3)                       "2" | 
|---|
| 68 |         texture_coord_dimensions_4      (0|1|2|3)                       "2" | 
|---|
| 69 |         texture_coord_dimensions_5      (0|1|2|3)                       "2" | 
|---|
| 70 |         texture_coord_dimensions_6      (0|1|2|3)                       "2" | 
|---|
| 71 |         texture_coord_dimensions_7      (0|1|2|3)                       "2" | 
|---|
| 72 |         tangents                                        (true|false)    "false" | 
|---|
| 73 |         binormals                                       (true|false)    "false"> | 
|---|
| 74 | <!ELEMENT vertex (position, normal?, tangent?, binormal?, colour_diffuse?, colour_specular?,  | 
|---|
| 75 |         texcoord*)> | 
|---|
| 76 | <!ELEMENT position EMPTY> | 
|---|
| 77 | <!ATTLIST position  | 
|---|
| 78 |         x       CDATA   #REQUIRED        | 
|---|
| 79 |         y       CDATA   #REQUIRED        | 
|---|
| 80 |         z       CDATA   #REQUIRED > | 
|---|
| 81 | <!ELEMENT normal EMPTY> | 
|---|
| 82 | <!ATTLIST normal  | 
|---|
| 83 |         x       CDATA   #REQUIRED        | 
|---|
| 84 |         y       CDATA   #REQUIRED        | 
|---|
| 85 |         z       CDATA   #REQUIRED > | 
|---|
| 86 | <!ELEMENT tangent EMPTY> | 
|---|
| 87 | <!ATTLIST tangent  | 
|---|
| 88 |         x       CDATA   #REQUIRED        | 
|---|
| 89 |         y       CDATA   #REQUIRED        | 
|---|
| 90 |         z       CDATA   #REQUIRED > | 
|---|
| 91 | <!ELEMENT binormal EMPTY> | 
|---|
| 92 | <!ATTLIST binormal  | 
|---|
| 93 |         x       CDATA   #REQUIRED        | 
|---|
| 94 |         y       CDATA   #REQUIRED        | 
|---|
| 95 |         z       CDATA   #REQUIRED > | 
|---|
| 96 | <!ELEMENT colour_diffuse EMPTY> | 
|---|
| 97 | <!-- 'value' is a space-separated string containing r,g,b and optionally alpha | 
|---|
| 98 |          for example value="1.0 0.0 0.0 0.5" or value="0.7 0.5 0.2" --> | 
|---|
| 99 | <!ATTLIST colour_diffuse  | 
|---|
| 100 |         value   CDATA   #REQUIRED> | 
|---|
| 101 | <!ELEMENT colour_specular EMPTY> | 
|---|
| 102 | <!-- 'value' is a space-separated string containing r,g,b and optionally alpha | 
|---|
| 103 |          for example value="1.0 0.0 0.0 0.5" or value="0.7 0.5 0.2" --> | 
|---|
| 104 | <!ATTLIST colour_specular  | 
|---|
| 105 |         value   CDATA   #REQUIRED> | 
|---|
| 106 | <!ELEMENT texcoord EMPTY> | 
|---|
| 107 | <!ATTLIST texcoord | 
|---|
| 108 |         u       CDATA   #REQUIRED        | 
|---|
| 109 |         v       CDATA   "0"      | 
|---|
| 110 |         w       CDATA   "0" > | 
|---|
| 111 | <!ELEMENT submeshnames (submeshname+)> | 
|---|
| 112 | <!ELEMENT submeshname EMPTY> | 
|---|
| 113 | <!ATTLIST submeshname  | 
|---|
| 114 |         name    CDATA   #REQUIRED | 
|---|
| 115 |         index   CDATA   #REQUIRED > | 
|---|
| 116 | <!ELEMENT poses (pose+)> | 
|---|
| 117 | <!-- A single pose references a single set of geometry data with a set of offsets. | 
|---|
| 118 |         If target is 'mesh', targets the shared geometry, if target is submesh, targets | 
|---|
| 119 |         the submesh identified by 'index'. | 
|---|
| 120 | --> | 
|---|
| 121 | <!ELEMENT pose (poseoffset+) > | 
|---|
| 122 | <!ATTLIST pose | 
|---|
| 123 |         target  (mesh|submesh) #REQUIRED | 
|---|
| 124 |         index   CDATA   "0" | 
|---|
| 125 |         name    CDATA   ""> | 
|---|
| 126 | <!-- poseoffset lists the vertices that change position, and by how much --> | 
|---|
| 127 | <!ELEMENT poseoffset EMPTY> | 
|---|
| 128 | <!ATTLIST poseoffset | 
|---|
| 129 |     index       CDATA   #REQUIRED | 
|---|
| 130 |         x               CDATA   #REQUIRED | 
|---|
| 131 |         y               CDATA   #REQUIRED | 
|---|
| 132 |         z               CDATA   #REQUIRED > | 
|---|
| 133 | <!ELEMENT animations (animation+)> | 
|---|
| 134 | <!ELEMENT animation (tracks)> | 
|---|
| 135 | <!ATTLIST animation | 
|---|
| 136 |         name    CDATA   #REQUIRED  | 
|---|
| 137 |         length  CDATA   #REQUIRED > | 
|---|
| 138 | <!ELEMENT tracks (track+)> | 
|---|
| 139 | <!ELEMENT track (keyframes)> | 
|---|
| 140 | <!-- Morph animation is a keyframed set of absolute vertex positions. Cannot | 
|---|
| 141 |      be blended with other morph animations or pose animation. | 
|---|
| 142 |      Pose animation is a set of keyframes referencing poses and a weight, | 
|---|
| 143 |          with one track per set of vertex data. | 
|---|
| 144 |          Can be blended with other poses but not with morph animation.  | 
|---|
| 145 |         If target is 'mesh', targets the shared geometry, if target is submesh, targets | 
|---|
| 146 |         the submesh identified by 'index'.  | 
|---|
| 147 | --> | 
|---|
| 148 | <!ATTLIST track  | 
|---|
| 149 |         target  (mesh|submesh) #REQUIRED | 
|---|
| 150 |         index   CDATA   "0" | 
|---|
| 151 |         type    (morph|pose) #REQUIRED> | 
|---|
| 152 | <!-- keyframes are applicable for all tracks, but for morph tracks | 
|---|
| 153 |      they contain positions, and for pose tracks they contain pose references --> | 
|---|
| 154 | <!ELEMENT keyframes (keyframe*)> | 
|---|
| 155 | <!ELEMENT keyframe (position*, poseref*)> | 
|---|
| 156 | <!ATTLIST keyframe | 
|---|
| 157 |         time    CDATA   #REQUIRED > | 
|---|
| 158 | <!-- Pose reference, links to pose via numeric index. target of parent track | 
|---|
| 159 |         must agree with target of referenced pose. For a single track, each | 
|---|
| 160 |         keyframe can reference multiple poses at different weights. --> | 
|---|
| 161 | <!ELEMENT poseref EMPTY> | 
|---|
| 162 | <!ATTLIST poseref  | 
|---|
| 163 |         poseindex       CDATA   #REQUIRED | 
|---|
| 164 |         influence       CDATA   "1.0"> | 
|---|
| 165 | <!-- Optional extremity points on submeshes for sub-object transparency sorting --> | 
|---|
| 166 | <!ELEMENT extremes (submesh+)> | 
|---|
| 167 | <!ELEMENT submesh_extremes (position+)> | 
|---|
| 168 | <!ATTLIST submesh_extremes | 
|---|
| 169 |         index   CDATA   #REQUIRED> | 
|---|
| 170 |  | 
|---|
| 171 |          | 
|---|
| 172 |  | 
|---|
| 173 |          | 
|---|
| 174 |                                  | 
|---|
| 175 |          | 
|---|
| 176 |  | 
|---|
| 177 |  | 
|---|
| 178 |  | 
|---|
| 179 |  | 
|---|