教程如何提取公主连结游戏动画素材
本篇专栏的核心在于如何将公主连结游戏内的 cysp.bytes 格式文件转换成可以识别的动画 .skel 格式文件。通过提取游戏文件在的Spine动画编辑器里播放人物/生物/Boss的动画。
本帖仅供学习交流使用,严禁用于商业用途。最终的效果是可以提取包括绿龙在内的所有生物动画。如图所示。
地下城里的绿龙绿龙动画似似花对于一般的人物动画,可以在[干炸里脊资源网]里找到对应的 .skel 动画文件。例如这里是克里斯蒂娜(狂野)的结算动画的动作,套用了似似花的动画。而干炸里脊资源网里面没有一般生物的动画,因此专栏会在使用一般人物动画的基础上介绍如何提取生物的动画。这样玩家在进行pcr的二创或者视频创作时,就有更方便的素材来源渠道了。
干炸里脊资源网:https://redive.estertion.win/
首先,你需要在B站下载公主连结redive的安卓端的安装包 .apk文件。
公主连结官网apk安装包本质上是一个压缩包。将文件的后缀名由 .apk 改为 .zip 解压,得到游戏文件。这部分内容在这个视频和专栏里有详细介绍。
AssetStudio随后,需要下载1个软件用来读取游戏素材文件。也就是常用的 AssetStudio 。后面简称 AS。
AssetStudio当前版本的AS可以在这里下载。
使用它可以点击左上角[File] → [Load folder] 加载文件夹,选择解压的文件夹。载入。 等1~2分钟后,可以选择第二行的 [Asset List] 里找到所有的素材文件。
2023.3.20f1日服 2023-4-23 更新,需要输入对应的unity版本号读取日服文件:
2023.3.20f1
点击左上角的 [Export] → [All assets] 导出所有文件。 (文件很多,很大。如果加载过多导致软件崩溃,可以将文件夹 [a] 分几次,分别加载)
这样,就可以得到公主连结的游戏素材文件了。
贴图文件首先介绍如何使用干炸里脊资源网提供的动画资源,和游戏提取的文件资源,制作自己想要的动画。在干炸里脊的[卡面]里有对应的角色壁纸/立绘,对应的日文名。
如 ヒヨリ (日和莉)
搜索日和莉保存1张图片,发现图片名是 [100131] ,这也是日和莉的角色ID。下面是 日和莉(ヒヨリ)的人物贴图,文件名是 100111.png 。这是从游戏里提取的资源。保存在 [sdnormal] 文件里。
我在文件夹里搜索了png,然后全选复制粘贴到了新的文件里,方便大图查看
人物编号日和莉的编号是 1 001 1 1,代表的含义是
1人物,001号,1星角色,1默认。
栞 的编号是 1 038 3 1,代表的含义是
1人物,038号,3星角色,1默认。
日和莉贴图日和莉共有3种模式的贴图,分别对应了1星,3星和6星。分别是:
100111
100131
100161
栞贴图栞只有2种模式的贴图,分别对应了1星和3星:让我栞栞谁还没6星
103811
103831
绿龙贴图每个角色/生物/boss都有其对应的编号,如绿龙的编号是:310100
如何将游戏素材转换成可以利用的视频/图片素材呢?
干炸里脊 战斗小人在干炸里脊里选择[战斗小人]角色是按照1~99顺序来排列的。(没有搜索功能,这一点很不友好)
找到对应的立绘,加载动画。
等到下面出现日和莉小人动画后,保存 [skel] 文件。
下载skel文件这样,我们就得到了 [骨骼动画] 的 [贴图] 和 [动画] 文件。
可是,怎样才能得到具体的视频/图片素材呢?
这里需要用到强大的 Spine 骨骼动画编辑器。
spine可以参考这个专栏
Spine pro 3.8.75 版本打开之后是这样的:
spine窗口但是spine只能识别 [.json] 格式的文件,干炸里脊下载到的是 [.skel] 格式的,这要怎么处理呢?
别急,首先需要找到日和莉的所有文件。
在刚才提取出来的游戏文件里搜索100131(日和莉的编号),发现游戏里关于日和莉的素材有非常多。但是我们并不需要这么多素材,我们只需要在规定的路径下找到对应的素材就可以了。
例如日服在 CygamesTextAssetassets\_elementsresources esourcesspinesdnormal 这个路径下,找到 100131.atlas.txt 这个文件。整个游戏里分别有3个同名文件,分别是
shadow 阴影,地下城暗的影小人,以及hard本里掉角色碎片
room 公会小屋,每天收体力,互动,喂蛋糕的地方
sdnormal 一般关卡里的,战斗小人而我们需要的正是 [sdnormal] 文件里的 100131.atlas.txt 这个文件。
100131.atlas.txt我们可以尝试用 [txt] 格式打开这个文件,发现里面是一些 xy 之类的坐标数据,它是用来切分完整的贴图图片的。有了这些数据,就可以把一张完整的贴图裁剪成一个个零部件。
新建1个文件夹。取名为 [日和莉 100131],把刚才准备好的 100131.atlas.txt ,100131.png 以及 从干炸里脊下载的 100131.skel 放到这个文件夹里。
这时候需要用到1个转换网站,把 [.skel] 格式文件转换成 [.json],以便可以 Spine 动画编辑器 可以读取文件。
网址:https://naganeko.pages.dev/chibi-gif/
将3个文件导入该网站,如果加载了日和莉小人,说明加载成功。此时,我们就得到了 Spine 可以识别的 [.json] 文件。点击网页下方的选项 [as-is] 或者 [Spine3.8],下载 [100131_s38.json] 文件。将其放到刚才新建的 [日和莉] 文件夹里。
这样,我们制作动画的所有文件就准备齐了。新建1个 [Texture2D] 文件夹,用来放贴图。下面是准备好的文件。
接下来我们需要将文件导入到spine里。
打开 Spine之后,左上角[文件]里新建1个项目。然后[导入数据],选择 .json 文件。日和莉是人物。人物的缩放要改成 0.5。可能会提示你 “有未保存的项目”,点[放弃更改]。
这时候,会出现一大堆乱码,显示 missingname 示意贴图丢失。不过不要紧。因为我们还没有对贴图进行解包。
纹理解包接下来使用 [纹理解包] 功能,将完整的贴图文件切割成贴图零件。
[图集文件] 选择 100131.atlas.txt 文件。[输出文件] 选择路径时在 [日和莉] 文件里的 [Texture2D] 文件夹。
同时勾选 [非预乘alph],点击 [解开],这样就得到了贴图文件。
点击 Spine 右侧的 [图片],点击加载选项。
选择刚才建的[Texture2D] 文件夹。
贴图加载成功大功告成
接下来演示如何导出动画:
左上角点击 [设置]/[动画] 切换成 [动画] 模式,在右侧的动画列表里找到对应的动画,比如我这里找的是 idle 发呆动画。
导出文件之前保存一份 spine 格式的工程文件。
在底部操作栏里关闭 [骨骼] 的图层,这样动画显示的更清楚一些。
如果选中了图中的元素想取消选中,按 [空格] 就可以。
如果有误操作导致动画变形,可以 [ctrl] + [z] 撤销操作。
导出gif动画时,Alpha阈值调到 [90] 就可以将人物脚下的半透明 [阴影] 隐藏了。
点左上角,[导出],然后会出现一个选项窗口。我这里演示的是 .GIF格式的。也可导出 [.mov] 和 .avi 格式的视频素材。
选项窗口的右侧有 [默认] 和 [预览] 选项,点击 [预览] 可以展示动图的预览效果。以便确定画布的裁剪宽度。
我一般会选择视区裁剪的格式。里面一共有4个值,分别是
坐标轴 X轴,Y轴,图片大小 宽度W,高度H。
例如我导出的是以 XY坐标轴的 (-250,-50) 这一点开始。宽 [500像素,高500像素] 的区域。
通常在导出同一类图片的时候,会把视区固定在同一值。这样方便不同动画之间的互相切换。
在选择导出路径的时候,要给 [文件] 起一个名字,比如我导出的动画名是 idle,我给文件也起名为 idle。
文件起个名字日和莉这样就可以导出一般的人物动画素材了。
好了,一切工作准备就绪。施法前摇完毕。下面进入正题。干炸里脊资源网里只有战斗小人的 .skel。如何获得其他生物,比如绿龙的 .skel格式的动画文件呢?
绿龙的编号是 310100,如果在 [unitanimation] 文件夹里搜索 310100,会得到 [ _battle.cysp.bytes] 和 [ _chara_base.cysp.bytes] 2个文件。这2个文件就是拆分后的 .skel 文件。
干炸里脊资源网是将几个普通的人物模板文件 [.cysp.bytes] 合并后,得到的 .skel文件。也就是说,大部分的人物动作是通用的。比如 [rank] 升级后的演出动画,战败后 [跪地] 的动画。这些动画是通用的,没有必要每个角色都塞进去一套。所以游戏里除了每个角色专属的技能动画。还有所有角色通用的动画。本专栏的核心是如何得到 Spine 可识别的 [.skel] 文件,我们要做的就是将上面这2个文件,合并成 [ .skel] 格式的文件。也就是得到骨骼动画文件。
下面我先介绍修改文件的原理,再分享一个Python程序批量操作文件。
Hex Workshop我用的是 Hex Workshop 这款软件。它可以把 [数据文件] 以 [16进制] 格式打开。这样可以方便我们对文件的源码直接进行修改。由于格式是固定的,用脚本修改会更方便,这里我先介绍如何修改源码。如果没有更深需要可以直接跳过。
为此我需要新建1个 .txt文