着色器Shader学习及编程技巧

1.Shader 编程技巧;2.Shader 编程优化案例;3.shader 编程模块化

着色器的例子都是从开源框架 GPUImage 中来的。

> Shader的学习方法总结- https://www.cnblogs.com/Esfog/p/How_To_Learn_Shader.htm
-- (1)书的话用来入门了解的有几本是我觉得可以看的,但适不适合要看你自己了:
   1. 《GPU编程与CG语言之阳春白雪下里巴人》,严格说这不是一本书,是网上盛传的新人学习的必读物。
   2. 《Cg Programming in Unity》,这是Wiki上的一系列UnityShader教程,不过现在可能需要FQ看了。
   3. 《Cg教程_可编程实时图形权威指南》,因为Unity的Shader大部分还是用CG语言来写的,这本书虽然年代有点早,但还是值得一看的,而且Nvidia的网站上有最最新的英文版。
   4. 《Unity Shader入门精要》candycat1992,小姑娘这本书绝对的值得一看的,虽然是面向入门级的,但是里面涉及了很多底层的,原理的性的内容。国内Unity书总算有本值得买的了。
-- (2)一般我们入了门以后还要去理解更多的知识(深入),我总结一下,大概有几方面:
   1. 首先要对渲染管线有个透彻的了解,至少要知道每一步发生了什么。很多学Unity从业者说会Shader也就只停留在前面那个语法层次了。如果连渲染管线都不知道,就不要再往简历写会Shader了。这方面的资料很多,candyCat1992那本书以及《计算机图形学-基于3D图形开发技术》都有,还有Trace大神搬运过来的一套教程。了解渲染管线,能让你对Shader里的很多用法都能有更深入的认识。
   2. 去学习OpenGL或者DirectX的知识(如果你经历足够可以双管齐下),看好,不是说HLSL或者GLSL这些Shader语法,而是OGL和DX。了解了渲染管线之后,再去了解一下图形API,试着动手写写,你才能真正的理解渲染管线的实际流程,以及那些被游戏引擎所隐藏起来的渲染逻辑。你也就能了解到Unity中的FBX模型里到底都放了什么数据,场景模型上的MeshFilter组件和MeshRenderer组件都是起什么作用的,等等。对这些图形API有了一定的掌握,不仅可以对渲染流程有更深入的了解,甚至可以自己开发一个简单的渲染引擎了。这方面的学习资料就太多了,学OGL就是红宝书,DX的话自然就是龙书。
   3. 再有很重要的一块就是图形算法,想要在通过Shader做出各种惊艳或者特殊的渲染效果,可不是只学会写Shader语法就可以做到的,就像大学里学程序设计后还要学习算法是一样的,图形渲染中也有大量的算法,从最基础的光照算法,到HDR,FXAA,Toon。再到最近次时代流行的PBR等等。有很多已经很成熟的算法,但这些算法不一定完全适合你的项目或者平台,所以必须了解他们改进它们,甚至研究出新的算法。这个过程估计是最痛苦的了,因为国内的资料不多,讨论的人也不多,算法中往往还涉及到大量的数学和物理知识。如果能持续不断的坚持学习和实践,那你也许就会是万千游戏开发大军中的的佼佼者。这方面的书虽然不多,基础类的我就不说了,很多书上都有,有一些大部头的经典如:《GPU Gems》系列,《Real-Time Rendering》,《Physically Based Rendering》。国内能读完这些书的人应该是是很少的。我自己还不到这个层次,不过也准备要开始塌下心来学习。还有一个论坛OpenGPU,也推荐给大家,不过这个不是入门向的,里面的大神太多了,不要在里面提太没营养的问题,会被鄙视的。
   4. 补补数学再学点物理知识吧。线性代数的重要性就不用我说了,如果能力和精力允许的话,就多补一补,我这数学渣就不多说话了,不过我也有时间会学一学的。这方面也有一些好的资料。我手头就有一本《Mathematics for 3D Game Programming and Computer Graphics》。这个我就不多说了,没事多学学,省着用到了挠头。  ......
 其实还有很多,比如把C++好好学一学,不过已经不要紧了,路很长,要怎么走还是要靠你自己。我也只是个一定意义上的入门者,不想误导别人。大家一起提高,互相帮助吧。

-- 在opengl中编写shader程序,主要有以下步骤:
 首先创建一个shader程序对象,然后分别创建相应的shader对象,比如顶点shader对象, 片元shader对象,并把它们连接到shader程序对象。在创建shader对象时候,需要装入shader源码,编译shader,链接到shader程序对象几个步骤。
-- OpenGL Shader材质渲染案例
OpenGL- https://blog.csdn.net/mahabharata_/article/category/6730626
【OpenGL】Shader实例分析- https://blog.csdn.net/stalendp/article/category/1628145
-- OpenGL Shader后处理渲染案例 ; Android opengl渲染yuv420例子
对Opengl中的帧缓冲的一些理解(延迟渲染,后处理等)- https://blog.csdn.net/z18636930051/article/details/78666679
咱们能在屏幕上看到东西,这是默认的帧缓冲的信息输出,这个帧缓冲里面包括,颜色缓冲,深度缓冲,模板缓冲等。
延迟渲染也是利用帧缓冲去完成的,不过都叫G-Buffer。延迟渲染主要有两个阶段:
第一阶段,我们先渲染场景一次,获取场景内物体的几何信息,位置,法线,颜色等信息,并存储再帧缓冲的纹理附件中,如下:
第二阶段,进行光照处理,恢复到默认帧缓冲,渲染一个屏幕大小的面片,并使用第一阶段的信息对每个面片进行光照处理。

-- GPU 加速下的图像处理 Opengl es shader- https://blog.csdn.net/xmutbbs2/article/details/44940673/

编写Shader时的一些性能考虑- https://www.cnblogs.com/sifenkesi/p/4716791.html
Unity but differently (ADDON Talk)- http://www.alkemi-games.com/

猜你喜欢

转载自blog.csdn.net/ShareUs/article/details/81461947