4444
4545// Standard headers.
4646#include < cassert>
47+ #include < cmath>
4748
4849// Forward declarations.
4950namespace foundation { class IAbortSwitch ; }
5051namespace renderer { class Assembly ; }
5152namespace renderer { class Project ; }
5253
5354using namespace foundation ;
55+ using namespace std ;
5456
5557namespace renderer
5658{
@@ -74,6 +76,7 @@ namespace
7476 {
7577 m_inputs.declare (" radiance" , InputFormatSpectralIlluminance);
7678 m_inputs.declare (" radiance_multiplier" , InputFormatFloat, " 1.0" );
79+ m_inputs.declare (" exposure" , InputFormatFloat, " 0.0" );
7780 }
7881
7982 virtual void release () APPLESEED_OVERRIDE
@@ -117,7 +120,7 @@ namespace
117120
118121 const InputValues* values = static_cast <const InputValues*>(data);
119122 value = values->m_radiance ;
120- value *= values->m_radiance_multiplier ;
123+ value *= values->m_radiance_multiplier * pow ( 2 . 0f , values-> m_exposure ) ;
121124
122125 probability = wo.y * RcpPi<float >();
123126 assert (probability > 0 .0f );
@@ -144,7 +147,7 @@ namespace
144147
145148 const InputValues* values = static_cast <const InputValues*>(data);
146149 value = values->m_radiance ;
147- value *= values->m_radiance_multiplier ;
150+ value *= values->m_radiance_multiplier * pow ( 2 . 0f , values-> m_exposure ) ;
148151 }
149152
150153 virtual void evaluate (
@@ -170,7 +173,7 @@ namespace
170173
171174 const InputValues* values = static_cast <const InputValues*>(data);
172175 value = values->m_radiance ;
173- value *= values->m_radiance_multiplier ;
176+ value *= values->m_radiance_multiplier * pow ( 2 . 0f , values-> m_exposure ) ;
174177
175178 probability = cos_on * RcpPi<float >();
176179 }
@@ -195,7 +198,7 @@ namespace
195198
196199 virtual float get_uncached_max_contribution () const APPLESEED_OVERRIDE
197200 {
198- return get_max_contribution (" radiance" , " radiance_multiplier" );
201+ return get_max_contribution (" radiance" , " radiance_multiplier" , " exposure " );
199202 }
200203
201204 private:
@@ -248,6 +251,17 @@ DictionaryArray DiffuseEDFFactory::get_input_metadata() const
248251 .insert (" use" , " optional" )
249252 .insert (" default" , " 1.0" ));
250253
254+ metadata.push_back (
255+ Dictionary ()
256+ .insert (" name" , " exposure" )
257+ .insert (" label" , " Exposure" )
258+ .insert (" type" , " numeric" )
259+ .insert (" use" , " optional" )
260+ .insert (" default" , " 0.0" )
261+ .insert (" min_value" , " -64.0" )
262+ .insert (" max_value" , " 64.0" )
263+ .insert (" help" , " Exposure" ));
264+
251265 add_common_input_metadata (metadata);
252266
253267 return metadata;
0 commit comments