GLSL Programming/Unity

維基教科書,自由的教學讀本

在 Unity 環境下進行 GLSL 開發比起使用編寫獨立的 OpenGL, OpenGL ES 或者 WebGL 應用程式無疑會更為簡單。可以直接導入 mesh,圖片資源(如 Textures);mipmap 和 normal map 會被自動計算;大部分 GLSL vertex attributes 和 uniforms 變量都是預定義好的,可以直接用;一些 OpenGL 狀態變量可以直接設置。等等。

準備工作[編輯]

可以在 Unity's download page上下載到免費版本的 Unity,有多種平台版本,Windows,MacOS,Linux等。下面陳述的所有實例都可以在免費版本上實作運行。有幾點需要注意:

  • 第一,Windows 用戶啟動 Unity 開發環境時需要傳入如下參數 -force-opengl ,以便可以在 Unity 開發環境中使用 GLSL shader [1]。Windows 默認情況下使用 DirectX。可以參考如下做法避免每次都要從命令終端啟動 Unity :右鍵單擊 Unity 桌面圖標,編輯屬性選項,例如 "C:\Program Files\Unity\Editor\Unity.exe" -force-opengl(在MacOS 上默認使用的就是 OpenGL)。另外Windows 下還不支持 Web 瀏覽器裏面使用 GLSL shader
  • 第二,我們假設讀者朋友們已經熟悉 Unity 開發環境,如果答案是否定的,那麼推薦先閱讀一下 Unity User Guide [2]部分前三節(Unity Basics, Building Scenes, Asset Import and Creation)。

另外,Unity 是支持 GLSL 1.0.x 版本的,也就是 OpenGL ES 2.0(請參考「Khronos OpenGL ES API Registry」),然而 Unity 官方 shader [3]文檔內容主要關注於 Unity 自己的 「Surface Shader」和 Cg/HLSL[4],僅僅用很少的文字來描述 GLSL 部分[5]。所以這一份 wikibook 也許可以作為 Unity 環境下 GLSL 開發的補充,不過關於優化部分並沒有過多涉及 (請參考這篇博客)。


示例教程[編輯]

以下示例教程內容具有關聯性,後面的章節一般會依賴於前面的部分,所以請按照順序來閱讀。如果您還沒接觸過 GLSL 或者 Unity,至少應該首先閱讀「Basic」部分!

Basics[編輯]

Transparent Surfaces[編輯]

Basic Lighting[編輯]

Basic Texturing[編輯]

Textures in 3D[編輯]

Environment Mapping[編輯]

Variations on Lighting[編輯]

Non-Standard Vertex Transformations[編輯]

Graphics without Shaders[編輯]

關於 tutorials about graphics programming in Unity without shaders 的一些資料可以在 Cg Programming wikibook 上面找到.

參考連結[編輯]

Template:GLSL Programming BottomNav