碧蓝航线的Live2D提取与播放

碧(窑)蓝(子)航线的Live2D提取与播放#

这篇博文纯属是闲得蛋疼的产物(博文中的泥石流),借助了prefare大佬的文章,跟着大佬的教程自己走了一遍,效果拔群。

0x00 需要的工具#

提取Unity资源

Live2D播放

我选择了后者,毕竟能动些小手脚

0x01 提取Unity资源#

首先得从比例比例官网下个碧蓝的apk,装到手机/模拟器上,然后随便你游客登陆也好,用自己b站账号登陆也好,进到游戏主界面点击右上角的设置->资源->Live2D资源更新,下载全部的Live2D资源,下载完就可以退出游戏了。

随便掏出个文件浏览器,在SD卡的目录下找到Android/data/com.bilibili.azurlane/files/AssetBundles/live2d,把里面的文件全部copy出来,保存到电脑上。如下图所示。

运行UABE的AssetBundleExtractor,在File->Open依次打开上面的文件(如第一个就是aidang_2),然后它会提问是否要解压,选是,然后随便输入个文件名保存就ok了,覆盖掉原文件也是没问题的。如果嫌弃累的话,后面有个能够一键操作 (站上去自己动) 的python脚本,直接运行就好了。

然后把解压的文件拖动到大佬写的exe上就好了。(好一会儿脑子秀逗了还以为要点开exe才拖,结果看了大佬的代码之后才明白只要拖到文件资源管理器上就ok了)

在上面一步执行完后,生成了一个live2d文件夹,里面每个文件夹对应了每个live2d模型,如点开aidang_2,里面会有aidang_2.moc3aidang_2.model3.jsonaidang_2.physics3.json,以及motionstextures两个文件夹。

下面一步需要的就是这些文件了。

0x02 查看Live2D#

最简单直接的方法,下载Cubism官网的Live2D Cubism Viewer并打开,把moc3文件或者model3.json文件拖到窗口上就能直接看了。在左边双击motions下的文件就可以播放对应的动画。

这样就ok了。

动起来就是这样子的了:

如果有个大胆的想法(比如把右边的动画窗口嵌入到自己的一个程序界面上的话),就需要自己动动手了。

0x03 魔改Native demo#

目标:实现一个不依赖Unity并且能够自主控制的播放窗口。 其实就是想把它当成自己写的背景小程序中的一个插件而已啦

第一步,下载CubismCore:在https://live2d.github.io/#native上点击下载Download Cubism 3 SDK for Native betag

第二步,下载GLEW:在http://glew.sourceforge.net下载Binaries Windows 32-bit and 64-bit

第三步,下载GLFW:由于一些功能需要最新版(3.3.0),但是预编译的只有3.2.1版本,所以要自己动手build,丰衣足食。

  1. GitHub 从复制到粘贴:运行git clone https://github.com/glfw/glfw
  2. 教科书般的cmake编译,我习惯将build文件夹设成.../glfw/build,把CMAKE_INSTALL_PREFIX设成.../glfw/build/install,打开VS,生成INSTALL,完事。

第四步,下载CubismNativeSamples

  1. git clone --recursive https://github.com/Live2D/CubismNativeSamples
  2. 对cubism native framework进行教科书般cmake
  3. ↑出事了,因为cmake脚本下的include_directories("${FRAMEWORK_GLFW_PATH}")include_directories("${FRAMEWORK_GLEW_PATH}")这两行找不到

第五步,Build自己的项目,让cmake玩蛋去吧

  1. 看了看代码,感觉也就这样吧,打开vs,新建一个空的c++项目,取名就叫CubismBuild吧,自己编译去
  2. 把Framework下的src文件夹复制到这个项目(有.vcxproj文件)的文件夹下,右键CubismBuild项目,添加->添加现有项,除了Rendering下的源文件之外,把src下面的所有源文件都加进来,Rendering只要加OpenGL下的源文件和CubismRenderer两个文件就好了。
  3. CubismRenderer_OpenGLES2.hpp第一行加上#define CSM_TARGET_WIN_GL,手动指定相应的cmake宏
  4. 解压CubismCore和GLEW
  5. ...\CubismNativeSamples\Samples\OpenGL\Demo\proj.win.cmake\Demo下的所有文件也都一同复制到项目文件夹下,在项目中添加这些文件
  6. ...\CubismNativeSamples\Samples\OpenGL\thirdParty\stb\include\stb_image.h这个也复制并添加到项目中
  7. 改一下编译参数,右键项目,点击属性,转到VC++目录,把上面复制过来的src、解压的Core、GLEW和编译过的GLFW的路径都添加一下
    包含路径

    引用路径库路径
  8. 然后在左边的链接器->输入->附加依赖项,加上Live2DCubismCore_MDd.libopengl32.libglu32.libglew32.libglfw3.lib
  9. 直接编译就ok了,运行的时候要把glew的dll复制过去,否则会提示dll缺失。
  10. LAppDefine.cpp下的ResourcesPath,改成CubismNativeSamples\Samples\Res的绝对路径就大功告成了(路径用/分割,不要用\,最后一个/要保留)

It’s time to 魔改。

有了源代码,全程debug一遍基本上就知道哪些代码在干哪些活了。

那个power和齿轮按钮没用,去掉。
改下LAppView就好了

窗体背景透明,隐藏标题。
改下LAppDelegate就好了,这里就是为什么要选择3.3.0的GLFW了,因为3.2.1没有更改窗口背景的API。

要得到窗体的handle
LAppDelegate.cpp加上

1
2
#define GLFW_EXPOSE_NATIVE_WIN32
#include <GLFW/glfw3native.h>

调用glfwGetWin32Window(GLFWwindow *)就会返回一个hwnd,调用WinAPI把父窗体设置成自己的窗体就可以为所欲为了。

设置窗体大小
LAppDefine.cpp改就好了

更改模型的控制
LAppModel上改就好了

在main上面加一个命令行解析,大概也就这样吧。(第二行输出的就是GLFW窗体的hwnd,可以用于后续的窗体嵌入)

0x04 流水作业,解放双手#

很麻烦对吧,要下很多东西对吧,其实要用到的只有UABE,大佬写的AzurLaneLive2DExtract而已,用一个python脚本执行足够了。

下载脚本(整合了UABEAzurLaneLive2DExtract和魔改的native viewer)

你要做的:

自己动手把Unity资源从手机/模拟器复制到电脑上
打开process.py,把上面的路径改成上面的文件夹路径就ok了

运行: python process.py
自动解压Unity资源、提取Live2D

查看Live2D:

  1. 使用Cubism 3自带的Viewer
  2. 或在命令行敲.\player\CubismBuild.exe -d 模型所在的文件夹就好了
    更多的参数(其实也就改了几个,可以通过敲.\player\CubismBuild.exe查看)
    (可能需要VC++ 2017的运行环境)

0xff 引用#

魔改的代码连自己都看不下去,就不开源了(遮脸)

最后:适度游戏益脑,沉迷游戏伤身(物理)