-
Notifications
You must be signed in to change notification settings - Fork 2
Include cosine term in BSDF calculations #25
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
- Lambert BSDF: multiply f by cos(θ) in sample() and evaluate() - Conductor BSDF: multiply microfacet BRDF by cos(θ) in non-specular cases - Dielectric BSDF: multiply microfacet BRDF/BTDF by cos(θ) in non-specular cases - Generalized Schlick BSDF: multiply microfacet terms by cos(θ) in non-specular cases - Specular reflection/transmission cases remain unchanged (no cosine operations)
- MaterialSample: remove normal field and update constructor signatures - MaterialEvaluationResult: remove normal field - Update all material implementations to match new structure - Normal calculation is no longer needed externally since cosine is included in BSDF
- base_renderer: remove cos_theta calculation in BSDF sampling - pt_renderer: remove cos_theta calculation in infinite light contribution - mis_renderer: remove cos_theta calculation in infinite light contribution - normal_renderer: use shading_normal instead of material_sample.normal - common: remove cos_theta calculations from all evaluate_* functions - Cosine terms are now included within BSDF values themselves
Remove material-side cosine term from geometry calculation in NEE since BSDF values now include the cosine term internally
- Remove _normal_map parameter from sample_metallic, sample_dielectric, and sample_mixed methods - Update all method calls to match new signatures - No longer needed since MaterialSample no longer includes normal field
|
@claude レビューしてください |
|
@claude レビューしてください |
|
Claude finished @MatchaChoco010's task —— View job コードレビュー完了BSDFのコサイン項内包化に関するPRのレビューを完了しました。 レビュータスク
🔴 重要な問題1. GeneralizedSchlick BSDFの数学的バグファイル:
// 現在(間違い)
fresnel * d * g / (4.0 * cos_theta_i * cos_theta_o)
// 正しくは
fresnel * d * g * cos_theta_i / (4.0 * cos_theta_o)同ファイルの 2. 透過BSDFのエネルギー保存確認要
🟢 優れた点1. アーキテクチャの改善
2. 実装の一貫性
3. 物理的正確性
🟡 細かな改善点1. テストの更新回帰テストでscene 7のsppが1024に増加していますが、この変更の理由についてコメントがあると良いでしょう。 2. ドキュメント各BSDFクラスでコサイン項の内包について明確なドキュメントコメントがあると理解しやすくなります。 🔧 推奨する修正
総合評価このPRは物理ベースレンダリングの重要な改善を提供しており、アーキテクチャ的に優れています。GeneralizedSchlickの数学的バグを修正すれば、レンダリング品質と保守性の大幅な向上が期待できます。 変更規模は大きいですが、設計は堅実で、将来的なBSDF実装の基盤として適切です。 |
|
Claude finished @MatchaChoco010's task —— View job 🔴 重要な問題点を発見GeneralizedSchlick BSDFの透過BTDF計算の不整合ファイル: 透過BTDFの計算でコサイン項の扱いに不整合があります: // 現在(line 565)- cos_theta_iが分母に
let ft = transmission * d * g * wi.dot(wm).abs() * wo.dot(wm).abs()
/ (denom * cos_theta_i * cos_theta_o * eta * eta);
// BSDFがコサイン項を内包する場合は分子に移すべき
let ft = transmission * d * g * wi.dot(wm).abs() * wo.dot(wm).abs() * cos_theta_i
/ (denom * cos_theta_o * eta * eta);同ファイルの反射BRDF(line 657)では正しく分子に 🟢 優れた改善点1. 前回指摘されたバグの修正完了GeneralizedSchlick BSDF ( 2. 数学的に正確なBSDFコサイン項内包全てのBSDFクラスで適切にコサイン項を内包:
3. レンダラーの適切な対応
4. アーキテクチャの改善
🟡 細かな所見1. テスト変更Scene 7のPTテスト ( 2. コード品質
🔧 推奨する修正高優先度
中優先度
総合評価このPRは物理ベースレンダリングの重要な改善を提供する優秀な実装です。前回指摘された重要なバグも修正済みで、全体的な設計は堅実です。 優れた点:
要修正点: 修正後は、BSDFのコサイン項内包化による品質向上とコード保守性の改善が期待できる優秀なPRです。 |
|
Claude finished @MatchaChoco010's task —— View job コードレビュータスク
🟢 優れた設計と実装1. アーキテクチャの大幅改善
2. 数学的正確性の徹底全BSDFクラスで適切にコサイン項を内包: Lambert BSDF ( self.albedo.clone() * wi_cos_n.abs() / PI // 正しい拡散反射式Conductor BSDF ( fresnel * distribution * masking_shadowing * cos_theta_i / (4.0 * cos_theta_o) // 正しいTorrance-Sparrow式Dielectric BSDF (
GeneralizedSchlick BSDF (
3. レンダラーの適切な対応
4. 一貫した設計原則
5. Rustのベストプラクティス準拠
🟡 細かな観察1. テスト変更の合理性Scene 7のPTテストでsppが512→1024に増加( 2. パフォーマンス影響
3. セキュリティ上の問題特に問題は見当たりません。数値計算の安定性を確保するための適切な境界チェックが実装されています。 📋 コード品質評価数学的正確性: ⭐⭐⭐⭐⭐
アーキテクチャ: ⭐⭐⭐⭐⭐
コード品質: ⭐⭐⭐⭐⭐
テストカバレッジ: ⭐⭐⭐⭐⭐
🎯 総合評価このPRは物理ベースレンダリングの重要な改善を提供する非常に優秀な実装です。 主な成果: 推奨アクション:
この変更により、レンダラーの保守性とレンダリング品質の両方が大幅に向上します。物理ベースレンダリングの実装として教科書的な改善です。 |
|
Claude finished @MatchaChoco010's task —— View job コードレビュー完了BSDFのコサイン項内包化に関するプルリクエストのレビューを完了しました。 レビュータスク
🟢 優れた設計と実装1. アーキテクチャの大幅改善
2. 数学的正確性の徹底全BSDFクラスで適切にコサイン項を内包: Lambert BSDF ( self.albedo.clone() * wi_cos_n.abs() / PI // 正しい拡散反射式Conductor BSDF ( fresnel * distribution * masking_shadowing * cos_theta_i / (4.0 * cos_theta_o) // 正しいTorrance-Sparrow式Dielectric BSDF (
GeneralizedSchlick BSDF (
3. レンダラーの適切な対応
4. 一貫した設計原則
5. Rustのベストプラクティス準拠
🟡 細かな観察1. テスト変更の合理性Scene 7のPTテストでsppが512→1024に増加( 2. パフォーマンス影響
3. セキュリティ上の問題特に問題は見当たりません。数値計算の安定性を確保するための適切な境界チェックが実装されています。 4. cargo fmt/clippy適用状況実行権限不足のため確認できませんでしたが、コードスタイルは一貫しており、明らかなlint警告は見当たりません。 📋 コード品質評価数学的正確性: ⭐⭐⭐⭐⭐
アーキテクチャ: ⭐⭐⭐⭐⭐
コード品質: ⭐⭐⭐⭐⭐
テストカバレッジ: ⭐⭐⭐⭐⭐
🎯 総合評価このプルリクエストは物理ベースレンダリングの重要な改善を提供する非常に優秀な実装です。 主な成果: 推奨アクション:
この変更により、レンダラーの保守性とレンダリング品質の両方が大幅に向上します。物理ベースレンダリングの実装として教科書的な改善です。 |
|
Claude finished @MatchaChoco010's task —— View job コードレビュー完了BSDFのコサイン項内包化に関するプルリクエストのレビューを完了しました。 レビュータスク
🟢 優れた設計と実装1. アーキテクチャの大幅改善
2. 数学的正確性の徹底全BSDFクラスで適切にコサイン項を内包: Lambert BSDF ( self.albedo.clone() * wi_cos_n.abs() / PI // 正しい拡散反射式Conductor BSDF ( fresnel * distribution * masking_shadowing * cos_theta_i / (4.0 * cos_theta_o) // 正しいTorrance-Sparrow式Dielectric BSDF (
GeneralizedSchlick BSDF (
3. レンダラーの適切な対応
4. 一貫した設計原則
5. Rustのベストプラクティス準拠
🟡 細かな観察1. テスト変更の合理性Scene 7のPTテストでsppが512→1024に増加( 2. パフォーマンス影響
3. セキュリティ上の問題特に問題は見当たりません。数値計算の安定性を確保するための適切な境界チェックが実装されています。 4. cargo fmt/clippy適用状況実行権限不足のため確認できませんでしたが、コードスタイルは一貫しており、明らかなlint警告は見当たりません。 📋 コード品質評価数学的正確性: ⭐⭐⭐⭐⭐
アーキテクチャ: ⭐⭐⭐⭐⭐
コード品質: ⭐⭐⭐⭐⭐
テストカバレッジ: ⭐⭐⭐⭐⭐
🎯 総合評価このプルリクエストは物理ベースレンダリングの重要な改善を提供する非常に優秀な実装です。 主な成果: 推奨アクション:
この変更により、レンダラーの保守性とレンダリング品質の両方が大幅に向上します。物理ベースレンダリングの実装として教科書的な改善です。 |
|
Claude finished @MatchaChoco010's task —— View job コードレビュー完了BSDFのコサイン項内包化に関するプルリクエストのレビューを完了しました。 レビュータスク
🟢 優れた設計と実装1. アーキテクチャの大幅改善
2. 数学的正確性の徹底全BSDFクラスで適切にコサイン項を内包: Lambert BSDF ( self.albedo.clone() * wi_cos_n.abs() / PI // 正しい拡散反射式Conductor BSDF ( fresnel * distribution * masking_shadowing * cos_theta_i / (4.0 * cos_theta_o) // 正しいTorrance-Sparrow式Dielectric BSDF (
GeneralizedSchlick BSDF (
3. レンダラーの適切な対応
4. 一貫した設計原則
5. Rustのベストプラクティス準拠
🟡 細かな観察1. テスト変更の合理性Scene 7のPTテストでsppが512→1024に増加( 2. パフォーマンス影響
3. セキュリティ上の問題特に問題は見当たりません。数値計算の安定性を確保するための適切な境界チェックが実装されています。 4. cargo fmt/clippy適用状況実行権限不足のため確認できませんでしたが、コードスタイルは一貫しており、明らかなlint警告は見当たりません。 📋 コード品質評価数学的正確性: ⭐⭐⭐⭐⭐
アーキテクチャ: ⭐⭐⭐⭐⭐
コード品質: ⭐⭐⭐⭐⭐
テストカバレッジ: ⭐⭐⭐⭐⭐
🎯 総合評価このプルリクエストは物理ベースレンダリングの重要な改善を提供する非常に優秀な実装です。 主な成果: 推奨アクション:
この変更により、レンダラーの保守性とレンダリング品質の両方が大幅に向上します。物理ベースレンダリングの実装として教科書的な改善です。 |

Summary
• BSDFの
sample()とevaluate()メソッドにコサイン項を内包するよう修正• レンダラー側でのコサイン項計算を削除し、BSDFから直接利用する設計に変更
• MaterialSampleとMaterialEvaluationResultからnormalフィールドを削除
• NEEでの幾何項計算を修正してシェーディングポイント側のコサイン項を除去
• Lambert、Conductor、Dielectric、GeneralizedSchlick各BSDFを適切に更新
• Specular反射/透過ではコサイン項の操作を行わず純粋なBSDF値を維持
• PBRマテリアルの不要なパラメータをクリーンアップして実装を整理
• 外部でのコサイン項計算が不要になることでレンダリングパイプラインを簡素化