Simple Renderer

おもに学習用にいろんなレンダリングアルゴリズムを実装しています。順次追加中。Githubで公開。
パストレのアルゴリズムとシーンのデータ構造はsmallptを参考にしました。ありがとうございます。

物理ベースレンダラ(パストレーシング)の解説・実装をeduptとして公開しました。
双方向パストレーシングの解説・実装をedubptとして公開しました。

以下のコードは全てMITライセンスの下に公開されます。(http://kagamin.net/hole/license.txt)
また、コードの一部はsmallptを元にしており、その部分もMITライセンスの元に公開されます。(http://kagamin.net/hole/smallpt-license.txt)

結構昔に書いたので誤りも多分に含まれている可能性があります。気づいた人はどんどん教えてください。

パストレーシング

simple-pathtracer
レンダリング方程式をモンテカルロ法で直接解く!というもの。割と基本。The rendering equation参照。

非再帰版
simple-pathtracer-norecursion
単にradiance()を非再帰にしたもの。スタックオーバーフロー知らず。

WardのBRDFモデル
simple-pathtracer-Ward-brdf
Wardが提案したBRDFモデルの実装。金属っぽい質感を再現。Notes on the Ward BRDF参照。

関与媒質
simple-pathtracer-participating-media
ボリュームレンダリング方程式を解くことで関与媒質をレンダリング。

被写界深度(Depth of Field)
simple-pathtracer-DOF
視点からレイを飛ばすときにレンズシミュレーションすることで疑似的な被写界深度の再現によるボケ効果。PBRTのコードの移植。


準モンテカルロ法パストレーシング(QMC)
simple-pathtracer-QMC
レンダリング方程式を準モンテカルロ法で解く。Halton列利用。

マルチスペクトルレンダリング
simple-pathtracer-fullspectrum
普通はRGBの三チャンネルしか考慮しないところを可視光領域のスペクトルを幅広く考慮してレンダリング。光の分散なども表現可能。

explicitパストレーシング
simple-pathtracer-explicit
明示的に光源に対してサンプリングを行うことで効率化。

双方向パストレーシング

simple-bidirectional-pathtracer
視点からだけじゃなく、光源からもパス追跡することで多様なライトパスをサンプリングできるようにしたパストレーシングの強化版。Robust Monte Carlo Methods for Light Transport Simulation 参照。
eye subpathの頂点が1のケースを適切に扱っていません。
This implementation has a few bugs, and edubpt is a more correct implementation of BDPT.

メトロポリス光輸送法

simple-mlt
メトロポリス法(正確にはMetropolis-Hastings法)により、高寄与のライトパスを重点的にサンプリング。オリジナルのものよりもシンプルでロバストなKelemen styleを実装。Simple and Robust Mutation Strategy for Metropolis Light Transport Algorithm参照。

フォトンマップ

simple-photonmap
有名なフォトンマップ法。

以下の三つはフォトンの反射・屈折時のロシアンルーレット処理が間違ってる。そのうち修正したい。 プログレッシブフォトンマップ
simple-progressive-photonmap
プログレッシブに結果を改善。実質任意量のフォトンをほどほどのメモリ使用量で使用可能。Hachisuka先生。

プログレッシブフォトンマップ(ヒットポイント)
simple-progressive-photonmap-hitpoints
上のはフォトンをKD-treeに格納して各ヒットポイントでKNN探索してたが、これはヒットポイントをKD-treeに格納して各フォトン位置でKNN探索。

ファイナルギャザリング
simple-photonmap-finalgather
放射輝度推定時にファイナルギャザリングをすることで精度改善。

ラジオシティ法

simple-radiosity
ラジオシティ法によるグローバルイルミネーション。モンテカルロ積分でフォームファクターを求めて、ガウス・ザイデル法でラジオシティ方程式を解く。

インスタントラジオシティ

simple-instant-radiosity
最近リアルタイムでの応用が期待されてるっぽいVPL系手法の基礎。

ライトカット
simple-lightcuts
超大量の点光源を効率よく扱う手法。VPL系手法のお供に。(ただしこの実装はまだ甘いところたくさんあり)

Energy Redistribution Path Tracing(エネルギー再分配パストレーシング)

simple-energy-redistribution-pathtracer
モンテカルロパストレーシングとメトロポリス法のいいとこどりをした手法。サンプルも増やすし、変異もするよ。Energy Redistribution Path TracingとかImplementing Energy Redistribution Path Tracingとか参照。

イラディアンスキャッシュ(放射照度キャッシュ)

simple-irradiance-caching
間接光のイラディアンスの変化は滑らかだろうという仮定に基づいてイラディアンスを補間する。イラディアンスはフォトンマップ使って計算。

イラディアンスグラディエント(放射照度勾配)
simple-irradiance-gradients
放射照度の位置勾配と回転勾配を求めることでより高精度な補間をする。

レイトレーシング

simple-raytracer
いわゆるレイトレ。


年表

1979 Ray Tracing
1984 Radiosity
1986 Path Tracing
1988 Irradiance Caching
1993 Bidirectional Path Tracing
1995 Photon Map
1997 Metropolis Light Transport
1997 Instant Radiosity
2005 Lightcuts
2005 Energy Redistribution Path Tracing
2008 Progressive Photon Mapping


実装したいやつ

A Practical Model for Subsurface Light Transport
A quantized-diffusion model for rendering translucent materials
Energy Redistribution Path Tracing
Bidirectional Lightcuts