Shader 開發實戰 Practical Shader Development: Vertex and Fragment Shaders for Game Developers

Kyle Halladay 郭華豐 韋靜 譯

  • Shader 開發實戰-preview-1
  • Shader 開發實戰-preview-2
  • Shader 開發實戰-preview-3
Shader 開發實戰-preview-1

買這商品的人也買了...

商品描述

主要內容: ·瞭解什麽是著色器以及它們的工作原理 ·迅速深入編寫頂點著色器和片元著色器技術 ·使用顏色混合,並瞭解混合方程式的工作原理 ·瞭解渲染實時電腦圖形時使用的坐標空間 ·使用簡單的數學運算為角色設置動畫、模擬燈光以及創建多種視覺效果 ·查找並修復著色器中的性能問題 .瞭解三種流行的游戲引擎(Unity、UE4和Godot)使用著色器的方式

作者簡介

Kyle Halladay是一名職業遊戲程序員,居住在美國芝加哥市。
在為遊戲和建築可視化編寫著色器和構建圖形技術方面,Kyle擁有七年以上的工作經驗。

目錄大綱

第1章初識遊戲圖形 1
1.1 什麼是渲染 1
1.2 網格是什麼 2
1.3 向量入門 3
1.4 在計算機圖形學中定義顏色 7
1.5 渲染管線 8
1.6 著色器是什麼10
1.7 小結11

第2章第一個著色器13
2.1 在Windows上安裝13
2.2 創建項目14
2.3 創建第一個三角形15
2.4 第一個頂點著色器17
2.4.1 #version預處理器指令18
2.4.2 GLSL的in關鍵字18
2.4.3 GLSL的vec數據類型18
2.4.4 寫入gl_Position 19
2.4.5 歸一化的設備坐標19
2.5 第一個片元著色器20
2.6 在項目中使用著色器21
2.7 使用頂點屬性添加顏色23
2.8 片元插值介紹25
2.9 統一變量介紹26
2.10 小結28

第3章使用紋理29
3.1 創建四邊形30
3.2 UV坐標介紹32
3.3 在著色器中使用紋理35
3.4 滾動UV坐標38
3.5 使用統一變量調節亮度41
3.6 基本的顏色數學44
3.7 使用mix指令混合紋理47
3.8 小結50

第4章半透明與深度51
4.1 設置示例項目52
4.2 繪製小綠人52
4.3 alpha測試和丟棄54
4.4 使用深度測試構建場景55
4.5 使用alpha混合創建雲朵57
4.6 GLSL的min()函數和max()函數59
4.7 alpha混合的工作原理60
4.8 使用加法混合添加太陽光62
4.9 使用精靈表製作動畫66
4.10 小結68

第5章使物體動起來71
5.1 讓角色向前走72
5.2 在著色器代碼中縮放雲朵74
5.3 使用頂點著色器旋轉物體78
5.4 變換矩陣81
5.5 為變換矩陣添加動態84
5.6 單位矩陣88
5.7 小結89

第6章攝像機和坐標91
6.1 使用視圖矩陣91
6.2 變換矩陣和坐標空間95
6.3 攝像機視錐體和投影100
6.4 小結103

第7章第一個3D項目105
7.1 加載網格105
7.2 創建透視攝像機107
7.3 小結110

第8章漫反射光照111
8.1 使用法線平滑(smooth)著色與平面(flat)著色113
8.2 世界空間法線和swizzle 115
8.3 法線矩陣116
8.4 為什麼光照計算需要法線117
8.5 什麼是點積118
8.6 點積著色119
8.7 第一個平行光121
8.8 創建輪廓光照效果124
8.9 小結129

第9章第一個光照模型131
9.1 鏡面光照131
9.2 第一個鏡面著色器133
9.3 組合漫反射和鏡面反射光照135
9.4 環境光照136
9.5 Phong光照模型138
9.6 Blinn-Phong光照139
9.7 使用紋理控制光照141
9.8 小結144

第10章法線貼圖147
10.1 什麼是法線貼圖148
10.2 切線空間149
10.3 使用切線向量150
10.4 叉積151
10.5 法線貼圖的工作原理152
10.6 編寫水面著色器155
10.7 法線貼圖的更多信息161
10.8 小結162

第11章立方體貼圖和天空盒163
11.1 什麼是立方體貼圖163
11.2 在openFrameworks中加載立方體貼圖164
11.3 在立方體上渲染立方體貼圖165
11.4 天空盒168
11.5 透視除法170
11.6 天空盒和透視除法170
11.7 完成天空盒171
11.8 創建立方體貼圖反射172
11.9 立方體貼圖的更多內容174
11.10 小結175

第12章深入光照177
12.1 定向光源177
12.2 點光源178
12.3 聚光燈184
12.4 多光源190
12.5 更靈活的多光源設置方法196
12.6 更進一步201
12.7 小結202

第13章剖析著色器性能203
13.1 如何衡量性能203
13.2 CPU時間與GPU時間204
13.3 解決VSync(垂直同步) 204
13.4 設置評測用的計算機207
13.5 剖析實踐208
13.6 Nsight Graphics介紹210
13.7 我們是受CPU還是GPU限制212
13.8 捷徑215
13.9 跟踪問題著色器215
13.10 小結218

第14章優化著色器221
14.1 將計算移至頂點著色器221
14.2 避免動態分支223
14.3 使用MAD 225
14.4 優先使用GLSL函數而不是自己編寫的函數226
14.5 使用Write Mask(寫掩碼) 227
14.6 避免不必要的overdraw(過度繪製) 228
14.7 最終想法229
14.8 小結229

第15章精度231
15.1 什麼是浮點精度231
15.2 案例研究:時間軸動畫234
15.3 使用低精度變量238
15.4 案例研究:點光源問題239
15.5 小結242

第16章在Unity中編寫著色器243
16.1 Unity中的著色器和材質243
16.2 ShaderLab簡介244
16.3 純色著色器246
16.4 移植Blinn-Phong著色器251
16.5 Unity中的半透明著色器257
16.6 處理多個光源258
16.7 將數據從C#傳遞到著色器代碼262
16.8 下一步、ShaderGraph和未來263
16.9 小結263

第17章在UE4中編寫著色器265
17.1 著色器、材質和實例265
17.2 使物體變紅268
17.3 UE4 Material Node Graph基礎270
17.4 製作邊緣光材質272
17.5 Default Lit材質輸入274
17.6 頂點著色器還是片元著色器275
17.7 使用不同的著色模型278
17.8 混合模式和紋理採樣節點279
17.9 將數據從代碼傳遞到材質280
17.10 所有這些與著色器代碼有何關聯280
17.11 小結281

第18章在Godot中編寫著色器283
18.1 著色器和材質283
18.2 Godot著色語言285
18.3 片元著色器輸出變量287
18.4 製作自定義邊緣光著色器288
18.5 自定義頂點著色器292
18.6 UV動畫292
18.7 半透明著色器和混合模式293
18.8 將數據從代碼傳遞到著色器295
18.9 未來:可視化著色器編輯295
18.10 小結296

附錄A 重要代碼片段297
A.1 計算網格的切線297
A.2 ofxEasyCubemap類298