简述
这篇文章主要是分享如何在UE里面配置Deadline渲染,以及如何用Python来实现自动化。
deadline下载页面: https://downloads.thinkboxsoftware.com/
Deadline版本:10.3.1
Unreal Engine版本:5.6
需要注意的是,UE不像通常DCC软件,它不能单个机器渲染单个帧。 农场分发最小单位为单个Level Sequence,即为每台电脑渲染一个Sequencer。
1.在你的项目目录中,新建Plugins文件夹。 将插件从Deadline仓库的plugins\UnrealEngine5\UnrealEnginePlugins这个位置拷贝进项目的Plugins文件夹。
然后启动项目,这个时候大概率会弹提示,说版本不对要重新编译。
点完Yes大概率也编译不成功,接下来试试我的方法。
先把两个插件从Plugins目录移除,放在一个别的位置。
执行下面的命令来编译UnrealDeadlineService(-package 参数为编译后的目标路径)
"C:\Program Files\Epic Games\UE_5.6\Engine\Build\BatchFiles\RunUAT.bat" BuildPlugin -plugin="D:\test\rebuild_ue_plugins\UnrealDeadlineService\UnrealDeadlineService.uplugin" -package="D:\test\rebuild_ue_plugins\5.6\UnrealDeadlineService"注意:编译前需要安装 Visual Studio 2022,并按照官方说明文档进行组件安装。
编译UnrealDeadlineService成功后,拷贝到自己项目的Plugins中,启动UE。 在插件管理器中加载UnrealDeadlineService插件,然后关闭UE。
再将MoviePipelineDeadline拷贝到Plugins目录,启动UE。 这个时候应该会弹窗,提示编译MoviePipelineDeadline,点击Yes。
等待编译成功,就可以在插件管理器加载两个插件了。
1.打开Project Settings,搜索"movie render"关键字,修改Default Remote Executor和Default Executor Job两个设置。
2.创建一个Deadline Job Preset
创建后,右键Edit,可以修改这个任务的任务名,用什么池或组。
3.创建一个新的Level,Sequencer和相机,简单key一个动画,然后打开Movie Render Queue。
4.在打开的Movie Render Queue中,为任务指定deadline预设。
5.点击Render(Remote)按钮,提交渲染。 正常来说这里就把任务提交到Deadline了。
不过遇到了报错:
看下日志
找到插件中的这个文件Plugins\MoviePipelineDeadline\Content\Python\remote_executor.py
# line 338 if setting.get_class() == unreal.MoviePipelineGameOverrideSetting.static_class(): game_override_class = setting.game_mode_override查看一下setting是个unreal.MoviePipelineGameOverrideSetting对象。 文档里有说明game_mode_override方法被弃用,推荐用soft_game_mode_override
修改代码,重启UE。
if setting.get_class() == unreal.MoviePipelineGameOverrideSetting.static_class(): game_override_class = setting.soft_game_mode_override再试一次,提交成功并渲染完成了。
使用脚本提交渲染
1.首先创建Deadline Job Preset
import unreal presets_name = 'my_seq_deadline_presets' path = '/Game/Sequencer/Presets' asset_tool = unreal.AssetToolsHelpers.get_asset_tools() # 创建Deadline任务预设 presets = asset_tool.create_asset(asset_name=presets_name, package_path=path, asset_class=unreal.DeadlineJobPreset, factory=unreal.DeadlineJobPresetFactory())
2.修改deadline任务参数,并保存。
# 修改一些任务参数 presets.job_preset_struct.name = 'My Test Preset' presets.job_preset_struct.comment = 'This is a test preset...' presets.job_preset_struct.priority = 100 presets.job_preset_struct.group = 'unreal' # 保存 unreal.EditorAssetLibrary.save_asset(presets.get_path_name(), True)
3.创建渲染设置
presets_name = 'my_seq_render_presets' path = '/Game/Sequencer/Presets' # 创建渲染设置 render_config = asset_tool.create_asset( asset_name=presets_name, package_path=path, asset_class=unreal.MoviePipelinePrimaryConfig, factory=unreal.MoviePipelinePrimaryConfigFactory() )
4.修改渲染设置
# 输出路径 output_path = r'D:\test\test_ue_output\{version}' # 获取输出设置对象 output_setting = render_config.find_or_add_setting_by_class(unreal.MoviePipelineOutputSetting) # 修改一些输出设置 output_setting.output_directory = unreal.DirectoryPath(output_path) output_setting.file_name_format = r'{sequence_name}_lay_{version}.{frame_number}' output_setting.use_custom_frame_rate = True output_setting.output_frame_rate = unreal.FrameRate(numerator=24000, denominator=1001) output_setting.output_resolution = unreal.IntPoint(1920, 1080) # 添加渲染格式 render_config.find_or_add_setting_by_class(unreal.MoviePipelineImageSequenceOutput_EXR) # 添加延迟渲染设置 render_config.find_or_add_setting_by_class(unreal.MoviePipelineDeferredPassBase) # 保存 unreal.EditorAssetLibrary.save_asset(render_config.get_path_name(), True)
5.在Movie Render Queue里添加Sequencer渲染任务。
# 创建一个新的渲染任务 new_job = pipeline_queue.allocate_new_job(unreal.MoviePipelineDeadlineExecutorJob) # 设置level level_path = "/Game/testaa.testaa" level_asset = unreal.SoftObjectPath(level_path) new_job.map = level_asset # 设置Sequencer sequence_path = "/Game/my_seq.my_seq" level_sequence = unreal.SoftObjectPath(sequence_path) new_job.sequence = level_sequence # 任务名称 new_job.job_name = 'my_seq'
6.指定config和job preset
new_job.job_preset = presets new_job.set_configuration(render_config)
到这里就设置完成了,点击渲染即可。
参考文档
deadline文档如何在UE中配置插件 https://docs.thinkboxsoftware.com/products/deadline/10.3/1_User%20Manual/manual/app-unreal-engine-5.html
如何将影片渲染队列用于高质量渲染 https://dev.epicgames.com/documentation/zh-cn/unreal-engine/rendering-high-quality-frames-with-movie-render-queue-in-unreal-engine?application_version=5.0#renderinglocallyversusremotely
Movie Render Queue使用说明 https://dev.epicgames.com/documentation/en-us/unreal-engine/render-cinematics-in-unreal-engine?application_version=5.4
MoviePipelineExecutorJob 对象 https://dev.epicgames.com/documentation/en-us/unreal-engine/python-api/class/MoviePipelineExecutorJob?application_version=5.6#unreal.MoviePipelineExecutorJob
如何使用命令行渲染 https://github.com/leixingyu/unrealUtil/blob/master/render/renderCmd.py
全文完
热门跟贴