======================================================================
       the GIMP G-Pen + MixBrushパッチ（2.4移植＆勝手改造版）
======================================================================

これは、しげっち氏のMixBrushツールとG-Penツールをthe GIMP 2.4.xに移植
し、Windows用にビルドしたものです。
MixBrushツールについては、当方で勝手に改造を加えてあります。


■G-Pen + MixBrushパッチ

イラストを描くという用途においては、機能的に不十分とされることもあるthe 
GIMPを拡張して、よりハッピーになろうというようなプロジェクトの初期成果物
です。
現在はしげっち氏がバージョン2.2系→2.4系への移行作業を行っています。こち
らの勝手移植版でのアイデアのうちいくつかは、より整理・改良の上組み込まれ
ているようです。

プロジェクトホームページ
http://sourceforge.jp/projects/gimp-painter/

しげっち氏のWikiサイト（各ツールの説明など）
http://www24.atwiki.jp/sigetch_2007/pages/20.html


■インストール

-"gimp-painter--YYYYMMDD_win32_bin.zip"からのインストール

どこかからWindows版の2.4.3を見つけてきてインストールし、アーカイブ内の
gimp-2.4.exeを差し替えてください。

※GTK+などのライブラリが入っているフォルダ（公式ビルドはGIMP本体のバイナ
リと同じ場所）にlibfreetype-6.dllが見つからない場合は、freetype6.dllを複
製の上リネームしてください。

-"gimp-painter--YYYYMMDD_win32_full.zip"からのインストール

一応必要なランタイム類が同梱されている（はず）なので、適当なところにフォ
ルダを作り、そこに展開してください。
もし何かが無いとか言われるときは、ミスですので当方まで報告してください。
蛇足ながら、おまけで追加のGtk+用EnginesとしてNodokaとAuroraを入れてあり
ます。テーマの環境設定で切り替えられるので、気が向いたら変えてみてくださ
い。

以前の版の勝手改造GIMPを使っていて、新しい版に差し替え後動作がおかしいと
感じられる場合は、一度ツールオプションをリセットしてGIMPを再起動すると改
善することがあります。


■改造箇所と設定の解説

-Alpha channel mixing
アルファ付きのレイヤーで、アルファ値を含めた混色を行います。また、混色結
果のアルファ値が描画対象ピクセルのアルファ値より小さい場合、実際に描画結
果のアルファ値が描画前より小さくなることを許容します。このオプションは、
重ね塗りにチェックが入っているときのみ機能します。
アルファ付きレイヤーと、それ以外のdrawableとの描画結果の違いを最小限に抑
えるには、Paint with pigmentにチェックを入れ、Canvas colorのdensityを1.0
に固定してください。

-Minimum scale
ブラシサイズを筆圧でコントロールする際の、（最大筆圧時のサイズを基準にし
た）最小倍率です。
例えば、1.0を指定すると圧力感度の筆圧をオフにするのと同じことになります
し、0を指定すれば従来どおりの変化の仕方をします。0.5を指定した場合には、
最も軽い筆圧で最大筆圧時の50%サイズになります。

-Main color(density)
Main colorは筆の穂に含まれる塗料のコントロールになります。
Densityは塗料の量を指定するもので、0では全く着色する能力がなくなり、1.0
にすると下地の色が混ざらなくなります。
※Paint with pigmentがオフの場合には、Canvas color densityが0でない限り、
Main color densityが1.0でも下地の色が混ざります。

-Main color(rate)
塗料の中に前回打った描点のカラーが混じってくる割合を指定します。
値が小さいほどより多く混じるようになります。
混色をしたい場合には、Main color rateを低くし、Canvas color rateを高くし
ます。さらに不透明度を筆圧で調整するようにするとよりきれいに処理できるで
しょう。

-Dryout
Painterの「色の伸び」に相当するパラメータです（単位はピクセル）。ストロ
ークの長さに比例してMain colorのDensityが下がっていき、指定値に達すると0
になります。
Dryoutの値が0の場合は例外として、全く減衰しません。

-Paint with pigment
Main colorとCanvas colorのブレンドには、両者の不透明度（×濃度）の比率を
用いる方法と、レイヤーの重ね合わせと同じ方法の2種類があります。Paint 
with pigmentがオンになっている場合には、後者の方法でブレンドされます。
11月4日以前の版に近い処理をさせたい場合には、Canvas colorのDensityを1.0
に固定した上で、Paint with pigmentをオンにしてください。このとき、Main 
color densityはCanvas color rateに、Main color rateはOriginal color rate
に対応します。

-Canvas color(density)
下地のカラーが混じる分量を指定します。あえて例えるなら、水や溶剤の分量と
言えるかもしれません。
Main color、Canvas color双方のDensityが0の場合には、ペイントしても何も起
こりません。ただし、Alpha channel mixing有効時にアルファ付きレイヤーへペ
イントすると、消しゴムのような振る舞いをします。

-Canvas color(rate)
下地のカラーとして、ストロークを描画する前のカラーを加味する割合を指定し
ます。値が小さいほどより多く加味されるようになります。高い値では色の伸び
が良くなり、若干低い値にすると絵の具の粘りやかすれ感が強調されます。
値がある程度低くなってくると、描点の形が見えて不自然になる傾向があります
ので、1.0を基準にして値を少しずつ下げていくのがベターです。

-Pressure
筆圧のパラメータは、入力と出力それぞれの最小・最大値を指定する形式になっ
ています。
例えば、入力が0.25〜0.75、出力が0.3〜0.9となっているとすると、筆圧が0か
ら25%までは30%という出力になり、以降筆圧75%までは出力も上がっていきます。
75%の筆圧で最大出力の90%に達し、それを超える筆圧では90%を維持します。
この出力値は、筆圧の適用対象となるパラメータに掛け合わされます。対象パラ
メータの設定値を1.0に固定しておくと、出力の上限・下限がそのまま対象パラ
メータの上限・下限になるのでコントロールしやすくなるでしょう。
ちなみに、筆圧によるコントロールを無効にしたい場合は、出力側を両方とも
1.0にしておきます。また、出力の1が2より大きな値を取る場合、筆圧が反転さ
れます（筆圧が軽いほど出力が上がる）。入力側については、1と2のどちらが大
きい値をとっても（内部処理で入れ替えるので）動作に違いはありません。

　出力
　　│　　　　　in2
　　│　　　　　　______out2
　　│　　　　　／
　　│　　　　／
　　│　　　／
out1│____／
　　│　in1
　　┼─────────入力

-Delay
ストロークを描画する前のカラーを得る際に、ストロークを開始する前のデータ
からカラーを取得してしまうと、自分自身のストロークをにじませることができ
ません。
そのため、ストロークの開始後、実際に描点を打ち込むのを一時保留することで
適切なカラーを取得できるようにしています。
Delayパラメータは、処理を保留する描点の数を指示するものです。大きな値を
指定すると、スタイラスの動きに対して実際の描画が追いかけてくるようになる
ので多少の違和感があるかもしれません。逆に小さな値を指定すると違和感が軽
減されますが、直前の描点のカラーを拾ってしまうため、Canvas color(rate)の
効果が得られなくなります。

-Paint the tail of stroke (delay > 0)
ストロークの終端Delay個分の描点を処理するように指示します。Delayを1以上
にしている場合の描画が気になる方はチェックを外すと気分的には改善されます。

-Sample size
カラーを拾う範囲（直径）の上限をピクセル数で指定します。
GIMPに元々あるAPI関数で平均を取っているのですが、結構重たいのでこのパラ
メータで制限をかけています。

-Use merged color
描画対象レイヤーのカラーではなく、全てのレイヤーを統合した結果のカラーが
混じってきます。ブラシサイズがある程度大きくなってくると重くなるので注意。
本来なら、Painterの「下の色を拾う」にならって、描画対象のレイヤーより上
位のレイヤーを除いた統合カラーを使用したいところですが、知識不足と手抜き
のため現在の仕様になっています。何もないよりはマシだろうということで。あ
と、制限事項として、レイヤーのキャンバス外にあるピクセルカラーが拾えず、
白か黒が混じってくる、というのがあります。

-Assume that the hidden color is
アルファ付きレイヤーにペイントするとき、Canvas colorに白または背景色が混
じります。normalは単に（半）透明色として処理します。

-Remove the background color
最終的に計算された描画色から、 白または任意のカラーを除去して（半）透明
化します。除去処理のコードは、colortoalpha.c（「色を透明度に」プラグイン）
から拝借しました。
MixBrushは、重ね塗りのチェックを入れておかないと本来の効果が得られません
が、この機能を有効にしている場合はチェックを外した方が、一般にきれいな仕
上がりとなります。好みに応じて切り替えてください。
除去するカラーの指定は"Assume that..."の選択を参照します。今のところ、
NormalはWhiteと同じ扱いです。


■以前の版からの修正点

-12月22日版

Windowsバイナリを2.4.3に更新しました。

Alpha channel mixing有効時の処理速度を改善しました。従来は描点が収まる領
域のバッファ上で描点を適用する処理を行ってから、GIMPのAPIを呼び出して
drawableに反映させる流れでしたが、12月22日版では直接drawableに対して描点
を適用しています。
このため、現在のところ(1)選択範囲が無視される(2)RGBレイヤーへの描画時、
選択されていないチャンネルにも描画されてしまう、という制限事項があります
（処理速度への影響が軽微であれば、今後の版で修正します）。

-12月9日版

12月7日版で描き始めにいきなり落ちる問題がありましたが、これが改善された
かもしれません。されていないかもしれません。

ツールのデフォルト値を変更し、とりあえず混色ブラシらしい動作をするように
しました。

Alpha channel mixingオン・Paint with pigmentオンのとき、Main colorと
Canvas colorのdensityがともに下がっていくにつれて透明にする力が強くなる
はずですが、実際には0になって急に効いてくるようになっていたので修正しま
した。

-12月7日版

Alpha channel mixing関連の修正です。グレイスケールのdrawableで機能しない
件、Main colorとCanvas colorのdensityが共に0のときアルファ付きレイヤーに
ペイントすると白い四角が描画される件、アルファ付きレイヤーへのペイント時、
意図せず描き始めのアルファ値が下がってしまう件が改善されています。

また、混色処理の調整とAlpha channel mixing有効時の処理速度アップ（程度と
しては若干、ですが）を行いました。

-12月3日版

11月7日版のところで書いていた、「レイヤーのアルファを描点のアルファ値に
置き換えること」の件を試しに組み込んでみました。
実際にはそれだけでは済まずに色々と調整やらゴマカシもあるのですが……。

-11月24日版

Windowsバイナリを2.4.2に更新しました。コンパイラの最適化オプションを
Pentium4向け（従来はPentium3向け））に変更しましたので、環境によっては動
作しないかもしれません。

描点カラーを8ビット整数値に変換する際生じる誤差を次回の処理でCanvas 
colorに組み込むようにしました。混色処理を見直す前は同じようなことをやっ
ていたのですが、見直し後しばらく放ってあったものです。
しかし、実際に描いているとやはり微妙な色変化のところでどんどん汚くなって
いくのが気になったので、改めて実装しました。手抜き処理なので正しくはない
のですが、見た目には好ましい結果が得られます。
ただ、描点をレイヤーに合成するGIMPの内部処理で発生する誤差も結構馬鹿にな
らないため、ブラシ不透明度を下げて、あるいはボケ足のあるブラシで描く場合
には影響があるでしょう（これはMixBrushだけ弄っていても直りません）。

-11月9日版

筆圧周りの処理を変更しました。筆圧に対応するパラメータの効きどころをより
正確に指定できるようになっています。その分、設定が面倒になっているという
デメリットもありますが……。

Assume that the hidden color is...の効果を再実装しました。

-11月7日版

混色の処理を書き直しました。パラメータの項目もあれこれ変わっています。今
回の変更により、透明レイヤーにペイントしても破綻することはなくなったと言
えるでしょう。ただし、レイヤーのアルファチャンネルは基本的に不透明になっ
ていく方向にしか干渉できないので、ベタの地に直接ペイントするのと異なる結
果になるのは避けられません（不透明度の変化が不自然）。
レイヤーのアルファを描点のアルファ値に置き換えることができれば、違いがあ
る程度埋められるのではないかと思うので、どうやって差し替えようかと現在考
えているところです。

今回の版では次の機能が使えません。
・筆圧の反転
・Assume that the hidden color is
・Remove the background color

また、次の機能が使えるようになっています。
・色の筆圧感知
・グラデーション色でペイント

-11月4日版

重ね塗りのチェックを外した際に、ストロークの重なる部分や交差する部分のカ
ラーが壊れる仕様を改善し、壊れないようにしました（まだ若干不具合が残って
いるかもしれませんが、おおむね「使える」状態にはなっていると思います）。
従来はこの仕様のため、「圧力感度」の「色」や「グラデーションの色を使う」
を有効にすると重ね塗りモードが強制されるようになっていました（素のGIMPの
仕様が元々そういう風になっています）。

-10月29日版

Canvas colorの筆圧の適用方法を元に戻しました。ただし、正負を逆にしてあり
ますので注意してください（10月25日版を基準にした場合、29日版の正負は同じ
となります。多分……）。
デフォルト値は10月22日版以前と同じになるように、-0.8を設定してあります。

グレースケールの画像またはチャンネルにペイントする際、不透明度を正しく扱
えていなかったので修正しました。

10月25日版では、Remove the background colorがグレースケールやインデック
スカラーでも動作していましたが、RGBモードに特化した処理なので適切な結果
は得られませんでした。10月29日版ではRGBモードのみで処理を行うように修正
しました。他のモードでチェックが入っていても、処理はスキップされます。

-10月25日版

Canvas colorの筆圧の利き方が期待する内容と異なるようなので、変更を加えま
した。また、Bleedの筆圧の利き方が不自然だったので調整しました。いずれも
まだ確定ではありませんので、しばらく様子を見て必要なら再修正します。

ブラシオプションに「重ね塗り」の項目が、これまではありませんでした。内部
的には常にオンになっていたのですが、今回の版からはオフにできるように変更
しました。描画色が途中で変化するような設定で描くときちんとペイントできな
い（GIMP本体に原因がある）場合があるので、その際は重ね塗りをオンに戻して
ください。
※重ね塗りオプションはMixBrush固有のオプションではないので、デフォルトは
「オフ」になっています。環境設定でツールオプションの設定を保存するよう変
更すれば起動の度にオンにする必要がなくなります。

Windowsバイナリを2.4.0正式版にしました。

-10月22日版

10月21日版では、Canvas colorのRate（割合）が0になっているとDryoutが無視
されてしまっていたので、これを修正しました。また、必要のないAPI関数の呼
び出しとメモリリークがあったので修正しました。

-10月21日版（Windowsバイナリのみ）

GIMP 2.4ではツールのクラスによって、基本的なオプション項目の表示内容をコ
ントロールしているようです。そのため、以前の版では「圧力感度」の「大きさ」
チェックボックスが表示されなくなっていました。10月21日版ではこの点が修正
されています。

Bleedの動作が変更されたのに伴い、より強く混ぜられるように値の上限を0.3ま
で引き上げました。
ただし、Bleedの値を高くすると下地のカラーを取り込む力が強くなるので、伸
びが悪くなり固まりはじめた絵の具のような感じになりますので注意してくださ
い。また、このときブラシの不透明度が高いと直前の描点の形が見えてしまい不
自然に感じられるかもしれません。
実際のところ、従来の上限である0.2あたりまでにしておいた方が無難でしょう。


■気になる点

筆圧を軽くするときなどにグレーっぽくなったり変な色づきが出ることがありま
す。恐らく精度落ちというか小数点以下の切捨ての影響だと思われます（Painter
でも同様の現象はあります）。

Sample sizeを大きくしていると、透明部分のペイントで余計な色が混じること
があります。これは平均を取ったあとに透明部分を白（背景色）に置き換える処
理をしているのが関係していそうです。
いずれは、自前の平均処理を入れないとだめかなあという感じですね（範囲が広
い場合は適当に間引かないと重くなるし）。


まあ、そんな感じで……

やまかわ
yamma-ma at users.sourceforge.jp
