Show HN: AIを使わずにC++でレイトレーサーをゼロから書きました
ある開発者が、サードパーティのライブラリに一切依存せず、ゼロからC++20で書かれたパストレーサー「Luz」を公開しました。モンテカルロパストレーシング、グローバルイルミネーション、BVHアクセラレーション、アダプティブサンプリング、デノイジング、大気散乱などの機能を備え、Blenderエクスポーターも含まれています。
最近、独立した開発者がLuzを発表しました。これは、サードパーティのライブラリを一切使用せず、C++20でゼロから書かれたパストレーサーです。このプロジェクトはGitHubで公開されており、現在3つのスターと1人のウォッチャーがいます。
Luzの主要な機能には、モンテカルロパストレーシング、グローバルイルミネーション、マルチスレッドCPUレンダリング、アダプティブサンプリング、およびNFORスタイルのデノイザーが含まれます。球体、平面、長方形、三角形、立方体、ボリューム、OBJメッシュなど、さまざまな形状をサポートし、ランバート、メタル、誘電体、エミッシブ、等方性などのマテリアルも利用可能です。光源はエリアライト、ポイントライト、スフィアライト、ディレクショナルライトに対応しています。
加速構造として、BVH(バウンディングボリューム階層)を採用しており、パックされたメッシュBVHとビニングSAH構築アルゴリズム、ニアファーストトラバーサルを実装しています。また、確率密度関数を用いた重点サンプリングもサポートしています。
さらに、Luzは大気散乱シミュレーション、被写界深度、アンチエイリアシング、露出制御、コントラスト調整、トーンマッピング、ガンマ補正、ブルームエフェクトを備えています。出力形式はBMPおよびTIFFです。
プロジェクトには、レンダリング、デノイジング、ポストプロセス、スコア比較のための決定論的ベンチマークフレームワークが含まれています。ビルドシステムはMakefileとCMakeをサポートし、macOS、Linux、Windowsで動作します。
コマンドラインインターフェースを使用すると、レンダリング解像度、サンプル数、アダプティブサンプリング、最大バウンス数、スレッド数などを制御できます。アダプティブサンプリングは、ピクセルの収束状況に応じてサンプル数を動的に調整し、効率を向上させます。
Luzには、BlenderのPython APIを介してシーンを.luz形式にエクスポートするBlenderエクスポーターも含まれています。また、詳細なドキュメントとサンプルシーンが用意されています。
開発者は、『Ray Tracing in One Weekend』シリーズの書籍に触発されたと述べています。このプロジェクトはMITライセンスの下で公開されています。