Shader開發實戰( 簡體 字) | |
作者:[英]凱爾·哈拉迪(Kyle Halladay)著 郭華豐 韋靜 譯 | 類別:1. -> 遊戲 -> 遊戲程式 2. -> 多媒體 -> 綜合 |
出版社:清華大學出版社 | 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開發實戰》中的示例可能無法正常運行。 |