お絵描きソフトInkscape(インクスケープ)の使い方を初級レベルから上級レベルまで広く紹介しています。
情報追加のリクエストや分かりにくい点があれば下のCONTACTフォームからどうぞ。

Inkscapeのフィルタの変換過程を調べてみる

 このページでは、フィルタプリミティブ要素を組み合わせて作ったフィルタが、その中でどのような過程で画像の変換を行っているかを調べる方法についてまとめます。

 (参考:フィルタとは何か

(2023.05.17更新)

調べる動機

 まず、そもそもなぜ変換過程を調べたいのか?という動機についてです。

 Inkscapeのフィルタは複数のフィルタプリミティブ要素と呼ばれる変換ステップを組み合わせて定義されます。個々のフィルタの変換結果は、それを構成するフィルタプリミティブ要素のそれぞれに設定されているパラメータによって左右されるわけですが、どのパラメータのどんな値にどんな変換を行わせる効果があるのかは、パラメータの名前などからは直感的にはわかりません。

 そして、Inkscape組み込みのフィルタを使っていると、どういう変換過程を経るとこんな結果になるのだろう?とか、思ったような変換結果にならないときにどのパラメータをどんな風にいじればいいのだろう?とか、悩むことがあります。

 そんなときは、組み込みフィルタの定義の中身を調べて、どのフィルタプリミティブ要素の段階でどんな変換が行われているのかを知りたくなります。

調べる方法を考えてみた

 しかし、どうやらInkscapeのフィルタエディタには、処理途中の変数の値を表示させる(ウォッチする)といったデバッグ機能のようなものはないようです。

 そこで、次のようなことを考えてみました。

 例えば、次の例は「インクのにじみ」というフィルタ(はみ出し > インクのにじみ)を設定したときのフィルタエディタの画面です。 

 このフィルタプリミティブ要素それぞれの変換の様子を調べることで、例えばインクのにじみ方を変更したいときにどのパラメータをいじれば良いのか知りたいとします。

 そんなときは、この組み込みフィルタに「マージ(feMerge)」というフィルタプリミティブ要素を加えるのはどうだろう?と考えました。

 まず、フィルタエディタのプルダウンメニューで「マージ」を選んで、エフェクトを追加ボタンを押します。


 そうすると、「インクのにじみ」フィルタを構成するフィルタプリミティブ要素の一番下(この例では合成のすぐ下)にマージが追加されます。

 追加直後のマージの入力を示す線(コネクション)はどこにも接続されていませんが、右端の三角形のところからドラッグして、変換過程の途中の変換結果を確認したいところ(プリミティブ要素)に接続します。

 例えば、4つぐらい前に実行される変位マップによる変換直後の画像を確認したいとすると、マージの入力に伸びるコネクションを変位マップのところまでドラッグします。すると次のように、キャンバス上のオブジェクトの表示が「インクのにじみ」フィルタの通常の最終結果ではなく途中の変位マップの出力した画像に切り替わります。

そうするとこんなことが分かる

 こうすると、それまでフィルタの変換結果として出力されていた合成の変換後画像の代わりに、末尾に付け加えたマージのマージ後画像(ただし、入力のコネクションを1本しか接続していないので、これはすなわち入力画像そのもの)がフィルタの変換結果として表示されることになります。

 例えばこの場合は、「インクのにじみ」のにじんだ部分が変位マップによって生成されていることがわかります。

 そこで、にじみ部分の大きさやズレ具合を調整したい場合は、変位マップ(やその前のプリミティブ要素)のパラメータを調整すればよいことがわかるというわけです。