Unity3D ShaderLab 透明裁剪着色器

上一篇,我们介绍了使用Alpha实现透明的手法,其实Unity为我们的#pragma提供了另一种参数,是我们能做出更高效 简单的透明效果,也就是裁剪透明。

这种透明使用一个值来简单的控制某些特定的像素无需渲染到屏幕上,所以我们也可以通过他实现一个要么完全透明或完全不透的着色器。

我们即将利用灰度的值来控制材质的透明度。

准备工作还是新建Shader Material,一张灰度变化图。同样是分分钟完成的代码,请看完成:

Shader "91YGame/TransparentCutoff" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
//申明_Cutoff变量;
_Cutoff("Cutoff Value",Range(0.01,))=0.5
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD //告诉着色器 我们需要的是一个裁剪类型的着色器;
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"
}

返回Unity,查看效果吧。

改变Cutoff Value的效果。

上面的裁剪着色器试用了一个新的#pragma参数,叫做alphatest:参数名【此处我们定义的alphatest:_Cutoff】,这使得着色器立刻变成一个简单的透明着色器。

不同于之前的透明度,并不会影响全局的alpha,裁剪着色器从白色到黑色范围内每个灰度值都通过比对后对透明度产生作用,但是并不会每一个灰度值比对后都会变化。

只是通过我们定义的_Cutoff变量值来决定透明度。这就表示我们再外部设置的_Cutoff值如果是0.5,那么低于0.5的灰度值都会被设为透明,反之大于0.5的被认为不透明。

所以灰度值通过这种方式计算后,只有透明与不透明2种选择。

这种透明度比针对画面性能比较有利,因为处理半透明着色器的混合过程要比裁剪透明消耗更大。

而移动设备相反,因为检测贴图每个像素点对手机cpu很有负担,所以在手机上可以直接使用半透明技术,谨慎使用裁剪透明技术。

Unity3D ShaderLab 透明裁剪着色器的更多相关文章

  1. Unity3D内置着色器

    Unity内部提供了一些可以直接使用的着色器,这些内置着色器包括以下6个方面: (1)Performance of Unity shaders 着色器的性能和两个方面有关:shader本身和rende ...

  2. Unity 内置着色器(转)

    Unity包括超过40种内置的shader. 标准着色器家族 Normal Shader Family 这些着色器都是Unity基本的着色器.适用于大多数的不透明物体,如果想要物体有透明.发光效果等, ...

  3. Unity3D ShaderLab 布料着色器

    Unity3D ShaderLab布料着色器 布料着色器是我们在虚拟现实中经常使用的着色器.本篇就来完成一个较为简单的布料着色器. 新建Shader,Material,InteractiveCloth ...

  4. Unity3D ShaderLab 使用alpha参数创建透明效果

    Unity3D ShaderLab 使用alpha参数创建透明效果 其实Unity为了方便我们的工作,为我们内置了很多参数.比如马上用到的透明功能. 准备场景新建Shader Material ,一张 ...

  5. Unity3D学习笔记(三十四):Shader着色器(1)

    一.GPU:图形处理器,Graphics Processing Unit 显卡的处理器就是图形处理器.与CPU类似.   GPU和CPU的区别? 1.CPU主要是为了串行指令设计,GPU则是为了大规模 ...

  6. Unity3D ShaderLab 使用渐变纹理着色

    Unity3D ShaderLab 使用渐变纹理着色 在我们编写着色器的过程中,还可以通过渐变纹理来控制漫反射的光照颜色.这种做法同样在VALVE的军团要塞2中及其流行. 前期,请准备一个渐变色的图片 ...

  7. Unity3d之Shader编程:子着色器、通道与标签的写法 & 纹理混合

    一.子着色器 Unity中的每一个着色器都包含一个subshader的列表,当Unity需要显示一个网格时,它能发现使用的着色器,并提取第一个能运行在当前用户的显示卡上的子着色器. 我们知道,子着色器 ...

  8. Unity3D学习笔记(三十五):Shader着色器(2)- 顶点片元着色器

    Alpha测试 AlphaTest Great:大于 AlphaTest Less:小于 AlphaTest Equal:等于 AlphaTest GEqual:大于等于 AlphaTest LEqu ...

  9. 编写Unity3D着色器的三种方式

    不管你会不会写Unity3D的shader,估计你会知道,Unity3D编写shader有三种方式,这篇东西主要就是说一下这三种东西有什么区别,和大概是怎样用的. 先来列一下这三种方式: fixed ...

随机推荐

  1. linux如何修改主机名

    一:#hostname hn1 二:修改/etc/sysconfig/network中的 HOSTNAME=hn1三:修改/etc/hosts文件  127.0.0.1 hn1

  2. AP聚类算法(Affinity propagation Clustering Algorithm )

    AP聚类算法是基于数据点间的"信息传递"的一种聚类算法.与k-均值算法或k中心点算法不同,AP算法不需要在运行算法之前确定聚类的个数.AP算法寻找的"examplars& ...

  3. C++构造函数和析构函数调用虚函数时都不会使用动态联编

    先看一个例子: #include <iostream> using namespace std; class A{ public: A() { show(); } virtual void ...

  4. JDE变量说明

    BC Business view columns. Columns that are included in the attached business view. These columns are ...

  5. ORACLE 建库过程总结

    1,忘记sys密码 打开CMD命令窗口,执行以下操作: ,SQLPLUS /NOLOG; , ,CONNECT / AS SYSDBA , ,ALTER USER SYS IDENTIFIED BY ...

  6. 电脑的基本硬件知识以及unix图解

    1.DELL R720 R610 2.电源: 人体心脏3.硬盘: 存数据的地方.机械的性能不高,3.5英寸 性能 SATA 借口<SAS <SSD 价格:SSD> SAS>SA ...

  7. js控制html元素的readonly属性

    html元素假设为只读,那么其readonly="readonly",我们现在想通过js来改变readonly属性为可以输入. 初始时,两个输入框都是只读.点击change按钮后, ...

  8. jsp中JavaBean的用法

    UserRegisterBean.java:这是JavaBean package JavaBean; public class UserRegisterBean { private String us ...

  9. HTTP Status 404 - No result defined for action com.csdhsm.struts.action.LoginAction and result error

    智商拙计的问题,没有找到为类LoginAction和error找到定义,然后重新去struts.xml去看,我类个去,我居然把result写成了ERROR <result name=" ...

  10. JSChart

     转自:http://www.cnblogs.com/riverback-moon/archive/2010/10/11/1848071.html JSChart是一个轻量级的在线图表生成工具,本身十 ...