unity shader学习笔记(十一)——Unity中的透明效果之ShaderLab中的混合命令
来源:互联网 发布:64式轻坦性能数据 编辑:程序博客网 时间:2024/05/18 08:30
混合
混合:当片元着色器产生颜色时,可以选择与颜色缓冲中的颜色进行混合。混合与两个操作数有关,源颜色(source color)和目标颜色(destination color)。源颜色就是片元着色器产生的颜色,目标颜色是颜色缓冲中的颜色,两者进行混合后会重新写入颜色缓冲中,它们都包含了RGBA四个值。
Unity在开启混合后,只需要设置混合因子即可,下面是Unity中的几种混合因子:
使用上面的指令时,RGB通道的混合因子和A通道的混合因子是一样的,当我们希望使用不同的参数混合A通道时,可以用下面的指令:
Blend SrcAlpha OneMinusSrcAlpha, One Zero
混合操作
一般情况下,将源颜色和目标颜色与它们的因子相乘后,都是把它们的结果相加的,但也可以设置为其他的操作。在SharderLab中可以使用BlendOp BlendOperation命令。ShaderLab中支持的混合操作如下表:
Add 将混合后的源颜色和目标颜色相加,是默认的混合操作,等式是:
Color = SrcFactor*SrcColor + DstFactor*DstColor
Alpha = SrcFactor*SrcAlpha + DstFactor*DstAlpha
Sub 用混合后的源颜色减去目标颜色,等式是:
Color = SrcFactor*SrcColor - DstFactor*DstColor
Alpha = SrcFactor*SrcAlpha - DstFactor*DstAlpha
RevSub 用混合后的目标颜色减去源颜色,等式是:
Color = DstFactor*DstColor - SrcFactor*SrcColor
Alpha = DstFactor*DstAlpha - SrcFactor*SrcAlpha Min 使用混合后的目标颜色和源颜色中较小的值,等式是:
Color = (min(SrcR, DstR), min(SrcG, DstG), min(SrcB, DstB), min(SrcA, DstA)) Max 使用混合后的目标颜色和源颜色中较大的值,等式是:
Color = (max(SrcR, DstR), max(SrcG, DstG), max(SrcB, DstB), max(SrcA, DstA)) 其他逻辑操作 仅在DirectX11.1中支持
常见的混合类型
通过混合操作和混合因子命令的组合,我们可以得到一些类似Photoshop混合模式中的混合效果:
//正常(Normal),即透明度混合Blend SrcAlpha OneMinusSrcAlpha//柔和相加(Soft Additive)Blend OneMinusDstColor One //正片叠加(Multiply),即相乘Blend DstColor Zero//两倍相乘(2x Multiply)Blend DstColor SrcColor //变暗(Darken)BlendOp MinBlend One One//变亮(Ligthten)BlendOp MaxBlend One One //滤色(Screen)Blend OneMinusDstColor One//等同于Blend One OneMinusSrcColor //线性减淡(Linear Dodge)Blend One One
需要注意的是Min和Max混合操作会忽略混合因子。有些混合模式没有设置混合操作的种类,但是默认是用加法操作。
阅读全文
0 0
- unity shader学习笔记(十一)——Unity中的透明效果之ShaderLab中的混合命令
- unity shader学习笔记(九)——Unity中的透明效果之透明混合
- unity shader学习笔记(八)——Unity中的透明效果之透明测试
- unity shader学习笔记(十二)——Unity中的透明效果之双面渲染透明效果
- unity shader学习笔记(十)——Unity中的透明效果之开启深度写入的半透明效果
- unity shader学习笔记(四)——Unity中的基础纹理之单张纹理
- unity shader学习笔记(五)——Unity中的基础纹理之凹凸映射
- unity shader学习笔记(六)——Unity中的基础纹理之渐变纹理
- unity shader学习笔记(七)——Unity中的基础纹理之遮罩纹理
- unity shader学习笔记(十三)——Unity中的复杂光照之渲染路径
- unity shader学习笔记(十四)——Unity中的复杂光照之光源类型
- unity shader学习笔记(十五)——Unity中的复杂光照之光照衰减
- Shader编程学习笔记(四)—— Unity Shader的组织形式(ShaderLab)
- Shader编程学习笔记(四)—— Unity Shader的组织形式(ShaderLab)
- Shader编程学习笔记(四)—— Unity Shader的组织形式(ShaderLab)
- Shader编程学习笔记(四)—— Unity Shader的组织形式(ShaderLab)
- Unity Shader 学习笔记(32) Unity中的Standard Shader
- Unity Shader 学习笔记(十一) 混合纹理Shader实例
- springMVC的controller单例和多例下成员变量的问题
- java.lang.NoClassDefFoundError: org/hibernate/service/ServiceRegistry] 类似问题
- 带你了解Workday的前生今世(一)
- CentOS 新增加硬盘挂载并开机自动挂载
- Apache Mina 学习
- unity shader学习笔记(十一)——Unity中的透明效果之ShaderLab中的混合命令
- scikit-learn 中文文档-分解成分中的信号(矩阵分解问题)-无监督学习|ApacheCN
- 自动装箱与自动拆箱
- 事务管理的理解,事务管理的作用举例说明
- 机器学习第二课
- 关于法线向量的计算
- eclipse的常用快捷键以及插件的安装
- ffmpeg精简1
- Lua元表中__index元方法的作用