Shader 学习笔记(11) RenderType为Transparent的混合透明

原创 2018年04月16日 15:48:21

透明度混合可以实现真正的透明,本例中采用的混合方式为Blend SrcAlpha OneMinusSrcAlpha.Blend命令后接着写入不同的混合方式.混合方式有多种组合(后续单独写一篇).SrcAlpha OneMinusSrcAlpha的混合后效果的公式为

Shader "wx/AlphaBlendMat"{
	Properties{
		_Color("Main Tint",Color)=(1,1,1,1)
		_MainTex("Main Tex",2D)="white"{}
		_AlphaScale("Alpha Scale",Range(0,1))=1
	}
	SubShader{
		Tags{"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
		Pass{
			Tags{"LightMode"="ForwardBase"}
			ZWrite Off    //关闭深度写入
			Blend SrcAlpha OneMinusSrcAlpha
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			#include "Lighting.cginc"
			fixed4 _Color;
			sampler2D _MainTex;
			float4 _MainTex_ST;
			fixed _AlphaScale;
			struct a2v
			{
				float4 vertex:POSITION;
				float3 normal:NORMAL;
				float4 texcoord:TEXCOORD0;
			};
			struct v2f
			{
				float4 pos:SV_POSITION;
				float3 worldNormal:TEXCOORD0;
				float4 worldPos:TEXCOORD1;
				float2 uv:TEXCOORD2;
			};
			v2f vert(a2v v){
				v2f o;
				o.pos=UnityObjectToClipPos(v.vertex);
				o.worldNormal=UnityObjectToWorldNormal(v.normal);
				o.worldPos=mul(unity_ObjectToWorld,v.vertex);
				o.uv=TRANSFORM_TEX(v.texcoord,_MainTex);
				return o;
			}
			fixed4 frag(v2f i):SV_Target{
				fixed3 worldNormal=normalize(i.worldNormal);
				fixed3 worldLightDir=normalize(UnityWorldSpaceLightDir(i.worldPos));
				fixed4 texColor=tex2D(_MainTex,i.uv);
				fixed3 albedo=texColor.rgb*_Color.rgb;
				fixed3 ambient=UNITY_LIGHTMODEL_AMBIENT.xyz*albedo;
				fixed3 diffuse=_LightColor0.rgb*albedo*max(0,dot(worldNormal,worldLightDir));
					return fixed4(ambient+diffuse,texColor.a*_AlphaScale);
			}
			ENDCG
		}
	}
	FallBack"VertexLit"
}

版权声明:如果你真的要转,请告诉我,让我嘚瑟一下 https://blog.csdn.net/qq_26365139/article/details/79961370

shaderlab中RenderType的意义

SubShader     {         Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transpare...
  • zmafly
  • zmafly
  • 2016-04-13 10:25:07
  • 2091

UNlit/Transparent 不发光透明shader

Shader "GUI/Text Shader" { Properties { _MainTex ("Font Texture", 2D) = "white" {} _Color ("Text ...
  • luyuncsd123
  • luyuncsd123
  • 2014-04-12 11:49:58
  • 5488

unity3d shader中RenderType的所有类型

Opaque: 用于大多数着色器(法线着色器、自发光着色器、反射着色器以及地形的着色器)。 Transparent:用于半透明着色器(透明着色器、粒子着色器、字体着色器、地形额外通道的着色器)。 ...
  • nnsword
  • nnsword
  • 2014-01-04 11:51:06
  • 14427

unity3d 内部Transparent (透明)shader 代码

概要 · How discarding fragments can be combined with alpha texture maps. · How alpha texture maps ca...
  • wolf96
  • wolf96
  • 2014-10-24 08:01:35
  • 6947

【Unity Shader】简单Transparent shader的三种实现

Shader "Custom/Transparent" { Properties { _Color ("Main Color", Color) = (1,1,1,0.6) _MainTex ...
  • Cheng624
  • Cheng624
  • 2016-11-24 18:07:06
  • 1032

Unity3d shader中Queue 使用渲染队列进行深度排序

为了让我们真正明白透明度,我们需要了解一下深度排序,或者说,对象的绘制顺序。Unity允许我们控制一个特定对象绘制到屏幕上的顺序,因此我们可以更好地控制哪些对象应该覆盖在其他对象上。你可以把绘制顺序理...
  • e295166319
  • e295166319
  • 2016-08-31 17:29:44
  • 4790

Unity3D的着色器介绍(二)——Unity3D的Shader基本结构说明

上一篇着色器介绍文章,阿赵我大概的说明了一下软渲染的过程,用于解释着色器的基本工作流程,不知道看过的人是否能知道阿赵想说什么呢?原理的东西基本都是通用的,所以可以说上一篇文章和Unity本身是没什么直...
  • hany3000
  • hany3000
  • 2015-02-21 08:40:24
  • 608

unity中shader的Cutout问题

unity中自带的shader里有Cutout类型的shader,zhe'zho
  • lynon
  • lynon
  • 2014-08-22 16:53:56
  • 3130

unity shader学习笔记(九)——Unity中的透明效果之透明混合

透明混合
  • u012079615
  • u012079615
  • 2017-11-28 23:15:00
  • 103

Unity Shader入门精要学习笔记 - 第8章 透明效果

透明是游戏中经常要使用的一种效果。在实时渲染中要实现透明效果,通常会在渲染模型时控制它的透明通道。当开启透明混合后,当一个物体被渲染到屏幕上时,每个片元出了颜色值和深度值之外,它还有另一个属性——透明...
  • u010848412
  • u010848412
  • 2017-06-08 14:12:54
  • 867
收藏助手
不良信息举报
您举报文章:Shader 学习笔记(11) RenderType为Transparent的混合透明
举报原因:
原因补充:

(最多只允许输入30个字)