英雄传说6模型文件分析1

6 views
Skip to first unread message

jianguhan

unread,
Jul 22, 2009, 8:03:58 AM7/22/09
to 剑孤寒的游戏编程小站
一直很喜欢英雄传说6的模型,正好这两天有空,就琢磨着怎么把游戏模型给提取出来。
为了不重复造轮子,先到google上搜了一下是否已有提取工具,结果发现除GameViewer能查看3D模型外,其它的工具只能提取2D图
片。遗憾的是GameViewer仅能导出它自己专有格式的模型文件,所以对我来说没啥用(呃,真是应了GameViewer这个名字,只能看而已
T_T),那么就自己动手吧!
先把游戏所有x模型文件解出来,按照先易后难的原则先把模型文件按大小排序,选中最小的文件"BLACK00.X"并用16进制编辑工具打
开。
前面是场景节点定义和模型定义,往下看到的一个文件名"black.bmp",估计是前面的模型用到的纹理文件了,那么顶点数据应该就在这附近
了,接着往下看,看到有很多有规律的FFFFFFFF,嗯,应该是顶点颜色吧,算了一下FFFFFFFF之间的间隔是40字节,猜测应该是下面这样的结
构:

struct VertexFVF
{
float x, y, z; //坐标
float nx, ny, nz; //法向量
DWORD color; //顶点颜色
DWORD specular; //反射光颜色
float u, v; //纹理坐标
};数了一下,这里一共有四个顶点,应该是矩形的四个角,肯定什么地方有顶点索引的记录,往前翻了翻,果然发现顶点索引记录。
至此,顶点和纹理数据都知道了,先写了个小程序验证了一下,结果是画了个一个黑矩形出来,和在GameViewer里看到的一样,看了看表也差
不多到吃饭的时间了,吃过饭再进行后面的分析吧^_^

<待续>

ps.
顺便分析了一下GameViewer的模型文件,
文件头四个字节为文件标识,后面是世界矩阵啥的。
从0x58开始是顶点信息,以0结尾,
再后面是顶点索引记录,同样以0结尾,
接着有一个数值标识用到的纹理文件名长度,
中间不知道为啥要空三个0,
然后是纹理文件名

jianguhan

unread,
Jul 22, 2009, 8:05:56 AM7/22/09
to 剑孤寒的游戏编程小站
今天有空又看了一下,以前的理解有误,索引数据是紧接着顶点数据的,
结构如下:

贴图名
未知(字节不定,以0x0000803f再加8个不知道干啥的字节结尾)
顶点数(DWORD)
顶点数据(前面提到的VertexFVF)
索引数(DWORD)
索引数据(UINT16)

另外,
英雄传说6中specular这个东东比较特殊,
看了一下解出来的map.vs,
specular是直接加上去的,
结果就产生了漂亮而且效率高的假光照

Reply all
Reply to author
Forward
0 new messages