unity之shader入门

1 渲染流水线

渲染流水线分为三个阶段,分别是应用阶段,几何阶段,光栅化阶段。

1.1 应用阶段:CPU实现,输出渲染图元。

数据加载到显存中:显卡对显存(VRAM)的访问速度比对内存(RAM)要快,并且大多数显卡对RAM没有访问权限。

设置渲染状态:定义场景中的网格是怎样被渲染的。

调用DrawCall:CPU通过调用DrawCall告诉CPU开始一个渲染过程,一个DrawCall会指向本次渲染图元列表

 

1.2 几何结算:GPU实现,输出屏幕空间的二位点坐标,深度,着色信息,传送给光栅化阶段。

顶点着色器:对输入的每个顶点都会调用一次顶点着色器,而且无法得到顶点与顶点之间的关系。顶点着色器的主要功能是坐标变换,把顶点坐标从模型空间转换到齐次裁剪空间。再由硬件进行透视除法,最终得到归一化的设备坐标。

裁剪:裁剪删除不在摄像机范围内的顶点。

屏幕映射:将x和y转到屏幕坐标系,z坐标无作为,但会被一起传进光栅化后发挥作用。

 

1.3 光栅化阶段:GPU实现,决定每个渲染图元哪些像素应该被绘制在屏幕上,将几何阶段传来的顶点数据进行插值。

三角形设置:计算光栅化一个三角网格所需的信息。

三角形遍历:检查每个像素是否被一个三角网格所覆盖,覆盖则赋予片元着色器。

片元着色器;对从顶点着色器来的数据进行插值数据完成很多渲染技术,最重要的一个是纹理采样。

逐片元操作;合并数据加操作,通过测试来决定每个片元的可见性。半透明物体必须开启混合操作。

 

2 shader入门

Shader(着色器)就是GPU执行的一段针对3D对象进行一系列操作的程序。

2.1 Unity中的Shader类型

Fixed function Shader :属于固定渲染管线 Shader, 基本用于高级Shader在老显卡无法显示时的回滚。 使用的是ShaderLab语言,语法与微软的FX files 或者NVIDIA的 CgFX类似。

Vertex and Fragment Shader:最强大的Shader类型,属于可编程渲染管线. 使用的是CG/HLSL语法。

Surface Shader:Unity3d推崇的Shader类型,使用Unity预制的光照模型来进行光照运算。 使用的也是CG/HLSL语法。

 

3 shader编写

简单的shader示例

unity之shader入门

unity之shader入门