分析场景打包过程
Windows.mk :依赖PythonAPI,执行Package.bat --ue-version 4.26 --all
-> Package.bat
1.参数解析
2.获取虚幻引擎根路径
3.设置打包的路径(包括生成压缩包的完整路径 carla/Build/UE4Carla/CARLA_0.9.15-262-g8f7e40f3c-dirty.zip ),它根据git describe --tags --dirty --always
命令生成压缩包的名称,
--tags 匹配远程的tag
--dirty 表示如果源码如果被修改了,则会在版本后面加上 -dirty
--always 获取最近的 commitID
4.创建Carla包
4.1编辑Unreal/CarlaUE4/CarlaUE4.uproject
文件来启用/禁用CarSim插件
4.2通过Build.bat
基于Development
、%PACKAGE_CONFIG%
配置进行编译
4.3通过 RunUAT.bat
(Unreal Automation Tool,虚幻自动化工具)烘焙并打包 (报错地方)
5.给包中添加额外的文件,包括PythonAPI等
6.压缩项目
7.移除临时的中间文件
8.烘焙其他包
RunUAT.bat 打包命令解析
查看构建烘焙运行
命令BuildCookRun
的帮助信息:
%UE4_ROOT%\Engine\Build\BatchFiles\RunUAT.bat BuildCookRun -Help
命令 | 描述 |
---|---|
-Platform=Win64 |
目标平台为Windows |
-nop4 |
不使用Perforce版本控制 |
-project="%ROOT_PATH%Unreal/CarlaUE4/CarlaUE4.uproject" |
目标UE项目工程文件 |
-build -cook -stage -archive -package |
表示需要 构建、烘焙、暂存、归档、打包 |
-archivedirectory="!BUILD_FOLDER!" |
归档输出目录 |
-clientconfig=%PACKAGE_CONFIG% |
客户端编译配置,如Debug/Development/Shipping等 |
附录说明
自动化工具(Unreal Automation Tool,简称 UAT),自动化工具使用特定的命令 BuildCookRun
封装流程包含
命令 | 描述 |
---|---|
构建(build) | 该阶段将为所选择的平台编译可执行文件 |
烘培(cook) | 该阶段通过在特殊模式下执行编辑器来转化内容 |
暂存(stage) | 该阶段将可执行文件和内容复制到暂存区,它是开发目录以外的独立目录 |
打包(package、archive) | 该该阶段将项目打包成平台原生的分发格式 |
部署(deploy) | 该阶段将构建版本部署到目标设备 |
运行(run) | 该阶段在目标平台上启动已封装的项目 |
调试
最终运行的命令为:
"C:\workspace\UnrealEngine\Engine\Build\BatchFiles\RunUAT.bat" BuildCookRun -nocompileeditor -TargetPlatform=Win64 -Platform=Win64 -installed -nop4 -project="C:/workspace/carla/Unreal/CarlaUE4/CarlaUE4.uproject" -cook -stage -build -archive -archivedirectory="C:/workspace/carla/Build/UE4Carla/1.0-7-gd8d6d49e0/" -package -clientconfig=Shipping
实际运行的构建命令(成功):
Running: C:\workspace\UnrealEngine\Engine\Binaries\DotNET\UnrealBuildTool.exe UnrealPak Win64 Development -Project=C:\workspace\carla\Unreal\CarlaUE4\CarlaUE4.uproject C:\workspace\carla\Unreal\CarlaUE4\CarlaUE4.uproject -NoUBTMakefiles -Manifest=C:\workspace\UnrealEngine\Engine\Intermediate\Build\Manifest.xml -NoHotReload -log="C:\workspace\UnrealEngine\Engine\Programs\AutomationTool\Saved\Logs\UBT-UnrealPak-Win64-Development.txt"
实际运行的烘焙命令(失败):
Running: C:\workspace\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Cmd.exe C:\workspace\carla\Unreal\CarlaUE4\CarlaUE4.uproject -run=Cook -TargetPlatform=WindowsNoEditor -fileopenlog -unversioned -abslog=C:\workspace\UnrealEngine\Engine\Programs\AutomationTool\Saved\Cook-2025.05.23-14.23.04.txt -stdout -CrashForUAT -unattended -NoLogTimes
解决:使用Carla配置打包时,移除 DReyeVR的C++代码 可暂时规避,打包成功。
使用VR配置时,需要添加 DReyeVR的C++代码 ,可以打包成功,但是环境是黑色的,只有注视点的红色和方向盘的白色。
如果是用VR配置打包还失败,就是先要就编译器中独立程序运行后,然后安装RenderDoc,最后再打包。
找错过程
# 工作机
D:\work\workspace\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Cmd.exe D:\work\workspace\carla\Unreal\CarlaUE4\CarlaUE4.uproject -run=Cook -TargetPlatform=WindowsNoEditor -fileopenlog -unversioned -abslog=D:\work\workspace\UnrealEngine\Engine\Programs\AutomationTool\Saved\Logs\Cook-2025.05.23-14.23.04.txt -stdout -CrashForUAT -unattended -NoLogTimes
报错信息( 相同报错 :说是.ini 的问题):
LogWindows: Error: === Critical error: ===
LogWindows: Error:
LogWindows: Error: Fatal error!
LogWindows: Error:
LogWindows: Error: Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0x0000000000000038
LogWindows: Error:
LogWindows: Error: [Callstack] 0x00007ffaedb266c4 UE4Editor-RenderCore.dll!FShaderMapContent::GetOutdatedTypes() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\RenderCore\Private\ShaderMap.cpp:581]
LogWindows: Error: [Callstack] 0x00007ff954f8b28a UE4Editor-Engine.dll!FMaterialShaderMap::GetAllOutdatedTypes() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Engine\Private\Materials\MaterialShader.cpp:1043]
LogWindows: Error: [Callstack] 0x00007ff955413b67 UE4Editor-Engine.dll!GetOutdatedShaderTypes() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Engine\Private\ShaderCompiler\ShaderCompiler.cpp:4216]
LogWindows: Error: [Callstack] 0x00007ff955433d03 UE4Editor-Engine.dll!RecompileShadersForRemote() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Engine\Private\ShaderCompiler\ShaderCompiler.cpp:5129]
LogWindows: Error: [Callstack] 0x00007ff94d841c5d UE4Editor-UnrealEd.dll!UCookOnTheFlyServer::SaveGlobalShaderMapFiles() [D:\work\workspace\UnrealEngine\Engine\Source\Editor\UnrealEd\Private\CookOnTheFlyServer.cpp:5511]
LogWindows: Error: [Callstack] 0x00007ff94d8459dc UE4Editor-UnrealEd.dll!UCookOnTheFlyServer::StartCookByTheBook() [D:\work\workspace\UnrealEngine\Engine\Source\Editor\UnrealEd\Private\CookOnTheFlyServer.cpp:6865]
LogWindows: Error: [Callstack] 0x00007ff94d6843b9 UE4Editor-UnrealEd.dll!UCookCommandlet::CookByTheBook() [D:\work\workspace\UnrealEngine\Engine\Source\Editor\UnrealEd\Private\Commandlets\CookCommandlet.cpp:919]
LogWindows: Error: [Callstack] 0x00007ff94d6ae428 UE4Editor-UnrealEd.dll!UCookCommandlet::Main() [D:\work\workspace\UnrealEngine\Engine\Source\Editor\UnrealEd\Private\Commandlets\CookCommandlet.cpp:624]
LogWindows: Error: [Callstack] 0x00007ff77ab596da UE4Editor-Cmd.exe!FEngineLoop::PreInitPostStartupScreen() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:3369]
LogWindows: Error: [Callstack] 0x00007ff77ab50e6d UE4Editor-Cmd.exe!GuardedMain() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Launch\Private\Launch.cpp:127]
LogWindows: Error: [Callstack] 0x00007ff77ab511ca UE4Editor-Cmd.exe!GuardedMainWrapper() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:137]
LogWindows: Error: [Callstack] 0x00007ff77ab64e5d UE4Editor-Cmd.exe!WinMain() [D:\work\workspace\UnrealEngine\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:268]
LogWindows: Error: [Callstack] 0x00007ff77ab66f02 UE4Editor-Cmd.exe!__scrt_common_main_seh() [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
LogWindows: Error: [Callstack] 0x00007ffb52ed7374 KERNEL32.DLL!UnknownFunction []
LogWindows: Error: [Callstack] 0x00007ffb54edcc91 ntdll.dll!UnknownFunction []
LogWindows: Error:
LogWindows: Error: end: stack for UAT
调试配置
1.打开项目的 VS 工程
打开工程下的 sln 文件(carla/Unreal/CarlaUE4/CarlaUE4.sln)以通过 VS 打开工程。
2.在需要的地方下断点
根据报错信息,在UnrealEngine\Engine\Source\Runtime\RenderCore\Private\ShaderMap.cpp:581
打断点(也可以在任何想要调试的地方下断点)。
3.选择合适的 VS 配置
确认选择合适的配置(Development Editor)、平台(Win64)和启动工程(CarlaUE4)等。
4.打开工程的属性配置界面
在解决方案视图(Solution Explorer)中的工程名字上右键,点击属性(Properties)。
此时会打开对应工程的属性页面(Property Pages);
点击配置属性(Configuration Properties) 下的调试(Debugging) 标签;
在命令参数(Command Arguments)中输入对应的 Cook 命令,在原有的命令后添加:
-run=Cook -TargetPlatform=WindowsNoEditor -fileopenlog -unversioned -abslog=D:\work\workspace\UnrealEngine\Engine\Programs\AutomationTool\Saved\Logs\Cook-2025.05.23-14.23.04.txt -stdout -CrashForUAT -unattended -NoLogTimes
附 Cook 命令格式:
-run=cook -targetplatform=<Plat1>+<Plat2> [-cookonthefly] [-iterate] [-map=<Map1>+<Map2>]
点击确定或应用,属性页面会自动关闭。
5.开始调试
点击 Debug - Start Debugging ,或直接按 F5 等,启动调试。
通过对堆栈和属性等或其它操作进行正常的分析调试。
注意!!! 需要重新运行 make package,不能在vs中只运行之前的烘焙命令,否则不会显示所做修改的日志。
根据最后一个出错的id,加1后获得烘焙出错的资产
LogMaterial: Display: GetAllOutdatedTypes->AllMaterialShaderMaps Index = 219
LogMaterial: Display: CacheShadersForResources->BaseMat:ProceduralHairCardsShader,Ins:MI_cardsShader_hairEyebrowsLOD1
LogMaterial: Display: FMaterialShaderMap->AllMaterialShaderMaps Num: 220
把不兼容的材质全删除。
材质的报错信息为( 特性关卡ES3_1不支持光照模型MSM_Hair ):
ShadingModel MSM_Hair not supported in feature level ES3_1
定义自定义引擎
将 USE_CUSTOM_ENGINE 定义添加到 Engine/Source/Runtime/Core/Public/Misc/Build.h。