Alpha混合

简介:

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的混合处理。

 

 

Alpha Blending,中文译作Alpha混合
Blending就是控制透明的。处于光栅化的最后阶段。
这里例如我们给一个模型贴一个材质,那么在某个点计算出来颜色值称为源,而该点之前累积的颜色值,叫目标。
 
语法
Blend Off     不混合
Blend SrcFactor DstFactor  SrcFactor是源系数,DstFactor是目标系数
最终颜色 = (Shader计算出的点颜色值 * 源系数)+(点累积颜色 * 目标系数)
 
属性(往SrcFactor,DstFactor 上填的值)
one                          1
zero                         0
SrcColor                         源的RGB值,例如(0.5,0.4,1)
SrcAlpha                         源的A值, 例如0.6
DstColor                   混合目标的RGB值例如(0.5,0.4,1)
DstAlpha                         混合目标的A值例如0.6
OneMinusSrcColor          (1,1,1) - SrcColor
OneMinusSrcAlpha          1- SrcAlpha
OneMinusDstColor          (1,1,1) - DstColor
OneMinusDstAlpha          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透明通道处理。
【风宇冲】Unity3D教程宝典之Shader篇:第十三讲 <wbr>Alpha混合
 
Blend one  zero:  仅显示贴图的RGB部分,无Alpha透明通道处理。  A通道为0即本应该透明的地方也渲染出来了。
【风宇冲】Unity3D教程宝典之Shader篇:第十三讲 <wbr>Alpha混合
 
Blend one  one:贴图和背景叠加,无Alpha透明通道处理。仅仅是颜色rgb数值的叠加更趋近于白色即(1,1,1)了。
【风宇冲】Unity3D教程宝典之Shader篇:第十三讲 <wbr>Alpha混合
 
Blend SrcAlpha  zero:仅仅显示贴图,贴图含Alpha透明通道处理。但是贴图中的透明部分,即下图黑色部分没有颜色来显示,因为源颜色乘以alpha值0,为0;而混合目标的颜色乘以zero 0,也是0。所以透明部分显示的颜色为(0,0,0)
【风宇冲】Unity3D教程宝典之Shader篇:第十三讲 <wbr>Alpha混合
 
 
Blend SrcAlpha  OneMinusSrcAlpha:
【风宇冲】Unity3D教程宝典之Shader篇:第十三讲 <wbr>Alpha混合
最终颜色 = 源颜色 * 源透明值 + 目标颜色*(1 - 源透明值)
最常用的透明混合方式。贴图alpha值高的部分,显示得实,而混合的背景很淡。而alpha值高的部分,贴图显示得淡,而背景现实得实。
举例:
(1)假设贴图有一个不透明红色点 【风宇冲】Unity3D教程宝典之Shader篇:第十三讲 <wbr>Alpha混合, Color(1,0,0,1),该点背景色为不透明蓝色  【风宇冲】Unity3D教程宝典之Shader篇:第十三讲 <wbr>Alpha混合Color(0,0,1,1)
最终颜色 =  (1,0,0)* 1+(0,0,1)*(1-1) = (1,0,0) 【风宇冲】Unity3D教程宝典之Shader篇:第十三讲 <wbr>Alpha混合
结论一:贴图alpha值为1时,仅显示贴图,不显示背景
 
(2)假设贴图有一个透明红色点 【风宇冲】Unity3D教程宝典之Shader篇:第十三讲 <wbr>Alpha混合, Color(1,0,0,0),该点背景色为透明,但B通道值为1,即Color(0,0,1,0)
最终颜色 =  (1,0,0)* 0+(0,0,1)*(1-0) = (0,0,1) 【风宇冲】Unity3D教程宝典之Shader篇:第十三讲 <wbr>Alpha混合
结论二:贴图alpha值为0时,仅显示混合目标即背景,不显示贴图
但是目标alpha值为0,即其实这个点的背景是透明的,而我们却把它显示出来了,这就不对了。
经验:带A通道的贴图中,空的地方不只A值为0,RGB值也要为0,不然容易出错。
 
(3)假设贴图有一个半透明红色点 【风宇冲】Unity3D教程宝典之Shader篇:第十三讲 <wbr>Alpha混合, Color(1,0,0,0.8),该点背景色为不透明蓝色 【风宇冲】Unity3D教程宝典之Shader篇:第十三讲 <wbr>Alpha混合 Color(0,0,1,1)
最终颜色 =  (1,0,0)* 0.8+(0,0,1)*(1-0.8) = (0.8,0,0.2) 【风宇冲】Unity3D教程宝典之Shader篇:第十三讲 <wbr>Alpha混合
而假如0.8变为0.2时,
最终颜色 =  (1,0,0)* 0.2+(0,0,1)*(1-0.2) = (0.2,0,0.8) 【风宇冲】Unity3D教程宝典之Shader篇:第十三讲 <wbr>Alpha混合
结论:贴图alpha值越大,颜色越偏向贴图;alpha值越小,颜色越偏向混合目标
 
Blend组合的情况就先讲这么多了,更多的组合需要自己去试去用,现在请再回过头看看第五讲的引言,是不是有一种恍然大悟的感觉呢?
本文转自jiahuafu博客园博客,原文链接http://www.cnblogs.com/jiahuafu/p/6662928.html如需转载请自行联系原作者

jiahuafu
相关文章
|
9月前
|
人工智能 算法 决策智能
【五子棋实战】第2章 博弈树负值极大alpha-beta剪枝算法(一)
市面上比较常用的五子棋算法是博弈树极大极小值alpha-beta剪枝算法,该算法可以分成四个部分来讲解,它们是环环相扣的:博弈树 - 极大极小值搜索 - 负值极大法 - alpha&beta剪枝 。
371 0
|
1月前
|
计算机视觉
图像处理之透明混合 - Alpha Blending效果
图像处理之透明混合 - Alpha Blending效果
13 0
|
2月前
|
数据采集 人工智能 计算机视觉
CLIP的升级版Alpha-CLIP:区域感知创新与精细控制
为了增强CLIP在图像理解和编辑方面的能力,上海交通大学、复旦大学、香港中文大学、上海人工智能实验室、澳门大学以及MThreads Inc.等知名机构共同合作推出了Alpha-CLIP。这一创新性的突破旨在克服CLIP的局限性,通过赋予其识别特定区域(由点、笔画或掩码定义)的能力。Alpha-CLIP不仅保留了CLIP的视觉识别能力,而且实现了对图像内容强调的精确控制,使其在各种下游任务中表现出色。
118 1
|
10月前
|
机器学习/深度学习 编解码 人工智能
ATC 模型转换动态 shape 问题案例
ATC(Ascend Tensor Compiler)是异构计算架构 CANN 体系下的模型转换工具:它可以将开源框架的网络模型(如 TensorFlow 等)以及 Ascend IR 定义的单算子描述文件转换为昇腾 AI 处理器支持的离线模型;模型转换过程中,ATC 会进行算子调度优化、权重数据重排、内存使用优化等具体操作,对原始的深度学习模型进行进一步的调优,从而满足部署场景下的高性能需求,使其能够高效执行在昇腾 AI 处理器上。
158 0
|
机器学习/深度学习 数据可视化 计算机视觉
全新数据增强 | TransMix 超越Mix-up、Cut-mix方法让模型更加鲁棒、精度更高(二)
全新数据增强 | TransMix 超越Mix-up、Cut-mix方法让模型更加鲁棒、精度更高(二)
282 0
|
机器学习/深度学习 自然语言处理 算法
全新数据增强 | TransMix 超越Mix-up、Cut-mix方法让模型更加鲁棒、精度更高(一)
全新数据增强 | TransMix 超越Mix-up、Cut-mix方法让模型更加鲁棒、精度更高(一)
345 0
|
并行计算 iOS开发 MacOS
Metal每日分享,调整灰度系数gamma滤镜效果
Metal每日分享,调整灰度系数gamma滤镜效果
Metal每日分享,调整灰度系数gamma滤镜效果
|
网络安全 数据安全/隐私保护
混合密码系统
混合密码系统
|
Kubernetes Apache 容器
什么是混合网 Hybridnet
Hybridnet是一个开源的容器网络解决方案,与Kubernetes集成
|
计算机视觉 Python
【python图像处理】给图像添加透明度(alpha通道)
【python图像处理】给图像添加透明度(alpha通道) 我们常见的RGB图像通常只有R、G、B三个通道,在图像处理的过程中会遇到往往需要向图像中添加透明度信息,如公司logo的设计,其输出图像文件就需要添加透明度,即需要在RGB三个通道的基础上添加alpha通道信息。
6551 0

热门文章

最新文章