これはやまかわが、しげっち氏のMixBrushツールとG-Penツールをthe GIMP 2.4.xに移植したうえで、MixBrushツールに独自の改造を行ったものです。
イラストを描くという用途においては機能的に不十分とされることもあるthe GIMPを拡張して、よりハッピーになろうというような趣旨のプロジェクトです。プロジェクト管理者はしげっち氏です。当方はプロジェクトメンバーですが、単に場所を間借りしているだけのような気がしないでもありません;-)
http://cue.yellowmagic.info/main/index.php?gimp-painter-
http://cue.yellowmagic.info/main/index.php?gimp-painter-%2F%C5%C1%B8%C0%C8%C4(連絡用ページ)
プロジェクトのページで配布しているパッケージのうち、gimp-painter-(マイナスがお尻に付く方)のreadmeファイルを今読んでいただいているわけですが、マイナスが付いているのはコードの質がオリジナルより劣るというところに由来しています。
GIMPのソースを展開したら、あとはパッチを適用して普通にビルドするだけです。すでに以前のパッチが適用済みの場合は、ひとつ前の版からのパッチもありますのでそちらを使ってください(版によってはないかもしれませんが)。
2008年5月31日時点での最新版は20080601です。これはGIMP 2.4.6でビルドできることを確認しています。
Note:x86系CPU用にビルドされる方は、コンパイルオプションとして浮動小数点数演算にSSEの使用を強制するスイッチを追加することを推奨します。例えば、gccでは"-msse2 -mfpmath=sse"(SSE2を使用する場合)といった内容になります。
Note:推奨される導入手順をWikiサイトの方で紹介していますので、参考にしてください。
現在配布されているgimp-painter-のWindows用バイナリは、以下のような複数のパッケージ(圧縮ファイル)に分かれています。
[version]の部分にはGIMPのバージョン番号が入ります(例:2.4.6)。[date]にはファイルの公開日が入ります(適用されるパッチはこの日付を超えない最近の日付のものとなります)。また、[type]には次の区別があります。
GIMPの実行ファイル本体(gimp-2.4.exe)で、PentiumIII以降のCPU向けに最適化されています。
インストール済みの同名ファイルを差し替えるか、後述のbaseを解凍した後こちらのファイルを解凍先のbinフォルダにコピーします。
GIMPの実行ファイル本体(gimp-2.4.exe)で、Pentium4以降のCPU向けに最適化されています。
最近のPCをお使いの方は、こちらの方が多少処理速度が向上すると思われます。ただし、gimp-2.4.exeがスプラッシュウインドウの表示前に強制終了してしまう場合には、bin_pentium3のgimp-2.4.exeを使用してください。
gimp-2.4.exe以外の、GIMPの実行に必要なファイルが一通り入っています。適当な場所に空のフォルダを作成し、その中に解凍してください。その後、bin_pentium3またはbin_pentium4からgimp-2.4.exeを解凍し,binフォルダにコピーします。
Note:Pythonサポートを有効にするには、lib\gimp\2.0\pythonフォルダ内の_gimpenums.pyd、_gimpui.pyd、gimp.pyd、gimpcolor.pyd、gimpthumbs.pyd(その他、拡張子.pydのファイルがあれば全て)をPythonのインストール先にあるDLLsフォルダにコピーし、lib\gimp\2.0\interpretersフォルダ内のpygimp.interpをテキストエディタなどで開き、"python=
"と"/usr/bin/python=
"の右側をご自分の環境に合わせて修正してください(大抵はそのままで大丈夫でしょう)。
また、baseを使用する場合、GTK+アプリケーション全般のテーマ設定がMS-Windows(またはwimp engineを使用するその他のテーマ)になっているとボタンやコンボボックスなどの描画がおかしくなりますので、GIMPのテーマをMS-Windowsに変更するか、またはGTK+アプリケーション全般のテーマを他のものに変更してください。
特に断りがない限り、[version]の部分が同じbaseとbin_~は[date]が異なっていても組み合わせて使うことができます。
baseパッケージ内には、以下のサードパーティープラグインがあらかじめインストールされています。
baseパッケージのcontribフォルダには、作者の再配布許可を得た以下の素材が収録されています。Windows以外のプラットフォームでお使いの方、またはbaseパッケージをご利用でない方はWikiサイトにてダウンロードしてください。
それぞれの詳しい説明や使用条件などはcontribフォルダにreadmeファイルがありますので、それらを参照してください。
GIMP萌え絵スレ2匹目のレス番764で紹介された筆圧最適化ブラシと、802で紹介された鉛筆ブラシ
※intuos対応の鉛筆ブラシは収録されていませんので、Wikiサイトにて入手してください。
ニコニコ動画にも説明をアップロードしていますので、参考にしてください。
通常は描点毎に行われるドキュメントウインドウ上の表示更新を抑制することで、体感速度を改善します。実際の更新頻度はブラシサイズとストロークの速度によって動的に変化します。
以下のパラメータはデバッグ用なので通常はデフォルト値で使用します。しかし、テスト環境(PentiumD 820 / RAM 2.5GB)と比較して特に遅い、または速いPCを使う場合には調整した方がよいかもしれません。
Reduce update frequencyはペイント系の全ツールで有効ですが、望ましい効果が得られるかどうかはツールの種類やブラシサイズによって異なります。
Note:Use merged colorをオンにして全レイヤーの結合色を拾うには、表示更新処理が必要です。Reduce update frequencyをオンにした状態で素早いストロークで描くと、本来とは異なる結果になることがあるので注意してください。
ブラシサイズを筆圧でコントロールする際の、(最大筆圧時のサイズを基準にした)最小倍率です。
例えば、1.0を指定すると圧力感度の筆圧をオフにするのと同じことになりますし、0を指定すれば従来どおりの変化の仕方をします。0.5を指定した場合には、最も軽い筆圧で最大筆圧時の50%サイズになります。
Alpha channel mixingが有効になっている時、テクスチャ効果を適用します。テクスチャのソースはパターンのグレイまたはRチャンネル(要するに最初のコンポーネント)を使用します。
Grainを正の方向に上げていくと、目がだんだんと潰れ着色される部分が増えていきます。逆に負の方向に下げていくと目が粗くなり着色される部分が減っていきます。
チョーク風の表現は-1.0~0、水彩・インク風の表現は0~1.0の範囲で値が変化するように設定するのが目安です。実際には使用するテクスチャの明度やコントラストを見ながら、適当に範囲をずらしてみてください。
アルファ付きのレイヤーで、アルファ値を含めた混色を行います。また、混色結果のアルファ値が描画対象ピクセルのアルファ値より小さい場合、実際に描画結果のアルファ値が描画前より小さくなることを許容します(図右側のようなイメージ)。
アルファ付きレイヤーと、それ以外のdrawableとの描画結果の違いを最小限に抑えるには、Paint with pigmentにチェックを入れ、Canvas colorのdensityを1.0に固定してください。
Note:Alpha channel mixingの使用には次の制限があります。
Main colorは筆の穂に含まれる塗料のコントロールになります。Densityは塗料の量を指定するもので、0では全く着色する能力がなくなり、1.0にすると下地の色が混ざらなくなります。
※Paint with pigmentがオフの場合には、Canvas color densityが0でない限り、Main color densityが1.0でも下地の色が混ざります。
塗料の中に前回打った描点のカラーが混じってくる割合を指定します。値が小さいほどより多く混じるようになります。
混色をしたい場合には、Main color rateを低くし、Canvas color rateを高くします。さらに不透明度を筆圧で調整するようにするとよりきれいに処理できるでしょう。
Painterの「色の伸び」に相当するパラメータです(単位はピクセル)。ストロークの長さに比例してMain colorのDensityが下がっていき、指定値に達すると0になります。
Dryoutの値が0の場合は例外として、全く減衰しません。
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に対応します。
Note:このオプションはAlpha channel mixing導入以前に表現の幅を広げる目的で追加したものです。Alpha channel mixingとの相性はあまり良くないので、基本的には常にオンにしておいてください。
下地のカラーが混じる分量を指定します。あえて例えるなら、水や溶剤の分量と言えるかもしれません。
Main color、Canvas color双方のDensityが0の場合には、ペイントしても何も起こりません。ただし、Alpha channel mixing有効時にアルファ付きレイヤーへペイントすると、消しゴムのような振る舞いをします。
下地のカラーとして、ストロークを描画する前のカラーを加味する割合を指定します。値が小さいほどより多く加味されるようになります。高い値では色の伸びが良くなり、若干低い値にすると絵の具の粘りやかすれ感が強調されます。
値がある程度低くなってくると、描点の形が見えて不自然になる傾向がありますので、1.0を基準にして値を少しずつ下げていくのがベターです。
筆圧のパラメータは、入力(タブレットドライバから渡される値)と出力(MixBrushツールが受け取る値)それぞれの最小・最大値を指定する形式になっています。
例えば、入力が0.25~0.75、出力が0.3~0.9となっているとすると、筆圧が0から25%までは30%という出力になり、以降筆圧75%までは出力も上がっていきます。75%の筆圧で最大出力の90%に達し、それを超える筆圧では90%を維持します。
この出力値は、筆圧の適用対象となるパラメータに掛け合わされます。対象パラメータの設定値を1.0に固定しておくと、出力の上限・下限がそのまま対象パラメータの上限・下限になるのでコントロールしやすくなるでしょう。
ちなみに、筆圧によるコントロールを無効にしたい場合は、出力側を両方とも1.0にしておきます。また、出力の1が2より大きな値を取る場合、筆圧が反転されます(筆圧が軽いほど出力が上がる)。入力側については、1と2のどちらが大きい値をとっても(内部処理で入れ替えるので)動作に違いはありません。
ストロークを描画する前のカラーを得る際に、ストロークを開始する前のデータからカラーを取得してしまうと、自分自身のストロークをにじませることができません。
そのため、ストロークの開始後、実際に描点を打ち込むのを一時保留することで適切なカラーを取得できるようにしています。
Delayパラメータは、処理を保留する描点の数を指示するものです。大きな値を指定すると、スタイラスの動きに対して実際の描画が追いかけてくるようになるので多少の違和感があるかもしれません。逆に小さな値を指定すると違和感が軽減されますが、直前の描点のカラーを拾ってしまうため、Canvas color(rate)の効果が得られなくなります。
ストロークの終端Delay個分の描点を処理するように指示します。Delayを1以上にしている場合の描画が気になる方はチェックを外すと気分的には改善されます。
カラーを拾う範囲(直径)の上限をピクセル数で指定します。
GIMPに元々あるAPI関数で平均を取っているのですが、結構重たいのでこのパラメータで制限をかけています。
描画対象レイヤーのカラーではなく、全てのレイヤーを統合した結果のカラーが混じってきます。ブラシサイズがある程度大きくなってくると重くなるので注意。
本来なら、Painterの「下の色を拾う」にならって、描画対象のレイヤーより上位のレイヤーを除いた統合カラーを使用したいところですが、知識不足と手抜きのため現在の仕様になっています。何もないよりはマシだろうということで。あと、制限事項として、レイヤーのキャンバス外にあるピクセルカラーが拾えず、白か黒が混じってくる、というのがあります。
アルファ付きレイヤーにペイントするとき、Canvas colorに白または背景色が混じります。normalは単に(半)透明色として処理します。
GIMP 2.4.6でパッチが適用できるよう修正しました。
Windows用バイナリを更新しました。
Smoothingの設定値を得るために現在のツールからツールオプションのオブジェクトを取得する際、ツールによってはNULLが返ってくることがあるようなので、その場合には設定値を0とみなすようにしました。5月4日版では常にツールオプションが取得できるものと期待していたため、NULLが返ってくるとクラッシュします。
Windows用バイナリを更新しました。
GimpDisplayShellの加速度計算コードを最新の状態に更新しました。
加速度計算処理とセットになっているXY座標の補間処理がG-Penツールでキャンセルされていなかったので、キャンセルされるように修正しました。また、G-Pen以外のペイント系ツールではSmoothingの値を0にすることで処理をバイパスすることができます。デフォルト値の0.98ではGIMP 2.5系と同様の結果になりますが、現状の処理では有意な効果が得られるように感じられませんので、0にしてしまって構わないと思われます。
Reduce update frequencyのオプションがブレンドツールや塗りつぶしツールにも表示されていたので、表示されないように修正しました。
Windows用バイナリを2.4.5に更新するとともに、以下の変更・更新を行いました。
G-Penツールで使われる加速度情報を、従来通りGimpInk2クラス内で計算するように変更しました。それに伴い、1月28日版の修正はキャンセルしました。
Reduce update frequencyの内部パラメータを変更できるようにしました。あくまで動作検証・デバッグをやりやすくするための措置ですので、むやみに変更しないようにしてください。
Windows用バイナリを2.4.4ベースにアップデートしました。また、baseアーカイブに同梱のNodoka、Aurora両Enginesを最新版に置き換え、Separate+プラグインを追加しました。
GimpDisplayShellの修正によって、G-Penツールのカーソル追従性が悪くなっていたため、回避策を施しました。
テクスチャのGrainに筆圧を掛け合わせる計算が間違っていたので修正しました。なんでこんな意味不明な計算をしていたのか自分でもよくわからない、というような内容でした;-p
テクスチャのGrainに対する筆圧感知に入出力パラメータを追加しました。元の設定値の範囲が-1.0~1.0なので分かりにくくなっていますが、一旦1.0を足してから筆圧の出力値を掛け合わせ、そこから1.0を引くと最終的な値となります。
レイヤーダイアログのアルファチャンネルロック(またはチャンネルダイアログでアルファ値の選択を解除する)がAlpha channel mixing有効時にも使えるようになりました。
1月19日版で、2.5系のソースからGimpDisplayShell関連の修正を適用する作業にミスがあったので修正しました。
テクスチャ効果を試しに入れてみました。多分こういうので良いと思うんですが。
GimpDisplaySellでポインターの加速度を計算し、それをGimpCoords構造体から取得できるようにする修正が2.5系のソースに入ったのを受けて、GimpPaintCoreの再描画頻度調整処理とG-Penツールで加速度情報を使用するようにしました。gimp-painter-パッチは2.4系ベースですので、加速度を計算する個所を2.5系のソースから移植しています。
1月3日版で追加した処理をGimpPaintCoreクラスに移しました。また、頻度調整のための計算方法を変更しました。
Alpha channel mixing有効時に再描画の頻度を減らす処理を追加しました。
Windowsバイナリを2.4.3に更新しました。
Alpha channel mixing有効時の処理速度を改善しました。従来は描点が収まる領域のバッファ上で描点を適用する処理を行ってから、GIMPのAPIを呼び出してdrawableに反映させる流れでしたが、12月22日版では直接drawableに対して描点を適用しています。
このため、現在のところ(1)選択範囲が無視される(2)RGBレイヤーへの描画時、選択されていないチャンネルにも描画されてしまう、という制限事項があります(処理速度への影響が軽微であれば、今後の版で修正します)。
12月7日版で描き始めにいきなり落ちる問題がありましたが、これが改善されたかもしれません。されていないかもしれません。
ツールのデフォルト値を変更し、とりあえず混色ブラシらしい動作をするようにしました。
Alpha channel mixingオン・Paint with pigmentオンのとき、Main colorとCanvas colorのdensityがともに下がっていくにつれて透明にする力が強くなるはずですが、実際には0になって急に効いてくるようになっていたので修正しました。
Alpha channel mixing関連の修正です。グレイスケールのdrawableで機能しない件、Main colorとCanvas colorのdensityが共に0のときアルファ付きレイヤーにペイントすると白い四角が描画される件、アルファ付きレイヤーへのペイント時、意図せず描き始めのアルファ値が下がってしまう件が改善されています。
混色処理の調整とAlpha channel mixing有効時の処理速度アップ(程度としては若干、ですが)を行いました。
11月7日版のところで書いていた、「レイヤーのアルファを描点のアルファ値に置き換えること」の件を試しに組み込んでみました。
実際にはそれだけでは済まずに色々と調整やらゴマカシもあるのですが……。
Windowsバイナリを2.4.2に更新しました。コンパイラの最適化オプションをPentium4向け(従来はPentium3向け))に変更しましたので、環境によっては動作しないかもしれません。
描点カラーを8ビット整数値に変換する際生じる誤差を次回の処理でCanvas colorに組み込むようにしました。混色処理を見直す前は同じようなことをやっていたのですが、見直し後しばらく放ってあったものです。
しかし、実際に描いているとやはり微妙な色変化のところでどんどん汚くなっていくのが気になったので、改めて実装しました。手抜き処理なので正しくはないのですが、見た目には好ましい結果が得られます。
ただ、描点をレイヤーに合成するGIMPの内部処理で発生する誤差も結構馬鹿にならないため、ブラシ不透明度を下げて、あるいはボケ足のあるブラシで描く場合には影響があるでしょう(これはMixBrushだけ弄っていても直りません)。
筆圧周りの処理を変更しました。筆圧に対応するパラメータの効きどころをより正確に指定できるようになっています。その分、設定が面倒になっているというデメリットもありますが……。
Assume that the hidden color is...の効果を再実装しました。
混色の処理を書き直しました。パラメータの項目もあれこれ変わっています。今回の変更により、透明レイヤーにペイントしても破綻することはなくなったと言えるでしょう。ただし、レイヤーのアルファチャンネルは基本的に不透明になっていく方向にしか干渉できないので、ベタの地に直接ペイントするのと異なる結果になるのは避けられません(不透明度の変化が不自然)。
レイヤーのアルファを描点のアルファ値に置き換えることができれば、違いがある程度埋められるのではないかと思うので、どうやって差し替えようかと現在考えているところです。
今回の版では次の機能が使えません。
また、次の機能が使えるようになっています。
重ね塗りのチェックを外した際に、ストロークの重なる部分や交差する部分のカラーが壊れる仕様を改善し、壊れないようにしました(まだ若干不具合が残っているかもしれませんが、おおむね「使える」状態にはなっていると思います)。
従来はこの仕様のため、「圧力感度」の「色」や「グラデーションの色を使う」を有効にすると重ね塗りモードが強制されるようになっていました(素のGIMPの仕様が元々そういう風になっています)。
Canvas colorの筆圧の適用方法を元に戻しました。ただし、正負を逆にしてありますので注意してください(10月25日版を基準にした場合、29日版の正負は同じとなります。多分……)。
デフォルト値は10月22日版以前と同じになるように、-0.8を設定してあります。
グレースケールの画像またはチャンネルにペイントする際、不透明度を正しく扱えていなかったので修正しました。
10月25日版では、Remove the background colorがグレースケールやインデックスカラーでも動作していましたが、RGBモードに特化した処理なので適切な結果は得られませんでした。10月29日版ではRGBモードのみで処理を行うように修正しました。他のモードでチェックが入っていても、処理はスキップされます。
10月21日版では、Canvas colorのRate(割合)が0になっているとDryoutが無視されてしまっていたので、これを修正しました。
必要のないAPI関数の呼び出しとメモリリークがあったので修正しました。
GIMP 2.4ではツールのクラスによって、基本的なオプション項目の表示内容をコントロールしているようです。そのため、以前の版では「圧力感度」の「大きさ」チェックボックスが表示されなくなっていました。10月21日版ではこの点が修正されています。
Bleedの動作が変更されたのに伴い、より強く混ぜられるように値の上限を0.3まで引き上げました。
ただし、Bleedの値を高くすると下地のカラーを取り込む力が強くなるので、伸びが悪くなり固まりはじめた絵の具のような感じになりますので注意してください。また、このときブラシの不透明度が高いと直前の描点の形が見えてしまい不自然に感じられるかもしれません。
実際のところ、従来の上限である0.2あたりまでにしておいた方が無難でしょう。
Sample sizeを大きくしていると、透明部分のペイントで余計な色が混じることがあります。これは平均を取ったあとに透明部分を白(背景色)に置き換える処理をしているのが関係していそうです。
いずれは、自前の平均処理を入れないとだめかなあという感じですね(範囲が広い場合は適当に間引かないと重くなるし)。