Slide 1

Slide 1 text

レイトレ合宿6 xyz-renderer Yuichi Sayama @xyz600600

Slide 2

Slide 2 text

やりたかったこと ● オブジェクトをたくさん配置したい ○ なんかかっこいい ● シーンを自分で考えてみたい ○ なんか楽しそう ● みんながやらなさそうな工夫を入れてみたい ○ 独自性的なあれ ● 高速化したい ○ ノイズが目立たなくなる程度には

Slide 3

Slide 3 text

最終的に出来た絵

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

思ったよりリアルにならない…?? ● もうちょい工夫の余地はあったはずだが、時間が足りずに断念 ○ テクスチャ を単色以外にする ○ BRDF の変更 ○ 車の種類を増やす ● リアルなシーンに重要なことを知りたい ● 画像の詳細 ○ 1920 x 1080 ○ 本番環境で 約200spp

Slide 6

Slide 6 text

工夫したこと 1. オブジェクトのClone 2. 2段BVH 3. MIS 付きのNext Event Estimation 4. 並列化方法

Slide 7

Slide 7 text

オブジェクトのClone ● 300K Polygon の車をランダムにずらしながら計80台並べた ● 全てにPolygonを持たせるとしんどいので、Polygonは共有 ● Material は外部ファイルを6種類用意して、ランダムにload ● 交差判定は元のオブジェクトの空間へ引き戻して行う original obj (Polygon含む) ① original obj で交差判定 cloned obj (AABBの外枠だけ) ② cloned obj の座標に戻す 交差判定!

Slide 8

Slide 8 text

2段BVH ● Clone されるオブジェクトが増えてきたので、BVHを2種類作った ○ Objectの外枠のAABB+Polygonでない物体用 ○ Polygon専用 ● 実装はほとんど流用できるようにした ○ 方法は「Bounding Volume Hierarchy (BVH) の実装 - 構築編」と同じ

Slide 9

Slide 9 text

MIS 付きのNext Event Estimation ● CEDEC 2015 のBDPT 基礎資料[1]を参考にした ● 最初は意味わからなくて敬遠してたけど、唐突に理解出来たので使った ● 双方向パストレ、MLT は実装つらそう ○ 来年こそは…! [1] https://www.slideshare.net/takahiroharada/introduction-to-bidirectional-path-tracing-bdpt-implementation-using-opencl-cedec-2015

Slide 10

Slide 10 text

並列化方法 ● 画像全体を 16x16 に区切って、並列化 ○ ロードバランスの調整は、Rayon(Rustの並列化ライブラリ)にお任せ ○ (本当はRay Packet を送ろうと思ったけど、時間が足りず) ○ ローカルの i7-6700K(4C/8T)@4GHz より8.3倍 速い ○ user / real ≒ 72 を見ると癒やされる…

Slide 11

Slide 11 text

やり残したこと ● SIMD化 ○ パーツとしては実装したけど、きちんと組み込むための時間が足りず ● 双方向パストレ、MLT等の強いアルゴリズム実装 ● 被写界深度 ○ 実装したけど、シーンがイマイチだったので却下