Difference between revisions of "BlendMode Formulas (日本語)"

(Created page with "これらの方程式は画面または有効な Canvas の内容を混合して描画する時に使用されます。 これら方程式の目的に...")
 
m (画面)
Line 104: Line 104:
 
== 画面 ==
 
== 画面 ==
  
注釈: この混合方式に対する数式において "alphamultiply" (透過乗算) の使用時は完全に正しいわけではありません。可能ならば、その異形である "alphamultiply" (事前乗算)を選択してください (および内容の混合前に、その時点で RGB により透過が乗算されているか確認してください)。
+
注釈: "alphamultiply" (透過乗算) の使用時、この混合方式は数学的に完全かつ正確ではありません。可能ならば、その異形である "alphamultiply" (事前乗算)を選択してください (および内容の混合前に、その時点で RGB により透過が乗算されているか確認してください)。
  
 
=== "alphamultiply" (透過乗算) [[BlendAlphaMode (日本語)|透過方式]] ===
 
=== "alphamultiply" (透過乗算) [[BlendAlphaMode (日本語)|透過方式]] ===

Revision as of 13:47, 5 October 2016

これらの方程式は画面または有効な Canvas の内容を混合して描画する時に使用されます。

これら方程式の目的に対して、一般に色の要素は [0, 255] ではなく [0, 1] の範囲内にあります。Canvas 有効時を除き、結果として [0, 1] に固定された浮動小数点 / HDR 形式となります。

説明

  • dst - 画面の既存色。
  • src - オブジェクトの描画色 (ピクセル・シェーダーにより出利された色または、テクスチャの色により乗算された大域色 ― なにかあるとすれば、シェーダーが使用されていない場合)。
  • res - 処理結果の色。

ここには version 0.10.0 および 0.10.1 における BlendMode の方程式が記載されています:

透過

"alphamultiply" (透過乗算) 透過方式

   res.r = dst.r * (1 - src.a) + src.r * src.a
   res.g = dst.g * (1 - src.a) + src.g * src.a
   res.b = dst.b * (1 - src.a) + src.b * src.a
   res.a = dst.a * (1 - src.a) + src.a

"alphamultiply" (事前乗算) 透過方式

   res.r = dst.r * (1 - src.a) + src.r
   res.g = dst.g * (1 - src.a) + src.g
   res.b = dst.b * (1 - src.a) + src.b
   res.a = dst.a * (1 - src.a) + src.a

加法

"alphamultiply" (透過乗算) 透過方式

   res.r = dst.r + (src.r * src.a)
   res.g = dst.g + (src.g * src.a)
   res.b = dst.b + (src.b * src.a)
   res.a = dst.a

"alphamultiply" (事前乗算) 透過方式

   res.r = dst.r + src.r
   res.g = dst.g + src.g
   res.b = dst.b + src.b
   res.a = dst.a

減法

"alphamultiply" (透過乗算) 透過方式

   res.r = dst.r - (src.r * src.a)
   res.g = dst.g - (src.g * src.a)
   res.b = dst.b - (src.b * src.a)
   res.a = dst.a

"alphamultiply" (事前乗算) 透過方式

   res.r = dst.r - src.r
   res.g = dst.g - src.g
   res.b = dst.b - src.b
   res.a = dst.a

置換

"alphamultiply" (透過乗算) 透過方式

   res.r = src.r * src.a
   res.g = src.g * src.a
   res.b = src.b * src.a
   res.a = src.a

"alphamultiply" (事前乗算) 透過方式

   res.r = src.r
   res.g = src.g
   res.b = src.b
   res.a = src.a

乗法 (透過方式 の両方とも)

   res.r = src.r * dst.r
   res.g = src.g * dst.g
   res.b = src.b * dst.b
   res.a = src.a * dst.a

明度

"alphamultiply" (事前乗算) 透過方式

   res.r = max(src.r, dst.r)
   res.g = max(src.g, dst.g)
   res.b = max(src.b, dst.b)
   res.a = max(src.a, dst.a)

暗度

"alphamultiply" (事前乗算) 透過方式

   res.r = min(src.r, dst.r)
   res.g = min(src.g, dst.g)
   res.b = min(src.b, dst.b)
   res.a = min(src.a, dst.a)

画面

注釈: "alphamultiply" (透過乗算) の使用時、この混合方式は数学的に完全かつ正確ではありません。可能ならば、その異形である "alphamultiply" (事前乗算)を選択してください (および内容の混合前に、その時点で RGB により透過が乗算されているか確認してください)。

"alphamultiply" (透過乗算) 透過方式

   res.r = dst.r * (1 - src.r) + (src.r * src.a)
   res.g = dst.g * (1 - src.g) + (src.g * src.a)
   res.b = dst.b * (1 - src.b) + (src.b * src.a)
   res.a = dst.a * (1 - src.a) + src.a

"alphamultiply" (事前乗算) 透過方式

   res.r = dst.r * (1 - src.r) + src.r
   res.g = dst.g * (1 - src.g) + src.g
   res.b = dst.b * (1 - src.b) + src.b
   res.a = dst.a * (1 - src.a) + src.a

旧版

透過 (0.9.0, 0.9.1, および 0.9.2)

   res.r = dst.r * (1 - src.a) + src.r * src.a
   res.g = dst.g * (1 - src.a) + src.g * src.a
   res.b = dst.b * (1 - src.a) + src.b * src.a
   res.a = dst.a * (1 - src.a) + src.a

透過 (0.8.0 以前)

   res.r = dst.r * (1 - src.a) + src.r * src.a
   res.g = dst.g * (1 - src.a) + src.g * src.a
   res.b = dst.b * (1 - src.a) + src.b * src.a
   res.a = dst.a * (1 - src.a) + src.a * src.a

premultiplied (0.9.2 以前)

   res.r = dst.r * (1 - src.a) + src.r
   res.g = dst.g * (1 - src.a) + src.g
   res.b = dst.b * (1 - src.a) + src.b
   res.a = dst.a * (1 - src.a) + src.a

画面 (0.9.2 以前)

   res.r = dst.r * (1 - src.r) + src.r
   res.g = dst.g * (1 - src.g) + src.g
   res.b = dst.b * (1 - src.b) + src.b
   res.a = dst.a * (1 - src.a) + src.a

加法 (0.9.2 以前)

   res.r = dst.r + (src.r * src.a)
   res.g = dst.g + (src.g * src.a)
   res.b = dst.b + (src.b * src.a)
   res.a = dst.a + (src.a * src.a)

減法 (0.9.2 以前)

   res.r = dst.r - src.r * src.a
   res.g = dst.g - src.g * src.a
   res.b = dst.b - src.b * src.a
   res.a = dst.a - src.a * src.a

乗法 (0.9.0, 0.9.1, および 0.9.2)

   res.r = src.r * dst.r
   res.g = src.g * dst.g
   res.b = src.b * dst.b
   res.a = src.a * dst.a

乗法 (0.8.0 以前)

   res.r = dst.r * (1 - src.a) + src.r * dst.r
   res.g = dst.g * (1 - src.a) + src.g * dst.g
   res.b = dst.b * (1 - src.a) + src.b * dst.b
   res.a = dst.a * (1 - src.a) + src.a * dst.a

置換 (0.9.2 以前)

   res.r = src.r
   res.g = src.g
   res.b = src.b
   res.a = src.a

関連

そのほかの言語