Cg 程式設計/Unity
外觀
< Cg 程式設計
在遊戲引擎 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 的新手,您至少應該通讀“基礎”部分中的教程。(現在您已經得到警告了!)
- 漫反射(關於每個頂點的漫反射光照和不同型別的多個光源)
- 鏡面高光(關於每個頂點的光照)
- 雙面表面(關於雙面每個頂點的光照)
- 平滑鏡面高光(關於每個畫素的光照)
- 雙面平滑表面(關於雙面每個畫素的光照)
- 多個光源(關於用於在一個著色器通道中處理多個光源的 for 迴圈)
- 拉絲金屬(關於各向異性鏡面反射)
- 輪廓處的鏡面高光(關於鏡面反射的菲涅爾係數)
- 天空光的漫反射(關於半球光照)
- 半透明表面(關於背光漫反射和前向散射透射)
- 半透明物體(關於對比度降低的漫反射光照以及輪廓處漫反射背光的透射)
- 球體的軟陰影(關於渲染球體的本影和半影)
- 卡通渲染(關於非真實感渲染)
- 最小影像特效(關於使用片段著色器進行基本的影像後期處理)
- 計算影像特效(關於使用計算著色器進行影像特效)
- 計算顏色直方圖(關於使用計算著色器計算顏色直方圖)
- 計算最亮畫素(關於使用計算著色器查詢最亮畫素)
- 貝塞爾曲線(關於二次貝塞爾曲線和樣條曲線)
- 埃爾米特曲線(關於三次埃爾米特曲線和樣條曲線)
- 旋轉(關於尤拉角和四元數)
- 虛擬現實投影(關於離軸透視投影)
- 鏡子(關於使用渲染紋理渲染平面鏡)
- 傳送門(關於使用模板緩衝區渲染到另一個場景的傳送門或魔法鏡頭)
- 霧
- 光照貼圖
- 粒子
- 光暈
- 球諧光照
- 使用 ReadPixels 生成立方體紋理
- Unity 圖形管線
- 每頂點計算與每片段計算
- 混合和丟棄(以及 Alpha 測試)
- 變數精度
- 紋理取樣
- 其他建議
- [stub:] 水反射和折射(關於水)
- 陰影貼圖
- Z 優先順序
- 色鍵
- 發光線條
- 球體環境光遮蔽(來自天空光的球體軟陰影)
- 水波(過程法線貼圖)
- 曲面鏡(光線追蹤反射)
- 無模板緩衝區的陰影體積
- 動畫精靈
- 過程紋理(噪聲)
- 閃光效果
- Unity 著色器參考:http://docs.unity3d.com/Manual/SL-Reference.html
- Unity 社群 Wiki 中的著色器:http://wiki.unity3d.com/index.php/Shaders
- Unity 使用者論壇關於著色器:http://forum.unity3d.com/forums/16-ShaderLab
- 圖形方面的影片教程:http://unity3d.com/learn/tutorials/topics/graphics
- 關於 SIGGRAPH 上著色器最佳化演示的部落格文章:http://blogs.unity3d.com/2011/08/18/fast-mobile-shaders-talk-at-siggraph/
< Cg 程式設計
除非另有說明,否則本頁面上的所有示例原始碼均授予公有領域。