日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图形学进阶——移动端TB(D)R架构基础

發布時間:2023/12/14 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图形学进阶——移动端TB(D)R架构基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

移動端TB(D)R架構基礎

百人計劃學習鏈接:【技術美術百人計劃】圖形 3.7 移動端TB(D)R架構基礎

一、當前移動端的設備概況

1. 移動端CPU占比

2. 移動端GPU占比

3. 各類電子設備功耗對比

4. 帶寬比較

二、專有名詞解釋

1. SOC(System on Chip)

System on Chip(Soc)Soc是把CPU、GPU、內存、通信基帶、GPS模塊等等整合在一起的芯片稱呼。
常見有A系Soc(蘋果),驍龍Soc(高通),麒麟Soc(華為),聯發科Soc,獵戶座Soc(三星),去年蘋果推出的M系Soc,暫用于Mac,但這說明手機、筆記本和PC的通用芯片已經出現了

2. 物理內存(System Memory)

Soc中GPU和CPU共用一塊片內LPDDR物理內存,就是我們常說的手機內存,也叫System Memory,大概幾個G。

此外CPU和GPU還分別有自己的高速SRAM的Cache緩存,也叫On-chip Memory,一般幾百K~幾M。

不同距離的內存訪問存在不同的時間消耗,距離越近消耗越低,讀取System Memory的時間消耗大概是On-chip Memory的幾倍到幾十倍。

PS:手機上GPU和CPU是共享一個內存地址空間(PC上一般分為內存和顯存)

3 .On-Chip Buffer

在TB(D)R架構下會存儲Tile的顏色、深度和模板緩沖,讀寫修改都非???。

如果Load/Store指令中緩沖需要被Preserve,將會被寫入一份到System Memory中。

4 .Stall

當一個GPU核心的兩次計算結果之間有依賴關系而必須串行時,等待的過程便是Stall。

5.FillRate 像素填充率

像素填充率 = ROP運行的時鐘頻率 x ROP的個數 x 每個時鐘ROP可以處理的像素個數

三、關于TBDR

什么是TBDR?

TBR(Tile-Based (Deferred) Rendering)是目前主流的移動GPU渲染架構,對應一般PC上的GPU渲染架構則是IMR(Immediate Mode Rendering )。

通俗的講就是:屏幕被分成很多塊進行渲染

TBR和TBDR的區別

  • TBR :頂點著色器——》Defer———》光柵化——》像素著色器
  • TBDR :頂點著色器——》Defer———》光柵化——》Defer——》像素著色器

    什么是Defer?
    從字面上理解就是延遲(處理);從渲染數據的角度上看,Defer是批處理一幀中的多個數據(后面詳細有講)

四、關于IMR


沒有Defer的操作:用戶數據——》頂點著色器———》光柵化——》片段著色器

渲染管線如下:直接和系統內存進行交互

五、TB(D)R詳細的渲染流程

1. TB(D)R宏觀上總共分2個階段


簡單的說:

  • 第一步:將分圖元到對于的塊上,確定Tile上的圖元有哪些
  • 第二步:在片元著色器計算后先將結果寫到塊內存(Tile Buffer)中,最后在寫到系統內存(System Memory)上

    TBDR詳細示意圖:
  • TBDR中有一個Tiling的過程:將幾何著色器計算出的頂點數據刷到系統內存(System Memory)上
  • 最終經過片元著色器計算的結果,將會被刷到片內存(Tile Buffer)上面,在最后的操作才是把片內存寫入Frame Buffer中

2. TBR與IMR的一些對比


a圖為TBR,B圖為IMR

3 .TBR的優缺點

TBR的核心目的是降低帶寬,減少功耗,但渲染幀率上并不比IMR快

優點:

  • TBR給消除Overdraw提供了機會,PowerVR用了HSR技術,Mali用了Forward Pixel Killing技術,目標一樣,就是要最大限度減少被遮擋pixel的texturing和shading。
  • TBR主要是緩存友好, 在緩存里頭的速度要比全局內存的速度快的多,以及有可能降低幀率為代價,來降低帶寬,省電

缺點:

  • 分配圖元過程(bining 過程):這個過程在vertex階段之后,將輸出的幾何數據寫入到系統內存,然后才被fragment shader讀取。幾何數據過多的管線,容易在此處有性能瓶頸
  • 如果某些三角形疊加在數個tile(塊)上,則需要繪制數次。意味著總渲染時間將高于即時渲染模式

4 .TBDR中的D——Defer是什么

Bining過程(類似四叉樹)/第一個Defer

將需要處理的圖元分配到對應的塊中,來進行處理

不同GPU的Eearly-DT/第二個Defer

Android的處理

FPK技術:

IOS的HSR技術:

六、TB(D)R的優化建議

1. 記得不使用Framebuffer的時候clear或者discard

主要是清空積存在tile buff上的中間數據,所以在unity里面對render texture的使用也特別說明了一下,當不再使用這個rt之前,調用一次Discard。在OpenGL ES上善用glClear,gllnvalidateFrameBuffer避免不必要的Resolve(就是tile buff刷新到system memeory)行為

2. 要在一幀里面頻繁的切換framebuffer的綁定

本質上就是減少tile buffer 和system memory之間的 的stall(同步) 操作

3. 對于移動平臺,建議你使用 Alpha 混合,而非 Alpha 測試

在實際使用中,你應該分析并比較 Alpha 測試和 Alpha 混合的表現,因為這取決于具體內容,因此需要測量,通常在移動平臺上應避免使用 Alpha 混合來實現透明。需要進行 Alpha 混合時,嘗試縮小混合區域的覆蓋范圍

4. 其余優化

  • 手機上必須要做Alpha Test,先做一遍Depth prepass
  • 圖片盡量壓縮 例如:ASTC ETC2
  • 圖片盡量走 mipmap
  • 盡量使用從Vertex Shader傳來的Varying變量UV值采樣貼圖(連續的),不要在FragmentShader里動態計算貼圖的UV值(非連續的)
  • 在延遲渲染盡量利用Tile Buffer 存儲數據
  • 如果你在Unity 里面調整 ProjectSetting/Quality/Rendering/Texture Quality 不同的設置,或者不同的分辨率下,幀率有很多的變化,那么十有八九是帶寬出問題啦
  • MSAA其實在TBDR上反而是非常快速的。
  • 少在片元著色器中使用 discard 函數,調用gl_FragDepth從而打斷Early-DT( HLSL中為Clip,GLSL中為discard )
  • 盡可能的在Shader里使用浮點數,有目的的區分Half Float,好處:(1)帶寬用量減少(2)GPU中使用的周期數減少,因為著色器編譯器可以優化你的代碼以提高并行化程度。(3)要求的統一變量寄存器數量減少,這反過來又降低了寄存器數量溢出風險。
  • 在移動端的TBDR架構中,頂點處理部分,容易成為瓶頸,避免使用曲面細分shader,置換貼圖等負操作,提倡使用模型LOD,本質上減少FrameData的壓力,Unity中盡早在應用階段借助umbra(unity自帶的剔除功能)遮擋剔除

總結

以上是生活随笔為你收集整理的图形学进阶——移动端TB(D)R架构基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。