1樓:PZZZB
按我的理解,對圖元進行剔除的操作CPU遠遠沒有GPU快。所以CPU做的是模型層面的剔除,GPU做的是圖元層面的剔除,這樣效率是最高的。
2樓:小旭
感覺應該是取捨問題
如果你的問題在於面數不多的模型,感覺沒必要這麼做,執行時拆分反而會加重cpu的開銷
如果你的問題在於面數比較多的模型,確實應該使用static batch的方法將mesh切成submesh,基於submesh進行剔除,減少繪製頂點
3樓:leinlin
貌似只是把頂點丟給gpu了,gpu有螢幕外頂點移除…並不會光柵化。emmm ,不行還可以把模型切割開來的drawcall 也會高一些……
4樓:Milo Yip
傳統的引擎會做 object-level 的剔除,一些較新的引擎會做 cluster-level 的。引用一下 RTR4 §19.8 [1]:
這類「現代方法」通常會採用 GPU compute shader 進行剔除,把結果直接用於渲染,避免了以往需要為每個 cluster 呼叫 draw-call 的問題。
我沒去了解 Unity 較新的版本有沒有做這種加速。
[1] Akenine-Moller, Tomas, Eric Haines, and Naty Hoffman.Real-time rendering. AK Peters/CRC Press, 2018.
5樓:某人
好久沒搞Unity了,我怎麼記得在渲染階段是有剔除的來著?說是整個模型渲染,其實只是讀取了整個模型,但渲染的時候其實是有剔除的。
判斷的標準是:CPU檢測乙個模型是不是需要被渲染,GPU檢測被渲染的模型應該渲染哪幾個面。這樣一來,都能夠充分利用各自的優點。
6樓:Binarizer
這也是個好基礎的問題啊。首先問題有點不對,只看到乙個頂點,也必須要跟它相連線的幾個頂點配合,才能把看到的幾個面渲出來嘛。
然後,問題要是換成為何不只渲看到的幾個面,那怎麼去判定哪些面需要渲染?這就涉及到效率問題了,你當然也可以拿CPU對每個模型去遍歷面做剔除,問題是這麼高並行的事,為啥不直接扔給GPU做呢?實際上gpu在光柵化階段是有專門做麵剔除的運算器的,而CPU應該做的是大粒度的剔除,每個模型級別的。
而且VS這一步一般都算力過剩,並非瓶頸,GPU裡很多有和PS的並行機制,省幾個頂點無價效比,甚至現在還會做曲面細分來進一步增加面數。
進一步說,為啥引擎沒做自動拆分模型呢,把大塊模型再細分?首先每幀都要重新拆的話,需要每幀都去更新頂點快取(確切說是index buffer),雖然也不算費吧但是挺煩的,所以一般是在預處理階段就拆好的。然而要想自動拆分就屬於數學範疇啦,模型這種東西,合併起來簡單,拆起來麻煩啊。
總歸我是不懂的,大部分引擎也是懶得做的,都是靠美術自己去手動把握。這也是為啥TA很吃香的原因了,每個場景位置模型該拆多大,都是有規範的,讓傳到GPU的頂點數盡量小。
另外,我記得由於頂點數影響沒drawcall厲害,unity甚至有反著來優化的,把場景所有同材質靜態模型,盡量合到一起,只為降低drawcall,反而不管頂點數多少了(靜態合批,非hwInstancing)。
為什麼this war of mine不把背景設定為軍力碾壓的戰勝國?這遊戲的本質是不是反戰敗?
孫克儉 說實話,你的思想很危險!二戰前期日本國民的思想就是通過戰爭把國內的矛盾轉移到國外,提公升本國生活質量 然後戰敗了就各種反思戰爭後期的國民生活如何差,那是真的反戰麼? Chris Tinman 神經病問題,波赫戰爭是內戰,內戰哪他媽的有勝利,打死的每乙個人,打壞的每一件東西都是淨損失。在校生不...
你為什麼不用unity引擎?
邱昊宇 安裝時拖家帶口乙個 Visual Studio MonoDevelop 雖然可以關掉單獨裝,但本質還是裝了 不喜歡大括號獨佔一行 不喜歡切出去編輯指令碼 Net 導致了 VB 的毀滅,厭惡度 10086國內大有把 C Unity 遊戲劃等號的趨勢,我非常討厭這種趨勢看到 Godot 之後反正...
渲染管線裡為什麼geometry stage在tessellation stage的後面而不是前面?
xiaocai 已經有應用角度的答案,我從pipeline的角度談一下 1.放在前面沒啥好處 Tessellation stage吃進的Primitive Type是Patch 1 32個Control Point 如果把GS置其前,GS所起的作用就是對Patch做一些處理 比如Transform,...