《Unity Shader入门精要》出版了,估计万千的中国unity开发者又要掀起一波学Shader热潮了。我也想把自己这几年学习Shader的一些历程和心得记录下来。一来当给自己的学习做个记录,二来是给更多的后来人留些参考。
写之前先声明几点:
1. 本文标题中的Shader并不特指Unity Shader,本文也不涉及任何代码细节,仅是讨论学习方法。
2. 图形技术的水很深,我还只是个小学生,只是单纯的分享自己的学习历程,大神看到了别见怪。
3. 每个人的性格,思想都不一样,所以学习方法这种东西向来不是照搬照抄的,所以我说的不一定适合你,还需要自己取舍。
个人历程
容我讲讲自己学习Shader的经历,你会发现,入门并没有那么难,只要你肯下功夫。
《Cg教程_可编程实时图形权威指南》(后来第二本书我还想尽了办法弄到一本正版实体书收藏了)。就是这两本书,还有网上那些我已经忘却名字的很多前辈的分享,我开始一点一点的去了解Shader,了解图形渲染,渐渐的也就成了我的一个兴趣点。
《计算机图形学-基于3D图形开发技术》,这本书其实很早就读过,那时候实在是水平不够,看不懂还怨人家翻译差,后来再看了解了不少东西。
大概一年前,很巧合有一个机会来到了现在的公司进行了游戏引擎的开发。换工作之前也是想了很多,自己的图形渲染知识都是工作后自学的,之前两年的工作基本都是做Unity的逻辑开发工作,而且写引擎要用C++。当时还有很多机会,继续做Unity的开发工作,但还是横下心来做引擎,因为这是我这几年一直的想法,不论怎么样,有这机会就抓住,即使发现自己不适合,也会是一段很好的锻炼经历。笔试面试最后也过了。也算是对自己之前两年默默努力的一个回馈吧。
做引擎开发者一年以来,得以有机会近距离看到游戏引擎的原理,对OGL也有了更好的了解。也知道了所有的游戏引擎核心原理没什么大的不同。但这一年来,由于没有再接触Unity,所以blog里的Shader教程长期没有更新。最近又打算重新开写了。因为渲染这东西重要的是原理和引擎是无关的。有时间我会继续更新。
好吧,啰嗦了这么长(谁爱听啊!)。下面进入正题:
正确的理解Shader
很多人对Shader的理解都不同,特别是初学者,往往对Shader的认知是很肤浅的。大都认为Shader就是UnityShader,就是Unity引擎里一个用来创造画面效果的一种文件格式。
这也是我当初刚接触Shader的时候的认知。这当然是一叶障目,不见泰山了。如果要学好Shader,用好Shader,就不能只停留在了解和使用UnityShaderLab的语法的层次。这是远远不够的,因为当你深入学习的时候你就会发现,由于你不理解Unity为你提供的某一个ShaderLab参数的具体原理,导致你也不能正常使用,即使是可以使用也不能举一反三。
当然作为一个初学者,认知上的缺陷是难免的,但希望你在看到了这篇文章后,能看的更深远一些。Shader不只是指Unity的ShaderLab,也并不代表图形渲染的全部,它只是渲染流程上的一环,或者说是关键的一环。是很多很多步骤的结合作用才最终把画面正确的呈现出来。如果你真的想吃透Shader,用好Shader,这些东西都是你要去掌握理解的。那些渲染管线流程图什么的我就不拿过来粘贴了,本文只做学习方法总结,不讨论具体技术。
综上,饭要一口一口吃,知识也肯定是一点一点学,循序渐进持之以恒,但如果一开始就能比较全面和整体的理解Shader的定位,那么也会在学习过程中,也就不会太自以为是,学的太肤浅。
如何起步
其实现在比几年前好多了,有了不少资源,很多热心网友写的教程,也有几本还能看的书。
我还是谈谈我的建议,首先找个游戏引擎(当然你也可以不用引擎直接自己写OGL或DX),一本合适的书。unity当然是现在最容易上手的了,书的话用来入门了解的有几本是我觉得可以看的,但适不适合要看你自己了:
《GPU编程与CG语言之阳春白雪下里巴人》,严格说这不是一本书,是网上盛传的新人学习的必读物。
《Cg Programming in Unity》,这是Wiki上的一系列UnityShader教程,不过现在可能需要FQ看了。
《Cg教程_可编程实时图形权威指南》,因为Unity的Shader大部分还是用CG语言来写的,这本书虽然年代有点早,但还是值得一看的,而且Nvidia的网站上有最最新的英文版。
candycat1992,小姑娘这本书绝对的值得一看的,虽然是面向入门级的,但是里面涉及了很多底层的,原理的性的内容。国内Unity书总算有本值得买的了。
别问我为啥不推荐那本《Unity 3D ShaderLab开发实战详解》,前面已经说了。
有了书,打开引擎开始学,你需要的就是耐心和恒心了,我想学其他的知识也是一样吧。Shader的水很深,做好打持久战的准备,不断的练习,不断的尝试,不断的总结。
在学习过程中遇到问题是必然的,合理的使用搜索引擎,去论坛和站点和大家交流。保持一颗谦卑的心,别人总有比你强的地方,虚心的学习,慢慢的积累。如果你身边有一个可以请教的人,那就太好。就像我遇到Y君一样。
当你觉得自己入了一点门以后,就可以尝试着分析项目里的Shader代码了,结合着游戏中的实际效果,看看代码里用到了哪些你不知道的技术,或者说有什么你觉得不合理的地方。如果有机会,就尝试着申请在项目里实际写Shader的工作。这样的锻炼是难得的。可惜我当初做Unity时候没有这样的机会。
起步的一开始一定会是有些无从下手的感觉,度过这段时间,找到适合自己的节奏,就会有个很快速的学习积累过程。要坚持。
如何提高
刚接触Shader时候会有个迷茫期,其实当你学了一段时间,感觉自己学到了很多东西以后,也会有个迷茫期,不知道怎么进一步的提高自己,感觉自己该掌握的都已经掌握了,但是又写不出什么东西。
正如我在前面说的,我们总觉得自己好像该学的都学了,又感觉哪里好像没吃透。这说明我们还是没有触碰到我们学习内容的全貌,才只看到整个知识体系的冰山一角。所以一定会经历这个从觉得自己什么都会了,到感觉自己什么都不会了的转变。这个转变是必要的,它意味着你将了解到更深更广的知识。
废话不说了,一般我们入了门以后还要去理解更多的知识,我总结一下,大概有几方面:
一套教程。了解渲染管线,能让你对Shader里的很多用法都能有更深入的认识。
龙书。
OpenGPU,也推荐给大家,不过这个不是入门向的,里面的大神太多了,不要在里面提太没营养的问题,会被鄙视的。
《Mathematics for 3D Game Programming and Computer Graphics》。这个我就不多说了,没事多学学,省着用到了挠头。
...
其实还有很多,比如把C++好好学一学,不过已经不要紧了,路很长,要怎么走还是要靠你自己。我也只是个一定意义上的入门者,不想误导别人。大家一起提高,互相帮助吧。
最后几句心里话
其实无论别人看别人多少文章,多少教程,多少书,学习的路上往往都是没有捷径的,总要经历些坎坷和挫折。否则牛人怎么才是牛人呢,自己这几年的学习历程也是经历了很多,写这篇文章并不是能给大家提供什么捷径和速成法,只是给大家些勇气,希望大家少一些磕磕绊绊。像我这样的都能入个门,大家也一定可以的。
也希望大家,能乐于分享,让大环境更成熟起来,也希望能涌现更多的牛人。
http://www.cnblogs.com/Esfog/p/5537624.html
相关文章:
-
2021-10-06
-
2021-11-04
-
2022-01-02
-
2021-08-19
-
2021-07-22
-
2022-12-23
-
2022-12-23
猜你喜欢
-
2021-11-11
-
2022-12-23
-
2021-04-23
-
2022-03-03
-
2021-08-22
-
2021-11-23
-
2021-09-07
相关资源
-
下载
2023-02-04
-
下载
2023-01-15
-
下载
2023-04-02