本系列主要参考《Unity Shaders and Effects Cookbook》一书(感谢原书作者),同时会加上一点个人理解或拓展。
这里是本书所有的插图。这里是本书所需的代码和资源(当然你也可以从官网下载)。
========================================== 分割线 ==========================================
从这篇开始是一个全新的章节:透明效果(Transparency)。之前在制作LOGO闪光效果的时候就一直调不出来背景透明,就是那个时候决定要学一下Shader的基础知识,不求成为多么厉害的大神,只望对渲染的内部原理有些许了解~
开始正文。
在我们学习如何编写透明的Surface Shader的开始,我们需要理解应该包含哪些代码使得我们可以开启透明效果。Unity再一次慷慨地为我们提供了一些内置参数,我们可以通过包含这些参数来快速得到透明效果。
这是通过在Shader的#pragma声明中添加alpha参数来实现的。这句话告诉Unity我们想要在Shader中使用透明度。但当我们在创建透明Shaders时,需要仔细考虑一些事情,那就是代码中元素的绘制顺序。这篇文章将会讲述一些基本问题,来得到一个非常简单的透明物体。在下面的章节中,将会讲解其他有关透明度的问题。
和以前一样,我们需要创建一个新的场景。
Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _TransVal ("Transparency Value", Range(0,1)) = 0.5 }
CGPROGRAM #pragma surface surf Lambert alpha
void surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D (_MainTex, IN.uv_MainTex); o.Albedo = c.rgb; o.Alpha = c.b * _TransVal; }
Shader "Custom/SimpleAlpha" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _TransVal ("Transparency Value", Range(0,1)) = 0.5 } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf Lambert alpha sampler2D _MainTex; float _TransVal; 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.b * _TransVal; } ENDCG } FallBack "Diffuse" }
o.Alpha = c.r * _TransVal
【Unity Shaders】Transparency —— 使用alpha通道创建透明效果,布布扣,bubuko.com
【Unity Shaders】Transparency —— 使用alpha通道创建透明效果
原文地址:http://blog.csdn.net/candycat1992/article/details/28630459