Unity Shader 入門精要 Unity Shader入门精要

馮樂樂

  • 出版商: 人民郵電
  • 出版日期: 2016-05-01
  • 定價: $539
  • 售價: 8.5$458
  • 貴賓價: 8.0$431
  • 語言: 簡體中文
  • 頁數: 369
  • 裝訂: 平裝
  • ISBN: 7115423059
  • ISBN-13: 9787115423054
  • 相關分類: 遊戲引擎 Game-engine
  • 銷售排行: 👍 2016 年度 簡體中文書 銷售排行 第 17 名
    🥈 2016/9 簡體中文書 銷售排行 第 2 名
    🥉 2016/8 簡體中文書 銷售排行 第 3 名

    立即出貨(限量) (庫存=3)

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

相關主題

商品描述

<內容簡介>

 

本書不僅要教會讀者如何使用Unity Shader,更重要的是要幫助讀者學習Unity中的一些渲染機制以及如何使用Unity Shader實現各種自定義的渲染效果,希望這本書可以為讀者打開一扇新的大門,讓讀者離製作心目中傑出遊戲的心願更近一步。

 

本書的主要內容為:

● 學習Unity Shader應該從哪裡著手

● 現代GPU是如何實現整個渲染流水線的,這對理解Shader的工作原理有著非常重要的作用

● Unity Shader的實現原理和基本語法

● 學習Shader所需的數學知識,幫助讀者剋服學習Unity Shader時遇到的數學障礙

● 通過實現一個簡單的頂點/片元著色器案例,講解常用的輔助技巧等

● 學習如何在Shader中實現基本的光照模型

● 如何在Unity Shader中使用法線紋理、遮罩紋理等基礎紋理

● 學習如何實現透明度測試和透明度混合等透明效果

● 複雜的光照實現

● 在Unity Shader中使用立方體紋理、渲染紋理和程序紋理等高級紋理

● 學習用Shader實現紋理動畫、頂點動畫等動態效果

● 屏幕後處理效果的屏幕特效

● 使用深度紋理和法線紋理實現更多屏幕特效

● 非真實感渲染的算法,如卡通渲染、素描風格的渲染等

● 噪聲在遊戲渲染中的應用

● 常見的優化技巧

● 用錶面著色器實現渲染

● 基於物理渲染的技術

● 在升級Unity 5時可能出現的問題,並給出解決方法

● 有價值的學習資料,以幫助讀者進行更深入的學習

 

本書適合Unity初學者、遊戲開發者、程序員,也可以作為大專院校相關專業師生的學習用書,以及培訓學校的培訓教材。

 

 

<章節目錄>

 

第1篇   基礎篇

 

第1章 歡迎來到Shader的世界

1.1     程序員的三大浪漫

1.2 本書結構

 

第2章   渲染流水線

2.1     綜述

2.1.1   什麼是流水線

2.1.2   什麼是渲染流水線

2.2 CPU和GPU之間的通信 

2.2.1 把數據加載到顯存中

2.2.2 設置渲染狀態

2.2.3 調用Draw Call

2.3 GPU流水線 

2.3.1   概述

2.3.2 頂點著色器

2.3.3   裁剪

2.3.4 屏幕映射 

2.3.5   三角形設置

2.3.6   三角形遍歷

2.3.7   片元著色器

2.3.8   逐片元操作

2.3.9   總結

2.4     一些容易困惑的地方

2.4.1   什麼是OpenGL/DirectX 

2.4.2   什麼是HLSL、GLSL、CG

2.4.3   什麼是Draw Call 

2.4.4   什麼是固定管線渲染

2.5     那麼,你明白什麼是Shader了嗎

2.6     擴展閱讀

 

第3章   Unity Shader基礎

3.1     Unity Shader概述

3.1.1   一對好兄弟:材質和Unity Shader

3.1.2   nity中的材質

3.1.3   Unity中的Shader

3.2     Unity Shader的基礎:ShaderLab

3.3     Unity Shader的結構

3.3.1   我們的Shader起個名字

3.3.2   材質和Unity Shader的橋樑:Properties

3.3.3   重量級成員:SubShade

3.3.4   留一條後路: Fallback

3.3.5   ShaderLab還有其他的語義嗎

3.4     Unity Shader的形式

3.4.1   Unity的寵兒:錶面著色器

3.4.2   最聰明的孩子:頂點/片元著色器

3.4.3   被拋棄的角落:固定函數著色器

3.4.4   選擇哪種Unity Shader形式

3.5     本書使用的Unity Shader形式

3.6     答疑解惑

3.6.1   Unity Shader !=真正的Shader

3.6.2   Unity Shader和CG/HLSL之間的關係

3.6.3   我可以使用GLSL來寫嗎

3.7     擴展閱讀

 

第4章   學習Shader所需的數學基礎

4.1     背景:農場遊戲

4.2     笛卡兒坐標系

4.2.1   二維笛卡兒坐標系

4.2.2   三維笛卡兒坐標系

4.2.3   左手坐標系和右手坐標系

4.2.4   Unity使用的坐標系

4.2.5   練習題

4.3     點和矢量

4.3.1   點和矢量的區別

4.3.2   矢量運算

4.3.3   練習題

4.4     矩陣

4.4.1   矩陣的定義

4.4.2   和矢量聯繫起來

4.4.3   矩陣運算

4.4.4   特殊的矩陣

4.4.5 行矩陣還是列矩陣

4.4.6 練習題

4.5 矩陣的幾何意義:變換

4.5.1 什麼是變換

4.5.2 齊次坐標

4.5.3 分解基礎變換矩陣

4.5.4 平移矩陣

4.5.5 縮放矩陣

4.5.6 旋轉矩陣

4.5.7 複合變換

4.6 坐標空間

4.6.1 為什麼要使用這麼多不同的坐標空間

4.6.2 坐標空間的變換

4.6.3 頂點的坐標空間變換過程

4.6.4 模型空間

4.6.5 世界空間

4.6.6 觀察空間

4.6.7 裁剪空間

4.6.8 屏幕空間

4.6.9 總結

4.7 法線變換

4.8 Unity Shader的內置變量(數學篇) 

4.8.1 變換矩陣

4.8.2 攝像機和屏幕參數

4.9 答疑解惑

4.9.1 使用3×3還是4×4的變換矩陣

4.9.2 CG中的矢量和矩陣類型

4.9.3 Unity中的屏幕坐標:ComputeScreenPos/VPOS/WPOS

4.10 擴展閱讀

4.11 練習題答案

 

第2篇 初級篇

 

第5章 開始Unity Shader學習之旅

5.1 本書使用的軟件和環境

5.2 一個最簡單的頂點/片元著色器

5.2.1 頂點/片元著色器的基本結構

5.2.2 模型數據從哪裡來

5.2.3 頂點著色器和片元著色器之間如何通信

5.2.4 如何使用屬性

5.3 強大的援手:Unity提供的內置文件和變量

5.3.1 內置的包含文件

5.3.2 內置的變量

5.4 Unity提供的CG/HLSL語義

5.4.1 什麼是語義

5.4.2 Unity支持的語義

5.4.3 如何定義復雜的變量類型

5.5 程序員的煩惱:Debug 

5.5.1 使用假彩色圖像

5.5.2 利用神器:Visual Studio 

5.5.3 最新利器:幀調試器

5.6 小心:渲染平臺的差異

5.6.1 渲染紋理的坐標差異

5.6.2 Shader的語法差異

5.6.3 Shader的語義差異

5.6.4 其他平臺差異

5.7 Shader整潔之道

5.7.1 float、half還是fixed 

5.7.2 規範語法

5.7.3 避免不必要的計算

5.7.4 慎用分支和循環語句

5.7.5 不要除以0 

5.8 擴展閱讀

 

第6章 Unity中的基礎光照

6.1 我們是如何看到這個世界的

6.1.1 光源

6.1.2 吸收和散射

6.1.3 著色

6.1.4 BRDF光照模型

6.2 標準光照模型

6.2.1 環境光

6.2.2 自發光

6.2.3 漫反射

6.2.4 高光反射

6.2.5 逐像素還是逐頂點

6.2.6 總結

6.3 Unity中的環境光和自發光

6.4 在Unity Shader中實現漫反射光照模型

6.4.1 實踐:逐頂點光照

6.4.2 實踐:逐像素光照

6.4.3 半蘭伯特模型

6.5 在Unity Shader中實現高光反射光照模型

6.5.1 實踐:逐頂點光照

6.5.2 實踐:逐像素光照

6.5.3 Blinn-Phong光照模型

6.6 召喚神龍:使用Unity內置的函數

 

第7章 基礎紋理

7.1 單張紋理

7.1.1 實踐

7.1.2 紋理的屬性

7.2 凹凸映射

7.2.1 高度紋理

7.2.2 法線紋理

7.2.3 實踐

7.2.4 Unity中的法線紋理類型

7.3 漸變紋理

7.4 遮罩紋理

7.4.1 實踐

7.4.2 其他遮罩紋理

 

第8章 透明效果

8.1 為什麼渲染順序很重要

8.2 Unity Shader的渲染順序

8.3 透明度測試

8.4 透明度混合

8.5 開啟深度寫入的半透明效果

8.6 ShaderLab的混合命令

8.6.1 混合等式和參數

8.6.2 混合操作

8.6.3 常見的混合類型

8.7 雙面渲染的透明效果

8.7.1 透明度測試的雙面渲染

8.7.2 透明度混合的雙面渲染

 

第3篇 中級篇

 

第9章 更複雜的光照

9.1 Unity的渲染路徑

9.1.1 前向渲染路徑

9.1.2 頂點照明渲染路徑

9.1.3 延遲渲染路徑

9.1.4 選擇哪種渲染路徑

9.2 Unity的光源類型

9.2.1 光源類型有什麼影響

9.2.2 在前向渲染中處理不同的光源類型

9.3 Unity的光照衰減

9.3.1 用於光照衰減的紋理

9.3.2 使用數學公式計算衰減

9.4 Unity的陰影

9.4.1 陰影是如何實現的

9.4.2 不透明物體的陰影

9.4.3 使用幀調試器查看陰影繪製過程

9.4.4 統一管理光照衰減和陰影

9.4.5 透明度物體的陰影

9.5 本書使用的標準Unity Shader 

 

第10章 高級紋理

10.1 立方體紋理

10.1.1 天空盒子

10.1.2 創建用於環境映射的立方體紋理

10.1.3 反射

10.1.4 折射

10.1.5 菲涅耳反射

10.2 渲染紋理

10.2.1 鏡子效果

10.2.2 玻璃效果

10.2.3 渲染紋理vs. GrabPass 

10.3 程序紋理

10.3.1 在Unity中實現簡單的程序紋理

10.3.2 Unity的程序材質

 

第11章 讓畫面動起來

11.1 Unity Shader中的內置變量(時間篇) 

11.2 紋理動畫

11.2.1 序列幀動畫

11.2.2 滾動的背景

11.3 頂點動畫

11.3.1 流動的河流

11.3.2 廣告牌

11.3.3 註意事項

 

第4篇 高級篇

 

第12章 屏幕後處理效果

12.1 建立一個基本的屏幕後處理腳本系統

12.2 調整屏幕的亮度、飽和度和對比度

12.3 邊緣檢測

12.3.1 什麼是捲積

12.3.2 常見的邊緣檢測算子

12.3.3 實現

12.4 高斯模糊

12.4.1 高斯濾波

12.4.2 實現

12.5 Bloom效果

12.6 運動模糊

12.7 擴展閱讀

 

第13章 使用深度和法線紋理

13.1 獲取深度和法線紋理

13.1.1 背後的原理

13.1.2 如何獲取

13.1.3 查看深度和法線紋理

13.2 再談運動模糊

13.3 全局霧效

13.3.1 重建世界坐標

13.3.2 霧的計算

13.3.3 實現

13.4 再談邊緣檢測

13.5 擴展閱讀

 

第14章 非真實感渲染

14.1 卡通風格的渲染

14.1.1 渲染輪廓線

14.1.2 添加高光

14.1.3 實現

14.2 素描風格的渲染

14.3 擴展閱讀

14.4 參考文獻

 

第15章 使用噪聲

15.1 消融效果

15.2 水波效果

15.3 再談全局霧效

15.4 擴展閱讀

15.5 參考文獻

 

第16章 Unity中的渲染優化技術

16.1 移動平臺的特點

16.2 影響性能的因素

16.3 Unity中的渲染分析工具

16.3.1 認識Unity 5的渲染統計窗口

16.3.2 性能分析器的渲染區域

16.3.3 再談幀調試器

16.3.4 其他性能分析工具

16.4 減少draw call數目

16.4.1 動態批處理

16.4.2 靜態批處理

16.4.3 共享材質

16.4.4 批處理的註意事項

16.5 減少需要處理的頂點數目

16.5.1 優化幾何體

16.5.2 模型的LOD技術

16.5.3 遮擋剔除技術

16.6 減少需要處理的片元數目

16.6.1 控制繪製順序

16.6.2 時刻警惕透明物體

16.6.3 減少實時光照和陰影

16.7 節省帶寬

16.7.1 減少紋理大小

16.7.2 利用分辨率縮放

16.8 減少計算複雜度

16.8.1 Shader的LOD技術

16.8.2 代碼方面的優化

16.8.3 根據硬件條件進行縮放

16.9 擴展閱讀

 

第5篇 擴展篇

 

第17章 Unity的錶面著色器探秘

17.1 錶面著色器的一個例子

17.2 編譯指令

17.2.1 錶面函數

17.2.2 光照函數

17.2.3 其他可選參數

17.3 兩個結構體

17.3.1 數據來源:Input結構體

17.3.2 錶面屬性:SurfaceOutput結構體

17.4 Unity背後做了什麼

17.5 錶面著色器實例分析

17.6 Surface Shader的缺點

 

第18章 基於物理的渲染

18.1 PBS的理論和數學基礎

18.1.1 光是什麼

18.1.2 雙向反射分佈函數(BRDF) 

18.1.3 漫反射項

18.1.4 高光反射項

18.1.5 Unity中的PBS實現

18.2 Unity 5的Standard Shader 

18.2.1 它們是如何實現的

18.2.2 如何使用Standard Shader 

18.3 一個更加複雜的例子

18.3.1 設置光照環境

18.3.2 放置反射探針

18.3.3 調整材質

18.3.4 線性空間

18.4 答疑解惑

18.4.1 什麼是全局光照

18.4.2 什麼是伽馬校正

18.4.3 什麼是HDR 

18.4.4 那麼,PBS適合什麼樣的遊戲

18.5 擴展閱讀

18.6 參考文獻

 

第19章 Unity 5更新了什麼

19.1 場景“更亮了” 

19.2 錶面著色器更容易“報錯了” 

19.3 當家做主:自己控制非統一縮放的網格

19.4 固定管線著色器逐漸退出舞臺

 

第20章 還有更多內容嗎

20.1 如果你想深入瞭解渲染的話

20.2 世界那麼大

20.3 參考文獻