當前位置:首頁 >教程首頁 > Unreal Engine >Unreal中Texture Streaming預算技術分享

Unreal中Texture Streaming預算技術分享

發布時間:2021-07-15 09:53:16

Hello,大家好,今天是一篇Unreal中Texture Streaming預算技術分享,我是木偶心沒。

隨著我們的項目進行過程中,可能會遇到原本精度很高的貼圖,但是在場景中會變得很模糊的情況。現在就一起來了解一下unreal裏麵的texture streaming預算問題。

1.webp.jpg

雖然警告 ' TEXTURE STREAMING POOL OVER '(後跟一個以mebibytes為單位的值)使用了可怕的紅色文本並且全部用大寫字母寫成,但這並不需要恐慌。這是一個非常常見的警告,它隻是告訴你場景中的紋理使用的內存比你為它們分配的內存多,因此引擎開始降低紋理的質量以進行補償。

有兩種有效的方法可以修複“Texture Streaming Pool Over # MiB”這種警告。第一個是通過控製台或項目的配置文件增加紋理池的大小。第二個是優化關卡/材質以保持紋理的大小。

旁注:是的,也有一些無效的方法可以清除此錯誤。如果你隻是不想看到這個警告,在緊要關頭,你可以在控製台中輸入命令DisableAllScreenMessages,並且所有警告消息都不會再顯示。請記住,這實際上並沒有解決任何問題,下次打開編輯器時這些警告將再次出現。

要了解你收到此警告消息的原因,你需要對 Unreal 的texture streaming係統有一個基本的了解——它的作用是什麼,為什麼它如此重要。讓我們做一個快速概覽。

1、什麼是texture streaming

無論你在創建什麼場景,你的關卡都會有texture——如果你製作的東西偏真實,你將產生大量textures。即使你沒有為每個資產都使用 4k 紋理貼圖,這些紋理包含的數據量也會很快增加。任何時候都需要將大量信息保存在內存中。

這就是 Unreal 的texture streaming係統的主要作用。它結合巧妙的技術,根據需要動態加載紋理,以提高遊戲性能。它還使用mipmapping的詳細級別優化方法來動態增加或減少紋理的分辨率。這可確保在任何給定時間加載最少的紋理數據,而不會犧牲視覺保真度。

2.webp.jpg

帶有關聯 mipmap 鏈的紋理;每次迭代都是前一次迭代的一半。texture streaming係統將根據它與相機的距離確定加載哪個 mip 級別。

使用這種技術將使你的紋理在磁盤上多占用 33% 的空間,但這意味著在任何時候加載的數據都更少。還能讓你在遠距離的時候貼圖效果更好,如下

3.webp.jpg

Streaming data(包括 mipmap 信息)是作為build all level過程的一部分預先計算的。它可以通過從 Build 菜單中選擇Build Texture Streaming自行生成。

4.webp.jpg

texture streaming係統主要是使你的紋理在任何距離上看起來盡可能好,並且開銷最小。此外,它具有高度可定製性,可通過豐富的設置滿足你項目的性能規格。

你可以通過你的Project Settings批量禁用紋理流——但我不知道你為什麼想要!

5.jpg

你可以在“rendering”下找到此設置。

2、什麼是texture streaming pool

Texture Streaming Pool是目前所有正在由流媒體係統繪製的紋理的虛擬存儲容器。該值將與你安裝在機器上的物理 RAM 不同(這很幸運,因為你的操作係統和其他重要服務需要其中一些),並且由幾個一起運行的不同內存池組成以確保紋理可以安全地流入和流出。

你可以在編輯器中或在運行時將命令“ stat streaming ” 輸入到你的控製台中,以查看texture streaming係統內存分配的細節。

6.webp.jpg

你可以在 Memory Counters 部分的最右側列中看到每個池的最大容量。默認情況下,texture streaming pool的大小設置為1000 MB。

3、解決辦法

方法一:增加texture streaming pool內存分配

這是快速簡便的解決方案。隻需增加texture streaming pool的大小以包含紋理數據即可。當然,這僅在你的硬件(和你的目標配置)有可用內存時才可取。

查看文檔最後,可以找出滿足紋理要求的texture streaming pool需要多大。你可以使用以下控製台命令在編輯器中更改texture streamingpool的大小,其中#是以兆字節為單位設置的值。

r.Streaming.PoolSize #

你可以使用stat streaming命令檢查你的更改是否被接受。

請記住,就像通過控製台輸入的許多配置命令一樣,以這種方式更改池的大小隻是暫時的。每當你重新打開編輯器時,它都會重置為默認值 1000。如果你希望此更改持續存在,你需要導航到項目的DefaultEngine.ini配置文件並將r.Streaming.PoolSize=#添加到 [/Script/Engine.RendererSettings] 部分。如果它不存在,請創建它。

你會知道它在編輯器重新啟動時起作用,因為輸出日誌中會有一行標記更改,並且你會看到它反映在你的統計流分析器中。

7.webp.jpg

就是這樣。問題解決了。假設你有空閑的內存。如果沒有,總有……

方法二:減少紋理開銷

如果不想增加池的大小以滿足紋理的需求,則需要減少紋理所需的數據量。這是一種方式或另一種方式。

紋理和材質優化是一個很大的話題,我們不會在這裏(也許有一天)深入探討,但這裏有一些快速提示可以幫助你減少紋理開銷。

通過紋理設置中的Maximum Texture Size值降低紋理的分辨率。

美術師以高達預期分辨率的四倍來創作紋理是非常常見的。

在細節麵板中查看紋理貼圖,並嚐試將其分辨率降低一半(如果可以,再降低一半)。你可能會驚訝於如此顯著的性能提升所損失的質量如此之少。

8.webp.jpg

記住要保持這個值的 2 次方。為0的時候表示大小沒有上限,Unreal 將匹配源文件的分辨率。

檢查壓縮設置

你需要根據具體情況做出決定,因為你的紋理壓縮設置在很大程度上取決於每個特定紋理的使用方式。詳細了解每個壓縮設置的作用超出了本文的範圍——但你可以查看官方文檔。

減少或重複使用紋理通道。請記住,你將使用的大多數紋理都具有 3 個通道(4 個帶有 Alpha),並且你可能不會使用所有這些通道來獲得完整效果。盡可能使用紋理打包將多個蒙版合並為一個。

如果使用靜態光照,那麼你的光照貼圖可能會占用大量可用的紋理內存。即使是中等大小的關卡,也可以將數百個光照貼圖對象打包到幾個地圖集中。在可能的情況下,將光照貼圖分辨率保持在適當的最小值以減少這種影響。

4、解texture streaming pool需要多大

這裏有一個快速方法,用於計算你的texture streaming池包含關卡紋理數據所需的最小大小(以 MB 為單位)。

如果你將r.Streaming.PoolSize 1輸入到你的控製台中,你會將texture streaming pool設置為 1 MB,並且你的所有紋理將立即消失——但這沒關係。這隻是暫時的。

你現在會注意到,當你在地圖上移動時,texture streaming pool超出預算警告消息將更新,以告訴你預算超出了多少。拉近你的地圖並選擇最大的數字 - 該值 (+1) 是你的最小池大小。

- End -

來源:Thepoly公眾號

华体会hth体育网 賞析
  • 2101期學員李思庭作品

    2101期學員李思庭作品

  • 2104期學員林雪茹作品

    2104期學員林雪茹作品

  • 2107期學員趙淩作品

    2107期學員趙淩作品

  • 2107期學員趙燃作品

    2107期學員趙燃作品

  • 2106期學員徐正浩作品

    2106期學員徐正浩作品

  • 2106期學員弓莉作品

    2106期學員弓莉作品

  • 2105期學員白羽新作品

    2105期學員白羽新作品

  • 2107期學員王佳蕊作品

    2107期學員王佳蕊作品

專業問題谘詢

你擔心的問題,火星幫你解答

微信掃碼入群領福利

掃碼領福利最新AI資訊

點擊谘詢
添加老師微信,馬上領取免費課程資源

1. 打開微信掃一掃,掃描左側二維碼

2. 添加老師微信,馬上領取免費課程資源

×

同學您好!

您已成功報名0元試學活動,老師會在第一時間與您取得聯係,請保持電話暢通!
確定