void SubsurfaceFromDiffuse(const BSSRDFTable &t, const Spectrum &rhoEff, const Spectrum &mfp, Spectrum *sigma_a, Spectrum *sigma_s) { for (int c = 0; c < Spectrum::nSamples; ++c) { Float rho = InvertCatmullRom(t.nRhoSamples, t.rhoSamples.get(), t.rhoEff.get(), rhoEff[c]); (*sigma_s)[c] = rho / mfp[c]; (*sigma_a)[c] = (1 - rho) / mfp[c]; } }
void SubsurfaceFromDiffuse(const BSSRDFTable &table, const Spectrum &Kd, const Spectrum &sigma_t, Spectrum *sigma_a, Spectrum *sigma_s) { for (int c = 0; c < Spectrum::nSamples; ++c) { Float rho = InvertCatmullRom(table.nRhoSamples, table.rhoSamples.get(), table.rhoEff.get(), Kd[c]); (*sigma_s)[c] = rho * sigma_t[c]; (*sigma_a)[c] = (1 - rho) * sigma_t[c]; } }