展开全部

主编推荐语

《Unity 3D着色器代码分析教程+参考手册》- 面向有Unity 3D开发经验的读者。

内容简介

本书不是一本3D图形编程入门书,也不是一本Unity 3D着色器编程入门书。本书的定位是“Unity 3D着色器代码分析教程+Unity 3D着色器编程参考手册”。因此,本书的目标读者是:有一定Unity 3D开发经验;学习过基础的Direct 3D/OpenGL图形编程,比如能知道“顶点”“纹理”和“着色器”是什么的概念和作用;了解“矩阵乘法”“四元数”和“坐标系变换”等数学等概念。

目录

  • 版权信息
  • 内容提要
  • 前言
  • 第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 定义和绘制场景中的几何体
  • 本书部分彩图
展开全部

评分及书评

尚无评分
目前还没人评分

出版方

人民邮电出版社

人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。