unity3D之透明度.docxVIP

  • 9
  • 0
  • 约1.31千字
  • 约 3页
  • 2017-06-07 发布于重庆
  • 举报
unity3D之透明度

unity3D之Transparency我们讲到在Shader的#pragma声明中添加alpha参数来实现透明效果真的是非常方便。事实上,Unity还提供了另一种参数来实现一个更简单的透明效果,叫做cutoff transparency,是不是很耳熟?这种类型的透明效果使用一个变量来简单地控制哪些像素不要画在屏幕上。因此,cutoff transparency使得我们可以得到要么全透明效果,要么不透明的效果。而在上一篇中,我们可以控制所有范围的灰度值来影响透明度,也被称为半透明效果。准备工作首先创建一个新的场景,和一个新的球体和平行光。创建新的Shader和Material,可以命名为CutoffShader。把Shader赋给Material,再把Material赋给球体。选择一张贴图。最好是一张灰度图,这样你可以看到cutoff的效果。实现首先在Properties块增加新的浮点值,它将允许我们选择中断值(cutoff value):Properties {_MainTex (“Base (RGB)”, 2D) = “white” {}_Cutoff (“Cutoff Value”, Range(0,1)) = 0.5}然后,告诉Shader我们将把这个Shader设置成cutoff类型:CGPROGRAM#pragma surface surf Lambert alphatest:_Cutoff最后,使用贴图中我们希望使用的通道值来填充o.Alpha。void surf (Input IN, inout SurfaceOutput o) {half4 c = tex2D (_MainTex, IN.uv_MainTex);o.Albedo = c.rgb;o.Alpha = c.g;}使用不同_Cutoff值得到的结果(从左到右依次增大):解释Unity给我们提供了相当一些在#pragma指令中可以使用的参数。它们给我们提供了强大的能力来改变和优化我们的Surface Shader。这正是在编写Shader以及迭代化处理时,Surface Shader如此强大和有效的原因之一。我们的cutoff shader在#pragma指令中使用了一个新的参数,名为alphatest:VariableName。这个参数将我们的Shader设置为一个简化版本的透明度。和半透明度效果(灰度值范围内的每一个值都讲影响透明度)不同,只有_Cutoff变量控制最终的透明效果。这意味着,如果我们让_Cutoff值为0.4,那么任何灰度值低于0.4的值会被认为是透明的,而高于0.4的值被认为是不透明的。使用这种类型的透明效果的好处是可以提高性能。之前的半透明效果的性能耗费要高于cutoff类型。但是,在移动设备上是正好相反的,这是因为对于这些小型的GPUs来说,检查一张贴图中的每一个像素值是非常耗性能的。因此,如果你正在用Unity开发一款移动应用,那么尽量使用半透明技术,而少使用本篇提到的cutoff透明技术。呼呼,以后要验证一下是不是真的在移动设备上反而效率更低了,文章出处【狗刨学习网】

文档评论(0)

1亿VIP精品文档

相关文档