UE4烘焙

前言

UE4引擎通过editor来创建和管理uasset,但是当游戏发布到不同的平台时需要根据平台转换为不同的格式。而这样的转换过程就叫作烘焙。

分为三个步骤

  1. 加载包至内存;

  2. 为包中的每个对象生成目标平台特定数据 (Derived Data);

  3. 把含有平台特定数据的包另存到cooked目录

Loading Package

类似于DLL中的导入、导出符号表,Unreal的Package也有一个导入(import)、导出(export)表。

Import表示其依赖的在其他包中的对象

Export记录了对其依赖的其他包中的对象。

当Unreal对一个包进行装载的时候,还需要载入依赖树上的所有包。我们也把这种依赖称为强引用(Hard Dependency)。

也有一些依赖的对象不需要提前载入,我们把这种对象称为弱引用(Soft Dependencies)。软依赖的对象可以后期通过在代码中手动载入。

Derived Data Cache

有的对象比如Texture在不同的平台上有不同的压缩格式,因此在烘培的过程中,需要针对特定的平台生成特定的数据,这种数据被称为"Derived Data"。又因为生成"Derived Data"的过程通常需要比较长的时间,Unreal引入了特定数据缓存(Derived Data Cache)。

Derived Data Cache就是一个在工作室中共享的资源仓库,其中保存了各种版本的资源文件在不同平台上对应的Derived Data。这样当工作室有同事进行烘培的时候,Unreal会去设置的Derived Data Cache中去找是否有人已经生成过该文件了,如果没有的话再生成该文件,这样就减少了重复生成的过程,提高了烘培的效率。

Save Package

烘培中保存包的机制其实和在Editor中保存资源的机制相同。唯一的区别就是保存包时的参数设置和要保存的文件路径。也可以通过在代码中修改UPROPERTIES或者重写Serialize函数来为不同的资源类型定制化不同的保存流程。

同时,Unreal中还默认所有定义在#if EDITOR_ONLY_DATA 的属性都不会在烘培的过程中被保存。

从命令行烘焙内容

要为游戏烘焙数据,需要使用Cook commandlet。

基本烘焙通过以下命令执行:

UE4Editor.exe <GameName or uproject> -run=cook -targetplatform=<Plat1>+<Plat2> [-cookonthefly] [-iterate] [-map=<Map1>+<Map2>]

UE4Editor-Cmd.exe <GameName> -run=cook -targetplatform=<Plat1>+<Plat2> [-cookonthefly] [-iterate] [-map=<Map1>+<Map2>] 

该commandlet必须通过`-run=cook`指定,还必须指定要烘焙的平台。该命令会为指定的平台生成数据, 并将数据保存在以下位置:

<Game>/Saved/Sandboxes/Cooked-<Platform>

选项

-targetplatform=<Plat1>+<Plat2>

指定要烘焙的平台。可用平台列表包含WindowsNoEditor、WindowsServer、LinuxServer、PS4, XboxOne、IOS和Android。

-iterate

指定烘焙器仅烘焙过时项目。如果不指定该选项,则沙箱目录将被删除,所有内容将重新烘焙。

-Map=<Map1>+<Map2>+...

指定要构建的贴图。

-cookonthefly

指定以服务器模式启动烘焙器。这样将启动服务器,服务器将等待游戏连接,然后根据需要提供烘焙的数据。使用该选项时,游戏需要在其命令行上指定-filehostip=<Server IP>以便能够连接服务器。

-MapIniSection=<ini file section>

指定ini文件中包含贴图名称的分段。烘焙器将烘焙指定分段中指定的所有贴图。

-UnVersioned

保存所有烘焙的数据包,不含版本。然后这些数据包在加载时会被假定为最新版本。

-CookAll

烘焙所有内容。

-Compressed

告知烘焙器压缩烘焙过的数据包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值