2011-07-22 31 views
5

我是新來的着色器和HLSL,已經做了足夠的BasicEffect類。我理解管道是如何工作的,特別是對於只有1遍的着色器。但是,對於2通道或N通道着色器,我不太瞭解2(或N)着色器輸出的結果如何組合。多通道着色器如何在HLSL中工作?

你能解釋一下這個組合是如何做的嗎?如果可能的話,您更喜歡使用多通道着色器而不是多個單通道着色器的示例?

回答

5

多遍着色器只需將結果添加到上一遍(es)。它們可以用來支持多個燈光,特別是當GPU的着色器模型沒有足夠的指令來支持一次通過所需數量的燈光時。

除非你真的需要,否則我不會推薦使用多個pass,因爲它確實會使諸如alpha混合和霧等事情複雜化。您需要在第一次傳球后以不同的順序設置混合狀態。

[編輯] AS每梅爾基奧爾Blausand的評論,更正確的說,根據當前blend operationblend modes,其中電流值是組合所有先前的結果,輸出各道次與當前值相結合經過。多通道着色器使用ADD混合模式組合多個光源是很常見的。另請注意,Alpha通道可以與different blend modes組合到顏色通道。

+1

終於!現在正在尋找幾個小時的確切聲明。十分感謝! –

+0

不客氣。可惜OP沒有回來標記它作爲答案;) – Aranda

+1

由於ADD是一種混合模式,我現在認爲這個答案誤導。 我寧願說每一遍都可以指定混合模式。 詳細說明了[枚舉D3DBLEND]的兩個成員(http://msdn.microsoft.com/en-us/library/windows/desktop/bb172509%28v=vs.85%29.aspx)。 –

0

這完全取決於您,因爲您必須在渲染網格物體本身之前調用BeginPass方法並遍歷所有遍歷。這使您可以更改混合模式,即使網格不需要相同。

所以一般情況下,結果與使用單通道着色器渲染(不同)網格相同。

+0

「即使網格不需要是相同的」你能解釋一下嗎?我雖然第一遍稱爲頂點和像素着色器函數,但後來通過只稱爲像素着色器,因爲使用了頂點着色器輸出... – Blau

+0

我的意思是你可以在BeginPass和EndPass之間畫出所有東西。我使用這個例子來組合不同陰影部分的2D形狀。 –