Unity马赛克去除的几种方法
判断是否可以去码
可以先将整个项目文件全部拖入AssetStudio进行解包,一般来说可以查看Sprite或Texture2D类型的数据观察原贴图是否存在马赛克,或者在游戏中观察马赛克是静态还是动态形式的。
一般有一下几种情况:
原贴图无码,实际游戏存在马赛克。可以去码
原贴图有码,实际游戏存在动态马赛克,即码上加码。可以去部分码,无法完全清除
原贴图有码,实际游戏是静态马赛克,是直接搬贴图用的。无法通过本文方法去码
插件去码
版本确定
首先需要确定游戏架构,Unity游戏运行时一般有两种,Mono和IL2CPP,由于性能和跨平台移植便捷性等原因,新游戏一般都是IL2CPP了,区分两者很简单,游戏目录有Assembly-CSharp.dll这个DLL就是mono,包含有il2cpp_data目录就是il2cpp。
确定引擎版本可右键启动游戏的exe文件,选择属性-详细信息-产品版本可以得到
插件安装
首先安装插件框架
注意IL2CPP使用6.0版本,Mono请使用5.4版本
按照BepInEx的安装说明解压到游戏目录后启动游戏即可,注意需要选择对应好的版本,具体可参照具体项目的README文档。
翻译插件
按照XUnity.AutoTranslator的安装说明解压到指定目录,具体可参照具体项目的README文档。
此外,部分游戏可能已经内置了ReiPatcher导致后续我们使用BeplnEx安装XUnity.AutoTranslator会出现冲突报错,可以先使用以下脚本卸载ReiPatcher:
1 | @echo off |
保存为bat文件放在项目根目录双击运行即可。
去码插件
选择对应版本的UniversalUnityDemosaics下载后解压将dll文件放入BepInEx\plugins目录即可,每个dll是不同去码方式,不一定需要全部放入
手动去码
有时候无法使用自动去码或自动去码效果不佳时,可尝试手动去码。
首先使用AssetStudioModGUI加载项目文件,搜索关键词mosa、mosaic、mozaic、censor、msc、mozaiku、pixel、texture、CG、extra等关键词。
找到关键文件后记录下Path ID、Size及来源的文件使用UABEA进行相应修改即可。
进行具体操作前请先注意要备份!
对于不同情况存在不同解决方法
修改.assets:
同时带有“live2d”和“mosaic”字段的文件,尝试使用UABEA删除该文件即可;
带有“mosaic”字段的shader类型文件,首先通过UABEA使用Export Dump导出为txt文件,替换0 float val = 15为0 float val = 0后在使用Import Dump导回即可;
带有“mosaic”字段的mesh类型文件,可以尝试使用UABEA删除该文件;
存在名字类似为”LocalPixelizeURPRendererFeature”的MonoBehaviour类型文件,使用UABEA将该文件导出,替换m_Active = 1为m_Active = 0后重新导入回去即可
修改Assembly-CSharp.dll
或者尝试修改Assembly-CSharp.dll文件:
用dnSpy工具加载该文件;
搜索mosaic,点击结果跳转到类;
编译类,将“float”浮点数的值改为“0.01f”(要足够小);
编译后保存。
工具下载链接
- AssetStudio(解包工具)
- Il2CppDumper(Dump出l2Cpp方式打包的DLL,辅助解包工具查看结构化数据)
- UABEA(解包修改)
- BepInEx(插件框架)
- XUnity.AutoTranslator(翻译插件)
- UniversalUnityDemosaics(通用去码插件)