Unity Shader基础教程【2】 之 初识和Properties参数列表
初识Shader
首先。我们建立一个新的shader后。会有一段默认的代码。如下
Shader "小宝Shader/Test" { //定义Shader属性 Properties { _MainTex ("Base (RGB)", 2D) = "white" {} } //这里定义子着色器(一个子着色器渲染draw call) SubShader { //渲染类型为Opaque,不透明 Tags { "RenderType"="Opaque" } LOD 200 //开始着色器编程语言段 CGPROGRAM //使用兰伯特光照模式 #pragma surface surf Lambert //变量声明 sampler2D _MainTex; //输入结构 struct Input { float2 uv_MainTex; }; //函数的编写 void surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D (_MainTex, IN.uv_MainTex); o.Albedo = c.rgb; o.Alpha = c.a; } //结束着色器编程语言段 ENDCG } //“备胎”为普通漫反射 FallBack 音译为 “回滚”,俗称“备胎” 用来处理 设备老旧等导致Shader不能运行的情况 FallBack "Diffuse" }
如上。命名为“小宝Shader/Test” 这样在选择Shader时会出现这个。如下
基本框架
Shader "小宝Shader/Test" { //属性 Properties { //纹理 _MainTex("基本纹理",2D)="White"{TexGen ObjectLinear} } //子着色器1 SubShader { //通道 Pass { //设置纹理为属性中选择的纹理 SetTexture[_MainTex]{combine texture} } } //备胎设为Unity自带的普通漫反射 Fallback" Diffuse " }
之后的Shader都在这个基本框架下修改。
属性Properties
上面。我们了解了下Shader的基本结构。下面我们来了解下Properties属性。
我们在上面代码基础上。添加内容。在Properties添加如下属性 属性介绍
//定义Shader属性 Properties { _MainTex("纹理>Texture", 2D) = "white" {}//贴图 _RimColor("边缘颜色>Rim Color", Color) = (0.17, 0.36, 0.81, 0.0)//颜色 _RimPower("颜色强度>Rim Power", Range(0.6, 9.0)) = 1.0//定义浮点数属性 }
我们来看Shader的效果。前修改后和修改前的对比。
Unity中使用Shader都是基于材质的。所以我们来新建要给材质并引用Shader。看看效果。如下:
这样。我们就能看到我们定义的属性。并且能修改值。但是由于我们用的默认的函数。只使用了贴图。故而只有贴图起效果了。颜色和浮点值不起效果。函数我们将在后面讲到。
最后。Properties属性定义命名规则
Properties { Property [Property ...] }定义属性块,其中可包含多个属性,其定义如下
name ("display name", Range (min, max)) = number
定义浮点数属性,在检视器中可通过一个标注最大最小值的滑条来修改。
name ("display name", Color) = (number,number,number,number)
定义颜色属性
name ("display name", 2D) = "name" { options }
定义2D纹理属性
name ("display name", Rect) = "name" { options }
定义长方形(非2次方)纹理属性
name ("display name", Cube) = "name" { options }
定义立方贴图纹理属性
name ("display name", Float) = number
定义浮点数属性
name ("display name", Vector) = (number,number,number,number)
定义一个四元素的容器(相当于Vector4)属性
name 为变量名称 每一个变量名称都必须在前面加_下划线(不要问我为什么,规定就是这样。);
(“display name” , variable) “display name”为面板显示的名称 variable为变量的类型(类型如:Range(min,max),Color,2D,Rect,Cube,Float,Vector)
需要注意的是,包含在纹理属性的大括号中的选项Options是可选的。可能的选项有如下:
TexGen纹理生成类型。即纹理的自动生成纹理坐标时的模式,可以是ObjectLinear, EyeLinear,SphereMap, CubeReflect, CubeNormal的其中之一;这些模式和OpenGL纹理生成模式相对应。注意如果使用自定义顶点程序,那么纹理生成将被忽略。
系列链接传送门
【1】Unity Shader基础教程【1】 之 Shader的建立与使用
【2】Unity Shader基础教程【2】 之 初识和Properties参数列表