Unity Shader之混合纹理基础示例

对于游戏,始于好玩,陷于好玩,忠于好玩。


今个学习了浅墨大神的一篇关于混合纹理的文章,比较基础,整理如下:


一.双纹理混合

Shader "WC/双纹理混合" {
	Properties {
		_MainTex ("主纹理 (RGB)", 2D) = "white" {}
		_BlendTex ("混合纹理 (RGB)", 2D) = "white"{}
	}
	SubShader {
		
		//通道1
		Pass{
			setTexture[_MainTex] {combine texture}				//主纹理
			setTexture[_BlendTex] {combine texture * previous}	//混合纹理 texture为_MainTex的颜色,previous为上一次SetTexture的结果 
		}
		//通道 N..
		//Pass
		//{
		//	ooooooxxxxxx
		//}
	} 
}

二.纹理 + 自发光

Shader "WC/纹理 + 自发光" {
	Properties {
		_MainTex ("主纹理 (RGB)", 2D) = "white" {}
		_Color   ("自发光",Color) = (1,1,1,1)
	}
	SubShader {
		Pass{
			SetTexture[_MainTex]
			{
				constantColor [_Color]                     //定义自发光颜色				注:关键字constantColor: 定义combine命令里的常量颜色
				combine constant lerp(texture) previous    //lerp差值函数,这里是用texture(_MainTex的透明度通道值)在constant和previous之间进行差值,差值是反向的,当透明度为0时使用previous,为1时使用constant
														   //注:constant为上句constantColor定义的颜色,texture为_MainTex的颜色,previous为上一次SetTexture的结果  
			}

			SetTexture[_MainTex]
			{
				combine previous * texture				   //将纹理与上次SetTexture结果混合  
			}
		}
	} 
}

三.顶点光照 + 纹理 + 自发光

Shader "WC/顶点光照 + 纹理 + 自发光" {
	Properties {
		_MainTex    ("主纹理 (RGB)", 2D) = "white" {}
		_MainColor  ("主颜色",Color) = (1,1,1,1)
		_SpecColor  ("高光颜色",Color) = (1,1,1,1)
		_IlluminCol ("混合自发光色", Color) = (1,1,1,1)  
		_Emission   ("自发光色", Color) = (0,0,0,0)  
		_Shininess  ("光泽度", Range (0.01, 1)) = 0.7  
	}

	SubShader
	{
		Pass
		{
			Material
			{
				Diffuse[_MainColor]	  //漫反射
				Ambient[_MainColor]   //环境光
				Specular[_SpecColor]  //高光
				Emission[_Emission]   //自发光
				Shininess[_Shininess] //光泽度
			}

			Lighting On

			SeparateSpecular On       //开启独立镜面反射  开启后,高光色会在混合计算后被加入

			SetTexture[_MainTex]
			{
				constantColor [_IlluminCol]
				combine constant lerp(texture) previous
			}
			SetTexture[_MainTex]
			{
				combine previous * texture
			}
			SetTexture[_MainTex]
			{
				combine previous * primary,previous * primary   //  注:默认情况下primary颜色是漫反射,阴影色和高光颜色(在光线计算中定义)的加和
			}
		}
	}
}


四.顶点光照+自发光+纹理混合

	
Shader "WC/顶点光照+自发光+纹理混合" {
	Properties {
		_MainTex   ("主纹理 (RGB)", 2D) = "white" {}
		_BlendTex  ("混合纹理 (RGB)",2D) = "black" {}
		_MainColor ("主颜色",Color) = (1,1,1,1)
		_SpecColor ("高光颜色",Color) = (1,1,1,1)
		_IllsColor ("混合自发光色",Color) = (1,1,1,1)
		_Emission  ("自发光",Color) = (1,1,1,1)
		_Shininess ("光泽度",Range(0.01,1)) = 0.5
	}
	SubShader {
		Pass
		{
			Material
			{
				Diffuse[_MainColor]
				Ambient[_MainColor]
				Specular[_SpecColor]
				Emission[_Emission]
				Shininess[_Shininess]
			}
			Lighting On

			SeparateSpecular On

			SetTexture[_MainTex]
			{
				constantColor[_IllsColor]				//自发光
				combine constant lerp(texture) previous	//差值
			}

			SetTexture[_BlendTex]
			{
				combine previous * texture				//纹理混合
			}

			SetTexture[_MainTex]
			{
				combine previous * primary,previous * primary
			}
		}
	} 
	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值