Cyberpunk 2077:meshMeshParamCloth: Difference between revisions
From Modding Wiki
Jump to navigationJump to search
Created page with "==File Structure== {| class="wikitable" width="100%" ! width="20%" | Name ! width="20%" | Type/Size ! width="60%" | 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 coll..." |
No edit summary |
||
| Line 36: | Line 36: | ||
| normals || DataBuffer || Array of (VEC3, FLOAT) | | normals || DataBuffer || Array of (VEC3, FLOAT) | ||
|} | |} | ||
===cookedData=== | |||
ImHex pattern | |||
<pre> | |||
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; | |||
</pre> | |||
Latest revision as of 09:31, 23 February 2025
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;