Help us understand the problem. What is going on with this article?

compositing_op(basic)のα値

はじめに

C++で2D Graphicsが標準で使えたらいいなと思ってたら提案だけはされていたみたいです(p0267r7)

そこに光学合成の計算式も乗っていたのだけれどα値の計算まで記載されているのは珍しかったので、α値がどのようになるのか結果を目で見えるようにしてみました
(まずはcompositing_opのbasicから)

画像の縦軸をSa(Source alpha),横軸をDa(Dest alpha)のα値で値の範囲は0.0から1.0まで。

image.png

透明に近いほど黒く、不透明で白くなります。

clear

$Ra = 0$

clear.png

はい。いきなり真っ黒。SaDaも影響は与えません。
参考までにカラーの計算式も末尾に記載していきます(ただし、それに関しては今回は触れません)

参考:$Rc = 0$

source

$Ra = Sa$

source.png

Daの影響が全くないので横方向には全く影響がないです。

参考:$Rc = Sc$

over

$Ra = Sa + Da \times (1 - Sa)$

over.png

たぶん一番使われる。

参考:$Rc = \frac{(Sca + Dca \times (1 - Sa))}{Ra}$

in

$Ra = Sa \times Da$

in.png

単純な形式。

参考:$Rc = Sc$

out

$Ra = Sa \times (1 - Da)$

out.png

Daが1.0に近づくたびに透明度が高くなる。

参考:$Rc = Sc$

atop

$Ra = Da$

atop.png

Saの影響を全く受けないタイプ。

参考:$Rc = Sca + Dc \times (1 - Sa)$

dest

$Ra = Da$

atop.png

Saの影響が全くないので縦方向には全く影響がないです。

参考:$Rc = Dc$

dest_over

$Ra = (1- Da) \times Sa + Da$

dest_over.png

overと計算式違うけど結果同じじゃない?
と思って差を取ってみたらほんの少しだけ差はあるみたい。

参考:$Rc = \frac{(Sca \times (1 - Da) + Dca)}{Ra}$

dest_in

$Ra = Sa \times Da$

dest_in.png

inと同じ計算式。

参考:$Rc = Dc$

dest_out

$Ra = (1 - Sa) \times Da$

dest_out.png

outと異なりこちらはSaが1.0に近づくたびに透明度が高くなる。

参考:$Rc = Dc$

dest_atop

$Ra = Sa$

dest_atop.png

Daの影響を全く受けないタイプ。

参考:$Rc = Sc \times (1 - Da) + Dca$

xor_op

$Ra = Sa + Da - 2 \times Sa \times Da$

xor_op.png

結果が予想しづらいタイプ。

参考:$Rc = \frac{(Sca \times (1-Da)+Dca\times(1-Sa))}{Ra}$

add

$Ra = min(1, Sa + Da)$

add.png

足し算。α値も単純に足してるとは思わなかった。案の定オーバーフローするので1以上は1にする。

参考:$Rc = \frac{(Sca+Dca)}{Ra}$

saturate

$Ra = min(1, Sa + Da)$

saturate.png

α値の計算はaddと同じ。

参考:$Rc = \frac{min(Sa,1-Da)\times Sc+Dca)}{Ra}$


今回触れなかったmultiplyscreenoverlay等はα値の計算はoverと共通です。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away