added a 'none' conductor profile which has 100% reflectance regardless of the angle of incidence

metadata
Wenzel Jakob 2012-10-22 22:41:10 -04:00
parent 4a86baac4e
commit eb416b6c1c
2 changed files with 28 additions and 9 deletions

View File

@ -19,6 +19,7 @@
#include <mitsuba/render/bsdf.h>
#include <mitsuba/core/fresolver.h>
#include <mitsuba/hw/basicshader.h>
#include <boost/algorithm/string.hpp>
MTS_NAMESPACE_BEGIN
@ -70,6 +71,9 @@ MTS_NAMESPACE_BEGIN
* coatings, which are not actually conductors. These materials can also
* be used with this plugin, though note that the plugin will ignore any
* refraction component that the actual material might have had.
* There is also a special material profile named \code{none}, which disables
* the computation of Fresnel reflectances and produces an idealized
* 100% reflecting mirror.
*
* When using this plugin, you should ideally compile Mitsuba with support for
* spectral rendering to get the most accurate results. While it also works
@ -127,7 +131,7 @@ MTS_NAMESPACE_BEGIN
* K, K\_palik & Polycrystalline potassium && W & Tungsten \\
* Li, Li\_palik & Lithium && \\
* MgO, MgO\_palik & Magnesium oxide && \\
* Mo, Mo\_palik & Molybdenum && \\
* Mo, Mo\_palik & Molybdenum && none & No mat. profile ($\to$ 100% reflecting mirror)\\
* \bottomrule
* \end{tabular}
* \caption{
@ -151,11 +155,17 @@ public:
props.getSpectrum("specularReflectance", Spectrum(1.0f)));
std::string material = props.getString("material", "Cu");
Spectrum materialEta, materialK;
materialEta.fromContinuousSpectrum(InterpolatedSpectrum(
fResolver->resolve("data/ior/" + material + ".eta.spd")));
materialK.fromContinuousSpectrum(InterpolatedSpectrum(
fResolver->resolve("data/ior/" + material + ".k.spd")));
if (boost::to_lower_copy(material) == "none") {
materialEta = Spectrum(0.0f);
materialK = Spectrum(1.0f);
} else {
materialEta.fromContinuousSpectrum(InterpolatedSpectrum(
fResolver->resolve("data/ior/" + material + ".eta.spd")));
materialK.fromContinuousSpectrum(InterpolatedSpectrum(
fResolver->resolve("data/ior/" + material + ".k.spd")));
}
m_eta = props.getSpectrum("eta", materialEta);
m_k = props.getSpectrum("k", materialK);

View File

@ -102,6 +102,9 @@ MTS_NAMESPACE_BEGIN
* refraction information, this plugin can access a set of measured materials
* for which visible-spectrum information was publicly available
* (see \tblref{conductor-iors} for the full list).
* There is also a special material profile named \code{none}, which disables
* the computation of Fresnel reflectances and produces an idealized
* 100% reflecting mirror.
*
* When no parameters are given, the plugin activates the default settings,
* which describe copper with a light amount of roughness modeled using a
@ -157,10 +160,16 @@ public:
std::string material = props.getString("material", "Cu");
Spectrum materialEta, materialK;
materialEta.fromContinuousSpectrum(InterpolatedSpectrum(
fResolver->resolve("data/ior/" + material + ".eta.spd")));
materialK.fromContinuousSpectrum(InterpolatedSpectrum(
fResolver->resolve("data/ior/" + material + ".k.spd")));
if (boost::to_lower_copy(material) == "none") {
materialEta = Spectrum(0.0f);
materialK = Spectrum(1.0f);
} else {
materialEta.fromContinuousSpectrum(InterpolatedSpectrum(
fResolver->resolve("data/ior/" + material + ".eta.spd")));
materialK.fromContinuousSpectrum(InterpolatedSpectrum(
fResolver->resolve("data/ior/" + material + ".k.spd")));
}
m_eta = props.getSpectrum("eta", materialEta);
m_k = props.getSpectrum("k", materialK);