SubstanceDesigner作例: グレースケール画像で重みをつけるHSLフィルター

SubstanceDesigner作例: グレースケール画像で重みをつけるHSLフィルター

※ 更新版を作りました。

以下は、更新前のバージョンの解説。

水彩画フィルターの解説で述べていた、色味をHSL色空間で調整する際にグレースケール画像で重みづけするノードが欲しいが見つからないという件。探せばあるかもしれないが、簡単なので自分が使いやすい仕様で作ってみた。ので配布する。

ダウンロード

今回は sbs と sbsar ファイルを同梱して添付する。仮の状態なので、パッケージ名やID名は変わるかもしれない。アイコンなども設定していない。いずれちゃんと公開するには何をすればいいかの記事をまとめてみたい。

https://github.com/logicalmodelin/LGMLtools/tree/730742966a533a7b354d7ed2428fc2c7e60e573e/blog20221120_hsl_adjuster

使い方

入力は

  • フィルターを適用するカラー画像
  • 効果の強さを表すグレースケール画像
  • 色相への影響の強さ
  • 彩度への影響の強さ
  • 明度への影響の強さ

となる。色相・彩度・明度それぞれに個別のマップは適用できない。その場合は何度もこのノードを適用する。

ノードネットワークの構造

使用例は長いので後回しにして、内部の構造を簡単に解説する。

入力されたパラメータはそのままピクセルプロセッサにつながる。つまり、すべての処理はピクセルプロセッサで行われている。

このように、一度HSL空間に変換し(そういうノードがあるので便利)グレースケール画像の値と個別パラメータの重みを乗算したものをそれぞれのチャンネルに足している。色相だけは値を繰り返すのでクリッピングしないで0と1の間を値がリピートするようにしている。最後にRGB色空間に戻す。アルファチャンネルだけは何も変化しないように特別扱いしているのに注意。

ね、簡単でしょう?

使用例

色相

色相は値ノードを画像以外の入力の一番上につなぐ。これは値が0なので変化なし。

値を変化させてみた。グレースケールの色が白に近いほど色相が変化する。このように微小な値をいれるのが意図した使い方。

白と黒がはっきりしているグレースケール画像を入力とすると効果がわかりやすい。

変化量が1だと色相が一周するので見た目が変わらないが。

入力画像が白黒はっきりしていないと虹色が現れる。まあ本来の意図した使い方ではない。

さらに値を大きくすると、繰り返しが現れる。さらに意図していない使い方だ。

ふわふわしたノイズを入力としてみた図。

値を大きくするととても気持ち悪い結果ものとなった。

彩度

数値の第二入力は彩度のコントロールとなる。マイナスの値もとれる。

プラスの値を大きくし続けると真っ黒のところ以外彩度がMAXとなるはずだ。

明度

明度も大体彩度と同じ。マイナスの値もとれる。どんどん暗くなる。

プラスの値ではどんどん白くなる。当たり前だ。

グレースケール画像入力は1つだけだが、チャンネルそれぞれは個別に重みを指定できる。

入出力の詳細。画像二枚は必須。他の数値パラメータは変化させたいものだけつなぐ。

まとめ

これで水彩画フィルターも更新するつもり。

しかしファイルの配布方法は悩む。勢いあまってサブスタンスシェアとかにあげちゃうと更新するときとかに大変そうだ。

Previous post SubstanceDesigner:関数グラフの公開パラメータ追加ボタンが表示されない時にする事
Next post SubstancePlayerでアニメーション書き出しする方法