跳至內容

Cg 程式設計/Unity/簡介

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

關於 Cg

[編輯 | 編輯原始碼]

Nvidia 的程式語言 Cg(C 代表圖形)是幾種常用的即時渲染著色語言之一(其他例子有 Direct3D 的 HLSL 和 OpenGL 的 GLSL)。這些著色語言用於程式設計著色器(即或多或少的小程式),這些著色器在 GPU(圖形處理單元)上執行,即計算機圖形系統的處理器——而不是計算機的 CPU(中央處理單元)。

GPU 是大規模並行處理器,非常強大。今天遊戲中和其它互動式圖形應用程式中的大多數即時圖形,如果沒有 GPU 都是不可能實現的。然而,為了充分利用 GPU 的效能,有必要直接對其進行程式設計。這意味著必須編寫可以由 GPU 執行的小程式(即著色器)。編寫這些著色器的程式語言是著色語言。Cg 就是其中之一。事實上,它是 GPU 的第一個高階著色語言之一,並且已在幾個 3D 圖形 API(應用程式程式設計介面)中實現,最重要的是 OpenGL 和 Direct3D。今天,它流行的主要原因是它與 HLSL 的相似性,HLSL 是微軟 Direct3D 的著色語言。在實踐中,Cg 和 HLSL 著色器之間通常沒有區別。

關於這本華夏公益教科書

[編輯 | 編輯原始碼]

這本書是為那些不喜歡程式設計也不喜歡數學的學生寫的。這本書的基本動機是觀察到,如果學生參與特定專案,他們學習程式設計環境、程式語言和 API 的動機要強得多。這些專案通常是在特定平臺上開發的,因此本書的方法是在遊戲引擎 Unity 中介紹 Cg。

本書的第 1 章到第 9 章包含帶工作示例的教程,這些示例會產生某些效果。請注意,這些教程假設您按照它們的呈現順序閱讀它們,即每個教程都假設您熟悉前一個教程中介紹的概念和技術。如果您不熟悉 Cg 或 Unity,您至少應該通讀第 1 章“基礎”中的教程。

關於可程式設計圖形管道和 Cg 語法的一般資訊包含在“關於可程式設計圖形管道和 Cg 語法”的附錄中。不熟悉 GPU 或 Cg 的讀者可能至少想瀏覽一下這部分內容,因為對該管道和 Cg 語法的基本瞭解對於理解教程非常有用。

關於 Cg 在 Unity 中的使用

[編輯 | 編輯原始碼]

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

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

  • 首先,這些教程假設讀者對 Unity 有所瞭解。如果不是這樣,讀者應該參考 Unity 使用者指南的前三部分[1](Unity 基礎、構建場景、資產匯入和建立)。
  • 其次,Unity 不區分 Cg(Nvidia 的著色語言)和 HLSL(Direct3D 中的著色語言),因為這兩種語言非常相似;因此,這些教程中的大多數也適用於 HLSL。
  • 此外,Cg 由Nvidia 的 Cg 教程Nvidia 的 Cg 語言規範進行文件化。但是,這些描述缺少 Unity 特定的細節。另一方面,Unity 的著色器文件[2]側重於用 Unity 自己的“表面著色器”格式編寫的著色器,而 Cg/HLSL 中的著色器文件非常有限[3]。因此,在沒有 Cg 方面的先驗知識的情況下學習 Unity 中的 Cg 程式設計可能相當困難。本書試圖透過在不需要事先了解 Cg 的情況下提供 Unity 中的 Cg 程式設計簡介來彌合這一差距。


 


馬丁·克勞斯,2013 年 3 月

華夏公益教科書