While stored in UTF format like most other assets they have a different structure to rigid meshes (VMesh).
Deformable models are always compound, consist of multiple parts representing bones of skeleton. Skeleton hierarchy is defined by Cmpnd much like rigid compound models are.
Mesh data is stored within MultiLevel entry located in UTF root entry.
Deformable meshes aren’t shareable between files, meshes defined within .dfm file are in local scope.
Single-part rigid meshes also happen to use entry of the same name to store VMeshPart/VMeshRefs for each LOD, however contents of MultiLevel for deformable mesh are different. Luckily you can avoid mixing the two by checking presence of Cmpnd within UTF as well, as rigid model has either Cmpnd or MultiLevel but never both which is the case only for deformable models.
Entry | Type | Name | Description |
---|---|---|---|
Fractions | float | Level of Detail | LOD fractions from range defined in INIs, amount of floats indices how many Mesh* entries are expected |
Mesh* | folder | Mesh LOD | |
Face_groups | folder | Face groups | |
Count | uint32 | Face group counter | Indicates how many Group* are to follow |
Group* | folder | Face group | |
Material_name | string | Group material | Name of material to use for this group of mesh faces |
Tristrip_indices | uint16 | Triangle strip | Vertex indices of triangles strip |
Face_indices | uint16 | Triangle array | Vertex indices of triangles array |
Geometry | folder | LOD geometry | |
Point_indices | uint32 | ? | ? |
UV0_indices | uint32 | ? | ? |
UV1_indices | uint32 | ? | ? |
Points | float | Vertex coordinates | 3x float per vertex |
Point_bone_first | uint32 | ? | ? |
Point_bone_count | uint32 | ? | ? |
Bone_id_chain | uint32 | ? | ? |
Bone_weight_chain | uint8 | ? | 4x per bone? |
Vertex_normals | float | Vertex normals | 3x float per vertex |
UV0 | float | Map 0 UV | UV coordinates (2xfloat) |
UV1 | float | Map 1 UV | UV coordinates (2xfloat) |
Min_du | float | Min U Delta | Single float |
Max_du | float | Max U Delta | Single float |
Min_dv | float | Min V Delta | Single float |
Max_dv | float | Max V Delta | Single float |
Bone_X_to_U_scale | float | Bone X to Map 1 U | Bone X position translation scales to Map 1 U |
Bone_Y_to_V_scale | float | Bone Y to Map 1 V | Bone Y position translation scales to Map 1 V |
UV_bone_id | uint32 | Bone ID | Bone which affects selected vertices UV |
UV_vertex_count | uint32 | Vertex count | UV_vertex_id? |
UV_vertex_id | uint32 | Vertex IDs | Vertices affected by bone at UV_bone_id |
UV_default_list | float | UVs | Default UV coordinates for vertices in UV_vertex_id? |
UV_plane_distance | float | ? | Default 1? |