Unity3D Shader官方教程翻译(十一)----Shader语法:Pass的Blending(混合)

ShaderLab syntax: Blending 混合

Blending is used to make transparent objects.

混合是用来制作透明物体的。


When graphics are rendered, after all shaders have executed and all textures have been applied, the pixels are written to the screen. How they are combined with what is already there is controlled by the Blend command.

在所有着色器执行完毕,所有纹理都被应用,所有像素准备被呈现到屏幕之后, 使用Blend命令来操作这些像素进行混合。

指导:

Blend 混合是将源色和目标色以某种方式混合生成特效的技术。混合常用来绘制透明或半透明的物体。在混合中起关键作用的α值实际上是将源色和目标色按给定比率进行混合,以达到不同程度的透明。α值为0则完全透明,α值为1则完全不透明。混合操作只能在RGBA模式下进行,颜色索引模式下无法指定α值。物体的绘制顺序会影响到OpenGL的混合处理。

参考文章:http://hi.baidu.com/ÖÙÁÁÁÁ/blog/item/5fc565445e19714a500ffebb.html
Syntax 语法
Blend Off
Turn off blending
关闭混合

Blend SrcFactor DstFactor 混合 起始因子
Configure & enable blending. The generated color is multiplied by the SrcFactor. The color already on screen is multiplied by DstFactor and the two are added together.
配置并开启混合。计算产生的颜色和srcFactore相乘。已经在屏幕上的颜色和dstFactor相乘,然后2个颜色相加。

Blend SrcFactor DstFactor, SrcFactorA DstFactorA
Same as above, but use different factors for blending the alpha channel.
和上面相同,但是有些因子不同。SrcFactorA DstFactorA 这些因子使用alpha通道进行混合。

BlendOp Min | Max | Sub | RevSub
Instead of adding blended colors together, do a different operation on them.
不是将加入的颜色混合在一起,而是对他们做不同的操作。

Properties 属性

All following properties are valid for both SrcFactor & DstFactor. Source refers to the calculated color, Destination is the color already on the screen.

下面列出的所有属性是对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-源颜色)的值相乘。

OneMinusSrcAlpha
The value of this stage is multiplied by (1 - source alpha).
此阶段的值是和(1-源Alpha)的值相乘。

OneMinusDstColor
The value of this stage is multiplied by (1 - destination color).
此阶段的值是和(1-目标颜色)的值相乘。

OneMinusDstAlpha
The value of this stage is multiplied by (1 - destination alpha).
此阶段的值是和(1-目标Alpha)的值相乘。

Details 详情

Below are the most common blend types:

下列是最经常使用的混合类型
Blend SrcAlpha OneMinusSrcAlpha // Alpha blending alpha混合
Blend One One // Additive 相加混合
Blend One OneMinusDstColor // Soft Additive 柔和相加混合
Blend DstColor Zero // Multiplicative 相乘混合
Blend DstColor SrcColor // 2x Multiplicative 2倍相乘混合
Example 例子

Here is a small example shader that adds a texture to whatever is on the screen already:

这里是1个着色器的小例子:将一个纹理添加到屏幕上,无论它是否已经在屏幕上。
Shader "Simple Additive" {
Properties {
_MainTex ("Texture to blend", 2D) = "black" {}
}
SubShader {
Tags { "Queue" = "Transparent" }
Pass {
Blend One One
SetTexture [_MainTex] { combine texture }
}
}
}

And a more complex one, Glass. This is a two-pass shader:

1个更复杂的着色器:玻璃。它含有2个pass
The first pass renders a lit, alpha-blended texture on to the screen. The alpha channel decides the transparency.
第一个pass渲染光照和将纹理以alpha混合的方式渲染到屏幕上。Alpha通道决定其透明度。

The second pass renders a reflection cubemap on top of the alpha-blended window, using additive transparency.

第二个pass渲染一个反射立方体贴图在alpha混合得视窗的顶部,使用附加的透明度。
Shader "Glass" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_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]
}
}
}
}

由www.J2meGame.com原创,转载请说明

时间: 2024-12-13 14:37:44

Unity3D Shader官方教程翻译(十一)----Shader语法:Pass的Blending(混合)的相关文章

Unity3D Shader官方教程翻译(十九)----Shader语法,编写表面着色器

Writing Surface Shaders Writing shaders that interact with lighting is complex. There are different light types, different shadow options, different rendering paths (forward and deferred rendering), and the shader should somehow handle all that compl

Qt官方教程翻译——First Steps with QML

附网址:http://qt-project.org/doc/qt-5/qmlfirststeps.html Creating a QML Document 一个QML文件定义了对象的层次结构:具有高度可读的,结构化的布局.每个QML文件由两部分组成:一个引入(import)部分,以及一个对象声明(declaration)部分.用户界面中最常用的的类型(types)和功能由引入QtQuick提供. Importing and Using the QtQuick Module 为了使用Qt Quic

Qt官方教程翻译——QML Applications

附网址:http://qt-project.org/doc/qt-5/qmlapplications.html QML Applications QML是一种声明式语言,它提供了一组接口用来描述视觉组件以及他们的互动和相关性.它是一个高度可读的语言,并且被设计成使组件以一个动态的方式相互连接.同时它使组件很容易被复用以及创建定制的用户界面.使用QtQuick模块,设计者和开发者可以很容易使用QML建立流体动画的用户界面,并将这些界面连接到后端的C++库上面. What is QML? QML是一

Qt官方教程翻译——The QML Reference

附网址:http://qt-project.org/doc/qt-5/qmlreference.html The QML Reference QML是用来创建高度动态应用程序的声明式语言.在QML中,应用程序通过类似UI组件这样的模块搭建起来,通过设置这些模块的属性可以定义应用程序的行为.当与JavaScript结合起来时,应用程序的行为将变得脚本化.另外,QML大量使用Qt,它允许QML直接访问类型和其他Qt特性. 这个参考手册描述了QML语言的特性.手册中很多QML类型来源于Qt QML或Q

QML官方教程翻译——Use Case - Integrating JavaScript in QML

附网址:http://qt-project.org/doc/qt-5/qtquick-usecase-integratingjs.html Use Case - Integrating JavaScript in QML -- 在QML中集成JavaScript代码 JavaScript代码可以很容易被集成到QML中以提供UI逻辑,必要的控制,或是其他益处. Using JavaScript Expressions for Property Values -- 使用JavaScript表达式表示

Qt官方教程翻译——Use Case - Visual Elements In QML

附网址:http://qt-project.org/doc/qt-5/qtquick-usecase-visual.html Use Case - Visual Elements In QML -- 用例 - QML中的可视化元素 The Rectangle Type -- 矩形 对于最基本的视觉元素,Qt Quick提供了Rectangle类型来绘制矩形.这些矩形可以使用纯色或渐变色来填充.Rectangle类型也可以绘制矩形的边界(borders). 要绘制矩形无法绘制的自定义形状,可以参考

Qt官方教程翻译——Use Case - Responding To User Input in QML

附网址:http://qt-project.org/doc/qt-5/qtquick-usecase-userinput.html Supported Types of User Input-- 用户输入的支持类型 Qt Quick模块提供了支持常用用户输入的支持类型(types),包括鼠标和触摸事件,文本输入和按键按下事件.其他模块也分别提供了针对其他用户输入的响应类型(例如,Qt Sensors模块提供了对"摇一摇"的支持). 这篇文档介绍了如何处理基本的用户输入:要了解更多关于运

Qt官方教程翻译——Qt QML

Pull 解析器简介 Pull 解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如: 开始元素和结束元素事件,使用xmlPullParser.next() 可以进入下一个元素并触发相应事件.跟 SAX 不同的 是, Pull 解析器产生的事件是一个数字,而非方法,因此可以使用一个 switch 对事件进行处理.当元素开始解析时,调用 parser.nextText() 方法可以获取下一个 Text 类型节点的值. Pull解析器的源码及文档下载网址:http://www.xmlpul

Qt官方教程翻译——Glossary Of QML Terms

附网址:http://qt-project.org/doc/qt-5/qml-glossary.html Glossary Of QML Terms -- QML各术语词汇表 Common Terms -- 通用术语 术语 定义 QML 编写QML应用程序所使用的语言,由Qt QML组件实现语言架构和引擎. Qt Quick QML语言的标准类型与功能库,由Qt Quick组件提供,并通过"importQtQuick 2.0"来使用. Type 在QML中,一个type有可能是一种Ba