虚幻UE4蓝图从入门到放弃虚幻4UE4(虚幻引擎)

UE4.18 VR导出全景图制作全景视频

2019-07-25  本文已影响9人  错误40504

前言:该教程用于UE4制作的vr作品导出全景图,再将序列帧的全景图合成全景360视频。为了加快渲染速度,修改了部分插件源码。

分享:先上一段测试合成的demo,15s。

youtube翻墙享用:https://youtu.be/AgOrS_F7SqA

准备工作:

1、UE4.18官方插件StereoPanorama,找到引擎安装位置(我这里的是E:\UnrealEngine\UE_4.18\Engine\Plugins\Experimental),将目录底下的StereoPanorama插件拷贝到工程Plugins目录下。如果是纯蓝图工程,可以在工程中新建一个c++类,然后生成sln文件,复制到创建的Plugins目录,vs2015/2017均可打开。将该插件备份,为了防止冲突并删除引擎下的该插件。

2、修改插件源码:由于插件自动渲染了左右眼,一般情况下,渲染一帧的画面需要30s,左右眼就是需要1分钟左右。我们在合成的时候,一般只需要左眼渲染出的图像,所以修改插件只渲染出左眼,提高效率。默认输出为PNG格式,修改为JPG。

下面会给出修改过后的插件源码链接,可以直接下载使用。

链接:https://pan.baidu.com/s/1ZbC4kXtjUzhtrzt3XumWdQ

提取码:aee7

也可自行修改,具体修改如下:Visaul Studio打开StereoPanorama\Source\StereoPanorama\Private\SceneCapturer.cpp

SceneCapturer.cpp

在当前文档查找全部“righteye”,注释相关代码。

在当前文档查找全部“EImageFormat”(修改3处)

//TSharedPtr<IImageWrapper> ImageWrapper = ImageWrapperModule.CreateImageWrapper( EImageFormat::PNG);

修改为:

TSharedPtr<IImageWrapper> ImageWrapper = ImageWrapperModule.CreateImageWrapper( EImageFormat::JPEG );

在当前文档查找全部"CaptureName"

//FString CaptureName = OutputDir / Timestamp / Folder / TickString + TEXT( ".png" );

修改为:

FString CaptureName = OutputDir / Timestamp / Folder / TickString + TEXT( ".jpg" );

3、编译

打开Plugins\StereoPanorama\Source\StereoPanorama\StereoPanorama.Build.cs

添加代码:PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;

StereoPanorama.Build.cs

打开工程源码中\Source\TUKTAKMAN\TUKTAKMAN.Build.cs(我这里工程名是TUKTAKMAN),添加StereoPanorama模块。

TUKTAKMAN.Build.cs

编译成功即可!

开始渲染

1、打开UE4工程,启用插件,需要重启工程。

启用插件

2、渲染会根据场景中的摄像机位置进行360°渲染,所以可以配合sequencer或者Matinee使用,达到自动控制镜头的效果。

       打开关卡蓝图,添加以下节点:

     指定保存图片路径--开始渲染从0-30帧,30fps的话,大概就1s。默认输出为4096*2048的图片,如有需要可以根据情况添加如下命令

SP.OutputDir C:\Users\zhj\Desktop\Test               //设置保存路径

SP.HorizontalAngularIncrement 2.0                            //一张全景图,每次采集水平方向间隔

SP.VerticalAngularlncrement 30.0                                //一张全景图,每次采集垂直方向间隔

SP.ConcurrentCaptures 6

SP.CaptureHorizontalFOV 90.0                                    //fov视角

SP.StepCaptureWidth 1024                                               //图片质量

SP.PanoramicMovie 0 120                                                //渲染帧数0-120帧,开始执行点为第0帧

    说明:一般视频30fps,这里0-30帧指从开始执行渲染为0帧,并不是指程序运行的总帧。开始渲染会卡住,这个时候不要管它,一帧大概需要30s。可以看下保存路径下是否有输出图片。如果有,恭喜你成功了。如你需要渲染1分钟视频,帧率30fps.

修改为:SP.PanoramicMovie 0 1800

那么你需要时间大概为:30*60*30/3600=15H。

你也可以根据官方教程(https://www.unrealengine.com/zh-CN/tech-blog/capturing-stereoscopic-360-screenshots-videos-movies-unreal-engine-4)修改,但是亲测官方给的节点,渲染效果不如默认如下:

Capture蓝图

3、打开项目设置Project Settings,将帧率锁定在30

Project Settings

打开编辑器设置Editor Perferences,去掉勾选,这样挂机渲染的时候不会因为各种异常弹窗影响效率。

Editor Perferences

合成全景视频:

1、渲染完成后,文件名会是这样连续的,注意一定是要连续的,等会我们用合成软件不连续(如:Left_00000.jpg,Left_00002.jpg),合成软件会报错说找不到Left_00001.jpg的图片。如果是在不同的主机渲染不同的片段(最后会讲)文件名重复,可以用批量重命名软件(最后会讲)。

渲染图片

2、下载软件:ffmpeg

链接:https://pan.baidu.com/s/1iws0btpEQ4tzzERTIoqjeg

提取码:88jq

解压后,添加环境变量E:\ffmpeg\bin,我这里解压到E:\ffmpeg

环境变量

3、测试ffmpeg

打开cmd,输入命令ffmpeg -version,显示如下图安装成功!

测试

4、开始合成(亲测,6分钟视频大约需要合成30-40分钟)

可能也跟电脑配置有关系,自行评估,合成过程中会出现cpu 100%的情况

配置

cmd输入命令:

ffmpeg.exe -framerate 30 -i E:\Capture\Left_%5d.jpg -c:v libx264 -profile:v high -level 4.2 -r 30 -pix_fmt yuv420p -crf 18 -preset slower E:\Capture\MyMovie.mp4

以上命令将E:\Capture\下命名以Left_00000.jpg为规则的图片,根据命名规则按顺序帧合成视频。这里也就是为什么前面说一定要按照命名规则必须连续的原因。

输出为30帧率,输出视频文件为MyMovie.mp4。

期待你的成果!

5、由于渲染效率的问题,需要多台机器合成。我这边的操作是分段计算出渲染帧数,每台机器开始渲染提前1S,渲染帧数加30帧。这样保留前后的30帧数,在合成之前先确定好衔接位置,然后用批量命名根据刚才说的命名规则进行连续命名后合成。

这里推荐用ACDSee9相片管理器,好用真香。可以自行在官网下载,也可直接用以下链接。

ACDSee9相片管理器链接:https://pan.baidu.com/s/170wuOmfXRMSft-XzaQa_Hg

提取码:p2ux

批量命名 批量命名

资料:https://www.unrealengine.com/zh-CN/tech-blog/capturing-stereoscopic-360-screenshots-videos-movies-unreal-engine-4

         https://www.jianshu.com/p/ddafe46827b7

上一篇 下一篇

猜你喜欢

热点阅读