2014年10月6日月曜日

Voxel Cone Tracing

Sparse Voxel Octreeではなく、レギュラーグリッドとミップマップです。
ボクセルの更新には特に工夫はなく、毎フレーム計算し直しです。

ベースは以下の2つです。
Geeks3D
Practical Real-Time Voxel-Based Global Illumination For Current GPUs

ボクセルグリッドは128x128x128のミップマップレベル6段階。
ディフューズに9本、スペキュラに4本のレイを飛ばします。

ボクセル化する際にスーパーサンプリングを行って、
ボクセルの不透明度を計算しています。

ボクセルに対して小さいもの、薄い布等は、
裏側で不正な結果が目立つようです。

ボクセル更新の工夫と、低解像度でGI計算すれば、
なんとか使いものになるかもしれない。

カスケードやクリップマップでLODを行うものが提案されていますが、
どちらも遠方の光漏れを防ぐ方法がないのではと思います。

ソースのようなもの
GitHub

2014年7月31日木曜日

Embree

Embreeで遊ぶ。
Intelのレイトレーシングカーネル。
レイと三角形メッシュの衝突判定を行うライブラリ。
Intel SPMD Program Compiler(ISPC)を利用する。

ISPCのチュートリアルも少し見てみたので、
何か機会があれば利用しよう。
NEONも対応しているようですが、
あれのために使い辛い。

VisualStudioでは、ISPCのファイルのコンパイルに一手間かかります。
[プロジェクト]>[ビルドのカスタマイズ]>[既存ファイルの検索]
でEmbree/common/cmake/ispc.targetsを追加すると
ISPCの利用が楽になる。
ispc.props、ispc.rules、ispc.targets、ispc.xmlあたりを
別フォルダに保存して利用するのがいいかも。


白目が黒くなってるのは何かな?

EmbreeのサンプルとしてEmbree Rendererがあるのですが、
これだけでかなり遊べます。
PNG形式の画像をロードするにはImageMagickが必要です。
ImageMagickのビルドに挫折したため、
直接libpngでロードするコードを追加しました。

Embreeを知ったきっかけは、2014年5月号ぐらいのCG Worldで
VRayが使用しているという記事。

Siggraph2014で、Embreeについて発表があるよう。

2014年6月9日月曜日

Dual Quaternion Skinning

コードをまとめていなかったため、
今更書き直した。
何かの時に使うかもしれない。

奥上の円柱がDualQuaternionで変形した場合。
ローポリの場合は差がでなくなる。