什么是Shader?
shader(着色器)就是专门用来渲染3D图形的一种技 术,通过shader,程序设计人员可以自己编写显卡渲染画面的算法,使画面更漂亮、更逼真。
一.GPU的渲染流程
1.计算机中的三维模型
计算机中的三维模型本质上是一组数据,包括空间中顶点的位置、发现方向、顶点颜色等等;
GPU就是通过包括三维模型在内的一系列数据进行计算,将结果提交给显示器显示的设备。
2.渲染的几个阶段
应用阶段:三维建模、场景搭建、灯光设置、贴图绘制;
几何阶段:顶点着色器、曲面细分、几何着色器、裁剪、映射;
光栅化阶段:三角形设置、三角形遍历、片元着色器、逐片元操作。
3.GPU与CPU的工作以及DrawCall

顶点着色器
输入:几何阶段的数据
工作:对每一个顶点调用顶点着色器,计算顶点的颜色和进行坐标变换
可编程性:可编程控制
几何着色器
输入:点线面等图元数据
工作:生成新的图元,逐图元的着色。是DirectX10引入的特征,利用GPU的特性生成新的细节,减轻CPU的负担。
可编程性:可选编程控制
裁剪
输入:点线面等图元数据
工作:裁剪无需渲染的部分,减轻后续流程的负担
可编程性:可以设置,不可编程
屏幕映射
输入:点线面等图元数据
工作:将坐标映射到屏幕坐标系
可编程性:不可编程
三角形设置
输入:顶点位置、颜色和深度等等
工作:得到三角形对屏幕像素的覆盖信息
可编程新:不可编程
三角形变换
输入:设置结果
工作:检查像素是否被三角形覆盖,如果是的话就生成片元,并且对片元内部的像素进行插值
可编程性:不可编程
片元着色器
输入:插值结果
工作:文理采样、计算光照结果等等
可编程性:可编程控制
逐片元操作
输入:片元像素颜色、深度等等
工作:混合和写入像素颜色
可编程性:可设置
其他 ---OpenGL与DirectX(图像应用接口)

其他

二.Unity3D-Shader的基本结构
Unity3D中提供的几种Shader

简易Shader介绍

SubShader中的Tags:

注意:SubShader中的Pass会依次被执行,一个SubShader中可以有很多Pass,可以给Pass指定名称
例如:Name "MyPass" 在其他Shader中调用这个Pass的时候后面Pass的名称要全部大写,比如UsePass "MyShader/MYPASS",因为Unity在处理MyPass的时候会全部大写处理。
SubShader中的渲染设置也可以用Pass。
Pass中Tags:
LightMode:指定Unity中渲染路径
RequireOptions:渲染这个Pass需要的条件
FallBack
FallBack是本Shader中的内容不被支持的时,选用那些低级的Shader替换
流程图

网友评论