从零开始的立绘拆包教程

蓝毒小天使天下第一!
蓝毒小天使天下第一!

本文拆包教程不限于明日方舟,在后面也会给出其他手游的拆包教程,例如少女前线,碧蓝航线等
最近一次更新于2019年8月7日

目录

拆包简介和使用工具:

首先拆包最简单的无非就是拆取游戏资源,例如游戏立绘,音频,视频等,再深层次一点有拆取游戏配置文件,apk反编译得到部分源码等
在本文,我们只介绍拆取游戏资源和对游戏资源的后期处理,但是这里的方法不能保证所有的手游立绘都能提取,不同游戏对立绘等游戏文件的处理不同,这里只提供几种思路 XD

可能需要用到的工具有 Unity Studio,装有 opencv 的python或C++,PhotoShop
其中 Unity Studio 是必要工具,可以用来提取市面上大部分手游的游戏资源
装有 opencv 的python或C++,PhotoShop 等可以对提取的游戏资源(立绘)进行处理,如果是要批量处理的话首推 C++python 虽然方便但是太慢,PhotoShop 也可以进行批量处理,但是麻烦且慢

PS:如果有其他有同样功能的工具也可以,不限于上面的几个软件,点击蓝色可以进网盘下载,理论上用 python的 PIL库 更好,不过我直接用 opencv 了,导致最后生成的可执行文件比较大

提取资源的方法:

首先,如果要拆取立绘等文件,就需要对应用程序进行处理,最简单的有两种方式:

  1. 对下载的 apk 安装包 进行解压
    方法如下,在电脑上下载对应游戏的apk安装包,把后缀 .apk 改为压缩包文件格式,如 .rar 等,利用解压软件对其进行解压得到解压文件夹
  2. 对已经安装在手机的游戏,寻找系统目录,找到其文件夹
    以少女前线为例,通常在手机上安装的软件,会把资源文件等放在 Android 文件夹的 data 文件夹下,这个时候找到其对应的游戏文件夹即可,下图是 少女前线 的文件夹,明日方舟比较特殊,它将资源文件隐藏在了其他文件目录下,所以最好使用第一种方法
    在这里插入图片描述
    通常进入文件夹后按照顺序进入以下文件夹 files 文件夹—— AB 文件夹 ——Android 文件夹,会看到里面的游戏资源文件,如果你是按照第一个解压方法做的,也可以看到上面的文件路径,按照该顺序点进去就行,然后根据游戏的不同,不同的文件可能会被放在一起,也可能会被分类在不同文件夹中,这个时候只需要按照自己需要的进行复制提取到电脑上就好了,注意不要剪切,特别是用第二种方法的,千万别剪切

当然,到这里还没有结束,我们看到的资源文件并不是原来格式,而是以 ab后缀的文件 展示的,这个时候就需要 Unity Studio 来提取目标文件(当然不是所有手游都会用Unity,所以这个方法并不适用于所有手游,如果以后我遇到其他类型的再更新吧XD)
在这里插入图片描述
这里我们以明日方舟为例,如果你正确的找到了路径,那么你可以看到一个名为 charpack 的文件夹,其中储存了明日方舟的干员立绘文件
在这里插入图片描述
这个时候打开 Unity Studio ,用如下选项 Extract folder 批量解压提取ab文件,之后使用 load folder 加载处理后的文件
在这里插入图片描述
然后在 Asset List 中就可以看到提取的内容
在这里插入图片描述
在这里插入图片描述

资源的后续处理:

提取出来的图片大部分情况下是有瑕疵的,因为他们需要进一步处理才能得到原图
而对于其中提取的内容,我们通常需要关心很多文件
常规情况下(使用通道分离压缩图片的):我们需要找到一个是Type为Texture2D的原图,一个是Type为Texture2D或Sprite的透明度背景图,而且通常情况下,原图有一个文件名,对应透明度背景图文件名会在原图文件名后面加上alpha字样,我们通过处理这两个图才能得到最终的png图像文件,所以现在就将所有对应的图片文件从 Unity Studio 导出
还有一些情况,有些手游会对图片进行加密或者是做一些额外处理:这种情况我们就需要按照情况来分析哪些文件有用,哪些文件没用,例如碧蓝航线需要使用一张图片 + 一张obj 3D模型文件来还原原图

在这里插入图片描述

A. 通道分离图像的合成:

首先我们在前面提到过,如果我们能找到一个是Type为Texture2D的原图,一个是Type为Texture2D或Sprite的透明度背景图,那么就说明这个立绘需要进行通道分离图像的合成来得到原图

那么这个时候我们应该如何处理呢,首先 png 图像有4个通道,前三个是 RGB 颜色通道,第四个是透明度通道,实际上为了减少图片的大小,大部分游戏厂商都会先对图片进行 ETC 等压缩算法的处理,再将透明通道单独剥离出去,以达到最大程度的压缩,其中你会发现我们经手的立绘和在游戏中展示的一样,但仔细看会发现不够清晰,正是因为在打包成apk文件之前,游戏公司就已经先对图片进行了压缩处理,丧失了一部分信息,所以说并不是画师的原图,如果想提高清晰度,有两种方法,一种是找原画师或官方公布等途径得到原图,一种是利用图片优化软件对其进行清晰度优化

进入正题,如何处理我们得到文件?

1. 利用 PS 进行处理:

这里我们直接引用一下这位贴吧老哥的方法: 透明立绘简单合成方法,小白一键操作

方法很简单,但缺点是对大量处理文件十分无力,而且需要手工对文件顺序进行排序,也没法判断两个图片尺寸比,适合小量立绘的手工处理

效果图:
在这里插入图片描述
输出效果:
在这里插入图片描述

2. 利用python或C++进行处理:

这个方法适合大量处理,而且不用对图片进行分类,甚至你在 Untiy Studio上导出图片时,可以毫无顾忌的将图片一股脑导出来,让程序自己去找原图和透明度背景图
在这里我用到的工具是 opencv 库

以明日方舟为例: 可以发现它 Alpha 图像中 R 通道 的值代表原图片透明度,那么我只需要将这个图片矩阵的 R 通道 信息赋值给原图像的 透明度通道 即可,然后注意一下有些Alpha图像是原图像大小的 1/2 倍,需要放大 2
其中放大方法调用的是 双立方插值算法 ,这个算法效果比较好
另外就是 PhotoShop 的默认放大算法也是这个算法

python代码: (本来想用C++的,但无奈python太方便了Orz,导致处理速度会慢很多)

# -*- coding: utf-8 -*-
import shutil
import time
import cv2
import os

def read_png(s):
	img = cv2.imread(s, cv2.IMREAD_UNCHANGED)
	return img
def save_png(s, img):
	cv2.imwrite(s, img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
def exchange(img, x): #放大图像
	w, h = img.shape[0:2]
	tempimg = cv2.resize(i
这是一款提取游戏资源的工具 开发环境:Windows XP SP2,Core2Duo E6700、内存 2 GB VC 2005 Express Edition运行环境:Windows XP Vista Win7 如何使用? 打开,请选择文件-> 打开的文件或窗口打开您想要部署并拖放的存档文件。 如果打开的文件支持与如此諦めれ (Oh 不相符,则打开但是,如果存档文件的内容是 AHX、 BMP、 JPG、 MID、 MPG、 OGG、 PNG、 WAV、 WMV 揪出可能的。[解压缩],选择您要检索的文件以后打开-k 是 > 选择中提取。如果您想要检索所有提取-k 是 > 提取所有。 此外,双击所选的文件的意见发挥是可能的。 基本设置列表设置字符颜色和背景色要显示文件信息的列表。 如何指定的颜色表示 16 小数 RGB (RRGGBB 格式)。 若要搜索文件或查找哪些类型的文件从归档文件不兼容设置。 如果您知道已存档的文件来检查只是可取 (表面速度)。精度的搜索OGG 寻找只能用"OggS",看看小小的检查设置。 我通常保持精度,以避免误报,很好。 提取设置-为每个文件夹中提取当您检查文件夹名称中包含要提取的文件夹来生成的文件的文件名。 -固定 OGG 文件 CRC当您检查正确的 CRC,以提取。不能播放由于 CRC 不匹配,可能能够在正确的 CRC 中发挥 OGG。 简单的解码功能,以实现和标记,会有人用简单的解码过程加密的文件。 到目前为止唯一脚本文件的 bmp、 jpg、 mpg、 ogg、 png、 tlg、 吉 hagil 里。 输出图像格式输出图像的文件格式。 谁想要最小化 PNG 是更好的空间。 0 表示无压缩的压缩级别,9 最大压缩。 此外,原始文件 (如 JPG 或 PNG 的 JPG 或 PNG 输出。 -执行 alpha 混合如果您检查,背景颜色设置为 alpha 混合和输出的 24 位。 好,如果不需要的 alpha 值,则检查。-背景色要使用 alpha 混合时价值。 如何指定的颜色表示 16 小数 RGB (RRGGBB 格式)。 -目标每次您提取对话框中显示指定每个指定目的地的时间。 "同一目的地文件夹"创建一个文件夹具有相同的名称和文件打开的如果到位置打开的文件和输出中。 存储文件具有相同的名称和它的位置创建一个文件夹,如果一个。 如果下面的文件夹,设置如下的输出文件夹。 缓冲区大小内存,用于提取文件的大小。 -临时文件夹一个位置来提取临时视图,如果您通过双击播放。 当您打开存档文件或当您退出 ExtractData 时,将删除暂时提取的文件。
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值