Alpha预乘-混合与不混合[转]
Alpha Blending几乎是每个3D应用程序的一小部分,但却很重要。从概念上讲,alpha混合用于传达表面的透明度。通常,消费者应用程序(游戏)倾向于使用RGB来传达下层表面的颜色,依赖于alpha通道来指示该颜色的“不透明度”。更具体地说,当在管道中启用alpha混合时,开发人员倾向于使用此表单进行混合:
DestinationColor.rgb = (SourceColor.rgb * SourceColor.a) + (DestinationColor.rgb * (1 - SourceColor.a));
在旧的,固定的功能中,这将被称为“SourceAlpha,InvSourceAlpha”; 也被称为“后倍增α”。然而,这种形式的alpha混合存在一个严重的缺陷:在许多情况下它会导致错误的颜色!最简单的这些情况可以通过一个简单的双像素图像来说明:
考虑上面的图像,其分辨率为2x1像素。艺术家想要传达的是,在绿色像素旁边有一个红色的不透明像素,它只会给它背后的物体带来最轻微的绿色。但是,当我们生成下一个mipmap级别1x1级别时会发生一些有趣的事情。结果可能令人惊讶; 生成的mipmapped纹素是这样的:
当我们接近这个mipmap级别时,我们将获得与使用2x1级别时非常不同的结果 - 完全是因为我们决定使用postmultiplied级别。您可以在以下图片中看到这一点:
输入预乘的alpha
使用预乘的alpha,我们在存储之前首先将纹理组件乘以alpha组件。我们还修改了混合函数,将SourceColor.a更改为One:
DestinationColor.rgb = (SourceColor.rgb * One) + (DestinationColor.rgb * (1 - SourceColor.a));
使用预乘的alpha,我们的原始纹理看起来像这样:
此纹理的1x1 mipmap级别如下所示:
这是很多更合理。我们仍然丢失了一些信息(请注意,如果绿色组件足够小,或者如果我们的精度太低,绿色将完全消失),但我们保留了更高分辨率的mipmap的意图。为了比较,这里再次是图像,增加了我们的预乘混合器:
从我们的后乘世界过渡
方便地,从后乘的α管道到利用预乘的α的管道的转换是微不足道的。在纹理保存时间或资产烘焙时间,甚至加载时间,将每个非alpha通道乘以alpha。那是:
OutputTexture.rgb = InputTexture.rgb * InputTexture.a; OutputTexture.a = InputTexture.a;
并且不要忘记修改“alpha混合启用”以使用One作为Source Alpha值。如果我们将预乘的alpha插入到原始混合方程中,很容易看到切换到预乘的alpha会给出完全相同的结果:
DestinationColor.rgb = ((SourceColor.rgb * SourceColor.a) * One) + (DestinationColor.rgb * (1 - SourceColor.a));
所以你可能会问:如果结果相同,为什么还要加倍预乘?原因是纹理过滤。从纹理中获取样本时,除非已禁用纹理过滤,否则硬件会将相邻纹理像素混合在一起并返回加权平均值作为结果。使用传统的后乘法alpha,此结果将不正确。
原文地址:https://developer.nvidia.com/content/alpha-blending-pre-or-not-pre
转载于:https://www.cnblogs.com/xiaonanxia/p/9448383.html
Alpha预乘-混合与不混合[转]相关推荐
- 图像处理术语解释:灰度、色相、饱和度、亮度、明度、阿尔法通道、HSL、HSV、RGBA、ARGB和PRGBA以及Premultiplied Alpha(Alpha预乘)等基础概念详解
☞ ░ 前往老猿Python博文目录 ░ 一.引言 由于老猿以前没接触过图像处理,在阅读moviepy代码时,对类的有些处理方法代码看不懂是什么含义,为此花了4天时间查阅了大量资料,并加以自己的理解和 ...
- 金融知识杂记(三)顺周期板块?最大回撤?主动型基金VS被动型基金?基金混合A和混合C的区别?ETF,LOF基金?基金持仓作业
目录 顺周期板块 哪些行业属于顺周期板块呢? 顺周期板块的投资价值 最大回撤 主动型基金VS被动型基金 主动型基金和被动型基金区别 基金混合A和混合C的区别 ETF,LOF基金 4月份基金持仓作业 顺 ...
- scala java混合_Scala特性混合
scala java混合 Scala | 特性混合 (Scala | Trait Mixins ) In Scala, the number of traits can be extended usi ...
- python中alpha是什么意思_图像处理术语解释:什么是PRGBA和Alpha预乘(Premultiplied Alpha )...
Alpha预乘(Premultiplied Alpha)和PRGBA 一般来说四通道图像数据保存的都是ARGB或RGBA,其R.G.B值还没有进行任何透明化处理,但这种格式在图像合成时会存在两个问题: ...
- 图片正常模式混合(透明度混合)公式
一.描述 所有内容摘自维基 在处理图象时可能需要手撸图片混合的代码,此时混合公式就十分重要.而正常混合(Normal Blending)模式是最常用的一种格式(比如PS的默认图层混合模式).想手动实现 ...
- 图片Alpha预乘的作用[转]
Premultiplied Alpha 这个概念做游戏开发的人都不会不知道.Xcode 的工程选项里有一项 Compress PNG Files,会对 PNG 进行 Premultiplied Alp ...
- 【opencv4】opencv视频教程 C++ 6、图像混合、线性混合、混合权重相加addWeighted()、混合加add()、混合乘multiply()
上一讲:[opencv4]opencv视频教程 C++ 5.读写图像imread.imwrite.读写像素at<>().修改像素值.ROI区域选择(图像裁剪)Rect.Vec3b与Vec3 ...
- 公有云 私有云 混合云_混合云的承诺,收益和产品
公有云 私有云 混合云 云承诺为我们提供所有灵活性. 有机会在需要时访问无限资源并相应地付款. 我们不再需要花费时间安装,配置和维护服务器: 我们被承诺将有更多的时间来"仅仅编码" ...
- jemeter多场景混合案例_Redis 混合存储最佳实践指南
Redis 混合存储实例是阿里云自主研发的兼容Redis协议和特性的云数据库产品,混合存储实例突破 Redis 数据必须全部存储到内存的限制,使用磁盘存储全量数据,并将热数据缓存到内存,实现访问性能与 ...
最新文章
- RedHat Enterprise 5.1下OpenLDAP的配置及PAMNSS的配置
- Internet Explorer7.0订阅“源”
- Node.js 应用的内存泄漏问题的检测方法
- Asp.Net.Core WebApi 版本控制
- Last_Error: Slave SQL thread retried transaction 10 time(s) in vain, giving up导致主从不同步的解决方法
- linux下的正则表达式
- error: R_LARCH_SOP_PUSH_PCREL against `x264_log_default‘:PLT shouldn‘t be with r_addend.
- hua图软件 mac_10款Mac上设计师必备的设计绘图工具推荐和下载 | 玩转苹果
- Unity3D--用2D图片实现3D轮转图
- 树莓派入门笔记(七)用Vlmcsd搭建Kms服务---2020-03-28 (1113)
- 在web of science / 知网 上生成题录
- mysql表名、字段名命名规范
- j2se学习笔记-Enum枚举类型
- 复变|第一章 复数与复变函数 复数
- 使用Spring Boot + Resilience 4j实现断路器
- DustBot机器人
- 头歌-信息安全技术-【实训10】HTML信息隐藏、动态分析技术
- 如何保证数据在传输过程中的安全
- Oracle图书管理系统
- AC/DC、DC/DC转换器知识
热门文章
- 【收藏】docker的privileged 与 k8s的privileged 设置方式
- 【收藏】go博客 zxysilent / blog
- Java Object中的clone方法
- Python3字符串的编码
- Pyhon爬虫开发:URLError的使用
- 请解释为什么集合类没有实现Cloneable和Serializable接口?
- Mysql 8.0下载与安装详解,并修改安装路径
- java成绩管理系统论文总结,JAVA论文成绩管理系统课程设计
- 【精简解释】Java中native关键字作用
- 清除浏览器某一特定网站的缓存(Microsoft Edge、Chrome等)