The Native (Builtin) IBL
Inside mental ray there is a Native or Builtin image based lighting scheme called environment lighting mode. This was integrated into mental ray some time ago in version 3.7. So it’s been around for about 4 years or more.
It’s unexposed in OEM packages but using our new UI for rendering, we have exposed it for use in Maya 2013. mentalCore also makes use of the Environment Light. We refer to the feature in the UI by its String Option name: Environment Lighting.
Edit: This is properly exposed in Maya 2015 in the Environment Lighting as “Light Emission”
Keep in mind you should be using the UI provided or at the least add the “light relative scale” string option to correctly light non-BSDF or legacy materials. Otherwise they will blow out. This is also true of the user_ibl_env shader. The MEL script below will add it otherwise. (This is unnecessary in Maya 2015 as it is already added from Autodesk.)
select miDefaultOptions; int $idx = `getAttr -size miDefaultOptions.stringOptions`; setAttr -type "string" miDefaultOptions.stringOptions[$idx].name "light relative scale"; setAttr -type "string" miDefaultOptions.stringOptions[$idx].value "0.318"; setAttr -type "string" miDefaultOptions.stringOptions[$idx].type "scalar";
Why do I want to use this?
Simply put: It’s fast and automatic direct lighting of scenes where your primary light source is a high dynamic range image (HDRI).
You have heard of this method in other packages as a Dome Light and in Maya 2013, the user_ibl_env was introduced with similar functionality.
Why would I use this instead of the user_ibl_env?
- The Environment Light re-bakes data by point sampling an environment attached to your camera. This means it also accepts procedurals unlike the user_ibl_env shader.
- In the baking process you can re-bake to a lower resolution that automatically blurs the texture detail, meaning typically faster glossiness and less variance
- The Environment Light combines with BSDF shaders to use Multiple Importance Sampling automatically for quick renders
- The Environment Light will allow you to continue to use the Maya IBL mechanism that is visible and manipulable from the viewport.
- It uses a simple “Quality” scheme that is familiar from Unified Sampling and they work together accordingly.
Can’t I just light with Final Gather?
Sure. But Final Gathering (FG) samples in a way that distributes rays somewhat randomly. This means you have a few obvious problems illustrated below:
- Splotches. Being an interpolated scheme means you need great accuracy to resolve fine lighting details.
- Soft shadows and sort-of occlusion-like shadowing. You need a LOT of accuracy to get the shadows looking correct.
- Complex or high contrast HDRIs need a lot of FG tuning.
An easy way to illustrate this is to look at the indirect diffuse lighting pass.
Now try the Environment Light alone!
MUCH better with pretty much default settings.
Was it longer to render? Yes. It’s a brute force-like technique. But in order to get the same quality from FG would take much MUCH longer to render. So in that comparison, Environment Light is actually much faster.
What does FG + Environment Light look like?
In this situation I was able to capture direct and indirect lighting. But now, indirect lighting is only captured for object to object light reflection. Take a look at the indirect diffuse pass now (it’s very hard to see in this case, open in a new window):
This means you can greatly reduce your FG “accuracy” setting. In some cases as low as 8 or 16 rays. Keep in mind you might still need an FG filter setting of 1 if highlights on nearby objects are especially hot and generate speckles like the first indirect diffuse picture.
Another important thing when using the mia_material: by default it does not generate a specular (direct reflection) from a visible area light. This means your specular pass may be empty for the mia_material because it is using indirect reflection (reflection rays) to sample the environment. Other shaders that directly sample the Environment Light (like the car paint shader) may show noise or grain because it’s less efficient. To reduce this grain you have to increase the “Quality” of the Environment Light (or more Unified Sampling Quality at less efficiency)
How can I set this up?
You can use the regular Maya procedure for adding an HDRI or a Texture to light the scene including the flags. You can also attach any environment to the camera such as an environment shader, environment switch or Sun & Sky.
What are the controls?
First: I want you to realize this is NOT the Maya IBL “emit light” option.
Here are the important exposed controls: (please excuse their existence in the Indirect Lighting Tab. It is a form of direct lighting as illustrated above.)
- On: This means “Automatic” mode. Until the correct Progressive API is used in Maya, there is little point in using Approximate lighting mode. (Approximate generates probe rays and then fills in ambient lighting from the HDR for fast but inaccurate lighting. The other modes sample the light as a light source.)
- Quality: Scalar slider for quality/grain control. Many scenes with sufficient texturing/complexity can get away with as little as 0.3. Increasing this value decreases grain/noise at the cost of speed, more shadow rays are traced. (Too much noise is insufficient Quality)
- Scale: Multiplier for the light. Used to control tint/shade and brightness (value) The visible environment is not changed, only the light contribution. Environments are typically assumed to be comped later.
- Shadow: Optimization, solid shadows are faster but treats all objects as opaque. Off is no shadows cast.
- Cache: on/off, this creates an acceleration structure for faster lookup on complex lighting. This means the lighting lookup is done through a non-texture mechanism. Reflections may show artifacts at insufficient baking resolution (described below) but should light faster. Off = baked to texture with the usual implications/mechanisms for texture lookups.
- Resolution: The lower the resolution, the faster the baking, less memory usage, and quicker rendering at the cost of details in reflection and lighting. (Works with iray as well) Below is an example where the resolution is so low the shadows are muddy and the lighting is very dim because the baking process missed some of the light sources. Below that is a correct version with higher resolution.
Resolution involving Cache “On”. Notice how the same resolution for the cache “on” mode did a better job by default for the lighting and shadows.
- Shader Samples: When baking the IBL, this will take more samples before baking to avoid missing details or little hotspots. Useful with complex HDRI or small resolution settings like the above examples(Works with iray) This isn’t typically important with low contrast or low detail maps/procedurals. A ramp for example, will not benefit from more samples. Use this if you find that you are missing some small light sources or shadow details suffer. You can find a happy medium of lower resolution and some extra shader samples typically easily.
Things to note:
- HDRIs with low range or values will not produce crisp or deep shadows. You might want a happy medium range in a tonemapped HDR so you don’t have hot spikes in reflections and poor shadowing.
- HDRIs with multiple light sources will automatically cast multiple shadows.
- Don’t forget to use “light relative scale”!! (MEL at the top of the post)
- Concave objects or interior scenes not lit directly by the Builtin IBL will need the usual higher quality FG and Portal Lights.
- Set-acquired HDRIs work well for this with some additional bounce lights to “sweeten” the look.
- The mip_matteshadow shader can be used to capture shadows for compositing onto live action plates.
- Remember to use HDRI data. JPEGS and other common formats do not have enough range to produce good lighting.
- Remember to reduce your Final Gather accuracy to speed up renders considerably. You do not need high settings since the Environment Light handles the bulk of the work.