[UnityShader3]遮罩效果

学习shader也有一段时间了,但由于只注重理论,而不注重实践,所以当想要写一个shader时,往往无从下手。眼看着大神们写出了各种华丽的shader,本人的心中真是百感交集啊!于是近段时间终于下定决心,重新学习了shader。关于shader的基础教程,个人认为比较好的是《猫都能学会的Unity3D Shader入门指南》系列浅墨的shader教程以及《unity4.x从入门到精通》中shader的那一章。


好了进入正题。现在要研究的是遮罩shader的书写,本文章主要参考了这里,为了方便学习,这里先给出一个简化版的遮罩shader。


Shader "Transparent/Mask"  
{  
	Properties
	{
		_MainTex("Base (RGB)", 2D) = "white" {}
		_Mask("Culling Mask", 2D) = "white" {}
		_Cutoff("Alpha Cutoff", Range(0, 1)) = 0.1
	}
	SubShader
	{
		Pass
		{
			AlphaTest GEqual[_Cutoff]
			SetTexture[_Mask] {}
			SetTexture[_MainTex] {combine texture, previous}
		}
	}
} 

这是制作小地图需要用到的两张图片,一张是小地图,另一张是中心为黑圆,其余为透明的png图片。



好了接下来我们来分析一下shader的代码。AlphaTest GEqual[_Cutoff]的意思是alpha(透明度)的值大于等于_Cutoff时像素才会被渲染,否则不会被渲染。因为黑圆之外的像素是透明的,alpha值为0,所以当_Cutoff大于0时,黑圆之外的像素就不会被渲染,只有黑圆里的像素才会被渲染,显示为一个黑圆。


这是注释了pass通道的第三行代码的结果(因为黑圆图片有些问题,所以本人用白圆图片代替):


这是注释了pass通道的第一、三行代码的结果(因为黑圆图片有些问题,所以本人用白圆图片代替):


好了现在我们分析一下我们想要的小地图的效果:圆内显示小地图,圆外透明。即是这样的一种效果:


所以关键就是pass通道的第三行代码了。texture指的是SetTexture中被定义的纹理,previous指的是上一次SetTexture的结果;第一个参数操作的是rgb值,第二个参数操作的是alpha值,所以整句代码的意思就是,最终图像的rgb使用小地图的rgb值,最终图像的alpha使用遮罩图的alpha值。因此就出现了上图的效果。。


这是unitypackage:

http://yun.baidu.com/share/link?shareid=552232830&uk=1632474121

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值