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时会出现这个。如下

unity 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基础教程

 

Unity中使用Shader都是基于材质的。所以我们来新建要给材质并引用Shader。看看效果。如下:

Shader基础

 

这样。我们就能看到我们定义的属性。并且能修改值。但是由于我们用的默认的函数。只使用了贴图。故而只有贴图起效果了。颜色和浮点值不起效果。函数我们将在后面讲到。

最后。Properties属性定义命名规则

Properties { Property [Property ...] }定义属性块,其中可包含多个属性,其定义如下

name ("display name", Range (minmax)) = 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参数列表

本文链接:

https://bobsong.cn/514.html
1 + 7 =
快来做第一个评论的人吧~