1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[連載 GLSL 物語] チカラが欲しいか……(第四話)さらにその先へ

Last updated at Posted at 2017-12-07

さらにその先へ

ベクトルディスタンスフィールドにベクトルディスタンスフィールドを掛けてさらにベクトルディスタンスフィールドを掛けてみましょう

vdfcircle.png
https://goo.gl/ds5B55

 precision mediump float;
 uniform vec2  m;       // mouse
 uniform float t;       // time
 uniform vec2  r;       // resolution
 uniform sampler2D smp; // prev scene
 
 #define PI 3.14159265359
 #define TWO_PI 6.28318530718

 #define N 60.
 #define N2 15.

 
 void main(void){
  vec2  p = (gl_FragCoord.xy * 2.0 - r) / min(r.x, r.y); // 正規化
  float r = floor(degrees(atan(p.y,p.x))/N)*N+N/2.;
  vec2  q = vec2(cos(radians(r)),sin(radians(r)))*.8-p;
  float r2 = floor(degrees(atan(q.y,q.x))/N2)*N2+N2/2.;
  vec2  s = vec2(cos(radians(r2)),sin(radians(r2)))*.2-q;

  float l=step(length(s),.02);
  gl_FragColor = vec4(vec3(l), 1.);
 }

単純に、ベクトルディスタンスフィールドをチェインするだけでいいですね。

これで、花火のように2段階で分裂するパーティクルのようなものも作ることができますね。

もちろん、さらに、無限にチェインすることができます。かつ、別に円のディスタンスフィールドでなくてもいいんですよ。分割数も、それぞれのチェイン毎に別々でも構わないです。

夢がひろがりませんか?

ベクトルディスタンスフィールドの正体に迫る

ところで、このベクトルディスタンスフィールド(=ディスタンスフィールド)って何者なんでしょう。ディスタンスフィールドは、イラストレーターやSVGのベクターデータと同じで拡大縮小してもジャギが出ないデータです。しかし、イラストレーターやSVGのベクターデータと全く互換性がありません。ディスタンスフィールドをベクトルディスタンスフィールドに戻したとき、同じベクトルデータということで関係性はあるのでしょうか?

もし、このシェーダーの世界にベジエ曲線を持ってこれたら、どれだけ表現力が上がるのでしょうか。フォントも表示できるし、夢が広がりますね。

次回、このベクトルディスタンスフィールドを可視化して正体に迫ります。

[連載 GLSL 物語] チカラが欲しいか……(最終話)ベクトルディスタンスフィールドの正体に迫る

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?