PMX文件格式解析

本文详细介绍了PMX文件的结构,包括模型顶点、三角形面、贴图引用、材料、骨骼、表情等数据信息,以及如何利用这些信息进行3D图形渲染和物理移动的计算。适合初学者理解MMD模型文件。
摘要由CSDN通过智能技术生成

转载请注明出处,这样小编会很有成就感
作者:bilibili->墨色小风 (点个关注不迷路)

本文中的描述术语可能不专业,但更贴近中文理解。方便初学者简单清晰的理解。

*.pmx 文件是 mmd(MikuMIkuDance)的专用模型文件,其中包括 独立3D物体模型的全部信息。
可以存放3d物体与人物模型,以及模型的物理运动规则。

PMX文件的详细数据可以用 PmxEditor 软件来进行编辑查看

 

具体数据模块按照解析顺序有:
    1.模型顶点信息
    2.三角形面信息
    3.贴图文件引用
    4.材料数据信息
    5.骨骼数据信息
    6.表情数据信息
    7.框架数据信息
    8.刚体数据信息
    9.关节数据信息
    最后可能还有柔体信息,但我没用到,没研究
    
整个PMX模型文件在程序中的运行逻辑模型大概是
根据 1~4 模块组的数据模块来进行图形渲染,
根据 5 之后的数据信息来进行模型物理移动的计算

对于想要读取模型数据的小伙伴来说
前面几项比较重要,后面的比较复杂,
笔者没有详细使用的地方只简单讲讲,
不过数据变量名与PmxEditor软件能够对应,
具体可以学习MMD模型制作与PmxEditor软件使用相关教程。

如果日后详细用到可能会发新文补充。
如有想要详细学习的小伙伴可自行研究交流探讨,
在看过下文的数据结构的简单讲解之后自行研究应该不是什么难事。

对于数据类型的描述,我习惯以类似这样的方式描述:

byte1 : 1字节整数
byte2 : 2字节整数
byte4 : 4字节整数
byte8 : 8字节整数
byte.4 : 4字节小数(浮点数)
byte.8 : 8字节小数(浮点数)
byte4text : 4字节整数记录后续文本的字节数

下面按文件地址数据顺序一个一个进行解析

目录

首先是文件头

1.模型顶点信息

2.三角形面信息

3.贴图文件引用

4.材料数据信息

5.骨骼数据信息

6.表情数据信息

7.框架数据信息

8.刚体数据信息

9.关节数据信息

柔体(没有)

总结


首先打开一个 PMX文件 

首先是文件头

{
    byte4 文件标头 = "PMX "; // 通常固定
    byte.4 版本号 = 2; // 通常为2
    byte1 数据列字节尺寸 = 8; // 通常固定
    byte1 编码方式 = ?; // 0:UTF-16LE 或 1:UTF-8
    byte1 UV追加 = ?; // (1.模型顶点信息)中用到
    
    byte1 顶点Index尺寸 = ?; // 2或4,寻址单元字节大小
    byte1 纹理Index尺寸 = ?; // 2或4,寻址单元字节大小
    byte1 材料Index大小 = ?; // 2或4,寻址单元字节大小
    byte1 骨骼Index大小 = ?; // 2或4,寻址单元字节大小
    byte1 形态Index大小 = ?; // 2或4,寻址单元字节大小
    byte1 刚体Index大小 = ?; // 2或4,寻址单元字节大小
    
    byte4text 模型名;
    byte4text 模型名(英语);
    byte4text 打开时提示;
    byte4text 打开时提示(英语);
    
    
    // 之后的文件数据 是 1~9 具体的数据模块按照解析顺序有:
    byte4 模型顶点信息个数;
    模型顶点信息[模型顶点信息个数];
    
    byte4 三角形面信息个数;
    三角形面信息[三角形面信息个数/3]; // 这里要除3
    
    byte4 贴图文件个数;
    贴图文件引用[贴图文件个数];
    
    byte4 材料数据信息个数;
    材料数据信息[材料数据信息个数];
    
    byte4 骨骼数据信息个数;
    骨骼数据信息[骨骼数据信息个数];
    
    byte4 表情数据信息个数;
    表情数据信息[表情数据信息个数];
    
    byte4 框架数据信息个数;
    框架数据信息[框架数据信息个数];
    
    byte4 刚体数据信息个数;
    刚体数据信息[刚体数据信息个数];
    
    byte4 关节数据信息个数;
    关节数据信息[关节数据信息个数];
    
    byte4 柔体数据信息个数;
    柔体数据信息[柔体数据信息个数];
    
    ...

}

通常情况下 PMX文件标头会以4字节 "PMX " 开头
有的版本好像略有差别

版本号=2,感觉不会变了,因为大家用习惯了,2.0版本的数据结构也较为合理,没有太多改进的必要。

数据列字节尺寸 应该必须=8

编码方式:记录着文件中所有的文本数据的编码方式,当前文件中的文本都要以这样的方式显示
=0时 按 UTF-16LE 字体编码格式存储文本
=1时 按 UTF-8 字体编码格式存储文本
其他值可以自定义,其他软件有可能不支持

UV追加 : (1.模型顶点信息)中用到

之后的6个变量记录的是对于寻址是 寻址单元的字节大小。
就是变量类型占用的字节数。
这样做是为了节省文件体积,
列如顶点个数小于65535,顶点下标可以用2字节整数表示
每个面记录3个顶点下标就能比4字节下标节省 3*(4-2)=6byte 数据

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
用于制作游戏人物模型的由日本开发的MMD模型制作软件(已汉化) PmxEditor是用来给MMD的模型进行绑骨和物理演算的软件,因为这个都是日文,很多人看这个可能会有些茫然,很难辨认,不过这并没有很大的问题,我们只需要了解其中的一部分选项有什么功能,就可以来进行简单的绑骨了   1、打开PE,其中左边的“选尺”是用来选择要编辑的物体类型(按顺序看就是:顶点,面,骨骼,刚体,链接体);   “表”是用来调整背景颜色,顶点颜色一类的,在某些时候可以方便我们观察模型,进行一些细致的操作 ;   2、“绞”经常需要用,主要是用来确定模型需要编辑的范围   3、选择到材质这一项,就可以选择特定的部件用来单独编辑   4、选择材质0是白色馒头型物体,材质4是卷毛君的一个红晕,像这样,分别选用不同的材质,就可以分别编辑不同的区域了   5、如果有需要删除的部分,也可以使用这个面板,比如说,卷毛君的材质6是头上那根毛   6、勾选材质6,卷毛变黑了,点击这个“选尺材质の什么削除”   7、选择“是”,确认消除   8、卷毛的毛就拔掉了=   9、关于那个“涂”,则是用来刷权重用的   所谓刷权重,就是将骨骼与模型的顶点建立联系,让模型可以跟随骨骼来移动,也就是我们通常所说的绑骨   10、当然,PmxEditor的功能远不止这些,其它用得比较少的控件也有很多,大家可以在网上自行学习
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值