POV-Ray : Newsgroups : povray.binaries.animations : CIE xyY / D65 gamut : Re: CIE xyY / D65 gamut Server Time
23 Apr 2024 15:59:22 EDT (-0400)
  Re: CIE xyY / D65 gamut  
From: clipka
Date: 10 Dec 2016 19:13:19
Message: <584c9a1f@news.povray.org>
Am 11.12.2016 um 00:09 schrieb Mike Horvath:
> On 11/29/2016 10:56 PM, clipka wrote:
>> Gamut of all theoretically possible surface colours, under D65 (noon
>> daylight) illumination, in CIE 1931 xyY space.
>>
> 
> How did you generate the meshes?

"It's complicated."

I struggled quite a while to come up with a reasonably elegant solution,
until at some point I realized that all maximally saturated colours for
any given brightness fall into one of the following two categories:

(A) pigments that exhibit 100% reflectivity across a single (possibly
broad) spectral band, and 0% reflectivity outside that band
(blue-green-yellow-red side of the gamut)

(B) pigments that exhibit 0% reflectivity across a single (possibly
broad) spectral band, and 100% reflectivity outside that band (purple
side of the gamut)

Additionally, it can be noted that by pretending that the range of
visible wavelengths wraps around at the red and blue ends of the
spectrum you can map category (B) to category (A), since the former can
then be interpreted as exhibiting 100% reflectivity across a single
spectral band that straddles the wraparound point.

From these principles a mesh can be computed comparatively easy by
iterating over the "position" of the corresponding spectral band in one
direction (I chose the lower-bound wavelength, but you could just as
well choose the upper-bound wavelength or the center wavelength),
somewhat corresponding to hue, and the width of the band in the other
direction, somewhat corresponding to brightness. The maximum possible
saturation will be a function of the two.

For each mesh vertex you of course still have to compute the XYZ
coordinates of the corresponding spectrum. For this you will need to
perform numerical integration of the CIE Standard Observer table data
over the corresponding range of wavelengths. (Note that this will give
you the equal-energy gamut. For a different illuminant, you need to
multiply each table entry by the illuminant's intensity at the given
wavelength.)

The mesh can be optimized by iterating over the wavelengths in
non-uniform steps, but that seems to be an art of its own, which I
didn't master to the degree I would have liked to.


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.