Dead pixels issue resolved

Project Page Next project post Post History

Earlier today I made a post about getting depth of field into Hyperion. I commented towards the end that the renders still had some issues with dead pixels (pixels rendering black). This affect can sometimes be caused by ray-acne. On a side note, I prefer to call them dead pixels, because this is what happens with some camera sensors when the sensor pixel is no good! So dead pixels they are.

You can read the depth of field post here.

I made a mention in this post that I thought the black pixels were caused by ray-acne. Ray-acne on a technical level, is a problem you get when casting bounce rays that start behind the surface due to small rounding errors in floating point numbers. It's like hitting a surface, then reflecting off it, but the reflected ray starts from behind the surface, so you end up getting the backside of the surface you want to bounce off, that is, you hit the back of the same surface.

But as it turns out, this wasn't the cause.

I did have ray-acne, or shadow-acne, accounted for in my code. Which puzzled me, because I was still getting dead pixels. It turns out, that some parts of the code were returning NaN values instead of coloured values. In this instance, NaN stands for "not-a-number". It means the coloured data was in fact not a number-based piece of data.

Computers can be a complicated thing behind the scenes, you don't always get what you expect.

I'm not completely sure what the cause of it is yet, suffice to say that I've now put in some code to protect the colour data from being corrupted by non-numbered data. I tried rendering with depth of field again, and with the newer code pretection, and it seems to have solved the dead pixel issue. At least, for now.

A cleaner render, with depth of field enabled, can be viewed below.

Hyperion render with depth of field and no dead pixels.