Skip to content

Lack of proper gamma compression for the output #3

Description

@Photosounder

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions