Unity3D教程宝典之Shader篇:第十二讲 Alpha测试

合集下载

Alpha测试、深度测试、Alpha混合

Alpha测试、深度测试、Alpha混合
One
Zero
SrcColor
SrcAlpha
DstColor
DstAlpha
OneMinusSrcColor
OneMinusSrcAlpha
OneMinusDstColor
OneMinusDstAlpha
பைடு நூலகம்
1. 深度测试
深度测试是指通过比较当前绘制的像素点的深度和对应缓冲区的点的深度值决定是否绘制当前像素。
深度缓存(Z-Buffer)是内存或显存中的一块缓冲区,其中存储了将要绘制到屏幕上的每个像素点
的深度信息。
2. Alpha测试
Alpha测试是指当前像素颜色在写入到帧中之前,通过和一个固定的数值比较,来决定当前像素颜色
混合。
Color = (RGBsrc * Ksrc) op (RGBdst * Kdst)
RGBsrc : 源像素颜色值
RGBdst : 目标像素颜色值
op : 源像素和目标像素的混合计算方式
Ksrc : 源像素混合因子
Kdst : 目标像素混合因子
Unity Shader中的10种混合因子
是否写入帧中并输出到屏幕上。
Unity Shader中AlphaTest的8种比较条件:Always、Never、Greater、GEuqal、Less、LEqual、
Equal、NotEqual
3. Alpha混合
Alpha混合是指将当前计算得到的像素(源像素)的颜色与先前计算得到的像素(目标像素)的颜色值

OpenGL中alpha测试GL_ALPHA_TEST

OpenGL中alpha测试GL_ALPHA_TEST

OpenGL中alpha测试GL_ALPHA_TEST2011-03-03 19:32 来自/lpt19832003/archive/2009/06/25/4297333.aspx我们知道像素的Alpha值可以用于混合操作。

其实Alpha值还有一个用途,这就是Alpha测试。

当每个像素即将绘制时,如值,只有Alpha值满足条件的像素才会进行绘制(严格的说,满足条件的像素会通过本项测试,进行下一种测试,只有所有测试都这个“条件”可以是:始终通过(默认情况)、始终不通过、大于设定值则通过、小于设定值则通过、等于设定值则通过、大于等于值则通过。

如果我们需要绘制一幅图片,而这幅图片的某些部分又是透明的(想象一下,你先绘制一幅相片,然后绘制一个相框,则相框这幅到下面的照片),这时可以使用Alpha测试。

将图片中所有需要透明的地方的Alpha值设置为0.0,不需要透明的地方Alpha值设0.5则通过”,这样便能达到目的。

当然也可以设置需要透明的地方Alpha值为1.0,不需要透明的地方Alpha值设置为0.0,然后往往不只一种,可以根据个人喜好和实际情况需要进行选择。

可以通过下面的代码来启用或禁用Alpha测试:glEnable(GL_ALPHA_TEST); // 启用Alpha测试glDisable(GL_ALPHA_TEST); // 禁用Alpha测试可以通过下面的代码来设置Alpha测试条件为“大于0.5则通过”:glAlphaFunc(GL_GREATER, 0.5f);该函数的第二个参数表示设定值,用于进行比较。

第一个参数是比较方式,除了GL_LESS(小于则通过)外,还可以选择:GL_ALWAYS(始终通过),GL_NEVER(始终不通过),GL_LESS(小于则通过),GL_LEQUAL(小于等于则通过),GL_EQUAL(等于则通过),GL_GEQUAL(大于等于则通过),GL_NOTEQUAL(不等于则通过)。

Unity3D教程宝典之Shader篇:第十三讲 Alpha混合

Unity3D教程宝典之Shader篇:第十三讲 Alpha混合

原创文章如需转载请注明:转载自风宇冲Unity3D教程学院Shader第十三讲Alpha混合Alpha Blending,中文译作Alpha混合Blending就是控制透明的。

处于光栅化的最后阶段。

这里例如我们给一个模型贴一个材质,那么在某个点计算出来颜色值称为源,而该点之前累积的颜色值,叫目标。

语法Blend Off 不混合Blend SrcFactorDstFactor SrcFactor是源系数,DstFactor是目标系数最终颜色 = (Shader计算出的点颜色值* 源系数)+(点累积颜色* 目标系数)属性(往SrcFactor,DstFactor上填的值)one 1zero 0SrcColor 源的RGB值,例如(0.5,0.4,1)SrcAlpha 源的A值, 例如0.6DstColor 混合目标的RGB值例如(0.5,0.4,1)DstAlpha 混合目标的A值例如0.6OneMinusSrcColor (1,1,1) - SrcColorOneMinusSrcAlpha 1- SrcAlphaOneMinusDstColor (1,1,1) - DstColorOneMinusDstAlpha 1- DstAlpha运算法则示例:(注:r,g,b,a,x,y,z取值范围为[0,1])(r,g,b)* a = (r*a , g*a , b*a)(r,g,b)* (x,y,z) = (r*x , g*y , b*z)(r,g,b)+ (x,y,z) = (r+x , g+y , b+z)(r,g,b)- (x,y,z) = (r-x , g-y , b-z)在树叶使用的Shader中添加Blend代码Blend zero one:仅显示背景的RGB部分,无Alpha透明通道处理。

Blend one zero:仅显示贴图的RGB部分,无Alpha透明通道处理。

A通道为0即本应该透明的地方也渲染出来了。

unity alphablend的原理

unity alphablend的原理

unity alphablend的原理Unity是一款非常流行的游戏开发引擎,它提供了丰富的功能和工具来帮助开发者创建出精美的游戏。

在Unity中,Alpha Blend是一个常用的渲染技术,它可以实现透明效果。

那么,什么是Alpha Blend的原理呢?Alpha Blend是一种图像合成技术,它通过调整像素的透明度来实现不同图像的叠加效果。

在Unity中,每个像素都有RGBA四个分量,其中A代表透明度。

透明度的取值范围是0到1,0代表完全透明,1代表完全不透明。

在Alpha Blend中,通过将不同图像的像素按照一定的权重进行叠加,从而实现透明效果。

具体来说,对于两个像素的叠加,可以使用以下公式:Result = Source * SourceAlpha + Destination * (1 - SourceAlpha)其中,Source表示当前像素的颜色值,SourceAlpha表示当前像素的透明度,Destination表示目标像素的颜色值。

通过这个公式,可以根据两个像素的透明度来计算最终的颜色值。

在Unity中,Alpha Blend的原理是基于混合模式来实现的。

混合模式定义了不同像素之间的混合方式,包括源因子和目标因子。

源因子决定了当前像素的颜色如何影响目标像素,而目标因子则决定了目标像素的颜色如何影响当前像素。

常用的混合模式有以下几种:- Alpha Blend:使用源因子和目标因子进行线性插值,实现透明效果。

- Additive:将源像素的颜色和目标像素的颜色相加,用于实现光照效果或粒子效果。

- Multiply:将源像素的颜色和目标像素的颜色相乘,用于实现阴影效果或颜色叠加效果。

在Unity中,可以通过在材质上设置相应的混合模式来实现不同的渲染效果。

在Shader中,可以使用Blend命令来指定混合模式,例如:Blend SrcAlpha OneMinusSrcAlpha这个命令表示使用Alpha Blend混合模式,其中源因子为源像素的透明度,目标因子为1减去源像素的透明度。

unity shader常用方法

unity shader常用方法

(原创实用版3篇)编制人员:_______________审核人员:_______________审批人员:_______________编制单位:_______________编制时间:____年___月___日序言下面是本店铺为大家精心编写的3篇《unity shader常用方法》,供大家借鉴与参考。

下载后,可根据实际需要进行调整和使用,希望能够帮助到大家,谢射!(3篇)《unity shader常用方法》篇1Unity 中 Shader 的使用可以通过编写着色器来实现,着色器分为顶点着色器和片元着色器两种。

顶点着色器主要用于处理模型的顶点信息,如位置、颜色、纹理坐标等,而片元着色器则主要用于处理模型的像素信息,如光照、阴影、透明、反射等。

通过编写 Shader,我们可以实现各种特效,例如镜面反射、水面、塑料等特殊材质。

同时,Shader 也可以方便地设置渲染状态,如混合函数、深度写入等。

在 Unity 中,我们可以将编写好的着色器打包成材质,然后将材质赋予合适的游戏对象,从而实现我们所需的渲染效果。

Shader 的编写语言为 HLSL 和 GLSL,其中 HLSL 是 Microsoft 推出的标准语言,而 GLSL 则是 OpenGL 的标准语言。

在 Unity 中,我们可以使用这两种语言中的任意一种来编写着色器。

此外,Unity 还提供了 ShaderLab 语言,它是一种类似于 HLSL 的语言,专门用于编写 Unity 中的着色器。

《unity shader常用方法》篇2Unity 中的 Shader 是一种用于控制 GPU 渲染流水线的高度可编程的阶段,可以通过编写着色器和设置渲染状态来实现各种渲染效果。

下面列举了一些Unity 中常用的 Shader 方法和技巧:1. 基本 Shader 类型:Unity 中的 Shader 分为两种类型,分别是顶点着色器(Vertex Shader)和片元着色器(Fragment Shader)。

43unity_渲染通道通用指令混合模式 Alpha测试

43unity_渲染通道通用指令混合模式  Alpha测试
Less <, Greater >, LEqual <= , GEqual >=, Equal ==, NotEqual !=, Always 总是绘制,关闭深度测试; 4: ZTest 条件 5: 一般放在放在Pass通道里面;
博毅创为
7
通道遮罩
1:通道遮罩可以是开发人员指定渲染结果输出的通道,而不是通常情况下的RGBA四个通道; 2:可选的是RGBA的任意组合以及0,如果为0意味着不会写入到任何通道; 3: ColorMask RG ... ColorMask 0
} }
博毅创为
11
作业
1:理解渲染通道指令 混合模式 2: 理解渲染通道指令 Aplha测试; 3: 理解渲染通道指令 深度测试; 4: 理解渲染通道指令 通道遮罩; 5: 理解渲染通道指令 面剔除; 6: 不要把通道指令写到Cg代码段中;
博毅创为
12
3: Blend 源因子,目标因子: 配置并开启混合,产生的颜色和因子相乘,然后两个颜色相加
4: Blend 源因子,目标因子, 源因子A,目标因子A: 源因子与目标因子用户混合颜色值,源因
子A,与目标因子A,用于混合alpha
5: BlendOp操作命令: 不是将颜色混合在一起,而是对他们进行操作,主要有:
2: Unity 渲染模式: 普通物体从前向后, Alpha从后向前; 2:渲染队列的数值决定了Unity在渲染场景物体时的先后顺序,关闭深度测试的情况下;
博毅创为
4
混合模式
1:在所有计算完成后,决定当前的计算结果输出到帧缓冲区时,如何混合源和目标,通常用
来绘制半透明的物体;
2: Blend Off 关闭混合
OneMinusDstColor 阶段值 * (1-目标颜色的值);

unity3d外发光的shader

unity3d外发光的shader

Shader "Faye/OutLightting"{Properties{_MainTex("Texture (RGB)", 2D) = "black" {}_Color("Color", Color) = (0, 0, 0, 1)_AtmoColor("Atmosphere Color", Color) = (0.5, 0.5, 1.0, 1) _Size("Size", Float) = 0.1_Falloff("Falloff", Float) = 5_FalloffPlanet("Falloff Planet", Float) = 5_Transparency("Transparency", Float) = 15_TransparencyPlanet("Transparency Planet", Float) = 1}SubShader{Pass{Name "PlanetBase"Tags {"LightMode" = "Always"}Cull BackCGPROGRAM#pragma vertex vert#pragma fragment frag#pragma fragmentoption ARB_fog_exp2#pragma fragmentoption ARB_precision_hint_fastest#include "UnityCG.cginc"uniform sampler2D _MainTex;uniform float4 _MainTex_ST;uniform float4 _Color;uniform float4 _AtmoColor;uniform float _FalloffPlanet;uniform float _TransparencyPlanet;struct v2f{float4 pos : SV_POSITION;float3 normal : TEXCOORD0;float3 worldvertpos : TEXCOORD1;float2 texcoord : TEXCOORD2;v2f vert(appdata_base v){v2f o;o.pos = mul (UNITY_MA TRIX_MVP, v.vertex);o.normal = v.normal;o.worldvertpos = mul(_Object2World, v.vertex).xyz;o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);return o;}float4 frag(v2f i) : COLOR{i.normal = normalize(i.normal);float3 viewdir = normalize(_WorldSpaceCameraPos-i.worldvertpos);float4 atmo = _AtmoColor;atmo.a = pow(1.0-saturate(dot(viewdir, i.normal)), _FalloffPlanet);atmo.a *= _TransparencyPlanet*_Color;float4 color = tex2D(_MainTex, i.texcoord)*_Color;color.rgb = lerp(color.rgb, atmo.rgb, atmo.a);return color*dot(normalize(i.worldvertpos-_WorldSpaceLightPos0), i.normal); }ENDCG}Pass{Name "AtmosphereBase"Tags {"LightMode" = "Always"}Cull FrontBlend SrcAlpha OneCGPROGRAM#pragma vertex vert#pragma fragment frag#pragma fragmentoption ARB_fog_exp2#pragma fragmentoption ARB_precision_hint_fastest#include "UnityCG.cginc"uniform float4 _Color;uniform float4 _AtmoColor;uniform float _Size;uniform float _Falloff;uniform float _Transparency;struct v2f{float4 pos : SV_POSITION;float3 normal : TEXCOORD0;float3 worldvertpos : TEXCOORD1;};v2f vert(appdata_base v){v2f o;v.vertex.xyz += v.normal*_Size;o.pos = mul (UNITY_MA TRIX_MVP, v.vertex);o.normal = v.normal;o.worldvertpos = mul(_Object2World, v.vertex);return o;}float4 frag(v2f i) : COLOR{i.normal = normalize(i.normal);float3 viewdir = normalize(i.worldvertpos-_WorldSpaceCameraPos);float4 color = _AtmoColor;color.a = pow(saturate(dot(viewdir, i.normal)), _Falloff);color.a *= _Transparency*_Color*dot(normalize(i.worldvertpos-_WorldSpaceLightPos0), i.normal);return color;}ENDCG}}FallBack "Diffuse"}。

unity alphablend的原理

unity alphablend的原理

unity alphablend的原理Unity中的Alpha Blend(透明混合)是一种常用的图形渲染技术,它允许物体在绘制时具有部分透明效果。

在本文中,我们将深入探讨Unity中Alpha Blend的原理和实现方式。

让我们来了解一下Alpha值的概念。

在计算机图形中,Alpha值代表了像素的透明度或不透明度。

它是一个介于0到1之间的浮点数,其中0表示完全透明,1表示完全不透明。

通过调整Alpha值,我们可以控制物体的透明程度。

在Unity中,Alpha Blend是一种通过混合源像素和目标像素的颜色来实现透明效果的渲染技术。

具体来说,Alpha Blend使用了下面的公式来计算最终的颜色:Final Color = Source Color * Source Alpha + Destination Color * (1 - Source Alpha)其中,Source Color是源像素的颜色,Source Alpha是源像素的Alpha值,Destination Color是目标像素的颜色。

通过这个公式,我们可以看到,当Source Alpha为1时,即完全不透明时,Final Color就等于Source Color,也就是说,完全覆盖了目标像素的颜色。

而当Source Alpha为0时,即完全透明时,Final Color就等于Destination Color,也就是说,完全不影响目标像素的颜色。

在Alpha Blend中,我们还可以使用不同的混合模式来控制透明效果。

Unity中常用的混合模式有以下几种:1. Alpha Blend(标准透明混合):使用上述公式进行混合计算,适用于大多数透明效果。

2. Additive Blend(加法混合):将源像素的颜色和目标像素的颜色相加,适用于制作光效和火焰等发光效果。

3. Multiply Blend(乘法混合):将源像素的颜色和目标像素的颜色相乘,适用于制作阴影和颜色叠加效果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

原创文章如需转载请注明:转载自风宇冲Unity3D教程学院
Shader第十二讲Alpha测试
引言:本讲和下一讲主要讲Alpha即透明通道有关的内容。

RGBA,其中最终在屏幕上显示的只有RGB即红绿蓝组成的颜色,Alpha并没有任何颜色显示。

A只是辅助颜色运算特别是多图层运算而已。

例如在单图层的情况下(1,1,1,0.8)输出的是(1,1,1)*0.8即浅灰色
(0.8,0.8,0.8),和(0.8,0.8,0.8)是等价的.但是假如不再是单图层而背景为绿色(0,1,0,1)的时候,(0.8,0.8,0.8)就不知道怎么去运算了,而(1,1,1,0.8)知道。

看不懂这段引言?没关系,往下看,当学完第五讲和第六讲后再回来看就自然能深刻理解了。

什么是通道:
通道是8位的灰度图像,能够显示256种灰度,用来表示颜色的RGBA值。

R=Red红色,G=Green绿色,B=blue蓝色,A=alhpa透明值, 其中RGB为原色通道,A为透明通道。

在通道中,以白色代替透明表示要处理的部分(选择区域);以黑色表示不需处理的部分(非选择区域)
所有通道取值范围是[0,255],但是在Shader里取值范围是[0,1], 0和1分辨对应0和255
什么是Alpha通道:
定义:一般图形卡具有32位总线,附加的8位信号就被用来保存不可见的透明度信号以方便处理用,这就是Alpha通道。

白色的alpha象素用以定义不透明的彩色象素,而黑色的alpha象素用以定义透明象素,黑白之间的灰阶用来定义半透明象素。

简而言之:Alpha通道取值同样为[0,255] 以及Shader[0,1], 值越小最透明,值最大越不透明。

在Shader里即0为透明,什么都没有,编辑器显示为黑色。

1则不透明,全部都显示,编辑器其显示为白色如下图。

什么是Alpha Test:
Alpha Test ,中文就是透明度测试。

简而言之就是V&F shader中最后fragment函数输出的该点颜色值(即上一讲frag的输出half4)的alpha值与固定值进行比较。

AlphaTest语句通常位于Pass{}中的起始位置。

语法:
第一种: AlphaTest Off:不测试,全渲染
第二种:Alpha 比较符目标alpha值
其中目标alpha值取值范围是0至1,也可以用参数,如AlphaTest [varName]。

比较符:(目标alpha值下面记作x)
Always 全渲染(任意x值)
Never 全不渲染
Greater 点的alpha值大于x时渲染
GEuqal 点的alpha值大于等于x时渲染
Less 点的alpha值小于x时渲染
LEqual 点的alpha值小于等于x时渲染
Equal 点的alpha值等于x时渲染
NotEqual 点的alpha值不等于x时渲染
例:
AlphaTest never 0 全不渲染(这个0可以是任意值,但必须填)
AlphaTest always 0 全渲染(这个0可以是任意值,但必须填)
AlphaTest off 全渲染
AlphaTest Greater 0.4 当alpha大于0.4渲染,缺点是边缘过于锋利并且显示不完整,alpha 小于0.4的部分被忽略掉了
Alpha Blend 边缘柔和,但是中心也太柔和,没有实体的感觉
AlphaTest Greater 0.4 / AlphaTestLEqual 0.4 两个部分,大于0.4不混合,小于0.4混合。

效果是既有实体感觉,边缘也柔和。

相关文档
最新文档