Monday, October 1, 2012

HDR and LDR Lighting Workaround



I recently received great feedback from Dewald Swanepoel ( and it is very very useful!

He mentioned enabling 'Sample as Lamp' under 'World' context then 'Settings' tab.  It does make wonders and I'm quite surprised by the results I got! Increasing the map resolution will give you less noise on your renders.  This and the 'Filter Glossy' (under 'Render' context then 'Sampling' tab) option is indeed a valuable tandem.  Check the screenshot below for a quick reference:

(click to enlarge)

Thanks, Dewald!



On the meeting last Saturday on Luke's Escape, there had been a discussion regarding the use of HDRi images for lighting one of the scenes.  Undoubtedly, HDR images are very powerful tools in creating realistic renders due to a couple of reasons.  However, they often demand more resources to generate a decent output.

On the renders you'll see below, there were no external lamps/emitters used to illuminate the scene, it's only using the World's Environment Texture and controlled via the 'Strength' option.

You'll also notice from the Waveform monitor that some details on the LDR (.tif) image are clipped (but not much) as a result of converting down the image's bit depth from HDR to TIFF format.

  • HDRi pros:

    • more dynamic, deep, and realistic lighting
    • no need for high Strength values to increase lighting intensity
    • better contrast, tonality, and color depth
    • light source from HDRi is simulated and creates realistic shadows
      • noticeable when animating the Environment Texture's rotation mapping

  • HDRi cons:

    • noisy at relatively average amount of rendering samples
    • heavy on memory and file size
    • relatively slower render time

  • Workarounds:

    • convert HDRi image to LDR (e.g. PNG, JPG, TIF, etc.) and use it as you would the HDRi image (as World Environment Texture)
      • you can open the image with Blender's Image Editor, check the image size, then save it as other file formats
      • or better, use the Tonemap node in Blender's Compositor to tonemap the image and maintain as much color tonality as possible and avoiding too much color clipping
    • increase the World Strength to emulate the HDRi's strength
    • to fake the shadowing received from HDR images, use lamps/mesh emitters instead
    • color grade the contrast effect that you get from an HDRi workflow if you choose to use LDR images
      • or you can adjust the Exposure settings found under 'Render' context then on 'Film' tab

HDR image lighting
(click to enlarge)

LDR image lighting
(click to enlarge)

(click to enlarge)

Rendered with: Cycles
Rendering Samples: 500

More info and references:

Thanks for your time! :)



Rıza said...

thanks for sharing this knowledge!

Anonymous said...

Nice, remember that 'sample as light' option in world settings helps a lot with hdri lightning... cool images you've got here, thanks for sharing tips also!

SUbCult said...

You could also blur the HDR image heavily and scale it down to lower resolution. It will still work well for lighting.

Dewald Swanepoel said...

That is an excellent hdr image to show how amazing cycle's image based lighting is when you check sample as lamp. You can see the individual light sources(Look at the different shadows). Wow!!

This was thanks to Farny ( An excellent contribution.

tischbein3 said...

shamless plug:
Another way to drastically reduce noise is to use a blurred and drastically smaller hdri. Like the sIBL sets do:

these technique do also work in combination with the techniques you describe.

To get still the high resolution background for reflection and bg image you still can use a nodal setup using different maps for glossy and camera rays

hope this helps

Anonymous said...

Well if someone has enough knowledge it can make a link to hdrlabs sIBL to work with Blender

Reynante Martinez said...

Thanks a lot! :)


comeinandburn said...

thanks for passing on the tip:)

regarding HDRlabs, specifically SmartIBL. This project is opensource, and what makes it awesome is that it can automatically load the proper texture channels with it's output.

I've been wishing for someone with python skills to make a script loader for Blender. This would be insanely helpful! Please! Please! Please! non-coders need help:)