Discrete spectral power distribution based on a number of wavelength bins over the 360-830 nm range. More...
#include <mitsuba/core/spectrum.h>
Public Types | |
enum | EConversionIntent { EReflectance, EIlluminant } |
When converting from RGB reflectance values to discretized color spectra, the following `intent' flag can be provided to improve the results of this highly under-constrained problem. More... | |
typedef TSpectrum< Float, SPECTRUM_SAMPLES > | Parent |
Public Types inherited from mitsuba::TSpectrum< Float, SPECTRUM_SAMPLES > | |
typedef Float | Scalar |
Public Member Functions | |
Spectrum () | |
Create a new spectral power distribution, but don't initialize the contents. More... | |
Spectrum (const Parent &s) | |
Construct from a TSpectrum instance. More... | |
template<typename AltScalar > | |
Spectrum (const TSpectrum< AltScalar, SPECTRUM_SAMPLES > &v) | |
Initialize with a TSpectrum data type based on a alternate representation. More... | |
Spectrum (Float v) | |
Create a new spectral power distribution with all samples set to the given value. More... | |
Spectrum (Float value[SPECTRUM_SAMPLES]) | |
Copy a spectral power distribution. More... | |
Spectrum (Stream *stream) | |
Unserialize a spectral power distribution from a binary data stream. More... | |
Float | eval (Float lambda) const |
Evaluate the SPD for the given wavelength in nanometers. More... | |
Float | getLuminance () const |
Return the luminance in candelas. More... | |
void | toXYZ (Float &x, Float &y, Float &z) const |
Convert from a spectral power distribution to XYZ tristimulus values. More... | |
void | fromXYZ (Float x, Float y, Float z, EConversionIntent intent=EReflectance) |
Convert XYZ tristimulus into a plausible spectral reflectance or spectral power distribution. More... | |
void | toIPT (Float &I, Float &P, Float &T) const |
Convert from a spectral power distribution to the perceptually uniform IPT color space by Ebner and Fairchild. More... | |
void | fromIPT (Float I, Float P, Float T, EConversionIntent intent=EReflectance) |
Convert a color value represented in the IPT space into a plausible spectral reflectance or spectral power distribution. More... | |
void | toLinearRGB (Float &r, Float &g, Float &b) const |
Convert to linear RGB. More... | |
void | fromLinearRGB (Float r, Float g, Float b, EConversionIntent intent=EReflectance) |
Convert linear RGB colors into a plausible spectral power distribution. More... | |
void | toSRGB (Float &r, Float &g, Float &b) const |
Convert to sRGB. More... | |
void | fromSRGB (Float r, Float g, Float b) |
Convert sRGB color values into a plausible spectral power distribution. More... | |
void | fromRGBE (const uint8_t rgbe[4], EConversionIntent intent=EIlluminant) |
Convert linear RGBE colors into a plausible spectral power distribution. More... | |
void | toRGBE (uint8_t rgbe[4]) const |
Linear RGBE conversion based on Bruce Walter's and Greg Ward's code. More... | |
void | fromContinuousSpectrum (const ContinuousSpectrum &smooth) |
Initialize with spectral values from a smooth spectrum representation. More... | |
bool | operator== (const Spectrum &val) const |
Equality test. More... | |
bool | operator!= (const Spectrum &val) const |
Inequality test. More... | |
std::string | toString () const |
Return a string representation. More... | |
Public Member Functions inherited from mitsuba::TSpectrum< Float, SPECTRUM_SAMPLES > | |
TSpectrum () | |
Create a new spectral power distribution, but don't initialize the contents. More... | |
TSpectrum (Scalar v) | |
Create a new spectral power distribution with all samples set to the given value. More... | |
TSpectrum (Scalar spec[N]) | |
Copy a spectral power distribution. More... | |
TSpectrum (Stream *stream) | |
Unserialize a spectral power distribution from a binary data stream. More... | |
TSpectrum (const TSpectrum< AltScalar, N > &v) | |
Initialize with a TSpectrum data type based on a alternate representation. More... | |
TSpectrum | operator+ (const TSpectrum &spec) const |
Add two spectral power distributions. More... | |
TSpectrum & | operator+= (const TSpectrum &spec) |
Add a spectral power distribution to this instance. More... | |
TSpectrum | operator- (const TSpectrum &spec) const |
Subtract a spectral power distribution. More... | |
TSpectrum | operator- () const |
Negate. More... | |
TSpectrum & | operator-= (const TSpectrum &spec) |
Subtract a spectral power distribution from this instance. More... | |
TSpectrum | operator* (Scalar f) const |
Multiply by a scalar. More... | |
TSpectrum | operator* (const TSpectrum &spec) const |
Perform a component-wise multiplication by another spectrum. More... | |
TSpectrum & | operator*= (Scalar f) |
Multiply by a scalar. More... | |
TSpectrum & | operator*= (const TSpectrum &spec) |
Perform a component-wise multiplication by another spectrum. More... | |
TSpectrum & | operator/= (const TSpectrum &spec) |
Perform a component-wise division by another spectrum. More... | |
TSpectrum & | operator/= (Scalar f) |
Divide by a scalar. More... | |
TSpectrum | operator/ (const TSpectrum &spec) const |
Perform a component-wise division by another spectrum. More... | |
TSpectrum | operator/ (Scalar f) const |
Divide by a scalar. More... | |
bool | operator== (const TSpectrum &spec) const |
Equality test. More... | |
bool | operator!= (const TSpectrum &spec) const |
Inequality test. More... | |
bool | isNaN () const |
Check for NaNs. More... | |
bool | isValid () const |
Returns whether the spectrum only contains valid (non-NaN, nonnegative) samples. More... | |
void | addWeighted (Scalar weight, const TSpectrum &spec) |
Multiply-accumulate operation, adds weight * spec. More... | |
Scalar | average () const |
Return the average over all wavelengths. More... | |
TSpectrum | abs () const |
Component-wise absolute value. More... | |
TSpectrum | sqrt () const |
Component-wise square root. More... | |
TSpectrum | safe_sqrt () const |
Component-wise square root. More... | |
TSpectrum | log () const |
Component-wise logarithm. More... | |
TSpectrum | exp () const |
Component-wise exponentation. More... | |
TSpectrum | pow (Scalar f) const |
Component-wise power. More... | |
void | clampNegative () |
Clamp negative values. More... | |
Scalar | max () const |
Return the highest-valued spectral sample. More... | |
Scalar | min () const |
Return the lowest-valued spectral sample. More... | |
Scalar & | operator[] (int entry) |
Indexing operator. More... | |
Scalar | operator[] (int entry) const |
Indexing operator. More... | |
bool | isZero () const |
Check if this spectrum is zero at all wavelengths. More... | |
void | serialize (Stream *stream) const |
Serialize this spectrum to a stream. More... | |
std::string | toString () const |
Static Public Member Functions | |
static std::pair< Float, Float > | getBinCoverage (size_t index) |
Return the wavelength range covered by a spectral bin. More... | |
static const Spectrum & | getD65 () |
Return a spectral color distribution of the D65 white point (with unit luminance) More... | |
static void | staticInitialization () |
Static initialization (should be called once during the application's initialization phase) More... | |
static void | staticShutdown () |
Static Protected Attributes | |
static Float | m_wavelengths [SPECTRUM_SAMPLES+1] |
Configured wavelengths bins in nanometers. More... | |
static Spectrum | CIE_D65 |
Pre-integrated D65 illuminant. More... | |
Pre-integrated CIE 1931 XYZ color matching functions. | |
static Spectrum | CIE_X |
static Spectrum | CIE_Y |
static Spectrum | CIE_Z |
static Float | CIE_normalization |
Pre-integrated Smits-style RGB to Spectrum | |
conversion spectra, data by Karl vom Berge | |
static Spectrum | rgbRefl2SpecWhite |
static Spectrum | rgbRefl2SpecCyan |
static Spectrum | rgbRefl2SpecMagenta |
static Spectrum | rgbRefl2SpecYellow |
static Spectrum | rgbRefl2SpecRed |
static Spectrum | rgbRefl2SpecGreen |
static Spectrum | rgbRefl2SpecBlue |
static Spectrum | rgbIllum2SpecWhite |
static Spectrum | rgbIllum2SpecCyan |
static Spectrum | rgbIllum2SpecMagenta |
static Spectrum | rgbIllum2SpecYellow |
static Spectrum | rgbIllum2SpecRed |
static Spectrum | rgbIllum2SpecGreen |
static Spectrum | rgbIllum2SpecBlue |
Additional Inherited Members | |
Static Public Attributes inherited from mitsuba::TSpectrum< Float, SPECTRUM_SAMPLES > | |
static const int | dim |
Number of dimensions. More... | |
Protected Attributes inherited from mitsuba::TSpectrum< Float, SPECTRUM_SAMPLES > | |
Scalar | s [N] |
Discrete spectral power distribution based on a number of wavelength bins over the 360-830 nm range.
This class defines a vector-like data type that can be used for computations involving radiance.
When configured for spectral rendering (i.e. when the compile-time flag SPECTRUM_SAMPLES
is set to a value != 3), the implementation discretizes the visible spectrum of light into a set of intervals, where the distribution within each bin is modeled as being uniform.
When SPECTRUM_SAMPLES == 3, the class reverts to a simple linear RGB-based internal representation.
The implementation of this class is based on PBRT.
typedef TSpectrum<Float, SPECTRUM_SAMPLES> mitsuba::Spectrum::Parent |
When converting from RGB reflectance values to discretized color spectra, the following `intent' flag can be provided to improve the results of this highly under-constrained problem.
Enumerator | |
---|---|
EReflectance |
Unitless reflectance data is converted. |
EIlluminant |
Radiance-valued illumination data is converted. |
|
inline |
Create a new spectral power distribution, but don't initialize the contents.
|
inlineexplicit |
Initialize with a TSpectrum data type based on a alternate representation.
|
inlineexplicit |
Create a new spectral power distribution with all samples set to the given value.
|
inlineexplicit |
Copy a spectral power distribution.
|
inlineexplicit |
Unserialize a spectral power distribution from a binary data stream.
Evaluate the SPD for the given wavelength in nanometers.
void mitsuba::Spectrum::fromContinuousSpectrum | ( | const ContinuousSpectrum & | smooth | ) |
Initialize with spectral values from a smooth spectrum representation.
void mitsuba::Spectrum::fromIPT | ( | Float | I, |
Float | P, | ||
Float | T, | ||
EConversionIntent | intent = EReflectance |
||
) |
Convert a color value represented in the IPT space into a plausible spectral reflectance or spectral power distribution.
The EConversionIntent parameter can be used to provide more information on how to solve this highly under-constrained problem. The default is EReflectance.
void mitsuba::Spectrum::fromLinearRGB | ( | Float | r, |
Float | g, | ||
Float | b, | ||
EConversionIntent | intent = EReflectance |
||
) |
Convert linear RGB colors into a plausible spectral power distribution.
The EConversionIntent parameter can be used to provide more information on how to solve this highly under-constrained problem. The default is EReflectance.
void mitsuba::Spectrum::fromRGBE | ( | const uint8_t | rgbe[4], |
EConversionIntent | intent = EIlluminant |
||
) |
Convert linear RGBE colors into a plausible spectral power distribution.
Based on code by Bruce Walter and Greg ward.
The EConversionIntent parameter can be used to provide more information on how to solve this highly under-constrained problem. For RGBE values, the default is EIlluminant.
Convert sRGB color values into a plausible spectral power distribution.
Note that compared to fromLinearRGB, no intent
parameter is available. For sRGB colors, it is assumed that the intent is always EReflectance.
void mitsuba::Spectrum::fromXYZ | ( | Float | x, |
Float | y, | ||
Float | z, | ||
EConversionIntent | intent = EReflectance |
||
) |
Convert XYZ tristimulus into a plausible spectral reflectance or spectral power distribution.
The EConversionIntent parameter can be used to provide more information on how to solve this highly under-constrained problem. The default is EReflectance.
Return the wavelength range covered by a spectral bin.
|
inlinestatic |
Return a spectral color distribution of the D65 white point (with unit luminance)
Float mitsuba::Spectrum::getLuminance | ( | ) | const |
Return the luminance in candelas.
|
static |
Static initialization (should be called once during the application's initialization phase)
This function is responsible for choosing the wavelengths that will be used during rendering. It also pre-integrates the CIE matching curves so that sampled spectra can efficiently be converted to XYZ tristimulus values. Finally, it sets up pre-integrated color spectra for conversions from linear RGB to plausible spectral color distributions.
|
static |
Convert from a spectral power distribution to the perceptually uniform IPT color space by Ebner and Fairchild.
This is useful e.g. for computing color differences. I
encodes intensity, P
(protan) roughly encodes red-green color opponency, and T
(tritan) encodes blue-red color opponency. For normalized input, the range of attainable values is given by \( I\in $[0,1], P,T\in [-1,1]\).
In the Python API, this function returns a 3-tuple with the result of the operation.
Convert to linear RGB.
In the Python API, this function returns a 3-tuple with the result of the operation.
void mitsuba::Spectrum::toRGBE | ( | uint8_t | rgbe[4] | ) | const |
Linear RGBE conversion based on Bruce Walter's and Greg Ward's code.
Convert to sRGB.
In the Python API, this function returns a 3-tuple with the result of the operation.
std::string mitsuba::Spectrum::toString | ( | ) | const |
Return a string representation.
Convert from a spectral power distribution to XYZ tristimulus values.
In the Python API, this function returns a 3-tuple with the result of the operation.
|
staticprotected |
Pre-integrated D65 illuminant.
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
Configured wavelengths bins in nanometers.
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |