- 最后登录
- 2019-12-25
- 注册时间
- 2012-8-24
- 阅读权限
- 90
- 积分
- 71088
- 纳金币
- 52336
- 精华
- 343
|
來自:zzzsss 分享
UnityShader来来回回学习很多次,也放弃很多次了。这次又想学一下,之前没有记录,所以这次想记一下重点。
一、Unity中的模型数据
SkinMeshRenderer 或者 MeshRenderer + MeshFilter 在读取了读本模型数据后,将顶点信息,三角面信息,法线,切线之类的传递给GPU。
SkinMeshRenderer包含骨骼蒙皮信息。
二、渲染管线
GPU接收到数据
1.顶点着色器 将顶点从模型坐标转换到相机坐标 (有多少顶点就会执行多少次)
2.光栅化 将顶点信息转换为像素,每个顶点对应一个像素点,颜色为顶点颜色,中间部分进行插值处理
3.片段着色器 对每个像素点进行处理,增加光照之类的(有多少像素点,执行多少次),贴图颜色
4.alpha测试 对每个像素进行alpha比对,去掉不符合要求的像素
5.模板测试 对每个像素进行模板比对,去掉不符合要求的像素
6.深度测试 对每个像素进行深度比对,去掉不符合要求的像素
7.深度测试 对每个像素进行深度比对,去掉不符合要求的像素
8.blend 混合同一个像素点的颜色
9.Gbuffer 每个像素点的缓存,除了颜色,还有模板信息、深度之类的
10.FrontBuffer/FrameBuffer 两个缓冲区,存储当前需要显示和下一帧需要显示的像素颜色数据
三、Shader基本结构
Shader “name” //Shader名字
{
propertise{ //属性
}
SubShader //可以有多个,按顺序寻找符合当前显卡的subshader 只会执行一个subshader
{
Cull Off //每个Pass都遵循这个定义 公共区域
Pass //可以有多个Pass,每一个pass都会渲染一次,每个pass都会执行
{
CGPROGRAM //和ENDCG成对使用,表示中间属于CG语言
ENDCG
}
}
FallBack "diffuse" //所有subshader都不符合,就寻找自带的shader
}
四、Propertise 结构
name("_name",int) = 1
name: 变量的名字,代码中使用时的名字
_name: 面板中显示的名字 ,供外界参考
int : 变量的类型
1 :初始值
变量类型:
int :整数 1
float :浮点型 1.0
range :范围 range(2,8) =5
color:颜色 (1,1,1,1)
vector: 四维数组 (1,1,1,1)
2D: 图片 ”white“{}
cube:六面的纹理 ”“{}
3D:3D的纹理 ”“{} 不常用 只能在脚本中创建 openGl3.0及以上支持
|
|