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