Cyberpunk 2077:meshMeshParamCloth
From Modding Wiki
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;