new TrowbridgeReitzSurfaceScatterer(foldsAspectRatio, IOR_STRATUM_CORNEUM, 1.0))
.addLayerToBottom( // stratum corneum
new SequentialSurfaceScatterer()
.addScatterer(new TabularPerturbingSurfaceScatterer(stratum_corneum_wavelengths, exitant_angles, stratum_corneum_perturb, 1000))
.addScatterer(new AbsorbingSurfaceScatterer(
new ScaledFunction1(
concentrationBetaCaroteneInStratumCorneum / 537.0,
OMLC_PRAHL_BETACAROTENE),
thicknessStratumCorneum)))
.addLayerToBottom( // stratum corneum / epidermis interface
new FresnelSurfaceScatterer(IOR_EPIDERMIS, IOR_STRATUM_CORNEUM))
.addLayerToBottom( // epidermis
new SequentialSurfaceScatterer()
.addScatterer(new TabularPerturbingSurfaceScatterer(epidermis_wavelengths, exitant_angles, epidermis_perturb, 1000))
.addScatterer(new AbsorbingSurfaceScatterer(
new SumFunction1()
.addChild(new ScaledFunction1(
pctMelanosomesInEpidermis * concentrationEumelanin,
OMLC_EUMELANIN_EXT_MGML))
.addChild(new ScaledFunction1(
pctMelanosomesInEpidermis * concentrationPheomelanin,
OMLC_PHEOMELANIN_EXT_MGML))
.addChild(new ScaledFunction1(
(1.0 - pctMelanosomesInEpidermis) * concentrationBetaCaroteneInEpidermis / 537.0,
OMLC_PRAHL_BETACAROTENE)),
thicknessEpidermis)))
.addLayerToBottom( // epidermis / papillary dermis interface
new FresnelSurfaceScatterer(IOR_PAPILLARY_DERMIS, IOR_EPIDERMIS))
.addLayerToBottom( // papillary dermis
new SequentialSurfaceScatterer()
.addScatterer(new DiffusingSurfaceScatterer())
.addScatterer(new AbsorbingSurfaceScatterer(
new SumFunction1()
.addChild(new ScaledFunction1(
pctWholeBloodInPapillaryDermis * concentrationHemoglobinInBlood * ratioOxyDeoxyHemoglobin / 66500.0,
OMLC_PRAHL_OXYHEMOGLOBIN))
.addChild(new ScaledFunction1(
pctWholeBloodInPapillaryDermis * concentrationHemoglobinInBlood * (1.0 - ratioOxyDeoxyHemoglobin) / 66500.0,
OMLC_PRAHL_DEOXYHEMOGLOBIN))
.addChild(new ScaledFunction1(
pctWholeBloodInPapillaryDermis * concentrationBetaCaroteneInBlood / 537.0,
OMLC_PRAHL_BETACAROTENE))
.addChild(new ScaledFunction1(
pctWholeBloodInPapillaryDermis * concentrationBilirubinInBlood / 585.0,
OMLC_PRAHL_BILIRUBIN)),
thicknessPapillaryDermis)))
.addLayerToBottom( // papillary dermis / reticular dermis interface
new FresnelSurfaceScatterer(IOR_RETICULAR_DERMIS, IOR_PAPILLARY_DERMIS))
.addLayerToBottom( // reticular dermis
new SequentialSurfaceScatterer()
.addScatterer(new DiffusingSurfaceScatterer())
.addScatterer(new AbsorbingSurfaceScatterer(
new SumFunction1()
.addChild(new ScaledFunction1(
pctWholeBloodInReticularDermis * concentrationHemoglobinInBlood * ratioOxyDeoxyHemoglobin / 66500.0,
OMLC_PRAHL_OXYHEMOGLOBIN))
.addChild(new ScaledFunction1(
pctWholeBloodInReticularDermis * concentrationHemoglobinInBlood * (1.0 - ratioOxyDeoxyHemoglobin) / 66500.0,
OMLC_PRAHL_DEOXYHEMOGLOBIN))
.addChild(new ScaledFunction1(
pctWholeBloodInReticularDermis * concentrationBetaCaroteneInBlood / 537.0,
OMLC_PRAHL_BETACAROTENE))
.addChild(new ScaledFunction1(
pctWholeBloodInReticularDermis * concentrationBilirubinInBlood / 585.0,
OMLC_PRAHL_BILIRUBIN)),
thicknessReticularDermis)))
.addLayerToBottom( // reticular dermis / hypodermis interface
new LambertianSurfaceScatterer());