2
如果我在同一個繪圖調用中有多個重疊的三角形,每個像素的像素着色器是否爲每個像素輸入一次?或者先執行深度測試,並且每個像素只着色一次,而不管原始數量是多少?在DirectX 9中,每個繪圖調用每像素可以運行多於一次的像素着色器?
我正在使用DirectX 9並使用着色器模型4.0級別9_1。
謝謝!
如果我在同一個繪圖調用中有多個重疊的三角形,每個像素的像素着色器是否爲每個像素輸入一次?或者先執行深度測試,並且每個像素只着色一次,而不管原始數量是多少?在DirectX 9中,每個繪圖調用每像素可以運行多於一次的像素着色器?
我正在使用DirectX 9並使用着色器模型4.0級別9_1。
謝謝!
深度測試發生在像素着色器之後。見this question。另外,它清楚地表明像素着色器每像素運行多於一次。考慮alpha混合:不透明像素必須先渲染,然後透明像素與已渲染的不透明像素混合。如果像素着色器每個像素只輸入一次,則不會發生這種情況。
「每個基元一次」不是正確的術語。單個基元最喜歡覆蓋多個像素,因此單個基元會導致像素着色器針對基元覆蓋的每個像素運行。
爲防止像素着色器在被其他對象遮擋的圖元上運行,必須實現某種形式的occlusion culling。或者,一些司機可能會在一定程度上爲你做到這一點。請參閱下面的this link和註釋。
如果像素着色器不修改像素的深度值,大多數驅動程序將進行早期深度測試,以避免遮擋像素(也稱爲「早期Z拒絕」)執行着色器。 – datenwolf 2013-03-18 20:50:33