Unity Shader:Blend 混合

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.

混合不仅仅用于透明度混合,我们要开启混合,在Unity中设置的同时也进行了开启,但如果在其他图形API中是需要我们自己手动开启的。
源颜色(Src,source color):由片元着色器产生的颜色值
目标颜色(Dst,Destination color):从颜色缓冲中读取到的颜色值
这里的颜色值都是包括RGBA四个通道

1 混合命令语法(Syntax)

Blend Off

Turn off blending (this is the default)
默认设置,关闭混合
示例:
Blend Off

Blend SrcFactor DstFactor

Configure and 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.
开启混合并设置混合因子。源颜色会乘以SrcFactor,而目标颜色会乘以DstFactor,然后把两者相加再存入颜色缓冲中
示例:
Blend SrcAlpha OneMinusSrcAlpha
透明度混合的命令

Blend SrcFactor DstFactor, SrcFactorA DstFactorA

Same as above, but use different factors for blending the alpha channel.
和上面几乎一样,只是使用了不同的因子来混合透明通道
示例:
Blend SrcAlpha OneMinusSrcAlpha, One Zero
混合后输出颜色的透明度就是源颜色的透明度

BlendOp Op

Instead of adding blended colors together, carry out a different operation on them.
并非是把源颜色和目标颜色简单相加后混合,而是使用Op(操作命令)对它们进行其他的操作
示例:
BlendOp Min
Blend One One
变暗效果(Darken)

BlendOp OpColor, OpAlpha

Same as above, but use different blend operation for color (RGB) and alpha (A) channels.
和上面几乎一样,只是使用了不同的混合操作来分别处理RGB通道和透明通道
示例:
BlendOp Add, Min

AlphaToMask On

Turns on alpha-to-coverage. When MSAA is used, alpha-to-coverage modifies multisample coverage mask proportionally to the pixel Shader result alpha value. This is typically used for less aliased outlines than regular alpha test; useful for vegetation and other alpha-tested Shaders.

2 混合因子

All following properties are valid for both SrcFactor & DstFactor in the Blend command. Source refers to the calculated color, Destination is the color already on the screen. The blend factors are ignored if BlendOp is using logical operations.

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.
因子为源颜色值。当用于混合RGB的混合等式时,使用SrcColor的RGB分量作为混合因子;当用于混合A通道的混合等式时,使用SrcColor的A分量作为混合因子

SrcAlpha

The value of this stage is multiplied by the source alpha value.
因子为源颜色的透明度值(A通道)

DstColor

The value of this stage is multiplied by frame buffer source color value.
因子为目标颜色值(未混合前缓冲区中的颜色值)。当用于混合RGB通道的混合等式时,使用DstColor的RGB分量作为混合因子;当用于混合A通道的混合等式时,使用DstColor的A分量作为混合因子

DstAlpha

The value of this stage is multiplied by frame buffer source alpha value.
因子为目标颜色的透明度值(A通道)

OneMinusSrcColor

The value of this stage is multiplied by (1 - source color).
因子为(1-源颜色)。当用于混合RGB通道的混合等式时,使用结果的RGB分量作为混合因子;当用于混合A通道的混合等式时,使用结果的A分量作为混合因子

OneMinusSrcAlpha

The value of this stage is multiplied by (1 - source alpha).
因子为(1-源颜色的透明度值)

OneMinusDstColor

The value of this stage is multiplied by (1 - source alpha).
因子为(1-目标颜色)。当用于混合RGB通道的混合等式时,使用结果的RGB分量作为混合因子;当用于混合A通道的混合等式时,使用结果的A分量作为混合因子

OneMinusDstAlpha

The value of this stage is multiplied by (1 - destination alpha).
因子为(1-目标颜色的透明度值)

3 混合操作

The following blend operations can be used:

Add

Add source and destination together.
将与分别与自己的混合因子相乘后的源颜色和目标颜色相加。默认的混合操作。
O_rgb=SrcFactor ×S_rgb+DstFactor ×D_rgb
O_a=SrcFactorA ×S_a+DstFactorA ×D_a

Sub

Subtract destination from source.
用混合后的源颜色减去混合后的目标颜色。
O_rgb=SrcFactor ×S_rgb−DstFactor ×D_rgb
O_a=SrcFactorA ×S_a−DstFactorA ×D_a

RevSub

Subtract source from destination.
用混合后的目标颜色减去混合后的源颜色
O_rgb=DstFactor ×D_rgb−SrcFactor ×S_rgb
O_a=DstFactorA ×D_a−SrcFactorA ×S_a

Min

Use the smaller of source and destination.
使用源颜色和目标颜色中较小的值,是逐分量比较的。
O_rgba=(min⁡(S_r,D_r ),min⁡(S_g,D_g ),min⁡(S_b,D_b ),min⁡(S_a,D_a ))

Max

Use the larger of source and destination.
使用源颜色和目标颜色中较大的值,是逐分量比较的。
O_rgba=(max⁡(S_r,D_r ),max⁡(S_g,D_g ),max⁡(S_b,D_b ),max⁡(S_a,D_a ))

其他逻辑操作

仅在DirectX11.1中支持,详见
https://docs.unity3d.com/Manual/SL-Blend.html

4 常见的混合类型

Blend SrcAlpha OneMinusSrcAlpha

正常(Normal),即透明度混合

Blend OneMinusDstColor One

柔和相加(Soft Additive)

Blend DstColor Zero

正片叠底(Multiply),即相乘

Blend DstColor SrcColor

两倍相乘(2x Multiply)

BlendOp Min 、 Blend One One

变暗(Darken)

BlendOp Max、 Blend One One

变亮(Lighten)

Blend OneMinusDstColor One

滤色(Screen)

Blend One OneMinusSrcColor

同上

Blend One One

线性减淡(Linear Dodge)

参考

https://docs.unity3d.com/Manual/SL-Blend.html

Unity Shader: Blend混合相关推荐

  1. Shader Blend混合效果

    1.Blend SrcAlpha OneMinusSrcAlpha 正常模式(透明度混合) 2.Blend OneMinusDstColor One 柔和相加(soft Additive) 3.Ble ...

  2. 【Unity Shader】实现透明度测试和透明度混合

    本篇开始将进行<入门精要>初级篇最后一部分的学习,完成透明效果的学习. 1 Unity中实现透明效果的方法 一个像素的RGBA参数中的最后一项A指的就是透明度Alpha.在之前的实践中,一 ...

  3. unity shader学习---透明度测试,透明度混合

    unity实现透明效果 效果图 理论 Alpha Test Alpha Blend 改进 开启深度写入的半透明效果 双面渲染的透明效果 代码部分 效果图 Alpha Test Alpha Test W ...

  4. Unity Shader 序列帧动画

    shader中的序列帧动画属于纹理动画中的一种,主要原理是将给定的纹理进行等分,再根据时间的变化循环播放等分中的一部分. Unity Shader 内置时间变量 名称 类型 描述 _Time floa ...

  5. Unity Shader 之 透明效果

    本文引用 Unity Shader入门精要 开启透明混合后,一个物体被渲染到屏幕上时,每个片元除了颜色值和深度值外,还有--透明度.透明度为1,则完全不透明,透明度为0,则完全不会显示. 在Unity ...

  6. unity shader入门精要_Unity Shader 入门(一):渲染流水线

    一.参考与说明(需要写在开始东西): 1.1 Unity Shader 入门紧要学习 candycat1992/Unity_Shaders_Book​github.com 1.2 还有一些图形学的历史 ...

  7. 【Unity Shader】(六) ------ 复杂的光照(上)

    笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题.              [Unity Sha ...

  8. Unity Shader - Planar Shadow - 平面阴影

    文章目录 整体运行效果 思路 Shader 问题 Z-Fighting,解决:按法线方向偏移一丢丢 绘制 Alpha 混合重叠,解决:使用 stencil buffer 来规避 为何出现这个问题 解决 ...

  9. Unity Shader入门

    什么是Shader Shader(着色器)是一段能够针对3D对象进行操作.并被GPU所执行的程序.Shader并不是一个统一的标准,不同的图形接口的Shader并不相同.OpenGL的着色语言是GLS ...

  10. 如何用Unity Shader制作类似《炉石传说》卡牌的动态效果?

    此篇为鄙人在卡牌项目中,尝试模仿<炉石传说>卡面特效所制作的特效Shader总结回顾,几经修改,最终成为了现在的样子,因为使用简单,效果明显,虽然距离<炉石传说>的卡面特效还有 ...

最新文章

  1. Mac OSX Versions输入username按1下都会出现2个字符,并且不能create,解决方法
  2. java登录界面命令_Java命令行界面(第15部分):Jargo
  3. java.lang.ClassNotFoundException: org.apache.log4j.Logger
  4. redis提示Could not get a resource from the pool(jedis连接池配置)
  5. SQL Server - 聚集索引 第六篇
  6. C# Object.Equals方法深入研究
  7. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.23. 行和数组比较
  8. 计算机管理系统权限申请审批表,开通权限申请书范文
  9. 两根硬铜线并线接插座_两根硬铜线正确接法
  10. 龙渊服务器信息丢失,多多自走棋为什么停止运营 游戏数据转移腾讯服务器
  11. MeteoInfo 生成等值面
  12. 飞行器中传感器测量原理及测量模型
  13. 关于计算机学院的毕业论文致谢,计算机学院毕业生论文致谢范文
  14. Redis学习之旅--Redis的数据类型你都知道吗?
  15. 借钱赚钱花钱6点认识
  16. 28岁学Java晚不晚?快30学java还来得及吗?
  17. window自带的桌面整理工具
  18. 黑马程序员——java基础之抽象与接口
  19. no-repeat失效
  20. C/C++黑魔法-三元运算符简洁写法

热门文章

  1. 响应式 BootStrap 媒体查询 栅格 组件 scss
  2. OCCT学习001-----简介
  3. 2021全国特种设备-G3锅炉水处理模拟考试题库一[安考星]
  4. 如何考评一名前端工程师
  5. katana 靶机 wp
  6. win7家庭版升级win7旗舰版
  7. BEC高级商务英语考试应试技巧指南
  8. 2022年黑客书籍推荐
  9. GoLang语言:邮件群发器
  10. 小愿景,职业发展,思维拓展