跳轉至內容

Cg 程式設計/Unity

來自 Wikibooks,開放世界中的開放書籍

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

準備工作

[編輯 | 編輯原始碼]

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

  • 首先,這部分內容介紹了 Unity 標準 3D 內建管線中的頂點和片段著色器。這種著色器程式設計特別靈活,允許您編寫非常高效的著色器,這在渲染效能有限的情況下(例如,在移動裝置上)通常很重要。它對於影像特效和了解 GPU 的總體工作原理也非常有用。如果需要考慮 Unity 的標準光照,則頂點和片段著色器的程式設計用處不大。(在這種情況下,在 Unity 中首選使用表面著色器和著色器圖。)
  • 其次,這部分內容假設讀者對 Unity 有一定的瞭解。如果不是這樣,讀者應該查閱 Unity 手冊的前幾節內容(Unity 基礎資源工作流程主要視窗)。
  • 第三,Unity 不區分 Cg(Nvidia 的著色語言)和 DirectX 9 樣式的 HLSL(Direct3D 9 中的著色語言),因為這兩種語言非常相似;因此,這些教程中的大多數也適用於 DirectX 9 樣式的 HLSL。
  • 此外,Cg 由 Nvidia 的 Cg 教程Nvidia 的 Cg 語言規範 進行記錄。但是,這些描述缺少 Unity 特定的細節。另一方面,Unity 的著色器文件 側重於 Unity 的 ShaderLab 語法,並假設讀者熟悉 Cg。因此,在沒有 Cg 先驗知識的情況下學習 Unity 中的 Cg 程式設計可能相當困難。本華夏公益教科書試圖透過提供 Unity 中 Cg 程式設計的入門教程來彌合這一差距,而無需 Cg 的先驗知識。

請注意,教程假設您按照此處顯示的順序閱讀它們,即每個教程都假設您熟悉前面教程中介紹的概念和技術。如果您是 Cg 或 Unity 的新手,您至少應該通讀“基礎”部分中的教程。(現在您已經得到警告了!)

透明表面

[編輯 | 編輯原始碼]

基礎光照

[編輯 | 編輯原始碼]

基礎紋理

[編輯 | 編輯原始碼]

3D 紋理

[編輯 | 編輯原始碼]

環境對映

[編輯 | 編輯原始碼]

光照的變體

[編輯 | 編輯原始碼]

非標準頂點變換

[編輯 | 編輯原始碼]

影像特效和計算著色器

[編輯 | 編輯原始碼]
  • 貝塞爾曲線(關於二次貝塞爾曲線和樣條曲線)
  • 埃爾米特曲線(關於三次埃爾米特曲線和樣條曲線)
  • 旋轉(關於尤拉角和四元數)
  • 虛擬現實投影(關於離軸透視投影)
  • 鏡子(關於使用渲染紋理渲染平面鏡)
  • 傳送門(關於使用模板緩衝區渲染到另一個場景的傳送門或魔法鏡頭)

缺失教程

[編輯 | 編輯原始碼]

Unity 的基本功能

[編輯 | 編輯原始碼]
  • 光照貼圖
  • 粒子
  • 光暈
  • 球諧光照
  • 使用 ReadPixels 生成立方體紋理
  • Unity 圖形管線

最佳化著色器

[編輯 | 編輯原始碼]
  • 每頂點計算與每片段計算
  • 混合和丟棄(以及 Alpha 測試)
  • 變數精度
  • 紋理取樣
  • 其他建議

其他主題

[編輯 | 編輯原始碼]
  • [stub:] 水反射和折射(關於水)
  • 陰影貼圖
  • Z 優先順序
  • 色鍵
  • 發光線條
  • 球體環境光遮蔽(來自天空光的球體軟陰影)
  • 水波(過程法線貼圖)
  • 曲面鏡(光線追蹤反射)
  • 無模板緩衝區的陰影體積
  • 動畫精靈
  • 過程紋理(噪聲)
  • 閃光效果

< Cg 程式設計

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