跳轉到內容

GLSL 程式設計/Unity/簡介

來自華夏公益教科書,開放的書籍,開放的世界

關於 GLSL

[編輯 | 編輯原始碼]

GLSL(OpenGL 著色語言)是幾種常用的即時渲染著色語言之一(其他例子包括 Cg 和 HLSL)。這些著色語言用於程式設計著色器(即或多或少的小程式),這些程式在 GPU(圖形處理單元)上執行,即計算機圖形系統的處理器 - 與計算機的 CPU(中央處理單元)相反。

GPU 是大規模並行處理器,功能極其強大。今天大多數遊戲和其他互動式圖形應用程式中的即時圖形如果沒有 GPU 就不可能實現。然而,要充分利用 GPU 的效能,有必要直接對它們進行程式設計。這意味著必須編寫可以由 GPU 執行的小程式(即著色器)。編寫這些著色器的程式語言就是著色語言。GLSL 就是其中之一。事實上,它是幾個 3D 圖形 API(應用程式程式設計介面)的著色語言,即 OpenGL、OpenGL ES 2.x 和 WebGL。因此,GLSL 在臺式計算機、移動裝置和網路的應用程式中普遍使用。

關於這本華夏公益教科書

[編輯 | 編輯原始碼]

這本華夏公益教科書是針對那些不喜歡程式設計也不喜歡數學的學生編寫的。這本書的基本動機是觀察到,如果學生們在具體的專案上工作,他們會更有動力去學習程式設計環境、程式語言和 API。這類專案通常是在特定平臺上開發的,因此本書的方法是在遊戲引擎 Unity 中介紹 GLSL。

本書第 1 章到第 8 章包含帶有工作示例的教程,這些示例會產生某些效果。請注意,這些教程假設您按它們提供的順序閱讀它們,即每個教程都將假設您熟悉以前教程中介紹的概念和技術。如果您是 GLSL 或 Unity 的新手,您至少應該通讀第 1 章“基礎”中的教程。

關於 OpenGL 管道和 GLSL 語法的更多細節包含在“關於 OpenGL 管道和 GLSL 語法的附錄”中。不熟悉 OpenGL 或 GLSL 的讀者可能至少想快速瀏覽一下這部分內容,因為對 OpenGL 管道和 GLSL 語法的基本理解對於理解教程非常有用。

關於 GLSL 在 Unity 中的應用

[編輯 | 編輯原始碼]

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

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

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


 


Martin Kraus,2012 年 8 月

華夏公益教科書