日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图片Alpha预乘的作用[转]

發(fā)布時(shí)間:2025/7/14 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图片Alpha预乘的作用[转] 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Premultiplied Alpha 這個(gè)概念做游戲開發(fā)的人都不會(huì)不知道。Xcode 的工程選項(xiàng)里有一項(xiàng) Compress PNG Files,會(huì)對(duì) PNG 進(jìn)行 Premultiplied Alpha,Texture Packer 中也有Premultiplied Alpha 的選項(xiàng)。那么問題來了,Premultiplied Alpha 是什么呢?我被這個(gè)問題困惑了很久,之前搜到過?Nvidia的這篇文章,其實(shí)說的很清楚,只是當(dāng)時(shí)有很多相關(guān)概念沒搞清楚,所以沒看懂。直到前幾天讀《Real Time Rendering》時(shí)終于搞懂了。

Alpha Blending

要搞清楚這個(gè)問題,先得理解Alpha通道的工作原理,如果你已經(jīng)了解可以直接跳過。

最常見的像素表示格式是RGBA8888即 (r, g, b, a),每個(gè)通道8位,0-255。例如紅色60%透明度就是 (255, 0, 0, 153),為了表示方便alpha通道一般記成正規(guī)化后的0-1的浮點(diǎn)數(shù),也就是 (255, 0, 0, 0.6)。而 Premultiplied Alpha 則是把RGB通道乘以透明度也就是 (r * a, g * a, b * a, a),50%透明紅色就變成了(153, 0, 0, 0.6)。

透明通道在渲染的時(shí)候通過?Alpha Blending?產(chǎn)生作用,如果一個(gè)透明度為 as?的顏色 Cs?渲染到顏色 Cd上,混合后的顏色通過以下公式計(jì)算,

?

Co=αsCs+(1?αs)CdCo=αsCs+(1?αs)Cd

?

以60%透明的紅色渲染到白色背景為例:

Co=(255,0,0)?0.6+(255,255,255)?(1?0.6)=(255,102,102)Co=(255,0,0)?0.6+(255,255,255)?(1?0.6)=(255,102,102)


也就是說,從視覺上,(255, 0, 0, 0.6)渲染到白色背景上 和 (255, 102, 102) 是同一個(gè)顏色。如果顏色以 Premultiplied Alpha 形式存儲(chǔ),也就是Cs已經(jīng)乘以透明度了,所以混合公式變成了:

Co=Cs+(1?αs)CdCo=Cs′+(1?αs)Cd

?

為什么要 Premultiplied Alpha 呢?

Premultiplied Alpha 后的像素格式變得不直觀,因?yàn)樵诋媹D的時(shí)候都是先從調(diào)色板中選出一個(gè)RGB顏色,再單獨(dú)設(shè)置透明度,如果RGB乘以透明度就搞不清楚原色是什么了。從前面的 Alpha Blending 公式可以看出,Premultiplied Alpha 之后,混合的時(shí)候可以少一次乘法,這可以提高一些效率,但這并不是最主要的原因。最主要的原因是:

沒有 Premultiplied Alpha 的紋理無法進(jìn)行 Texture Filtering(除非使用最近鄰插值)。

以最常見的 filtering 方式線性插值為例,一個(gè)寬2px高1px的圖片,左邊的像素是紅色,右邊是綠色10%透明度,如果把這個(gè)圖片縮放到1x1的大小,那么縮放后1像素的顏色就是左右兩個(gè)像素線性插值的結(jié)果,也就是把兩個(gè)像素各個(gè)通道加起來除以2。如果使用沒有 Premultiplied Alpha 的顏色進(jìn)行插值,那么結(jié)果就是:

((255,0,0,1)+(0,255,0,0.1))?0.5=(127,127,0,0.55)((255,0,0,1)+(0,255,0,0.1))?0.5=(127,127,0,0.55)

?

如果綠色 Premultiplied Alpha,也就是 (0, 255 * 0.1, 0, 0.1),和紅色混合后:

((255,0,0,1)+(0,25,0,0.1))?0.5=(127,25,0,0.55)((255,0,0,1)+(0,25,0,0.1))?0.5=(127,25,0,0.55)

?

?

從上面的圖里第三個(gè)顏色是沒有 Premultiplied Alpha 的混合結(jié)果,對(duì)比第四個(gè) Premultiplied Alpha 后顏色的結(jié)果,顯然第四個(gè)顏色更符合直覺,第三個(gè)顏色太綠了,因?yàn)榫G色通道沒有乘以透明度,所以在線性插值的時(shí)候占了過大的權(quán)重。

所以 Premultiplied Alpha 最重要的意義是使得帶透明度圖片紋理可以正常的進(jìn)行線性插值。這樣旋轉(zhuǎn)、縮放或者非整數(shù)的紋理坐標(biāo)才能正常顯示,否則就會(huì)像上面的例子一樣,在透明像素邊緣附近產(chǎn)生奇怪的顏色。

紋理處理

我們使用的PNG圖片紋理,一般是不會(huì) Premultiplied Alpha 的。游戲引擎在載入PNG紋理后回手動(dòng)處理,然后再glTexImage2D傳給GPU,比如 Cocos2D-x 中的 CCImage::premultipliedAlpha:

void Image::premultipliedAlpha() {unsigned int* fourBytes = (unsigned int*)_data;for (int i = 0; i < _width * _height; i++) {unsigned char* p = _data + i * 4;fourBytes[i] = CC_RGB_PREMULTIPLY_ALPHA(p[0], p[1], p[2], p[3]);} _hasPremultipliedAlpha = true; }

?

?

而GPU專用的紋理格式,比如 PVR、ETC 一般在生成紋理都是默認(rèn) Premultiplied Alpha 的,這些格式一般是GPU硬解碼,引擎用CPU處理會(huì)很慢。

總之 glTexImage2D 傳給 GPU 的紋理數(shù)據(jù)最好都是 Multiplied Alpha 的,要么在生成紋理時(shí)由紋理工具 Pre-multiplied,要么載入紋理后由游戲引擎或UI框架 Post-multiplied。

原文地址:http://boundary.cc/2015/07/why-premultiplied-alpha/

轉(zhuǎn)載于:https://www.cnblogs.com/xiaonanxia/p/9448444.html

總結(jié)

以上是生活随笔為你收集整理的图片Alpha预乘的作用[转]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 妖精视频在线观看免费 | 日韩精品成人在线观看 | 超碰在线免费播放 | 九九资源网 | 麻豆成人免费 | 国产乱淫av片杨贵妃 | 浮妇高潮喷白浆视频 | 欧美人与性动交g欧美精器 国产在线视频91 | 成人免费短视频 | 91禁外国网站 | 亚洲18在线看污www麻豆 | 欧美精品在线观看 | 一区二区三区日韩电影 | 欧美a级片在线观看 | 国产又大又黄又粗 | 免费看黄av | 暧暧视频在线观看 | 在线观看亚洲 | 国产日产精品一区二区三区 | 国产福利视频一区 | 天堂网wwww| 国产乱码av | 四虎成人精品永久免费av九九 | 99国产精品99久久久久久 | 久久久久国产一区二区 | 日韩黄网| 长河落日电视连续剧免费观看01 | 久久精品免费一区二区 | 亚洲av乱码一区二区 | 五月婷婷中文字幕 | 国产一级视频免费观看 | 亚洲社区在线观看 | 丝袜诱惑一区 | wwwxxx在线 | 美女一区二区三区 | 高清视频一区二区三区 | 亚洲黄色录像 | 猛1被调教成公厕尿便失禁网站 | 一区二区三区不卡在线观看 | 欧美色影院 | 韩日精品视频 | chinese hd av| 超碰在线国产97 | 精精国产xxxx视频在线播放 | 亚洲天堂第一区 | 国产精品男女 | 国产欧美一区二区三区在线老狼 | 国产无遮挡免费 | 91黄色小网站 | 91福利在线免费观看 | 国产美女裸体无遮挡免费视频 | 四虎国产精品成人免费入口 | 黄黄视频在线观看 | 日批小视频 | 欧美一区二区黄色 | 91精品国产综合久久福利 | 青青伊人影院 | 久久亚洲精品视频 | 91久久国产精品 | 亚洲成人国产 | 国产精品久久久久永久免费看 | 99久久久久成人国产免费 | 午夜看片网站 | 成人亚洲电影 | 日韩精品视频一区二区在线观看 | 国产黄片一区二区三区 | 无遮挡又爽又刺激的视频 | 中出在线观看 | 高清在线一区 | 亚洲国产免费 | 女futa攻玩遍整个后宫 | 视频一区二区三区精品 | 免费吸乳羞羞网站视频 | 黄色在线免费观看网站 | 黄色草逼视频 | 色综合天天综合网天天看片 | 国产精品久久久久久中文字 | 国产中文字幕91 | 久久精品黄aa片一区二区三区 | 国产成人精品亚洲日本在线观看 | 激情小视频 | 东京干手机福利视频 | 久久精品国产亚洲av蜜臀色欲 | 亚洲欧美经典 | 9色视频 | 亚洲无码精品免费 | 天天摸天天添 | 精品久久久久久久中文字幕 | 一级黄色录相 | 性猛交ⅹxxx富婆video | 国产日韩在线观看视频 | av在线毛片 | wwwxx国产| 91av福利 | 亚洲欧美一区二区三区四区 | 中文字幕日韩久久 | 麻豆极品 | 欧美经典一区二区三区 | 黄色网址你懂的 |