科技魔方

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

AR/VR

2020年07月09日

  (映维网 2020年07月08日)开发者迭代时间是一个主要的痛点,而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 要求

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

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

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

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

  1.3.2 使用说明

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

  构建一个满足上述要求的APK并安装它

  编译代码和链接二进制文件

  可选地从二进制文件中剥离调试符号以减小文件大小(减少推送到设备的时间):llvm-strip –strip-debug -o lib-stripped.so lib.so

  停止运行应用程序:adb shell am force-stop [package_name]

  将lib推送到设备:adb push lib.so /sdcard/Oculus/Temp/lib.so

  复制到lib加载路径:adb shell run-as [package_name] cp /sdcard/Oculus/Temp/lib.so ./lib.so

  设置可执行flag:adb shell run-as [package_name] chmod +x ./lib.so

  启动应用程序

  请注意,完成迭代后,在安装新的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 要求

  可通过端口31264进行远程工作的其他Windows计算机。

  Windows计算机应该在本地网络或通过VPN可用,因为FASTBuild的网络传输未加密,不应通过不安全的网络发送。

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

  2.2 使用说明

  下载FASTBuild并以%PATH%将二进制文件解压缩到文件夹中。

  在远程windows计算机运行FBuildWorker.exe. 系统可能会提示你允许它通过Windows防火墙。打开后,你可以调整idle设置和要使用的cpu内核数。

  如FASTBUILD Network Distribution文档所述,通过FASTBUILD_BROKERAGE_PATH环境变量设置worker discovery。

  如果网络共享不可用,可以改为在FASTBUILD_workers环境变量中硬编码remote worker主机名或IP地址,用分号分隔。

  如果两者都可用,在UE4中Incredibuild优于FASTBuild,所以你可能需要卸载前者才能使用FASTBuild。

  如果distribution不能正常工作,你可以使用FASTBuild的故障排除文档。

  如果需要,你可以使用另一个开源项目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线程)运行。计时包括所有预处理、预编译头文件生成、代码编译和链接。

+1

来源:映维网

推荐文章