2011年07月29日

レイトレーシングのテスト その4

PMDファイルを使って試してみました。
レイを飛ばしてポリゴンの当たった位置からテクスチャ座標を計算してテクスチャ画像からそこの色を取ってきて・・・と普段OpenGLに任せっきりのところを自分で実装するのは面倒ですね。
まぁこれでOpenGLに頼っている部分はほぼ無くなったので、CUDAで全部やることができるはずです。

実行結果

左のほうに変な残像が出たり衝突検出に失敗してる縦線が入ってたり駄目駄目ですね。



BMPをつなげて動画にしていますが、1280x960の画像1枚に3分ぐらいかかっています。
無駄な計算がいっぱい入っているので普通より時間がかかっていると思いますが、GPUでやるとリアルタイムでできるんでしょうね。

web拍手 by FC2
posted by シンドラー at 22:45 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2011年07月27日

レイトレーシングのテスト その3

とりあえずCPUで大体できた感じです。

実行結果

メタセコで適当に作ったシーン(左)をCPUでレイトレしたものが右です。
光源などまったく考えず、最大5回反射させて当たった所の色を反射係数に従って足していっているだけです。

ray_tracing_test_004.bmp ray_trace_test_003.bmp

数値誤差かレイを飛ばしている所かボクセルの切り方か衝突判定かどこかわかりませんがバグがあるようで、所々の点ですり抜けてしまってゴミがついているように見えます。

今後CUDAかGLSLで行う場合、ボクセルに含まれるポリゴンの情報をどうやってGLSLから参照するのか考えないといけないですね。

(追記メモ)

@1パス目はGLSLを使ってFBOに接触した頂点座標(ワールド)を格納

A2パス目以後はCUDAで並列計算

BCUDAで画像の状態にしてGLSLは表示するだけ

という合わせ技もいいかもしれない。

web拍手 by FC2
posted by シンドラー at 21:21 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2011年07月22日

レイトレーシングのテスト その2

レイトレーシングのテストの続きです。

CUDAやGLSLで実装するとしても、まずは手法の確認をしないといけないのでCPUで試しています。

AABBとポリゴンの接触判定とかレイとポリゴンの接触判定とかレイとAABBの接触判定とか色々必要でした。

実行結果



視点から近クリップ面にレイを飛ばして、ポリゴンが含まれているボクセルと接触したら含まれているポリゴンとレイの接触判定をして、接触していなければレイはそのまま進めるを繰り返して、とりあえず1回目で物体のポリゴンに当たるか何も当たらないかを判定するところまでやってみました。

白い線が1本なのは全体に飛ばすと計算時間がかかりすぎるので、横1列だけレイを飛ばしています。

CUDAでやろうかと思いましたがGLSLの方が良さそうな気がしたので考え中です。

web拍手 by FC2
posted by シンドラー at 01:09 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2011年07月20日

PMDファイルの表示

レイトレーシングをCUDAで計算する場合、CUDA⇔OpenGL⇔GLSLのデータ共有にはVBOを使って頂点情報等を使い回すのが良いのではないかと思います。

CUDA+VBOのやり方を忘れかけていたので、とりあえずPMDファイルを読み込んでVBOに変換してGLSLで表示するところまで作り直してみました。

実行結果

エナメル様のねんどろいど風ミクモデルを使用させていただいております。
ttp://enamelhp.web.fc2.com/



一応ただのフォンシェーディングです。
スフィアマッピングも試しているのですがまだうまくいっていないので修正中です。
PC変えたらうまくいったみたいです。グラボの問題なんでしょうか。



次はCUDAでレイトレに・・・。

web拍手 by FC2
posted by シンドラー at 01:33 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2011年07月17日

レイトレーシングのテスト その1

下記参考サイトを参考に、レイトレーシングを試してみたいと思います。
http://www.clockworkcoders.com/oglsl/rt/

OpenGL+GLSLでやる予定でしたが、CUDAも使おうかと思います。

手順としては、空間を分割してレイを飛ばして当たったら反射を繰り返すみたいです。

現在のところ、頂点情報からグリッドに区切って頂点が含まれるボクセルの情報をテクスチャに格納して、フラグメントシェーダで視点からレイを飛ばしてボクセルにぶつかるかどうかみていく部分まではできました。

ray_tracing_001.PNG ray_tracing_003.PNG

ボクセルにあたったらそのボクセルに含まれるポリゴンと衝突判定してまた別の方向に・・・を繰り返す必要がありますので、この辺りはGLSLでやるよりCUDA等を使ったほうが便利かなと考え中です。

web拍手 by FC2
posted by シンドラー at 21:24 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする