allow making VPLs diffuse for faster preview convergence
parent
271d1bbded
commit
eaf8ba36cb
|
@ -46,6 +46,12 @@ public:
|
||||||
/// Is shadow map generation generation performed in a single pass?
|
/// Is shadow map generation generation performed in a single pass?
|
||||||
inline bool isSinglePass() const { return m_singlePass; }
|
inline bool isSinglePass() const { return m_singlePass; }
|
||||||
|
|
||||||
|
/// Set whether or not non-diffuse VPLs are permitted
|
||||||
|
inline void setAllowNonDiffuseVPLs(bool allowNonDiffuseVPLs) { m_allowNonDiffuseVPLs = allowNonDiffuseVPLs; }
|
||||||
|
|
||||||
|
/// Are non-diffuse VPLs permitted? This is more realistic, but can take a long time to converge.
|
||||||
|
inline bool allowNonDiffuseVPLs() const { return m_allowNonDiffuseVPLs; }
|
||||||
|
|
||||||
/// Set the current shadow map resolution
|
/// Set the current shadow map resolution
|
||||||
inline void setShadowMapResolution(int resolution) { m_shadowMapResolution = resolution; }
|
inline void setShadowMapResolution(int resolution) { m_shadowMapResolution = resolution; }
|
||||||
|
|
||||||
|
@ -144,7 +150,7 @@ private:
|
||||||
bool hasLuminaire;
|
bool hasLuminaire;
|
||||||
int param_shadowMap, param_vplPos, param_camPos, param_vplPower;
|
int param_shadowMap, param_vplPos, param_camPos, param_vplPower;
|
||||||
int param_vplN, param_vplS, param_vplT, param_vplWi, param_vplUV;
|
int param_vplN, param_vplS, param_vplT, param_vplWi, param_vplUV;
|
||||||
int param_nearClip, param_invClipRange, param_minDist;
|
int param_nearClip, param_invClipRange, param_minDist, param_allowNonDiffuseVPLs;
|
||||||
|
|
||||||
inline VPLProgramConfiguration() { }
|
inline VPLProgramConfiguration() { }
|
||||||
|
|
||||||
|
@ -226,7 +232,7 @@ private:
|
||||||
ref<GPUTexture> m_shadowMap;
|
ref<GPUTexture> m_shadowMap;
|
||||||
Float m_nearClip, m_invClipRange;
|
Float m_nearClip, m_invClipRange;
|
||||||
int m_shadowMapResolution;
|
int m_shadowMapResolution;
|
||||||
bool m_singlePass;
|
bool m_singlePass, m_allowNonDiffuseVPLs;
|
||||||
|
|
||||||
/* Rendering related */
|
/* Rendering related */
|
||||||
std::map<std::string, ProgramAndConfiguration> m_programs;
|
std::map<std::string, ProgramAndConfiguration> m_programs;
|
||||||
|
|
|
@ -8,7 +8,7 @@ MTS_NAMESPACE_BEGIN
|
||||||
VPLShaderManager::VPLShaderManager(const Scene *scene, Renderer *renderer)
|
VPLShaderManager::VPLShaderManager(const Scene *scene, Renderer *renderer)
|
||||||
: m_scene(scene), m_renderer(renderer), m_clamping(0.1f),
|
: m_scene(scene), m_renderer(renderer), m_clamping(0.1f),
|
||||||
m_maxClipDist(std::numeric_limits<Float>::infinity()), m_initialized(false),
|
m_maxClipDist(std::numeric_limits<Float>::infinity()), m_initialized(false),
|
||||||
m_shadowMapResolution(512), m_singlePass(false) {
|
m_shadowMapResolution(512), m_singlePass(false), m_allowNonDiffuseVPLs(false) {
|
||||||
}
|
}
|
||||||
|
|
||||||
VPLShaderManager::~VPLShaderManager() {
|
VPLShaderManager::~VPLShaderManager() {
|
||||||
|
@ -320,6 +320,7 @@ void VPLShaderManager::configure(const VPL &vpl, const BSDF *bsdf, const Luminai
|
||||||
<< "uniform vec3 vplPower, vplS, vplT, vplN, vplWi;" << endl
|
<< "uniform vec3 vplPower, vplS, vplT, vplN, vplWi;" << endl
|
||||||
<< "uniform float nearClip, invClipRange, minDist;" << endl
|
<< "uniform float nearClip, invClipRange, minDist;" << endl
|
||||||
<< "uniform vec2 vplUV;" << endl
|
<< "uniform vec2 vplUV;" << endl
|
||||||
|
<< "uniform bool allowNonDiffuseVPLs;" << endl
|
||||||
<< endl
|
<< endl
|
||||||
<< "/* Inputs <- Vertex program */" << endl
|
<< "/* Inputs <- Vertex program */" << endl
|
||||||
<< "varying vec3 normal, tangent, lightVec, camVec;" << endl
|
<< "varying vec3 normal, tangent, lightVec, camVec;" << endl
|
||||||
|
@ -361,18 +362,20 @@ void VPLShaderManager::configure(const VPL &vpl, const BSDF *bsdf, const Luminai
|
||||||
<< " vec3 vplWo = -vec3(dot(vplS, nLightVec)," << endl
|
<< " vec3 vplWo = -vec3(dot(vplS, nLightVec)," << endl
|
||||||
<< " dot(vplT, nLightVec)," << endl
|
<< " dot(vplT, nLightVec)," << endl
|
||||||
<< " dot(vplN, nLightVec));" << endl
|
<< " dot(vplN, nLightVec));" << endl
|
||||||
<< " if (d < minDist) d = minDist;" << endl
|
<< " vec3 vplLo = vplPower;" << endl
|
||||||
<< " gl_FragColor.rgb = " << bsdfEvalName << "(uv, wi, wo)" << endl;
|
<< " if (allowNonDiffuseVPLs)" << endl
|
||||||
|
<< " vplLo *= " << vplEvalName;
|
||||||
if (vpl.type == ESurfaceVPL)
|
if (vpl.type == ESurfaceVPL)
|
||||||
oss << " * " << vplEvalName << "(vplUV, vplWi, vplWo)" << endl;
|
oss << "(vplUV, vplWi, vplWo);" << endl;
|
||||||
else
|
else
|
||||||
oss << " * " << vplEvalName << "_dir(vplWo)" << endl;
|
oss << "_dir(vplWo);" << endl;
|
||||||
|
oss << " if (d < minDist) d = minDist;" << endl
|
||||||
|
<< " gl_FragColor.rgb = vplLo * " << bsdfEvalName << "(uv, wi, wo)" << endl;
|
||||||
if (vpl.type == ESurfaceVPL || (vpl.type == ELuminaireVPL
|
if (vpl.type == ESurfaceVPL || (vpl.type == ELuminaireVPL
|
||||||
&& (vpl.luminaire->getType() & Luminaire::EOnSurface)))
|
&& (vpl.luminaire->getType() & Luminaire::EOnSurface)))
|
||||||
oss << " * vplPower * shadow * abs(cosTheta(wo) * cosTheta(vplWo)) / (d*d)";
|
oss << " * (shadow * abs(cosTheta(wo) * cosTheta(vplWo)) / (d*d))";
|
||||||
else
|
else
|
||||||
oss << " * vplPower * shadow * abs(cosTheta(wo)) / (d*d)";
|
oss << " * (shadow * abs(cosTheta(wo)) / (d*d))";
|
||||||
if (luminaire != NULL) {
|
if (luminaire != NULL) {
|
||||||
oss << endl;
|
oss << endl;
|
||||||
oss << " + " << lumEvalName << "_area(uv)"
|
oss << " + " << lumEvalName << "_area(uv)"
|
||||||
|
@ -399,6 +402,7 @@ void VPLShaderManager::configure(const VPL &vpl, const BSDF *bsdf, const Luminai
|
||||||
m_targetConfig.param_nearClip = program->getParameterID("nearClip", false);
|
m_targetConfig.param_nearClip = program->getParameterID("nearClip", false);
|
||||||
m_targetConfig.param_invClipRange = program->getParameterID("invClipRange", false);
|
m_targetConfig.param_invClipRange = program->getParameterID("invClipRange", false);
|
||||||
m_targetConfig.param_minDist = program->getParameterID("minDist", false);
|
m_targetConfig.param_minDist = program->getParameterID("minDist", false);
|
||||||
|
m_targetConfig.param_allowNonDiffuseVPLs = program->getParameterID("allowNonDiffuseVPLs", false);
|
||||||
m_current.program = program;
|
m_current.program = program;
|
||||||
m_current.config = m_targetConfig;
|
m_current.config = m_targetConfig;
|
||||||
m_programs[configName] = m_current;
|
m_programs[configName] = m_current;
|
||||||
|
@ -413,14 +417,19 @@ void VPLShaderManager::configure(const VPL &vpl, const BSDF *bsdf, const Luminai
|
||||||
program->setParameter(config.param_shadowMap, m_shadowMap);
|
program->setParameter(config.param_shadowMap, m_shadowMap);
|
||||||
program->setParameter(config.param_vplPos, vpl.its.p);
|
program->setParameter(config.param_vplPos, vpl.its.p);
|
||||||
program->setParameter(config.param_camPos, camPos);
|
program->setParameter(config.param_camPos, camPos);
|
||||||
program->setParameter(config.param_vplPower, vpl.P);
|
|
||||||
program->setParameter(config.param_vplN, vpl.its.shFrame.n);
|
program->setParameter(config.param_vplN, vpl.its.shFrame.n);
|
||||||
program->setParameter(config.param_vplS, vpl.its.shFrame.s);
|
program->setParameter(config.param_vplS, vpl.its.shFrame.s);
|
||||||
program->setParameter(config.param_vplT, vpl.its.shFrame.t);
|
program->setParameter(config.param_vplT, vpl.its.shFrame.t);
|
||||||
if (vpl.type == ESurfaceVPL) {
|
if (vpl.type == ESurfaceVPL) {
|
||||||
program->setParameter(config.param_vplWi, vpl.its.wi);
|
program->setParameter(config.param_vplWi, vpl.its.wi);
|
||||||
program->setParameter(config.param_vplUV, vpl.its.uv);
|
program->setParameter(config.param_vplUV, vpl.its.uv);
|
||||||
|
program->setParameter(config.param_allowNonDiffuseVPLs, m_allowNonDiffuseVPLs);
|
||||||
}
|
}
|
||||||
|
if (!m_allowNonDiffuseVPLs && vpl.type == ESurfaceVPL)
|
||||||
|
program->setParameter(config.param_vplPower, vpl.P
|
||||||
|
* vpl.its.shape->getBSDF()->getDiffuseReflectance(vpl.its) * INV_PI);
|
||||||
|
else
|
||||||
|
program->setParameter(config.param_vplPower, vpl.P);
|
||||||
program->setParameter(config.param_nearClip, m_nearClip);
|
program->setParameter(config.param_nearClip, m_nearClip);
|
||||||
program->setParameter(config.param_invClipRange, m_invClipRange);
|
program->setParameter(config.param_invClipRange, m_invClipRange);
|
||||||
program->setParameter(config.param_minDist, m_minDist);
|
program->setParameter(config.param_minDist, m_minDist);
|
||||||
|
|
|
@ -132,6 +132,7 @@ struct SceneContext {
|
||||||
QSize windowSize, sizeIncrease;
|
QSize windowSize, sizeIncrease;
|
||||||
Vector2i scrollOffset;
|
Vector2i scrollOffset;
|
||||||
Float reinhardKey, reinhardBurn;
|
Float reinhardKey, reinhardBurn;
|
||||||
|
bool allowNonDiffuseVPLs;
|
||||||
|
|
||||||
/* Preview state */
|
/* Preview state */
|
||||||
std::deque<VPL> vpls;
|
std::deque<VPL> vpls;
|
||||||
|
|
|
@ -297,6 +297,14 @@ void GLWidget::setShadowMapResolution(int res) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLWidget::setAllowNonDiffuseVPLs(bool value) {
|
||||||
|
if (value != m_context->allowNonDiffuseVPLs) {
|
||||||
|
m_context->allowNonDiffuseVPLs = value;
|
||||||
|
resetPreview();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void GLWidget::setPreviewMethod(EPreviewMethod method) {
|
void GLWidget::setPreviewMethod(EPreviewMethod method) {
|
||||||
if (method != m_context->previewMethod) {
|
if (method != m_context->previewMethod) {
|
||||||
m_context->previewMethod = method;
|
m_context->previewMethod = method;
|
||||||
|
|
|
@ -58,6 +58,7 @@ public slots:
|
||||||
void setGamma(bool srgb, Float gamma);
|
void setGamma(bool srgb, Float gamma);
|
||||||
void setReinhardKey(Float value);
|
void setReinhardKey(Float value);
|
||||||
void setReinhardBurn(Float value);
|
void setReinhardBurn(Float value);
|
||||||
|
void setAllowNonDiffuseVPLs(bool value);
|
||||||
void setExposure(Float exposure);
|
void setExposure(Float exposure);
|
||||||
void onException(const QString &what);
|
void onException(const QString &what);
|
||||||
void onScroll();
|
void onScroll();
|
||||||
|
|
|
@ -927,6 +927,7 @@ void MainWindow::on_actionPreviewSettings_triggered() {
|
||||||
connect(&d, SIGNAL(reinhardBurnChanged(Float)), ui->glView, SLOT(setReinhardBurn(Float)));
|
connect(&d, SIGNAL(reinhardBurnChanged(Float)), ui->glView, SLOT(setReinhardBurn(Float)));
|
||||||
connect(&d, SIGNAL(previewMethodChanged(EPreviewMethod)), ui->glView, SLOT(setPreviewMethod(EPreviewMethod)));
|
connect(&d, SIGNAL(previewMethodChanged(EPreviewMethod)), ui->glView, SLOT(setPreviewMethod(EPreviewMethod)));
|
||||||
connect(&d, SIGNAL(toneMappingMethodChanged(EToneMappingMethod)), ui->glView, SLOT(setToneMappingMethod(EToneMappingMethod)));
|
connect(&d, SIGNAL(toneMappingMethodChanged(EToneMappingMethod)), ui->glView, SLOT(setToneMappingMethod(EToneMappingMethod)));
|
||||||
|
connect(&d, SIGNAL(allowNonDiffuseVPLsChanged(bool)), ui->glView, SLOT(setAllowNonDiffuseVPLs(bool)));
|
||||||
d.setMaximumSize(d.minimumSize());
|
d.setMaximumSize(d.minimumSize());
|
||||||
d.exec();
|
d.exec();
|
||||||
QSettings settings("mitsuba-renderer.org", "qtgui");
|
QSettings settings("mitsuba-renderer.org", "qtgui");
|
||||||
|
@ -939,6 +940,7 @@ void MainWindow::on_actionPreviewSettings_triggered() {
|
||||||
settings.setValue("preview_clamping", context->clamping);
|
settings.setValue("preview_clamping", context->clamping);
|
||||||
settings.setValue("preview_previewMethod", context->previewMethod);
|
settings.setValue("preview_previewMethod", context->previewMethod);
|
||||||
settings.setValue("preview_toneMappingMethod", context->toneMappingMethod);
|
settings.setValue("preview_toneMappingMethod", context->toneMappingMethod);
|
||||||
|
settings.setValue("preview_allowNonDiffuseVPLs", context->allowNonDiffuseVPLs);
|
||||||
#else
|
#else
|
||||||
if (!m_previewSettings) {
|
if (!m_previewSettings) {
|
||||||
m_previewSettings = new PreviewSettingsDlg(this);
|
m_previewSettings = new PreviewSettingsDlg(this);
|
||||||
|
@ -978,6 +980,7 @@ void MainWindow::onPreviewSettingsClose() {
|
||||||
settings.setValue("preview_clamping", context->clamping);
|
settings.setValue("preview_clamping", context->clamping);
|
||||||
settings.setValue("preview_previewMethod", context->previewMethod);
|
settings.setValue("preview_previewMethod", context->previewMethod);
|
||||||
settings.setValue("preview_toneMappingMethod", context->toneMappingMethod);
|
settings.setValue("preview_toneMappingMethod", context->toneMappingMethod);
|
||||||
|
settings.setValue("preview_allowNonDiffuseVPLs", context->allowNonDiffuseVPLs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1608,6 +1611,7 @@ SceneContext::SceneContext(SceneContext *ctx) {
|
||||||
scrollOffset = ctx->scrollOffset;
|
scrollOffset = ctx->scrollOffset;
|
||||||
reinhardKey = ctx->reinhardKey;
|
reinhardKey = ctx->reinhardKey;
|
||||||
reinhardBurn = ctx->reinhardBurn;
|
reinhardBurn = ctx->reinhardBurn;
|
||||||
|
allowNonDiffuseVPLs = ctx->allowNonDiffuseVPLs;
|
||||||
}
|
}
|
||||||
|
|
||||||
SceneContext::~SceneContext() {
|
SceneContext::~SceneContext() {
|
||||||
|
|
|
@ -356,6 +356,7 @@ void PreviewThread::run() {
|
||||||
m_shaderManager->setShadowMapResolution(m_context->shadowMapResolution);
|
m_shaderManager->setShadowMapResolution(m_context->shadowMapResolution);
|
||||||
m_shaderManager->setClamping(m_context->clamping);
|
m_shaderManager->setClamping(m_context->clamping);
|
||||||
m_shaderManager->setSinglePass(m_context->previewMethod == EOpenGLSinglePass);
|
m_shaderManager->setSinglePass(m_context->previewMethod == EOpenGLSinglePass);
|
||||||
|
m_shaderManager->setAllowNonDiffuseVPLs(m_context->allowNonDiffuseVPLs);
|
||||||
|
|
||||||
if (m_timer->getMilliseconds() > 1000) {
|
if (m_timer->getMilliseconds() > 1000) {
|
||||||
Float count = m_vplsPerSecond / (Float) m_timer->getMilliseconds() * 1000;
|
Float count = m_vplsPerSecond / (Float) m_timer->getMilliseconds() * 1000;
|
||||||
|
|
|
@ -56,6 +56,7 @@ PreviewSettingsDialog::PreviewSettingsDialog(QWidget *parent, SceneContext *ctx,
|
||||||
ui->clampingSlider->setValue(clamping);
|
ui->clampingSlider->setValue(clamping);
|
||||||
ui->gammaSpinBox->setValue(ctx->gamma);
|
ui->gammaSpinBox->setValue(ctx->gamma);
|
||||||
ui->sRGBCheckBox->setCheckState(ctx->srgb ? Qt::Checked : Qt::Unchecked);
|
ui->sRGBCheckBox->setCheckState(ctx->srgb ? Qt::Checked : Qt::Unchecked);
|
||||||
|
ui->nonDiffuseVPLBox->setCheckState(ctx->allowNonDiffuseVPLs ? Qt::Checked : Qt::Unchecked);
|
||||||
ui->previewMethodCombo->setModel(new MethodModel(this,
|
ui->previewMethodCombo->setModel(new MethodModel(this,
|
||||||
cap->isSupported(RendererCapabilities::EGeometryShaders)));
|
cap->isSupported(RendererCapabilities::EGeometryShaders)));
|
||||||
ui->previewMethodCombo->setCurrentIndex(ctx->previewMethod);
|
ui->previewMethodCombo->setCurrentIndex(ctx->previewMethod);
|
||||||
|
@ -87,6 +88,7 @@ void PreviewSettingsDialog::on_resetButton_clicked() {
|
||||||
ui->keySlider->setValue((int) ((0.18-REINHARD_MIN)/REINHARD_RANGE * 100));
|
ui->keySlider->setValue((int) ((0.18-REINHARD_MIN)/REINHARD_RANGE * 100));
|
||||||
|
|
||||||
ui->sRGBCheckBox->setCheckState(Qt::Checked);
|
ui->sRGBCheckBox->setCheckState(Qt::Checked);
|
||||||
|
ui->nonDiffuseVPLBox->setCheckState(Qt::Unchecked);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PreviewSettingsDialog::on_keySlider_valueChanged(int value) {
|
void PreviewSettingsDialog::on_keySlider_valueChanged(int value) {
|
||||||
|
@ -137,6 +139,10 @@ void PreviewSettingsDialog::on_sRGBCheckBox_stateChanged(int state) {
|
||||||
emit gammaChanged(state == Qt::Checked, (Float) ui->gammaSpinBox->value());
|
emit gammaChanged(state == Qt::Checked, (Float) ui->gammaSpinBox->value());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PreviewSettingsDialog::on_nonDiffuseVPLBox_stateChanged(int state) {
|
||||||
|
emit allowNonDiffuseVPLsChanged(state == Qt::Checked);
|
||||||
|
}
|
||||||
|
|
||||||
void PreviewSettingsDialog::on_previewMethodCombo_activated(int index) {
|
void PreviewSettingsDialog::on_previewMethodCombo_activated(int index) {
|
||||||
bool visible = index != ERayTrace && index != ERayTraceCoherent;
|
bool visible = index != ERayTrace && index != ERayTraceCoherent;
|
||||||
ui->shadowResolutionCombo->setVisible(visible);
|
ui->shadowResolutionCombo->setVisible(visible);
|
||||||
|
|
|
@ -26,6 +26,7 @@ signals:
|
||||||
void toneMappingMethodChanged(EToneMappingMethod method);
|
void toneMappingMethodChanged(EToneMappingMethod method);
|
||||||
void reinhardKeyChanged(Float key);
|
void reinhardKeyChanged(Float key);
|
||||||
void reinhardBurnChanged(Float burn);
|
void reinhardBurnChanged(Float burn);
|
||||||
|
void allowNonDiffuseVPLsChanged(bool);
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
void on_pathLengthSlider_valueChanged(int value);
|
void on_pathLengthSlider_valueChanged(int value);
|
||||||
|
@ -35,6 +36,7 @@ protected slots:
|
||||||
void on_exposureSpinBox_valueChanged(double value);
|
void on_exposureSpinBox_valueChanged(double value);
|
||||||
void on_gammaSpinBox_valueChanged(double value);
|
void on_gammaSpinBox_valueChanged(double value);
|
||||||
void on_sRGBCheckBox_stateChanged(int state);
|
void on_sRGBCheckBox_stateChanged(int state);
|
||||||
|
void on_nonDiffuseVPLBox_stateChanged(int state);
|
||||||
void on_resetButton_clicked();
|
void on_resetButton_clicked();
|
||||||
void on_previewMethodCombo_activated(int index);
|
void on_previewMethodCombo_activated(int index);
|
||||||
void on_toneMappingMethodCombo_activated(int index);
|
void on_toneMappingMethodCombo_activated(int index);
|
||||||
|
|
|
@ -504,7 +504,7 @@ p, li { white-space: pre-wrap; }
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="2" colspan="2">
|
<item row="5" column="2" colspan="2">
|
||||||
<widget class="QCheckBox" name="nonDiffuseBox">
|
<widget class="QCheckBox" name="nonDiffuseVPLBox">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||||
|
@ -534,7 +534,7 @@ p, li { white-space: pre-wrap; }
|
||||||
<string>&Other :</string>
|
<string>&Other :</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="buddy">
|
<property name="buddy">
|
||||||
<cstring>nonDiffuseBox</cstring>
|
<cstring>nonDiffuseVPLBox</cstring>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -546,7 +546,7 @@ p, li { white-space: pre-wrap; }
|
||||||
<tabstop>pathLengthEdit</tabstop>
|
<tabstop>pathLengthEdit</tabstop>
|
||||||
<tabstop>clampingSlider</tabstop>
|
<tabstop>clampingSlider</tabstop>
|
||||||
<tabstop>shadowResolutionCombo</tabstop>
|
<tabstop>shadowResolutionCombo</tabstop>
|
||||||
<tabstop>nonDiffuseBox</tabstop>
|
<tabstop>nonDiffuseVPLBox</tabstop>
|
||||||
<tabstop>toneMappingMethodCombo</tabstop>
|
<tabstop>toneMappingMethodCombo</tabstop>
|
||||||
<tabstop>keySlider</tabstop>
|
<tabstop>keySlider</tabstop>
|
||||||
<tabstop>exposureSpinBox</tabstop>
|
<tabstop>exposureSpinBox</tabstop>
|
||||||
|
|
|
@ -31,6 +31,7 @@ void SceneLoader::run() {
|
||||||
m_result->clamping = (Float) settings.value("preview_clamping", 0.1f).toDouble();
|
m_result->clamping = (Float) settings.value("preview_clamping", 0.1f).toDouble();
|
||||||
m_result->previewMethod = (EPreviewMethod) settings.value("preview_previewMethod", EOpenGL).toInt();
|
m_result->previewMethod = (EPreviewMethod) settings.value("preview_previewMethod", EOpenGL).toInt();
|
||||||
m_result->toneMappingMethod = (EToneMappingMethod) settings.value("preview_toneMappingMethod", EGamma).toInt();
|
m_result->toneMappingMethod = (EToneMappingMethod) settings.value("preview_toneMappingMethod", EGamma).toInt();
|
||||||
|
m_result->allowNonDiffuseVPLs = settings.value("preview_allowNonDiffuseVPLs", false).toBool();
|
||||||
|
|
||||||
if (endsWith(lowerCase, ".exr")) {
|
if (endsWith(lowerCase, ".exr")) {
|
||||||
/* This is an image, not a scene */
|
/* This is an image, not a scene */
|
||||||
|
|
Loading…
Reference in New Issue