This page provides a tutorial for rendering a walk-through animation of a scene using V-Ray.

 

Overview


In this tutorial, we will render a walk-through animation of a static scene, where nothing but the camera moves. We will use global illumination to light the scene, which makes the task somewhat complicated. GI is usually too slow to calculate during rendering with sufficient quality for each frame of the animation. To optimize this process and save rendering time, we can use the fact that the scene is static and the camera is the only thing that moves. Most of the GI solutions used in V-Ray (irradiance map, photon map, light cache) are either fully or partially view-independent, which means we can calculate (and save) a GI map for the entire scene at once and use the saved file to render each frame in the sequence. This approach reduces render time over calculating GI for each frame as the renderer goes along.

For this tutorial, we will use the Brute force as a primary GI engine, and Light Cache as a secondary engine. An alternative method using the Irradiance Map as the primary engine is also presented.

Note that you don't have to use these methods to render walk-throughs, but these are optimized methods that will keep render times lower than other methods, especially for static scenes.

 

Tutorial Assets


To download the file used in this tutorial, please click on the button below.

 

 

Walk-Through Using Brute Force and Light Cache


In this first section, we will calculate the light cache for the entire animation. The light cache will act as an aid in later steps to speed up rendering.


Set up the scene

  1. Open the starting scene. This is a simple scene of a hallway with windows. The camera for the walk-through animation is set up to follow a path around the scene.




  2. Assign V-Ray as the current renderer.

  3. In the 3ds Max Environment and Effects window, set the Color for the Background to RGB 252, 252, 252, a near-white color.


Set up GI

Now we will set up global illumination for the scene using the Light cache engine. Make sure the following default values are set.

 

  1. In the Render Setup window, under the GI tab, in the Global Illumination rollout, turn on the Enable option to enable Global illumination.

  2. Set the Primary engine to Brute force and Secondary engine to Light Cache.

In the Light cache rollout, enable Show calc. phase.

 

3. Under the V-Ray tab, in the Image Sampler rollout, set the Type to Progressive for faster previews, with a Render time (min) of 10.0. 


Set up a Fish eye camera

A fish eye camera uses a wide-angle lens so we can see a great deal of the scene all at once. Such a lens will be useful for testing the light cache to see if it meets our needs.

 

  1. Go to the Camera rollout and change the camera Type to Fish eye.

  2. Disable the Fish eye auto-fit option, and change the Fish eye dist value to 1.0 and Fish eye curve to 0.35.

 


Test a single frame

Let's see how our rendering looks so far.

 

  1. Render frames 0 and 360 for reference.

     

     


    The light cache looks all right. Now we will need to calculate it for the entire walk-through animation and save it for later use when rendering the final animation. Note that this is not strictly necessary; we could render the animation with the light cache being calculated for each frame as the renderer goes along, instead of ahead of time. However, calculating and saving the light cache, then loading it for the final rendering, will save rendering time, especially for long animations.
     

  2. In the Light cache rollout, set the Mode to Fly-through. Make sure that the timeline animation range matches the range which you want to render. This is important because the light cache will look at the current timeline animation range when calculating the fly-through cache.
     
  3. Since all the light cache samples will be distributed among all the animation frames, we will need to increase the light cache rollout's Subdivs value. The exact value depends on the quality you want to achieve and on your specific animation. If the camera moves slowly, or the path is relatively short (e.g. just one room of a house) then you can use a lower Subdivs value since most of the samples will fall in the same place. If the camera moves quickly or covers larger parts of the scene, you will need more samples to get adequate coverage everywhere.

    In the Light Cache rollout, set Subdivs to 2000.
     
  4. Render frame 360 as an example. Note that although we render only one frame, Fly-through mode forces the light cache to be computed for the entire animation:

 

 

 

During the calculation of fly-through mode, the preview display of the light cache is not very useful, since it shows samples from the entire camera path. The following image shows the preview display while the light cache is being calculated:

 

 

 

Test the Light cache

Now that we have computed the light cache, we need to see if it is good enough for our needs. We can do this by rendering several different frames with the same light cache. First, let's save and reload the light cache.

  1. Set both Primary engine and Secondary Engine to Light cache.

  2. In the Light cache rollout, click Save to save the light cache to disk with any file name, such as lightcache.vrlmap.
     
  3. Set the Mode to From file and select the saved file name.
     
  4. If you haven't done so already, click the Default button in the Light Cache rollout to cause it to display Advanced settings.
     
  5. Change Filter to None so we can better see the samples' size.
     
  6. Render frame 435 as a representative frame so we can see what is happening with the light cache.

 

 

You can notice that in places where the camera gets close to a wall in the scene, the light cache samples are smaller and more noisy. Overall, the sample sizes are uneven. We will fix this in the next step.

 

Set Scale

We get uneven sample sizes because the light cache Scale is set to Screen by default. This causes samples farther away from the camera to be larger. This is fine for still images, but for animation we would like a more even sample distribution. To achieve this, we will need to use the World option.

  1. In the Light Cache rollout, set Scale to World.

    Now we have to determine a good Sample size for the scene. This can be done, for example, by creating a geosphere directly in the camera viewport or a Tape object and using it to visualize the sample size. In general, you should make the Sample size as large as possible without getting artifacts (light leaks, etc.). Even if you are getting some light leaks, it may be possible to remove them by reducing the filter Interp. samples value.

  2. Set the light cache Sample size to 1.0.

    Keep in mind that when you use the World scale, you must make sure that your scene is not too large (e.g. with a large ground plane) or that the light cache samples are not too small, otherwise you can run out of memory for the light cache. This is not such a problem for the Screen mode, since surfaces that are far away from the camera will get fewer samples anyways. For exterior scenes, it is recommended to use Screen mode always.
     
  3. Change the light cache Mode back to Single frame and lower the Subdivs to 500 just to check if the sample size is adequate.

    The samples are equal in size everywhere and they are just large enough so we don't get artifacts on the image.


 

Finalize the Light Cache

Now we can wrap up our Light cache calculations.

 

  1. Set the light cache Mode to Fly-through again.

  2. To smooth out the light cache a little bit, increase the Subdivs to 3300.

  3. Change Filter back to Nearest for better sampling.


Render frame 360 as a test. The calculation time is longer now due to the increased number of subdivisions. 



 

Finish up

Now we can save our light cache file.

  1. Save the light cache, and set the Mode to From file again.

    You may notice that the light cache file has become bigger in size. This is because there are more samples in the light cache, partly because the Scale is set to World. As a result, the same amount of samples are taken everywhere in the scene. For comparison, in Screen mode, the sample size increases as the samples get farther from the camera, which leads to less samples.

    Now we can render several different frames to make sure that the light cache is adequate for our animation.

  2. Set the Primary engine to Brute force and keep the Secondary Engine as Light cache.

  3. Render a few frames as a test.

 

Frame 0

 Frame 360

Frame 435

 

 

Now we are ready to render the final animation.

 

Final Render Settings

For the final animation you can use Autodesk Backburner with the saved light cache either on the client PC or locally on each server machine. In either case, you must make sure that each render slave can find the Light Cache .vrmap in the location specified in the From file parameter in the Light Cache rollout.

  1. In the Image sampler rollout, set the Type to Bucket. Under the Global Switches (Expert Mode) set the Secondary Ray Bias parameter to 0.0. 

  2. Set 3ds Max to render every single frame from the Common tab of the Render Setup dialog.

  3. Render the final animation.

 

Here is the resulting final animation that you should get if you have followed the tutorial correctly. You can find the final scene attached along with the other assets. 

 

 
 


Alternative Method: Irradiance Map and Light Cache


While the method outlined in this tutorial will give good results with a reasonable render time, there are other methods you can use such as the Irradiance Map.

Compared to the light cache, the irradiance map can take significantly more time to calculate because it provides a finer solution than the light cache. The irradiance map takes care of the small GI shadows in the scene that the light cache might miss.   

Note that the irradiance map cannot be calculated through Autodesk Backburner; it must be calculated on a single machine. This is because we will use the Multiframe incremental Mode. This mode computes a full irradiance map for the first frame and refines the same map for all following frames.

 

Set up the Light Cache

Follow the steps in the previous tutorial for creating the light cache and saving it to disk:

  1. Set both Primary engine and Secondary Engine to Light cache.
  2. Set Filter to Nearest.
     
  3. Set the light cache Scale to World.
     
  4. Set the light cache Sample size to 1.0.
  5. Set the light cache Mode to Fly-through.
     
  6. Increase Subdivs to 3300 and render a test frame. 
  7. From the Light cache rollout, save the light cache to disk, for example to lightcache.vrlmap.
     
  8. Set the Mode to From file and choose the file. Alternatively, you can use the pre-calculated Light Cache map from the assets pack attached. 

 

Set up the Irradiance Map

  1. Set the primary engine to Irradiance map. Leave the secondary engine as Light Cache with the saved light cache loaded and ready to use.
     
  2. In the irradiance map rollout, set the Mode to Multiframe incremental.
     
  3. Enable the Show calc. phase option.

 

Adjust Render Settings

Since the camera moves quite slowly, there is no need to render every single frame of the animation at this stage. We can get an adequate irradiance map by rendering every 5th frame, for example. Faster camera movement would require smaller steps, while slower camera movement could use slower steps.

  1. Set 3ds Max to render every 5th frame.
     
  2. Turn on the Don't render final image option in the Global switches rollout, since we are not rendering the final animation yet and don't need the final frames.
     
  3. Render the entire sequence.

 

Finish up

  1. Save the irradiance map to a file, for example to irmap.vrmap.
     
  2. Set the irradiance map Mode to From File with the saved file. Now we have one irradiance map for entire animation sequence. We can render a few frames to make sure everything is ok.
     
  3. Turn off the Don't render final image option in the Global switches rollout.
     
  4. Render frames 0 and 360 from the animation:

 

 

 

 

 

 

Now we are ready to render the final animation with this alternate method.

 

Final Render Settings

  1. In the Image sampler rollout, set the Type to Bucket. 
     
  2. In the Irradiance map rollout, make sure the Sample lookup is set to Density-based (Expert Mode). This will enable the irradiance map to pick the closest available samples from the cached solution.
     
  3. Set 3ds Max to render every single frame from the Common tab of the Render Setup dialog.
     
  4. Render the final animation.

 

You can find a pre-calculated irradiance map for the whole animation attached in the assets. 

 

Discussion


In this section, we have added some questions about this tutorial that were asked on our online forum, along with the respective answers.

Q: Did you render out to consecutive images and then compile an .avi file, or was it straight out to .avi?

A: The animation was first rendered out to .png images, and then compiled into an .avi. That way, you won't lose all rendered frames if something goes wrong in the middle of the rendering, and also you can experiment with the compression settings later.

 

Q: Why did you choose Multiframe incremental over Incremental add to current map mode? What is the difference between the two?

A: The only difference is that Multiframe incremental mode will delete the map in memory at the start of the rendering. With the Incremental add mode, the current map is not deleted.

 

Q: It is possible to use Incremental add to current map mode in conjunction with Backburner without any problems (i.e. flicker)? Does Backburner handle frame allocation okay without 3ds Max saving any files? 

A: Yes, you can render different sections on different nodes, but you must merge the resulting irradiance maps manually with the irradiance map viewer in the end, before rendering the final animation. Also, you must make sure that each section is allocated to one single render node only.

 

 

Notes


  • We are not using glossy reflections in this scene. If you have glossy reflections in your scene and are not using the light cache setting Use for glossy rays at the same time, then you can set the Secondary GI engine to None for the final animation. This is because you won't need the light cache and turning it off will save memory.
  • This scene is done via V-Ray version 3.60.04 and is compatible with 3Ds Max version 2015 and later. All screenshots and renders on this page represent that.
  • There is a Denoiser render element added in the scene.