Oculus优化减少UE4开发迭代时间

查看引用/信息源请点击:映维网

优化迭代时间

映维网 2020年07月09日)开发者迭代时间是一个主要的痛点,而Oculus针对这一情况对Unity的迭代时间进行了优化,并且正在努力减少UE4的迭代时间。

1. 迭代代码时跳过APK版本

运行Gradle并生成更新的APK可能是一个耗时过程。当迭代代码改动时,这意味着用户需要等待代码编译和链接,然后再等待APK打包。Oculus的优化允许用户在迭代代码更改时绕过APK的重新打包。

1.1 工作原理

现在你需要重新构建APK并包含更新的编译二进制文件,Oculus对Oculus OS进行了更改,当在包设置中设置特殊flag并且应用程序可调试,如果存在相关名称的文件,库可以自动从应用程序的dataDir加载,而不是从已安装的包中加载。

1.2 支持UE4

你可以依次通过Editor Preferences > General > Experimental找到这个选项。

另外,当在Android项目设置中启用Oculus设备时,你可以在Launch下拉菜单中找到这个选项。

注意,这个选项绕过了正常的Android APK版本逻辑。如果你的更改需要生成新APK,如Java更改或Android manifest更改,则需要临时禁用这个选项。

1.3 支持原生开发

1.3.1 要求

  1. 元数据需要添加到Android manifest中,从而允许应用程序从dataDir加载库:

meta-data android:name=”com.oculus.extlib” android:value=”true”

  1. 另外,安装的APK包必须是可调试。

这只是为了开发目的。Oculus Store将不接受启用这个flag的任何应用程序。

1.3.2 使用说明

如果你的APK包含一个名为libName的本地库,而你希望在不重新打包和重新安装整个APK的情况下对其进行修改,请参照以下步骤:

  1. 构建一个满足上述要求的APK并安装它
  2. 编译代码和链接二进制文件
  3. 可选地从二进制文件中剥离调试符号以减小文件大小(减少推送到设备的时间):llvm-strip –strip-debug -o lib-stripped.so lib.so
  4. 停止运行应用程序:adb shell am force-stop [package_name]
  5. 将lib推送到设备:adb push lib.so /sdcard/Oculus/Temp/lib.so
  6. 复制到lib加载路径:adb shell run-as [package_name] cp /sdcard/Oculus/Temp/lib.so ./lib.so
  7. 设置可执行flag:adb shell run-as [package_name] chmod +x ./lib.so
  8. 启动应用程序

请注意,完成迭代后,在安装新的APK之前需要删除dataDir中的任何库,或者可以从dataDir加载旧库,而不是从包中加载。你可以通过首先使用adb uninstall[package\u name]卸载包或手动删除任何库,并通过adb shell run-as [package_name] rm *.so来自动完成。

1.3.3 结果

测试是使用UE4提供的VR Template进行。平均来说,在不需要时绕过APK版本可以节省129秒,在启动时间方面提高了2.95倍。

2. 对UE4代码编译的FASTBuild支持

Oculus使用FASTBuild添加了对分布式代码编译的支持。FASTBuild是一种开放源代码构建系统,可促进类似于Incredibuild、distcc或SN-DBS的分布式工作。当可以利用远程计算资源时,FASTBuild有助于大大加快大型代码的编译速度。

MSVC和clang工具链目前都支持使用FASTBuild进行分布式编译,所以你可以用来编译Unreal Editor和任何Oculus VR游戏项目。

2.1 要求

  1. 可通过端口31264进行远程工作的其他Windows计算机。
  2. Windows计算机应该在本地网络或通过VPN可用,因为FASTBuild的网络传输未加密,不应通过不安全的网络发送。

请注意,FASTBuild端口不应公开到公共网络,因为任何可以连接到它的人都可以运行任意命令,而这可能会带来安全性风险。

2.2 使用说明

  1. 下载FASTBuild并以%PATH%将二进制文件解压缩到文件夹中。
  2. 在远程windows计算机运行FBuildWorker.exe. 系统可能会提示你允许它通过Windows防火墙。打开后,你可以调整idle设置和要使用的cpu内核数。
  3. FASTBUILD Network Distribution文档所述,通过FASTBUILD_BROKERAGE_PATH环境变量设置worker discovery。
  4. 如果网络共享不可用,可以改为在FASTBUILD_workers环境变量中硬编码remote worker主机名或IP地址,用分号分隔。
  5. 如果两者都可用,在UE4中Incredibuild优于FASTBuild,所以你可能需要卸载前者才能使用FASTBuild。
  6. 如果distribution不能正常工作,你可以使用FASTBuild的故障排除文档
  7. 如果需要,你可以使用另一个开源项目FASTBuild Dashboard来可视化版本。

支持平台的代码编译现在应该能够生成FASTBuild配置文件,并将任务分发到remote worker。

2.3 实现细节

这个实现基于开源项目Unreal_FASTBuild,并经修改以用于更新的MSVC工具链和支持clang。

现在会处理Unreal编译操作并确定要为FASTBuild生成的正确编译器工具链,并重写任何命令行参数以匹配FASTBuild要求。所有未编译的操作将在本地机器运行,如生成预编译的头文件,链接库,或生成最终的二进制文件。所述操作非常复杂,难以一般性支持转换为FASTBuild格式,并且无法从distribution或缓存中获益。由于FASTBuild不支持一个操作的多个输出,所以只有在生成过程完成后才能从FASTBuild报告文件中收集编译依赖项信息,这意味着如果在过程中取消生成,则不会保存相关结果。

另外,FASTBuild内置了对代码编译的缓存支持,如果所有输入都匹配完整的文件路径和chesksum,则可以从缓存中检索对象文件。请注意,由于需要预处理所有编译单元以收集输入文件,所以不建议启用FASTBuild编译,除非至少有一个remote worker已启用。

2.4 结果

测试在IntelXeon W-2135处理器(3.70Ghz 12线程)运行。计时包括所有预处理、预编译头文件生成、代码编译和链接。

本文链接https://news.nweon.com/76204
转载须知:转载摘编需注明来源映维网并保留本文链接
入行必读:AR/VR——计算机历史第二次大浪潮

更多阅读推荐......

资讯