Hot answers tagged

25

There are various different types of limitation to take into consideration. Effects for which the path of a ray is dependent on its wavelength These are a class of effects for which spectral rendering is required, and a number of interesting examples have already been given in Benedikt Bitterli's answer. A simple example is a prism splitting white light ...


23

Let's reminds ourselves what light is. Radio waves, micro waves, X rays and gamma rays are all electromagnetic radiation and they only differ by their frequency. It just so happens that the human eye is able to detect electromagnetic radiation between ~400nm and ~800nm, which we perceive as light. The 400nm end is perceived as violet and the 800nm end is ...


20

They don't. The problem with the diagrams representing the visible and RGB gamuts is that they're presented on RGB displays. They obviously cannot show you what they cannot show you : the area inside the parabola but outside of the triangle. The region outside of the triangle cannot be shown on your screen in a faithful way. For example, RGB cannot display ...


17

Humans are trichromatic, which means we have 3 different kinds of color receptors (better known as cone cells), each sensitive to a different set of wavelengths: Image source: wikipedia So it only takes 3 different monochromatic stimuli to fool our eye into thinking it sees a color that is the same as another. Red, green, and blue are good fits to the ...


15

I believe the most prominent spectral effect that can't be faithfully reproduced with RGB is dispersion, caused by dielectrics with spectrally varying index of refraction (usually modelled with the Sellmeier equation). Other spectral phenomena are usually caused by wave effects. One example that is encountered in real life every now and then is thin-film ...


15

Yes, while many screens and OS operations are using a gamma of 2.2 your hardware and computation result still need to be corrected. There are also special mediums such as broadcast TV's that have a different gamma. Sensor equipment like cameras are mostly linear so they need to be adjusted accordingly. Besides this the user can set their system to whatever ...


13

Talking about Linear RGB must be avoided because it does not tell you anything about the RGB colourspace intrinsics, i.e., Primaries, Whitepoint and Colour Component Transfer Functions. A few years ago, assuming it was sRGB was middling but nowadays with DCI-P3 and BT.2020 being very common, it must be ruled out. The ideal gamut for rendering is the one ...


11

The de facto standard color space for digital images these days is sRGB. sRGB is a good default assumption if working with a display whose exact color space is not known (i.e. most random displays someone might run your app on), or images whose color space encoding is not known (i.e. most random image files you might encounter). The sRGB standard defines ...


10

In terms of the HSV color space, "muted" colors are those with lower saturation and/or value. "Deep" colors are saturated but not too high in value (e.g. deep red) while colors with both high saturation and value might be called "bright" (e.g. bright red). "Colorful" is somewhat more vague; it might mean bright colors, but it also might mean having a range ...


10

Because your monitor is not properly calibrated. On my screen at home the top and bottom parts have the same hue. At my office though, the top part tends to looks a bit yellow compared to the bottom part that looks more red. The difference: my screen at home was from a series that was decently calibrated out of the factory, and on top of that I did ...


9

Generally, uniformly-weighted samples with a variable distribution (importance sampling) gives lower variance in the final average than uniformly-distributed samples with variable weights. This is a common rule of thumb in Monte Carlo raytracing. However, another thing to consider is that you'll eventually be converting the images to RGB for display (I ...


9

Two different effects are causing the observation mentioned in the video. On one side, the vast majority of screens have a non linear response: if the RGB value is half as much, the emitted light intensity is not half as much. This behavior originally comes from cathode ray tube (CRT) displays, which produced different light intensities by varying the ...


8

The concept of a point source is an approximation. Physically, light sources are extended objects and emit light from every point on their surface; but when you're far enough away (i.e. the distance to the source is large compared to its size) it's useful to approximate it as a point source. You can get the $1/r^2$ law out of it as follows. Imagine a ...


8

There is spectral rendering, where you can quantize the visible wavelengths from ~390nm to ~700nm to N discrete wavelengths instead of the standard 3 for RGB. Then if you had to model say a prism, you would get more realistic distribution of the spectrum. Light has also property of polarization that you would need to model for increased realism. I don't ...


7

RGB works because that's how our sensory apparatus works. Ina addition to dispersion, some man made materials and insect bodies sometimes have surfaces that have very tight color bands. These might benefit from a wide spectrum rendering. However since many of these effects are pretty localized, you can often get away with making the shader just work weird....


7

The most physically accurate way would be to have a $l(\theta)$ which for each possible color frequency has a certain value. Converting to RGB would then need a frequency responce function for each channel and the result is then $\int_{infrared}^{ultraviolet} l(\theta)F_{red}(\theta)d\theta$. Reflected light then has a 2 dimensional response function: $L_{...


6

If I get correctly what you are asking you basically just need to find the G in this equation: $$Image_{out} = Image_{in}^G$$ This could be easily solved as $$G = \frac{\log{Image_{out}}}{\log{Image_{in}}}$$ Because usually gamma is applied in a uniform fashion on the image, you can just pick any two non zero pixel values (one for source and one for ...


6

The problem lies mainly in CIE1931XYZ::tristimulusValues() function, where you normalize the resulting color to the luminance of your illuminant which causes that directly observed light source has luminance 1, but everything else is much darker. That is a nice thing to do if you just want to visualize colours of various reflectance spectra under a given ...


6

I just discovered that Adobe color source includes HSV-RYB hue mapping functions (replicated in Ben Knight's Kuler-d3). Apparently Adobe uses uses piecewise linear gradients rather than the polynomial that I was trying to use (and technically it is a CMY wheel not a RBY one, I believe). Here are the relevant stops: RYBstop HSVstop 60 35 122 60 165 ...


6

Yes, it is possible to use only integer calculations. I will describe how, but bear in mind that the difference in speed between integer arithmetic and floating point arithmetic is not as great as it was historically. If you want your code to run faster, it is best to profile and identify which parts of the code are taking up most time, before considering ...


6

Colors shown on your display or saved to standard image file formats use 8 bits per component. So to store these colors it suffices to use four bytes (unsigned char). These colors are usually using sRGB color space, which includes a non-linear "gamma" transformation that redistributes precision to make it somewhat more perceptually uniform, so it's actually ...


6

I think your quote refers to conversion between color spaces, rather than color grading. 4d textures could be used as lookup tables to convert color spaces like CMYK to some other space. Since CMYK has 4 components, a 3d texture wouldn't be enough.


6

Effectively, before you start to think about clipping/clamping, you'll need a general approach to map the much wider color range you are working in onto the [0,1] triplets you want to output. There are various way to do this, look up HDR tone mapping to get a good first impression of what is possible. Simply clipping things to [0,1] will leave you with a ...


5

It is the inverse square law of light for a pure point light. $E = \frac{I}{r^2}$ Where E is illuminance and I is pointance or power/flux per unit solid angle.


5

The mathematical approach to this is to represent the other colors/light sources in terms of your standard primaries in the color space. Represent your target color and available light sources as vectors with, say, the RGB color space as the basis. Figuring out how to display your target color using your available sources then becomes a change of basis, a ...


5

There is unfortunately no good answer to this question. Simply it wont work. There is no good way to define colorful, it this context. Cie is trying to capture the physical measurement. It however does not succeed very well in relating the colors to each other. Colors on the very outer arc represent spectral distributions of close to Dirac delta function. ...


5

You might want to look at The Compact YCoCg Framebuffer. It uses a 2-channel buffer to store luminance for every pixel and the two chroma components in half the pixels each, forming a checkerboard. It also uses an edge-aware upsampling filter at the end of the frame to reconstruct the missing chroma components and convert back to RGB. You could extend this ...


5

The easiest way to get the perceived brightness of a color is to calculate the Luma. Finding the grey color with the same luma is easy - just set all of the RGB components to the desired luma value. That works because the coefficients for calculating the luma sum up to 1. public Vector3d get_equally_bright_grey(Vector3d color) { double luma = color.x * ...


5

In practice, when we say "linear RGB," we mean "sRGB without the gamma correction." It would be more correct to say that there is the "sRGB colorspace" and the "linearized sRGB colorspace", with the sRGB specification definition the conversion from one to another. Yes, there are infinitely many "linear RGB" color spaces. But the thing that all of these "...


5

With an old-style Phong shader (as in your example), they really are just added together. Each of those things is a contribution to the overall amount of light, so they're just added together, the same way you add together the contribution from each light source. Your intuition is right that you often end up with overexposed specular highlights with this ...


Only top voted, non community-wiki answers of a minimum length are eligible