当前位置: 首页 > news >正文

视频网站开发架构东莞倣网站

视频网站开发架构,东莞倣网站,网页界面设计作品,网课网站文章目录 AlphaBlend细节AlphaPremultiply普通的AlphaBlendAlpha-Premultiply SoftAddition引用 AlphaBlend细节 https://www.khronos.org/opengl/wiki/Blending Alpha Blend 的计算只有一种形式,而且可以分别针对RGB和Alpha单独给出Blend的模式,对Alp…

文章目录

  • AlphaBlend细节
  • AlphaPremultiply
    • 普通的AlphaBlend
    • Alpha-Premultiply
  • SoftAddition
  • 引用

AlphaBlend细节

https://www.khronos.org/opengl/wiki/Blending

Alpha Blend 的计算只有一种形式,而且可以分别针对RGB和Alpha单独给出Blend的模式,对AlphaBlend总共需要4个参数
* Orgb = srgb * Srgb + drgb * Drgb
* Oa = sa * Sa + da * Da

The same goes for the two subtraction equations. This separates the RGB component computation from the alpha computation. So there are 4 possible blending parameters.

 void glBlendFuncSeparate(GLenum srcRGB​, GLenum dstRGB​, GLenum srcAlpha​, GLenum dstAlpha​)

The srcRGB​ value specifies the srgb parameter. dstRGB​ specifies drgb. srcAlpha​ is for sa, while dstAlpha​ specifies da.

AlphaPremultiply

If the result is the same, why bother with pre-multiplied alpha? The reason is texture filtering. When you take samples from a texture, unless you have disabled texture filtering, the hardware is blending neighboring texels together and returning a weighted average as a result.

在纹理点采样的情况下,普通的AlphaBlend跟AlphaPremultiply是一样的。关键就在对纹理filter的时候,只有AlphaPremultiply才能得到正确的结果。

普通的AlphaBlend

普通AlphaBlend的形式是,这同时也被称为 post-multipled alpha,但是它会导致错误的颜色
DestinationColor.rgb = (SourceColor.rgb * SourceColor.a) + (DestinationColor.rgb * (1 - SourceColor.a));

给定一张2个像素的纹理图
2x1-rg-post

图1. 左边是一个像素Alpha为1的红色(1,0,0,1),右边是一个像素Alpha为0.1的绿色(0,1,0,0.1)

如果这个时候,我们想计算这个2x1纹理的下一级mip的1x1纹理,那么我们使用普通的AlphaBlend就会得到

在这里插入图片描述

图2. RGBA=(0.5, 0.5, 0, 0.55)

通过图1和图2的比较,我们可以看到当我们计算mip的时候,结果就完全不对了。如果我们使用普通的AlphaBlend做图片想相乘的时候得到如图3所示结果。

(a) 正常的mandrill.png
(b) mandrill与2x1的图通过相乘Blend得到
(c) mandrill与普通AlphaBlend计算得mip的1x1的图通过相乘Blend得到

Alpha-Premultiply

https://developer.nvidia.com/content/alpha-blending-pre-or-not-pre


在 Alpha-premultiply 下,我们首先要输入纹理的 rgb 与它的 alpha 乘到一块儿,并把 SourceColor.a 变成 1 。

DestinationColor.rgb = (SourceColor.rgb * One) + (DestinationColor.rgb * (1 - SourceColor.a));

2x1-rg-pre.png

图3.准备做alpha-premultiply的2x1像素的纹理,左边(1, 0, 0, 1),右边(0, 0.1, 0, 0.1)

在这里插入图片描述

图4.通过alpha-premultiply计算得到的1x1像素的mip纹理,RGBA=(0.5, 0.05, 0, 0.55)

如果我们使用普通的AlphaBlend做图片想相乘的时候得到如图所示结果。

(a) 正常的mandrill.png
(b) mandrill与2x1的图通过相乘Blend得到
(c) mandrill与Alpha Premultiplied计算得mip的1x1的图通过相乘Blend得到

所以我们看到,只要做了filtering,那么只有Alpha Premultiplied才能得到正确的表现效果。

SoftAddition

在游戏中,如果我们需要把UI单独的绘制到一个RenderTexture上,再把这个RenderTexture作为一个半透明的纹理绘制到Backbuffer中,那么就需要关注这个临时的RenderTexture的Alpha值了。

正常的AlphaBlend流程,我们不需要关注Backbuffer的Alpha到底是怎么样的值,因为这个Alpha根本不会参与任何运算。但是如果需要使用到这一Alpha值的时候,就需要确保这个Alpha值的区间是[0,1]。

那么一个可行的Alpha的Blend模式就是

Blend x x, OneMinusDstAlpha One

这样可以保证Alpha值的区间

引用

[1] https://www.khronos.org/opengl/wiki/Blending

[2]https://developer.nvidia.com/content/alpha-blending-pre-or-not-pre

http://www.yayakq.cn/news/634244/

相关文章:

  • 微网站开发语言python不用框架做网站
  • 网站可以只做移动端吗广州百度seo排名
  • 网站多语言界面建设方案韩国u17出线
  • 做效果图有哪些网站好看的wordpress博客主题
  • 想建一个免费的网站宠物网站设计模板
  • 路由器设置用来做网站空间吗河南郑州解封最新消息
  • 山东网站推广营销设计杭州有奖举报
  • 网站开发流程步骤 口袋百度申请微信号免费注册
  • 郑州网站制作工作室写过太原的网站
  • 有口碑的徐州网站建设广告设计要学哪些软件
  • 做运营那些无版权图片网站网站后台修改网站首页怎么做
  • python做项目的网站公司做搜索引擎优化
  • 网站首页包含的内容怎么做大庆网站设计
  • 做网站有发展吗如何申请域名备案
  • 世界500强企业排名2021陕西seo顾问服务
  • 天津市网站制作 公司做网站需要开放哪些端口
  • 企业网站的制作用到的技术南城微网站建设
  • 做导航网站白山建设局网站
  • 专业做网站设计公司价格网络营销与推广
  • 网站开发常用组合为你做的网站
  • 保定网站建设公司排名利用php做网站教程
  • 网站开发能干什么做网站 花园路国贸
  • 如何建立一个网站 供客户选图wordpress4.5.3zhcn
  • 硅云wordpress多站点网站建设朋友圈
  • 哪里去找做的好看的网站深圳公司网站设计公
  • 陕西交通建设集团蓝商分公司网站公司包装推广
  • 苏州市市政建设集团公司网站邢台网红桥
  • 网站建设 移动端 和 PC端什么是网络营销的重要特点
  • 织梦文章类网站模板电子商务网页与网站设计
  • 给我一个网站好吗广告设计和平面设计哪个前景好