RX3 file format research thread


Senior Squad
A very cursory analysis of the "clothdef" section:

"clothdef" is used for cloth and hair simulation. First introduced in FIFA 15.
It's used on player clothes (jersey, shorts) and player hairs. Since FIFA 16 there's a low-resolution simulation for hairlods.

Files with this section are placed in data/sceneassets/simplecloth folder. Hair uses these files: simhair_PLAYERID_0_0.rx3

I think this section contains a physical model of the mesh, collision models, and probably some parameters of hair movement.

Some interesting information about it can be found here:
Also partially related:

On this screenshot, you can see some strange red/green/blue meshes around player head and hair. I think it's a visual representation of the data in this section.
View attachment 67479
where red meshes are collision models, green - maybe hair physical model, and green rays - maybe, connections between physical and renderable model.

I made a 010 Editor template for the file with this section, attached to this post. As I said, it's very cursory, many unknown values are there. Some names I took from the executable.

I tried to visualize an array of unknown positions (called unk72 in the template): possibly those are vertices for hair physical model.
i ll check it !

to go a bit sideways:
the first link looks interesting, as it is from a (former) ea employee

this post : https://kentsunde.blogspot.com/p/project-spotlight-python.html
it could be maybe, he talks about the section "EDGE_MESH" ?
it is a section you find at FIFA 19 ps3 (example shoe-models, more for shoe-laces maybe), FIFA online 3
(but FIFA 16 maybe too, not sure)


Looks like the information about hair parts for hair simulation is stored in hair's 3rd UV channel.
hair_0.PNG hair_1.PNG

it could be maybe, he talks about the section "EDGE_MESH" ?
Could be, but I don't remember what's EDGE_MESH.
Upd: I checked the head file from FIFA 16, it's not there.
Last edited:


Senior Squad
Texture containers
Texture containers (.rx3) usually consist of these sections:
RX3_SECTION_TEXTURE (for each texture in container)
Texture containers for kits may also include RX3_SECTION_HOTSPOT section.

This section contains a list of texture headers (basic information about texture) for each texture in the container.
struct Rx3SectionTexturesHeader { // sizeof() = 16 bytes
    unsigned int texturesCount; // number of textures in container
    unsigned int unknown[3]; // maybe padding (0)
This header is followed by texture headers (texture header represents basic information about texture):
struct Rx3TextureHeader { // sizeof() = 16 bytes
    unsigned int totalSize; // total size of Rx3 Texture section (including texture header and pixels data)
    unsigned char type; // Rx3TextureType
    unsigned char format; // Rx3TextureFormat
    unsigned short flags; // usually 1
    unsigned short width; // image width
    unsigned short height; // image height
    unsigned short faces; // faces count for cubemap or volume textures (layers), 1 for 2D texture
    unsigned short levels; // mipmap count

Known texture types:
enum Rx3TextureType : unsigned char { // sizeof() = 1 byte
    RX3_TEXTURE_2D = 1,
    RX3_TEXTURE_CUBEMAP = 3, // texture consists of 6 faces
    RX3_TEXTURE_VOLUME = 4 // texture consists of multiple layers

Known texture formats:
enum Rx3TextureFormat : unsigned char { // sizeof() = 1 byte
    RX3_TEXFORMAT_R8G8B8A8 = 3,
    RX3_TEXFORMAT_ATI2 = 7, // also known as BC5 compression
    RX3_TEXFORMAT_ATI1 = 12, // also known as BC4 compression

This section starts with texture header (Rx3TextureHeader), and continued with texture levels (mipmaps) for each texture face.
Texture level starts with a header:
struct Rx3TextureLevelHeader { // sizeof() = 16 bytes
    unsigned int pitch;
    unsigned int lines;
    unsigned int levelSize; // size of pixels data (pitch * lines)
    unsigned int padding; // 0;
This header is then followed by pixels data.

In general, the layout for texture section is following:
Texture header
FOR number of faces in texture
FOR number of levels in texture
Texture level header
Texture level pixels

Hey @Dmitri ,
i have received a rx3 texture file from @ramzidz15 from FIFA 16 mobile
it has a new unknown rx3 texture format "104", wich i dont recognise
maybe you know what kind of compression this is ?

here s some info from the rx3 file:
Rx3TextureType = 104
width/height = 256x256
number of faces = 1
number Mip levels = 9
Total Size = 43848

Mip level 0 :
width/height = 256x256
Lines = 64
Pitch = 512
Size = 32768

according to the pitch/size it may be a BC1 or BC4 compression,
but if i try that the image isnt correct

i included the rx3 file + a extracted dds file (with wrong dxgi format) :