|
![](/i/fill.gif) |
Chambers schrieb:
>> Apparently, even mesh models about 1 POV unit in total size may be too
>> small in this respect.
>
> Doesn't POV consider positions within 0.001 units of each other to be
> equivalent? This would certainly account for that.
That would only account for part of the effect I observed.
It appears that in some semi-rare cases, not only does POV-Ray ignore
intersections closer to 0.001(?) units from the current point, but /all/
intersections from the same object.
After having had a closer look at the code, I have a vague idea what's
going on there, and if I'm right, I really think it needs fixing.
Basically, it seems that what happens is as follows:
- The mesh is tested for intersections by computing all ray-triangle
intersections; this is done in mesh coordinate space, i.e. the triangle
vertices are never actually transformed (which allows copies of the very
same mesh to share the mesh data regardless of transformations,
rotations or even scaling or shearing), but the ray origin and direction
are subject to the inverse transformations instead before performing the
tests. Intersections "too close" are discarded right away, with "too
close" being 1e-6 units (in /mesh/ space!).
- This list of intersections is then traversed to identify the closest
intersection with the whole mesh.
- To determine which of all objects is closest, this process is
performed for all objects; if an object's closest intersection is
farther away than an intersection with some other object already found,
it is ignored; likewise, if an object is "too close" (being 1e-4 units
in /global/ space), it is ignored as well.
Note the fallacy here: This process causes /all/ intersections with a
particular object to be ignored if the /closest/ of them is "too close".
This wouldn't be a problem if intersections "too close" were already
filtered out in the ray-mesh-intersection test, but that is not the
case: Although a "too close" filtering is done, it (a) uses a more
"forgiving" numeric constant, and (b) is done in a completely different
coordinate space.
If this is really what is happening, then it means that meshes are
generally prone to exhibit edge artifacts whenever they are not scaled
to at least 100 times their "raw" dimensions.
Post a reply to this message
|
![](/i/fill.gif) |