tabstop @Wiki

MixBrushパッチ

最終更新:

匿名ユーザー

- view
メンバー限定 登録/ログイン

これは何をするものか

gimpのブラシツールに混色機能を追加するためのパッチです。混色機能のついたペンをMixBrushと呼んでいます。
混色ブラシの技術的な内容はMixbrushパッチ/アルゴリズム比較にあります。



SAIやNekoPaintのブラシツールの設定項目を眺めながら作ったので、多分同じような効果になっていると思います。
設定をいじってやると、SAIの水彩筆や筆ツールのような効果が出てくるはずです。
挙動はちょっと違うかもしれませんが......

ライセンス

gimpのソースコードの派生物なのでGPLです。

ダウンロード

SourceForgeのプロジェクトサイトからダウンロードしてください。

テスト環境

2.2系列のテスト環境

  • ubuntu 07.04 (Feisty Fawn)
    • OSは関係いはず。
  • gimp-2.2.17 (本家よりダウンロード)
  • diff -uNrでパッチ作成
  • ./configure --disable-print でテスト(gutenprint非対応?だから)

2.4系列のテスト環境

  • ubuntu 07.10 (Gusty Gibbon)
    • OSは関係いはず。
  • gimp-2.4.1 (本家よりダウンロード)
  • diff -uNrでパッチ作成
  • ./configure ; make; sudo make installでテスト

パッチ適用方法


gimpのソースコードを展開 (例えばtar jxf gimp-2.2.17.tar.bz2 など)
cd gimp-2.2.17
patch -p1 < <パッチのディレクトリ>/gimp-パッチ名.diff
./configure [オプション: 2.2では--disable-print]
make
make install #ルート権限必要

使い方

  • 道具箱パレットに"MixBrush"が追加されます。(アイコンは絵筆と一緒。)
  • ブラシツールと同じように使います。
  • 筆で線を引くと、下地の色が徐々に混ざります。
    • 設定によっては、筆圧に応じて混ざり具合が変わります。
  • ツールオプションに"Canvas Color"、"Original Color"という項目が追加されます。各オプションの意味は次のとおり。

Canvas Color

"Rate(割合)" 下地の色を足す割合です。値が大きいほど、下の色を拾って混ぜるようになります。
"Pressure(圧力)" 筆圧に応じて下地の色を混ぜる割合を変化させます。Pressureの値が大きいほど、混ぜる割合が筆圧によって変化します。

Original Color

"Rate(割合)" 前景色を足す割合です。値が大きいほど、パレットの色を塗り込むようになります。Canvas ColorのRateの方が優先度が高いため、Original ColorのRateを大きくしてもCanvas ColorのRateが強いと色が出ません。
"Pressure(圧力)" 筆圧に応じて前景色を混ぜる割合を変化させます。Pressureの値が大きいほど、混ぜる割合が筆圧によって変化します。Pressureの値がRateより大きい場合、ある閾値以下の筆圧では前景色をまったく足さなくなります。他のツールで”ぼかす”と読んでいる状態になります。

Tips

  • 不透明度が高いと、あまり上手く混色してくれません。不透明度=50くらいにして、圧力感度の不透明度のチェックをはずすくらいの設定がいいと思います。
  • Original ColorのRate値を0.5以下にして、Pressureを0.5〜0.8くらいにすると、水彩っぽい感じになります。
  • Canvas Color,Original ColorのPressureを0にすると、しぃお絵描き掲示板の"水彩2"のような効果になります。


既知のバグ

  • 透明レイヤーで使うと黒くなってしまう。→にじみツールと同じ理屈です。一回白で塗りつぶしてから全部を消去すると白が混ざるようになります。
    • 071029版より修正しました。


ソースコード

  • やっていることはG-penと大差ありません。すごく簡単です。

コメント・フィードバック

  • 時期が時期だけに、2.4 rc3に実装した方がよいのでは、とも思うのですが……。
    週末暇があったら移植してみます(2.2系はもはや使う気にならないので)。 -- やまかわ (2007-10-12 03:47:48)
  • >既知のバグ
    >透明レイヤーで使うと黒くなってしまう。→にじみツールと同じ理屈です。

    これってまで修正されていませんでしたか。
    http://bugzilla.gnome.org/show_bug.cgi?id=70335

    あとこれ見てColor Jitterを思い出しました。
    http://adrian.gimp.org/patches/gimp-color-jitter/

    # こういうのがあるとますますpluggable toolが欲しくなりますね -- いっちー (2007-10-12 16:42:05)
  • >やまかわさん
    2.4には、手元の環境が移行できるようになったら
    移ろうと思ってます。

    >いっちーさん
    どうやら、個別に注意してねっていう雰囲気のようです。

    pluggable toolは、APIをクリーンアップしたいって言ったっきり
    お蔵入りしちゃってますね。
    作る側としては、Gimpの内部構造をそのまま見せてでも継続して欲しかったんですけどね。 -- しげっち (2007-10-14 00:57:04)
  • 先にブログの方でコメント残してきてしまいましたが、2.4-rc3への移植をやってみました。これで自分も遊べます;-)
    Wikiの方から先にチェックするという方のために、一応こちらにもWindowsバイナリのアドレス書いておきます。
    http://cue.yellowmagic.info/files/gimp-2.4.0-rc3-gpen+mixbrush_bin_win32.7z -- やまかわ (2007-10-14 11:54:03)
  • パッチをアップロードしました。
    http://preview.tinyurl.com/27xgqu
    多少修正をしているのでバイナリも更新されています。
    http://preview.tinyurl.com/26bkll
    バイナリの方に入っているreadmeファイルはこちらに。
    http://preview.tinyurl.com/27455q -- やまかわ (2007-10-15 03:55:31)
  • Painterのにじみ(Bleed)のような効果のテストです。
    とりあえず2.4-rc3のWindows用バイナリをアップしました。
    説明は前回のreadmeを差し替えましたのでそちらを読んでみてください。

    例によってパッチはまた後ほど……。

    http://preview.tinyurl.com/355t43 -- やまかわ (2007-10-18 20:19:54)
  • パッチの準備ができたのでアップロードしました。
    http://preview.tinyurl.com/387qfm -- やまかわ (2007-10-19 01:46:07)
  • やまかわさん、パッチ拝見しました。
    レイヤ結合色をとってくる方法とか、計算の丸め誤差を残しておくところとか参考になります。

    071008-1のcanvas_color_rateで混色をした色は、
    次回のペイント色に繰り越すんで、実はこのパラメータは
    PainterのBleedと同じ働きをします。
    ちょっとPainterを調べてみましたけど、
    ・Resat=original_color_rateとoriginal_color_pressure_rate
    ・Bleed=canvas_color_rateとcanvas_color_pressure_rate
    と同じ感覚です。
    やまかわさんのBleedは混色前のクローンレイヤと混ぜてますよね。
    これも面白いですね。

    白を混ぜるっていうのは、背景色を混ぜるとかにした方が
    汎用的かもってちょこっと考えてます。

    Ubuntuが新しくなってGIMP 2.4が動きそうなので、
    そろそろ移行も考えながらまとめたいですね。 -- しげっち (2007-10-21 01:29:17)
  • ひょっとしたらPainterもバージョンによって違うかもしれませんが、
    効果の内容が違うような気がします。
    厳密に一致していないですが、手持ちの10.1で挙動を見る限りは、
    Resat->canvas_color_rate
    Bleed->Bleed
    の方が近いように感じます。
    例えば、PainterでResat=0のときと、MixBrushでcanvas_color_rate=0のときとでは
    Bleedの効果の出方はだいぶ似ています(ややこしくなるので、不透明度は100%に
    固定して試してみてください)。
    特に、Bleed=0のとき最初に置いた描点のカラーを引きずり続けるところに注目して
    ください。
    Painter上で色々試してみた結果としては、やはり最近の描点(ストロークではなく)を
    置く前のカラーを拾えないと(Painterの)Bleedの効果は出せないと思います。 -- やまかわ (2007-10-21 02:13:06)
  • あと、Painterの"塗料(Well)"のところにはoriginal_color_rateにあたるパラメータはなさそうですね。
    内部的に同様の処理をしているとは思いますが、値は固定か自動で決まるのかもしれません。 -- やまかわ (2007-10-21 02:23:16)
  • >MixBrushでcanvas_color_rate=0のときとでは
    1.0の間違いです。すみません。 -- やまかわ (2007-10-21 02:28:05)
  • Painterは文献見ているだけなので、実験的にはわかりません。
    手持ちの実感を持って比べてもらえているようなので心強いです。
    http://wiki.cgsociety.org/index.php/Creating_a_Smeary_Oil_Brush_in_Corel_Painter
    この記事を読んでだいぶんわかりました。

    Painterでは、実際に描画する度合と、混ぜる度合が独立しているんですね。
    濃く塗ってたくさん混ぜるとか、薄く塗るけどあまり混ぜないとかできるんでしょうか。
    いまのMixBrushは大雑把に言うと
    ・濃く塗る→混ざらない
    ・薄く塗る→混ざる
    って感じです。実際に塗った色が次の入力になるんで、
    濃く塗るか、薄く塗るかで大分変わります。
    いまのMixBrushとはかなり考え方が違うようです。
    ちょっとこっちのバージョンも作ってみようかと思います。 -- しげっち (2007-10-21 02:53:51)
  • >濃く塗ってたくさん混ぜる
    個人的にはそういう塗り方を好んでやるので、どうしてもPainter風の
    動作を考えてしまうんですよね(苦笑

    # まあ、Painterなら旧水彩をベンチマークにしている人の方が多いとは
    # 思いますが……

    ちなみに、現在の勝手改造版だと自分自身のストロークをにじませる
    ことができないので、Drawableのコピーを作る代わりに遅延処理を入れる
    やり方に切り替えているところです(Painterも遅延があります。どちら
    かと言うとぶれ・ゆがみの補正が主目的と思われますが)。

    それができたら、あとは筆圧の反転があればだいたい当初の予定は一通り
    こなしたような感じですね。レイヤー結合色は何とかしたいですが、
    APIを十分に理解していないと無理っぽいので、現時点では諦めてます。
    -- やまかわ (2007-10-21 03:18:17)
  • なんとなく、色を拾うのがカーソル下の1ピクセルだけを混ぜる対象に
    している現在の実装が問題の根本じゃないかと思います。
    このへんは迷ったところなんですけど、筆の下の平均値とか考え始めると
    ちょっと計算量が重くてクラっときちゃいそうなんでやめちゃってました。
    > APIを十分に理解していないと無理っぽい
    そうですよね……
    やっぱり、GimpはAPIが膨大なのがいい点で、同時に悪い点ですね。 -- しげっち (2007-10-21 03:39:00)
  • >1ピクセルだけ
    まあそれはありますね。
    ただ、Bleedは直近の描点を絶対に混ぜてはいけないので、この事は分けて
    考えないとアレかなあとも思います。

    ちなみに、試してみたことがないので実際は分かりませんが、
    gimp_pickable_pick_color関数の引数を見る限りは、平均を取ってくれそう
    な感じがします。

    gboolean gimp_pickable_pick_color (GimpPickable *pickable,
    gint x,
    gint y,
    gboolean sample_average,
    gdouble average_radius,
    GimpRGB *color,
    gint *color_index);
    -- やまかわ (2007-10-21 04:08:23)
  • Bleedの動作の変更と、透明部分のペイントで背景色が混ざるオプション、
    筆圧の反転、Bleedへの筆圧の適用を行いました。
    まずはWindows用バイナリから。
    http://preview.tinyurl.com/ysemlr

    同梱のreadmeファイルを読みたい方はこちら。
    (以前のと同じアドレスです)
    http://preview.tinyurl.com/27455q -- やまかわ (2007-10-21 13:37:52)
  • >やまかわさん
    多分、統一した場所で配る方がよいと思うので、
    もしよかったら、sourceforgeのアカウントをとって
    そちらにアップロードするようにしませんか?
    sourceforgeのサイトの方も、コミッタがたくさんいた方が
    心強くて助かります。 -- しげっち (2007-10-21 16:51:34)
  • 利用方法がよく分かっていませんが、あとで確認してみます。

    # 自分にできる範囲のことは一通りやってしまったので、
    # この先はあまり貢献できない……かも。 -- やまかわ (2007-10-21 17:01:10)
  • sourceforgeのアカウントはとりました。
    次はIDをそちらにお知らせすればいいのかな。 -- やまかわ (2007-10-26 01:05:13)
  • はい。アカウント名を教えてもらえれば、
    こちらでプロジェクトに追加します。 -- しげっち (2007-10-26 20:48:52)
  • 2.4のパッチを試してみました。
    同じ効果になるはずのパラメータ(Bleed=0,Dryout=0,delay=0)でちょっと書き味が変わっちゃってますね。
    入りの部分で強く塗りすぎちゃっているような...
    ちょっと調べてみます。 -- しげっち (2007-10-28 05:35:36)
  • 値を取ってみるとgimp_image_get_pixel_atが悪さをしているかもしれません。
    ちょっと手直ししてみます。 -- しげっち (2007-10-28 17:39:12)
  • 筆圧の適用方法をいじってしまったからですね。
    先ほど10月29日版をsourceforgeの方に置いておきましたが、
    そちらは元に戻してあります。 -- やまかわ (2007-10-29 04:34:47)
  • ちゃんとした検証をしていないのでこちらだけに置きますが、
    いろいろ取り込んだ2.4用パッチを追加しました。(ページ下部からダウンロードできます)
    いろいろと変わってしまっているので、後からドキュメントを作ります。
    とりあえず、内部の処理をすべてGimpRGBに切り替えたので、
    誤差の問題とかgimp_pickable*の問題とか、直っているはず(というか、考える必要がない)です。
    -- しげっち (2007-10-29 05:11:32)
  • 下のパッチは、"paint the tail stroke"が未実装です。
    それと、"remove color"の背景色が白限定になっています。
    時間がとれたら直します。
    (白か背景色をstartで取得してGimpMixbrushに保存するようにします。)
    -- しげっち (2007-10-29 05:15:57)
  • 10/29版のドキュメントをMixbrushパッチ/アルゴリズム比較に載せました。 -- しげっち (2007-11-04 04:05:10)
  • べっ、べつにあんたなんかに興味は無いんだからね!d(´∀`*)グッ♂ http://ktjg.net/ -- 名無し (2011-12-08 02:40:02)
名前:
コメント: