GLSLで集中線を書く


漫画やアニメなどでよくある集中線をGLSLで実装します。

テクスチャを読み込んで混ぜるのが一番簡単ですが、形状や場所に限界があるのでGLSLの関数を使って自由に書けるようにします。

三角関数を使う

まずはシンプルに考えます。

正規化して中心からの角度を計算、適当な三角関数で縞模様を作る。

コメントアウト部分で2値化すると、より集中線っぽい気がします。

外積を使う

先ほどの方法だと外周になるほど太くなってしまい、集中線というよりはめでたい感じになっています。

先ほどと同じように正規化後、角度を適当に分割します。

その角度方向のベクトルと座標ベクトルの外積をとることで一定の太さの線を引きます。

中央を空けるには中心からの距離を使ってl*=step(.5,length(p));のようにします。

ランダムな長さにする

ランダム関数を追加して中央からの距離をバラバラにしました。

かなり理想的な感じになってきました。

微調整

以下の調整を行って完成です。

  • 線の数の調整
  • 線の間隔をランダムにする
  • 線の外側を少し太くする

 

実際に画像に適応するとこんな感じになります。

良い感じにできました。

最終コードだけ見るとごちゃごちゃしてるように見えますが、1つずつ見ると基本的な処理の組み合わせだけです。


コメントを残す

メールアドレスが公開されることはありません。