RoughConductor(const Properties &props) : BSDF(props) { ref<FileResolver> fResolver = Thread::getThread()->getFileResolver(); m_specularReflectance = new ConstantSpectrumTexture( props.getSpectrum("specularReflectance", Spectrum(1.0f))); std::string materialName = props.getString("material", "Cu"); Spectrum intEta, intK; if (boost::to_lower_copy(materialName) == "none") { intEta = Spectrum(0.0f); intK = Spectrum(1.0f); } else { intEta.fromContinuousSpectrum(InterpolatedSpectrum( fResolver->resolve("data/ior/" + materialName + ".eta.spd"))); intK.fromContinuousSpectrum(InterpolatedSpectrum( fResolver->resolve("data/ior/" + materialName + ".k.spd"))); } Float extEta = lookupIOR(props, "extEta", "air"); m_eta = props.getSpectrum("eta", intEta) / extEta; m_k = props.getSpectrum("k", intK) / extEta; MicrofacetDistribution distr(props); m_type = distr.getType(); m_sampleVisible = distr.getSampleVisible(); m_alphaU = new ConstantFloatTexture(distr.getAlphaU()); if (distr.getAlphaU() == distr.getAlphaV()) m_alphaV = m_alphaU; else m_alphaV = new ConstantFloatTexture(distr.getAlphaV()); }
RoughCoating(const Properties &props) : BSDF(props) { /* Specifies the internal index of refraction at the interface */ Float intIOR = lookupIOR(props, "intIOR", "bk7"); /* Specifies the external index of refraction at the interface */ Float extIOR = lookupIOR(props, "extIOR", "air"); if (intIOR < 0 || extIOR < 0 || intIOR == extIOR) Log(EError, "The interior and exterior indices of " "refraction must be positive and differ!"); m_eta = intIOR / extIOR; m_invEta = 1 / m_eta; /* Specifies the absorption within the layer */ m_sigmaA = new ConstantSpectrumTexture( props.getSpectrum("sigmaA", Spectrum(0.0f))); /* Specifies the layer's thickness using the inverse units of sigmaA */ m_thickness = props.getFloat("thickness", 1); /* Specifies a multiplier for the specular reflectance component */ m_specularReflectance = new ConstantSpectrumTexture( props.getSpectrum("specularReflectance", Spectrum(1.0f))); m_distribution = MicrofacetDistribution( props.getString("distribution", "beckmann") ); if (m_distribution.isAnisotropic()) Log(EError, "The 'roughcoating' plugin currently does not support " "anisotropic microfacet distributions!"); m_alpha = new ConstantFloatTexture( props.getFloat("alpha", 0.1f)); m_specularSamplingWeight = 0.0f; }
SmoothConductor(const Properties &props) : BSDF(props) { ref<FileResolver> fResolver = Thread::getThread()->getFileResolver(); m_specularReflectance = new ConstantSpectrumTexture( props.getSpectrum("specularReflectance", Spectrum(1.0f))); std::string materialName = props.getString("material", "Cu"); Spectrum intEta, intK; if (boost::to_lower_copy(materialName) == "none") { intEta = Spectrum(0.0f); intK = Spectrum(1.0f); } else { intEta.fromContinuousSpectrum(InterpolatedSpectrum( fResolver->resolve("data/ior/" + materialName + ".eta.spd"))); intK.fromContinuousSpectrum(InterpolatedSpectrum( fResolver->resolve("data/ior/" + materialName + ".k.spd"))); } Float extEta = lookupIOR(props, "extEta", "air"); m_eta = props.getSpectrum("eta", intEta) / extEta; m_k = props.getSpectrum("k", intK) / extEta; }