VR/AR/MR 补丁包体文件大小优化方案

Gavin · 2016年11月16日 · 最后由 陈子昂 回复于 2016年11月21日 · 2952 次阅读

前言

前段时间梳理分享过 VR 项目整包发布与补丁制作方法,可参考https://testerhome.com/topics/5702

在实际测试过程中 90% 以上都是通过打整包的方式出包、运行,能够满足日常测试需求。


背景

目前项目根据研发计划稳步推进中,而制作过程也在不断新增内容,不过在打包时发现耗费在烘焙内容和打包内容上的时间正慢慢增加。

联想到之前做端游测试期间,项目发布后如果有内容或配置上的修改,可以通过补丁方式更新获取,于是问题来了:VR 项目的补丁怎么整?补丁包体大小是否有限制?


方案 1

第一个问题在 topic5702 中已经得以解决,关键点在于“创建一个该游戏的发布版本以进行发布”、“要创建的新版本的名称” 和 “这个基于的发行版本”,如图所示:

发布时记得填写新版本名称(即发布版本号),补丁制作基于发布版本号!如图所示:

补丁已经打出来了,问题也跟着来了:补丁生成的.pak 文件大小几乎等于整包发布时生成的.pak 文件大小(大概 2.23G)!!!!那么补丁的存在就没什么意义了。修改内容后直接更新出个整包文件得了~~

方案 2

方案 1 显示满足不了补丁存在的意义,后来通过尝试修改部分蓝图或配置文件,在改动较小的前提下打出一个补丁,加以验证补丁包体中到底包含哪些内容。
在同等配置的条件下,补丁大小和内容经过整包与散包对比,发现修改内容较少时打出的包体 345M,包含 Assets、BaseMaterials、Blueprints 等 11 个文件内容,如图:

虽然补丁包体大小从 2G 左右降到 300M 左右,但是这么一个小小改动居然产出 300+M 的补丁文件,不能忍!(这还不是最优方案,就不贴图了)

方案 3

通过散包文件发现打进补丁中的有 11 个文件,而实际上我只对其中一个文件夹中的某个文件做了修改,为什么会把其他不相关的内容也打进补丁中呢?似乎、好像、貌似找到点切入点了:补丁中包含一些无用文件!!而且有的文件占用空间比较大(比如 maps)。。

前面废话了那么多,现在终于轮到 “主角” 登场了:Directories to never cook,如图所示:

打包设置项中这块是对整包\补丁制作过程中,不相关文件夹剔除设定。那么实际在打包过程中只将改动的内容打进补丁中了!通过一个小补丁试了一下,补丁包体大小的确降到 200K 以内,如图所示:

注:不过在修改内容较大的地方如修改 maps 文件时,补丁包体偏大是正常的(因为地图文件本身就是个大文件)


结束语

或许我尝试出的方案并不是最优方法,不过也解决了目前工作过程出现的问题。也希望更多的人加入 VR 游戏测试研究中,进一步完善现有的流程与方式~~

不过我也在想既然可以剔除不相关的文件内容,那么为什么不能只打进修改的内容呢?

Additional Asset Directories to cook,我尝试过只是解决了打包过程 C++ 引用的文件而蓝图中未引用,导致包体内容缺失的问题。

可能我的方向不对,没有找到正确的方法,希望大牛能够解决这个问题..

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 7 条回复 时间 点赞

不知道说些啥,因为不懂!谢谢分享😂

这个和我们差不多,不过 200k 还是大了。

#2 楼 @Lihuazhang 明天尝试用发布版的压缩方式看看。我这方法比较笨不过也解决目前问题了。您那补丁怎么整的?

—— 来自 TesterHome 官方 安卓客户端

#1 楼 @lose 也在摸索中,大家都在尝试~

—— 来自 TesterHome 官方 安卓客户端

#4 楼 @mr_gavin 我们一般是修改方法级别,然后推个补丁,利用 java 动态加载替换掉原来坏的方法。和游戏可能不一样。

今天想了下这种方法可行度太低了....自测过程可以修改某个文件夹中某个配置或资源容易更新补丁,但实际游戏项目每天改动量还是蛮大的,如果每个文件夹中都修改一个文件,那导致最终的结果就是不能剔除任一文件夹...
高级设置项中 “迭代 cook:仅 cook 上次 cook 后改变的内容”,引擎中提供了这一项,为什么勾选后却打包失败就搞不懂了。
上述方法仅供参考,仅供参考。。。

#5 楼 @Lihuazhang 差 8 多的,资源版本号在平台验证时匹配是否有内容更新,也是走通过动态加载。unity 因为引擎关系是不太一样,unity 里面一些路径不参与更新的,这个是最大差异

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册