4. 著色器
「游戲引擎 淺入淺出」是一本開源電子書,PDF/隨書代碼/資源下載: https://github.com/ThisisGame/cpp-game-engine-book
著色器就是Shader,Shader就是一段GPU程式原始碼,
我們大學就學過的C語言是CPU程式原始碼,Shader和C 語言有很多相似之處,也要寫代碼、編譯、鏈接,
通過下面的表格來做對照,
| C語言 | Shader | |
| 目標硬體 | CPU | GPU |
| 編譯流程 | 創建專案 | 創建GPU程式 |
| 創建多個代碼檔案 | 創建Shader物件(頂點Shader和片段Shader) | |
| 撰寫多個代碼 | 上傳Shader原始碼到Shader物件 | |
| 編譯代碼 | 編譯Shader | |
| 添加到鏈接串列 | 添加到鏈接串列 | |
| 鏈接 | 鏈接 |
是不是很相似呢!
渲染一個影像,其實就是在GPU上執行了Shader代碼,然后將頂點坐標、顏色資料作為輸入,經由Shader進行處理,然后輸出像素資料到螢屏上,
和C語言不一樣的是,C語言只需要一個main.c 檔案就可以編譯成功,
但是Shader是配套出現的, Vertex Shader(頂點著色器)、Fragment Shader(片段著色器),兩者缺一不可,
| C語言 | Shader | |
| 目標硬體 | CPU | GPU |
| 代碼檔案串列 | main.c | main.vs(Vertex Shader) |
| ... | main.fs(Fragment Shader) |
著色器的種類
Vertex Shader(頂點著色器)、Fragment Shader(片段著色器/像素著色器) 我們聽到最多的就是這兩個,
Geometry Shader、Computer Shader看過但是實際專案中沒用過,
Tessellation Control Shader 、Tessellation Evaluation Shader這兩個就幾乎沒有聽過,
這是由作業內容決定的,大家都是從事手機游戲開發,
目前市面上的手機,很大一部分仍然是OpenGL ES3.0的版本或更低,
Computer Shader在OpenGL ES 3.1版本才開始支持,
Geometry Shader在OpenGL ES 3.2版本才開始支持,
更多資料參考OpenGL官網:
https://www.khronos.org/opengl/wiki/Category:Shaders
本書也僅介紹Vertex Shader(頂點著色器)、Fragment Shader(片段著色器),
在 3.繪制簡單圖形 這一章的配套專案里,ShaderSource.h 里面就存放著Vertex Shader 和 Fragment Shader 的原始碼,
如下圖:

觀察這段代碼,又發現和C語言的相同之處 -- 入口都是 main 函式,
| C語言 | Shader | |
| 目標硬體 | CPU | GPU |
| 入口 | void main() | void main() |
當前小節對Shader有了一個大概的映像即可,后續章節再詳細介紹,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/500315.html
標籤:其他
