省頻寬、耗電小,騰訊遊戲學院專家解析手遊渲染架構
什麼是TBR?
全稱是Tile Based Rendering,主要用在移動裝置(手機、平板)上的一種渲染架構,渲染時將螢幕分割成小塊,分別渲染。每塊大小為16×16 或32×32等(不同產品各不相同),特點是省頻寬,耗電小。
與之對應的是IMR(Immediate Mode Rendering),提交的每個渲染要求都會立即開始,這是一種簡單而又粗暴的思路,優點缺點都非常明顯,如果不用為效能擔憂,這種方式會很省事。
片上快取(On-Chip Buffer)
TBR裝置在GPU內部整合有很小的片上快取(On-Chip Buffer),片上快取,在渲染時會先將一個Tile內的影象先渲染到片上快取,然後在拷貝到主視訊記憶體中。而IMR渲染則是直接由GPU操作視訊記憶體。片上快取相比於視訊記憶體中的Frame Buffer具有更快的訪問速度,但是隻有很小的儲存空間(16×16畫素或32×32畫素)。
與IMR相比,TBR在GPU上多出一塊片上快取。
IMR與TBR在渲染流程上的對比(紅色陰影表示頻寬消耗熱點)
由上圖可以看出,IMR和TBR在頻寬消耗上有比較大的差異,左側的IMR渲染時,Depth Test和Alpha Test等由於需要頻繁訪問視訊記憶體,導致有很大的頻寬消耗。而右側的TBR渲染方式由於Depth Test和Alpha Test都只需要跟片上快取互動即可,避免了和視訊記憶體之間的頻寬消耗。
Tiling(分塊)
為了能夠按照逐個Tile渲染,在一幀的繪圖指令全部提交完成並經過頂點運算後後,會在記錄下每個Tile中對應的Triangle List。並儲存在FrameBuffer中,等待光柵化時從FrameBuffer讀取相應的Tile的TriangleList進行處理。
Resove和Restore
由於GPU的片上快取的儲存空間非常有限,因此渲染完成一個Tile之後,需要將結果複製到FrameBuffer中,這個過程稱作Resove。
如果一幀內需要多遍渲染時,在對Tile進行渲染的時候往往需要從FrameBuffer中將對應Tile中舊的資料讀取到片上快取,這個過程稱為Restore。
Resove和Restore會導致大量的頻寬消耗,需要儘量避免。
如果在渲染過程中需要頻繁的切換FrameBuffer,要注意呼叫順序,避免浪費頻寬。
會導致Resove+Restore的OpenGL ES呼叫。
- eglSwapBuffers
- glBindFramebuffer
- glTexImage2D,glTexSubImage2D,
- glBufferData,glBufferSubData
- glCopyTexImage2D ,glCopyTexSubImage2
- glReadPixels()
- (參考:Adreno_Developer_Guide.pdf第38頁)
例項:為什麼在Unity中使用Grap Pass實現螢幕扭曲非常慢?
由於Unity中的Grap Pass是插在渲染過程中的,每渲染一次,會呼叫一次glBufferSubData,會導致Resorve和Restore。
可能做的優化:
等場景全部渲染完之後再在最上層疊加一個扭曲效果。
跟其他後處理合並處理。
例項:關於後處理
每個後處理會導至少增加一次Resorve。
可能的優化:
將多種後處理效果放在一個shader中可以減少Resove發生次數。
某些效果低解析度可以減少頻寬。
例項:實時陰影
Shadow map方式實現的實時陰影,需要首先將攝像機放在光源處,將場景深度渲染到一張紋理上,因此除了draw call的增加外,頻寬的增加也很多。
- 可能的優化:
- 使用更小的RT。
- 如果能接受的話,可以嘗試鎮魔曲中影子的做法,即將主角壓扁,用黑色紋理渲出來。
減少頻寬消耗的建議
1、減少頂點數和圖片尺寸。
2、圖片壓縮(ETC,ATC,PVRTC等)。
3、除介面外,幾乎所有貼圖都建議生成Mipmap(減小頻寬消耗,增加快取命中)。
4、儘量減少Resove和Restore,儘量減小RenderTexture的尺寸。
- 全屏後處理
- 實時陰影(shadow map)
- 扭曲
- 實時反射
- 5、優化Shader。
- 使用低精度浮點數
TBR特有的兩個OpenGL ES擴充套件
1、Framebuffer Fetch
允許Shader中直接訪問片上快取中當前的顏色和深度。
可以用來實現高效的Color Grading、高度霧之類。
2、Pixel Local Storage
允許在片上快取中儲存和讀取自定義的資料格式,大小為每畫素128位元組或256位元組。
可以用來實現高效的延遲光照渲染(在片上快取中儲存G-Buffer)。
關於騰訊遊戲學院專家團
如果你的遊戲也富有想法充滿創意,如果你的團隊現在也遇到了一些開發瓶頸,那麼歡迎你來聯絡我們。騰訊遊戲學院聚集了騰訊及行業內策劃、美術、程式等領域的遊戲專家,我們將為全世界的創意遊戲團隊提供專業的技術指導和遊戲調優建議,解決團隊在開發過程中遇到的一系列問題。
申請專家資源請前往:
https://gwb.tencent.com/cn/tutor
作者:Hailong
來源:騰訊GWB遊戲無界
原地址:https://mp.weixin.qq.com/s/AaFyeIb9ZCPyZzcKEhh1rw
相關文章
- 騰訊遊戲學院專家:PBR渲染模型的理論及具體應用遊戲模型
- 頻寬利用率提升50%,騰訊雲聯網架構方案解析架構
- 騰訊遊戲學院專家帶你快速瞭解PBR遊戲
- 騰訊遊戲學院專家:手遊開發,該如何做好Android記憶體優化?遊戲Android記憶體優化
- 【省頻寬、壓成本專題】從產品架構來看,PCDN如何節流50%架構
- 騰訊遊戲學院專家:如何避免出海遊戲伺服器水土不服?遊戲伺服器
- 騰訊遊戲學院專家:UE高階效能剖析技術之RHI遊戲
- Crash率10%降至1%,騰訊遊戲學院專家是這樣打磨遊戲的遊戲
- 斷線卡頓怎麼辦?騰訊遊戲學院專家談網路遊戲同步技術遊戲
- 騰訊遊戲學院專家:做一個多執行緒遊戲框架可以多簡單?遊戲執行緒框架
- 騰訊遊戲學院專家例項剖析:如何優化休閒遊戲的美術風格?遊戲優化
- 小程式渲染架構設計架構
- 如何應對CPU幀率瓶頸和卡頓?騰訊遊戲學院專家帶你剖析遊戲
- 騰訊遊戲學院專家:如何延長玩家遊戲時間,並調動玩家二次創作?遊戲
- 騰訊遊戲學院專家眼中,是如何看待遊戲設計時常遇見的三個問題遊戲設計
- 騰訊資深運維專家周小軍:QQ與微信架構的驚天祕密運維架構
- 騰訊遊戲學院專家教你七步做數值遊戲
- 騰訊資料庫專家雷海林分享智慧運維架構資料庫運維架構
- 安卓手機耗電、卡頓嚴重的解決方法 安卓手機省電小妙招安卓
- 分析師稱有線電視將耗盡頻寬導致網路崩潰
- iOS12省電攻略大全,iOS12耗電情況 iOS12耗電嗎?iOS
- 蘋果技術專家:清後臺反而會增加 iPhone 耗電蘋果iPhone
- 【恩墨學院】資料架構:中國電信的Oracle Sharding架構應用案例分析架構Oracle
- 七牛雲WordPress外掛-節省頻寬,加速網站網站
- 頻寬
- Linux系統接入小區寬頻Linux
- 騰訊遊戲學院圓桌:《妄想山海》的打磨之路遊戲
- 打造獨立遊戲孵化新模式,騰訊遊戲學院助力遊戲多元發展遊戲模式
- 騰訊是如何大幅降低頻寬和網路流量的
- 圖鴨科技提出影象壓縮技術TNG:節省55%頻寬
- 圖鴨科技提出影像壓縮技術TNG:節省55%頻寬
- Wi-Fi 6:千兆頻寬接入趨勢解析
- 自動駕駛等級家喻戶曉,小微企業寬頻等級你知道嗎?自動駕駛
- 阿里架構師耗時一個月整理的《java架構師學習路線》太全了阿里架構Java
- 咕泡學院JAVA架構師VIP課程Java架構
- 頻寬是什麼意思 頻寬和寬頻網速有什麼區別關係
- 如何節省 1TB 圖片頻寬?解密極致影象壓縮解密
- 中國電信天翼寬頻wifi使用方法WiFi