CloverPaint雑記

CloverPaintの解説・開発状況・内部仕様・利用法などについてつらつらと

ブラシ作成指南(その4) ~濃度調整を使いこなす

今回はブラシ作成で一番の肝となる濃度調整に関するパラメータを少し詳しく見ていくことにします。

 

まず、ブラシの濃さを決める基本的なパラメータとして流量と不透明度があります。

・流量(=ペン流量(移動トリガ))

・不透明度(=ストローク合成・不透明度)

※括弧内はブラシ設定内での名前

 

見た目、この2つのパラメータの効果は似ているのですが、内部的には全く違うことをしています。

まずこの違いを理解することが重要なのですが、そのためにはブラシの内部動作を知る必要があります。

 

ブラシ描画の内部動作

 f:id:CloverPaint:20131121095230p:plain

 図はブラシ設定内の「描画演算タイプ」に「通常」を選んだ時のブラシ描画の内部動作を、説明のため簡略化したものです。

「通常」モードは最も基本的な演算タイプで、混合を伴わないブラシは大抵この演算を使っています。

 
A: 内部濃度バッファ

1ピクセル=14bit(16384段階)のモノクロ(グレースケール)バッファです。

B: 描画色

その時選択されている色です。

 

C: ストローク内容

Bの描画色をAの濃度をマスクとして使い、切り抜いたイメージです。

これが実際に描画されるストロークになります。

 

D: 元レイヤー画像

ストローク描画される前の画像です。そのとき選択されているレイヤーです。

 

E: 最終結果

これがストローク描画した時、実際に目にする画像です。

 


 

Aに描かれているペン先形状(黒い点)の1つ1つをSpotと呼びますが、このSpotの濃度を指定するのが、「流量」パラメータです。

一方、「不透明度」とはD(元レイヤー画像)にC(ストローク内容)のレイヤーを合成演算してEを生成するとき、Cのレイヤーに適用する不透明度です。むろんレイヤーの合成演算ですから、ここでは不透明度だけではなく加算や減算等を指定して特殊なブラシを作ることもできます。(組み込みブラシのマジックは、ここで減算を使い、色を混ぜると黒くなる効果を出しています)

 

Spotの濃度演算 

さて、モノクロのバッファにSpotが描画され、それが画面に表示されるまでの流れが理解できたところで、Aの部分の演算を詳しく見ていくことにします。

 

ブラシパラメータの 「描画演算タイプ」に「通常」を選んだとき、その下に「通常時追加パラメータ」が表示されます。

f:id:CloverPaint:20131121115536p:plain

 「通常時追加パラメータ」には以下の2つのパラメータが存在し、非常に重要な効果を与えます。

重複濃度加算率

すでにバッファに描画されている濃度とこれから描画しようとしている濃度のうち、重なる部分(つまり小さい方の数値)を、バッファに加算する比率を指定します。

加算変調率

すでにバッファに描画されている濃度があるとき、これから加算しようとしている数値を、透明部分の割合で変調します。

 

文章からでは、ちょっと意味が捉えにくいと思います。

以下実際に数値を与え、どんな効果があるのか見ながら説明していきます。

(太さ40 / 流量 0.20 / 加算変調率 0.00に調整)

↓重複濃度加算率 1.00

f:id:CloverPaint:20131121121926p:plain

↓重複濃度加算率 0.30

f:id:CloverPaint:20131121122039p:plain

↓重複濃度加算率 0.00

f:id:CloverPaint:20131121122056p:plain

重複濃度加算率を変えるだけで、見た目が大きく異なる事がわかります。

 

重複濃度加算率が1.00(100%)の場合

0.20の流量がSpot同士が重なる度に100%加算されるため、ストロークの末端で0.20→0.40→0.60→0.80という濃度変化を起こし、以降はすべて1.00になっている事が見て取れます。

 

重複濃度加算率が0.30の場合

最初は0.20ですが、次の描画はmin(0.20,0.20)*0.30=0.06が加算される事になるため、0.26となります。

その次はmin(0.20,0.26)*0.30=0.06で、0.32となり、以降も0.06ずつ加算されます。

ここでは流量が一定なため0.06ですが、仮に3つめのSpotの流量が0.5だった場合は以下のような計算になります。

重複部分加算 = min(0.50,0.26)*0.30=0.078

重複なし加算 = (0.50-0.26) = 0.24

最終濃度 = 元の濃度 + 重複なし加算 + 重複部分加算 = 0.26+0.24+0.078 = 0.578

 

重複濃度加算率が0.00の場合

ここでは流量が一定なため、重複部分での加算がなくなることで、のっぺりしたストロークになります。仮に筆圧等で流量を変化させれば、その流用変化に素直に対応した濃度のストロークとなります。

 

(太さ40 / 流量 0.20 / 重複濃度加算率 0.30に調整)

↓加算変調率 0.00

f:id:CloverPaint:20131121122039p:plain

↓加算変調率 1.00

f:id:CloverPaint:20131121124145p:plain

 

加算変調率の方は効果がわかりにくいのですが、並べてみると下の方が薄くなっているのがわかります。また、ストロークの末端の方の変化は上下とも似ていて、加算変調率が1.00の方は濃くなるにつれて濃度変化が小さくなっていることが見て取れます。

これは加算変調率を与えたことによる効果です。

上の加算加算率が0.00の場合、2つめのSpotで重複する部分の濃度は0.20+min(0.20,0.20)*0.30=0.26です。

下の加算変調率が1.00の場合はどうなるかというと、

0.20+min(0.20,0.20)*0.30*(1.00-0.20)=0. 248となります。

最後の(1.00-0.20)が加算変調で、すでにバッファに描かれている濃度が0.20あるため、加算される濃度は透明部分の0.8を乗算することで弱められます。すでにバッファに描かれてる濃度が濃くなればなるほど、加算される数値が弱められることで、1.00に漸近するような濃度変化となります。

 

 ただしこれは、加算変調率が1.00の場合で、変調効果も強さを調整することができるため実際の計算は以下のようになります。

最終濃度 = 元の濃度 + (重複なし加算 + 重複部分加算)*((1.0-加算変調率) + (1.0-元の濃度)*加算変調率)

 

「描画演算タイプ」の「通常」に関しては、これで完璧に理解できると思います。

 

ついでに他のタイプも少し説明しておくと、「常に上書き」は、Aのバッファを持たず、常にSpot濃度で直接合成してしまうタイプです。通常使う場面のないものですが、互換性のために残しています。

「上書きしない」はAのバッファに0以外の数値(つまり少しでも濃度があれば)が書き込まれている場合、その後の処理をすべてスキップするタイプです。これは二値ペンを流量最大にして使う場合等、処理を軽くするために用意されています。

「カラーバッファ」「混合」に関してはややこしいのでまた別の機会に解説しようと思います。


 

Spotは、いくつかの異なったトリガで描画されます。

ペン流量(移動トリガ)

通常はこれを使ってブラシの濃さを決めます。

ペンの移動により、一定距離間隔でSpotを描画します。

間隔は別パラメータで指定します。

 

「ペン流量(停止時トリガ)」

ペンを止めた時に一定時間間隔でSpotを描画します。

エアブラシやマジック等で使います。

 

「ペン流量(時間トリガ)」 

ペンの移動速度により流量を自動変化させるタイプのトリガですが、表示品質に問題があり、利用はお勧めしません。互換性のために残してあります。

 


 

今回は重要な部分なのでかなり突っ込んだ説明をしてみました。

この辺りのパラメータを少し変えたり、筆圧による変化を与えるだけで、かなり特色のあるブラシを作れますので 是非さわってみてください。