UE4 texture streaming poor over 预算上的纹理流送池 红字 解决方法总结。

时间:2024-04-11 19:18:30

网上很多人贴出解决方法,但是都比较分散都或多或少只说了一小部分,我这里总结一下。

纹理流送:
纹理流送系统或流送器是引擎的一部分,负责增大和减小每个纹理的分辨率。该系统使您可以拥有良好的视觉质量, 同时有效地管理可用内存。这在一定程度上是通过Mip或Mipmap实现的,Mip或Mipmap是为您的纹理分辨率预先计算的图像序列。您可以将它们视为纹理的LOD。 有关Mip的更多信息,您可以在我们的纹理支持和设置页面上加以了解。
池:
引擎中纹理可用的池大小(MB)。这个池包含UI纹理、NeverStream纹理、立方体贴图和流送纹理。在某些平台上,这个池还可以保存非纹理资源,例如GPU粒子缓冲区和顶点缓冲区。设置为0时,池的大小将不受限制。

总结:增大池、或者取消限制、或者发布时优化自己工程并还原默认大小(我也是新手不清楚设置池过大过小带来的影响)。

解决方法 一

增大池可通过官方介绍的控制台命令、配置文件。
控制台命令 r.Streaming.PoolSize =
可更改池的大小,填入合适的大小即可(等号后面可别忘了填数字啊!单位是MB,其他博主是给加的2000,但UE4.24中默认是3000)。

配置文件则可到 \Engine\Config\ConsoleVariables.ini 中添加 r.Streaming.PoolSize= 之后重启即可

我还是贴出官方提供的全部控制台命令吧。

命令 说明
r.Streaming.PoolSize 引擎中纹理可用的池大小(MB)。这个池包含UI纹理、NeverStream纹理、立方体贴图和流送纹理。在某些平台上,这个池还可以保存非纹理资源,例如GPU粒子缓冲区和顶点缓冲区。设置为0时,池的大小将不受限制。
r.TextureStreaming 此命令用于启用或禁用纹理流送器。当纹理流送器被禁用后,所有纹理mip都将被完全加载到内存中,即使在纹理从来没有被用于渲染的情况下也是如此。如果需要,您可以在运行时切换此选项。
r.Streaming.UseFixedPoolSize 当使用非零值时,可以在运行时更改纹理池大小。
r.Streaming.FramesForFullUpdate 纹理流送器的每次完整更新之间的帧数。每次更新都会重新计算每个纹理所需的分辨率,并生成mip加载或卸载请求。较高的值会降低纹理流送器CPU使用率,而较低的值会提高其反应能力。
r.Streaming.UseNewMetrics 仅用于兼容性。当设置为假时,纹理流送器将按照4.12版本继续进行处理。
r.Streaming.MaxTempMemoryAllowed 允许用于更新纹理的临时内存量(MB)。此内存量既应大到足以避免无法满足纹理流送,同时又应小到足以防止浪费(未使用的)内存。
r.Streaming.HLODStrategy 此命令控制层级LOD纹理的加载策略:0 : 允许流送所有mip 1 : 仅流送最后一个mip。始终加载其他mip。 2 : 不流送任何mip。始终加载所有mip。
r.Streaming.HiddenPrimitiveScale 当参考纹理的组件不可见(即其边界框被遮挡)时,此命令控制应用于“所需”分辨率的比例。这只会在它被最大可用分辨率限制之前影响分辨率,以避免已受限的纹理降级。换句话说,它只影响对视口具有适当分辨率的纹理。
r.Streaming.MaxEffectiveScreenSize 当非零时,此命令将限制流送器在计算“所需”纹理分辨率时所考虑的屏幕大小。这将防止高分辨率需要更大的流送池。
r.Streaming.Boost 它是影响“所需”纹理分辨率的全局提升。
r.Streaming.MipBias 它是一个全局mip偏差,用于防止流送器为每个纹理加载最大的mip。它用于容纳一个低流送池。这也会影响流送器尝试为任何视口加载哪些mip,正如使用小型的“r.Streaming.Boost”或限制性的“r.Streaming.MaxEffectiveScreenSize”时一样。这种偏差的应用方式有几种例外情况: 地形纹理:偏差无影响。 层级LOD纹理:偏差不限制最大分辨率。 光照图和阴影贴图:偏差仅限制最大分辨率。
r.Streaming.UsePerTextureBias 此命令通过限制全局mip偏差对最大允许mip而不是任何视口中的“所需”mip的影响,从而限制全局mip偏差的影响。然后,它会仅将其应用于纹理,以适应流送池。根据预算计算,每个纹理都有自己的mip偏差,范围从0到“MipBias”不等。
r.Streaming.DropMips 这是一个调试选项,用于防止将mip保留在内存中(即便流送池允许如此):0 : 不丢掉任何mip。 1 : 丢掉缓存的mip。 2 : 丢掉缓存和隐藏的mip。 这样做的目的是获取所需mip计算的精度,因为显示的分辨率可能会受到先前加载请求或隐藏原语的影响。
r.Streaming.FullyLoadUsedTextures 此命令将把所有使用的纹理流送至它们的最大可用分辨率,并将这些纹理保留在内存中(只要应用程序已打开)。这应当用作完全禁用纹理流送(这种方法将加载从未使用过的纹理,并因此需要更多的内存使用)的替代方法。
r.Streaming.UseAllMips 是否移除来自纹理组设置和动画设置的所有分辨率限制。此命令应仅在展示艺术或制作宣传材料时使用。
r.Streaming.AnalysisIndex 此命令在材质纹理坐标比例精度查看模式中使用,用于调查单独纹理的精度。
r.Streaming.CheckBuildStatus 如果启用,引擎将检查是否需要重建纹理流送,在模拟时或在编辑器中运行(Play in Editor)(PIE)模式下时显示警告。
r.Streaming.DefragDynamicBounds 如果启用,未使用的动态边界将从更新循环中删除。
r.Streaming.LimitPoolSizeToVRAM 如果启用,纹理池大小将被限制为可用的GPU内存。
r.Streaming.MinMipForSplitRequest 如果非0,当非可见mip也必须加载时,此命令允许纹理流送器首先从纹理加载可见mip。此命令通过使可见mip优先于强制加载的mip或可能会变成可见的隐藏mip来改进视觉质量。
r.Streaming.NumStaticComponentsProcessedPerFrame 如果非0,此命令将设置在关卡可见之前引擎在每帧中将递增加载的组件数量。这适用于移动性设置为静态的组件。默认值设置为50。
r.Streaming.ScaleTexturesByGlobalMyBias 流送纹理的“所需”分辨率是否根据全局mip偏差按比例缩小。
r.Streaming.UseMaterialData 材质纹理是否缩放和坐标是否用于纹理流送。

解决方法 二

项目设置中搜索texture streaming即可找到。
UE4 texture streaming poor over 预算上的纹理流送池 红字 解决方法总结。