3Dグラフィックスもままならないのに、レイマーチングに手を出そうという。
レイマーチングとはレイトレーシングの一種だとのことだ。レイトレの高速アルゴリズム版、DFTに対するFFTのようなものか。 コードはとても簡素だけど、生成した画像をは恐ろしくリアルだったりする。 頑張れば下のようなのがフラグメントシェーダーのみで描けて、しかもリアルタイムで動くという。
しかもその簡素なコードでなぜこのようなものが描けるのかパッと見理解できない不思議。なんでこのような簡単な形状関数(距離関数)で描けるのかね。。もうちょっと数学的な知識があればなぁ。。
1画面を書くのに結構な計算をしなくてはいけないけど、GPUの並列処理のおかげでリアルタイムで動くものが作れるようになった。レイマーチングはGPUの活用例としてもすぐれた素材なのだろうな。
チュートリアルコードをコピペしつつ、勉強を進めよう。 ということで、まずは「http://www.demoscene.jp/?p=811」のコードをコピペしてちょっとだけっていじったものが下。
https://github.com/sfpgmr/3d_codes/tree/gh-pages/src/00004
こんなのが数十行のコードで描けるのだから、レイマーチングはほんとすごいや。