Commit Graph

7 Commits

Author SHA1 Message Date
e23fe4bb36 Fix deprecation warnings from rustc. 2019-11-23 10:21:16 +09:00
e586442a0a Cleaned up floating point ulp code.
The logic is much clearer now, and the code is more compact.
2019-10-30 21:05:01 +09:00
8deb1e87bb First step transitioning to Rust 2018. 2018-12-16 12:02:20 -08:00
97d3304149 Run new rustfmt on codebase. 2018-03-04 13:00:55 -08:00
b315be0913 Fixed self-intersection bug for coordinates near zero.
This turned out to be a rather interesting one.  The water-tight
ray/triangle intersection algorithm, while very accurate for
finding if there is an intersection with a line segment, is
not as remarkably accurate for determining if that intersection
is within the interval of the ray.

This is because of the coordinate transformation it does
depending on ray direction: for triangles laying flat on one of
the axis planes near zero, that near-zero coordinate can get
transformed to a much less accurate space for testing.  In fact,
generally speaking, beause of the coordinate transform, you can
only rely on the test being as accurate as the least accurate
axis.

The ray-origin offset code was doing offsets based on the
assumption that the error on the major axes are independent, but
as this triangle intersection algorithm shows, you can't actually
depend on that being the case.  So rather than handling triangle
intersection as a special case, I've changed the intersection
position error to be a single float, representing the maximum
possible error on any axis.  This should be robust for any
geometry type added in the future, and also solves the immediate
issue in a correct way.
2017-07-10 00:52:28 -07:00
4e9bfd6e79 Fix for ray origin offsets when intersection point is at 0.0.
For some reason the ulp incrementing is unreliable when starting
at zero.  It creates subnormal numbers, and that seems to be an
issue somewhere in the pipeline, ultimately leading to weird
render artifacts.  Not entirely sure why.

This fixes it by avoiding subnormal numbers in the final offset
ray origin.  Left a note suggesting investigating in more detail
at some point.
2017-06-21 01:36:08 -07:00
011405e131 Implemented robust ray origin calculation for bounced rays.
We take a small performance hit for this, but given that it's
making things meaningfully more correct I feel like it's more
than worth it.
2017-06-19 22:28:44 -07:00