UOD 2021主视觉输出记录——如何使用UE5渲染16K超大画面

用户头像
成都/三维设计师/4年前/3135浏览
UOD 2021主视觉输出记录——如何使用UE5渲染16K超大画面

UOD 2021主视觉输出记录——如何使用UE5渲染16K超大画面


先说结论


UE5 EA有能力渲染16K(15360x8640)级别的超大图像。


但UE5 EA的渲染模块不如UE4稳定,需要手动计算调试。


渲染超过6K的内容建议使用MRQ的HighRes模块进行拆分渲染,并将每个分块的尺寸控制在4K上下。


不同项目的实际表现可能非常不同,请适当调整。


实际渲染参数如下:


MRQ-输出


MRQ-高分辨率(HighRes)


MRQ-抗锯齿


一切的开始


有一天晚上大钊问我,你用的是RTX 8000吗?我说不是,我用的是RTX A6000,咋了?


大钊说,需要我帮忙渲染一下今年UOD的主KV。因为工程已经准备好了,但是他自用的RTX 3080显存不够(10 GB),没法渲染打印海报需要的16K版本……


我说这还不简单,不就是点个Render然后再等1.19秒的事情么,交给我吧!


事实证明,我太天真了!


第一次渲染


打开工程后我直接沿用UE4的经验设定了16K分辨率进行输出,结果UE5 EA直接崩了!


但检查到显存占用才9.8GB!因此问题显然不是出在显卡层面,应该从MRQ方面找原因。




第二次渲染


第二次渲染我启用了高分辨率(HighRes)模块,使用最基本的2x2拆分方式,将画面分为4块;再加上20%的Overlap,最终每个图块的分辨率为10752x6048,如下图:


结果这次输出还是失败了,但是我得到了一段有价值的log信息:


[2021.09.28-08.51.17:718][  6]LogThreadingWindows: Error: Runnable thread RenderThread 1 crashed.

[2021.09.28-08.51.17:719][  6]LogWindows: Windows GetLastError: 操作成功完成。 (0)

[2021.09.28-08.51.17:719][  6]LogWindows: Error: HandleError re-entered.

[2021.09.28-08.51.17:719][  6]LogWindows: Error: === Critical error: ===

[2021.09.28-08.51.17:720][  6]LogWindows: FPlatformMisc::RequestExit(1)

[2021.09.28-08.51.17:721][  6]LogWindows: Error:

[2021.09.28-08.51.17:721][  6]LogCore: Engine exit requested (reason: Win RequestExit)

[2021.09.28-08.51.17:722][  6]LogWindows: Error: Assertion failed: CreateInfo.Extent.X <= (int32)GetMax2DTextureDimension() [File:D:/build/++UE5/Sync/Engine/Source/Runtime/D3D12RHI/Private/D3D12Texture.cpp] [Line: 1959]

[2021.09.28-08.51.17:722][  6]LogWindows: Error:


通过log可以判断,渲染进程不是凭空挂掉的,而是来自系统层面的主动关闭,且关闭原因与2D纹理的分辨率有关(2DTextureDimension)。


一开始我怀疑是不是场景里使用了某种超大贴图,但简单检查以后就能排除这个原因,项目里最大的贴图只有8192x8192分辨率,是标准的Megascans资源,没有超标情况。


于是带着这个疑问我又开始了新的测试:


一次……


一次……


又一次……


3072!


同样的崩溃出现了一次一次又一次,但是在某次测试中,我得到了一条关键信息:


[2021.09.28-09.57.33:776][  6]LogWindows: Error: Requested texture2d x size too large: 18432, Max: 16384


渲染设置如下: Tile Count = 3,Overlap Ratio = 0.3, 最终每个图块的分辨率为8192x4610.如果不考虑Overlap,则实际分辨率为5120x2880.


上文中的关键信息提到,由于2D纹理的横向分辨率为18432像素,大于系统允许的16384限制,所以造成了渲染崩溃。


这么大的纹理不可能来自于工程本身,只可能与渲染输出有关。考虑到最终图像的分辨率是15360,是否有可能是因为虚幻在分区计算时生成了某张过大的缓存,导致渲染崩溃?


手动计算18432-15360=3072,请记住3072这个数字,这是解决问题的关键!


然后让我们回忆一下HighRes模块的计算方法:每个图块的本体分辨率为5120x2880,加上30%的Overlap(双向),最终分辨率为8192x4610。如果用8192减去5120,将得到Overlap区域的横向分辨率:3072!


自此我们已经找到了问题的逻辑:渲染图像从横向而言被切分成了3块,每一块的原始分辨率为5120;加上30%的Overlap区域,最终计算的图像尺寸为5120x3+3072=18432——过大的Overlap区域导致渲染失败。


如下图所示,一个图块由三部分组成:5120像素宽的本体,以及左右各30%(1536像素宽)的Overlap区域。三个区域的总宽度是8192像素。


在实际渲染时,三个图块依次拼接,中间的Overlap区域将会互相融合以消除接缝。但最左边和最右边的图块各会有一个额外的Overlap区域,当它们与主体的15360像素相加以后,就会得到18432这个超标尺寸。


找到了问题原因,那解决方案就很简单了:适当降低Overlap,或增加图块数量,保证实际渲染尺寸不超过16384即可。


后记


后来我又经过了几次测试,确认使用上面的思路都能完成渲染任务。但最稳定兼容性最好的设置请参考开头部分。


这应该是UE5 EA高分辨率(HighRes)模块的一个Bug,相信正式版会被修复,因为UE4没有出现同样问题。


注释


场景不是我做的,我只是帮忙做了输出。这个场景是大钊和日天做的。


抗锯齿模块设置比较特殊,是因为本机内存有限(64GB),无法支持更高的时空采样,这只是个临时的Trick。


使用开头提到的参数进行输出时,实际显存占用约为20-30GB,所以大钊的RTX 3080应该还是搞不定的,哈哈


HighRes模块的相关资料请查看:实践课-MRQ-高分辨率


UE4输出16K视频的文章请见:使用RTX A6000渲染16K Unreal视频是一种什么样的体验?

21
举报
|
19
分享
相关推荐
评论
用户头像
评论你的想法~
表情
喜欢TA的作品吗?喜欢就快来夸夸TA吧!
推荐素材
国画水墨江南山水画装饰画电视背景墙装饰画
禅意山水画 意境山水 水墨装饰画  新中式水墨山水
母婴电商矢量插画
船坞民宿概方案
 中式花鸟墙纸 新中式壁画 花鸟装饰画 花鸟画
新能源腊八节海报
 ps常用偷懒笔刷
汉堡插画
走进寿县:历史、美食、民俗交织的魅力画卷
中秋佳节花好月圆
二十四节气图片之霜降
玫瑰
卡通兔子插画
头发1
女生半身插画
乐陶创意体验工坊标志设计
室内家居场景矢量插画
宠物纪念相册H5模板系列 · 温馨治愈系 · 三款主题
love玫瑰花
中国风书法汉字字体设计其他
立春节气背景
炫光
我要奋斗
木纹贴图设计师常用
苏门答腊虎母子插画
你可能喜欢
相关收藏夹
地产VI
地产VI
地产VI
地产VI
大家都在看
登录注册