Unity Shader入门精要pdf下载

Unity Shader入门精要百度网盘pdf下载

作者:
简介:Unity Shader入门精要
出版社:人民邮电出版社
出版时间:2016-06-01
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

内容简介
  本书不仅要教会读者如何使用Unity Shader,更重要的是要帮助读者学习Unity中的一些渲染机制以及如何使用Unity Shader实现各种自定义的渲染效果,希望这本书可以为读者打开一扇新的大门,让读者离制作心目中杰出游戏的心愿更近一步。
  本书的主要内容为:第1章讲解了学习Unity Shader应该从哪里着手;第2章讲解了现代GPU是如何实现整个渲染流水线的,这对理解Shader的工作原理有着非常重要的作用;第3章讲解Unity Shader的实现原理和基本语法;第4章学习Shader所需的数学知识,帮助读者克服学习Unity Shader时遇到的数学障碍;第5章通过实现一个简单的顶点/片元着色器案例,讲解常用的辅助技巧等;第6章学习如何在Shader中实现基本的光照模型;第7章讲述了如何在Unity Shader中使用法线纹理、遮罩纹理等基础纹理;第8章学习如何实现透明度测试和透明度混合等透明效果;第9章讲解复杂的光照实现;第10章讲解在Unity Shader中使用立方体纹理、渲染纹理和程序纹理等高级纹理;第11章学习用Shader实现纹理动画、顶点动画等动态效果;第12章讲解了屏幕后处理效果的屏幕特效;第13章使用深度纹理和法线纹理实现更多屏幕特效;第14章讲解非真实感渲染的算法,如卡通渲染、素描风格的渲染等;第15章讲解噪声在游戏渲染中的应用;第16章介绍了常见的优化技巧;第17章介绍用表面着色器实现渲染;第18章讲解基于物理渲染的技术;第19章讲解在升级Unity 5时可能出现的问题,并给出解决方法;第20章介绍许多非常有价值的学习资料,以帮助读者进行更深入的学习。
  本书适合Unity初学者、游戏开发者、程序员,也可以作为大专院校相关专业师生的学习用书,以及培训学校的培训教材。
作者简介
  冯乐乐,一只喜欢计算机图形的程序媛。上海交通大学软件学院研究生,爱好写shader,喜欢一切用计算机绘画的技术。
目录
版权信息
前言
第1篇 基础篇
第1章 欢迎来到Shader的世界
1.1 程序员的三大浪漫
1.2 本书结构
第2章 渲染流水线
2.1 综述
2.2 CPU和GPU之间的通信
2.3 GPU流水线
2.4 一些容易困惑的地方
2.5 那么,你明白什么是Shader了吗
2.6 扩展阅读
第3章 Unity Shader基础
3.1 Unity Shader概述
3.2 Unity Shader的基础:ShaderLab
3.3 Unity Shader的结构
3.4 Unity Shader的形式
3.5 本书使用的Unity Shader形式
3.6 答疑解惑
3.7 扩展阅读
第4章 学习Shader所需的数学基础
4.1 背景:农场游戏
4.2 笛卡儿坐标系
4.3 点和矢量
4.4 矩阵
4.5 矩阵的几何意义:变换
4.6 坐标空间
4.7 法线变换
4.8 Unity Shader的内置变量(数学篇)
4.9 答疑解惑
4.10 扩展阅读
4.11 练习题答案
第2篇 初级篇
第5章 开始Unity Shader学习之旅
5.1 本书使用的软件和环境
5.2 一个最简单的顶点/片元着色器
5.3 强大的援手:Unity提供的内置文件和变量
5.4 Unity提供的Cg/HLSL语义
5.5 程序员的烦恼:Debug
5.6 小心:渲染平台的差异
5.7 Shader整洁之道
5.8 扩展阅读
第6章 Unity中的基础光照
6.1 我们是如何看到这个世界的
6.2 标准光照模型
6.3 Unity中的环境光和自发光
6.4 在Unity Shader中实现漫反射光照模型
6.5 在Unity Shader中实现高光反射光照模型
6.6 召唤神龙:使用Unity内置的函数
第7章 基础纹理
7.1 单张纹理
7.2 凹凸映射
7.3 渐变纹理
7.4 遮罩纹理
第8章 透明效果
8.1 为什么渲染顺序很重要
8.2 Unity Shader的渲染顺序
8.3 透明度测试
8.4 透明度混合
8.5 开启深度写入的半透明效果
8.6 ShaderLab的混合命令
8.7 双面渲染的透明效果
第3篇 中级篇
第9章 更复杂的光照
9.1 Unity的渲染路径
9.2 Unity的光源类型
9.3 Unity的光照衰减
9.4 Unity的阴影
9.5 本书使用的标准Unity Shader
第10章 高级纹理
10.1 立方体纹理
10.2 渲染纹理
10.3 程序纹理
第11章 让画面动起来
11.1 Unity Shader中的内置变量(时间篇)
11.2 纹理动画
11.3 顶点动画
第4篇 高级篇
第12章 屏幕后处理效果
12.1 建立一个基本的屏幕后处理脚本系统
12.2 调整屏幕的亮度、饱和度和对比度
12.3 边缘检测
12.4 高斯模糊
12.5 Bloom效果
12.6 运动模糊
12.7 扩展阅读
第13章 使用深度和法线纹理
13.1 获取深度和法线纹理
13.2 再谈运动模糊
13.3 全局雾效
13.4 再谈边缘检测
13.5 扩展阅读
第14章 非真实感渲染
14.1 卡通风格的渲染
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.4 减少draw call数目
16.5 减少需要处理的顶点数目
16.6 减少需要处理的片元数目
16.7 节省带宽
16.8 减少计算复杂度
16.9 扩展阅读
第5篇 扩展篇
第17章 Unity的表面着色器探秘
17.1 表面着色器的一个例子
17.2 编译指令
17.3 两个结构体
17.4 Unity背后做了什么
17.5 表面着色器实例分析
17.6 Surface Shader的缺点
第18章 基于物理的渲染
18.1 PBS的理论和数学基础
18.2 Unity 5的Standard Shader
18.3 一个更加复杂的例子
18.4 答疑解惑
18.5 扩展阅读
18.6 参考文献
第19章 Unity 5更新了什么
19.1 场景“更亮了”
19.2 表面着色器更容易“报错了”
19.3 当家做主:自己控制非统一缩放的网格
19.4 固定管线着色器逐渐退出舞台
第20章 还有更多内容吗
20.1 如果你想深入了解渲染的话
20.2 世界那么大
20.3 参考文献
欢迎来到异步社区!
看完了
前言
  前言
  2004年,有3位年轻人在开发他们的第一款游戏失利后,决定在丹麦首都哥本哈根建立一家游戏引擎公司。最初,他们的想法是要让全世界的开发人员可以使用最少的资源来创建出他们喜欢的游戏。谁也不曾想到,十年以后,这个起初并不起眼的公司已经发展成为游戏引擎公司巨头,而他们的游戏引擎也成为世界上应用最广泛的游戏引擎。没错,这个公司就是Unity Technologies,这3位年轻人分别是公司创始人David Helgason(CEO)、Nicholas Francis(CCO)和Joachim Ante(CTO)。而这3位创始人的初衷也得以实现,截止到2014年,全世界有超过300多万的开发者在使用游戏引擎Unity来开发游戏,更有6亿玩家在玩由Unity引擎制作的游戏。这股“Unity热”一直持续到现在。
  虽然Unity引擎上手快,操作界面简单快捷,但许多Unity开发者却发现,当他们需要在Unity中实现一些特殊的画面效果时,往往无从下手。这些画面效果的实现通常和渲染有关,更具体来说,我们通常需要在Unity中编写一些Unity Shader文件来实现它们。一方面,对渲染知识的缺乏和对Shader的不了解导致很多开发者在这条路上举步维艰;另一方面,对游戏画面的提升是越来越多游戏公司的诉求。然而,Unity官方文档中不仅缺少对渲染原理讲解的内容,对Unity Shader本身的一些工作机制(概括来说,Unity Shader是Shader上层的一个抽象)同样缺少相关资料。同时,市面上能适应初学者的Unity Shader书少之又少,基于这些原因,使得我想要编写这样一本书来帮助开发者渡过困境。
  本书旨在从基础开始,帮助读者逐渐了解并掌握如何编写Unity Shader。本书不仅仅是要教会读者“如何使用Unity Shader”,更重要的是要帮助读者建立对渲染流程的基本认识,在此基础上,帮助读者学习Unity中的一些渲染机制以及如何使用Unity Shader实现各种自定义的渲染效果。我相信,让读者首先了解原理再进行实践,相比于大量堆砌代码是更好的学习方法。因此,本书在开始实践前,均会为读者讲解大量的原理,让读者在学习时不再一头雾水。
  尽管本书专注于学习Unity Shader,但根据我的学习经验来看,在不了解基础的渲染流程和基本的数学知识前,想要深入学习Shader的编写是非常困难的。实际上,Shader仅是整个渲染流程的一个子部分,因此,任何脱离渲染流程的对Shader的讲解可能会让读者更加困惑。而向量运算、矩阵变换等数学知识在Shader的编写中无处不在,因此,这些数学知识往往也是让初学者对Shader望而却步的原因。基于上面的两点观察,本书的安排从易到难,由基础到深入。我们把全书分为了5篇,读者可以在第1章中看到这些章节的具体安排。
  
  随着硬件的发展,Shader的能力也越来越大。如果问你,一个Shader可以做什么?你可能会回答渲染游戏模型、模拟波动的海面、实现各种屏幕特效等。但如果告诉你,上面所示的3张图片完全依靠一个片元着色器来渲染实现,没有借助任何外部模型和纹理,你可能会觉得非常不可思议!读者可以在Shadertoy网站上看到许多这样的例子。例如,上面的小雨伞、五彩的小方块,以及飘动的气球(由于本书是黑白印刷,一些效果无法显现)。一个简简单单的Shader可以做到什么程度的效果,我们已经不可预期。本书的重点不在于教读者如何单纯使用Shader来实现上面的效果,而在于如何让Shader和其他游戏开发元素(例如,模型、纹理、脚本等)相配合,实现游戏中常见的渲染效果,我们在此只想说明Shader可能远比你想象的要强大得多。我们真诚地希望本书可以带领读者走进Shader的世界,让读者理解Shader、掌握Shader,和我们一起享受这样一个奇妙的游戏开发世界!
  读这本书之前你需要哪些知识
  本书面向Unity Shader初学者和程序员,尽量在本书的基础篇中介绍那些必要的基础知识,但仍然希望读者可以具备如下知识。
  • 有一定(或少量)的编程经验。尽管Unity Shader的编写语言不同于C++、C#这种高级语言,但相比于完全没有编程经验的读者来说,学习过这些高级语言的读者更加容易理解Shader的代码。例如,什么是变量、什么是函数等。对于那些缺少编程经验但仍对Shader有浓厚兴趣的读者,一个好消息是,在Unity的帮助下,编写Unity Shader的代码量并不多,因此,这些读者仍然可以阅读本书。
  • 对Unity引擎的操作界面比较熟悉。假定读者曾使用过一段时间的Unity,对其中的一些基本操作已经掌握。例如,如何创建场景、脚本和游戏对象等。
  • 保持一定的耐心。我曾听到身边的一些朋友抱怨,为什么自己总是看不懂、学不会Shader,难道是自己学习能力有问题吗?实际上,这些朋友大多对Shader的学习缺乏耐心,总是抱着今天看一下明天就会的心情。但不幸的是,与C++、C#高级语言相比来说,就算我们成功编写了Shader版的“Hello world”,但对于为什么要这么写、它们是怎么执行的等一系列基础问题我们仍然并不理解。这正是我之前提到的,要想彻底理解Shader,就必须了解整个渲染流水线的工作方式。因此,保持耐心,打好基础,是每一个想要深入学习Shader的开发者的必经之路。
  • 有一定的数学基础,包括了解基本的代数运算(如结合律、交换律等)、三角运算(如正弦、余弦计算等)。除此之外,如果读者具有大学水平的线性代数、微积分等数学知识,会发现阅读本书时会更加容易。为了帮助读者学习Shader中常见的数学运算,我们专门在本书的第4章为读者介绍向量、矩阵、空间变换等重要的数学内容。
  如果你满足上面几点小小的条件,那么恭喜你,现在你可以安心地继续阅读本书了!
  谁适合读这本书
  任何想要了解渲染基础或想要自由地使用Unity Shader编写渲染效果的开发者均可阅读本书。这些开发者不仅限于进行游戏开发的程序员,也包括那些渴望更加自由地在Unity中实现各种画面效果的美工人员、在校学生和爱好者等。
  为什么你需要这本书
  与国内市场已有的介绍相关内容的书籍和资料相比来说,本书有一些独有的特色。
  • 内容独特。本书填补了Unity Shader和渲染流水线之间的知识鸿沟,帮助读者打下良好的底层基础。同时,我们也会对Unity中一些渲染机制的工作原理进行详细剖析,帮助读者解决“是什么”“为什么”“怎么做”这3个基本问题。除此之外,本书配合大量实例,让读者在实践中逐渐掌握Unity Shader的编写。
  • 结构连贯。由于网络上关于Unity Shader的资料非常零散,许多初学者总是无法系统地进行学习。本书在内容编排上颇费心思,从基础到进阶再到深入的讲解,解决读者长期以来的学习烦恼。
  • 充分面向初学者。在本书的编写过程中,我一直在问自己,这么写到底读者能不能看懂?这使得在本书开头的几个章节中,尤其是在基础篇和初级篇中的章节中,我们的学习步调放得很慢,这是因为我非常了解在学习Shader的过程中哪些内容比较难理解,哪些内容非常容易让人困惑,而这些内容正是挡在初学者面前的拦路虎!为此,提供了大量的图示并配合文字说明,且在一些章节最后提供了“答疑解惑”小节来解释那些含糊不清而初学者又经常疑问的问题。考虑到数学往往是让初学者望而却步的重要因素,我们在第4章数学一章中特意安排了“农场游戏”这一背景案例,以这样一个虚拟的场景来帮助读者理解数学在渲染中是如何发挥作用的。
  • 包含了Unity 5在渲染方面的新内容。例如,本书多次介绍Unity 5中的新工具帧调试器(Frame Debugger),并借助该工具的帮助来理解Unity中的渲染过程;第18章中介绍了Unity 5的基于物理的渲染(PBR),我们较为详细地剖析了PBR的实现原理,并介绍了如何在Unity 5中使用它们来实现一些更加真实的渲染效果。需要注意的是,在本书编写时使用的版本为当时的最新版本Unity 5.2.1(免费版),但本书出版时Unity可能会发布更新的版本,这可能会造成一些操作界面与本书内容有所冲突。例如,在Unity 5.3中,帧调试器的界面更加丰富,包含了材质属性等显示信息,但这并不影响阅读,我们在本书的勘误网址上会更新(https://github.com/ candycat1992/Unity_Shaders_Book)。
  • 补充了大量延伸阅读资料。渲染领域的博大精深绝不是一本书可以涵盖的,因此,在本书一些章节的最后,提供了“扩展阅读”小节,让那些希望更加深入学习的读者可以在提供的资料中找到更多的学习内容。
  总而言之,我希望你可以从这本书中学到许多有价值的内容,并能够享受这个过程。相信我,这些内容很有趣。
  本书源代码
  读者可以在开源网站github(https://github.com/ candycat1992/Unity_Shaders_Book)上下载本书的源代码。在编写本书时,我们使用的是当时Unity的最新版Unity 5.2.1(免费版),并在Mac 10.9.5平台和Windows 8平台下验证了代码的正确性。本书源代码的组织方式大多按资源类型和章节进行划分,主要包含了以下关键文件夹。
  
  除了上述文件夹外,源代码中还包含了一些辅助文件夹。例如,Assets/Editor文件夹中包含了一些需要在编辑器状态下运行的脚本,Assets/Prefabs文件夹下包含了各章使用的预设模型和其他常用预设模型等。
  读者反馈
  尽管我们在本书的编写过程中多次检查内容的正确性,但书中难免仍然会出现一些错误,欢迎读者批评指正。读者可以将问题反映到本书源代码所在的github讨论页(https:// github.com/candycat1992/Unity_Shaders_Book/issues),此网址也是本书源代码下载地址,该地址中也包括本书示例彩色图文档。也可以发邮件(lelefeng1992@gmail.com)联系作者,本书答疑QQ群为438103099。
  编辑联系邮箱为zhangtao@ptpress.com.cn。
  致谢
  首先,我要感谢《Unity 3D ShaderLab开发实战详解》一书的作者郭浩瑜老师,是他向出版社的推荐才导致了本书的编写和出版,并给了我许多在书籍编写过程中的建议和帮助。
  感谢卢鹏先生,在本书编写过程中,我们进行了很多关于优化、效果实现等方面的讨论,这些讨论让本书的内容更加丰富。卢先生的乐于分享和好学的精神让我十分敬佩。
  我也要感谢我的家人,我的父母和姐姐,是你们在背后的默默支持让我走到了今天,永远爱你们。还要感谢我的男朋友之之,在我遇到瓶颈时,永远是你的鼓励和支持让我走出困境。也是你的帮助,让本书现在的封面得以呈现在读者面前。
  除此之外,从开始编写本书到完成之时,很多网友给了我莫大的鼓励和可贵的建议,我从未想到有这么多素未谋面的朋友在关注着本书的进展,感谢你们,是你们让我更加有动力写完本书。
  感谢宣雨松和罗盛誉老师在百忙之中为本书写推荐序,谢谢你们的鼓励和支持。
  最后,我要感谢人民邮电出版社的编辑张涛,是您的热情鼓励让我对本书的未来满怀希望。谢谢您对本书在内容编排、封面设计等方面的意见和建议,让这本书变得更好。感谢对本书进行修改和排版的出版社工作人员,是你们让这本书更完美地呈现在读者面前。
  作者
精彩书摘
  这是很重要的一篇,尽管在本篇中我们没有进行真正的代码编写,但本篇会为初学者普及基本的理论知识以及必要的数学基础,为读者顺利步入Unity Shader学习打下很好的基础。
  第1章 欢迎来到Shader的世界
  欢迎来到Shader的世界!我们曾不断听到周围有人提出类似的问题:“Shader是什么”“我应该看哪些书才能学好Shader”“学习Unity Shader,我应该从哪里着手”。我希望这本书可以告诉你这些问题的答案。让你离制作心目中优秀游戏的心愿更近一步。
  第2章 渲染流水线
  这一章讲解了现代GPU是如何实现整个渲染流水线的,这些内容对于理解Shader的工作原理有着非常重要的作用。
  第3章 Unity Shader基础
  这一章将讲解Unity Shader的实现原理和基本语法,同时也将为读者解答一些常见的困惑点。
  第4章 学习Shader所需的数学基础
  数学向来是初学者面对的一大学习障碍。然而,在初级阶段的渲染学习中,我们需要掌握的数学理论实际上并不复杂。这一章将为读者讲解渲染过程中常见的数学知识。这章内容可以帮助读者理解Shader中的数学运算,我们在讲解过程中以一个具体的例子来阐述“一头奶牛的鼻子是如何一步步被绘制到屏幕上的”。
  欢迎来到Shader的世界!我们曾不断听到周围有人提出类似的问题:“Shader是什么”“我应该看哪些书才能学好Shader”“学习Unity Shader,我应该从哪里着手”。我们希望这本书可以告诉你这些问题的答案。如果本书是你学习Shader的第一本书,我们希望这本书可以为你打开一扇新的大门,让你离制作心目中的优秀游戏的心愿更近一步;如果不是,我们同样希望这本书可以让你更深入地理解Shader的方方面面,在学习Shader的过程中更上一层楼。
  有人说,程序员的三大浪漫是编译原理、操作系统和图形学(是的,我已经听到很多人在反驳这句话了,不要当真啦)。不管你是否认同这句话,我们只是想借此说明图形学在程序员心目中的地位。正在看此书的你,想必多多少少都对图形学或者渲染有一定兴趣,也许你想要通过此书来学习如何实现游戏中的各种特效,也许你仅仅是好奇那些绚丽的画面是如何产生的。我们是程序员中的“外貌协会”,期待着用代码编写出一个绚丽多姿的世界。这就是我们的浪漫。
精彩插图