More Related Content
More from KLab Inc. / Tech (20)
RenderTextureの正しいα値は?
- 13. αブレンドのおさらい
(1 - α) * DstColor + α * SrcColor
実はこの式の(1 - α)やαの部分はある程度好きな係数にカスタマイズ可能
アルファブレンドのシェーダーではこうなっているというだけ
・1
・0
・α
・1 - α
・書き込み先のα値
などから好きな係数にカスタマイズ可能
13
- 14. αブレンドのおさらい
例
1 * DstColor + α * SrcColor : α付き加算合成
1 * DstColor + 1 * SrcColor : αなし加算合成
0 * DstColor + 1 * SrcColor : 一方的な上書き
(1 - α) * DstColor + (1 - α) * SrcColor : 謎合成
14
- 23. α * DstColor + 1 * SrcColor
DstColorは背景色でαはRenderTextureのα値のこと
RenderTextureのα値には(1 - A.A) * (1 - B.A)が入っているはず
SrcColorはRenderTextureのRGBで、こちらも0.25 * A + 0.5 * Bが入っているはず
なので、係数は1でよい
方針
背景
ClearColor
0.25倍
パーツA
0.25倍
パーツB
0.5倍
* (1 - A.A) * (1 - B.A)* (1 - A.A) * (1 - B.A)
23
- 25. RenderTextureに描画する際のClearColorを(0, 0, 0, 1)にする
RenderTextureに描画する際のα値のブレンド設定を下のようにする
(1 - α) * DstColor + 0 * SrcColor
RenderTextureを画面に描画する際のRGBのブレンド設定を下のようにする
α * DstColor + 1 * SrcColor
手順まとめ
25
- 34. 透過率 + 遮光率 = 1
となるのがアルファブレンドなので、透過率が
(1 - α1) * (1 - α2) * (1 - α3) * …
なら遮光率(つまりα値)は
1 - ((1 - α1) * (1 - α2) * (1 - α3) * …)
の形になる
補足
34
- 35. 今回の
(1 - A.A) * (1 - B.A) * …
は(1 - α)に相当する値であると書いたが、つまり遮光率ではなく透過率の方を保
存していることになる(だから、背景色にそのまま係数として掛けてよい)
本質的には遮光率を残そうが透過率を残そうが大した違いはないが、厳密には正
しいα値が残っているとは言えない
補足
35