• This is a reminder of 3 IMPORTANT RULES:

    1- External self-promotion websites or apps are NOT allowed here, like Discord/Twitter/Patreon/etc.

    2- Do NOT post in other languages. English-only.

    3- Crack/Warez/Piracy talk is NOT allowed.

    Breaking any of the above rules will result in your messages being deleted and you will be banned upon repetition.

    Please, stop by this thread SoccerGaming Forum Rules And Guidelines and make sure you read and understand our policies.

    Thank you!

RX3 file format research thread

tokke001

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)
 

Dmitri

Reserves
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:

tokke001

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

RX3_SECTION_TEXTURES_HEADER
This section contains a list of texture headers (basic information about texture) for each texture in the container.
Code:
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):
Code:
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:
Code:
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:
Code:
enum Rx3TextureFormat : unsigned char { // sizeof() = 1 byte
    RX3_TEXFORMAT_DXT1 = 0,
    RX3_TEXFORMAT_DXT3 = 1,
    RX3_TEXFORMAT_DXT5 = 2,
    RX3_TEXFORMAT_R8G8B8A8 = 3,
    RX3_TEXFORMAT_ATI2 = 7, // also known as BC5 compression
    RX3_TEXFORMAT_ATI1 = 12, // also known as BC4 compression
}

RX3_SECTION_TEXTURE
This section starts with texture header (Rx3TextureHeader), and continued with texture levels (mipmaps) for each texture face.
Texture level starts with a header:
Code:
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:
Code:
Texture header
FOR number of faces in texture
FOR number of levels in texture
Texture level header
Texture level pixels
END FOR
END FOR


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) :
 


Top