ERPT 実装その1

by syoyo

ERPTを実装中。

とりあえずはいろいろコードを流用して saku saku っとパストレ部分を完成。
まずはディフューズ面のみ。

絵は 36 samples/pixel(=6×6 stratified sampling)。
まだまだノイズは多いですね。
ピクセルフィルタとか最適化とかまったく行っていないからこんなものでしょうか。

あとは mutation 処理と path density の計算をやれば ERPT の完成。
このまま問題なく行ければ結構簡単やも。

経路のデータ構造はこんな感じで作っておくとよいだろうか。
(ほとんど Graphics Programming Methods の MLT コードと同じだけど)

/* path vertex information */
typedef struct _path_vertex_t
{
        vector_t p;             // position;
        vector_t indir;         // Incident direction
        vector_t outidr;        // Outgoing direction
        int      type;          // type of vertex. 'E', 'D', 'S' or 'L'
        vector_t bsdf;          // BSDF(RGB)
        double   G;             // Geometric coefficient
} path_vertex_t;

/* record of light path */
typedef struct _path_t
{
        path_vertex_t verts[MAX_PATH_VERTICES]; // Path vertices
        int           length;                   // The number of the vertices

        int           px, py;                   // Pixel position

        vector_t      radiance;                 // Eval of this path(RGB).

} path_t;

ERPT のコードはこちらにおいてあります。

http://lucille.atso-net.jp/svn/angelina/lighttransport/erpt/

コンパイルには fltk と boost が必要です。
Mac OS X(メイン環境), linux, Windows(cygwin) で動くはず。

Advertisements