Accelerating Raytracing

Everybody knows it: To make an object reflective, You use a Raytrace Material in the scene, and whamma!: Your render times explode, and You wait forever for an image. The alternative, using a Reflect/Refract Map, usually fails to do the job because the reflections aren't accurate enough, resulting in simply wrong and illogical reflections.

To lower render times with a raytraced scene, there's an easy albeit expensive solutions: A dual-CPU setup, with two processors. This accelerates calculations enormously. But, as stated before, it's expensive and therefore not a viable solution to everybody.

There are, however, also some other methods You can employ to cut render times when using a Raytrace Material.

1. Disable Antialiasing:
Going to the Material Editors and clicking on the "options" button in the Raytrace Parameters rollout presents You with a new window with a lot of options that can be adjusted for local (i.e. the currently selected material) as well as global (all Raytrace Materials) usage. One of these is Antialiasing, which defaults to being off in the global scope.

The image above shows a scene with 5 spheres (one in the middle, and 4 around that one), a roof and a floor. On a 450MHz single-processor Pentium II with 128MB of RAM, it took 2:28 (mm:ss) to render. This was with antialiasing enabled. With antialiasing disabled, it only took 30 seconds. In the aforementioned menu, You'll also find more options for self-reflections, and whether atmospheric effects and fogging should be included in the reflections. These are also options You can usually leave out of the calculation.

2. Enabling Raytrace-Falloff

In the "Attenuation" rollout, You can enable the falloff of the reflections. When disabled, even objects at the most far reaches of Your scene will be reflected, even if they won't show up any larger than a single pixel in Your reflection. This is overkill, as You usually won't notice these reflections anyway. So use that Falloff! There's multiple types of falloff. I usually use the linear type, as it's the most simple to fathom: The value (X) for "Range-End" dictates that all objects outside a radius of X units will not be included in the calculation of the reflections anymore. The "Range-Start" value dictates the radius at which objects do get included in the calculations. Feel free to play around with these values a bit, and You will notice that the falloff values also affect the strength of the reflections in the material - they will get darker). In our example, the example has been reduced to 20 seconds using it though (image to the right).

 

3. Lowering the Ray Depth

In the Global Raytracer Settings dialog (in the Raytrace Parameters rollout), You can change the Ray Depth. Defaulting to 9, the "Raytrace-ray" will bounce around reflecting surfaces nine times, before it stops calculating for that ray. This means, as seen in Images 1 and 2, that the spheres reflected in the spheres reflected in the spheres reflected in the spheres.... are reflected in the spheres. Who needs that?!

More often than not, this level of precision is not necessary - and lowering this value to 1 reduces our render time to 9 seconds (image to the left). The absence of inter-reflections is, however, obvious. The spheres only reflect each other once, no more. So depending on Your scene this value can be safely lowered, but You have to trade quality in for render time. You should also keep in mind that this method is only of use, when there are objects reflecting each other, or when one object is shaped in such a way that it can reflect itself (for example, the inside of a tube). With a single chrome sphere the Ray Depth has little to no effect, but is the ideal situation to reduce this value to 1, as You don't have a situation in which inter-reflections would play a role.

4. Excluding objects from reflections

These can also be set in the "Raytrace Parameters" rollout, in both a local as well as a global scope. Sometimes it's not necessary to have every single object be reflected in the reflecting objects. Excluding multiple objects can lower the render time even more. In our chrome spheres example, however, that would have little use.

Conclusion: In this short example, we have reduced the render time from 2:28 to 0:09, at a cost of the quality of the image. Depending on Your situation, You would need to determine Yourself how much and to what extent You would use the methods mentioned above to ring down render times.

© 2000 Andreas Skrzypnik / lightrays.de

93Grad - design und animation für entertainment

Translation : Richard Annema / http://www.maxunderground.com/