按照渲染管线的分类,可以把sharder分成3个类别:
1、固定功能着色器(fixed function shader)
固定功能着色器为固定功能渲染管线的具体表现。
2、表面着色器
存在于unity3d中由u3d发扬光大的一门技术。untiy3d为我们把shader的复杂性包装起来,降低shader的书写门槛。
3、顶点着色器和片段着色器
gpu上含有两个组件:可编程顶点处理器和可编程片段处理器,顶点和片段处理器被分离成可编程单元,可编程顶点处理器是一个硬件单元,可以运行顶点程序,而可编程片段处理器则是一个可以运行片段程序的单元。
顶点着色器
顶点着色程序从gpu前端(寄存器)中提取图元信息(顶点位置、法向量、纹理坐标),并完成顶点坐标空间变换、法向量空间转换、光照计算等操作,最后将计算数据传送到指定寄存器中。
片段着色器
片段程序从上述寄存器中获取需要的数据:纹理坐标与光照信息等,并根据这些信息以及从应用程序传递的纹理信息进行每个片段的颜色计算(纹理查询),最后将处理后的数据传送光栅操作模块。
三种着色器的共同点:
• 都必须从唯一一个根shader开始
• prooerties参数部分,作用以及语法完全相同。
• 具体功能都在subshader里。
• 都可以打标签
• 都可以fallback
• 都可以处理基本的功能,例如光照漫反射以及镜面反射。但如uv计算效果等高级功能,固定功能着色器无法完成。
三种着色器的不同点
• 表面着色器没有通道pass{},加了会报错,该着色器已经把具体内容打包在光照模型中了。
• 固定渲染管线每句代码之后都没有“;”
• 核心结构不同:
- 固定渲染管线的核心是:
material{}以及settexture[_maintex]{}
- 顶点与片段着色器的核心是:
cgprogram #pragma vertex vert #pragma fragment frag #include unitycg.cginc endcg
- 表面着色器的核心是:
1.表面着色器使用unity3d自带光照模型lambert,也不做顶点处理,只需要一个表面处理函数surf即可。 cgprogram #pragma surface surf lambert endcf 2.这套表示使用的是自己写的光照模型lsylightmodel,并且使用了顶点处理函数vert cgprogram #pragma surface surf lsylightmodel vertex:vert endcg
在unity中如何区分以上三种着色器
• 没有嵌套cg语言,即代码中没有cgprogaram和endcg关键字的,就是固定功能着色器。
• 嵌套cg语言,代码中有surf函数的为表面着色器
• 嵌套了cg语言,代码中有#pragma vertex name和 #pragma fragment frag声明的,就是顶点着色器&片段着色器。
首个融入IP协议的无线通信标准——6LoWPAN
新一代工业计算机平台规范PICMG1.3
华北工控最新发布嵌入式工业主板HB132
什么是DTMB地面波数字电视,它可以免费看电视
电子元器件:半导体行业迎来新发展
Unity中Shader的三种类别 如何区分
OPPO和vivo在印度销量跌一半
小米note3什么时候上市?小米Note3惊艳登场,大屏幕控的米粉福利到了
为降低梯级利用处理成本,天津铁塔动力电池梯级利用基站超300个
记时防盗报警器,断线报警器
2012年面板市场需求解析
灌浆记录仪都监测哪些数据
基于单片机和VNC1L-1A芯片实现图像采集系统的设计
赫尔维蒂航空公司接收了首架巴航工业的E190-E2飞机
高性价比、高效计算能力和丰富的IO,满足一切应用需求的工业计算解决方案
【芯品推荐】BCT7925内置TVS的OVP过压保护芯片
IGBT推挽式逆变电路
小米6C什么时候上市?最新消息汇总:澎湃S2有惊喜售价超2000,小米6C你会支持吗?
Cree推出最新XLamp XP-G照明级中性白光和暖白光L
阴极输出电子管功放电路