Unity3d Shader开发(三)Pass(Blending )
混合被用于制作透明物体。

当图像被渲染时,所有着色器被执行以后,所有贴图被应用后,像素将被写到屏幕。他们是如何通过Blend命令的控制和已有的图像合并呢?
Syntax 语法
- Blend Off
- Turn off blending 关闭混合
- Blend SrcFactor DstFactor
- 配置并启动混合。产生的颜色被乘以SrcFactor. 已存在于屏幕的颜色乘以DstFactor,并且两者将被叠加在一起。
- Blend SrcFactor DstFactor, SrcFactorA DstFactorA
- 同上,但是使用不同的要素来混合alpha通道
- BlendOp Min | Max | Sub | RevSub
- 不是添加混合颜色在一起,而是对它们做不同的操作。
Properties 属性
以下所有属性对SrcFactor或DstFactor都可用。Source指的是被计算的颜色,Destination是已经在屏幕上的颜色。
| One | The value of one - use this to let either the source or the destination color come through fully. 值为1,使用此设置来让源或是目标颜色完全的通过。 |
| Zero | The value zero - use this to remove either the source or the destination values. 值为0,使用此设置来删除源或目标值。 |
| SrcColor | The value of this stage is multiplied by the source color value. 此阶段的值是乘以源颜色的值。 |
| SrcAlpha | The value of this stage is multiplied by the source alpha value. 此阶段的值是乘以源alpha的值。 |
| DstColor | The value of this stage is multiplied by frame buffer source color value. 此阶段的值是乘以帧缓冲区源颜色的值。 |
| DstAlpha | The value of this stage is multiplied by frame buffer source alpha value. 此阶段的值是乘以帧缓冲区源alpha的值。 |
| OneMinusSrcColor | The value of this stage is multiplied by (1 - source color). 此阶段的值是乘以(1 - source color) |
| OneMinusSrcAlpha | The value of this stage is multiplied by (1 - source alpha). 此阶段的值是乘以(1 - source alpha) |
| OneMinusDstColor | The value of this stage is multiplied by (1 - destination color). 此阶段的值是乘以(1 - destination color) |
| OneMinusDstAlpha | The value of this stage is multiplied by (1 - destination alpha). 此阶段的值是乘以(1 - destination alpha) |
Details 细节
Below are the most common blend types:
以下是最常见的混合类型:
BlendSrcAlphaOneMinusSrcAlpha//
Alpha blendingBlendOneOne//
AdditiveBlendOneOneMinusDstColor//
Soft AdditiveBlendDstColorZero//
MultiplicativeBlendDstColorSrcColor//
2x Multiplicative
这里是一个着色器的小例子,添加一个纹理,无论是否已在屏幕上:
Shader "Simple Additive" {
Properties {
_MainTex ("Texture to blend", 2D) = "black" {}
}
SubShader {
Tags { "Queue" = "Transparent" }
Pass {
Blend One One
SetTexture [_MainTex] { combine texture }
}
}
}

第一个pass渲染光照、alpha混合纹理到屏幕上。Alpha通道决定的透明度。
第二个pass渲染在alpha混合窗口顶部一个反射立方体贴图,使用附加透明度。
Shader "Glass" {
Properties {
_Color ("Main Color", Color) = (,,,)
_MainTex ("Base (RGB) Transparency (A)", 2D) = "white" {}
_Reflections ("Base (RGB) Gloss (A)", Cube) = "skybox" { TexGen CubeReflect }
}
SubShader {
Tags { "Queue" = "Transparent" }
Pass {
Blend SrcAlpha OneMinusSrcAlpha
Material {
Diffuse [_Color]
}
Lighting On
SetTexture [_MainTex] {
combine texture * primary double, texture * primary
}
}
Pass {
Blend One One
Material {
Diffuse [_Color]
}
Lighting On
SetTexture [_Reflections] {
combine texture
Matrix [_Reflection]
}
}
}
}

Unity3d Shader开发(三)Pass(Blending )的更多相关文章
- Unity3d Shader开发(三)Pass(Pass Tags,Name,BindChannels )
Pass Tags 通过使用tags来告诉渲染引擎在什么时候该如何渲染他们所期望的效果. Syntax 语法 Tags { "TagName1" = "Value1&qu ...
- Unity3d Shader开发(三)Pass(Alpha testing )
透明度测试是阻止像素被写到屏幕的最后机会. 在最终渲染出的颜色被计算出来之后,可选择通过将颜色的透明度值和一个固定值比较.如果比较的结果失败,像素将不会被写到显示输出中. Syntax 语法 Alph ...
- Unity3d Shader开发(三)Pass(Culling & Depth Testing)
剔除是一种通过避免渲染背对观察者的几何体面来提高性能的优化措施.所有几何体都包含正面和反面.剔除基于大多数对象都是封闭的事实:如果你有一个立方体,你不会看到背离你的那一面(总是只有一面在你的前方),因 ...
- Unity3d Shader开发(三)Pass(Texturing )
纹理在基本的顶点光照被计算后被应用.在着色器中通过SetTexture 命令来完成. SetTexture 命令在片面程序被使用时不会生效:这种模式下像素操作被完全描述在着色器中. 材质贴图可以用 ...
- Unity3d Shader开发(三)Pass(Color, Material, Lighting )
材质和灯光参数被用于控制内置顶点光照.顶点光照是Direct3D/OpenGL标准的按每顶点计算的光照模型.光照打开时,光照受材质块,颜色材质和平行高光命令的影响. 每像素光照常被实现为自定义顶点/片 ...
- Unity3d Shader开发(三)Pass(Fog )
雾参数用于雾命令控制. 雾化是通过混合已生成的像素的颜色和基于到镜头的距离来确定的一个不变色来完成.雾化不会改变已经混合的像素的透明度值,只是改变RGB值. Syntax 语法 Fog { Fog C ...
- Unity3d Shader开发(四)UsePass ,GrabPass ,SubShader Tags
(一)UsePass 命令 使用 来自另一个着色器的命名通道. Syntax 语法 UsePass "Shader/Name" 插入所有来自给定着色器中的给定名字的通道.Shade ...
- Unity3d Shader开发(五)Fallback ,Category
Fallback定义在所有子着色器后.简单来说,它表示"如果没有任何子着色器能被运行在当前硬件上,请尝试使用降级着色器". Syntax 语法 Fallback "nam ...
- Unity3d Shader开发(二)SubShader
(1)SubShader Unity中的每一个着色器都包含一个subshader的列表,当Unity需要显示一个网格时,它能发现使用的着色器,并提取第一个能运行在当前用户的显示卡上的子着色器. 当Un ...
随机推荐
- 数字转化成字符串C语言
#include <stdio.h> void Myitoa(int,char *); int getnumberLength(int); int main(){ ]; ; Myitoa( ...
- linux解压命令笔记
转载:http://www.cnblogs.com/eoiioe/archive/2008/09/20/1294681.html .tar 解包:tar xvf FileName.tar打包:tar ...
- 关于SWT/JFace的API文档
在CSDN上下了几个CHM格式的文档,下载的时候要付的分数还挺高,但是下载下来三个都不能用,左边罗列了所有的类和方法.双击按回车右边都没有内容. 真坑爹. >>>>>&g ...
- C语言的一些误用和知识总结
现在学嵌入式的话,最主要是要把C语言熟悉,比如指针,链表,共用体,结构体等,还是得听老师的话.. 在学习单片机的时候才真正知道C语言是什么它是来干什么的~但是C语言用到嵌入式只是它小小的一部分他的应用 ...
- Windows服务定时运行,判断当前时间是否在配置时间段内
/// <summary> /// 判断程序是否在设置运行时间内 /// </summary> /// <param name="startTime" ...
- orcale授权
grant connect,resource,dba to 表名;--用户授权 CONNECT角色: --是授予最终用户的典型权利,最基本的 CREATE SESSION --建立会话 RESOURC ...
- ASP实现用年月日时分秒和两位随机数字来作为上传文件名的函数
Public Function GetNewFileName() dim ranNum dim dtNow dtNow=Now() randomize ranNum=int(90*rnd)+10 Ge ...
- ASP.NET5/MVC6 下生成Helppage
https://github.com/domaindrivendev/Ahoy 打开nuget包管理器,搜索Swashbuckle 打开Startup.cs文件在ConfigureServices方法 ...
- [转]深入理解jQuery插件开发
如果你看到这篇文章,我确信你毫无疑问会认为jQuery是一个使用简便的库.jQuery可能使用起来很简单,但是它仍然有一些奇怪的地方,对它基本功能和概念不熟悉的人可能会难以掌握.但是不用担心,我下面已 ...
- HTML5标签及使用方法描述
HTML 5 作为新一代的超文本标记语言,增加了许多标签.这些标签不但更有语义,而且功能强大.具体有以下标签: <article> 定义外部的内容.比如来自一个外部的新闻提供者的一篇新的文 ...