之前做项目的过程中,有一部分工作是在UE4里制作输出小短片。由于要完成的量比较大,所以研究了一些批渲染的方法。
逻辑上跟以前在maya里用batch render差不多,不过UE4这边的设置相对繁琐一点点。
本文讲解了在不打开UE4软件的前提下,批量输出预先设置好的sequence序列 的方法。
文章内容粗浅简单,权当抛砖引玉了。
注意:本文调用的是"/Script/MovieSceneCapture.AutomatedLevelSequenceCapture",也就是相当于4.24及以前版本中,在sequence面板里点击render moive一样。 跟4.25更新的movie render queue无关。
为什么要用cmd做批渲染:
我们已经知道UE4.25中更新了非常好用的movie render queue工具,质量高而且方便自定义和输出。 奈何UE更新速度之迅猛,应该有不少项目还没切到4.25 ,还用不了render queue。
另外,在cmd指令里配置多任务,编辑效率和方便性我个人用下来是感觉比render queue高的,而且可以通过开动小脑筋实现简单的分布式渲染。让局域网内的多台机器同时处理一批序列。比如说我一共要渲20个序列,有四台肉鸡,那么可以每台肉鸡自动分5个去渲。
所以,总的来说,研究下怎么用cmd做批渲染,依然有用武之地;而且灵活性便利性都不错。
用cmd打开UE4地图:
我们先从基本的来——打开UE4项目里的某一张地图。
要打开某张地图的话,首先我们需要知道的信息是:
UE4Editor.exe 文件的位置
想要打开的地图所在的项目位置
所要打开的地图位置
比如说:
UE4Editor路径 —— "D:\Program Files\UE_4.24\Engine\Binaries\Win64\UE4Editor.exe"
项目路径—— "D:\Projects\UnrealProjects\renderMovieTest\renderMovieTest.uproject"
地图路径—— "D:\Projects\UnrealProjects\Test\Content\Maps\testLaunch"
其中UE4的项目路径可以用相对路径表示,为—— /Game; 所以地图路径可以写为“/Game/Maps/testLaunch”
然后我们新建一个txt文本文件,在文本中写入
"D:\Program Files\UE_4.24\Engine\Binaries\Win64\UE4Editor.exe" D:\Projects\UnrealProjects\renderMovieTest\renderMovieTest.uproject /Game/maps/shot0010
这样一串文本,ctrl+s 保存一下;再把txt文件的后缀改成bat。再双击运行这个bat,你就可以看到我们的UE4启动了,并且正在打开我们指定好的那张图。目标达成。
聪明的朋友可能会在琢磨一件事,就是为什么UE4Editor路径 加了双引号,而另外两个路径没有加双引号呢?
因为cmd命令,基本上是在玩字符串,每一条字符串就是一条command,而在cmd里输入的绝大多数字符,都会被理解成字符串,不管你有没有加 单引号 或者 双引号。而字符串的分隔就是用空格或者回车的。
也就是说 D:\Projects\UnrealProjects\renderMovieTest\renderMovieTest.uproject 这一条路径,在cmd里实际上是一个字符串,是一条command,而D:\Program Files\UE_4.24\Engine\Binaries\Win64\UE4Editor.exe 因为路径里有空格,所以会被理解成两条字符串—— D:\Program 和Files\UE_4.24\Engine\Binaries\Win64\UE4Editor.exe。
这当然不是我们想要的结果,我们需要把这两条字符串当成一个command来处理,这个时候就需要用双引号把这个路径括起来,这样,其中的空格也会理解成字符串的一部分。
也就是说,任何没有空格的一条字符串,你都可以不加双引号(也可以加)。而如果出现了空格,就必须加双引号。
用cmd渲染一个序列:
在上一节打开一张地图的基础上,我们只要继续加一些指令就可以渲染了。
其中必须要加的一条是: -MovieSceneCaptureType="/Script/MovieSceneCapture.AutomatedLevelSequenceCapture"
这条可以让我们使用渲染相关的各种cmd指令。
然后需要定义需要渲染的sequence文件路径,这里需要加上-LevelSequence=:
-LevelSequence="/Game/Sequence/testRende02"
另外我们还需要指定输出序列的文件夹位置,这里需要加上 -MovieFolder=:
-MovieFolder=&