Cyberpunk 2077:meshMeshParamCloth

From Modding Wiki
Revision as of 09:31, 23 February 2025 by Seberoth (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

File Structure

Name Type/Size Info
lodChunkIndices uint16[][] First dimension = lod, second dimension = corresponding chunk.
chunks meshPhxClothChunkData[] See specification of meshPhxClothChunkData below.
drivers uint16[][][] Unknown.
capsules handle:physicsclothClothCapsuleExportData Unknown. Capsules used for collision checks?

meshPhxClothChunkData

Name Type/Size Info
positions DataBuffer Array of (VEC3, FLOAT)
indices DataBuffer Array of uint16[3]
skinWeights DataBuffer Array of (VEC4, FLOAT)
skinIndices DataBuffer Array of (VEC4, UNSIGNED_BYTE)
skinWeightsExt DataBuffer Array of (VEC4, FLOAT)
skinIndicesExt DataBuffer Array of (VEC4, UNSIGNED_BYTE)
cookedData DataBuffer WIP. See cookedData below.
normals DataBuffer Array of (VEC3, FLOAT)


cookedData

ImHex pattern

struct vec4 {
    float x;
    float y;
    float z;
    float w;
};

struct header {
    char magic[4];
    u32 tableOffset;
    u32 dataOffset;
};

struct table {
    u32 positionCount;
    u32 positionOffset;
    u32 unknown1Count;
    u32 unknown1Offset1; // 20bytes
    u32 unknown1Offset2; // size depends on what???
    u32 unknown1Offset3; // size depends on what???
    u32 unknown1Offset4; // size depends on what???
    u32 unknown1Offset5; // size depends on what???
    u32 unknown2Count;
    u32 unknown2Offset1; // unknown size
    u32 unknown3Count;
    u32 unknown3Offset1; // 4bytes
    u32 unknown4Count;
    u32 unknown4Offset1; // 4bytes
    u32 unknown5Count;
    u32 unknown5Offset1; // 4bytes
    u32 unknown6Count;
    u32 unknown6Offset1; // unknown size
    u32 unknown7Count;
    u32 unknown7Offset1; // 4bytes
    u32 unknown8Count;
    u32 unknown8Offset1; // 4bytes
    u32 unknown9Count;
    u32 unknown9Offset1; // 4bytes
    u32 indexCount;
    u32 indexOffset; // 12bytes
};

struct unknown1_1Struct {
    vec4 vec;
    u16 unknown1;
    u16 unknown2;
};

struct main {
    header header;
    table table;
    u8 unknown[124];
    vec4 positions[table.positionCount] @table.positionOffset;
    unknown1_1Struct unknown1_1[table.unknown1Count] @table.unknown1Offset1;
    u8 unknown1_2[table.unknown1Count * 82] @table.unknown1Offset2; // size depending on context???
    u8 unknown1_3[table.unknown1Count * 82] @table.unknown1Offset3; // size depending on context???
    u8 unknown1_4[table.unknown1Count * 82] @table.unknown1Offset4; // size depending on context???
    u8 unknown1_5[table.unknown1Count * 82] @table.unknown1Offset5; // size depending on context???
    u8 unknown2_1[table.unknown2Count] @table.unknown2Offset1; // size unknown
    u32 unknown3_1[table.unknown3Count] @table.unknown3Offset1;
    u32 unknown4_1[table.unknown4Count] @table.unknown4Offset1;
    float unknown5_1[table.unknown5Count] @table.unknown5Offset1;
    u32 unknown6_1[table.unknown6Count] @table.unknown6Offset1; // size unknown
    u32 unknown7_1[table.unknown7Count] @table.unknown7Offset1;
    u32 unknown8_1[table.unknown8Count] @table.unknown8Offset1;
    float unknown9_1[table.unknown9Count] @table.unknown9Offset1;
    u32 indices[table.indexCount * 3] @table.indexOffset;
    // padding?
};

struct main2 {
    header header;
    table table;
};

main main @0x0;