FixedFunctionShader

Shader "Learn/ManNiuLesson06" 
{
	Properties
	{
		// 属性("面板显示名字",属性类型) = (初始值)

		_Color("Main Color",color) = (1,1,1,1) // 颜色属性
		_Ambient("Ambient",color) = (0.3,0.5,0.1,0.3) // 环境氛围属性
		_Specular("Specular",color) = (1,1,1,1) // 高光属性
		//_Shininess("Shininess",float) = 4 // 限定高光范围 - float 数值控制
		_Shininess("Shininess",range(0,8)) = 4 // 限定高光范围 - range 范围数值控制
		_Emission("Emission",color) = (1,1,1,1) // 自发光的属性
		_MainTex("MainTex",2D) = ""{} // 主贴图属性
		_SecondTex("MainTex",2D) = ""{} // 第二张贴图属性
		_Constant("ConstantColor",color) = (1,1,1,0.3) //可以让物体透明,但是此条属性只能放在贴图属性之前定义,除非,贴图属性后面添加了" =""{}或="xxx"{} "

	}
	
	SubShader
	{
		// Tags{ "key" = "value" } 键值对应,键值都是字符串.Queue 用来改变渲染队列
		Tags{ "Queue" = "Transparent" }

		Pass
		{
		    /*
				Alpha blending
			    效果:让我们使用当前颜色当中的 Alpha 值与已减掉当前 Alpha
				值的比例去混合之前的已经被渲染好的场景颜色值
				可以用来制作透明的效果
			*/ 
			Blend SrcAlpha OneMinusSrcAlpha 
			//color(1,1,1,1) // () 里面的是固定值	
			//color[_Color]  // [] 里面是参数值	
			material // 材质是一个命令块
			{
				diffuse[_Color]   // 漫反射命令使用 _Color 属性
				ambient[_Ambient] // 环境光命令使用 _Ambient 属性
				specular[_Specular] // 高光命令使用 _Specular 属性
				shininess[_Shininess] //限定高光范围命令使用 _Shininess 属性
				emission[_Emission] // 自发光命令使用 _Emission 属性
			}
			lighting on // on/off 打开光照属性关闭光照属性.配合与光照有关的属性使用.
			separatespecular on // on/off 独立的镜面高光配合高光属性使用
			
			/* 
				设置贴图的命令 使用 _MainTex 贴图
				一个 settexture 只能带有一个参数
			*/
			settexture[_MainTex] 
			{
				/*
					使用贴图(combine - v.使结合)
					
					"* primary" 的意思是和之前的设置好颜色光照等属性混合
					由于混合是 小数之间的相乘 可以加上关键字 double(放大两倍)
					quad(放大四倍)
				*/
				combine texture * primary double
				//combine texture * primary quad
			}

			/* 
				设置第二张贴图的命令 使用 _SecondTex 贴图
			*/
			settexture[_SecondTex] 
			{
				// matrix[] 涉及到了矩阵

				/* 
					constantColor 指令使用 _Constant 属性 
					在使用时要写为 "* constant" 
					一般写在 texture 之后,让物体透明
					使用这种方法,可以不将对应的贴图的
					灰度系数变为Alpha值(不用改选贴图的 Alpha Source 为 From Gray Scal 选项)
					也可让物体变的透明
				*/
				constantColor[_Constant]

				/*
					如果不通过使用 "* constant"的方式.可以使用一下方式:

					让第二张贴图和第一张贴图混合(previous - adj.先前的)
					
					"* previous" 的意思是和之前设置的贴图属性混合
					最多混合多少张贴图由显卡性能决定

					同样可以使用 double quad 关键字

					",texture" 意味着只使用了当前纹理 texture 的 Alpha 通道,但是
					之前的混合都会失效,要想保留之前的混合,需要将对应的贴图的
					灰度系数变为Alpha值(改选贴图的 Alpha Source 为 From Gray Scal 选项)
				*/
				combine texture * previous double,texture * constant
			}
		}
	}
}

 

你可能感兴趣的:(Unity引擎,Unity,Shader)