43.8 Retouch and Color

What is the best way to retouch the floor, and what kind of color corrections should I perform on an HDR for the lighting purpose? We will also look into creating undistorted images from fisheye shots

Color Correction

If you need a color correction at all, depends on what you plan to do with the HDR. If used for reflections, you might want a color correction to get more control over how the reflections will actually look

If the HDR is purely used for lighting the scene and reflections are not important, a color correction is likely not necessary

Trap: Do not use the HDR Toning in Photoshop; this would result in an LDR – Low Dynamic Range – non-32-bit image. Use the HDR Toning only to create a pretty JPEG for other purposes than our VFX pipeline

Exposure correction

To compensate for high Preview Exposure margins, simply add an adjustment layer and change the exposure

Color Correction Example

This is an original uncorrected HDR

Color corrected

Color correction applied, looks nicer, but for the IBL lighting process it’s really bad

We need to retain high values for lighting

Alternatively, use the pretty corrected image for reflections and the uncorrected for lighting

Nuke example

Color correction script in Nuke

Advantage: Retaining the full 32-bit color space


Painting out objects such as the tripod or people in the background can either be done directly on the equirectangular HDR or on converted HDR Cube Faces, which, especially for the floor, are more accurate to paint. Relevant here is that you stay in 32-bit HDR space

If you only want a clean floor for close-up reflections, it is usually faster to prepare a clean floor texture for a floor plane. A geometry for the floor is needed in 3D in most cases anyway to cut the lighting from the ground and create occlusion

Painting directly on Equirectangular

That’s the fastest way doing retouch

Make sure to keep 32-bit mode in Photoshop

Convert to Cube Faces – Paint – Convert Back

Convert equirectangular to cube faces, paint on cube face, convert back to equirectangular

Convert In Pano2VR

Select Input (1)

Convert Input (2)

Export as Cube Faces

Type: Cube Faces

Format: Radiance HDR

Output File: Create a subfolder for the 6 files

Paint on Cube Face

Here the floor face

Save as Radiance HDR

Add “painted” to name

Patch in painted Cube Face

Pano2VR is so friendly, Input switched to cube faces already

Select Input (1)

Select patch

Replace the input with the painted cube face (2)

Convert to Equirectangular

Convert Input (3)

Type: Equirectangular

Format: Radiance HDR

Output File: A meaningful name here

Undistort Fisheye

You forgot to take floor photos without the fisheye but want to use a planar floor texture in 3D?

Un-distorting fisheye shots can also help in the retouch process: Instead of painting the floor, a undistorted shot is patched in

If such patching is needed as HDR, the undistortion is better done in Nuke. Sadly, Photoshop’s Lens Correction filter is still not available in 32-bit

Undistort in Photoshop

Fisheye shot

Open the original fisheye shot in Photoshop

Apply filter

Filter > Lens Correction

Not available in 32-bit!

Select Lens

Select camera and lens matching your shot

The photo was shot on Canon 5D Mark III with EF8-15mm fisheye on 8mm

Undistorted Result

The undistorted image can be used to patch an LDR version of the panorama or create a texture for 3D

Undistort in Nuke

Everything in Nuke is 32-bit, so it’s no problem doing the fisheye lens-correction on an HDR

Nuke Example

Nuke script using Spherical Transform to convert to Cube Face

Reformat node crops to square

Spherical Transform converts from fisheye to Cube, outputting square format

Add Reformat node – Create new Format

In drop-down menu of output format:

Nuke adds every new source size to the list automatically: 5731×3786 is our source file

Select new to create a new format

Create square size

Use source’s vertical size for w and h

Set Resize Type to None

Resize “none” works like canvas size in Photoshop, placing the image inside the format without scaling

Add SphericalTransform

Input Type: 180˚ fisheye

Output Type: Cube

Output format: A square format, i.e. square_2k