Photorealizer now has high quality, physically accurate, spectral dispersion.
I improved the dispersion system in Photorealizer using some ideas that I wrote about in two old posts and a comment (
here,
here, and
here). Instead of just tracing rays for RGB primaries, I now trace rays across the entire visible spectrum. Most parts of Photorealizer still use RGB color, but when a dispersive material is encountered, I choose a single wavelength from the visible spectrum, determine the index of refraction using the
Sellmeier equation, and then continue path tracing with that wavelength. Then I convert the results to sRGB primaries using the spectral responsivity curves of the camera's RGB sensor. I derived these spectral responsivity curves from the new physiologically relevant CIE XYZ color matching functions (which I wrote about in
this post on my sky renderer blog), and normalized them such that pure white light (containing equal amounts of all the wavelengths of the visible spectrum) is transformed into pure white in the sRGB color space (1,1,1) (i.e., I made each curve integrate to one). The spectral responsivity curves can take on negative values, and I don't clip negative color components until a bitmap image is output, which allows colors outside the sRGB gamut to be represented using the sRGB primaries. While these negative colors can't be displayed on a typical display, they are still useful and necessary for accurate color math. For example, adding a positive color to a negative one can result in a positive color in the displayable range, but if the negative color had been clipped to zero the result of the addition would be different and wrong.
I rendered new images of diamonds using my improved dispersion system. These images are 1600x900. You can click on an image to enlarge it, or you can open an image in a new tab or download it to ensure that you are viewing it at full size.
omg fancy!
ReplyDeleteOw wow! Impressive!
ReplyDeletemuy sorprendente tus graficos!!!
ReplyDelete