Hello,大家好,今天是一篇Unreal中Texture Streaming預算技術分享,我是木偶心沒。
隨著我們的項目進行過程中,可能會遇到原本精度很高的貼圖,但是在場景中會變得很模糊的情況。現在就一起來了解一下unreal裏麵的texture streaming預算問題。
雖然警告 ' TEXTURE STREAMING POOL OVER '(後跟一個以mebibytes為單位的值)使用了可怕的紅色文本並且全部用大寫字母寫成,但這並不需要恐慌。這是一個非常常見的警告,它隻是告訴你場景中的紋理使用的內存比你為它們分配的內存多,因此引擎開始降低紋理的質量以進行補償。
有兩種有效的方法可以修複“Texture Streaming Pool Over # MiB”這種警告。第一個是通過控製台或項目的配置文件增加紋理池的大小。第二個是優化關卡/材質以保持紋理的大小。
旁注:是的,也有一些無效的方法可以清除此錯誤。如果你隻是不想看到這個警告,在緊要關頭,你可以在控製台中輸入命令DisableAllScreenMessages,並且所有警告消息都不會再顯示。請記住,這實際上並沒有解決任何問題,下次打開編輯器時這些警告將再次出現。
要了解你收到此警告消息的原因,你需要對 Unreal 的texture streaming係統有一個基本的了解——它的作用是什麼,為什麼它如此重要。讓我們做一個快速概覽。
1、什麼是texture streaming
無論你在創建什麼場景,你的關卡都會有texture——如果你製作的東西偏真實,你將產生大量textures。即使你沒有為每個資產都使用 4k 紋理貼圖,這些紋理包含的數據量也會很快增加。任何時候都需要將大量信息保存在內存中。
這就是 Unreal 的texture streaming係統的主要作用。它結合巧妙的技術,根據需要動態加載紋理,以提高遊戲性能。它還使用mipmapping的詳細級別優化方法來動態增加或減少紋理的分辨率。這可確保在任何給定時間加載最少的紋理數據,而不會犧牲視覺保真度。
帶有關聯 mipmap 鏈的紋理;每次迭代都是前一次迭代的一半。texture streaming係統將根據它與相機的距離確定加載哪個 mip 級別。
使用這種技術將使你的紋理在磁盤上多占用 33% 的空間,但這意味著在任何時候加載的數據都更少。還能讓你在遠距離的時候貼圖效果更好,如下
Streaming data(包括 mipmap 信息)是作為build all level過程的一部分預先計算的。它可以通過從 Build 菜單中選擇Build Texture Streaming自行生成。
texture streaming係統主要是使你的紋理在任何距離上看起來盡可能好,並且開銷最小。此外,它具有高度可定製性,可通過豐富的設置滿足你項目的性能規格。
你可以通過你的Project Settings批量禁用紋理流——但我不知道你為什麼想要!
你可以在“rendering”下找到此設置。
2、什麼是texture streaming pool
Texture Streaming Pool是目前所有正在由流媒體係統繪製的紋理的虛擬存儲容器。該值將與你安裝在機器上的物理 RAM 不同(這很幸運,因為你的操作係統和其他重要服務需要其中一些),並且由幾個一起運行的不同內存池組成以確保紋理可以安全地流入和流出。
你可以在編輯器中或在運行時將命令“ stat streaming ” 輸入到你的控製台中,以查看texture streaming係統內存分配的細節。
你可以在 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] 部分。如果它不存在,請創建它。
你會知道它在編輯器重新啟動時起作用,因為輸出日誌中會有一行標記更改,並且你會看到它反映在你的統計流分析器中。
就是這樣。問題解決了。假設你有空閑的內存。如果沒有,總有……
方法二:減少紋理開銷
如果不想增加池的大小以滿足紋理的需求,則需要減少紋理所需的數據量。這是一種方式或另一種方式。
紋理和材質優化是一個很大的話題,我們不會在這裏(也許有一天)深入探討,但這裏有一些快速提示可以幫助你減少紋理開銷。
通過紋理設置中的Maximum Texture Size值降低紋理的分辨率。
美術師以高達預期分辨率的四倍來創作紋理是非常常見的。
在細節麵板中查看紋理貼圖,並嚐試將其分辨率降低一半(如果可以,再降低一半)。你可能會驚訝於如此顯著的性能提升所損失的質量如此之少。
記住要保持這個值的 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公眾號
熱門課程
專業講師指導 快速擺脫技能困惑相關文章
多種教程 總有一個適合自己專業問題谘詢
你擔心的問題,火星幫你解答本篇文章會深入解析火星時代教育的平麵設計班內容。本課程將帶你進入平麵設計的廣闊世界,跨越設計的理論與實踐,挖掘你的設計潛能。
火星網頁實習培訓開啟了走向網絡前端開發的大門。火星時代教育引領學生掌握了最新的前端技術並且了解火星網頁實習培訓的相關內容。
找到最好的vr遊戲開發培訓學校,提升你的VR遊戲開發技能,成為行業內的專業人士。關鍵詞:VR遊戲開發,VR培訓,遊戲開發學校。
探討影視美術建築表現的重要性以及如何通過火星時代教育的專業培訓,有效提升此項技能。
本文主要介紹了培訓學校空間設計的重要性及其技巧,並探討火星時代教育如何運用空間設計給學習帶來更好的體驗。
了解一個頂級的遊戲開發培訓機構如何通過專業的課程和實戰訓練幫助學員成長為高級遊戲開發者。
1. 打開微信掃一掃,掃描左側二維碼
2. 添加老師微信,馬上領取免費課程資源
同學您好!