過去の独りごち/独りごとは こちら
過去のJavaアプレットは こちら

現在、BBSに書き込みキーを設けています。「書き込みキー」欄に、「MYOMOTO」をカギカッコは抜いて、 半角、小文字で 打ち込んで書き込みをしてください。 このキーワードは時々変更されますが、その都度こちらにて報告します。


4/12 宇宙戦艦マンデルブロ

GLSLのショーケースとなるページを作ってみました。多少は衆目を集められると嬉しいのですが、15年以上も半放置だったツケは大きく、ただの苔むした遺跡となり果てております。

さて、今度は4Dマンデルブロ集合をやってみました。3DでMandelbulbも楽しいのですが、あえての4次元……白状しますとコードをほとんどジュリア集合から書き換えなくても良いからです!

宇宙戦艦なのか宇宙怪獣なのか。


GLSLで4Dマンデルブロ集合(クリックで動きます)
非常に重いです。VGAカードを積んだデスクトップマシンでの動作が好ましいでしょう


アンチエイリアシングを掛けたかったのですが細部まで欲張って描画させたら重くなりすぎたので断念……なんだか汚らしい感じになってしまって残念です。今の僕のPCはNUCなので、去年まで使っていた古いMacbookAirよりは格段に速いですが、一般的なGPUを積んだPC環境よりは大分遅いですから、僕の環境で重くてもまともに動くならば、こういった物に興味のある方の環境ならば大体滑らかに動くのではないかと思います。

実は4Dジュリア集合と同様の計算法を使うと軸をどう取っても回転体か球しか出来ないので、Mandelbulbの開発者(発見者と言うべきか?)の一人、Paul Nylander氏の2009年7月30日の記事にあった「David Makin氏から提案された方法」でコチョコチョと細工をしています。

具体的にはこんな感じらしいです。

\[ (x,y,z,w)^2 = (x^2-y^2-z^2-w^2, 2(xy+zw), 2(xz+yw), 2(xw-yz)) \]

また今日もいいちこをやりながら自前で用意した自動微分のための計算が適当すぎるのですが何やらちゃんと表示されている気がします。得しました。こんな感じでクォータニオンの乗算を置き換えて

    vec4 mulQdash(vec4 q, vec4 p)
    {
      return = vec4 (
        q.x*p.x-q.y*p.y-q.z*p.z-q.w*p.w,
        q.x*p.y+q.y*p.x + q.z*p.w+q.w*p.z,
        q.x*p.z+q.z*p.x + q.y*p.w+q.w*p.y,
        q.x*p.w+q.w*p.x - q.y*p.z-q.z*p.y
        );
    }
  

という感じで計算させています。理論的にあってるのか間違っているのかは検証してませんし、サンプルコードも今(酔っぱらいながら)手計算で計算しなおして適当に書いているのでどこか間違えてるかもしれませんから、詳細はソースの方をどうぞ……とりあえず、この計算ってどうも各軸対等ではないみたいで、距離の計算時にクォータニオンの大きさだけ計算させると表示がおかしくなったため、距離の計算時にも各軸方向の偏微分の計算を真面目にやっています。

それにしても、3Dフラクタルの分野って今を生きる人達によって"まさに今創られている"という事がひしひしと感じられますね。GPUの進化によってレンダリング速度が爆発的に早くなった事が本当に大きいなぁ、良い時代になったなぁ。

昔はファイア・極座標(トンネル)・フィードバックの三種の神器しか無かったのに。当時のデモで一般的だったQVGAサイズで60fpsを出すことを念頭に考えると一時期は超高級品だったPentium 90MHzのシステムでも1ピクセル当たり20クロックしか使えなかったのでピクセル当たりに行える演算ってメモリの読み出しと書き込みやって残りは足し算と引き算を数回くらいでしたから、

それぞれがデモで愛用されまくったのもどうしてなのかうなずけると思います。既にあちこちにあるとは思いますが、こういったオールドファッションなテクニックをGLSLで実装する話もやってみたいですね。

とかく当時の環境ではループ内で使える1クロックの時間が1粒のダイヤモンドほど貴重でありAMDのK6-2で3DNow!がサポートされた時にCPUの演算性能が1GFLOPSを超えた時ですら僕は大はしゃぎしてしまいました。現在のCPUは(Xeonなら)1TFLOPSを越え、GPUに至っては10TFLOPSに迫ろうかという時代です。SLIなど複数GPU構成を考えれば既に突破していると言えます。2013年に詳細スペックが発表されたMacProがCPU+GPU込みで1.5TFLOPS越えを達成したため当時の法令上はスーパーコンピュータ扱いになって政府機関への納入が困難になるかも!?などと騒動になったのももはや懐かしい話ですね。

ところで、Mandelbulbの開発者のお二人(Paul Nylander氏とDaniel White氏)のWebサイトを今更拝見したのですが、見た時のワクワク感が本当に凄いです。今風のデザインとは言えませんが、彼らのような本物の天才には10年もしないうちにコロコロ変わるデザインの流行り廃りなど些末な問題なのでしょう。90年代の良い意味で混沌とした、ビッグバンが起こったばかりの超高熱のWWWの世界を今に伝える、本当に羨ましくなるサイトです。コンテンツも天才の業としか言いようのない物ばかりで時間を吸い取られますね。

そういえば、そろそろシェーディングの方も改善したいです。Cook-Torranceを適当にやるだけでは芸が無くなってきた気がします。「カラーリングにとりあえず色相を変える」のもマンネリ化してきましたし……次はGLSLでIBLとかRayleigh散乱とかその辺のネタにしようかなあ。

もういいちこが無くなりました……コンビニで割り物として買ってきた98円のサイダーの残りを呷って今日は寝るとします。




Hayase Taku(SANDMAN)

戻る