a few bugfixes
parent
93217958fb
commit
cffde41f80
Binary file not shown.
Before Width: | Height: | Size: 171 KiB After Width: | Height: | Size: 185 KiB |
|
@ -43,8 +43,8 @@ MTS_NAMESPACE_BEGIN
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
* \renderings{
|
* \renderings{
|
||||||
* \rendering{$\sigma_s=2$, $\sigma_a=0.1$, thickness$=0.1$}{bsdf_hk_1}
|
* \rendering{An index-matched scattering layer with parameters $\sigma_s=2$, $\sigma_a=0.1$, thickness$=0.1$}{bsdf_hk_1}
|
||||||
* \rendering{\code{ketchup} material preset}{bsdf_hk_2}
|
* \rendering{Example of the HK model with a dielectric coating (and the \code{ketchup} material preset, see \lstref{hk-coated})}{bsdf_hk_2}
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
* This plugin provides an implementation of the Hanrahan-Krueger BSDF
|
* This plugin provides an implementation of the Hanrahan-Krueger BSDF
|
||||||
|
@ -60,8 +60,8 @@ MTS_NAMESPACE_BEGIN
|
||||||
* \begin{xml}
|
* \begin{xml}
|
||||||
* <bsdf type="hk">
|
* <bsdf type="hk">
|
||||||
* <spectrum name="sigmaS" value="2"/>
|
* <spectrum name="sigmaS" value="2"/>
|
||||||
* <spectrum name="sigmaA" value="0.05"/>
|
* <spectrum name="sigmaA" value="0.1"/>
|
||||||
* <float name="thickness" value="1"/>
|
* <float name="thickness" value="0.1"/>
|
||||||
*
|
*
|
||||||
* <phase type="hg">
|
* <phase type="hg">
|
||||||
* <float name="g" value="0.8"/>
|
* <float name="g" value="0.8"/>
|
||||||
|
@ -74,19 +74,14 @@ MTS_NAMESPACE_BEGIN
|
||||||
* of refraction are mismatched. The combination of these two plugins
|
* of refraction are mismatched. The combination of these two plugins
|
||||||
* reproduces the full model proposed in \cite{Hanrahan1993Reflection}.
|
* reproduces the full model proposed in \cite{Hanrahan1993Reflection}.
|
||||||
*
|
*
|
||||||
* \begin{xml}
|
* \begin{xml}[caption=A thin dielectric layer with measured ketchup scattering parameters, label=lst:hk-coated]
|
||||||
* <bsdf type="coating">
|
* <bsdf type="coating">
|
||||||
* <float name="extIOR" value="1.0"/>
|
* <float name="extIOR" value="1.0"/>
|
||||||
* <float name="intIOR" value="1.5"/>
|
* <float name="intIOR" value="1.5"/>
|
||||||
*
|
*
|
||||||
* <bsdf type="hk">
|
* <bsdf type="hk">
|
||||||
* <spectrum name="sigmaS" value="2"/>
|
* <string name="material" value="ketchup"/>
|
||||||
* <spectrum name="sigmaA" value="0.05"/>
|
* <float name="thickness" value="0.01"/>
|
||||||
* <float name="thickness" value="1"/>
|
|
||||||
*
|
|
||||||
* <phase type="hg">
|
|
||||||
* <float name="g" value="0.8"/>
|
|
||||||
* </phase>
|
|
||||||
* </bsdf>
|
* </bsdf>
|
||||||
* </bsdf>
|
* </bsdf>
|
||||||
* \end{xml}
|
* \end{xml}
|
||||||
|
|
|
@ -275,8 +275,6 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
MTS_DECLARE_CLASS()
|
MTS_DECLARE_CLASS()
|
||||||
private:
|
|
||||||
bool m_strictNormals;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
MTS_IMPLEMENT_CLASS_S(SimpleVolumetricPathTracer, false, MonteCarloIntegrator)
|
MTS_IMPLEMENT_CLASS_S(SimpleVolumetricPathTracer, false, MonteCarloIntegrator)
|
||||||
|
|
|
@ -54,6 +54,7 @@ void Medium::configure() {
|
||||||
if (m_phaseFunction == NULL) {
|
if (m_phaseFunction == NULL) {
|
||||||
m_phaseFunction = static_cast<PhaseFunction *> (PluginManager::getInstance()->
|
m_phaseFunction = static_cast<PhaseFunction *> (PluginManager::getInstance()->
|
||||||
createObject(MTS_CLASS(PhaseFunction), Properties("isotropic")));
|
createObject(MTS_CLASS(PhaseFunction), Properties("isotropic")));
|
||||||
|
m_phaseFunction->configure();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -110,7 +110,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void configure() {
|
void configure() {
|
||||||
int mipMapLevel = std::min(3, m_mipmap->getLevels()-1);
|
int mipMapLevel = std::min(0, m_mipmap->getLevels()-1);
|
||||||
m_pdfResolution = m_mipmap->getLevelResolution(mipMapLevel);
|
m_pdfResolution = m_mipmap->getLevelResolution(mipMapLevel);
|
||||||
m_pdfInvResolution = Vector2(1.0f / m_pdfResolution.x,
|
m_pdfInvResolution = Vector2(1.0f / m_pdfResolution.x,
|
||||||
1.0f / m_pdfResolution.y);
|
1.0f / m_pdfResolution.y);
|
||||||
|
|
|
@ -57,7 +57,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
* \parameter{resolution}{\Integer}{Specifies the resolution of the precomputed
|
* \parameter{resolution}{\Integer}{Specifies the resolution of the precomputed
|
||||||
* image that is used to represent the sky environment map
|
* image that is used to represent the sky environment map
|
||||||
* \default{256}}
|
* \default{256}}
|
||||||
* \parameter{intensityScale}{\Float}{
|
* \parameter{skyScale}{\Float}{
|
||||||
* This parameter can be used to scale the the amount of illumination
|
* This parameter can be used to scale the the amount of illumination
|
||||||
* emitted by the sky luminaire, for instance to change its units. To
|
* emitted by the sky luminaire, for instance to change its units. To
|
||||||
* switch from photometric ($\nicefrac{W}{m^2\cdot sr}$)
|
* switch from photometric ($\nicefrac{W}{m^2\cdot sr}$)
|
||||||
|
@ -164,7 +164,7 @@ class SkyLuminaire : public Luminaire {
|
||||||
public:
|
public:
|
||||||
SkyLuminaire(const Properties &props)
|
SkyLuminaire(const Properties &props)
|
||||||
: Luminaire(props) {
|
: Luminaire(props) {
|
||||||
m_intensityScale = props.getFloat("intensityScale", 1.0f);
|
m_scale = props.getFloat("skyScale", 1.0f);
|
||||||
m_turbidity = props.getFloat("turbidity", 3.0f);
|
m_turbidity = props.getFloat("turbidity", 3.0f);
|
||||||
if (m_turbidity < 1 || m_turbidity > 30)
|
if (m_turbidity < 1 || m_turbidity > 30)
|
||||||
Log(EError, "The turbidity parameter must be in the range [1,30]!");
|
Log(EError, "The turbidity parameter must be in the range [1,30]!");
|
||||||
|
@ -182,7 +182,7 @@ public:
|
||||||
|
|
||||||
SkyLuminaire(Stream *stream, InstanceManager *manager)
|
SkyLuminaire(Stream *stream, InstanceManager *manager)
|
||||||
: Luminaire(stream, manager) {
|
: Luminaire(stream, manager) {
|
||||||
m_intensityScale = stream->readFloat();
|
m_scale = stream->readFloat();
|
||||||
m_turbidity = stream->readFloat();
|
m_turbidity = stream->readFloat();
|
||||||
m_thetaS = stream->readFloat();
|
m_thetaS = stream->readFloat();
|
||||||
m_phiS = stream->readFloat();
|
m_phiS = stream->readFloat();
|
||||||
|
@ -194,7 +194,7 @@ public:
|
||||||
|
|
||||||
void serialize(Stream *stream, InstanceManager *manager) const {
|
void serialize(Stream *stream, InstanceManager *manager) const {
|
||||||
Luminaire::serialize(stream, manager);
|
Luminaire::serialize(stream, manager);
|
||||||
stream->writeFloat(m_intensityScale);
|
stream->writeFloat(m_scale);
|
||||||
stream->writeFloat(m_turbidity);
|
stream->writeFloat(m_turbidity);
|
||||||
stream->writeFloat(m_thetaS);
|
stream->writeFloat(m_thetaS);
|
||||||
stream->writeFloat(m_phiS);
|
stream->writeFloat(m_phiS);
|
||||||
|
@ -265,7 +265,7 @@ public:
|
||||||
Float theta = (i+.5f)*factor.x;
|
Float theta = (i+.5f)*factor.x;
|
||||||
for (int j=0; j<phiBins; ++j) {
|
for (int j=0; j<phiBins; ++j) {
|
||||||
Float phi = (j+.5f)*factor.y;
|
Float phi = (j+.5f)*factor.y;
|
||||||
Spectrum s = getSkySpectralRadiance(theta, phi) * m_intensityScale;
|
Spectrum s = getSkySpectralRadiance(theta, phi) * m_scale;
|
||||||
Float r, g, b;
|
Float r, g, b;
|
||||||
s.toLinearRGB(r, g, b);
|
s.toLinearRGB(r, g, b);
|
||||||
*target++ = r; *target++ = g;
|
*target++ = r; *target++ = g;
|
||||||
|
@ -290,7 +290,7 @@ public:
|
||||||
|
|
||||||
Spectrum Le(const Ray &ray) const {
|
Spectrum Le(const Ray &ray) const {
|
||||||
Point2 coords = fromSphere(ray.d);
|
Point2 coords = fromSphere(ray.d);
|
||||||
return getSkySpectralRadiance(coords.x, coords.y) * m_intensityScale;
|
return getSkySpectralRadiance(coords.x, coords.y) * m_scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string toString() const {
|
std::string toString() const {
|
||||||
|
@ -299,7 +299,7 @@ public:
|
||||||
<< " turbidity = " << m_turbidity << "," << endl
|
<< " turbidity = " << m_turbidity << "," << endl
|
||||||
<< " sunPos = [theta: " << m_thetaS << ", phi: "<< m_phiS << "]," << endl
|
<< " sunPos = [theta: " << m_thetaS << ", phi: "<< m_phiS << "]," << endl
|
||||||
<< " zenithL = " << m_zenithL << "," << endl
|
<< " zenithL = " << m_zenithL << "," << endl
|
||||||
<< " intensityScale = " << m_intensityScale << endl
|
<< " skyScale = " << m_scale << endl
|
||||||
<< "]";
|
<< "]";
|
||||||
return oss.str();
|
return oss.str();
|
||||||
}
|
}
|
||||||
|
@ -385,7 +385,7 @@ protected:
|
||||||
/* Environment map resolution */
|
/* Environment map resolution */
|
||||||
int m_resolution;
|
int m_resolution;
|
||||||
/* Constant scale factor applied to the model */
|
/* Constant scale factor applied to the model */
|
||||||
Float m_intensityScale;
|
Float m_scale;
|
||||||
/* The turbidity of the sky ranges normally from 1 to 30.
|
/* The turbidity of the sky ranges normally from 1 to 30.
|
||||||
For clear skies values in range [2,6] are useful. */
|
For clear skies values in range [2,6] are useful. */
|
||||||
Float m_turbidity;
|
Float m_turbidity;
|
||||||
|
|
|
@ -58,12 +58,13 @@ MTS_NAMESPACE_BEGIN
|
||||||
* \parameter{resolution}{\Integer}{Specifies the resolution of the precomputed
|
* \parameter{resolution}{\Integer}{Specifies the resolution of the precomputed
|
||||||
* image that is used to represent the sky environment map
|
* image that is used to represent the sky environment map
|
||||||
* \default{256}}
|
* \default{256}}
|
||||||
* \parameter{scale}{\Float}{
|
* \parameter{skyScale}{\Float}{
|
||||||
* This parameter can be used to scale the the amount of illumination
|
* This parameter can be used to scale the the amount of illumination
|
||||||
* emitted by the sky luminaire, for instance to change its units. To
|
* emitted by the sky.
|
||||||
* switch from photometric ($\nicefrac{W}{m^2\cdot sr}$)
|
* }
|
||||||
* to arbitrary but convenient units in the $[0,1]$ range, set
|
* \parameter{sunScale}{\Float}{
|
||||||
* this parameter to \code{1e-5}.\default{1}.
|
* This parameter can be used to scale the the amount of illumination
|
||||||
|
* emitted by the sun.
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
|
|
|
@ -86,6 +86,7 @@ public:
|
||||||
HeterogeneousMedium(const Properties &props)
|
HeterogeneousMedium(const Properties &props)
|
||||||
: Medium(props) {
|
: Medium(props) {
|
||||||
m_stepSize = props.getFloat("stepSize", 0);
|
m_stepSize = props.getFloat("stepSize", 0);
|
||||||
|
m_densityMultiplier = props.getFloat("densityMultiplier", 1);
|
||||||
if (props.hasProperty("sigmaS") || props.hasProperty("sigmaA"))
|
if (props.hasProperty("sigmaS") || props.hasProperty("sigmaA"))
|
||||||
Log(EError, "The 'sigmaS' and 'sigmaA' properties are only supported by "
|
Log(EError, "The 'sigmaS' and 'sigmaA' properties are only supported by "
|
||||||
"homogeneous media. Please use nested volume instances to supply "
|
"homogeneous media. Please use nested volume instances to supply "
|
||||||
|
|
Loading…
Reference in New Issue