スキップしてメイン コンテンツに移動

投稿

12月, 2017の投稿を表示しています

UE4 4.22 Preview 1 のリアルタイム・レイトレーシングを動かしてみた。

いきなり!Ray Tracing on Houdini VEX 2

Ray を可視化してみました。 可視化 図 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() を使いましょう。 現在の geometr

いきなり Ray Tracing on Houdini feat. VEX

Houdini で、VEX お勉強のお題として、Simple Ray Tracer を作ってみました。 はじめに VEX とは、SIMD 型のスクリプト言語です。Houdini 専用です。 機械学習の応用やプロシージャル技術の実験環境として、Houdini は視覚的に検証ができるので、VEX のお勉強を開始しました。 実装方法 1.出力先のスクリーン Grid を64 x 64 で primitive に分割して、それぞれの primitive をtexel とみなします。 2.Ray Tracing 処理 Wrangle Operator に、VEX コードを書きます。 Attribute Wrangle か、Primitive Wrangle で良いです。 入力は、Grid と Scene Geometry を Wrangle に接続します。 3.VEX コード(後日、公開します。) texel から、primary ray を飛ばして、シーン内の geometry と交差判定して、texel あたりの平均輝度 (radiance)を計算しています。 SIMD ですから、texel は並列に計算されているはずです。 いわゆる、CPU シェーダです。 解像度 比較 64 x 64 texels と 512 x 512 texels の比較です。 Lambert BRDF, Sun Light (Directional Light) のみです。 図 解像度64 texels と 512 texels の比較 おわりに 今後 週末、Star Wars 最後のジェダイを観る前、Houdini の資料を読みながら、2時間ぐらいで、Surface で作成したものです。 とはいえ、アイデアをカタチにして、すぐに結果が見えるのは良いと思いました。 現状は、64 x 64 texels の解像度なので、ファミコンみたいですが、 少しずつ、Ray Tracer として仕立てていこうと思います。 Ray Tracing -> Path Tracing -> Photon Mapping