Unity3D shader体系分析和学习总结

Unity3D shader体系分析和学习总结

原文地址:http://www.manew.com/thread-111468-1-1.html

背景


和广大游戏爱好者一样,自己也是一个游戏迷,曾经阅游戏无数,除了被丰富的游戏内容所吸引,另一个让人着迷的地方就是绚丽的游戏效果,真是一种视听的享受。所以儿时一直有一个梦想,想揭开游戏的秘密,其中关于游戏特效的秘密,现在终于不是高深莫测了,谈到游戏特效,就不得不提到Shader着色器语言,它生来就是处理光影效果的,掌握了这门知识,基本就掀开了游戏特效的面纱,剩下的事情就交给美术了。 但是我相信,很多一开始学习Shader语言的同学一定会发现网上的各种教程错终复杂,风门别类会有一种摸不着头脑的感觉。虽然有冯女神的《Unity Shader人门精要》和国外大神的《Unity着色器和屏幕特效开发秘笈》的神作,但Shader涉及的数学知识较多,作者为了顾及知识体系完整性和书籍篇幅限制,也未必能写的深入浅出,让大家读的轻松愉快。但是这里,还是强烈推荐大家购买和阅读这两本神作,虽然也有盗版电子版可以下载,这里敬请支持书作者的艰辛劳动和奉献分享精神。 下图是我学习Shader后,做的Shader的系统分类体系分析,便于总结和按照条目指引,引导大家进行学习。

体系图

Unity3D shader体系分析和学习总结

分析

1、按照类型划分
Unity3D shader体系分析和学习总结
一般正统的书籍资料都会将Shader分为:固定管线和可编程管线两类,其中固定管线主要是兼容一些老的显卡,没有可编程能力只能做一些纹理的固定融合操作,而现今主流的显卡和引擎一般都支持可编程管线,也是我们主要学习和编写的Shader。

2、按照游戏类型划分
Unity3D shader体系分析和学习总结
这里2D和3D游戏的Shader本质是不一样的,因为2D游戏主要处理的是图片数据也就是图像处理,而3D游戏主要处理的是图形也就是3D模型和贴图,知识体系不同,不过当彻底掌握以后,也是可以融会贯通的。

3、按照平台性能划分
Unity3D shader体系分析和学习总结
根据平台的硬件性能不同,我们需要对于Shader进行性能化差异编写,比如PC显卡性能较强当然可以写复杂计算,而手机平台受硬件限制必须考虑性能问题,对于Shader特效进行权衡和性能折中,这也是很多插件会明确指明是Mobile版本还是PC版本。

4、的创建Shader分类
Unity3D shader体系分析和学习总结
当知道了以上三种shader的分类方法后,当我们打开U3D,却发现有一种然并卵的感觉。U3D创建默认的Shader类型如上图所示,其中
Compute Shader是1中的固定管线Shader;剩下三种都是可编程管线类型。Ulit Shader是无光照Shader,Image Effect Shader是屏幕后期处理特效可以归结成一种截屏的2D shader,而Surface Shader是U3D为我们封装的可编程管线Shader。

5、功能效果划分
Unity3D shader体系分析和学习总结
我们按照排除法,从不常用到常用分别讲解下,
A、实时渲染和物理渲染都是非常耗性能的计算,需要很多复杂的物理光学知识,显示的效果也更加真实,但是能在手机游戏中几乎不会使用,必须在PC平台和专业设备中使用。
B、粒子效果配合及网格变换的shader的主要是需要配合特效师进行综合应用,当然如果对于shader编程已经很熟了,这部分也是小Case。
C、GPU并行计算,在游戏中应用主要是数量众多模型的批量渲染比如草地,角色方整动画等,还一个应用主要是现在比较火的深度学习等要求高性能并行计算的应用场景,当然这部分一般显卡都会提供原生的API,用U3D这样的封装的还是少一些。
D、屏幕特效处理,这个前面也说过主要是做屏幕的截图然后做2D图像处理,主要是来控制游戏的整体画风和效果,比如场景昏暗,明快,卡通和一些过场效果。
E、最后剩下的就是Shader中的三个常客了,光照模拟,纹理相关操作和渲染顺序及颜色变换,这三个方面是Shader中的基础中的基础,也是我们必须掌握的知识,在思维导图里面我也做了说明了,这里就不再赘述了。
总结
有了清晰的脉络和知识体系的分类,我们学习起来就有了理论指引,我想这样大家去看网络上的教程和文章,就可以自行分类和选择阅读,比如是讲实时渲染或者物理渲染的这种看起来效果很Cool但显然不适合初学者了,再比如看到GPU并行计算的当然也是有深度的留到以后再看吧。