■ トピック関連記事
WebCLによるレイトレ 投稿者:sio29 投稿日:2014/07/24(Thu) 23:59 No.7892

http://sio29.sakura.ne.jp/tmp/webcl/raytrace_eruru.html
WebCLによるレイトレのサンプルです。
実行にはFirefox28以上とノキアのWebCLプラグインが必要です。

http://webcl.nokiaresearch.com/
WebCLプラグインの獲得はこちらから。
Getting Startedというところを参照してください。

Re: WebCLによるレイトレ - sio29   2014/07/25(Fri) 23:00 No.7893
http://sio29.sakura.ne.jp/tmp/webcl_raytrace.zip
ソースです。参考にしたいかたはどうぞ

./src/ulib/raytrace/renderer/webcl/
のフォルダのあたりソースがレイトレの本体です。
./src/ulib/raytrace/renderer/webcl/shader/
のフォルダのあたりソースがWebCLのシェーダーです

Re: WebCLによるレイトレ - sio29   2014/07/25(Fri) 23:21 No.7894
簡単に説明すると、WebCLでやっていることは

1.カメラからレイの生成

** レイトレースの一回分のサブルーチンの先頭 **
2.レイキャスト(ヒットした位置とオブジェクトの検出)
3.影レイ生成→影レイのレイキャスト
4.反射、屈折以外のシェーディングと反射レイと屈折レイ生成
5.反射レイを2.の処理へサブルーチンコール
6.屈折レイを2.の処理へサブルーチンコール
7.シェーディング結果と反射レイの結果、屈折レイの結果の合成
8.レイトレース一回分のリターン

みたいな感じです。
WebCLは再帰ができないため、処理を小分けにして処理してます。
この方法だと再帰するためにバッファが必要なためメモリを食うのが難点です
Re: WebCLによるレイトレ - sio29   2014/07/25(Fri) 23:24 No.7895
レンダリングの前に空間分割をしてますが、こちらはCPUでやってます。
なので実行まで若干時間がかかります。
空間分割はオブジェクトが移動しない限り再構築は必要ないので、
オブジェクトが動かない現状では一回だけしています。

空間分割は一様グリッドを使ってますが、将来的にはKDTreeにしたいです。
また空間分割もWebCL側(GPU側)で処理するようにしたいです
処理 記事No 暗証キー

- Joyful Note -