了解专有游戏纹理/图像格式 (.art)

逆向工程 文件格式
2021-07-09 03:22:40

一段时间以来,我一直在研究如何修改 Crazy Taxi 3 的纹理,但我几乎撞到了砖墙。
游戏将其纹理资产存储在.art文件中,据我所知,由于有许多纹理库,其中每个文件都包含多个纹理。还有一个Sprites文件夹包含这些指示相同的文件。
谷歌快速搜索让我相信这可能是其软件中使用AOL 图像格式,但是 AOL 9.0 在尝试打开文件时不断抛出错误。没有骰子。
搜索更多后,我发现PFS: First Publisher 也使用此扩展程序来制作剪贴画这些文件与此 wiki 中记录的结构不完全匹配,但是每个 .art 文件在开始时都有一个看起来像该结构中的信息表的东西,然后可能是图像数据。我还观察到该字符串GXTX重复多次,可能表明它可能是新图像开头的指针。
除此之外,我不知道这种文件格式是如何工作的。看起来它是未压缩的图像数据,但是在许多程序中打开它后我已经放弃并需要帮助。


更新 1
我找到了一个很棒的工具,叫做Texturefinder,它帮助我弄清楚这些纹理是用 DXT 压缩的,但是我不确定是哪个版本,因为某个纹理库的一半在 DXT1 中可能看起来很棒,而另一半看起来很混乱,直到我切换到 DXT3 或 5。容器格式可能包含有关在图像之前的表中使用哪种算法的信息,因为在每个纹理文件的开头都有大量非图像数据,或者至少是该工具可以使用的数据不决定。以下是在一种算法与另一种算法中工作的一些示例:

DXT1a @ 512px 宽度 DXT3 @ 256px 宽度

所以,这里是我收集到的更新列表:

  • .art文件GXTX多次包含字符串,通常后跟大约 12 个具有小值的字节(类似于80 00 80 00 00 80 00 00 01 00 05 00),可能是图像分隔符
  • 这些文件包含许多用 DXT 压缩的纹理
  • 纹理可以用不同形式的 DXT(可能是 DXT1 和 DXT3)进行压缩
  • 银行中的纹理可能具有不同的宽度/高度
  • 每个纹理库在开始时都有相当数量的非图像数据
  • 纹理是颠倒的

这里有一些更多的样本进行比较。

2个回答

本周我反转了 .ART 文件的 99%,给你:

// header
4 bytes - total of images

// file offsets directory
  // for each image
  4 bytes - image offset in directory

// images directory
  // for each image
  4 bytes - magic (gxtx)
  2 bytes - width
  2 bytes - height
  4 bytes - image data size
  2 bytes - unknown
  2 bytes - compression type (10 = DXT1 | 11 = DXT3)
  X bytes - image data

我进行了一些研究,发现纹理使用其中一种格式,具体取决于纹理具有的 2 个字节值(10、11、4、5、0 或 2063):

“DXT1、DXT3、A8R8G8B8、A4R4G4B4、R5G6B5、A1R5G5B5”