2011-04-10 87 views
7

我在尋找可以讓我更好地理解着色器在遊戲中使用什麼類型的東西的資源,他們可以做什麼,甚至更重要的是什麼他們不可以。我瞭解圖形管道是如何工作的,以及我在GLSL中做了一些非常基本的着色器(主要是爲了替換固定功能管線功能),但我還沒有完全理解哪些東西只能用於自定義着色器,哪些事情可以更有效地完成,等等。我已經能夠找到某些技術的一些例子,特別是照明,但我正在尋找更高層次的使用概述。概述/着色器技術展示/遊戲用途

與總覽相比,某些有趣技術的鏈接和解釋也受到讚賞(但不到概述;)),最好是GLSL或僞代碼。

+0

此問題可能更適合http://gamedev.stackexchange.com/ – Twelve47 2011-04-10 13:43:04

+0

我認爲這是一個非常有效的問題。我也一直在想這個,這是我在這裏找到你的問題的原因。對於擁有完全可編程管線的承諾,我也有些失望。無法對附近的碎片進行採樣是一種驚喜。但我認爲在紋理組合方面存在很多可能性(固定管道中的噩夢)。我認爲GLSL並不是即時的酷炫效果配方(有些效果聽起來不錯),但肯定會有其用處。 – zmippie 2012-05-30 15:46:49

回答

4

考慮到DirectX和OpenGL都朝向僅着色器(即沒有固定功能)的系統,對於「哪些效果只有着色器纔有可能」問題的答案可能就是「一切」。

,我相信一些技術是不可能的/不帶可編程着色器可行(或通過使用非常特殊的黑盒的API)雖然,有:

  1. 每像素照明
  2. 陰影映射。
  3. 用於動畫網格的GPU蒙皮(即矩陣調色板蒙皮)。
  4. 任何今日常見的後期處理效果:bloom,SSAO,景深等。
  5. 延期着色。
  6. 實現任意波形/「其他」照明模型,如奧倫 - 納亞爾,庫克 - 託蘭斯,輪緣照明等

和列表可以去上,我敢肯定,有些人會不同意我的評估這些無法通過固定功能功能(通過黑客或各種固定功能擴展)來實現。

它可以歸結爲,在可編程着色器之前,供應商必須在硬件/驅動程序中實現給定的效果,而且它必須是可以通過API合理表達的東西。現在,您可以有效地執行任何用戶定義的代碼(在不同着色器階段和硬件其他限制的限制之內),因此您可以靈活地大幅度定製渲染管道,並根據需要發明新技術。

看看第一對情侶GPU Gems書籍(可以在Nvidia網站上免費閱讀)來感受一旦可編程硬件可用時出現的技術類型。

+1

儘管我同意這個答案,但是這裏有一點評論:陰影映射實際上可以用固定/函數GL(不知道D3D),還有矩陣調色板蒙皮的擴展(我確信D3D有它,太)。但是這些作爲着色器肯定不那麼靈活(並且廣泛支持蒙皮延伸)。 – 2011-06-12 01:28:57