作为一名从业六年的游戏开发人员,搭过框架也做过优化。但是对图形渲染这块不了解。而游戏中酷炫逼真的效果又是由shader来控制实现的。所以想要提高自己技能就必须啃下shader这个硬骨头。
以下提供本人学习shader的心路历程。由于每个人学习方式不同,所以下面建议不适应所有人。学习过程如下:
1.作为一名客户端开发人员,首先要会应用shader做出上级分配的任务才是优先级最高的事情。几乎所有游戏引擎都提供了shader的上层封装,这也就更方便我们应用shader了。如:unity引擎中提供了unity shader,它是在底层图形api接口上做的一层封装,我们可以手写unity shader或者用unity的shader graph来拖拽实现想要的效果。unity shader的学习可以参考《Unity Shader入门精要》这本书,也可以参考本人unity shader专栏,里面是对《Unity Shader入门精要》学习的总结。
2.会应用shader后就需要去了解底层的实现了。虽然引擎帮我们封装了接口,也提供了工具去写引擎定制的shader来帮我们实现想要的效果。但是作为unity长期用户来说,unity的bug还真不少,谁知道某一天会不会在渲染这个给你来一个bug,虽然引擎最终会修复,但也是漫长的等待。此时就必须对引擎的渲染底层有所了解,这样出问题了知道是哪里的问题并立马进行修复或者给出替代解决方案,这一点很重要。
3.底层api选择:现在市面上主要有苹果公司的metal,微软公司的direct 3d以及跨平台的opengl。metal主要是针对苹果的a系列处理器做了优化,在苹果产品上的确性能很高。direct 3d主要在微软产品上应用,而且曾经跟opengl有场你死我活的api之争。但是很多开发者和硬件厂商还是选择支持opengl,就因为它的跨平台和高性能的特性。所以毫无悬念,本人这里也是选择opengl作为底层图形api学习的标准。
4.opengl的学习资料:首先要了解opengl的发展历程,这个https://www.cnblogs.com/George1994/p/6418013.html链接中记录了大部分的opengl版本变化,最新的opengl已经发布到4.6了,详细的版本信息可以参照opengl官网。现在市面上比较受欢迎的书籍就是《OpenGL超级宝典(中文第5版3.3或者英文第七版4.5)》和《OpenGL编程指南(中文第九版4.5)》。建议先学习opengl超级宝典第五版,虽然现在opengl已经到最新的4.6了,而超级宝典第五版里面只是到3.3,但是并没有关系,因为3.3到4.6之间的核心架构都没变,只是引进了一些新的功能以及改善了某些功能的实现而已。而且书中细节讲解的很清晰,还有大量的例子来佐证,非常适合opengl初学者。当看完超级宝典第五版后建议再学习下opengl编程指南第九版,该书针对opengl4.5版本,不仅引入了很多有意思和高大上的技能讲解,可以继续更深层次学习3.3往后的版本技能。还可以当做api参考书,无疑是opengl界的新华字典。
5.开始学习之旅啦!!!我会建立两个专栏,分别是opengl超级宝典第五版和opengl编程指南第九版。里面会总结学习的心得。有兴趣的朋友可以关注下。专栏会在周末空闲时间不定期更新,虽然历程有些漫长,但是静下心来慢慢撸,总会撸完的。