vvvvでレイトレーシング入門

Pocket

3DCGの勉強が楽しい今日この頃です。
早く美しい表現ができるようになりたい。。。

自分が美しいと思うもののひとつに水の集光模様があります。

water02

火線と呼ばれていたりもします。英語ではWater Causticsと呼ぶそうです。

water01

vvvvでこの表現をできるようになりたいなぁと色々調べていたところこんなページを発見しました。
水面下のコースティクス表現

う、、美しい!
そしてデモファイルをDLして動かすとぬるぬる動くではありませんか!
これをやりたい!

ということでこのページに書いてあるキーワードを地道に辿っていくことに。

どうやら集光模様を表現するにはフォトンマッピングという手法を使うのがいいらしい。
それ以外には光の屈折を計算して描画する方法もあるらしい。
GPU Gems Chapter 2. Rendering Water Caustics
(※GPU GemsってWebで読めるんですね!)

いきなりフォトンマッピングの本を買って読んだのですが難しい。。。

フォトンマッピングに着手する前にレイトレーシングについて学んだ方が良い気がしたので、まずはレイトレーシングを実装してみることに。

ネットで調べるといろいろ見つかりました。
こちらのページが入門では良さげです。
WebGL と GLSL で気軽にレイトレーシングに挑戦してみよう!

レイトレーシングとはなんぞやというところはこちらの方や他のサイト、書籍にお任せします。
毎度のこと、自分はvvvvを使いたいので、vvvvでどうやってレイトレーシングを実装するかという所を考えました。

ひとまず、↑の方のコードをそのままお借りしてシェーダーを書いてみることにしました。
といってもあちらはWebGLで書かれているのでそのままではvvvvで実行できません。
少し工夫が必要になります。

で、硬い頭を揺さぶりながら出来上がったのがこちら。
vvvv_RayTracing

RayTracingNoMesh-DirectX Renderer_2015.09.17-04.38.59

おぉー、参考にしたサイトと同じような絵ができとる~。
コード殆ど同じだから当たり前といえば当たり前ですがf^_^;)

でもこのシェーダーは入門的に作ったので問題だらけです。
まず、gridのテクスチャ(2D平面)に擬似的に3D表現を描いてしまっている時点でなんか???な感じです。
なので、任意の形状のモデルを扱えません。

この辺りを解決する方法を調べていますが苦戦中です。
三角形の交差判定ができれば任意の形状のモデルの交差判定ができるらしいということまでは理解できたけれど、
その計算がしやすいように頂点データやらをシェーダーに送ってやる方法がわからない(´Д` )
後は綺麗な集光模様を得るには波や流体の表現も実装しなきゃいけない気がします。
頭の良い方にご教授願いたい。。。

…なかなか先が長そうだなぁ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください