极速方法:
https://github.com/HearthSim/UnityPack
这个是一个python的,使用之前呢,先别急着git clone 和python setup.py install 。首先是为了干净,自觉创建一个virtualenv 。然后就是安装dependency,虽然UnityPack 会帮我们安装,但我安装的时候一直报错,所以就直接pip install 了。
当然在MacOS 上至少我的Intel BigSur 上decrunch 是安装不成功的,即使下载源代码python setup.py install 也会报错,这个就麻烦了。所以搜索了一下这个库做了啥,原来是有些Texture2D是压缩了的,需要解压,反正我要摆弄的unity文件里没有要解压的,所以把unitypack/engine/texture.py 里的import decrunsh 相关的都移动到判断确实是压缩文件的if 里,这样就不用安装decrunch 了;记得顺带修改setup.cfg 把decrunch 注释掉。
安装完成,那么我们就可以使用了,unityextract --all -n -o /path/to/output/dir /path/to/unity/asset/file ,这中间带个-n 就是看看它运行了啥,要输出啥;oh no,WARNING: Texture format not implemented. Skipping 'Erma.png' ,我要的资源没有解压。那只能再改改代码,把信息print出来了。啊哦,打印出来一个ETC2_RGBA8 ,再在代码里找找,IMPLEMENTED_FORMATS 下面没有这项,所以它会抛出不支持的错误,那这个ETC2咋解?
尝试了各种etcpack的第三方包,没有doc能说从raw block解码的,都是存成了ktx……
我记得windows上有个叫unityRipper的工具好像是可以解码的,找到它的github repo和对应文件:
https://github.com/mafaca/UtinyRipper/blob/master/uTinyRipperGUI/ThirdParty/Texture%20converters/EtcDecoder.cs
啊喂,又要我来人工代码转换……C# -> python,好吧,我写!几个小时后,运行……哈哈,输出一片栅栏格子…继续搜索,发现原来我一直再搜索PIL ETC2 decode ,而我用的Pillow 可不是PIL ……一个pillow etc2 codec ,好了,找到了别人写好的integration:
https://github.com/K0lb3/etcpack
git clone + python setup.py install ,再import ,好了终于可以decode etc2了。开始dump咯~
|