.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

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

面 数据

  • EC9A0000
    在 变换矩阵 数据大小 数据之后 紧跟的就是 面数据大小
    那么往后读取 0x9AEC 大小的数据就是面数据了
    面数据 每3个值为一组

数据大致结构

[头]
[本物体头 -> 变换矩阵数据 -> 面数据大小 -> 面数据 -> 着色器贴图数据等]
[本物体头 -> 变换矩阵数据 -> 面数据大小 -> 面数据 -> 着色器贴图数据等]

不完整的Blender插件

仅供参考

ImportMesh

posted @ 2024-11-06 12:14  letleon  阅读(7)  评论(0编辑  收藏  举报