感谢所有点进来看的朋友。没错,我目前打算写一本关于Unity Shader的书。
出书的目的有下面几个:
总结我接触Unity Shader以来的历程,给其他人一个借鉴。我非常明白学Shader的艰难,在群里也见了很多人提出的问题。我觉得学习Shader还是一件有规律可循的事情,但问题是中文资料难觅,而大家又不愿意去看英文。。。这对我有什么好处呢?强迫我对知识进行梳理,对细节问题把握更清楚。
第二个原因你懂的。
关于本书的定位问题:
面向Unity Shader初学者,但要:
我写这本书的一个目标是,希望帮助初学者把基础打牢,没有基础任何上层建筑都是不可靠的。
我不是在写一本特效大全,所以你如果想要看到各种酷炫狂霸拽的特效,抱歉,这本书里几乎没有。这跟上一点有很大关系,仅靠一本书,我可以肯定一个初学者没有办法成为一个“Shader大神”。我希望所有读过这本书的人可以真正明白shader是个什么东西,而不是说:“哦,shader嘛,就是在Unity里右键Create->Shader得到的那个东西嘛”。关于特效大全的问题,如果将来我有十足的经验和资格了,可能会真的写一本,哈哈哈
写书是件很不容易的事情,希望我可以把它做好。
不少朋友留言或者发邮件问我什么时候出版,我比你们更着急呀……不过编辑说还在修改和排版,大概出版时间会在明年一月份(希望不会延期吧)。谢谢大家帮我起名字!我把一些大家起得名字拿给编辑看,以及和朋友讨论,最后还是暂定为《Unity Shader入门精要》。难听么?别打击我……下面有朋友起了很多萌萌哒的名字,利用下程序媛的身份,不过吧,感觉这个因人而异,说不定有人就不喜欢程序媛写的书呢……所以最后还是挑了这个比较严肃的名字,嗯。
书的封面我也找万能的设计师兰朋友设计啦~
还没出版所以打打水印。当然了,编辑只是同意用了,但是应该还会修改吧。不知道大家觉得封面怎么样……我是觉得萌萌哒,哈哈。
不好意思地告诉大家,书籍出版时间推迟了。编辑说由于北京雾霾,所以印刷厂没法大量印刷书籍,造成很多书籍堆压,因此就要到年后。承蒙大家厚爱,一直关心这本书的出版,很感动。有朋友说隔几天就来看一眼我又开心又觉得有点愧疚。如果你觉得总是来这里看很麻烦的话可以给我发个邮件:lelefeng1992 # gmail DOT com,我会把你的邮箱加到列表里,等出版后会给您发邮件通知。
再次感谢大家的支持,我和你们一样,希望早日看到书出版!
我把这本书分为五大篇章:
基础篇:这是很重要的一章,主要是为了初学者普及基本的理论知识,以及所需的数学基础。我明白很多人看不懂网上的一些材料,我尽量讲得通俗。
Shader初级篇:从最简单的shader开始,讲解shader中基础的光照模型、纹理、和透明效果等。同时,还会介绍一些shader的Debug技巧、shader里常见报错信息。
Shader中级篇:这是进阶篇章,将讲解更加复杂的光照、高级纹理、以及如何用shader实现动画等一系列进阶内容;
Shader高级篇:则涵盖了一些shader的高级用法,如使用缓冲区、实现屏幕特效、非真实感渲染等,同时,还会介绍一些优化技巧;
扩展篇:将会涵盖一些Unity Surface Shader背后的机制,还会针对Unity 5.0+版本中的一些新的特性进行简要分析。最后,希望向大家介绍一点学习shader的经验和资源。
目前目录已经初步定型,把目录记录在这里,但我会不断更新。
如果您对该书的目录和内容有任何意见和建议都可以在下方留言。如果您没有CSDN账号,也可以通过发邮件来告诉我:lelefeng1992 # gmail DOT com。我会根据您的意见对目录和内容做出一定的更改。
* 前言
* 这本书讲些什么
* 读这本书之前你需要哪些知识
* 谁适合读这本书
* 谁暂时还不适合读这本书
* 约定
* 读者反馈
* 本书源码
第1部分 基础篇
第1章 欢迎来到Shader的世界
第2章 渲染流水线
第3章 Unity Shader基础
第4章 学习Shader所需的数学基础
第2部分初级篇
第5章 开始Unity Shader学习之旅
第6章 Unity中的基础光照
第7章 基础纹理
第8章 透明效果
第3部分 中级篇
第9章 更复杂的光照
第10章 高级纹理
第11章 让画面动起来
第4部分 Shader高级篇
第12章 屏幕后处理效果
第13章 使用深度和法线纹理
第14章 非真实感渲染
第15章 使用噪声
第16章 Unity中的渲染优化技术
第5部分 扩展篇
第17章 Surface Shader探秘
第18章 基于物理的渲染
第19章 Unity 5更新了什么
第20章 还有更多内容吗
这几天在写数学的部分,早就料到数学是最难讲的一部分,尤其是矩阵。我和很多人一样,对矩阵这个家伙简直是”深恶痛绝“,看到它就想躲过去。无奈,shader里面要时常跟它打交道,那么,就勇敢地面对它吧!
我很明白,为什么我们会这么”讨厌“矩阵。如果说矢量这种我们还可以通过可视化的方法来直观地理解,那么,矩阵,这个放在一个小方框里的东西,就很难用画的方式把它画出来。而我们人的大脑又是很懒惰的(恩,我只能为我的大脑代言),没图你说个XXX!我才懒得记!
实际上,我一直对数学怀抱一种敬畏的心态。世界上有很多的数学家同时也是哲学家、心理学家,感觉数学对理解这个世界都有非常重要的意义,而且那些数学家的生平都很有意思,让人敬佩。能够将其一生都贡献给数学的人都很伟大的,那些创造矩阵、空间、矢量这些的人是多么伟大,怎么就会想到用这样一种方式来描述这种现象呢?这真的是件很神奇的事情。而且,你会发现,怎么这样算就可以表示出这种意思呢,明明看起来没有任何关系啊!这种巧合真的是让人感叹数学的伟大。
好了,不再歪歪……回到真实的世界……在写的过程中,我会尽量用通俗、幽默、有图示的方式来讲这一章,效果怎么样,我也很忐忑,会不会反映说看不懂?现在一切都不得而知……
一个有趣的事情是,在讲左右手坐标系和左右手法则的时候,我拿自己的手做了模型:
这几天一直在画图、看书、写文字、写公式(天哪,虽然用Markdown写公式已经很方便了,但一天要写那么多公式也真的是……)、算题,希望最后的结果是好的。加油吧!
写了两个多星期,把数学一章的草稿基本完成了。今天更新了第2、3、4章的目录,有兴趣的可以看一下,欢迎提出各种意见和建议。
数学篇是我最想好好写的一篇(当然啦,其他章我也会好好写。。。)。数学之所以难学,一部分是因为它的抽象性,没办法,如果我们想要把一些规律从生活中提取出来,就必然要涉及到各种数学符号,这就要用到抽象。我用了很多图和案例来尽量让这个过程更加形象易懂,也使用了一些类似对话的方式,来解释一些常见的疑惑。
目前,本书的第一篇——基础篇基本成型。基础篇里每一章都有个小节叫做答疑解惑,意在总结一些常见的疑惑点,如果读者除了我上面写到的几点外还有其他的困惑,可以给我留言。我会视情况添加到这一章节。
除此之外,在数学一章里我添加了练习题的部分。其实我是有犹豫的,觉得可能大家都会跳过去,那不是白写了。。。之所以要设置这个练习题的部分,一方面的确是希望读者可以通过这些练习真的拿笔算一下,说真的,数学你不多算真的永远学不会。另一方面,是想把一些容易混淆的点通过练习题的方式提出来,让读者自己算一下加深理解。因为如果要把这些混淆点都写进书里,思路上会比较乱。希望能起到比较好的效果吧。。。
下面就会真正开始Unity Shader的部分了。加油!
放假了大部分时间都拿来看资料、学习、写书了。半个多月写出了基本篇的草稿,不知道是快还是慢?我自信自己写的很详细了,比如第5章介绍了语义,第6章详细介绍了基本光照模型,第7章写到凹凸映射的时候也花了很大篇幅介绍实现的原理和细节,包括高度图,第8章的透明效果先介绍了渲染队列,我自己认为这个很重要的,应该在学习怎么实现透明之前就让读者知道渲染队列对透明来说是多么的重要。我觉得现在的安排对初学者足够友好了,当然写后面内容的时候可能还会对前面的内容进行改动,例如现在想在第4章数学里加一个在Unity脚本里的矩阵运算,但这本书是讲shader的,不知道加进去合不合适,但它的确是个容易出错的地方。
每次讲到新的内容时,我都尽量用图示来解释,每一幅图都是在OmniGraffle里认真做的,希望以后看到的人能get到我的意思。写书写太多感觉写博客都语无伦次了。。。
最近QQ群、私信和留言经常有人问题一些问题,我在这里统一回答一下。回答几个问题:
这书什么时候出版?
大家也看到了我的更新速度,目前写的了第8章(第一章介绍还没写),初步定的是19章,也就是说写了三分之一了,我现在大概花了一个多月,但是写书的确花费了很多时间,写完基本篇之后可能会放慢一下速度。总体来讲,我估测下大概还要三四个月的时间才能写完,因此出版的话最快年底,不然就是明年年初了。有一些人说太晚了,相信我,我比任何人都想让它赶紧出版,但是我不会影分身……好羡慕鸣人。
能不能增加些更高难度的技术?
一些童鞋大概看了前几章目录后觉得内容比较简单。怎么说呢,这本书的定位是面向初学者,因此肯定会是由易到难的,但我自信的是,即便是简单的内容我也写的很详细,很多很小的点也都写到了,很多地方都是其他资料里一带而过,而又很迷惑的点。如果是没有好好学过shader的,就算现在已经可以熟练写一些了我觉得这本书也是有用的。
更重要的是,我不想把它写成一本百科全书,一来我自己的确经验不够,写不来大全,二来我觉得一本大全的书肯定写不精、写不细,到头来又说看不懂怎么办?三来我觉得写shader是一个师傅领进门修行靠个人的活,一旦你了解了它的工作流程和基本思路,剩下的就是经验的积累,你看得写、写得多自然就厉害了,这不是一本基础书就可以让你做到的。
当然,我的确会写一些复杂的技术,这是高级篇和扩展篇的工作。如果你觉得有一些常用的复杂一些的技术想要在这本书里看到,可以告诉我。
是彩色书还是黑白书?
我自己当然希望是彩色书,一本讲画面效果的书竟然是黑白的那太遗憾了。不过编辑告诉我,彩色印刷会提高很多成本,那销量就会下降。我能够理解,但现在还没有一个定论,等写完之后会尽量争取。不过我也很好奇,大家觉得这样一本几百页的全彩书,你觉得多少价钱比较合适?
断断续续把中级篇的草稿完成了。越往后面写感觉内容的安排越费劲,一些内容不知道把它们归入到哪一章更加合适,放的早了一些内容没讲担心读者看不明白,放的晚了又觉得内容不足单独成章。高级篇想必也会这样。目录还在不断调整中……
写第9章光照简直是除数学篇外最痛苦的一章,想要讲明白非常难啊,不管怎样,目前的内容我尽力了,希望可以有好的效果。因为内容多而且杂,所以这一章不知不觉就写了四万字,也是目前字数最多的章节了。即便这样,仍然对一些内容“念念不忘”,例如菲尼尔光照、边缘光照等,不知道以后会不会加入进去。
话说,写书的时候发现一个不错的免费纹理网站——http://opengameart.org/,写书的时候有一些纹理是从这里找到的,在这里也推荐给大家。当然,也有自己画的一些纹理。之前做游戏的时候做了一个2D水面,这次把它的实现也添加到了书里面。
呼,还有两大篇整体草稿就完成了。有些内容想偷点懒,使用点博客里写过的。。。9月估计要赶论文,进度会更慢。预计完成大概要11月或者12月了,希望大家可以耐心等待。我会加油的。
恩,好久没更新了。由于9月份一直在弄别的事情所以写书的进程有些滞缓了,让大家久等了!不过还好,赶在11月之前把高级篇的草稿部分写完了,希望大家看了目录能够满意现在的内容。
第12章讲屏幕特效,好吧,我承认我原来没想写这么多的,因为我一开始就说过这不是一本特效大全。不过写着写着,就觉得,恩,高斯模糊很重要,不能删,恩,边缘检测很重要,因为可以和后面联系在一起,恩,这样运动模糊也不能删了(后面也有联系)。所以写着写着就写了很多,不过希望大家看了书可以对这些屏幕特效有所了解,知道它们实现的基本原理(其实本质上都差不多),这样在实现更复杂的屏幕特效时也会有头绪了。第13章讲深度和法线缓存。其实好像移动平台上用的比较少?不过我觉得这张内容非常适合扩展视野,让大家知道原来这些纹理还可以这么用,里面一些内容,比如运动模糊和全局雾效参考了GPU Gems里面的文章,其实GPU Gems也并没有那么复杂。第14章讲了非真实感渲染,这章并不是重点,主要也是为了扩展视野,我选了最流行的卡通风格和非常出名的素描风格来做个例子。第15章讲了噪声在shader中的应用,噪声的应用实在太广了。。。第16章是许多人要求的优化,恩,有四五个童鞋都联系我说希望学习一些优化,如你们所愿:)。这章的内容参考了之前我的一篇博客,不过当然不是原封不动啦。。。内容更详细了,并针对Unity 5做了一些调整和变化,希望对大家有所启发。高级篇的一个主要目的是为了开阔视野,了解更多技术,因此每一章后面都有扩展阅读部分,给出了我能找到的所有我认为非常好的资料,能列在这部分的资料,我都强烈建议读者去读一下,相信你一定会有非常大的收获。
好啦,最后放一些高级篇里实现的效果,欢迎大家提出意见和建议。
还有最后一篇扩展篇,计划讲一些关于Unity 5的PBR和类似于ShaderToy这样的内容,你怎么看?
恩,一直有人问我什么时候出版,具体时间我真不知道。写完最后一篇大概11月初,然后我还要重新读一遍所有内容,做些调整和修改。这大概也要花一个月吧,也就是12月了。而且可能还有实验室的事情要做,因此出版大概要明天年初了。希望大家能再等一下。不过,真的很感谢一直支持我的各位,说实话写到现在的确有些到了倦怠期,不过因为有很多支持和鼓励的声音给了很多新的动力,谢谢大家。还是希望大家如果对和书有关的任何建议都可以联系我,不胜感激:)
呜呼,不敢相信自己的速度,我竟然在11月赶出来了……截止到今天,书里面全部的20章内容就都完成了,上周已经对所有章节进行了我这方面的修改,然后交给编辑啦~我已经竭尽全力了,希望会有好的结果!
关于什么时候出版
编辑说大概还要一个多月吧,看我的内容需要多长时间排版,我会在博客里实时更新的(可能会开另一篇文章了吧)!
关于封面和书名
恩,其实之前给出版社写表格的时候填了个名字,《Unity Shader入门金典》,是不是觉得挺难听的……如果你有更好的名字一定要告诉我,如果最后使用了的话一定免费赠书!
封面的话,编辑说我可以提出自己的意见。我比较想用Shadertoy创始人iq的一些作品(http://www.iquilezles.org/www/articles/raymarchingdf/raymarchingdf.htm),比如下面这些(啊啊啊iq是我的偶像…):
这些效果只使用了一个pixel shader,是最好的展现shader能力的例子啊有木有!
打算后面给编辑看一下合不合适,然后再联系偶像iq征得许可权:)
这大概是最后一次更新这篇博客了,我上一周在改书的时候虽然对目录小改了下,但大部分内容就是上面这样的。期望后面一切顺利,再次感谢小伙伴们的支持!!!关于出版时间、书名和封面之类的我会在后面不断跟进的!