目录
1.什么是Shader
Shader其实就是一段代码,这段代码的作用是告诉GPU具体怎样去绘制模型的每一个顶点的颜色以及最终每一个像素点的颜色。 Unity Shader则更加简单我们只需要在一实现的效果是什么样子的其他的一切都可以交给unity处理。
2.Unity Shader使用的什么语言
由于unity是一个跨平台的游戏开发引擎,所以为了是shader能更好的适应各个平台。官方建议使用CG(C for Graphic)因为cg语言跨平台性强。
Shader在unity称为ShaderLab
shader在GPU中的渲染流程。
3.Shader的创建
在文件夹下右键 选中 Create–> Shader
Unity提供了很多种Shader的模板;
下面简单介绍一下这些模板
①Standard Surface Shader
标准表面着色器,是一种基于物理的着色系统(使用了Physically BasedRendering(简称PBR)技术,即基于物理的渲染技术),以模拟现实真实的方式来模拟材质与灯光之间的关系,可以很轻易的表现出各种金属反光效果,同时此种Shader的书写逻辑也更符合人类的思维模式。
②Unlit Shader Vertex/Fragment
Shader,也就是最基本的顶点片断着色器,不受光照影响的Shader,多用于特效、UI上的效果制作。
③Image Effect
Shader Glow/泛光/辉光等说法)、调色、景深、模糊等,这些基于最终整个屏幕画面而进行再处理的Shader就是后处理。
④Compute Shader Compute
Shader是运行在图形显卡上的一段程序,独立于常规渲染管线之外的,它可以直接将GPU作为并行处理器加以利用,从而使GPU不仅具有3D渲染能力,还具有其他的运算能力。
4.材质与Shader的关系
①一个Shader可以与无数个材质关联。
②一个材质同一时刻只能关联于一个Shader。(为什么说是同一时刻,因为我们可以通过代码去动态改变材质所关联的Shader)
③材质可以赋与模型,但是Shader不行。
④材质就像是Shader的实例,每个材质都可以参数不一样呈现不同的效果,但是当 Shader改变时,关联它的所有材质都会相应的改变。
⑤举个例子:比如游戏中的怪物,我们只需做一个Shader,然后每个怪物给它一个材质球,材质球上赋与不同的贴图与参数来表现不同的怪物。
5.Shader框架
在我们创建出Shader之后将代码删掉只留下框架如下:
Shader “name”{[Properties ] SubShader [FallBack] [CustomEditor]}
可以拆分为以下部分 Shader “name”
Properties
SubShader
FallBack
CustomEditor
方括号表示的是可选,意思是可有可无。
Properties
属性,材质球面板中显示的贴图和一些参数什么的都是在此Properties中进行定义设置的。如果你确定你的Shader不需要这个Properties可以直接删掉
SubShader
子着色器,Shader可以含有一个或者多个SubShader。通过SubShader可以为不同的硬件,渲染管线和运行时设置定义不同的GPU设置和着色器程序。Unity在加载Shader会将所有的SubShader都遍历出来,并最终选择那个支持用户的机型。
FallBack
回滚,有的时候我们写的Shader难免在一些机器上会出现不支持的问题,而这个时候我们只要添加了FallBack,并且在后面的双引号内写上了其它Shader的有效路径名称,那么在碰到不支持的硬件时这个Shader就会自动切换。直到找到符合的Shader。
补充
①shader不能直接使用要绑定材质才能用
②shader的模板的选择并不是最重要的,即使这个不是你想要的模板你创建之后也可以进行更改,编写成你想要的效果。
③shader编写错误之后就会从你的Material--> Inspector-->shader 中消失。