Fixed a rare case of NaN in Cycles

Authored by Stefan Werner (swerner) on May 19 2016, 10:51 AM.



This fixes a rare case where NaNs could exist inside Cycles. When certain invalid meshes were passed in, Cycles would try too normalize a zero length normal during its setup stage. While it does check against division by zero, it still returns a zero length normal and passes it on to the path tracing kernel. The kernel then operates under the assumption that normals are valid, and in the case of such a zero length normal, would eventually create NaNs that propagate through and result in black pixels.

Diff Detail

rB Blender
Stefan Werner (swerner) retitled this revision from to Fixed a rare case of NaN in Cycles.May 19 2016, 10:51 AM
Stefan Werner (swerner) updated this object.
Stefan Werner (swerner) set the repository for this revision to rB Blender.

We should perhaps remove degenerate faces all together, but think suggested approach would also work.

As far as I know you should only be able to get a zero length normal with zero area faces, which you can't hit. But of course with float rounding issues it's not so simple, and this workaround for these rare cases seems ok.

@Brecht Van Lommel (brecht), i'm not so much sure you can't hit zero sized faces with the watertight approach we've currently got. Would need to be checked tho as we don't implement paper one to one.

This revision was automatically updated to reflect the committed changes.