12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
查看: 580|回复: 0

2019-11-18 碧蓝航线立绘的成像原理及提取技术分析

[复制链接]

315

主题

315

帖子

640

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
640
发表于 2020-2-28 10:39:09 | 显示全部楼层 |阅读模式
碧蓝航线的立绘就个人而言,目前是国内最好的,基于安卓平台的碧蓝航线使用的是unity3d引擎。unity版本号2017.4.28f1.

逆向分析就采用近期更新中的贝尔法斯特皮肤,文件名beierfasite_4_tex。游戏加载中的显示如下:



使用自编的unity3d资源程序,lz4解压,解包获取了贝尔法斯特的mesh和texture2d贴图文件。


beierfasite_4_mesh.mesh如下


从解包的texture2d图像来看,立绘貌似被切割成了许多四边形方块,打乱放置,这种加密手法还是比较新鲜的。既然从beierfasite_4_tex中解包出了texture2d和mesh,那么texture2d的还原解析数据应该和mesh有关。接下来重点就是分析mesh的16进制数据,希望从中获取蛛丝马迹。



偏移地址:
0x00 - 0x18 是mesh的文件名
0x18 -          值0x01000000 4字节,应该是vector SubMeshes的数量,LE,也就是说只有一个。
0x20 -          值0x32010000 4字节,LE,解析为三角形面f的描述数量,306(DEC)顶点,描绘1个四边形需要6个点,306/6=51。ok ,也就是说texture2d的贝尔法斯特图像被切割成了51个小块。
0x30 -          值0xCC000000 4字节,LE,解析为贴图顶点数量,204(DEC)顶点,一个小块的贴图顶点4个,那么204/4=51。ok ,与上面的分析吻合。
0x34-           值0x0000E043 4字节,BE, ,解析为Vector3f Center x 图像最宽处的宽度的/2,转 LE 0x43E00000  计算float 448。全宽就是448x2=896像素

0x38-           值0x00C01744 4字节,BE, ,解析为Vector3f Center y 图像最高处的高度的/2,转 LE 0x4417C000  计算float 607。全高就是607x2=1214像素


由于是2D平面贴图,所以z向是没有的,所以都是0,这里就不写了。



跳转到下面
0x70 -          值0x64020000 4字节,LE,612(dec),vector IndexBuffer items,612字节,三角形面f的数据612/6=102个面。
0x74 -  0x2D8 就是上面612字节数据。非重点,继续往下走
0x2D8- 0x308 48字节无关紧要,继续往下走



0x00000308 值0xFF0F0000,4字节,LE,4080 (DEC),4080 items,4080字节,这里就是mesh的重点数据区描述
0x0000030C -                         4080字节的开始偏移地址。20个字节描述5个顶点数据,前12字节是一个v顶点坐标(x、y、z),后8字节是vt贴图顶点坐标(x、y)。一个四边形4个v顶点坐标,12x4=48字节,48x51=2448字节,一个四边形4个vt贴图顶点坐标,8x4=32字节,32x51=1632字节,1632+2448=4080字节,完全吻合。

分析到这里,应该有个定论了,把这4080个字节转换成经典的obj格式
0x0000030C   4080 items第1个数据,           float数据组 0x0000844 BE 转 LE 0x44080000  计算float 544 V-x 顶点坐标               
0x00000310   4080 items第2个数据,           float数据组 0x0009E42 BE 转 LE 0x429E0000  计算float 79  V-y 顶点坐标  
0x00000314  4080 items第3个数据,           float数据组 0x0000000 BE 转 LE 0x00000000  计算float 0   V-z 顶点坐标  
0x00000318   4080 items第4个数据,           float数据组 0x000803A BE 转 LE 0x3A800000  计算float 0.0009765625   Vt-x 顶点坐标(贴图)
0x0000031C   4080 items第4个数据,           float数据组 0x020B13A BE 转 LE 0x3AB12000  计算float 0.001351357    Vt-y 顶点坐标(贴图)
.
.
循环51次
输出到obj格式。如下


使用windows 10 自带的3dbuilder 查看一下


好像有点意思了。干脆上max贴图看一下


max 导出为fbx格式,使用windwos10 自带的3D 查看器观看,嘿嘿,是那么个样子



ok,碧蓝航线的立绘加载原理应该就是这样了。下一步是把立绘提取出来。




这就是解包的贝尔法斯特的贴图,由于观看方便,解包的时候翻转了一次,现在我们把它翻回去,如下





这张加密图的分辨率是1024x740


根据前面解读的全宽全高896x1214,我们新建一个画布



我们看obj第一个贴图四边形数据和加密的分辨率
第1个vt坐标点:x 0.0009765625 x 1024=1 ,y 0.001351357 x 740=1
第2个vt坐标点:x 0.0009765625 x 1024=1 ,y 0.5202702 x 740=385
第3个vt坐标点:x 0.02822266 x 1024=289 ,y 0.5202702 x 740=385
第4个vt坐标点:x 0.02822266 x 1024=289 ,y 0.001351357 x 740=1



ok 第一个块的图像锁定,将这个块抠出来,贴到上面说的画布896x1214中,坐标用v顶点坐标



贴图


ok,第一个块贴好了,循环51次,完成所有贴图,自己写个程序自动贴,手工贴有点累,下图,就是自动贴顺序,贴完别忘了翻转一次,倒着看不舒服




去掉网格就是这样





立绘





到这里,碧蓝航线新皮肤贝尔法斯特立绘提取已经完成,大家有啥问题,可以跟帖探讨。至于程序工具,我是不会放的,违反版规。


over


来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-5-15 02:22 , Processed in 0.109375 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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