Luz: スクラッチから構築された C++20 パストレーサー
Luz は、サードパーティ製ライブラリを一切使用せずにスクラッチから開発された高性能 C++20 パストレーサーです。モンテカルロ・パストレーシングとグローバルイルミネーションを実装し、マルチスレッド CPU レンダラでフォトリアリスティックなレンダリングを実現します。
コアレンダリング機能
Luz は、物理的な正確さと効率性を追求した包括的なレンダリング機能を提供します。エンジンは球体、平面、矩形、三角形、立方体、ボリューム、OBJ メッシュなど、幅広いジオメトリプリミティブをサポートします。
マテリアルとライティング
実写に近い光の相互作用を実現するため、Luz は複数のマテリアルタイプとライティングモデルを実装しています:
- マテリアル: ランバート(拡散)、金属、誘電体(屈折)、エミッシブ、等方性マテリアルをサポート。
- ライティング: エリア、ポイント、球体、方向性光源をサポート。
- サンプリング: エンジンは確率密度関数(PDF)を用いた重要サンプリングを利用し、ノイズを低減し収束を高速化します。
高度なビジュアルエフェクト
基本的なレイトレーシングに加えて、Luz にはポストプロセッシングと大気シミュレーションのパイプラインが含まれます:
- 大気シミュレーション: 現実的な空と空中遠景のための散乱効果を含む。
- カメラエフェクト: 被写界深度、アンチエイリアシング、露出補正、コントラスト調整、トーンマッピング、ガンマ補正、ブルーム。
- 出力フォーマット: レンダリング結果は BMP と TIFF ファイルとしてエクスポートされます。
パフォーマンス最適化とアクセラレーション
Luz は CPU ベースのレンダリングで合理的なパフォーマンスを維持するため、複数の技術戦略を採用しています。
BVH アクセラレーション
多数のオブジェクトを含む複雑シーンを処理するため、Luz はバウンディングボリューム階層(BVH)アクセラレーションを使用します。これには、ビン分割されたサーフェスエリアヒューリスティック(SAH)で構築されたパックドメッシュ BVH と、交差テストを最小化するためのニアファースト走査が含まれます。
アダプティブサンプリングとデノイジング
レンダリング時間を最適化するため、Luz はピクセル単位のアダプティブサンプリングを実装しています。エンジンは最小サンプル数(--adaptive-min-samples で定義)で描画し、その後定期的に輝度と RGB の信頼区間をチェックしてピクセルが収束したか判定します。これにより、安定した色に達したピクセルへの無駄な計算を防ぎます。
さらに、Luz には NFOR スタイルのフィーチャーバッファデノイザーが搭載されています。これにより、ユーザーはデノイズ済みの補助画像(render_denoised.bmp)を生成でき、プレビューやクリーンな画像に必要な総サンプル数を削減するのに特に有用です。
ツールと統合
Luz はカスタムシーンファイルと外部エクスポーターを通じて、既存の 3D ワークフローに統合できるよう設計されています。
Blender 連携
Luz には Python ベースのエクスポーターが同梱されており、Blender から .luz フォーマットへシーンを転送できます。このツールは Blender の Python API を利用して必要なシーンファイルを書き出し、Luz 内でのレンダリング用に OBJ メッシュをエクスポートします。
ビルドとベンチマーク
本プロジェクトは C++20 で構築され、Makefile または CMake 3.16+ でコンパイル可能です。最大パフォーマンスを得るため、ビルドシステムはデフォルトで -O3 最適化、CPU 固有チューニングのための -march=native、およびリンク時最適化(LTO)を使用します。
Luz には決定論的ベンチマークハーネスも含まれており、レンダー、デノイズ、ポストプロセスの各時間を詳細に分解して提供します。これにより、開発者はコード変更がパフォーマンスに与える影響を測定できます。
コミュニティの視点と開発
ユーザー martiano によって開発された Luz は、"Ray Tracing in One Weekend" シリーズに触発された個人プロジェクトとして始まりました。作者は当初 AI を使用せずにコーディングしたと述べていますが、最近のクリーンアップや機能追加には AI ツールが利用されたとしています。
開発者コミュニティの議論では、レイトレーサーを構築することがグラフィックスプログラマにとっての "通過儀礼" であるという魅力が強調されています。一部のユーザーは "AI なし" が "Rust で書かれた" と同様のマーケティングフックになっていると指摘する一方で、概念的なシンプルさと実装の複雑さがレイトレーシングをやりがいのある技術的挑戦にしていると強調しています。
"レイトレーシングは概念的には非常にシンプルな問題ですが、実装上の多くの課題のために多くの頭脳リソースを必要とし続けています。"
技術仕様サマリー
| Feature | Implementation |
|---|---|
| Language | C++20 |
| Dependencies | Zero third-party libraries |
| Acceleration | BVH with binned SAH |
| Sampling | Monte Carlo / Adaptive |
| Denoising | NFOR-style feature-buffer |
| Compatibility | macOS, Linux, Windows |