全文検索(S)
[]

0. はじめに

1. 目的

PhotoShop に初めて触れた人は、あまりに多彩なレイヤーや描画の ブレンドモード に戸惑うのではないでしょうか。しかも、PhotoShop のヘルプの記述は抽象的で感覚的な表現が多いので、いまいち用途や意味が不明だったりします。このドキュメントでは、実際に絵を描く上で役に立ちそうな実践的なサンプルを交えて、全ブレンドモードの意味を考えていきたいと思います。

PhotoShop4.0 のブレンドモード一覧

2. 用語と変数の定義

このドキュメントでの変数や用語を定義しておきます。話を厳密にするために書いておくものですので、よく分からなければ読み飛ばしてもかまいません。Pa、Pb、Pn の3つの変数を使います。

Pa :
重ねられるレイヤー(下)の任意のチャンネル( RGB 3つのうちのどれか)の任意のピクセルの明度(PhotoShop のヘルプで「基本色」とされているもの)で、 0~255 の整数で表す。
Pb :
重ねるレイヤー(上)上の、Pa と同じチャンネルの同じ位置のピクセルの明度 (PhotoShop のヘルプで「合成色」とされているもの)で、0~255 の整数で表す。
Pn :
最終的に混ぜ合わされて表示される明度で、0~255 の整数で表す。

PhotoShop 上でのビット深度(値の範囲)は通常 8 ビットで、値の範囲は 0 ~ 255 の整数なのですが、これだと式が汚らしくなるので値の範囲を 0 ~ 1 とした場合の式も載せてみます。

1. RGB の演算によるブレンド

このタイプのブレンドモードには、
  1. 通常
  2. ディザ合成
  3. 乗算
  4. スクリーン
  5. オーバーレイ
  6. ソフトライト
  7. ハードライト
  8. 覆い焼きカラー
  9. 焼き込みカラー
  10. 比較(暗)
  11. 比較(明)
  12. 差の絶対値
  13. 除外
があります。上下のレイヤーの RGB の値を用いた演算でレイヤーをブレンドします。

1. 通常(Normal)

もっとも単純にして理解し易くかつ応用範囲も広いモードです。不透明度や透明部分の保護などを利用すれば幅広い表現ができます。不透明度を下げた場合、下のレイヤーとの平均混色となります。
計算式は、
Pn = Pb
です。
下(通常モード)上(通常モード)通常モード結果
下(通常モード) 上(通常モード) 通常モード結果
※上のレイヤーは、下のレイヤーとクリッピンググループ化しています。

2. ディザ合成(Dissolve)

ぼかしたり不透明度を下げたりしないとあまり意味がありません。基本的に合成結果は通常モードと一緒ですが、合成にディザ拡散を使い、見かけ上色を合成します。広義の平均混色、または並置混色などと呼ばれる手法です。
拡散方法については調べてないのでよく分かりません。
下(通常モード)上(ディザ合成)ディザ合成モード結果
下(通常モード) 上(ディザ合成) ディザ合成モード結果
※見やすくするために、上のレイヤーの背景を黒で塗り潰してありますが、本当は透明です。
使おうと思えば波や砂目などの描写に使えるのですが、あまり狙い通りに拡散してくれないことが多いので、レイヤーは通常などのままにしておいてディザモードのブラシで描画した方が、フィルタなども使えるので汎用性が高まるでしょう。
レタリングなどで上手く使えばそれなりに面白いかと思います。

3. 乗算(Multiple)

直感的に結果を理解できるモードです。下のレイヤーとの減法混色になります。陰(shade)部分を塗るなどさまざまな部分で頻繁に利用されます。
計算式は
Pn = Pa * Pb / 255

Pn、Pa、Pb を0~1の範囲とする場合は、
Pn = Pa * Pb
です。正に乗算。
下(通常モード)上(乗算モード)乗算モード結果
下(通常モード) 上(乗算モード) 乗算モード結果
※上のレイヤーは、下のレイヤーとクリッピンググループ化しています。

4. スクリーン(Screen)

ハイライトを入れるために使えます。乗算の結果色の(直感的な)予想しやすさに比べ、スクリーンの結果色を予想するには結構慣れが要ります。下のレイヤーとの加法混色になります。
計算式は
Pn = Pa + Pb - Pa * Pb / 255

Pn、Pa、Pb を0~1の範囲とする場合は、
Pn = 1 - ( ( 1 - Pa ) * ( 1 - Pb ) )
となります。2進数的にはビット反転してかけ合わせてビット反転。
下(通常モード)上(スクリーンモード)スクリーンモード結果
下(通常モード) 上(スクリーンモード) スクリーンモード結果
※上のレイヤーは、下のレイヤーとクリッピンググループ化しています。

5. オーバーレイ(Overlay)

明度の高い部分と低い部分の鮮やかさが上がります。彩かさが上がるため、画像全体にかけると一見キレイになったかのような錯覚に陥りやすいので、注意しましょう。錯覚です。
全体の色調を統一するためや塗り斑、主線に色を付けるためなどによく利用されています。
計算式は以下のようになります。重ねられるレイヤー(下のレイヤー)の中間値で乗算とスクリーンを使い分けているようです。
Pa < 128 の場合
Pn = Pa * Pb * 2 / 255
Pa >= 128 の場合
Pn = 2 * (Pa + Pb - Pa * Pb / 255) - 255
です。

Pn、Pa、Pb を0~1の範囲とする場合、
Pa < 0.5のとき
Pn = Pa * Pb * 2
Pa >= 0.5のとき
Pn = 1 - 2 * ( 1 - Pa ) * ( 1 - Pb )
となります。
下(通常モード)上(オーバーレイモード)オーバーレイモード結果
下(通常モード) 上(オーバーレイモード) オーバーレイモード結果
※上のレイヤーは、不透明度を80% にしてあります。

下(通常モード)上(オーバーレイモード)オーバーレイモード結果
下(通常モード) 上(オーバーレイモード) オーバーレイモード結果
※上のレイヤーは、不透明度を20% にしてあります。塗り斑は、ほとんど分からないくらいにかけるのが良。

6. ソフトライト(Softlight)

ヘルプでは覆い焼きと焼き込みの使い分けと言っていますが、値を実測してプロットしてみるとどうもその通りになりません。ヘルプに不正確なこと書くなー。下のレイヤーに対して、唯一指数関数的に影響を与えるモードです。
これも全体の色調を統一する時に使えます。オーバーレイではピーキーに鮮やかな色になりますが、ソフトライトは指数曲線を描くのでそうはなりません。
計算式は以下の通りです。^ はべき乗を表します。
Pb < 128の時
Pn = ( Pa / 255 ) ^ ( ( 255 - Pb ) / 128 ) * 255
Pb >= 128の時
Pn = ( Pa / 255 ) ^ ( 128 / Pb ) * 255

Pn、Pa、Pb を0~1の範囲とする場合、
Pb < 0.5の時
Pn = Pa ^ ( 2 * (1 - Pb ) )
Pb >= 0.5の時
Pn = Pa ^ ( 1 / ( 2 * Pb ) )
下(通常モード)上(ソフトライトモード)ソフトライトモード結果
下(通常モード) 上(ソフトライトモード) ソフトライトモード結果
※オーバーレイモードだとピーキーに着色される。
参考:ハードライトモードでの結果
参考:オーバーレイでの結果
この類のレイヤーモードがやや分かり難いのは、輝度に対して知覚的に変化するのではなく、RGB 値に対して算術的に効果が表れる点だと思います。これは、RGB モードで画像を操作する時の欠陥であり、絵画的な直感に反します。現状では慣れるしかないと思います。輝度については後述部分か、HSB 値と輝度の求め方を参照。

7. ハードライト(Hardlight)

計算式は以下のようになります。一見オーバーレイと同じように見えますが、重ねられるレイヤーではなく、重ねるレイヤー(上のレイヤー)の中間値で乗算とスクリーンを使い分けています。逆に言えば、重ねるレイヤーと重ねられるレイヤーを入れ替えると、オーバーレイと全く同じ結果が得られます。
Pb < 128の時
Pn = Pa * Pb * 2 / 255
Pb >= 128の時
Pn = 2 * ( Pa + Pb - Pa * Pb / 255 ) - 255

Pn、Pa、Pb を0~1の範囲とする場合、
Pb < 0.5の時
Pn = Pa * Pb * 2
Pb >= 0.5の時
Pn = 1 - 2 * ( 1 - Pa ) * ( 1 - Pb )
下(通常モード)上(ハードライトモード)ハードライトモード結果
下(ハードライトモード) 上(ハードライトモード) ハードライトモード結果
※上のレイヤーは、不透明度を50%に下げています。
同じ画像同士を重ねると、明るい部分は一層明るく、暗い部分は一層暗くなるので、彩度が上がります。

8. 覆い焼き(Dodge)

覆い焼きは、ハイライトなどで頻繁に使われます。みつみ美里さん辺りがエヴァンジェリストでしょう。劇的に明るくなる上、彩度が大きく変わりますので、瞳や髪、肌のハイライトにちょっとだけ使うのがポイントです。金属らしさを表現する際にも使えます。
この関数は、ゼロ除算に注意してください。というか、露骨なゼロ除算だなぁ。
Pn = Pa * 255 / ( 255 - Pb )
ただし、Pb = 255 の場合及び Pn > 255 の場合、Pn = 255とする(こういうのを“saturate”というらしい)

Pn、Pa、Pb を0~1の範囲とする場合、
Pn = Pa / ( 1 - Pb )
PhotoShop6.0 では挙動が変わっています。6.0の関数は調べてないので知りません。レイヤーセットを使用すると、上記と同じ効果が得られます。
下(通常モード)上(覆い焼きモード)覆い焼きモード結果
下(通常モード) 上(覆い焼きモード) 覆い焼きモード結果
※上のレイヤーは瞳の塗り部分とクリッピンググループ化してあります。

下(覆い焼きモード)上(覆い焼きモード)覆い焼きモード結果
下(覆い焼きモード) 上(覆い焼きモード) 覆い焼きモード結果
※上のレイヤーはパイプの塗り部分とクリッピンググループ化してあります。

9. 焼き込み(Burn)

焼き込みは金属っぽさを表現できます。塗り斑に使うこともできます。ブラシを焼き込みモードにして陰(shade)部分を塗る人もいましたが、鮮やかになりすぎて金属っぽくなるので、そう意図していない限り止めた方が無難です。
計算式は以下の通りです。これもゼロ除算に注意してください。
Pn = 255 - (( 255 - Pa ) * 255 / Pb ))
ただし、Pb = 0 の場合及び Pn < 0 の場合、Pn = 0

Pn、Pa、Pb を0~1の範囲とする場合、
Pn = 1 - ( 1 - Pa ) / Pb
覆い焼き同様、PhotoShop6.0 では挙動が変わっています。レイヤーセットを使用すると、上記と同じ効果が得られます。
下(通常モード)上(焼き込みモード)焼き込みモード結果
下(通常モード) 上(焼き込みモード) 焼き込みモード結果
※上のレイヤーは人物等の後ろ、背景の手前で、不透明度を30%に下げてあります。

10. 比較(暗)(Darken)

これはとても簡単。RGB 値のローパスフィルタと言っても好いかもしれません。上のレイヤーの RGB 値でカットオフします。
Pa >= Pb の時
Pn = Pb
Pa < Pb の時
Pn = Pa
下(通常モード)上(比較(暗)モード)比較(暗)モード結果
下(通常モード) 上(比較(暗)モード) 比較(暗)モード結果
※上のレイヤーは、背景の上、手前の人物の下に挿入しています。
特定の値以上を急激にカットしますから、ヒストグラムはイマイチな形になります。明度や輝度をコントロールするのが目的ならば、レベル補正を使うべきです。わざと画像を劣化させたり、RGB の特定チャンネルをカットする際には使えるかもしれません。背景のコントラストを落としたりとか。

11. 比較(明)(Lighten)

RGB 値のハイパスフィルタ(なんて呼ぶとお叱りが来そうだが……)です。
Pa >= Pb の時
Pn = Pa
Pa < Pb の時
Pn = Pb
これもチャンネルの情報量を削ってヒストグラムを潰しますから、明度や輝度をコントロールするのが目的ならばレベル補正を使うべきです。
下(通常モード)上(比較(明)モード)比較(明)モード結果
下(通常モード) 上(比較(明)モード) 比較(明)モード結果
こういう風に画像を劣化させるのも、たまになら面白いですね。

12. 差の絶対値(difference)

下のレイヤーと同じ画像を重ねると真っ黒になるため、2枚の画像の差異を調べたり位置を合わせたりする際に利用できます。また、グレースケール画像の場合、ベタにかかる効果線などを自動的に白黒反転させたりすることができます。
値を求める関数自体は名前通りなので大変容易です。
Pn = | Pa - Pb |
下(通常モード)上(差の絶対値モード)差の絶対値モード結果
下(通常モード) 上(差の絶対値モード) 差の絶対値モード結果
※差異のある口の部分だけが黒くなりません。
RGB 値を反転させる時にも使えそうな気もするのですが、エッジ部分が汚くなるので、私はあまり好きではありません。また、反転した RGB 値は、輝度などの問題から視覚的な補色としてふさわしくないことが多い上に細かい調整がし難いので、色相や明度を調整して通常モードで乗せる方がずっと楽でしょう。

13. 除外(exclusion)

差の絶対値と似てるようで、実は違います。元の値とビット反転した値との差をビット深度で割ったものが傾きになる関数のようです。私は実際の作業で使ったことがありません。
計算式は以下の通り。
Pn = Pa + Pb -2 * Pa * Pb / 255

Pn、Pa、Pb を0~1の範囲とする場合は、
Pn = ( 1 - Pb ) * Pa + ( 1 - Pa ) * Pb
下(通常モード)上(除外モード)除外モード結果
下(通常モード) 上(除外モード) 除外モード結果
※差の絶対値よりヒストグラムを潰すので柔らかく見える。
参考:差の絶対値モードでの結果
参考:差の絶対値での結果

14. ここまでのまとめ

ソフトライトの項でも触れましたが、以上のブレンドモードは、RGB 各チャンネルに対して平等に働きます。これが、人間の感覚的な明るさの認識(心理物理量)と一致しないため、いまいち直感的ではないものもあると思います。例えば覆い焼きでは、色によっては狙ったように明るくならないことがあります。これは残念ながら慣れるしかありません。

2. 色相と輝度を利用したブレンド

色相と輝度を利用したブレンドモードには以下の 4 つがあります。
  1. 色相(Hue)
  2. 彩度(Saturation)
  3. カラー(色相と彩度)(Color)
  4. 輝度(Luminance / Luminosity)
このブレンドモードは、基本的には HSB カラーモデルを使用していますが、普通の HSB モデルとは異なり、明度(Brightness)ではなく輝度(Luminance)に大きく支配されています。というよりも、明度は無視しています。ですから、これを HSB モデルと呼ぶのは問題があるかもしれません。輝度とは、
Luminance = ( 0.298912 * r + 0.586611 * g + 0.114478 * b );
で計算される明るさの指標です。HSB の明度は RGB の最大値から算術的に計算されます が、輝度は人間の視覚に合わせた感覚的な指標です。上記の係数では細かすぎるので、それぞれ 0.30、0.59、0.11 程度で充分でしょう。テレビの Y / C 分離や JPEG 内部の YUV でも、同じ理由から輝度を分離して処理します。輝度と色相または彩度だけで色を決めるというのは、お互いが依存しあってるので結構厄介です。

1. 色相(Hue)

上のレイヤーの色相で下のレイヤーを着色しますが、下のレイヤーの輝度を維持します。つまり、上のレイヤーの彩度や明度は一切維持されませんので要注意です。
ちょっと計算式を上手くまとめられなのですが、ルールは以下の通りです。
上のレイヤーの色相を Hb、下のレイヤーの輝度を La 、結果色の色相を Hn、下のレイヤーの RGB の最小値と最大値の差を Ca とすると、最終的に合成される RGB 値は、以下の2式
Hn = Hb
La = (0.30 * r + 0.59 * g * 0.11* b)
を満たす r、g、b の組み合わせのうち、その最大値と最小値の差( Cn とする)が Ca と等しいものである。ただし、Ca が Cn の最大値より大きい場合は、Cn が最大になるものとする。

例を出すと、
204 110 51

65 188 106
を色相で重ねる場合、
La = 0.30 * 204 + 110 * 0.59 + 0.11 * 51 = 132
Hb = Hn = 140
を満たす組み合わせは、
131 133 132
130 133 131
128 135 131
<中略>
12 204 76
8 207 74
6 207 73
4 209 72
0 212 71
など多数あるが、
Ca=153
なので、Cn=153 となるような
36 189 87
が結果となる。
ルールとしては上記の通りなのですが、この考え方で実装したら、たかだかブレンドの表示のためにループか再帰が必要になるのでちょっとヤバそうです。YCrCb で考えても結局同じだと思うし……。うーん実際にはどうやってんだろう。私が式を思いつけてないだけだと思うんですが。
下(通常モード)上(色相モード)色相モード結果
下(通常モード) 上(色相モード) 色相モード結果
調整レイヤーで色補正するよりも、このように色相レイヤーで補正することをお勧めします。

2. 彩度(Saturation)

これも下のレイヤーの輝度を維持しようとするので、上のレイヤーの彩度は完全には維持されません。正確に書くと、上のレイヤーの色相と輝度を下のレイヤーのものに置き換えます。
ルールは以下の通り。
下のレイヤーの色相を Ha、下のレイヤーの輝度を La 、結果色の色相を Hn、上のレイヤーの RGB の最小値と最大値の差を Cb とすると、最終的に合成される RGB 値は、以下の2式
Hn = Ha
La = (0.30 * r + 0.59 * g * 0.11* b)
を満たす r、g、b の組み合わせのうち、その最大値と最小値の差( Cn とする)が Cb と等しいものである。ただし、Cb が Cn の最大値より大きい場合は、Cn が最大になるものとする。
下(通常モード)上(彩度モード)彩度モード結果
下(通常モード) 上(彩度モード) 彩度モード結果
※上のレイヤーは不透明度を 80% にしてあります。
彩度による塗り斑も結構面白い効果があるかと。

3. カラー(色相と彩度)(Color)

これも、ヘルプの記述はやや不正確です。上のレイヤーの色相は維持されますが、彩度は輝度によって変化します。元画像の輝度が飛んでしまうので、ベタ塗りのレイヤーで色調を統一するためだけなら、これを使わずに彩度モードを使いましょう。逆にいえば、輝度を飛ばして均すことができます。
ルールは以下の通り。
上のレイヤーの色相を Hb、下のレイヤーの輝度を La 、結果色の色相を Hn 、上のレイヤーの RGB の最小値と最大値の差を Cb とすると、最終的に合成される RGB 値は、以下の2式
Hn = Hb
La = (0.30 * r + 0.59 * g * 0.11* b)
を満たす r、g、b の組み合わせのうち、その最大値と最小値の差( Cn とする)が Cb になるものである。
下(通常モード)上(カラーモード)カラーモード結果
下(通常モード) 上(カラーモード) カラーモード結果
※上のレイヤーは不透明度を 50% にして手前の人物の下に挿入してあります。
これは彩度モードでも同じことですが、白や黒の無彩色の色を乗せると、グレースケール化することができます。輝度を維持したまま下のレイヤーの彩度を落とすなどの際に使えると思います。

4. 輝度(Luminance / Luminosity)

上のレイヤーの輝度で下のレイヤーを均します。輝度を均すと画像のイメージが大幅に変わるので要注意です。
下のレイヤーの色相を Ha、下のレイヤーの輝度を La 、結果色の色相を Hn、下のレイヤーの RGB の最小値と最大値の差を Ca とすると、最終的に合成される RGB 値は、以下の2式
Hn = Ha
La = (0.30 * r + 0.59 * g * 0.11* b)
を満たす r、g、b の組み合わせのうち、その最大値と最小値の差( Cn とする)が Ca と等しいものである。
下(通常モード)上(輝度モード)輝度モード結果
下(通常モード) 上(輝度モード) 輝度モード結果
これはなかなか使い道思いつきませんねー……。輝度は画像の一番重要な情報なので均すわけにはいかないし。わざわざ輝度を潰さねばならんシチュエーションって何だろ。

3. まとめ

幾つか思いつく注意点だけをまとめておきます。
  1. レイヤーモードでやるよりは、画像をコピーして調整して通常モードで重ねた方が応用が効くことも多いので、無理にレイヤーモードを使わない方が生産性上がるかも。
  2. RGB モードのブレンドの一部には、直感的な予想と結果とが異なるケースがあるが、諦めて慣れるしかない。
  3. 全体の色を調整する場合は、調整レイヤーの 色相・彩度 ではなく、色相モードのレイヤーを使う方が、輝度が維持されるのでお勧めである。

4. お断りとか

※ このドキュメントはクリエイティブコモンズライセンスで公開されています。ドキュメントの内容は無保証です。また、断りなく加筆・訂正されます。

This document is distributed under the Attribution-NonCommercial-ShareAlike Creative Commons License. There is no warranty for this document. This document would be modified at any time as I want.

Author : Mishiki Sakana <osakana@ofo.jp>
Last Modified : Fri, 29 Sep 2006 08:57:28 JST (+0900)
Published : Fri, 02 Nov 2001 JST (+0900)


<CG Tips>

[ Copyright 1996-2016 Mishiki Sakana. Some Rights Reserved. ]