1. 程式人生 > >Unity Geometry Shader實現

Unity Geometry Shader實現

光柵化 bsp 移動 平臺開發 著色器 board 多人 基本 很多

unity官方文檔關於geometry shader的內容等同於沒有,這也是因為unity的開發者基本面向的是移動平臺開發,所以這種SM4.0的特性基本都不會被開發者考慮。但是本著與時俱進的精神(雖然現在已經不早了)還是研究一下以備不時之需。

在開始unity geometry shader之前,通過DX10的龍書,簡單的了解了一下geometry shader的原理。然後看了一個GS的billboard例子,覺得大同小異。

首先要知道,GS和VS以及FS的區別。

在dx9的渲染管線中,可編程的shader只有頂點著色器和片段著色器兩種,在我們進行shader編寫的時候,可以知道頂點著色器的輸出就是片段著色器的輸入。但是在dx10的渲染管線開始,增加了一個幾何著色器。幾何著色器在渲染管線中位於頂點著色器和片段著色器之間,準確的是緊挨著頂點著色器,所以在某些方面,幾何著色器的操作和頂點著色器有相似性,一些原來在頂點著色器中的計算完全可以轉移到幾何著色器中進行,但並不建議那麽做。

其次,幾何著色器是可選的,和頂點片段著色器不同。我們在shader編寫的時候必須要有兩個shader,頂點著色器用於坐標變換,片段著色器返回顏色。但是幾何著色器呢?它的輸入頂點著色器的輸出,輸出不是片段著色器的輸入。輸入是圖元,輸出也是圖元。

但是有人會疑惑,在之前的vs和fs編寫時,頂點著色器的輸出即片段著色器的輸入是一個頂點信息的數組啊。

圖元是渲染對象在頂點著色器之後,光柵化之前的一種狀態。簡單的來說,就是點或者線段或者三角形。

經過這些簡單的了解,很多人就大概能猜到幾何著色器可以用來做什麽了,比如曲面細分,比如lowpoly。上面說到的billboard也可以,不過billboard可以在腳本和頂點shader中同樣可以實現,暫時還沒有比較過三者之間的效率以及適用範圍。

Unity Geometry Shader實現