Skip to content

Instantly share code, notes, and snippets.

@elvl
Last active July 1, 2019 02:29
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save elvl/2a9a32fef19d8395bd84 to your computer and use it in GitHub Desktop.
Save elvl/2a9a32fef19d8395bd84 to your computer and use it in GitHub Desktop.
SAI 水彩境界 メモ

#SAI の水彩境界

個人的に調べてわかってる限りのことです。正しさは保証しません。 お絵かき的には一番したの画像まとめだけ見れば良いです。

##SAI1

SAI1 では、水彩境界および用紙質感の色がグレーかぶりする。

###原因

以下は仮説であり、正しさは保証しない。

SAI1 の水彩境界では次の 2 つの変化により色を濃くする。

  1. 色そのものを変える
  2. より不透明に近づける

SAI1 では、各ピクセルの RGB の値はメモリ上ではアルファ (透明度) を掛けた状態で保持されている。 (と思われる) これを仮に、Rα Gα Bα とする。

1 において、変化後の色は Rα Gα Bα を元に計算される。

2 の段階でより不透明に近づけたとき、つまりアルファが大きくなったとき、1 で計算された Rα Gα Bα はその分大きくならなければならない。実際にはこれが考慮されていないために、2 の段階でアルファが増加すればするほど色が暗くなる。

2 によって変化させられるアルファは、元のアルファが 127 に近いほど大きくなる。結果的に、完全に不透明 = アルファ 255 の状態ではグレーかぶりが起きない。反対に透明に近づいてもグレーかぶりは軽減されるが、境界そのものの効果が薄くなるので問題は知覚されにくい。

このアルゴリズムは用紙質感でも使われる。このため、用紙質感にも同じ問題がある。

###再現

SAI1 の水彩境界のアルゴリズムを再現したシミュレーション結果を示す。

255, 255, 255 でのグレーかぶり 水色でのグレーかぶり

最上段が完全に不透明、下にいくにつれて RGB 値は同じまま透明に近づけている。透明度が中間に近い程、グレーかぶりが大きくなることがわかる。また、透明水彩等の挙動を考えると白ではいかなる条件でも境界ができないのが望ましいが、白であっても完全に不透明で無い限り、グレーの境界ができる。

###回避法

水彩境界では回避する方法がない。

用紙質感では以下の方法で回避できる。

  1. レイヤーグループを作る
  2. 用紙質感をかけたいレイヤーをグループに入れる
  3. グループ内の最下層に白で塗りつぶした新規レイヤーを置く
  4. レイヤーグループに用紙質感をかける

このようにすると、用紙質感のかかるレイヤーグループは敷かれた塗りつぶしレイヤーによって完全に不透明になるので、2 の段階で変化するアルファが 0 になり、グレーかぶりが起きなくなる。

##SAI2

###ノーマル水彩境界・用紙質感

SAI1 ではグレーかぶりの起きなかった完全に不透明なケースでもくすむ。

このため、レイヤーグループ全体で不透明として用紙質感での同問題を回避する手法も SAI2 では使えなくなっている。これは、白に近い色を多用した絵で用紙質感を適用するとくすみやすいということでもある。極彩境界のアルゴリズムを転用した用紙質感のモードも望まれる。

SAI2 では境界の強度が強く、SAI1 と同程度の変化にするには 20 前後の強さまで落とす必要がある。落としたとしてもくすみは改善しない。

###極彩境界

SAI1 のアルゴリズムのグレーかぶり問題を改善したかのような結果になる。ただし RGB 原色に対する挙動は違う。(後述) 白に対して境界が発生することもないので、透明水彩を意識したエフェクトとして使う場合は望ましい。(境界色には改善の余地があるが、とにかく白や極薄い色に境界がかからないメリットが水彩を模した画法では大きい)

RGB 値が 255 のみしか無い色 (255, 0, 0 や 255, 255, 0 など) では全く境界が現れない。しかし、透明水彩を意識したエフェクトとして考えるなら、境界が現れるべきなのは薄く水で溶いたような部分なので、完全に不透明な原色部分に境界が現れないのはあまり問題にならない。この問題を意図的に回避するには、ほんの少し 255 より落とせばよい。255, 245, 0 や 245, 0, 0 のようにする。

RGB それぞれの波長による知覚的な明るさの差を考慮した減衰は行われていない。このため、知覚的に明るさが飽和している色 (0, 255, n など) では境界色の変化を知覚しにくい。上記の理由と二重の意味でシアン (0, 255, 255) はわりと鬼門。それでもノーマル境界でシアンをブルーグレーにされるよりは多分良い。

黄色では、G をわずかに落として少し赤みにしておくと境界が自然な色になることを覚えておくと非常に有用。

##より知覚的に自然な境界色にするには

SAI とは直接関係ないけど、自分でシミュつくって弄った上でのメモ

一般的なカラーインクや透明水彩では、その組成により、濃くした時の色の変化が異なる。つまり、より自然な境界色を求めるのならば、各透明水彩絵の具の色名について、吸光係数等を設定し物理的な背景を考慮して境界の色を求める必要がある。

そこまで厳密に求める必要がないなら

  • 黄色は濃くなると赤みを帯びる
  • 紫は濃くなると青みを帯びる
  • 緑は非常に明るく感じられるので、R や B と同じだけ暗くすると知覚上は同じだけの変化に感じられない

といった傾向を考慮して調整を行うことで、簡易的なアルゴリズムでも自然な変化になる。

##比較

###SAI1

不透明では白に境界が現れない。グレーかぶりもないので境界の彩度は高い。不透明なら SAI1 はかなり良い境界色を出していることがわかる。 SAI1 不透明 透明度 50% では最もグレーかぶりが強くなる。白に境界が現れている。水彩系の画風では不透明になることはほとんどないので、たいていこの状態のを見ている。 SAI1 透明度 50%

###SAI2 通常

不透明でも白に境界が現れる。SAI1 よりも非常に暗い。 SAI2 不透明 境界の強さを SAI1 と同程度になるまで落としても白に境界はかかっているし、彩度は SAI1 よりも低い。 SAI2 透明度 100%

以前まとめたもの いろいろ

###SAI2 極彩境界

彩度が高く白に境界もかからない。 SAI2 不透明 極彩境界 透明度を落としてもグレーかぶりがない。 透明度 50% 極彩境界

###用紙質感

SAI1 では、レイヤーグループに白塗りつぶし下敷きを入れて、グループに質感をかけることで、白で塗った部分に用紙質感がかかることを回避できる 用紙質感 SAI1 SAI2 ではこのテクニックが使えない (左下に注目) 用紙質感 SAI2 SAI2 でレイヤーグループ技を使うとこのようになってしまう 用紙質感 SAI2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment