In our current project, I've come across some apparent limitations of the
raytracer that I didn't realize could appear in production scenes.
Basically, I'm pretty sure they all boil down to floating point accuracy
problems, either with MR's functions or the BSP algorithm. All of the
problems are induced by placing or scaling objects so that the scene
bounding box is large. In the scripts I have somewhat contrived dimensions,
but we are currently experiencing artifacts in a job where we are rendering
game environments that came from a 3rd party vendor. You'll have to take me
at my word that we've done our best to ensure that the assets aren't any
larger than they need to be. Currently, we're working in feet and our scenes
are bounded by roughly a 5000 foot radius, which seems fairly reasonable to
us. Even OpenGL can handle this density without problems. What we've noticed
is that the scale at which raytracing artifacts are encountered is dependent
on the density of other geometry in the scene (this is why we're pretty
suspicious of the BSP algorithms). So, we think the problem is being
exacerbated by the fact that our environment is both dense and large, though
we don't believe it to be unreasonable in either sense -- remember, it's
just a game asset.
The types of artifacts we're getting include: * Shadow inaccuracy that
produces sub-triange patterns on geometry faces. (Run the first repro
script -- examine the sphere.)
* Final Gathering artifacts caused by the fact that presample FG rays are
sent by the raytracer (not scanline) and in our scenes the
raytracer sometimes has what appears to be a "clipping plane." This is weird
because as I understand it, the raytracer doesn't have
a camera-space clipping plane. Run the second script to see what I'm talking
about -- the grid gets clipped away near the camera.
I guess my question is, has anyone else encountered this before? Is there a
solution? (We've tried scaling down the entire scene and camera and the
artifacts do not seem to change). I'm open to any ideas. Even workaround
suggestions like rendering the distant parts of the environment to a texture
and somehow clipping those parts of the scene away are welcome.
Here are the three scripts that should produce problems similar to what I'm
talking about. One interesting thing is that hiding the distant/scaled
object doesn't always completely eliminate the artifacts. This is especially
annoying because it means we'd have to actually delete parts of our
environment to account for artifacting. I realize that at some point
floating point accuracy always breaks down. These scripts have pretty high
dimensions. I didn't bother trying to converge on minimal problem
dimensions, so it's possible smaller ones create the same problems. And keep
in mind that additional complexity in the scene seems to reduce the limits
further, which seems like it shouldn't really happen.
-Andy
'Script to produce shadow problem
NewScene
CreatePrim "Grid", "MeshSurface"
CreatePrim "Sphere", "MeshSurface"
Translate , 0, 4, 0, siAbsolute, siPivot, siObj, siY, , , , , , , , , , 0
SetValue "light.light.soft_light.intensity", 1
SetValue "light.light.soft_light.shadow", True
SetValue "light.light.soft_light.factor", 0
SetValue "Scene_Root.AmbientLighting.ambience.green", 0
SetValue "Scene_Root.AmbientLighting.ambience.red", 0
SetValue "Scene_Root.AmbientLighting.ambience.blue", 0
CreatePrim "Sphere", "MeshSurface"
Translate , 0, 1000000, 0, siAbsolute, siPivot, siObj, siY, , , , , , , , ,
, 0
'Script to produce raytracing "clipping plane" problem
NewScene
CreatePrim "Grid", "MeshSurface"
SetValue "grid.grid.ulength", 50
SetValue "grid.grid.vlength", 50
SetValue "ViewRenderOptions.Scanline", False
CreatePrim "Sphere", "MeshSurface"
Scale , 5000000, 1, 1, siAbsolute, siPivot, siObj, siX, , , , , , , , 0
Scale , 1, 5000000, 1, siAbsolute, siPivot, siObj, siY, , , , , , , , 0
Scale , 1, 1, 5000000, siAbsolute, siPivot, siObj, siZ, , , , , , , , 0
'Script to produce raytracing "noise" problem
NewScene
CreatePrim "Grid", "MeshSurface"
SetValue "grid.grid.ulength", 50
SetValue "grid.grid.vlength", 50
SetValue "ViewRenderOptions.Scanline", False
CreatePrim "Sphere", "MeshSurface"
Translate , 0, 9000000, 0, siAbsolute, siPivot, siObj, siY, , , , , , , , ,
, 0
---
Unsubscribe? Mail Majordomo(at)Softimage.COM with the following text in body:
unsubscribe xsi