万本电子书0元读

万本电子书0元读

顶部广告

Unity 3D 内建着色器源码剖析电子书

第 一本Unity源码分析的图书 联系辐射度学、光度学、色度学等物理理论,从物理学角度上阐述着色器所需要的基础知识 剖析内建着色器库中的若干工具库函数,阐述清楚原理,让读者深理解,能在发阶段中有效使用 剖析内建着色器库中的标准材质,以及若干常用的着色器程序的实现原理,让读者能深学习到当前流行的渲染技术的实现原理,并融会贯通到实际发工作中

售       价:¥

纸质售价:¥66.20购买纸书

212人正在读 | 0人评论 6.2

作       者:熊新科

出  版  社:人民邮电出版社有限公司

出版时间:2019-08-01

字       数:54.1万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(0条)
  • 读书简介
  • 目录
  • 累计评论(0条)
本书既是一本Unity 3D着色器代码分析教程,也是一本Unity 3D着色器编程参考手册。全书共12章,主要内容包括:实时3D渲染流水线,辐射度、光度和色度学基本理论,Unity 3D着色器系统,着色器工具函数,Unity 3D引擎的多例化技术,前向渲染和延迟渲染,Unity 3D的全局光照和阴影,UnityShadow Library.cginc文件分析,AutoLight.cginc文件分析,基于物理的光照模型,Unity 3D标准着色器和Standard. shader文件分析,片元着色器实时绘制图像实战案例。 本书适合Unity Shader的游戏发者、程序员阅读,也可供相关专业人士参考。<br/>【推荐语】<br/>第 一本Unity源码分析的图书 联系辐射度学、光度学、色度学等物理理论,从物理学角度上阐述着色器所需要的基础知识 剖析内建着色器库中的若干工具库函数,阐述清楚原理,让读者深理解,能在发阶段中有效使用 剖析内建着色器库中的标准材质,以及若干常用的着色器程序的实现原理,让读者能深学习到当前流行的渲染技术的实现原理,并融会贯通到实际发工作中<br/>【作者】<br/>熊新科,资深游戏发工程师。2003年游戏行业,先后参与多项游戏的发。乐于分享技术,活跃于各大Unity技术圈。<br/>
目录展开

内容提要

前言

第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函数版本1

8.2.5 UnitySampleShadowmap函数版本2

8.3 点光源生成的阴影

8.3.1 从立方体纹理贴图中取得纹素对应的深度值

8.3.2 对采样值进行混合计算

8.4 预烘焙的阴影

8.4.1 LPPV_SampleProbeOcclusion函数

8.4.2 UnitySampleBakedOcclusion函数版本1

8.4.3 UNITY_SAMPLE_TEX2D_SAMPLER宏的定义

8.4.4 UnitySampleBakedOcclusion函数版本2

8.4.5 UnityGetRawBakedOcclusions函数

8.4.6 UnityMixRealtimeAndBakedShadows函数

8.5 阴影的淡化处理

8.5.1 UnityComputeShadowFadeDistance函数和UnityComputeShadowFade函数

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 OneMinusReflectivityFromMetallic函数

11.9.3 DiffuseAndSpecularFromMetallic函数

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 CreateTangentToWorldPerVertex函数

11.9.11 ShadeSHPerVertex函数

11.9.12 ShadeSHPerPixel函数

11.9.13 BoxProjectedCubemapDirection函数

11.10 UnityImageBasedLighting.cginc的结构体、着色器变量、宏和函数

11.10.1 Unity_GlossyEnvironmentData结构体

11.10.2 UnityGlossyEnvironmentSetup函数

11.10.3 Unity_GlossyEnvironment函数

11.10.4 perceptualRoughnessToMipmapLevel函数

11.11 UnityGlobalIllumination.cginc的结构体、着色器变量、宏和函数

11.11.1 ResetUnityLight函数

11.11.2 SubtractMainLightWithRealtimeAttenuationFromLightmap函数

11.11.3 UnityGI_Base函数

11.11.4 UnityGI_IndirectSpecular函数

11.11.5 UnityGlobalIllumination函数版本1

11.11.6 UnityGlobalIllumination函数版本2

11.12 UnityStandardBRDF.cginc的结构体、着色器变量、宏和函数

11.12.1 PerceptualRoughnessToRoughness函数

11.12.2 RoughnessToPerceptualRoughness函数

11.12.3 SmoothnessToRoughness函数

11.12.4 SmoothnessToPerceptualRoughness函数

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 定义和绘制场景中的几何体

本书部分彩图

累计评论(0条) 0个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部