這是在 iOS 上使用 OpenGL ES 進行渲染的作業。為了獲得更好的影像質量,我們采用了 MSAA,即。多重采樣抗鋸齒,使用 4 倍大的 FBO。
例如,對于 1080P 解析度,單個渲染目標紋理使用1080 * 1920 * 4 * 4 = 33 MB.
有沒有一些方法可以減少這種情況?
uj5u.com熱心網友回復:
這里有一些選項。
減少 MSAA 的樣本數量:例如,您可以僅使用兩個樣本。
使用其他抗鋸齒/多重采樣技術。
- Nvidia 的 DLSS:使用 AI 來放大影像。但僅適用于 Nvidia GPU。
- AMD 的 FSR。開源并可在任何平臺上運行(我已經讀到您可以將其與 MSAA 和其他技術結合使用)。 https://github.com/GPUOpen-Effects/FidelityFX-FSR
我發現了一些不同技術的概述:https ://www.geeksforgeeks.org/types-of-antialiasing-techniques/
uj5u.com熱心網友回復:
使用 OpenGL 渲染時無法避免這種分配。如果您可以選擇使用 Metal,則可以使用無記憶渲染目標,假設您需要做的就是在渲染后立即決議 msaa 緩沖區。
uj5u.com熱心網友回復:
例如,在 1080P 解析度下,單個渲染目標紋理使用 1080 * 1920 * 4 * 4 = 33 MB。
你確定嗎?在桌面 GPU 上,我會說你是對的,但 iOS GPU 是基于平鋪的延遲渲染器。記憶體帶寬使用非常耗電,因此在移動 GPU 上使用不同的方法來節省帶寬。基于圖塊的渲染器將螢屏的片段著色拆分為例如 32x32 的圖塊,這樣它們就不會不斷地讀取和寫入幀緩沖區。
這種架構允許非常有效地實施 MSAA。額外的樣本不需要作為分配的記憶體存在,它們可以暫時存在于平鋪記憶體中,并且影像在仍處于平鋪記憶體中時得到決議,因此只需要將決議后的像素寫入幀緩沖區。MSAA 緩沖區不需要存在。
例如,請參閱 PowerVR 的參考(iOS GPU 最初基于 PowerVR,盡管該技術最近出現了分歧)https://docs.imgtec.com/Profiling_and_Optimisations/PerfRec/topics/c_PerfRec_msaa_performance.html
在 PowerVR 硬體上,多采樣抗鋸齒 (MSAA) 可以在寫入系統記憶體之前直接在片上記憶體中執行,從而節省寶貴的記憶體帶寬
如果在 iOS 上使用 MSAA 會消耗您的記憶體,那么要么是因為驅動程式撰寫不當,要么是因為某些例外使用阻止了驅動程式對其進行優化。也就是說,GLES 在 iOS 上已經棄用了很長時間,所以驅動程式可能不是很好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/339610.html
