MRQ全景渲染+后处理材质渲染全景景深图还原3d场景与原场景不匹配

附件里有ue5.5工程、最终渲染图以及问题描述

重现步骤
UE5.5 用Movie Render Queue Additional Render Passes插件,通过后处理材质渲染出全景深度图,用此图还原的3d场景出现了与实际场景不匹配问题

[Image Removed]​

请问你是如何输出全景深度图的?我无法在你的项目使用提供的地图输出(已调用Pending_MoviePipelinePrimaryConfig这个MRQ配置)​

我的理解Panoramic Rendering插件的原理是通过增加在水平和垂直上相机的数量,但裁切掉每个相机成像的边缘部分仅中间部分避免相机边缘的投影畸变的成像参与缝合,从而能让全景在任何角度看起来畸变最小。总的相机数量应该是水平数量×垂直数量,每个相机渲染的图片有一定的冗余,方便做平滑(blend)的缝合以及避免一些屏幕空间效果的瑕疵。

SceneDepth,也就是你后期材质采样的深度是世界位置到摄像机平面的距离,因此即使摄像机不动,但有一定的旋转,同一个世界位置的深度就不同。简单地说即全景相机通过多个相机成像缝合的原理导致它没有固定的相机平面,同个世界位置深度每个相机下都不同。如果缝合的时候是硬缝合,不做任何图片之间的混合,那出来的深度其实也能和颜色图匹配上。但插件的缝合有一定冗余边缘做了混合,颜色图可能看不出问题,但混合深度就会有问题,会产生类似波浪形的黑白渐变(你可以留意到不仅左右,上下也有渐变)

问题的关键是计算深度的方式是基于相机平面的。如果后期材质的深度计算基于WorldPosition到Camera Position相机的距离,那同一个世界位置在位置不变不同角度的相机里的“深度”就相同,后面的缝合有混合也无妨。但这个深度和引擎渲染利用到的深度有不同,能不能用可能要看你后期里是如何应用这个“深度”的

以下截图是两种方式的“深度”的后期材质产生的全景深度图效果比较

[Image Removed]

嗯,初次回复的“引擎渲染利用到的深度” 就是指SceneDepth

还有个问题:

“每个相机渲染的图片有一定的冗余,方便做平滑(blend)的缝合以及避免一些屏幕空间效果的瑕疵。”

我按你截图方式连的后处理节点(用MovieRenderQueue_WorldDepth的G通道确实也一样),旋转墙壁渲染出图对比验证了下,感觉就是把冗余部分剪裁了?

p点向两个相机分别渲染出p1像素点和p2像素点,拼接时,冗余处留下了​p2(绿色虚线部分),剪裁了p1(红色虚线部分),其实就是“硬缝合”,或许其实没有冗余…

[Image Removed]能力有限没办法读源码,好奇再问问

[Image Removed]抱歉,调试的时候忘改回来了

Allocate History Per Pane 需要勾上​

明白了,感谢​

我仔细看了下MovieRenderQueue_WorldDepth这个材质,感觉用它作为后处理材质,渲染出来的G通道更为合理些,它这个就不存在图片之间的混合了对吧?看起来是直接把距离映射到了以相机近剪裁距离为半径的球面上了

这个后期材质的G算法结果应该就和上面提到的世界位置到相机距离的结果一样;主要看你如何在后期利用这个“深度”;它和引擎内渲染用到的以相机成像平面为基准的深度不同

[Image Removed]

是的,引擎延迟渲染是SceneDepth,它和WorldDepth的G或直接算世界位置到相机距离的结果有差别。我的理解差别大小取决于全景相机横竖被拆分的数量,理论数量越多两者越接近,数量越少差别会越大。能否在你的具体案例中符合需求得具体看后期应用方式,可以尝试下是否有问题

我不是很明白你表达的意思。关于全景相机的缝合效果的直观理解我觉得可以通过修改​Panoramic Rendering里的相机Horz Field Of View来可视化。比如Num Horizontal Steps=8,横向分了8个相机,360度一圈理论上每个相机需要横向需要大于45度的FOV才能衔接的起来。

如果设置Horz Field Of View=45,输出SceneDepth的结果如下:

[Image Removed]Horz Field Of View=60

[Image Removed]Horz Field Of View=90

[Image Removed]你可以看到每个相机之间的接缝是做了融合处理的,否则会有一条生硬的接缝。因为上面提到过,相机平面不同的情况下同一个世界位置的深度是不同的,在接缝处就是同一个世界位置。

看起来确实不是我以为的从最后图像上的方式混合,谢谢,解决了我所有相关问题!