![]() |
Stellarium
25.1
|
Converts tones in function of the eye adaptation to luminance. More...
#include <StelToneReproducer.hpp>
Public Slots | |
void | setDisplayAdaptationLuminance (float Lda) |
Set the eye adaptation luminance for the display (and precompute what can be) Usual luminance range is 1-100 cd/m^2 for a CRT screen. More... | |
float | getDisplayAdaptationLuminance () const |
void | setWorldAdaptationLuminance (float worldAdaptationLuminance) |
Set the eye adaptation luminance for the world (and precompute what can be) More... | |
float | getWorldAdaptationLuminance () const |
Get the eye adaptation luminance for the world. | |
void | setInputScale (float scale=1.f) |
Set the global scale applied to input luminances, i.e before the adaptation It is the parameter to modify to simulate aperture*exposition time. More... | |
float | getInputScale () const |
Get the global scale applied to input luminances, i.e before the adaptation. | |
void | setMaxDisplayLuminance (float maxdL) |
Set the maximum luminance of the display (CRT, screen etc..) This value is used to scale the RGB range. More... | |
float | getMaxDisplayLuminance () const |
Get the previously set maximum luminance of the display (CRT, screen etc..) This value is used to scale the RGB range. More... | |
float | getDisplayGamma () const |
Get the display gamma. More... | |
void | setDisplayGamma (float gamma) |
Set the display gamma. More... | |
bool | getFlagUseTmGamma () const |
void | setFlagUseTmGamma (bool b) |
void | setFlagSRGB (bool val) |
Set whether to use an sRGB (default, true) or AdobeRGB color conversion matrix for the sky colors. More... | |
bool | getFlagSRGB () const |
Public Member Functions | |
StelToneReproducer () | |
Constructor. | |
~StelToneReproducer () override | |
Destructor. | |
float | adaptLuminance (float worldLuminance) const |
Return adapted luminance from world to display. More... | |
float | reverseAdaptLuminance (float displayLuminance) const |
Return adapted luminance from display to world. More... | |
float | adaptLuminanceScaled (float worldLuminance) const |
Return adapted luminance from world to display with 1 corresponding to full display white. More... | |
float | reverseAdaptLuminanceScaled (float displayLuminance) const |
Return adapted luminance from display to world with 1 corresponding to full display white. More... | |
float | adaptLuminanceScaledLn (float lnWorldLuminance, float pFact=0.5f) const |
Return adapted ln(luminance) from world to display with 1 corresponding to full display white. More... | |
void | xyYToRGB (float *xyY) const |
Convert from xyY color system to RGB. More... | |
void | getShadersParams (float &a, float &b, float &c, float &d, bool &useGamma, bool &sRGB) const |
Properties | |
double | worldAdaptationLuminance |
double | displayAdaptationLuminance |
double | maxDisplayLuminance |
double | inputScale |
double | displayGamma |
bool | flagUseTmGamma |
bool | flagSRGB |
Converts tones in function of the eye adaptation to luminance.
The aim is to get on the screen something which is perceptualy accurate, ie. to compress high dynamic range luminance to CRT display range. The class perform mainly a fast implementation of the algorithm from the paper [1], with more accurate values from [2]. The blue shift formula is taken from [3] and combined with the Scotopic vision formula from [4].
Important : you may call setDisplayAdaptationLuminance() and setWorldAdaptationLuminance() before any call to xyYToRGB() or adaptLuminance otherwise the default values will be used. (they are appropriate for a daylight sky luminance)
The user can configure properties of the screen and environmant in the TonemappingDialog: displayAdaptationLuminance, maxDisplayLuminance and displayGamma. The latter is not fixed to the sRGB value of 2.2 but should probably also not deviate too much.
REFERENCES : Thanks to all the authors of the following papers I used for providing their work freely online.
[1] "Tone Reproduction for Realistic Images", Tumblin and Rushmeier, IEEE Computer Graphics & Application, November 1993
[2] "Tone Reproduction and Physically Based Spectral Rendering", Devlin, Chalmers, Wilkie and Purgathofer in EUROGRAPHICS 2002
[3] "Night Rendering", H. Wann Jensen, S. Premoze, P. Shirley, W.B. Thompson, J.A. Ferwerda, M.M. Stark
[4] "A Visibility Matching Tone Reproduction Operator for High Dynamic Range Scenes", G.W. Larson, H. Rushmeier, C. Piatko
|
inline |
Return adapted luminance from world to display.
worldLuminance | the world luminance to convert in cd/m^2 |
|
inline |
Return adapted luminance from world to display with 1 corresponding to full display white.
worldLuminance | the world luminance to convert in cd/m^2 |
|
inline |
Return adapted ln(luminance) from world to display with 1 corresponding to full display white.
lnWorldLuminance | the world luminance to convert in ln(cd/m^2) |
pFact | the power at which the result should be set. The default is 0.5 and therefore return the square root of the adapted luminance |
|
inlineslot |
Get the display gamma.
|
inlineslot |
Get the previously set maximum luminance of the display (CRT, screen etc..) This value is used to scale the RGB range.
|
inline |
Return adapted luminance from display to world.
displayLuminance | the display luminance to convert in cd/m^2 |
|
inline |
Return adapted luminance from display to world with 1 corresponding to full display white.
displayLuminance | the display luminance with 1 corresponding to full display white. The value can be more than 1 when saturated. |
|
slot |
Set the eye adaptation luminance for the display (and precompute what can be) Usual luminance range is 1-100 cd/m^2 for a CRT screen.
Lda | the new display luminance in cd/m^2. The initial default value is 50 cd/m^2. |
|
slot |
Set the display gamma.
gamma | the gamma. Initial default value is 2.2222 for a CRT, and sRGB LCD (and similar modern) panels try to reproduce that. |
|
slot |
Set whether to use an sRGB (default, true) or AdobeRGB color conversion matrix for the sky colors.
The actual matrix is in the xyYtoRGB.glsl shader program.
|
slot |
Set the global scale applied to input luminances, i.e before the adaptation It is the parameter to modify to simulate aperture*exposition time.
scale | the global input scale |
|
slot |
Set the maximum luminance of the display (CRT, screen etc..) This value is used to scale the RGB range.
maxdL | the maximum luminance in cd/m^2. Initial default value is 100 cd/m^2. Higher values indicate "This display can faithfully reproduce brighter lights, therefore the sky will usually appear darker". |
|
slot |
Set the eye adaptation luminance for the world (and precompute what can be)
void StelToneReproducer::xyYToRGB | ( | float * | xyY | ) | const |
Convert from xyY color system to RGB.
The first two components x and y indicate the "color", the Y is luminance in cd/m^2.
xyY | an array of 3 floats which are replaced by the converted RGB values |