
1.什么是纹理流送(Texture Streaming)
当你处理许多纹理时,特别是在建筑可视化项目或汽车类项目中,你可能偶尔会发现纹理有点模糊。它们没有显示所有细节,因为它们的流送(Streaming)不正确。通常你不会遇到这种情况,但如果遇到了,你就需要了解接下来的知识。
简单来说,流送就是获取纹理的所有细节层级(Level of Detail,LOD)或多级渐进纹理(Mipmaps),然后在玩家靠近时显示最高分辨率的渐进纹理,在玩家远离时显示低分辨率版本,但仅限场景摄像机的视锥范围内。我们之前讨论过多级渐进纹理(Mipmaps),它相当于纹理的细节层级。事实上,细节层级或多级渐进纹理和纹理完全一样,只不过细节层级会稍微小一点,占用的资源更少一些。纹理流送能够在摄像机接近或者远离场景对象时,流送这些不同的细节层级。
纹理流送设有一个缓存池:一片专门用于缓存多级渐进纹理的内存区域。随着纹理不断远离摄像机,它们会变得越来越小,在纹理流送池中占用的内存也越来越少,直到不再占用任何内存。然而,当玩家越来越接近对象时,纹理在流送池中的占用空间也越来越大,因为引擎必须显式更大的多级渐进纹理。介绍这点的原因是,在建筑可视化项目或汽车类项目中,如果你使用细节程度非常高的纹理。你可能会遇到警告,提示纹理流送池可用空间不足。这就说明为内存池预先分配的空间太小了,它很容易就会被塞满。向内存中添加的内容已经超出了承受范围。
如果要增加内存池大小,你需要做的是打开UE4控制台。为此,点击反引号(`) 键,打开控制台后输入 r.Streaming.Poolsize,然后是流送池的大小,请以兆字节为单位。你应该将流送池大小设为 100MB 或 5000MB ,具体大小完全取决于你的项目情况和项目需求。

如果你发现所有项目级别都有这个问题,或每次打开项目后,都必须增加纹理池大小。你可以打开 “DefaultEngine.ini” 文件,然后在 [/Script/Engine.RendererSettings] 下方,你可以添加或更改 r.Streaming.PoolSize ,后面是流送池的大小,以兆字节为单位。这能确保 UE4 每次启动后,你都能获得正确的流送池大小。

如果你开始担心:“哦,我的天哪,我得马上去调整大小!”。但是十有八九,你永远不会遇到这条报错,就算遇到了,照我的方法解决就行了。
2.如何强制纹理不流送
强制纹理不流送的目的是确保始终显示最高分辨率的纹理,你不应该将项目中的所有纹理都设置成最高分辨率,这样做会严重影响性能。通常,你应该让那些靠近用户的纹理使用“永不流送”,比如 UI 元素或者是会在用户靠近时显示文本的元素。
那我们该怎么设置呢?你只需要打开纹理编辑器,在 “Level Of Detail” 分段下的高级选项中,勾选 “Never Stream” 属性即可。

如果你启用了 “Never Stream” ,并且同时把 “Compression Settings” 设置为 “UserInterface2D” 后, 纹理只要在游戏中出现,基本上始终会以最高分辨率显示。这会让它的渲染开销变得非常大,不仅是在内存中,而且屏幕绘制开销也会变大,因为它没有压缩,所以会用到大量信息。它永远都不会使用其他渐进纹理,即便它在屏幕中只占 200 或 100 像素或在屏幕上占用 2000 像素,开销是一样的。

你需要记住,将纹理设置为 “Never Stream” 能让你获得最高质量的效果,但会影响性能。因此,你需要在项目中慎重使用 “Never Streaming”。
本文介绍了UE4纹理流送的概念,解释了流送如何根据玩家距离调整纹理的分辨率,并讨论了如何处理纹理流送池内存不足的问题。此外,还详细说明了如何强制纹理不流送以保持最高分辨率,但需要注意这样做可能带来的性能影响。
1512

被折叠的 条评论
为什么被折叠?



