Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lack of proper gamma compression for the output #3

Open
Photosounder opened this issue Apr 25, 2020 · 2 comments
Open

Lack of proper gamma compression for the output #3

Photosounder opened this issue Apr 25, 2020 · 2 comments

Comments

@Photosounder
Copy link

There's a major but common mistake which makes all the images look wrong. The images are naturally calculated using linear light values but saved as 8-bit sRGB values without any correct conversion from linear values to sRGB (gamma compressed) values. Here's how it should look once that problem is fixed:
refraction size 512 N=4096 aa=0 4

This is quite radically different, and you can now see how the beams that cross into the shadows appear as bright as they should. The way to do it is to replace this:
p[0] = p[1] = p[2] = (int)(fminf(sample((float)x / W, (float)y / H) * 255.0f, 255.0f));
with this:
p[0] = p[1] = p[2] = (int)(255. * lsrgb(fminf(sample((float)x / W, (float)y / H), 1.f)));

and add somewhere a function lsrgb that does this:

double lsrgb(double linear)	// converts a [0.0, 1.0] linear value into a [0.0, 1.0] sRGB value
{
	if (linear <= 0.0031308)
		return linear * 12.92;
	else
		return 1.055 * pow(linear, 1.0/2.4) - 0.055;
}

Btw in the image above I also added Gaussian antialiasing which is achieved by adding a Gaussian jitter in the sample() function to x and y independently.

@miloyip
Copy link
Owner

miloyip commented Apr 27, 2020

Thank you for your info.
I am not sure if sRGB chunk is not avaliable in a PNG, how the color is intrepreted.

@Photosounder
Copy link
Author

The default way a PNG is interpreted is sRGB. Besides you really wouldn't want an 8-bit linear image, you would see tons of banding in the darks, as if there were about only 4 bits,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants