文章结构:
1、shader概述
2、GPU编程语言
3、ShaderLab基本语法
4、GPU管道流水线
shader概述
1、shader是给GPU执行的程序,中文名叫做着色器。是可以在GPU上运行的一段程序,通过Shader可以进行一些渲染相关的设置。
2、着色器是运行在图形处理单元GPU上,可以让程序直接操作图形硬件渲染功能。
3、shader能开发出很多好的效果。
4、渲染流水线,模型投影,定点着色。
5、Unity提供shader一般主要有:固定管线着色器,顶点片段着色器,表面着色器:
(1)固定管线着色器慢慢会被淘汰
(2)顶点shader:干预模型形态的shader;
(3)像素shader(片元shader):干预像素着色的shader;
6、模型定点运算时,可以加入顶点shader来干预顶点的位置;
顶点着色时,可以加入像素shader来干预像素的上色;
(一开始会被一些shader一些专业名词所困然如:固定管线着色器,顶点片段着色器,表面着色器,顶点着色器,片元着色器,像素着色器,我也纠结了好久)
注意:如果你是由丰富的的Cg开发经验的,好的选择就是直接使用vertex and fragment shader了。fixed function shader虽然简单,但能实现的效果非常有限。而surface shader是Unity3D提供的一种较为折中的方式,同样能实现较丰富的效果,但难度相对小很多。不过surface shader有一个问题,它不支持SubShader内部的多pass,所以某些需要多pass的效果要实现起来会比较困难。
GPU编程语言
1、基于OpenGL的GLSL
2、基于Direct3D的HLSL
3、NVIDIA公司的Cg语言(C for Graghic)
unity使用ShaderLab来进行着色程序的编写,对不同的平台进行编译重点支持Cg语言。
ShaderLab基本语法
Shader "ShaderName"{
[Properties]
//定义一些属性,定义在这里的会在属性检查器显示
SubShader{......}
//子着色器列表,一个shader必须至少有一个着色器
[Fallback]
//如果子着色器显卡不支持,就会降级,即Fallback执行
}

GPU管道流水线
CPU 和 GPU 之间的通信:
<1>把数据加载到显存中
<2>设置渲染状态
<3>调用Draw Call

绿色的区块表示:可以完全编辑程序控制的;黄色的区块表示:可以配置但是不可以编程;蓝色的区块表示:由GPU固定实现开发者没有控制权。实线表示shader必须由开发者编程实现,虚线表示这个shader是可以选择的。
CPUyuGPU:
https://www.jianshu.com/p/46916090da37
GPU管道流水线
https://www.jianshu.com/p/b55996eed36e
ShaderLab基本语法:https://www.cnblogs.com/Jason-c/p/8385946.html
Cg语言:
https://www.cnblogs.com/Jason-c/p/8390822.html
Surface Shader机制:
http://blog.csdn.net/candycat1992/article/details/39994049
顶点程序示例:https://www.cnblogs.com/Jason-c/p/8550078.html
片段程序示例:https://www.cnblogs.com/Jason-c/p/8558132.html
Surface Shader示例:https://www.cnblogs.com/Jason-c/p/8582238.html
Shader:http://blog.csdn.net/a6627651/article/details/50545643
U3D_Shader编程(第一篇:快速入门篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372071
U3D_Shader编程(第二篇:基础夯实篇):https://blog.csdn.net/VRunSoftYanlz/article/details/80372628