• Confluence is currently running with all non-system plugins disabled, some functionality may be missing
Child pages
  • Photography techniques to speed-up interior renders
Skip to end of metadata
Go to start of metadata

Render by Alfonso Perez


Interior scenes have always posed a challenge for CG artists, both from a creative point of view (where to place the lights to get the best results) as well as from a computational point of view (large amount of indirect bounced light requires intense render calculations).

Professional photographers are faced with similar problems. Very often for example, when a photographer shoots an interior space, bounced light can leave some less accessible areas of the room in darkness, forcing the photographer to increase the film ISO - resulting in a noisier image. Sound familiar?

So what do photographers usually do when this happens?  A common practice is to place extra lamps in the room which are cleverly hidden from the camera, mimicking the natural light already present in the scene. They do this in order to get the extra, direct illumination they need for dark areas which dont receive the natural, indirect light. And we can use the same concept to enhance and speed up the natural lighting in our interior renders. 

The motto then for this technique is to convert the indirect illumination into faster direct lighting - whilst keeping the natural look. Because direct light will help to clean the areas where indirect light takes longer to reach, this approach will speed up our render process while keeping the results natural and physically correct. 

The star of this technique is the invisible emitter, a very useful tool that we can use to place custom light sources wherever we need them, without them being perceived in the render. 

In this tutorial we will describe three different lighting scenarios, and look at how we can apply this simple idea.

First scenario: Improving a sky lighting scene

The first scenario we are going to study is an interior scene lit only with the sky illumination (no sun). There are three wall window entries and a roof window as well. Once the light sources are isolated, we will have to reinforce their lighting using individual hidden emitters.

The sky produces a diffuse bluish illumination coming from all around, entering the scene through the windows and providing a soft illumination. 

Rendering the scene as-is on a i7-3930K CPU, we achieve this result in 9 minutes: 

Sky illumination only. Render time: 9 minutes 

This still looks quite noisy so lets see what benefits we can get from using hidden emitters at the windows....

Creating an invisible emitter

As we've already mentioned, the key concept here is the invisible emitter. This is an emitter that is hidden from the camera, and doesn't cast any shadows . This way the emitter stays completely invisible whilst lighting the scene. 

The first step to creating an invisible emitter is to set the object that has the emitter material applied to it as Hidden from Camera (found under the "Appearance" section of the Object Parameters panel if you work in Maxwell Studio, or if you are using a plug-in, please check that specific plug-in's documentation to find this feature).

Then, to keep it from casting shadows, the emitter material must have a BSDF component with the following settings:

  • Transmittance pure white (255,255,255)
  • Nd set to 1.0.

This is the definition of a vacuum material (100% transparent and no refraction). Please see our section dedicated to Invisible Emitters for more info. 

With these two settings, the emitter will be completely invisible. Set the emitter component to match the light color and intensity of the blue sky illumination (for this case we've set a [200,220,255] blue color and 1,000,000 Watts to start with, then using Maxwell FIRE to help us adjust it if the intensity needs to be lower or higher). 

Settings for an Invisible Emitter. Hidden to Camera (left), vacuum BSDF (center) and your desired light emission (right)
Click to enlarge


Place one of these emitters at each window pointing inwards to reinforce the light entering through that window. Notice the emitter placed in the roof window as well. 


Placing invisible emitters to reinforce the light coming from each window 


Always use AGS glass materials on window panes instead of real dielectric glass to keep your render times to a minimum. More info about this tip related to AGS glass for window panes found in the link.  In fact,  by placing these emitting planes slightly inside the room, in front of the AGS glass pane, means the light does not need to run through the glass at all. 

Render time - using Multilight as a "Noise control"

After the same 9 minutes we can see that this version already looks a LOT cleaner:

Physical Sky plus invisible emitters at windows - render time 9 minutes

How was this done? We used Multilight to reduce the influence of the Physical Sky light "channel" and thus we hide more of the noise that this channel produces. In fact, in these interior situations with a lot of indirect lighting, we would get the fastest renders if we used only emitters by the windows and no Sky lighting at all (Physical Sky, or Skydome, or HDR). In this case, the speed increase would be around 10x! The important thing to understand with this technique is that you can use Multilight to control precisely which light "channels" are visible and reduce the influence of those that create the most noise.

Important Note

When looking at the improved performance between your scenes, bear in mind that the Benchmark value is meaningless to use as a comparison in this case- what you need to compare is the render time and noise level. The Benchmark value is highly dependent on each scene (emitters, geometry, materials, framing, etc) and provides helpful information when comparing performances using the exact same scene. Given that we have introduced new emitters here, we are effectively looking at a different scene set-up, and so comparing the benchmark value does not provide any relevant information.

So, use the noise level and render time to compare the changes to your scene.

Second scenario: No direct sky lighting

This is a pretty difficult set-up for a raytracer: the light is entering the room through a window on the upper floor, so it's 100% indirect. There is no path that directly links the camera to any light source in one single step. Instead, we have a nightmare of bounces between each emitter and the camera.

Rendering the scene as-is, we get this render in 10 minutes. 

For this situation, the approach will be the same: introduce some emitters to reinforce the natural lighting, and help indirect light with direct lights. 

In this case, in addition to an emitter in the roof window (like the one in the example above), we've introduced a new and interesting element. In order to increase the diffuse lighting, we've created a hemispherical emitter. We've removed the back half of the sphere to avoid it over-lighting the walls near  it. This sphere will provide the rest of the room with direct and easily accessible light (directly coming from an emitter in just one path). 

A half sphere emitter helps to reinforce the indirect lighting from that area 


Optional: In addition to cutting the back half of the sphere, we've also applied a texture map to the emitter material representing a black & white ramp, that will help cast light around the rest of the room but will preserve the near walls from unwanted over-lighting. 

As usual, this emitter object is Hidden from Camera and has a vacuum BSDF to prevent it from casting shadows

A ramp texture map helps cast the light around the rest of the room while preserving the near walls from unwanted extra light

After this, we've rendered this complex lighting scenario in just 7 minutes 15 seconds. Cool!

Difficult bounced illumination reinforced with an spherical emitter. Render time: 7 minutes 15 seconds

Third scenario: Sky with Sun 


For this case we let a direct sun beam enter the room through a window, creating an intense, illuminated rectangular area for direct light on the floor. As this light bounces off the floor, it works as a secondary emitter and provides a bounced light source for the rest of the room. 

Render time: 8 minutes 20 seconds

In this case we will increase the bounced light using a hidden emitter mimicking the sun's bounced light. Again, we apply the same idea: convert indirect light into direct light. We've placed a rectangular hidden emitter on the ground fitting the shape of the sun beam, placing it slightly over the floor and adjusting its emitting settings to mimic that reddish light bounce. As it is hidden from the camera and doesn't cast a shadow, it remains invisible. 

As you may have guessed, we've also placed an emitter in the window to reinforce the sky light, as described in the examples above. 


Enhancing both the sunlight and the sky light with direct emitters. Right: settings for the floor emitter.

Using this technique, we've reduced the render time to 4 minutes 15 seconds, x2 times faster than the previous render. 


Render time: 4 minutes 15 seconds 


It is important to note that this technique doesn't affect the physical correctness of Maxwell in any way. Clearly it still uses physically correct emitters and makes a physically correct image, but it also incorporates a stylistic lighting technique that photographers have been using for years to reduce the noise that typically appears in unlit areas in a scene.

Final words

So will the use of emitters always produce less noise than physical sky lighting? The answer is no, the cases we describe here involve interior renders. For exterior renders, or for product design renders - "open" with the object on a backdrop, then HDR or Skydome/Sky lighting will be faster. This is due to specific optimizations regarding these types of lighting, and the fact that in an open space they can illuminate the scene from all directions, thereby making the render calculations more efficient.

Related content:
Error formatting macro: contentbylabel: com.atlassian.confluence.api.service.exceptions.BadRequestException: Could not parse cql : null