3dwoo大學簡體電腦書店
Shader開發實戰
( 簡體 字)
作者:[英]凱爾·哈拉迪(Kyle Halladay)著 郭華豐 韋靜 譯類別:1. -> 遊戲 -> 遊戲程式
   2. -> 多媒體 -> 綜合
出版社:清華大學出版社Shader開發實戰 3dWoo書號: 54851
詢問書籍請說出此書號!
有庫存
NT售價: 490
出版日:7/1/2021
頁數:300
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 字 )
ISBN:9787302583349 加入購物車加到我的最愛 (請先登入會員)
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社)
第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.2GLSL的in關鍵字18
2.4.3GLSL的vec數據類型18
2.4.4寫入gl_Position19
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.2UV坐標介紹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.3alpha測試和丟棄54
4.4使用深度測試構建場景55
4.5使用alpha混合創建云朵57
4.6GLSL的min()函數和max()函數59
4.7alpha混合的工作原理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世界空間法線和swizzle115
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.5Phong光照模型138
9.6Blinn-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.2CPU時間與GPU時間204
13.3解決VSync(垂直同步)204
13.4設置評測用的計算機207
13.5剖析實踐208
13.6NsightGraphics介紹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使用MAD225
14.4優先使用GLSL函數而不是自己編寫的函數226
14.5使用WriteMask(寫掩碼)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.1Unity中的著色器和材質243
16.2ShaderLab簡介244
16.3純色著色器246
16.4移植Blinn-Phong著色器251
16.5Unity中的半透明著色器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.3UE4MaterialNodeGraph基礎270
17.4制作邊緣光材質272
17.5DefaultLit材質輸入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.2Godot著色語言285
18.3片元著色器輸出變量287
18.4制作自定義邊緣光著色器288
18.5自定義頂點著色器292
18.6UV動畫292
18.7半透明著色器和混合模式293
18.8將數據從代碼傳遞到著色器295
18.9未來:可視化著色器編輯295
18.10小結296
附錄A重要代碼片段297
A.1計算網格的切線297
A.2ofxEasyCubemap類298
主要內容:
·了解什么是著色器以及它們的工作原理
·迅速深入編寫頂點著色器和片元著色器技術
·使用顏色混合,并了解混合方程式的工作原理
·了解渲染實時計算機圖形時使用的坐標空間
·使用簡單的數學運算為角色設置動畫、模擬燈光以及創建多種視覺效果
·查找并修復著色器中的性能問題
.了解三種流行的游戲引擎(Unity、UE4和Godot)使用著色器的方式
歡迎來到實用著色器開發。《Shader開發實戰》旨在深入淺出地介紹編寫視頻游戲著色器的理論和實踐。編寫著色器是一個非常寬泛的話題,當我剛起步時,感到非常迷茫。希望《Shader開發實戰》能夠幫助你避免同樣的感覺,并讓你快速而自信地踏入著色器和游戲圖形的廣闊世界。
《Shader開發實戰》的指導思想是:“木匠不需要知道如何制作扳手”。同樣,你不必知道如何構建渲染引擎就可以使用著色器創建美觀的視覺效果,尤其是在剛入門時。《Shader開發實戰》旨在幫助你進行實驗、發揮創造力、創造有趣的事物,并希望在此過程中有所收獲。為此,《Shader開發實戰》不會嘗試教你如何成為圖形程序員,也不會嘗試提供系統的數學知識(盡管將逐步介紹一些數學知識)。相反,《Shader開發實戰》將從一開始就討論現代游戲中如何在屏幕上放置東西,然后直接進入編寫著色器,以使我們在屏幕上放置的東西看起來像我們想要的那樣。將會有大量示例代碼,大量圖片,并且到《Shader開發實戰》結束時,將從著色器編寫的基本知識轉向編寫與市場上一些最流行的游戲中使用相同光照的著色器。
如果在《Shader開發實戰》的最后,你決定想更深入地研究圖形編程,甚至編寫自己的渲染引擎,或者更復雜的著色器技術,那么《Shader開發實戰》將為你提供扎實的基礎知識,為你處理更復雜的主題做準備。
0.1 《Shader開發實戰》讀者對象
《Shader開發實戰》適用于想要學習如何使用著色器代碼為游戲或實時應用程序創建視覺效果的任何人。假設你已經知道如何編寫一些簡單的C ++代碼,但這就是你閱讀《Shader開發實戰》之前需要掌握的全部背景知識。將解釋我們所需的所有數學運算(你會驚訝地發現其中的數學運算很少),并從3D網格開始,分解將使用的每種圖形技術。如果你對C ++有點生疏,那也沒問題!由于《Shader開發實戰》的重點是著色器開發,因此根本不會編寫太多的C ++代碼,并且我們即使要寫也將保持盡量簡單短小,不給讀者增加額外的負擔。
0.2 如何使用《Shader開發實戰》
第1~12章的重點是著色器技術的教學和介紹新的圖形概念。如果你完全是初學者,建議你從第1章開始,并按順序閱讀所有內容。每章都基于之前的內容,因此,如果你跳過太多內容,就有可能最終迷失方向。
如果你已經掌握了一些著色器開發知識,那么直接跳到你以前從未學過的章節可能會更有趣。
第13~15章涉及調試和優化著色器代碼。如果你是因為項目以10fps的速度運行而選擇閱讀《Shader開發實戰》,并且需要對其進行修復,那么可能更值得直接跳到那里去解決當前碰到的問題。否則,你可能會因為前幾章的輕松和緩慢的節奏而感到沮喪。
第16~18章討論了如何在當今使用的3種最流行的引擎中實現《Shader開發實戰》中所教的概念:Unity、Unreal Engine 4和Godot。建議你將這些保留到最后,以準備將《Shader開發實戰》中講授的概念應用于你的項目中。
最后,《Shader開發實戰》結尾處的附錄中有一些重要的代碼片段,這對于《Shader開發實戰》中的某些示例是必需的。這些代碼片段不是著色器代碼,因此不會對其進行詳細說明。
如果你在沒有互聯網連接的情況下閱讀《Shader開發實戰》,則需要參考附錄中的代碼,以便跟隨后續章節中的示例內容進行學習。章節的內容將告訴你何時需要那些代碼。
0.3 示例代碼約定
《Shader開發實戰》使用了大量示例代碼。為了使討論代碼更容易,這些示例均使用編號進行了注釋,如下所示:

int main(){
return 0; ?
}

行?引用了返回0的代碼行。
0.4 軟件要求
由于我們將使用一個名為openFrameworks的開源框架(默認情況下使用C++ 14),因此,如果你擁有能夠支持C++ 14的編譯器,那么你的編程生活將最為輕松。我們不會使用任何C++ 14功能,但是框架需要在幕后使用它們。如果你使用的是openFrameworks支持的IDE,你的編程生活也會更加輕松。幸運的是,支持openFrameworks的IDE很多,當完成所有設置后,你就可以自由選擇你想要的IDE。
最后,我們將使用OpenGL運行所有著色器。OpenGL是一個“渲染API”,這是用來與圖形卡(GPU)進行通信的一組函數。有很多不同的API供你選擇,但OpenGL的優勢是可在盡可能廣泛的硬件上運行,并可與openFrameworks很好地集成。你應該確保GPU至少支持OpenGL 4.1,這是《Shader開發實戰》假定你正在使用的。從OS X High Sierra開始,蘋果公司已不推薦在其臺式PC上使用OpenGL,這意味著如果你在Mac上學習《Shader開發實戰》,則《Shader開發實戰》中的示例可能無法正常運行。
pagetop