稲生による作品です。

反復関数系と呼ばれる、縮小写像の組が1つ与えられると、そこから自然に自己相似集合と呼ばれるコンパクト集合が定まります。これは一般にはフラクタルと呼ばれる複雑な集合になります。 シェルピンスキーのガスケットなどが代表的な例としてよく知られています。

3次元ユークリッド空間における、反復関数系から定まる自己相似集合をリアルタイムに計算して描画する作品を作りました。

このプログラムでは、あらかじめ指定した長さの記号列を全て用意し、それらに対応する自己相似集合内の点を計算し、点群として表示するようになっています。

技術的には、初めに記号列を生成し、それを座標として埋め込んだ点群を生成しておきます。頂点シェーダで、その点群の各点 (=各記号列) に対し、それに対応する自己相似集合内の点をGPUで計算して求め、それを表示するようにしています (最初コンピュートシェーダーが必要かと思ったのですが、別に必要ありませんでした)。 従って毎フレーム毎に座標を計算し直すことになりますが、そのかわりパラメータを変化させても計算コストは変わりません。上のブラウザ上のデモでは8文字の記号列を用意し、4つの写像で生成される自己相似集合を描いているので、$4^8=65536$個の点があります。 記号列を点群の座標に埋め込むときには、記号列はint型で生成し、それをfloat型ということにして点のxyz座標に埋め込んでいます。