DrawInstanced排序問題,是怎麼決定繪製順序?

時間 2021-06-07 21:53:08

1樓:洛城

在PC平台上,pre-z pass + alpha test是草這類物體繪製的乙個比較好的思路,但一定要注意:第一遍的時候開alpha test,第二遍不開alpha test然後depth test是equal(保證early-z是開啟的,否則你第一遍做的事情可能就沒用了)。

在移動平台上,使用alpha blend是比較好的,因為alpha blend保證了你提交繪製的三角形不會有空洞,而空洞會導致TBDR中某些HSR的方法失效,所以你需要做的是開啟alpha blend,需要類似alpha test的效果時,在shader裡設定blend factor為0。由於mobile gpu有on chip memory,所以半透明反倒是比較快。

在PC端有乙個可能的優化方式是,不使用rectangle sprite作為草的幾何體,而是用相對來說比較複雜的幾何形狀更精確地模擬草的輪廓,然後在必要的時候使用一些alpha test。這樣的好處是大量減少了ps的壓力,代價是少量的vs的壓力,我記得天刀曾經用過這樣的優化方式。但這個方案大概率在移動端是不好用的,因為移動端不是IMR而是TBR/TBDR的架構,對VS的壓力更敏感。

[1],講的是如何用alpha test和隨機取樣的方案,在草啊頭髮啊之類的渲染中,實現類似alpha blend的效果(甚至遠處更好),在PC上是乙個很值得去考慮的方案。

2樓:

一般來說,就是你的vertex buffer裡的順序。

你不考慮instancing,你乙個大的vertex buffer渲染是按照什麼順序?也有你提到的問題對吧?所以具有穿插的mesh,不用特別的方法,alpha本來就是渲染不對的。

3樓:「已登出」

標準沒有規定真正的繪製順序

提交前要自己對圖元排序(但是對圖元排序不能得到畫素正確的混合結果)所以這種實際上不需要混合只需要alpha test的應該用alpha test做

不過因為alpha test是二值過濾

所以會有明顯的鋸齒

改進方法是用msaa+alpha to coverage

4樓:MaxwellGeng

除非是個別低端平台,否則在同乙個drawcall內,所有的pre early Z Test都會同一時段進行,不會產生overdraw。因此不需要特地排序,除了Mesh Instancing,幾乎任何繪製,包括Indirect Draw,在大多數中高階平台都不會產生overdraw。

快速排序 Quick sort 和桶排序 Bucket sort 的區別?

豬鼻蛇 我個人認為,找主元分大小組,然後遞迴的排序兩個組,就是快速排序,並沒有正宗與否的概念,如何實現都是具體細節上的選擇。至於桶排序,這個原理沒有提怎麼分到桶裡面,但實際上演算法描述顯然是對此限定了的,否則也不會有不是比較排序的結論,所以僅從這個原理來推斷是不合理的。 小耿 不不不。兩者是不同的。...

為什麼快速排序比原生排序快?

甄士隱 首先,阮一峰老師的快排序是存在問題的,具體請看我另乙個回答 阮一峰版快速排序完全是錯的 一文是否存在事實錯誤?真正正確且標準的快排序,可參考我自己實現的一版 go 語言實現 Wang Kai algorithm 至於你的排序比原生 sort 快 4倍,可能的原因有兩個 js 中 sort 排...

為什麼不把合併排序稱為快速排序?

愛麗絲欣 很贊同!補充點 事實上不止歸併排序 快速排序,還有堆排序也是達到了線性對數級別的複雜度。比較這幾種線性對數級別的演算法時,乙個是要考慮到複雜度前面的常數因子的區別 二是要考慮在實際的運用中,堆排序用的非常少,很大程度就是因為堆排序排序時,資料位置相隔很遠,而快排等則很多時候是和相鄰的元素進...