レイトレ実験はその②ですが、レイトレの記事はもうこれで5つ目です・・なんかタイトルのつけ方ミスった??



実は新しいプログラム言語 「fortran」 に手を出してみました!


これは計算に特化した言語でよく科学技術用の計算で用いられる、いわば四則演算がすごく速く行える言語です!


HSPでレイトレーシングをやるとすごく時間がかかるのでfortranに移植してみました。

当然「できあがる画像」はまったく一緒です!

同じアルゴリズムですから・・・



fortranで作ったCG↓

b114ac31.png



 

こんなにたくさんのオブジェクト(球)があるとHSPでは何時間計算かかるか分かりません


がfortranでは20分くらいで作れました。


なんだかよくわからないグラフィックになってしまいましたが、球が規則正しく敷き詰められているだけです。

下と上に1層ずつ、って



見ててきづいたのですが、画面の球にはさまれた部分(空と地面)の形は、本来なら長方形になるはずが、中心の部分がふっくらして見えません??

きっと目の錯覚と言うやつですね・・・・


どうでもいいです・・・・




ところでfortranに手を出したわけは・・

これからHSPをメインに使わなくなると言うわけではなく、あくまでレイトレーシングの計算をHSPで完成させたあと、fortranで動かすというカンジでやっていくためです。


やはりHSPはデバックが簡単だしやスクリプト画面もみやすいので。

それに一番は、もうそれに慣れてしまったところが大きいですかね




で一番自分が気になる速度比較ですが、計算速度はなんとHSPの30倍くらい早かったです!!


こんど結果をグラフにしてみたいと思います。




しかしfortranで計算が早くなったのはいいが画面出力のやり方がわからないので、計算結果→画面出力をほとんどHSPでやる羽目に・・


まずfortranでレイトレ演算結果の数値(RGB)をtxtに出力させ、それをHSPで読み込み、読み込んだ文字列を数値に変換しpsetで画面に打っていくという、なんともややこしく回りくどい方法を取らざるを得なくなり、結局その変換にすごい計算時間がかかるというオチであった・・orz



そんなこんなで4、5分くらいの計算ならHSPで全部やったほうが結果的に早いことが判明


もしかしたらfortranだけで画面出力できる方法があるのかもしれないがあまり書籍もないし、自分の能力も限界に近いので、数値→画像変換はHSPに頼ることにした。


やっぱわたしゃHSPから離れられんなぁ~




ところで↑のCG見て思った
ドットが荒い!

640×480の計算結果を640×480の画面に出力させてるから、1/1でドットが目立ち細かいところは何がなんだか分からなくなっている。


なので次に作る画像はアンチエイリアシングをかけてみようと思った。



擬似的なアンチエイリアシングの技法として目的の2~3倍程度の大きい画像を最初に作り、それを縮小してドットを滑らかにする、というものがある。

2倍の例だと

1280×960の計算結果を640×480の画面に出力させる、など



これは倍率を上げれば上げるほどドットが滑らかになるがその2乗に比例して演算時間がかかってしまう。



多分だが、本当のアンチエイリアシングは浮動小数点かなんか使って↑とは全く別のアルゴリズムでドットを滑らかにしているんだろうが

ま、レイトレーシングでアンチエイリアスするアルゴリズムなんて少し考えただけでも恐ろしく難しいので擬似的な方のアンチエイリアスでやることにした。




さて前回の記事で、四角板もレイトレーシングで描画できるのではと予言しましたが、やってみたら正解!

板の全反射なので「鏡」みたいな役割をするんじゃないかと思ってたら、その通りだった




以下のCGは3倍の倍率でやった擬似アンチエイリアシングの、四角形板&球混合バージョン

(これは最初からHSPで計算)

c745ce0e.png


うぉぉ・・

これには感動した!!(泣)


四角形の板は、球より難しいアルゴリズムであったがちゃんとピカピカ光ってる!


アンチエイリアシングも思いのほか効きが良くてうれしいー!


うんしばらくこれをデスクトップの壁紙にしよう!





四角形の板のアルゴリズムは次で解説します。

あと途中から語尾が変わってたのはまぁ文才がないってことで・・m(_ _ )m