Ray を可視化してみました。
追記:addpoint() や addprim() の第一引数は、geometry handle です。
現在の geometry に出力する場合は、geoself() を使いましょう。
現在の geometry は、今回の場合、raytraceWrangle の input 1 (screen) のことです。
geometry だけでなく、file handle に出力もできそう。
出典:http://www.sidefx.com/docs/houdini/vex/snippets.html#creating-geometry
可視化
図 Pinhole Camera から、Teapot へのRay と Reflection Ray を VEX で可視化
解像度比較
図 左 32 texels (primitives), 右 256 texels (primitives)
ネットワーク
図 Simple Ray Tracer Wrangle
出力先は、screen です。
シーンは、sceneGeometry です。
今回は、Utah Teapot のみです。
manyLights は、光源へのポインタです。
morishgieGI は、大域照明(実験)へのポインタです。
raytraceWrangle が、Ray Tracing を実行するOperator です。
VEX コードの格納先です。
Ray 可視化 VEX コード
raytraceWrangle で、ray がシーン内のジオメトリと交差した際、
ray の点とプリミティブを生成しています。
追加削除が、簡単に動的にできるのは、VEX スクリプトの強みですね。
// ray を可視化する 点とプリミティブを生成 // geoself(): 出力先(screen) int newPt0 = addpoint(geoself(), rayOrigin); int newPt1 = addpoint(geoself(), hit); addprim(geoself(),"poly", newPt0, newPt1); // reflection ray を可視化する点とプリミティブを生成 vector r = reflect(rayDir, surfaceNormal); int newPt2 = addpoint(geoself(), hit + r); addprim(geoself(), "poly", newPt1, newPt2);
追記:addpoint() や addprim() の第一引数は、geometry handle です。
現在の geometry に出力する場合は、geoself() を使いましょう。
現在の geometry は、今回の場合、raytraceWrangle の input 1 (screen) のことです。
geometry だけでなく、file handle に出力もできそう。
出典:http://www.sidefx.com/docs/houdini/vex/snippets.html#creating-geometry
VEX コードのコンパイルと実行
wrangle multi-line editor 内(e.g., AttributeWrangle の VEXpression)で、
Ctrl + Enter で、VEX コードをコミットして、実行します。
Houdini 左下のステータスに、コンパイル中の表記が出ます。
VEX 所感
先週から、粛々とVEX を触っています。C ベースの SIMD 型スクリプトです。
ジオメトリやオペレーターに、VEX コードをアタッチして、シーンを構築する流れは、
JavaScript や C# をオブジェクトにペタペタと貼る、
Unity のワークフローを連想しました。
今のところ、VEX コードのデバッグは、printf 出力と 可視化 です。
追記:assert() が使えます。
出典:http://www.sidefx.com/docs/houdini/vex/assertions.html
追記:assert() が使えます。
出典:http://www.sidefx.com/docs/houdini/vex/assertions.html
What's Next ?
1. Camera 関連のパラメタ追加
2. SimpleRayTracerWrangle 実装
manyLights と morishigeGI を実装します。
まずは、IBL 向けのHDR 画像で、テストしてみようかなと。
コメント
コメントを投稿