Shader第十三讲 Alpha混合

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

原文地址:http://blog.sina.com.cn/s/blog_471132920101d8z5.html




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组合的情况就先讲这么多了,更多的组合需要自己去试去用,现在请再回过头看看第五讲的引言,是不是有一种恍然大悟的感觉呢?
透明度测试(AlphaTest)和混合(Blend)的基础知识 本文分享透明度测试(AlphaTest)和混合(Blend)的基础知识 透明度测试和透明度混合都是用来处理半透明效果的手段. 在裁剪测试之后, 如果有一些半透片元需要抛弃(比如png纹理的多余空白), 可以通过透明度测试达到目的. 在深度测试通过之后, 渲染管线进入混合阶段, 在混合阶段处理不透明物体或者半透物体的颜色混合. 为什么透明效果需要处理 我们先说明不透明物体的处理过程. 深度测试通过之后, 相互遮挡的不透明物体开始进行颜色混合, 所谓颜色混合就是如何处理源颜色(待渲染的片元颜色)和目标颜色( 阅读详情

相关推荐

Unity Alpha Blend混合的最终解释

抓手: unity官方文档对于alphablend的解释不知是翻译还是什么问题,感觉略深奥呀,感觉不通俗。 今天来给自己和大家做一个关于alphablend的终极解释。 关于Alpha Blend的定义: shader执行后,计算出来的像素颜色值与已有像素的颜色值的组合方式的 控制命令称为:alphablend! 也就是,alphablend是一种控制命令,是一种命令! 我自己对于Alpha Blend理解的定义: alpha blend是一个计算公式,和Photoshop的图层...

zakerhero的博客 3220

alpha blending算法--详细解读

*转载时请注明出处和作者联系方式:[http://blog.youkuaiyun.com/mimepp]一幅彩色图像的每个像素用R,G,B三个分量表示,若每个分量用8位,那么一个像素共用3X8=24位表示。 在用32位表示一个像素时,若R,G,B分别用8位表示,剩下的8位常称为α通道(alpha channel)位。它用来表示该像素如何产生特技效果,即通常我们说的半透明。alpha的取值一般为0到255。

qq_15079039的博客 1万+

Unity Shader混合模式全解析:从Alpha混合到高级特效实现

在计算机图形学中,颜色混合是渲染管线中的核心机制,它决定了像素颜色如何与帧缓冲区现有颜色进行合成。其原理基于一套可编程的数学公式,通过设置源因子和目的因子来控制混合权重,从而实现从基础透明到复杂特效的视觉效果。这项技术的核心价值在于,它使开发者能够精确控制半透明物体的渲染效果,解决边缘黑边、颜色浑浊等常见渲染问题。在游戏开发、UI设计和视觉特效等应用场景中,混合模式是实现粒子发光、屏幕叠加、颜色滤镜等高级效果的基础。本文深入探讨了Unity ShaderLab中的混合指令,通过解析Alpha混合、加法混合、

weixin_30906185的博客 433

【风宇冲】Unity3D教程宝典之Shader篇:第十三讲 Alpha混合

原创文章如需转载请注明:转载自风宇冲Unity3D教程学院                             Shader第十三讲 Alpha混合 Alpha Blending,中文译作Alpha混合 Blending就是控制透明的。处于光栅化的最后阶段。 这里例如我们给一个模型贴一个材质,那么在某个点计算出来颜色值称为源,而该点之前累积的颜色值

苗伟业的专栏 2058

Unity Shader混合模式详解:从Alpha混合到实战应用

在计算机图形学中,混合(Blending)是决定新像素如何与已有像素合成的核心技术,其本质是一套基于数学公式的颜色合成规则。通过源因子和目标因子的不同组合,混合模式能够模拟现实世界中的透明、叠加、发光等视觉效果,是渲染管线中实现半透明、粒子特效、UI交互等高级效果的基础。在实时渲染领域,理解混合原理对于优化性能、避免过度绘制至关重要。本文以Unity引擎为例,深入解析Shader混合模式的工作原理,涵盖Alpha混合、加法混合等常见模式,并结合Shader Graph节点与实战案例,探讨在特效制作、UI渲染

weixin_30443813的博客 367

【猫猫的Unity Shader之旅】之混合效果

今天的好消息是,模型不再用立方体啦,也不是球和Plane,那些太土了,体现不出Shader的高大上有木有。囧了个囧,咳咳,我们是做学问,不要在意这些细节……  好吧,我们这次的主角是Unity娘,大家到Asset Store可以免费下载到这个萌妹子~  勤劳的Shader君  之前也有说过,我们的Shader最终任务是要计算颜色,但是为了最终的显示效果让老板满意,Shader君也算是煞费苦心啦。没办

dbtxdxy的专栏 3176

shader alpha混合blend

Alpha Blending,中文译作Alpha混合 Blending就是控制透明的。处于光栅化的最后阶段 公式 Blend SrcFactor DstFactor SrcFactor是源系数,DstFactor是目标系数 最终颜色 = (Shader计算出的点颜色值 * 源系数)+(点累积颜色 * 目标系数) **Shader计算出的点颜色值:**这个是当前材质上点的颜色 **源系数:**这个是我们可以控制的(SrcFactor) **点累积颜色:**这个是当前位置的点累计计算的颜色,在屏幕上每一个像素

HzjCsdn的博客 1008

Unity Shader混合效果应用实战

RGB颜色模型是通过红(Red)、绿(Green)、蓝(Blue)三原色的不同强度组合来生成其他颜色的模型。在计算机图形中,每个颜色通道的值从0(无该颜色)到255(该颜色的最大强度),通常被解释为0到1的范围,以方便计算。在Unity中,混合模式是实现不同视觉效果的关键要素。它们可以定义像素颜色如何与目标颜色结合,进而创造出各种视觉效果。本章节将深入探讨Unity预定义的几种混合模式,包括Alpha Blend、Additive、Multiply等,并对它们的原理、使用场景和效果进行详细分析。

weixin_35935514的博客 1626

unity-shader之混合模式、面剔除、Alpha测试、深度测试、通道遮罩

混合模式 我们着色完成之后,需要把颜色的混合输出到帧缓冲区里面,这个时候就可能涉及到源与目标,比如说半透明,原来是一个颜色Alpha通道的意思是我这个目标能够透过多少,也就是说我们本来的颜色只有RGB是没有Alpha通道的,Alpha类似于描述叠加颜色的时候要怎么叠加过去,所以Alpha通道 又叫做透明度,一旦有了透明度,就涉及到了原颜色与目标颜色的混合 下图是混合命令。 注意:混合命令要放置在...

lfanyize的博客 1557

Win11实时字幕还能这么玩?手把手教你打造专属‘AI字幕机’,告别视频网站无字幕困扰

本文详细介绍了如何利用Win11的实时字幕功能打造全平台通用的AI字幕系统。通过C#抓取程序、Node.js中转服务和前端展示界面的组合,实现自动抓取系统字幕并实时推送到任意网页视频的方案,有效解决在线视频无字幕的困扰。

weixin_33735077的博客 390

Rstudio安装org.Hs.eg.db

自己也是个小白,初次安装org.Hs.eg.db碰到好多问题,步骤总结如下: 第一,instal.packages()安装,不行则换 BiocManager::install() 第二,如BiocManager不成,说明不是最新版本,可按提示安装最新版 BiocManager::install(version = '3.13') #由于R版本较新,按照提示中的相关信息,安装最新版本的 第三,再次安装 BiocManager::install("org.Hs.eg.db") 第四,之后每个人.

ZH_DDong的博客 2万+

opengles中的alpha混合

1-不启用混合操作和深度测试 2-启用混合操作不启用深度测试 3-启用混合操作和深度测试 4-启用混合操作深度测试并shader中丢弃部分片元 5-不启用混合操作深度测试只在shader中丢弃片元 在shader中丢弃不满足条件的片元 const char* ps = { "precision lowp float;

hb707934728的博客 1613

EXCEL实现分层自定义比例随机抽样(图+文教程)

EXCEL实现分层自定义比例随机抽样(图+文教程) 单一字段分层自定义比例随机抽样 多字段分层自定义比例随机抽样 单一字段分层自定义比例随机抽样 首先数据源如下,我们想随机抽张三的金额数据10%、李四金额20%、王五5%、哈哈15%、李六10% 首先第一步,添加辅助列,随机数 =RAND() 对数据进行高级排序 升序、降序都可以 添加辅助列...

可乐联盟 2万+

Shader:十三Alpha混合

Alpha Blending,中文译作Alpha混合 Blending就是控制透明的。处于光栅化的最后阶段。 这里例如我们给一个模型贴一个材质,那么在某个点计算出来颜色值称为源,而该点之前累积的颜色值,叫目标。 语法 Blend Off 不混合 Blend SrcFactor DstFactor SrcFactor是源系数,DstFactor是目标系数 最终颜色= (...

yuanerjiang的博客 751

HSmartWindowControl vs HWindowControl:Halcon老鸟教你如何根据项目需求选对控件(附性能对比)

本文深度对比Halcon图像处理中的HSmartWindowControl与HWindowControl控件,从性能、内存占用和交互体验等维度提供选型建议。HSmartWindowControl在硬件加速渲染、智能内存管理方面表现优异,特别适合医疗影像和工业检测等高性能需求场景,而HWindowControl则更适合兼容旧系统和资源受限环境。

weixin_30765505的博客 468

信号与系统——卷积、相关运算与FFT关系以及工程应用(三)

卷积运算、相关运算

qq_35028634的博客 6611

[Unity3D][Shader]PANCgShader--第二章 透明面--02透明物体Alpha混合

混合(Blending) 可编程图形管线中提到fragment shader为每一个片元(除非被discard)计算RGBA颜色(以fragment输出参数COLOR的形式)。

iningwei的博客 419

Python接口自动化测试实战:Requests+Pytest+Excel+Allure框架搭建指南

接口自动化测试是现代软件工程中保障软件质量的关键实践,其核心原理是通过脚本模拟客户端请求,自动验证API的功能、性能和可靠性。在Python技术栈中,Requests库以其简洁的API成为处理HTTP请求的基石,而Pytest框架则凭借其灵活的Fixture机制和强大的参数化功能,为测试用例的组织与执行提供了优雅的解决方案。结合Excel进行数据驱动测试,能够有效实现测试数据与脚本逻辑的分离,提升协作效率;最终通过Allure生成可视化测试报告,清晰呈现测试结果与过程。这套技术组合(Requests, Py

weixin_28677451的博客 304
上一篇: 设计模式学习笔记--职责链模式
下一篇: RTTI、虚函数和虚基类的开销分析及使用指导
puppet_master
puppet_master 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄12年 2695粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值