Ray Tracing in One Weekend(Rustで一日で作るレイトレーサー)
概要
このリポジトリは、書籍「Ray Tracing in One Weekend」の内容を参照し、短時間(1日)で「動くもの」を優先して実装した Rust 製のサンプルプロジェクトです。出力は PPM 形式の画像で、基礎となるレイ生成、球体との交差判定、法線計算、アンチエイリアシング(ボックス型のサンプリング表現)など、レイトレーシング入門に必要な機能を一通り備えています。ベクトル演算の多くは nalgebra クレートに委ね、コードの冗長さを抑えている点が特徴です。
リポジトリの統計情報
- スター数: 1
- フォーク数: 0
- ウォッチャー数: 1
- コミット数: 5
- ファイル数: 8
- メインの言語: Rust
主な特徴
- PPM 画像の出力による手軽なレンダリング結果確認
- 球体とのレイ交差計算と法線ベクトルによる簡易シェーディング
- アンチエイリアシング(サンプリングによるボックス型フィルタ)の実装
- nalgebra を利用したベクトル/行列演算でボイラープレートを削減
技術的なポイント
本実装の技術的な肝は「短時間で動作する正しい実装」を優先しつつ、可読性を保つ点にあります。具体的には、ピクセルごとにカメラから飛ばすレイを生成し、シーン中の球と二次方程式(判別式)を解いて交差を判定します。交差が見つかれば交点の法線を計算し、法線情報を使って簡易的な明度計算(法線の向きに依存する色付け)を行うことで物体の形状を視覚化します。背景はグラデーション等の簡単な関数で決定され、これにより画面外の色が自然に見えるようになっています。
アンチエイリアシングは「ボックス化されたサンプリング」(複数サンプルをピクセル内で取得して平均化)を用いることでジャギーを低減します。乱数サンプリングや多重サンプリングの扱いは書籍の方法論に沿った手法で、各サンプルから得た放射輝度を合算してピクセル値を決定します。出力は PPM 形式で素朴に書き出すため画像ライブラリに依存せず、生成物を簡単に確認できます。
実装面では nalgebra クレートへベクトル演算を委任することで、加算・減算・内積・外積・正規化などの基本操作がライブラリ側で担保され、独自のベクトル型ボイラープレートが不要になっています。プロジェクトは Cargo ベースの Rust クレートとして構成されており、ビルド/実行の流れもシンプルです。逆に言えば、本実装は教育目的のシンプルさを優先しているため、BVH 等のアクセラレーション構造、複雑なマテリアル(鏡面反射、屈折)、サンプル並列化や画像フォーマットの多様化(PNG 等)は未導入です。拡張ポイントが明確で、学習やプロトタイピングの出発点として扱いやすい設計になっています。
プロジェクトの構成
主要なファイルとディレクトリ:
- .gitignore: file
- Cargo.lock: file
- Cargo.toml: file
- README.md: file
- clean2080metal.png: file
…他 3 ファイル
この構成からは、単一バイナリで PPM を出力する簡潔な Rust プロジェクトであることがわかります。Cargo.toml には nalgebra 等の依存が記述され、ソースは小粒で学習しやすいサイズにまとまっています。README には生成した画像(clean2080metal.png)が例として含まれ、動作確認のイメージが提示されています。
まとめ
短時間で動く学習用レイトレーサーを Rust で素早く体験できる良リポジトリ。
リポジトリ情報:
- 名前: Raytracing-In-One-Weekend
- 説明: 説明なし
- スター数: 1
- 言語: Rust
- URL: https://github.com/Shika-B/Raytracing-In-One-Weekend
- オーナー: Shika-B
- アバター: https://avatars.githubusercontent.com/u/93951827?v=4
READMEの抜粋: A single-day quick implementation of the Ray Tracing in One Weekend book. The goal was to get something reasonably clean working fast, and I believe I achieved that:
Closeup shot
Features checklist:
- PPM image creation
- Ray-sphere intersection, normals (and all the basic linear algebra and geometry. Vector boilerplates is mostly the nalgebra crate)
- Boxed anti-aliasing
- Cle…