diff --git a/src/films/specfilm.cpp b/src/films/specfilm.cpp index 9307e9b1f1..a50ec1d0d6 100644 --- a/src/films/specfilm.cpp +++ b/src/films/specfilm.cpp @@ -301,17 +301,12 @@ class SpecFilm final : public Film { SurfaceInteraction3f si = dr::zeros(); si.wavelengths = wavelengths; - // The SRF is not necessarily normalized, cancel out multiplicative factors - UnpolarizedSpectrum inv_spec = m_srf->eval(si); - inv_spec = dr::select(inv_spec != 0.f, dr::rcp(inv_spec), 1.f); - UnpolarizedSpectrum values = spec * inv_spec; - for (size_t j = 0; j < m_srfs.size(); ++j) { UnpolarizedSpectrum weights = m_srfs[j]->eval(si); aovs[j] = dr::zeros(); for (size_t i = 0; i::sample_wavelengths(const SurfaceInteraction3f& /*si*/, Mask active) const { if constexpr (is_spectral_v) { if (m_srf != nullptr) { - return m_srf->sample_spectrum( - dr::zeros(), - math::sample_shifted(sample), - active); + auto wavelengths = m_srf->sample_spectrum( + dr::zeros(), + math::sample_shifted(sample), + active).first; + SurfaceInteraction3f si; + si.wavelengths = wavelengths; + auto pdf = m_srf->pdf_spectrum(si, active); + auto weights = dr::select(pdf != 0.f, dr::rcp(pdf), 0.f); + return { wavelengths, weights }; } } else { DRJIT_MARK_USED(active);