From d49e7d03007add0da079ddad0a338b0484d61b08 Mon Sep 17 00:00:00 2001 From: Moritz Gmeiner Date: Sun, 31 Dec 2023 13:47:03 +0100 Subject: [PATCH] fixed reflectance in Dielectric --- src/material.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/material.h b/src/material.h index c8fe960..84dd607 100644 --- a/src/material.h +++ b/src/material.h @@ -86,17 +86,18 @@ class Dielectric : public Material { Vec3 out_dir; + // Schlick approximation constexpr auto reflectance = [](f64 cos, f64 eta) { - auto r0 = (1 - eta) / (1 + eta); - r0 = r0 * r0; - return r0 * (1 - r0) * std::pow(1 - cos, 5); + auto r = (1 - eta) / (1 + eta); + f64 r2 = r * r; + return r2 + (1 - r2) * std::pow(1 - cos, 5); }; if (eta * sin_theta > 1.0 || reflectance(cos_theta, eta) > rand.GenUniform()) { - // can't refract, must reflect or Schlick approximation + // reflect out_dir = in.direction().reflect(hit_record.normal); } else { - // reflect + // refract out_dir = in.direction().refract(hit_record.normal, eta); }