Simple Renderer

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

パストレーシング

おもに学習用にいろんなレンダリングアルゴリズムを実装しています。順次追加中。 Github で公開。パストレのアルゴリズムとシーンのデータ構造は smallpt を参考にしました。ありがとうございます。以下のコードは全てMITライセンスの下に公開されます。( http://kagamin.net/hole/license.txt また、コードの一部はsmallptを元にしており、その部分もMITライセンスの元に公開されます。( http://kagamin.net/hole/smallpt-license.txt レンダリング方程式をモンテカルロ法で直接解く！というもの。割と基本。 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

明示的に光源に対してサンプリングを行うことで効率化。

双方向パストレーシング

eye subpathの頂点が1のケースを適切に扱っていません。

メトロポリス光輸送法

フォトンマップ

視点からだけじゃなく、光源からもパス追跡することで多様なライトパスをサンプリングできるようにしたパストレーシングの強化版。 Robust Monte Carlo Methods for Light Transport Simulation 参照。This implementation has a few bugs, and edubpt is a more correct implementation of BDPT.メトロポリス法（正確にはMetropolis-Hastings法）により、高寄与のライトパスを重点的にサンプリング。オリジナルのものよりもシンプルでロバストなKelemen styleを実装。Simple and Robust Mutation Strategy for Metropolis Light Transport Algorithm参照。有名なフォトンマップ法。

以下の三つはフォトンの反射・屈折時のロシアンルーレット処理が間違ってる。そのうち修正したい。 プログレッシブフォトンマップ

simple-progressive-photonmap

プログレッシブに結果を改善。実質任意量のフォトンをほどほどのメモリ使用量で使用可能。Hachisuka先生。

プログレッシブフォトンマップ（ヒットポイント）

simple-progressive-photonmap-hitpoints

上のはフォトンをKD-treeに格納して各ヒットポイントでKNN探索してたが、これはヒットポイントをKD-treeに格納して各フォトン位置でKNN探索。

ファイナルギャザリング

simple-photonmap-finalgather

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

ラジオシティ法

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

ラジオシティ法によるグローバルイルミネーション。モンテカルロ積分でフォームファクターを求めて、ガウス・ザイデル法でラジオシティ方程式を解く。最近リアルタイムでの応用が期待されてるっぽいVPL系手法の基礎。

ライトカット

simple-lightcuts

超大量の点光源を効率よく扱う手法。VPL系手法のお供に。（ただしこの実装はまだ甘いところたくさんあり）

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

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

モンテカルロパストレーシングとメトロポリス法のいいとこどりをした手法。サンプルも増やすし、変異もするよ。Energy Redistribution Path TracingとかImplementing Energy Redistribution Path Tracingとか参照。間接光のイラディアンスの変化は滑らかだろうという仮定に基づいてイラディアンスを補間する。イラディアンスはフォトンマップ使って計算。

イラディアンスグラディエント（放射照度勾配）

simple-irradiance-gradients

放射照度の位置勾配と回転勾配を求めることでより高精度な補間をする。

レイトレーシング

年表

いわゆるレイトレ。

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



実装したいやつ