被SceneCaptureComponent捕获的模型贴图模糊

SceneCapture捕获似乎不会影响Texture Streaming,导致SceneCapture远离玩家主相机时被捕获的模型贴图非常模糊。这个设计如此吗,有什么规避办法?

飞书20260413-153917.mp4(5.08 MB)

重现步骤

  1. 创建一个新关卡,使用SceneCapture2D捕获一个模型到RT
  2. 将SceneCapture2D和和被捕获的模型同时远离当前主相机
  3. 观察RT中模型使用的贴图(带mip且开启Texture Streaming) 是否变模糊

Hi,

是的,看了一下Scene Capture不会影响StreamingManager的Viewpoint,目前只能手动通过代码(可以封装成蓝图函数)IStreamingManager::Get().AddViewLocation来添加ViewPoint。

能发个重现项目吗?我本地无法重现。

理论上被捕对象上的贴图在SceneCaputure中的Streaming行为取决于SceneCapture和它之间的距离,和主相机没关系。这个例子中由于SceneCapture和对象相对距离没变化,主相机上看到的始终清晰才对,我本地的重现表现也是如此。

mip.mp4(4.15 MB)

模糊的根因还是对应贴图的 mip 没有加载到。目前怀疑 SceneCapture不会主动触发 streaming 请求,所以当 SceneCapture 离主相机比较远、而主相机又没有覆盖到那一片区域时,就可能出现资源没被流送进来的情况。因为在池子够用时不被使用的Mip也在池子中保留一段时间, r.streaming.DropMips 这里是用来模拟这个问题,如果视频中左边的SceneCapture离主相机很近即使r.streaming.DropMips也是没有问题的

目前在我们游戏中实际的例子就是在一个比较远的位置放了一个子关卡然后SceneCapture做一些展示,因此遇到了这个问题

看了下的确​默认SceneCaputure没有做streaming的viewport判断,需要手动加TextureStreamingLoc;不过这样做也可以理解,主要内存考量,尤其如果地图里有很多个时默认开启而失控。如果对于特定对象通过开启Force Mip Streaming;对于你这边描述的应用如果必须要实时多view的绘制,需要手动加streaming location;另外提下如果贴图是VT,测试下来是没有问题的。

另外我好奇问下,展示必须是全场景实时吗?这开销非常大啊。​

感谢大佬们,目前我们项目通过封装蓝图函数IStreamingManager::Get().AddViewLocation来解决这个问题了,非常感谢!

需要确保这个贴图清晰的mip没有被加载进来,最好是将相关的材质/贴图编辑面板给关掉,尝试r.streaming.DropMips 15, 然后尝试将左边的对象移动得更远一些,也可以尝试Standardalone启动,这样应该可以复现,如果还是不行我去准备一个复现项目

编辑器关闭贴图编辑窗口或者Standalone启动都无法重现问题。r.streaming.DropMips可以重现。所以需求是一开始就离主相机很远的SceneCapture能够捕获清晰的贴图对吧

是的,目前来看确实需要加TextureStreamingLoc,目前我们项目封了一个蓝图函数,只给需要的SceneCapture​开Streaming。目前我们SceneCapture主要还是玩家角色和距离主关卡较远小场景,性能上还是可以接受