所以我正在研究渲染管線,尤其是轉換,當我遇到這個數字來:渲染管線和轉換
我認爲,從相機的空間均勻裁剪空間的通道發生在T & L(或頂點着色器,如果我們使用的話),但我不確定照明計算是在投影之後還是之前進行的(說實話,我認爲它們可以在世界座標中製作)。然後傳遞給NDC,我們必須除以w。這個問題仍然考慮在T計算中,還是屬於另一個階段?最後是從NDS到視口/屏幕座標的最後一次轉換:這發生在裁剪之後和光柵化之前,對嗎?
所以我正在研究渲染管線,尤其是轉換,當我遇到這個數字來:渲染管線和轉換
我認爲,從相機的空間均勻裁剪空間的通道發生在T & L(或頂點着色器,如果我們使用的話),但我不確定照明計算是在投影之後還是之前進行的(說實話,我認爲它們可以在世界座標中製作)。然後傳遞給NDC,我們必須除以w。這個問題仍然考慮在T計算中,還是屬於另一個階段?最後是從NDS到視口/屏幕座標的最後一次轉換:這發生在裁剪之後和光柵化之前,對嗎?
好吧。我不知道你有多寬泛地定義術語「T & L」。從可編程的pipleine看,從物體空間到剪輯空間完全是程序員的工作,它是在頂點着色器中完成的,正如定義任何中間空間(如世界空間或眼睛空間)一樣。
視角分割,裁剪和視口變換仍然是頂點着色器和插入之前的固定功能階段(因爲光柵化必須發生在我們渲染的幀緩衝區的像素柵格中)。 請注意,還有其他階段,如原始組裝inbetween。
但我不確定照明計算是在投影后還是之前進行(說實話,我認爲它們可以在世界座標中製作)。
你必須在這裏區分不同的事物:光照計算在哪個空間發生,以及在什麼樣的管道階段。 至於空間:傳統上,照明是在眼睛空間計算的。但是對於可編程管線,您可以在任何可以提供的空間內完成。通常使用眼睛空間或世界空間。通常情況下,您不想在剪輯空間中進行剪輯,因爲透視變換會扭曲角度。
至於流水線級:經典的變體是高洛德着色或「每頂點照明」,並且它是在頂點處理階段進行(因此用「& L」在「T & L」爲那個階段) 。 使用現代GPU,照明通常按照片段/像素完成 - 在光柵化之後調用的片段/像素着色器中。但仍然使用眼睛或世界空間等一些非失真空間進行計算。