幫助中心 | 我的帳號 | 關於我們

Unity3D內建著色器源碼剖析

  • 作者:熊新科
  • 出版社:人民郵電
  • ISBN:9787115507044
  • 出版日期:2019/08/01
  • 裝幀:平裝
  • 頁數:334
人民幣:RMB 89 元      售價:
放入購物車
加入收藏夾

內容大鋼
    本書既是一本Unity 3D著色器代碼分析教程,也是一本Unity 3D著色器編程參考手冊。全書共12章,主要內容包括:實時3D渲染流水線,輻射度、光度和色度學基本理論,Unity 3D著色器系統,著色器工具函數,Unity 3D引擎的多例化技術,前向渲染和延遲渲染,Unity 3D的全局光照和陰影,UnityShadow Library.cginc文件分析,AutoLight.cginc文件分析,基於物理的光照模型,Unity 3D標準著色器和Standard. shader文件分析,片元著色器實時繪製圖像實戰案例。
    本書適合Unity Shader的遊戲開發者、程序員閱讀,也可供相關專業人士參考。

作者介紹
熊新科
    熊新科,資深遊戲開發工程師。2003年進入遊戲行業,先後參與多項遊戲的開發。樂於分享技術,活躍于各大Unity技術圈。

目錄
第1章  實時3D渲染流水線
  1.1  概述
  1.2  頂點處理階段
    1.2.1  頂點的組織方式
    1.2.2  坐標系統和頂點法線的確定方式
    1.2.3  把頂點從模型空間變換到世界空間
    1.2.4  把頂點從世界空間變換到觀察空間
    1.2.5  把頂點從觀察空間變換到裁剪空間
  1.3  光柵化階段
    1.3.1  裁剪操作
    1.3.2  透視除法
    1.3.3  背面剔除操作
    1.3.4  視口變換
    1.3.5  掃描轉換
  1.4  片元處理與輸出合併階段
    1.4.1  紋理操作
    1.4.2  輸出合併中的深度值操作
    1.4.3  輸出合併中的Alpha值操作
    1.4.4  Unity 3D ShaderLab中的Alpha混合指令及深度測試指令
第2章  輻射度、光度和色度學基本理論
  2.1  輻射度學基本理論
    2.1.1  立體角
    2.1.2  點光源、輻射強度和輻射亮度
    2.1.3  輻射出射度和輻射入射度
  2.2  光度學基本理論
  2.3  色度學基本理論
    2.3.1  什麼是顏色
    2.3.2  顏色的數字化及CIE1931-RGB顏色模型
    2.3.3  CIE1931-XYZ顏色模型
    2.3.4  CIE1931-Yxy顏色模型
  2.4  伽馬校正和sRGB顏色空間
    2.4.1  伽馬校正
    2.4.2  sRGB顏色空間
    2.4.3  Unity 3D中的伽馬空間和線性空間
第3章  Unity 3D著色器系統
  3.1  從一個外觀著色器程序談起
    3.1.1  BasicDiffuse著色器展開后的代碼分析
    3.1.2  外觀著色器的編譯指示符
    3.1.3  傳給外觀著色器函數的參數
  3.2  直接編寫頂點著色器和片元著色器
    3.2.1  用Cg語言編寫的包含著色器功能的代碼片段
    3.2.2  聲明目標渲染器
    3.2.3  著色器的語義
  3.3  在Cg代碼中訪問著色器屬性塊
    3.3.1  在著色器代碼中聲明材質屬性
    3.3.2  在著色器代碼中聲明對應于材質屬性的變數
  3.4  使用著色器多樣體處理多種情況
    3.4.1  編譯指示符multi_compile和shader_feature的使用方式與區別
    3.4.2  多樣體關鍵字的使用限制
    3.4.3  內置的multi_compile指示符快捷使用方式

  3.5  多平台著色器代碼的支持
  3.6  確定著色器編譯器的版本
    3.6.1  和著色器編譯器版本相關的宏
    3.6.2  消除著色器代碼中各平台的語義差異性
    3.6.3  關閉可忽視的編譯警告
    3.6.4  Unity 3D Shader的基本數據類型
    3.6.5  消除平台差異性
    3.6.6  統一著色器常量緩衝區的宏定義
    3.6.7  HLSL語言中的分支預測特性
第4章  引擎提供的著色器工具函數和數據結構
  4.1  UnityShaderVariables.cginc文件中的著色器常量和函數
    4.1.1  進行變換操作用的矩陣
    4.1.2  和攝像機相關的常量緩衝區
    4.1.3  與光照相關的工具函數和內置光源
    4.1.4  與陰影相關的著色器常量緩衝區
    4.1.5  與逐幀繪製調用相關的著色器常量緩衝區
    4.1.6  與霧效果相關的常量緩衝區
    4.1.7  與光照貼圖相關的常量緩衝區
  4.2  UnityCG.cginc文件中的工具函數和宏
    4.2.1  數學常數
    4.2.2  與顏色空間相關的常數和工具函數
    4.2.3  描述頂點布局格式的結構體
    4.2.4  用於進行空間變換的工具函數
    4.2.5  與光照計算相關的工具函數
    4.2.6  與HDR及光照貼圖顏色編解碼相關的工具函數
    4.2.7  把高精度數據編碼到低精度緩衝區的函數
    4.2.8  法線貼圖及其編解碼操作的函數
    4.2.9  線性化深度值的工具函數
    4.2.10  合併單程立體渲染時的左右眼圖像到一張紋理的函數
    4.2.11  用來實現圖像效果的工具函數和預定義結構體
    4.2.12  計算屏幕坐標的工具函數
    4.2.13  與陰影處理相關的工具函數
    4.2.14  與霧效果相關的工具函數和宏
第5章  Unity 3D引擎的多例化技術
  5.1  多例化技術概述
    5.1.1  不使用GPU多例化技術繪製多個相同模型的偽代碼
    5.1.2  在Direct3D 11中設置輸入組裝階段的示例偽代碼
    5.1.3  設置頂點輸入組裝布局
    5.1.4  頂點著色器和片元著色器中對使用GPU多例化技術的對應設置
  5.2  如何在材質中啟用多例化技術
  5.3  添加逐實例數據
    5.3.1  在外觀著色器中給材質顏色變數增加GPU多例化支持的代碼
    5.3.2  在C#層改變game object中的多例化材質顏色屬性
  5.4  在頂點著色器和片元著色器中使用多例化技術
    5.4.1  在頂點著色器和片元著色器中啟用GPU多例化技術
    5.4.2  UNITY_VERTEX_INPUT_INSTANCE_ID宏的定義
    5.4.3  DEFAULT_UNITY_VERTEX_INPUT_INSTANCE_ID宏的定義
    5.4.4  UNITY_INSTANCING_BUFFER_START及另外兩個配套的宏的定義
    5.4.5  UNITY_INSTANCED_ARRAY_SIZE宏的定義
    5.4.6  UNITY_SETUP_INSTANCE_ID宏的定義

    5.4.7  DEFAULT_UNITY_SETUP_INSTANCE_ID和UNITY_TRANSFER_INSTANCE_ID宏的定義
    5.4.8  著色器常量緩衝區UnityDrawCallInfo的定義
5.4.9 5.4.1節中展開多例化相關的宏之後的代碼
第6章  前向渲染和延遲渲染
  6.1  前向渲染概述
  6.2  延遲渲染概述
  6.3  Unity 3D中的各種渲染途徑
    6.3.1  Unity 3D的前向渲染途徑細節
    6.3.2  Unity 3D的延遲渲染途徑細節
第7章  Unity 3D的全局光照和陰影
  7.1  全局照明和局部照明
  7.2  引擎提供的光源類型
    7.2.1  點光源
    7.2.2  聚光燈光源
    7.2.3  有向平行光源
    7.2.4  區域面光源
    7.2.5  cookie
  7.3  使用實時模式光源進行全局照明
  7.4  使用烘焙式光照貼圖進行全局照明
  7.5  使用混合光照進行全局照明
    7.5.1  Baked Indirect照明模式
    7.5.2  Shadowmask照明模式
    7.5.3  Subtractive照明模式
  7.6  光探針照明的細節
    7.6.1  光探針照明概述
    7.6.2  在場景中布置光探針
    7.6.3  使用光探針
    7.6.4  光探針代理體
    7.6.5  反射用光探針
  7.7  探討基於球諧函數的全局光照
    7.7.1  半球空間的光照方程
    7.7.2  蒙特卡洛積分估演算法的定義
    7.7.3  球諧函數
    7.7.4  正交對偶基函數和球諧光照
    7.7.5  Unity 3D中的球諧光照
  7.8  引擎中的渲染陰影的功能
    7.8.1  在光源空間中確定產生陰影的區域
    7.8.2  在屏幕空間中確定產生陰影的區域
    7.8.3  如何啟用陰影
    7.8.4  透視走樣和層疊式陰影貼圖
第8章  UnityShadowLibrary.cginc 文件分析
  8.1  陰影與全局照明系統的關係
  8.2  聚光燈光源生成的陰影
    8.2.1  啟用SPOT宏
    8.2.2  UNITY_DECLARE_SHADOWMAP宏的定義
    8.2.3  SAMPLE_DEPTH_TEXTURE及類似的宏
    8.2.4  UnitySampleShadowmap函數版本
    8.2.5  UnitySampleShadowmap函數版本
  8.3  點光源生成的陰影
    8.3.1  從立方體紋理貼圖中取得紋素對應的深度值

    8.3.2  對採樣值進行混合計算
  8.4  預烘焙的陰影
    8.4.1  LPPV_SampleProbeOcclusion函數
    8.4.2  UnitySampleBakedOcclusion函數版本
    8.4.3  UNITY_SAMPLE_TEX2D_SAMPLER宏的定義
    8.4.4  UnitySampleBakedOcclusion函數版本
    8.4.5  UnityGetRawBakedOcclusions函數
    8.4.6  UnityMixRealtimeAndBakedShadows函數
  8.5  陰影的淡化處理
    8.5.1  UnityComputeShadowFadeDistance函數和UnityCompute
ShadowFade函數
    8.5.2  梯度計算
  8.6  計算深度陰影的偏移值
    8.6.1  UnityGetReceiverPlaneDepthBias函數
    8.6.2  UnityCombineShadowcoordComponents函數
  8.7  PCF陰影過濾的相關函數
    8.7.1  UnitySampleShadowmap_PCF3x3NoHardwareSupport函數
    8.7.2  用於進行PCF過濾的輔助函數
    8.7.3  執行PCF過濾操作的函數
    8.7.4  基於3×3內核高斯模糊的PCF過濾操作
第9章  AutoLight.cginc文件分析
  9.1  DIRECTIONAL宏的定義
  9.2  有向平行光產生的基於屏幕空間的陰影的相關函數
    9.2.1  啟用UNITY_NO_SCREENSPACE_SHADOWS宏時TRANSFER_SHADOW宏的定義
    9.2.2  啟用UNITY_NO_SCREENSPACE_SHADOWS宏時的unitySampleShadow函數
    9.2.3  未啟用UNITY_NO_SCREENSPACE_SHADOWS宏時TRANSFER_SHADOW宏的定義
    9.2.4  UNITY_SAMPLE_SCREEN_SHADOW宏和UNITY_DECLARE_SCREENSPACE_ SHADOWMAP宏的定義
    9.3 Unity 3D 5.6  版本后的陰影和光照計算工具函數
    9.3.1  UnityComputeForwardShadows函數
    9.3.2  不同編譯條件下的UNITY_SHADOW_COORDS、UNITY_TRANSFER_SHADOW和UNITY_SHADOW_ATTENUATION宏的定義
    9.3.3  計算點光源的光亮度衰減的宏
    9.3.4  計算聚光燈光源的光亮度衰減的宏
    9.3.5  計算有向平行光源的光亮度衰減的宏
    9.3.6  計算帶cookie的點光源的光亮度衰減的宏
    9.3.7  計算帶cookie的有向平行光源的光亮度衰減的宏
第10章  基於物理的光照模型
  10.1  漫反射和Lambert光照模型
  10.2  鏡面反射和Phong光照模型
  10.3  Blinn-Phong光照模型
  10.4  基於物理的光照模型的相關概念
    10.4.1  光的折射和折射率
    10.4.2  均勻介質
    10.4.3  散射
    10.4.4  雙向反射分佈函數
    10.4.5  菲涅爾反射
    10.4.6  微表面和Cook-Torrance模型
    10.4.7  定義菲涅爾方程
    10.4.8  Cook-Torrance BRDF模型
第11章  Unity 3D標準著色器和 Standard.shader文件分析
  11.1  標準著色器中的各項材質屬性

    11.1.1  Rendering Mode屬性
    11.1.2  Albedo屬性
    11.1.3  Metal屬性
    11.1.4  Smoothness屬性
    11.1.5  Normal Map屬性
    11.1.6  Height Map屬性
    11.1.7  Occlusion屬性
    11.1.8  Emission屬性
    11.1.9  Secondary Map屬性
    11.1.10  Detail Mask屬性
  11.2  Standard.shader中的屬性變數
    11.2.1  Standard.shader代碼段中的屬性變數
    11.2.2  Standard.shader代碼段中的MetallicSetup函數
  11.3  第一個SubShader的前向通路
    11.3.1  前向通路的簡化版頂點著色器入口函數
    11.3.2  前向通路的簡化版片元著色器入口函數
    11.3.3  前向通路的簡化版著色器流程
    11.3.4  前向通路的標準版頂點著色器入口函數
    11.3.5  前向通路的標準版片元著色器入口函數
    11.3.6  前向通路的標準版著色器流程
  11.4  第一個SubShader的FORWARD_DELTA通路
    11.4.1  FORWARD_DELTA通路的簡化版頂點著色器入口函數
    11.4.2  FORWARD_DELTA通路的簡化版片元著色器入口函數
    11.4.3  FORWARD_DELTA通路的簡化版著色器流程
    11.4.4  FORWARD_DELTA通路的標準版頂點著色器入口函數
    11.4.5  FORWARD_DELTA通路的標準版片元著色器入口函數
    11.4.6  FORWARD_DELTA通路的標準版著色器流程
  11.5  第一個SubShader的ShadowCaster通路
    11.5.1  ShadowCaster通路的編譯指示符以及著色器變數和宏
    11.5.2  ShadowCaster通路的頂點著色器入口函數
    11.5.3  ShadowCaster通路的片元著色器入口函數
  11.6  第一個SubShader的延遲通路
    11.6.1  延遲通路的頂點著色器入口函數
    11.6.2  延遲通路的片元著色器入口函數
  11.7  第一個SubShader的元渲染通路
    11.7.1  元渲染通路的頂點著色器入口函數
    11.7.2  元渲染通路的片元著色器入口函數
  11.8  UnityStandardInput.cginc的結構體、著色器變數、宏和函數
    11.8.1  文件中預定義的宏
    11.8.2  VertexInput結構體
    11.8.3  TexCoords函數
    11.8.4  DetailMask函數
    11.8.5  Albedo函數
    11.8.6  Alpha函數
    11.8.7  Occlusion函數
    11.8.8  MetallicGloss函數
    11.8.9  Emission函數
    11.8.10  NormalInTangentSpace函數
    11.8.11  Parallax函數
  11.9  UnityStandardUtils.cginc的結構體、著色器變數、宏和函數

    11.9.1  PreMultiplyAlpha函數
    11.9.2  OneMinusReflectivityFrom Metallic函數
    11.9.3  DiffuseAndSpecularFrom Metallic函數
    11.9.4  LerpWhiteTo函數
    11.9.5  LerpOneTo函數
    11.9.6  ParallaxOffset1Step函數
    11.9.7  UnpackScaleNormalRGorAG函數
    11.9.8  UnpackScaleNormal函數
    11.9.9  BlendNormals函數
    11.9.10  CreateTangentToWorldPer Vertex函數
    11.9.11  ShadeSHPerVertex函數
    11.9.12  ShadeSHPerPixel函數
    11.9.13  BoxProjectedCubemap Direction函數
  11.10  UnityImageBasedLighting.cginc的結構體、著色器變數、宏和函數
    11.10.1  Unity_GlossyEnvironmentData結構體
    11.10.2  UnityGlossyEnvironmentSetup 函數
    11.10.3  Unity_GlossyEnvironment函數
    11.10.4  perceptualRoughnessTo MipmapLevel函數
  11.11  UnityGlobalIllumination.cginc的結構體、著色器變數、宏和函數
    11.11.1  ResetUnityLight函數
    11.11.2  SubtractMainLightWithReal timeAttenuationFromLightmap函數
    11.11.3  UnityGI_Base函數
    11.11.4  UnityGI_IndirectSpecular函數
    11.11.5  UnityGlobalIllumination函數版本
    11.11.6  UnityGlobalIllumination函數版本
  11.12  UnityStandardBRDF.cginc的結構體、著色器變數、宏和函數
    11.12.1  PerceptualRoughnessTo Roughness函數
    11.12.2  RoughnessToPerceptual Roughness函數
    11.12.3  SmoothnessToRoughness函數
    11.12.4  SmoothnessToPerceptual Roughness函數
    11.12.5  Pow4函數的4個不同版本
    11.12.6  Pow5函數的4個不同版本
    11.12.7  FresnelTerm函數
    11.12.8  FresnelLerp函數
    11.12.9  FresnelLerpFast函數
    11.12.10  DisneyDiffuse函數
    11.12.11  SmithJointGGXVisibilityTerm函數
    11.12.12  GGXTerm函數
    11.12.13  BRDF3_Indirect函數
    11.12.14  BRDF3_Direct函數
    11.12.15  BRDF3_Unity_PBS函數
    11.12.16  BRDF2_Unity_PBS函數
    11.12.17  BRDF1_Unity_PBS函數
  11.13  UnityGBuffer.cginc的結構體、著色器變數、宏和函數
    11.13.1  UnityStandardData結構體
    11.13.2  UnityStandardDataToGbuffer函數
  11.14  UnityMetaPass.cginc的結構體、著色器變數、宏和函數
    11.14.1  UnityMetaPass常量緩衝區
    11.14.2  UnityMetaInput結構體
    11.14.3  UnityMetaVertexPosition函數

    11.14.4  UnityMetaFragment函數
第12章  實戰—在片元著色器用演算法實時繪製圖像
  12.1  搭建繪圖環境
  12.2  設計繪製場景的著色器
    12.2.1  頂點著色器所需的數據結構和實現
    12.2.2  判斷某點是否在三角形內
    12.2.3  基於距離場判定片元的顏色
    12.2.4  定義五角星幾何體數據
    12.2.5  判斷某點是否在圓及矩形內
    12.2.6  定義和繪製場景中的幾何體

  • 商品搜索:
  • | 高級搜索
首頁新手上路客服中心關於我們聯絡我們Top↑
Copyrightc 1999~2008 美商天龍國際圖書股份有限公司 臺灣分公司. All rights reserved.
營業地址:臺北市中正區重慶南路一段103號1F 105號1F-2F
讀者服務部電話:02-2381-2033 02-2381-1863 時間:週一-週五 10:00-17:00
 服務信箱:bookuu@69book.com 客戶、意見信箱:cs@69book.com
ICP證:浙B2-20060032