WebGL
GLSL

glsl リプリケーションと平行世界

リプリケーションとは

フラグメントシェーダーで、現在、処理している画素の座標をある数字で割ることで、図形がリプリケーション(複製)されるという現象のことでした。なんとなく、ある数字で割った余りなのだから、同じ図形が繰り返されるというのはイメージがつくかもしれませんが、とても不思議ですよね。

まず前提として

glslは、頂点シェーダーであれば、頂点の数だけ、フラグメントシェーダーであれば、画素の数だけ同じプログラムが並列で実行されるのでしたね。
ということは、フラグメントシェーダーであれば、全く別個の平行世界が画素の数だけ存在するともいえますね。

このまま、何も基準もない状態であれば、全く別個の平行世界が画素の数だけ存在することになりますが、現在、処理している画素の座標(gl_FragCoord.xy)を基準とすることで1つの世界とすることができます。

このgl_FragCoord.xyを正規化したものをpとします。

vec2 p = (gl_FragCoord.xy * 2.0 - r) / min(r.x, r.y);

このpを割るということは世界を割っているのに他ならないのです。