设为首页收藏本站在线充值

电玩龙资讯台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 1309|回复: 0
打印 上一主题 下一主题

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

[复制链接]
  • TA的每日心情
    慵懒
    2015-2-27 12:27
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]初来乍到

    51

    主题

    63

    帖子

    300

    积分

    龙骑队长

    Rank: 4

    积分
    300
    跳转到指定楼层
    楼主
    发表于 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好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    道上红尘,江中白浪,饶他南面百城;花间明月,松下凉风,输吾北窗一枕。
    回复

    使用道具 举报

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

    本版积分规则

    QQ|Archiver|手机版|小黑屋|天空联盟- SKY LEAGUE    

    GMT+8, 2017-5-26 22:18 , Processed in 0.149683 second(s), 35 queries , Xcache On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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