这是 2001 年发布的韩国 MMORPG。游戏和公司已不复存在。一段时间以来,我一直将文件格式作为个人项目进行分析。
我已经解码了纹理和脚本文件。我只剩下 2 个文件要解码:.ani
和.obj
. 通过扩展,我猜想.ani
包含动画并.obj
包含 3d 模型。正如我的问题的标题所暗示的那样。我目前正在处理该.obj
文件。
我知道的
.obj
文件实际上是包含一个或多个模型的档案。但是,专门的3D模型(两足动物),因为纹理与扩展另一存档文件中.t16
或.tex
。
我将以文件中的第 22 个模型def.obj
为例。我也把它从存档中取出并保存为一个名为`def_022.obj 的文件。
从这里开始,我将调用第 22 个模型Armor of Eagle
。下一张图片是在 上Armor of Eagle
找到的纹理def.t16
:
游戏中的鹰之盔甲:
一个def_inf.txt
文件有这个相关的行:
filename LODstep polycnt
armor_eagle 0 313 // eagle = index 22
一般而言,其结构.obj
为:
06 00 00 00 03 00 // don't know what
3C 00 // total number of models in this list
01 00 9E 00 00 00 9E 00 00 00 78 00 00 00 78 00 00 00 // the first model on the list with 0x9E polygons and 0x78 verticies
01 00 64 00 00 00 64 00 00 00 61 00 00 00 61 00 00 00 // the 2nd model
....... // continues until you reach the end of the headers
....... // then the bodies start, actual 3d data
这是标题的外观:
- 青色:
- 39 01 00 00 = 313 多边形数
- 18 01 00 00 = 280 个顶点数
- AD 00 6B 00 = 未知
关于 def_022.obj
人脸指数开始于0x4C [00 00 01 00...]
,从它的外观来看,结束于0x7A2 [...A2 00 A3 00]
我正在使用名为的工具,hex2obj 0.24c
但在猜测顶点和 uv 列表的起点方面没有任何运气。
- 黄色:在我看来,它是块标记。(因为所有文件都以它开头)
- 浅蓝色:是一个 uint16 序列号,对于
def.obj
. 并且它也对应于其纹理的索引(在纹理档案中)。 - 深绿色:是人脸指数。
问题
- 我该如何前进?
- 如何找到UV开始的地址?(书籍?文章?资源?)
- 最后,我怎么知道顶点从哪里开始?
这都是考虑到我只是分析二进制文件而不是调试客户端本身以查看客户端如何获取数据。
更新
我注意到我正在分析的文件中有一些新内容def_022.obj
。一个字节数组被重复了很多次。虽然,我仍然不确定 YET 的重要性。00 00 80 3F
也是每个模型开始的字节,我认为这是块标记:
- 黄色:是重复字节。您还会注意到,它的前面通常是字节
0x3F
or0x3E
,然后是0x0C
和0x0D
,然后是0x00
. 的3 个字节。这种模式被重复了 185 次。 - 青色:是包含人脸索引的区域。
- 经过进一步研究,我发现
3f80 0000 = 1
还是0000 803f = 1
小端。但是还是不知道意义,我要深入挖掘。
根据@RadLexus 先生提供的注释。我还能够绘制顶点并导入到搅拌机中:
添加了法线和 UV:
v -13.531700 37.445000 2.338600
vn -0.687800 0.725000 -0.036200
vt 0.583800 0.086300
然后我尝试添加面孔:
f 1 2 3
f 1 3 4
f 5 6 7
f 5 7 8
f 9 10 11
...
但仍然无法弄清楚如何应用纹理。
更新
因此,我尝试更改我的.obj
文件以包含更多有关面值的信息,例如(只是将值复制为 x/x/x):
f 1/1/1 2/2/2 3/3/3
f 1/1/1 3/3/3 4/4/4
f 5/5/5 6/6/6 7/7/7
我终于得到了这个:
虽然它仍然是错误的,但我想我更接近一些。
最后更新
已经想通了。虽然,我仍然不知道 unknown1 和 unknown2 是什么,但它看起来已经足够了:
注意:我对 3D 文件格式几乎一无所知。除了 3D 对象的基本组件。