[Status] Vertex Culling implementation

by syoyo

vcdemo.png

[En]

I’ve finished initial implementation of Vertex Culling [1]
combined with packet-based BVH [2] traverer.
This implementation is presented at SBR07.

http://lucille.svn.sourceforge.net/svnroot/lucille/angelina/eleonore/

Although Vertex Culling code is fully provided in the paper,
it’s written in C++ and for VC++.
Thus I’ve ported it to C and for gcc.

At this time, it seems working in overall,
still rendered image shows there is a bug in my implementation.

I hope this is a trivial bug,
since there is less than a week to fix it until SBR07.

If my code works well, I’d like to investigate statistics exhaustively
(cycles/triangle, SSE asm code analysis, etc.)

[Ja]

SBR07 発表ネタがなんとか実装できてきた。
Vertex Culling の実装です。
Vertex Culling そのものは交差判定だけなので、
packet-based BVH の組合せです。

vertex culling のコードは論文に全部載っているけど、
基本的に他人のソースは信用ならないのと(それに汚い…)、
C++ で書かれているので C に書き直した。

んで、VC だけだと交差判定しかやらないわけなので、
これだと絵がでないので昔に書いた BVH コードを引っ張りだして組み込んだ。
(いやー、書いておいてよかった)
ついでに BVH トラバースをパケット対応に。

とりあえず出てきた絵を見るとまだバグっているけど、
まあひとまず動いている気がする。
SBR07 まで時間もないので、このバグが trivial なものですぐ fix できる
と望んでいる。
バグが直れば、発表までに可能な限りパフォーマンス解析をしたい。
(cycles/ray, cull rate, SSE asm code からの理論値比較など)

やっつけなのでコードがこんがらがっているので、
SBR07 が終わったらリファクタリングします。
Vertex Culling + packet based BVH は単純だけと
結構効率よさそうなので lucille のベースアルゴリズムをこれにしたい
と考えているから。
あと VC のコードは最適化の余地がまだまだあると思うのでいじってみたいというのもある。

[1] Faster ray packets – triangle intersection through vertex culling
http://kesen.huang.googlepages.com/rt2007Papers.htm

[2] Ray Tracing Deformable Scenes using Dynamic Bounding Volume Hierarchies
http://www.sci.utah.edu/~wald/Publications/

Advertisements