Unity Shaders and Effects Cookbook (6-2) 透明裁剪着色器

Posted _Captain

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity Shaders and Effects Cookbook (6-2) 透明裁剪着色器相关的知识,希望对你有一定的参考价值。

上一节中,利用纹理的 RGB 通道值 作为灰度,来控制像素的透明度,这种方式叫做半透明着色器。

这一节学习透明裁剪着色器,仍然是读取 RGB 通道值,赋值给 alpha,然后指定一个固定值作为标尺,如果 alpha < 标尺,就抛弃这个片段,也就是裁减掉不显示。

这一次实现的效果如下图



适合作为怪物死亡的效果。

转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

下面开始学习。

搭建好场景,新建Material,新建Shader。

Shader完整代码如下:

Shader "CookBookShaders/Chapt6-2/CutOff" 
	Properties 
	
		_MainTex ("Base (RGB)", 2D) = "white" 
		_CutOff("Cut Off",Range(0,1))=0
	

	SubShader 
	
		Tags  "RenderType"="Opaque" 
		LOD 200
		
		CGPROGRAM
		#pragma surface surf Lambert alphatest:_CutOff

		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.r;
		
		ENDCG
	 
	FallBack "Diffuse"


比较简单,主要有两点:

1、在 #pragma 语句中指定了 alphatest:_CutOff

#pragma surface surf Lambert alphatest:_CutOff

指定了 alphatest:_CutOff 之后,我们的着色器就变成了透明裁剪着色器。当片段的 Alpha 值 < _CutOff 的时候,该片段被抛弃。


2、将通道值 赋值给 O.Alpha

o.Alpha = c.r;


根据上面讲的,我以为工作流程是这样的

float _CutOff=0.5

O.Alpha = 纹理.R

if(O.Alpha < _CutOff)

	DisCard()

但是查看Unity 生成的Shader 代码发现是使用了 Clip() 这个函数


框中的这一句

  // alpha test
  clip (o.Alpha - _CutOff);

clip(x) : 如果输入向量中的任何元素小于0,则丢弃当前像素。


也就是说,是通过 Alpha 值 减去 指定的 _CutOff ,也就是,Alpha 值 低于 _CutOff 的片段都会被丢弃


根据书上所说,这次学习的 透明裁剪着色器,因为要逐像素判断 Alpha 是否小于 _CutOff ,所以是比较消耗 GPU的,所以在手机并不推荐。

但是在工作中,会发现,其实很大程度上都是一个度的问题。

像这中溶解效果,用在副本里面,不可能几十个怪同时死亡而同时显示溶解的效果的。

所以并没有什么在手机上就不能用这种事情。想用就用。


示例工程打包下载:

http://pan.baidu.com/s/1nvzpn2x


以上是关于Unity Shaders and Effects Cookbook (6-2) 透明裁剪着色器的主要内容,如果未能解决你的问题,请参考以下文章

Unity Shaders and Effects Cookbook (6-2) 透明裁剪着色器

Unity Shaders and Effects Cookbook (6-1) 使用 alpha 参数的 半透明着色器

Unity Shaders and Effects Cookbook (6-3) 修改渲染队列Queue 来 修改渲染顺序

Unity Shaders and Effects Cookbook (7-3) 在地形中使用顶点颜色做混合

Unity Shaders and Effects Cookbook (D-2) Cull Back背面剔除 -- 模型半边不可见

Unity Shaders and Effects Cookbook (5-1)LitSphere lighting model