先の記事ではフィルターの使い方を紹介したが、この記事ではsbsファイルのノードネットワークを参照しつつ、中でやっている事を解説する。(こうやって書いてかないと自分で見ても後々忘れてしまうのだ。)
sbsファイルの構成
ノードグラフ全体像
sbsファイルというのはsbsarファイルを書き出すためのソースファイルで、ノードグラフで構成されている。今回の物は以下である。

これは、かなり比較的簡単な構成と言えるだろう。部分ごとにみていく。
マスク画像の入力

いらすとや からお借りした人物のシルエット画像は開発デバッグ用で、実際は下のユーザー入力を使う。グレースケール画像ではなくカラーの入力なのはカラー値も反映させたかったので、あえてそうなってる。(今はグレースケールに変換してしまっているので意味がない。)ユーザーが入力画像の白黒反転させたい場合は最後のノードで反転するように、公開パラメータが設定されている。
アウトラインのがたつき

水でにじんだ感じのアウトラインにするため、先の入力画像を適当なノイズで変形させている。ブラーをかけてなじませる。もっと良いノイズがあるかも。パラメータはもっと繊細コントロールできたほうが良かったな。
基本ノイズの作成

絵具がにじんだ風合いを出す部分。単調にならないように2つのノイズを合成して、リピート感が出ないように一部を拡大している。コントラストを広げてブラーをかけて扱いやすくて自然な表現になるようにしている。このノイズ生成部分はもっと凝ったりパターンを用意したりするといい気がする。実際に紙をスキャンしたデータをソースにしても良いかも。
アウトライン周辺のマスクの調整

絵具で塗ったエリアは境界が内側より濃くなっていたりするのでそこを特別扱いするためにマスクを調整している。distanceノードでぼかしたものをくりぬいてノイズと合成したりしているが、正直ここは作りなそうと思っている。
基本ノイズをマスクの内側部分と合成

合成後、コントラストを上げる。このAuto Lebelノードは地味なノードだが、ないととても困る。
ユーザ指定色の合成

カーブは後からちょうどよい水彩感になるように入れたもの。下にちょっと膨らんだカーブにしただけ。色味の合成は普通にグラデーションマップでいいのだが、うまくグラデーション指定色を外部パラメータ化する方法がわからなかったので(できると思うんだが)自分でピクセルプロセッサで作り直した。

ピクセルプロセッサの中身。threshold(閾値)より上か下でグラデーションを分ける。色を乗算している。

↑グラデーションマップで表現しなおすとこんな感じ。
色味の揺らぎ

色相に変化を出している部分、コピーでブレンドしているが、本当はHSLノードでの調整具合をグレースケール画像で重みづけできるノードが欲しかった。ないのだろうか。


内側を薄い色に調整する部分。どのくらい鬱側に色味を残すのかをユーザーパラメータで切り替えられるようにしている。薄くて見えないが、合成するアウトラインはさっきと逆方向に色相を移動している。この辺りの縁取り処理はグラデーションマップでまとめて処理させたほうがよさそう。
全体ノイズ変形

結果に微小なランダムな変化をつける部分。テクスチャ感が出るが、使うノイズを見直したほうがよさそう。
最終調整

結果への最終調整。レベルのスライダーは生でユーザーに公開しているが使いにくいので見直したい。またこの処理はどんなフィルターでもお決まりになりそうなので、サブネットワークのライブラリにして使いまわすようにしたい。
出力

最後のカラー出力。今回はカラーを入れてカラーを出しているが、グレースケール画像を入れてグレースケール画像を出せばマスクに対するフィルターになるし、カラーを入れるならその色味をそのまま水彩色に使いたいところ。
改善点
上のように開設のために見直していても良くない点がみられた。ブログに書いて人に伝えるための説明すると、少し作業はなれても内容忘れないし、改善ポイントが見えてくる。やはり自分のためにもなるな。
以下、全部やるかはわからないけどver.2に向けて直したいところ。
- 基本ノイズの見直し、もっと水彩感が出るように。
- アウトラインノイズのパラメータ調整をデリケートに。
- 最終ノイズのテクスチャ感見直し。
- 実際に紙をスキャンしてテクスチャ処理に使ってみる。
- 塗料のはねを表現したい。
- アウトライン抽出処理の見直し。
- 重みづけHSLノードをピクセルプロセッサで作る。
- 最終調整ノードを使いまわせるようにライブラリ化する。
- 色指定パラメータの廃止、入力カラーを生かす。
- マスク処理フィルターを別途作成、グレースケールを入出力にする。
- 2つのフィルターで処理がかぶる部分を共通処理のサブネットワークにする。
- 1つのsbsarに2つのフィルターを入れる。
- サブスタンスペインター上で動くフィルターにしてみる。
もりもりあった。あとは知り合いに使ってもらってフィードバックをもらう。





