.mesh文件分析
人物
人物部件mesh的头部示例
OFFSET 00 04 08 0C ASCII
00000000 20000000 03000000 68697006 00000062 .......hip....b
00000010 61636B5F 61060000 00626163 6B5F6205 ack_a....back_b.
00000020 0000006C 65675F6C 05000000 6C65675F ...leg_l....leg_
00000030 72060000 006B6E65 655F6C06 0000006B r....knee_l....k
00000040 6E65655F 72070000 00616E6B 6C655F6C nee_r....ankle_l
00000050 07000000 616E6B6C 655F7205 00000074 ....ankle_r....t
00000060 6F655F72 05000000 746F655F 6C070000 oe_r....toe_l...
00000070 0062726F 77325F6C 07000000 62726F77 .brow2_l....brow
00000080 325F7206 00000062 726F775F 6C060000 2_r....brow_l...
00000090 0062726F 775F7205 00000065 79655F6C .brow_r....eye_l
000000a0 05000000 6579655F 72070000 00657965 ....eye_r....eye
000000b0 75705F6C 07000000 65796575 705F7204 up_l....eyeup_r.
000000c0 0000004C 69707305 0000004C 69707332 ...Lips....Lips2
000000d0 07000000 4D6F7574 685F6C07 0000004D ....Mouth_l....M
000000e0 6F757468 5F720300 00006A61 77040000 outh_r....jaw...
000000f0 00686561 64040000 006E6563 6B050000 .head....neck...
00000100 00636865 73740300 00006869 70060000 .chest....hip...
00000110 00626163 6B5F6105 00000063 68657374 .back_a....chest
00000120 06000000 6261636B 5F620700 00006368 ....back_b....ch
00000130 6573745F 6C est_l
包含的物体数量
前4字节 20000000 -> 0x20 -> 32个物体
物体名称长度
紧接着的4个字节 03000000 -> 0x3 -> 名称长3个字符
物体名称
紧接着的[物体名称长度]字节 686970 -> hip -> 物体名称
地面物品
(金币)mesh头示例
OFFSET 00 04 08 0C ASCII
00000000 FFFF7F7F FFFF7F7F FFFF7F7F FFFF7FFF ................
00000010 FFFF7FFF FFFF7FFF 01000000 50000000 ............P...
00000020 8E000000 00000000 00000000 01000000 ................
00000030 01D81C00 0092419E 3EBEBEE6 3E8FC2F5 ......A.>...>...
00000040 3C000000 00003C00 00003C2E 80000000 <.....<...<.....
00000050 002E0000 3C000000 00D73B96 35903B5E ....<.....;.5.;^
00000060 34003800 38FFFFFF FF9DAA0A 330D53B3 4.8.8.......3.S.
00000070 3E8FC2F5 3C000000 00003C00 00003C2D >...<.....<...<-
00000080 80008000 002D0000 3C008000 003C38EE .....-..<....<8.
00000090 37003800 38003800 38FFFFFF FF70419E 7.8.8.8.8....pA.
000000a0 3EFBCE7F 3E8FC2F5 3C000000 00003C00 >...>...<.....<.
000000b0 00003C2F 80000000 002F0000 3C000000 ..</...../..<...
000000c0 00D73B22 39D139FA 2A003800 38FFFFFF ..;"9.9.*.8.8...
000000d0 FF6666A6 3E0D53B3 3E8FC2F5 3C000000 .ff.>.S.>...<...
000000e0 00003C00 00003C33 80000000 00330000 ..<...<3.....3..
000000f0 3C000000 00033CEE 37D43AB0 30003800 <.....<.7.:.0.8.
00000100 38FFFFFF FFE49E86 3EBB0823 3E8FC2F5 8.......>..#>...
FFFF7F7F FFFF7F7F FFFF7F7F FFFF7FFF FFFF7FFF FFFF7FFF
未知头部
01000000
一个物体?
50000000
未知
8E000000
变换矩阵数量 8E000000 -> 0x8e -> 142 个变换矩阵
00000000 00000000 01000000 00000030 01D81C00 00
未知
第一个变化矩阵
OFFSET 00 04 08 0C ASCII
00000000 92419E3E BEBEE63E 8FC2F53C 00000000 .A.>...>...<....
00000010 003C0000 003C2E80 00000000 2E00003C .<...<.........<
00000020 00000000 D73B9635 903B5E34 00380038 .....;.5.;^4.8.8
00000030 FFFFFFFF ....
位置 Position
92419E3E BEBEE63E 8FC2F53C
总的来说和 和地图的结构很像
地图
第一个网格头部示例(一个地图中包含了N个网格)
OFFSET 00 04 08 0C ASCII
00000000 00008CC3 C16819C2 7E6AD3C2 2D428943 .....h..~j..-B.C
00000010 3B81DA41 20F08B43 14000000 241E0000 ;..A ..C....$...
00000020 483C0000 00000000 02000000 02000000 H<..............
00000030 01A03E0C 00C275EC 42399788 C021B0E1 ..>...u.B9...!..
00000040 C161BB5C 2C14B600 001836FD 1A66BB00 .a.\,.....6..f..
00000050 00E52BFB 3B732700 00CA3863 3873B2CE ..+.;s'...8c8s..
00000060 3C003800 38BCBCBC FF02 <.8.8.....
00008CC3 C16819C2 7E6AD3C2 2D428943 3B81DA41 20F08B43
00008CC3 >> -280.00000000
C16819C2 >> -38.35229873
7E6AD3C2 >> -105.70799255
2D428943 >> 274.51699829
3B81DA41 >> 27.31310081
20F08B43 >> 279.87597656
AI说像是地图的初始位置?和相机的初始位置?
14000000
网格数量?
241E0000
未知
483C0000
483C0000 -> 0x3C48 -> 0x3C48组顶点数据(0x34为1组)
00000000 02000000 02000000 01
未知
A03E0C00
A03E0C00 -> 0xC3EA0 本次网格的数据大小
从这4个字节开始的字节为此次模型的顶点数据
0xC3EA0 / 0x3C48 = 0x34 -> 0x34字节为1小组
面数据
OFFSET 00 04 08 0C ASCII
00000000 B0690100 03000000 01000000 .i..........
B0690100
B0690100 -> 0x169B0 为 面 数据段的大小
紧接着就是 面 数据段的开始
第二个网格头部
OFFSET 00 04 08 0C ASCII
00000000 00000000 A0000000 19010000 01000000 ................
00000010 00000000 04000000 01143900 00 ..........9..
00000000 00000000 A0000000
未知
19010000
19010000 -> 0x119 组顶点数据(0x34为1组)
01000000 00000000 04000000 01
未知
14390000
14390000 -> 0x3914 本次网格的数据大小
其他类似
第三个网格头部
OFFSET 00 04 08 0C ASCII
00000000 01000000 04000000 08000000 00000000 ................
00000010 00000000 01000000 00A00100 00 .............
A0010000
暂时观察到从第二个开始这个头部只有0x1D大小
取最后4字节就是此次网格数据的大小
其他类似
Tips
快速查找有多少个网格
搜索 default_static_vs 结果数量除以 3 !
如果需要手动分割地图mesh,遇到没有明确的结尾标志时
OFFSET 00 04 08 0C ASCII
00000000 03000000 11000000 64656661 756C745F ........default_
00000010 73746174 69635F76 73110000 00646566 static_vs....def
00000020 61756C74 5F737461 7469635F 76731100 ault_static_vs..
00000030 00006465 6661756C 745F7374 61746963 ..default_static
00000040 5F767301 00000008 00000073 5F706879 _vs........s_phy
00000050 73696303 00000000 00000000 00000000 sic.............
00000060 00000001 00000000 00000001 00000000 ................
00000070 00000002 00000004 00000008 00000000 ................
00000080 00000000 00000001 00000000 A0010000 ................
00000090 6AFCBA42 0FA81841 3ED7D3C1 A79C0000 j..B...A>.......
000000a0 00BC0000 000000BC 00000000 00BC0000 ................
000000b0 A71C0000 A935B83B 7D3BDA3B 00380038 .....5.;};.;.8.8
000000c0 FFFFFFFF 5365C142 0FA81841 25F5D3C1 ....Se.B...A%...
000000d0 A79C0000 00BC0000 000000BC 00000000 ................
000000e0 00BC0000 A71C0000 A935C03B 7D3BDA3B .........5.;};.;
000000f0 00380038 FFFFFFFF 5365C142 506B3A41 .8.8....Se.BPk:A
00000100 25F5D3C1 A79C0000 00BC0000 000000BC %...............
00000110 00000000 00BC0000 A71C0000 9935C03B .............5.;
需要从上一个物体尾部字符串往后选 0x20 即可
然后在选 0x1d 就是下一个物体数据的头
上一个物体的结尾 是最后一个 s_physic,往后选择0x20
03 00000000 00000000 00000000 00000001 00000000 00000001 00000000 000000
在往后选 0x1D 就是下一个物体的头
02 00000004 00000008 00000000 00000000 00000001 00000000 A0010000
最后 4字节 A0010000 就是 变换矩阵数据
武器mesh
1个物体的 头部
OFFSET 00 04 08 0C ASCII
00000000 01000000 06000000 47756E5F 4D5A0100 ........Gun_MZ..
00000010 00001D3C 6EBCFD0E 25BE7A51 0B3E3417 ...<n...%.zQ.>4.
00000020 6E3CD3D7 F33D4032 AD3E0100 00000C01 n<...=@2.>......
00000030 0000BF01 00000000 00000000 00000100 ................
00000040 000001C0 6F0000 ....o..
- 01000000
表示 此文件中包含几个物体 -> 0x1 - 06000000
表示 一个 物体名称 长度 -> 0x6 - 47756E5F 4D5A
表示 物体名字字符串 -> Gun_MZ - 01000000
表示 此文件中包含几个物体 -> 0x1 , 此次出现表示 此小段信息 结束 - 1D3C 6EBCFD0E 25BE7A51 0B3E3417 6E3CD3D7 F33D4032 AD3E
表示 此物体的 的初始位置?和相机的初始位置?未验证 每个物体都有一个这样的值 每组 0x18 大小 - 01000000 0C010000 BF010000 00000000 00000000 01000000 01C06F00 00
表示 物体自己的头部信息 共 0x1D 大小- 01000000
表示 物体数量 -> 0x1 - BF010000
表示 本物体 变换矩阵 数量 -> 0x1BF - C06F0000
表示 本物体 变换矩阵 数据大小 -> 0x6FC0
- 01000000
2个物体的 头部
OFFSET 00 04 08 0C ASCII
00000000 02000000 06000000 47756E5F 434C0600 ........Gun_CL..
00000010 00004775 6E5F5256 02000000 85CE0BBE ..Gun_RV........
00000020 6002F73D 9D9CF13E CCB2E7BD C954413E `..=...>.....TA>
00000030 B94F063F F38C6DBE 543B8BBE E06275BE .O.?..m.T;...bu.
00000040 060A3C3E 4A3F613E CE88BA3F 01000000 ..<>J?a>...?....
00000050 E90C0000 75170000 00000000 00000000 ....u...........
00000060 01000000 0140DD05 00 .....@...
- 02000000
表示 此文件中包含几个物体 -> 0x2 - 06000000
表示 一个 物体名称 长度 -> 0x6 - 47756E5F 434C
表示 物体名字字符串 -> Gun_CL - 06000000
表示 一个 物体名称 长度 -> 0x6 - 4775 6E5F5256
表示 物体名字字符串 -> Gun_RV - 02000000
表示 此文件中包含几个物体 -> 0x2 , 此次出现表示 此小段信息 结束 - 85CE0BBE 6002F73D 9D9CF13E CCB2E7BD C954413E B94F063F
- F38C6DBE 543B8BBE E06275BE 060A3C3E 4A3F613E CE88BA3F
表示 此物体的 的初始位置?和相机的初始位置?未验证 每个物体都有一个这样的值 每组 0x18 大小 - 01000000 E90C0000 75170000 00000000 00000000 01000000 0140DD05 00
表示 物体自己的头部信息 共 0x1D 大小- 01000000
表示 物体数量 -> 0x1 - 75170000
表示 本物体 变换矩阵 数量 -> 0x1775 - 40DD0500
表示 本物体 变换矩阵 数据大小 -> 0x5DD40
- 01000000
面 数据
- EC9A0000
在 变换矩阵 数据大小 数据之后 紧跟的就是 面数据大小
那么往后读取 0x9AEC 大小的数据就是面数据了
面数据 每3个值为一组
数据大致结构
[头]
[本物体头 -> 变换矩阵数据 -> 面数据大小 -> 面数据 -> 着色器贴图数据等]
[本物体头 -> 变换矩阵数据 -> 面数据大小 -> 面数据 -> 着色器贴图数据等]