跳轉到內容

GLSL 程式設計/Unity

來自華夏公益教科書,自由的教科書

在 Unity 遊戲引擎中進行 GLSL 程式設計比在 OpenGL、OpenGL ES 或 WebGL 應用程式中進行 GLSL 程式設計要容易得多。網格和影像(即紋理)的匯入受圖形使用者介面的支援;可以自動計算mipmap 和法線貼圖;大多數常見的頂點屬性和制服都是預定義的;OpenGL 狀態可以透過非常簡單的命令設定;等等。

預備知識

[編輯 | 編輯原始碼]

可以在 Unity 的下載頁面 下載 Unity 的免費版本,適用於 Windows 和 MacOS。所有包含的教程都適用於免費版本。需要注意三點

  • 首先,Windows 使用者必須使用命令列引數 -force-opengl [1] 在啟動 Unity 時才能使用 GLSL 著色器;例如,透過將桌面圖示屬性中的 Target 設定更改為:"C:\Program Files\Unity\Editor\Unity.exe" -force-opengl 。(在 MacOS X 上,預設情況下使用 OpenGL,因此也使用 GLSL。)請注意,在 Windows 上在 Web 瀏覽器中執行的 Unity 應用程式中無法使用 GLSL 著色器。
  • 其次,這部分假設讀者對 Unity 有所瞭解。如果情況並非如此,讀者應該參考 Unity 使用者指南 [2] 的前三個部分(Unity 基礎、構建場景、資源匯入和建立)。
  • 此外,Unity 支援與 OpenGL ES 2.0 的 1.0.x 版本類似的 GLSL 版本(規範可在 “Khronos OpenGL ES API Registry” 獲得);但是,Unity 的著色器文件 [3] 側重於用 Unity 自己的“表面著色器”格式和 Cg/HLSL [4] 編寫的著色器。只有很少的特定於 GLSL 著色器的細節被記錄在案 [5]。因此,本華夏公益教科書可能也有助於彌補 Unity 文件中的一些空白。但是,通常不討論最佳化(例如,參見 此部落格)。

請注意,教程假設你按照此處介紹的順序閱讀它們,即每個教程都假設你熟悉前一個教程介紹的概念和技術。如果你不熟悉 GLSL 或 Unity,你至少應該通讀“基礎”部分的教程。(現在你被警告了!)

透明表面

[編輯 | 編輯原始碼]

基本光照

[編輯 | 編輯原始碼]

基本紋理

[編輯 | 編輯原始碼]

3D 紋理

[編輯 | 編輯原始碼]

環境對映

[編輯 | 編輯原始碼]

光照的變體

[編輯 | 編輯原始碼]

非標準頂點變換

[編輯 | 編輯原始碼]

沒有著色器的圖形

[編輯 | 編輯原始碼]

一些額外的關於在沒有著色器的情況下在 Unity 中進行圖形程式設計的教程可在 Cg 程式設計華夏公益教科書中找到。


< GLSL 程式設計

除非另有說明,本頁面的所有示例原始碼都授予公有領域。
華夏公益教科書