Custom file formats
Custom file formats 
  Urho3D tries to use existing file formats whenever possible, and define custom file formats only when absolutely necessary. Currently used custom file formats are:
binary model format (.mdl)
Model geometry and vertex morph data
byte[4]    Identifier "UMDL" or "UMD2"
uint       Number of vertex buffers
  For each vertex buffer:
  uint       Vertex count
  uint       Legacy vertex element mask (determines vertex size)
  uint       Morphable vertex range start index
  uint       Morphable vertex count
  byte[]     Vertex data (vertex count * vertex size)
  In "UMD2" format, the legacy vertex element mask is replaced with the following:
  uint       Vertex element count
  uint[]     Descriptions for each vertex element, where
             bits 0-7 = element data type, bits 8-15 = semantic, bits 16-23 = semantic index
uint    Number of index buffers
  For each index buffer:
  uint       Index count
  uint       Index size (2 for 16-bit indices, 4 for 32-bit indices)
  byte[]     Index data (index count * index size)
uint    Number of geometries
  For each geometry:
  uint       Number of bone mapping entries
  uint[]     Bone mapping data, Maps geometry bone indices to global bone indices for HW skinning.
             May be empty, in this case identity mapping will be used.
  uint       Number of LOD levels
    For each LOD level:
    float      LOD distance
    uint       Primitive type (0 = triangle list, 1 = line list)
    uint       Vertex buffer index, starting from 0
    uint       Index buffer index, starting from 0
    uint       Draw range: index start
    uint       Draw range: index count
uint    Number of vertex morphs (may be 0)
  For each vertex morph:
  cstring    Name of morph
  uint       Number of affected vertex buffers
    For each affected vertex buffer:
    uint       Vertex buffer index, starting from 0
    uint       Vertex element mask for morph data. Only positions, normals & tangents are supported.
    uint       Vertex count
      For each vertex:
      uint       Vertex index
      Vector3    Position (if included in the mask)
      Vector3    Normal (if included in the mask)
      Vector3    Tangent (if included in the mask)
Skeleton data
uint       Number of bones (may be 0)
  For each bone:
  cstring    Bone name
  uint       Parent bone index starting from 0. Same as own bone index for the root bone
  Vector3    Initial position
  Quaternion Initial rotation
  Vector3    Initial scale
  float[12]  4x3 offset matrix for skinning
  byte       Bone collision info bitmask. 1 = bounding sphere 2 = bounding box
  If bounding sphere data included:
  float      Bone radius
  If bounding box data included:
  Vector3    Bone bounding box minimum
  Vector3    Bone bounding box maximum
Bounding box data
Vector3    Model bounding box minimum
Vector3    Model bounding box maximum
Geometry center data
  For each geometry:
  Vector3    Geometry centerbinary animation format (.ani)
byte[4]    Identifier "UANI"
cstring    Animation name
float      Length in seconds
uint       Number of tracks
  For each track:
  cstring    Track name (practically same as the bone name that should be driven)
  byte       Mask of included animation data. 1 = bone positions 2 = bone rotations 4 = bone scaling
  uint       Number of keyframes
    For each keyframe:
    float      Time position in seconds
    Vector3    Position (if included in data)
    Quaternion Rotation (if included in data)
    Vector3    Scale (if included in data)
Note: animations are stored using absolute bone transformations. Therefore only lerp-blending between animations is supported; additive pose modification is not.
Direct3D9 binary shader format (.vs3, .ps3)
byte[4]    Identifier "USHD"
short      Shader type (0 = vertex, 1 = pixel)
short      Shader model (3)
uint       Number of constant parameters
    For each constant parameter:
    cstring    Parameter name
    byte       Register index
    byte       Number of registers
uint       Number of texture units
    For each texture unit:
    cstring    Texture unit name
    byte       Sampler index
uint       Bytecode size
byte[]     Bytecode
Direct3D11 binary shader format (.vs4, .ps4)
byte[4]    Identifier "USHD"
short      Shader type (0 = vertex, 1 = pixel)
short      Shader model (4)
uint       Vertex element hash code (0 for pixel shaders)
uint       Number of constant parameters
    For each constant parameter:
    cstring    Parameter name
    byte       CBuffer index
    uint       Start byte offset in CBuffer
    uint       Byte size
uint       Number of texture units
    For each texture unit:
    cstring    Texture unit name
    byte       Sampler index
uint       Bytecode size
byte[]     Bytecode
Package file (.pak)
byte[4]    Identifier "UPAK" or "ULZ4" if compressed
uint       Number of file entries
uint       Whole package checksum
    For each file entry:
    cstring    Name
    uint       Start offset
    uint       Size
    uint       Checksum
    The compressed data for each file is the following, repeated until the file is done:
    ushort     Uncompressed length of block
    ushort     Compressed length of block
    byte[]     Compressed data
Compiled AngelScript (.asc)
byte[4] Identifier "ASBC" byte[] Bytecode, produced by AngelScript serializer
