如题所述
揭秘云端奇想:MoverRenderQueue的联机渲染之旅
我们追求的目标是打造一个易用且高效的远程渲染解决方案,无需繁琐的配置,就像UE的swarm-agent那样。这一创新将客户端的职责定位为任务推送,服务器则负责通信与渲染的重任。借助PySimpleGUI的精妙设计,我们构建了一个轻量级的系统,代码量少于300行,简洁而强大。
在追求高效性上,我们摒弃了初始尝试的UnrealEdit.exe,转而发掘了UnrealEditor-Cmd.exe,它的启动速度更快,且支持自定义脚本,引擎版本的识别通过客户端数据包或服务端解析,确保了无缝对接。
为了优化网络传输,我们采用了网络映射策略,仅共享项目路径,这样服务端在接收到任务后,仅需渲染特定部分,大大减少了数据传输量。配置上,我们借助unreal.MoviePipelineQueueSubsystem,如调整输出分辨率和采样率,通过unreal.MoviePipelineEditorLibrary.export_config_to_asset函数,一键保存所有设置,免去频繁增删的麻烦。
进一步,我们编写bat文件,巧妙地启动UE4Editor-Cmd,精准指定项目路径、地图和Python执行器,细节决定成败,路径和函数选择至关重要。服务端在接收到配置文件,如Star_MasterConfig,通过unreal.load_asset和pipelineQueue.allocate_new_job,精确指定序列和地图,但要确保地图名与路径的准确性,这如同绘画的调色板,每一个元素都不能出错。
特别注意,中文项目名的处理不可或缺,使用chcp 65001编码确保兼容,命令行示例如下:
"C:\Program Files\Epic Games\UE_5.0\Engine\Binaries\Win64\UnrealEditor-Cmd.exe" B:\render_0622.uproject Level_LimeStoneTemple -game -MoviePipelineLocalExecutorClass=MoviePipelinePythonHostExecutor -ExecutorPythonClass=MoviePipelineExampleRuntimeExecutor -LevelSequence=NewLevelSequence_2 -MapPath=/Game/Assets_Content/Other/Map/LimeStoneTemple/Level_LimeStoneTemple -windowed -resx=1280 -resy=640.0 -log
渲染过程由MoviePipelineExampleRuntimeExecutor.initialize启动,服务器脚本实时监控渲染状态,如进度和结束信号。客户端的自定义脚本则通过check_frame监测任务完成,及时反馈进度或显示提示,提升用户体验。深入了解这一技术,可以参考以下文章深入探究:
4.26版本的电影渲染队列增强
export_config_to_asset功能详解
戴巍知乎文章:UE4批渲染cmd篇