请选择 进入手机版 | 继续访问电脑版

电玩龙资讯台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 1618|回复: 0

[心得] PS3游戏《超次元游戏海王星》的PSSG文件结构说明

[复制链接]
发表于 2015-2-27 12:46:25 | 显示全部楼层 |阅读模式

BY:srx-r2
   首先废话几句,急性子的朋友们可以直接跳过本段。最近我朋友GP05研究了一下导出这游戏的3D模型,找了一些资料以及自己摸索后,算是对这种PSSG文件有点了解了。下面先放点文件做例子(这游戏的文件原来是打包成几个大的cpk格式的,我用了现成工具解包,基本上大家google一下能找到的)。  然后其实PSSG文件的读取工具,是有若干个现成的,如:RPE和PSSG Utility,前者对这个游戏兼容,于是我也用过它来帮助分析模型数据,下载地址如下:http://petar.outer-heaven.net/downloads/  。 还有要说的是解析PSSG的C#源码我也找到了一些过时的,不过由于现在已经有改动过了,已经不能直接使用,权当参考吧,地址: https://github.com/miek/dirt3-mo ... manager/PSSGFile.cs

    言归正传,下面是PSSG文件的结构说明。大体上如下图:

     有点要说明的是,由于是PS3用到的文件,所以里面的整形、浮点数据并不是x86那样从低位到高位读入,而是从高位到低位读入内存。举个例子,下面附件里的model.PSSG, 04~07字节的数据:00 19 0E 31 ,这文件的实际大小就是0x190e31+8 。我们在PC上写小工具时,就要将高低位互换才能得到正确的数据,下面用一个读取无符号32位整形数据的c++函数来说明:
  • u32   ReadPssgU32(fp)
  • {
  •         uchar   fmpc[4],tmpc[4];
  •         fread(fmpc,1,4,fp);
  •         tmpc[0] = fmpc[3];  tmpc[1] = fmpc[2];  tmpc[2]=fmpc[1];  tmpc[3]=fmpc[0];
  •         u32  pssgu32 = *( (u32*)tmpc );
  •         return pssgu32;
  • }

[color=rgb(51, 102, 153) !important]复制代码

其它的short、float等类型的数据都是这样,将数据流倒序就行了。

     好了,我们读取完PSSG文件了,之后要干点什么呢?之后当然就是要获得我们感兴趣的数据啦,但具体哪些数据才是我们要的呢?这个嘛,当然是要自己来分析了,比方说我要从这个PSSG文件里导出3D模型,于是我在里面找到了某个DATABLOCKSTREAM结点,它有个属性renderType,其值是SkinableVertex,


而其兄弟结点DATABLOCKDATA里全是数据,

我就可以推测这结点里的就是模型的顶点坐标数据了。于是结合其它结点的数据,导出来,放3D编辑工具里一看,就是这样的效果。


      好了,现在总结一下思路。如果我们发现某个想汉化或者做MOD的游戏用到的是PSSG文件,那就可以1、先用RPE工具打开这些PSSG文件,看一下里面有没有我们感兴趣的数据; 2、归纳一下我们需要的数据的关键字眼,比方说我要3D模型,于是我需要这里面的renderTyper是 ST(UV纹理坐标)、Normal(法线坐标)、SkinableVertex或者Vertex(顶点坐标数据)、SkinWeights(蒙皮权重)、SkinIndices(蒙皮索引)的DATABLOCKDATA的数据据; 3、写工具将数据批量导出; 4、修改文件 ; 5、写工具将修改后的数据批量导入。  
     以上就是我朋友GP05摸索了一阵子的心得,希望对各位能有点参考作用吧。
2013-3-2
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|电玩龙资讯台 天空联盟- SKY LEAGUE

GMT+8, 2018-7-21 11:31 , Processed in 0.090893 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表