Light Field Renderer Save

Interactive light field renderer using dynamically reparameterized light fields.

Project README

Light Field Renderer

This is a light field renderer that can synthesize new camera views from a collection of images.

The renderer is mainly based on the paper Dynamically Reparameterized Light Fields, but additional features such as a dynamic synthetic aperture and phase detection autofocus has also been implemented. A report describing the renderer in more detail is available here.

The program is written in C++ and uses OpenGL for hardware acceleration. The GUI is implemented using NanoGUI.

Usage

Screenshot

The image above is a screenshot of the program. Most aspects of the camera can be changed, such as position, rotation, focal length, depth of field (f-stop), focus distance etc. Most settings are hopefully self-explanatory, and some have explanatory tooltips.

Controls

Key Action
W Move forward
A Move left
S Move back
D Move right
SPACE Move up
CTRL Move down
SCROLL Change focus distance
SHIFT+MOUSE CLICK Autofocus

Clicking and holding down a mouse button in the render view activates mouse navigation, which is deactivated once the button is released. Mouse navigation is used to rotate the camera in Free mode (like in a first-person game) and to move the camera laterally in Target mode.

Examples

Dolly Zoom

Moving the camera back and forth while changing the focal length. This clearly shows that the synthesized view is a combination of several (hundred) images since all input images have the same focal length and are located on a plane perpendicular to the movement direction.

Focus Change

Moving the focal plane between the shop owner and the metal sphere while using a large aperture.

Light Fields

The included light field was rendered in Blender using the simple script blender-exporter.py. The scene was created by Alex Treviño using concept by Anaïs Maamar.

The renderer is also capable of rendering rectified light fields from the Stanford Lego Gantry, which can be downloaded here: http://lightfield.stanford.edu/lfs.html.

Config

The start values and ranges of sliders and such in the GUI can be modified by adding a config.cfg file to the light field folder that specifies the start, min and max value for different properties:

# [property name] [start value] [min value] [max value]
focal-length 50 10 100
focus-distance 16 10 50
f-stop 1.8 0.1 5.6

Unspecified properties uses the default values. All property names are available in config.cpp.

Building

Start by cloning the program and all submodules using the following command:

git clone --recursive https://github.com/linusmossberg/light-field-renderer

Build files can then be generated with CMake using:

cd light-field-renderer
mkdir build
cd build
cmake ..

These should work automatically, but a few additional packages are required on certain platforms. On Debian/Ubuntu, these can be installed using:

apt-get install xorg-dev libglu1-mesa-dev

and on RedHat/Fedora:

sudo dnf install mesa-libGLU-devel libXi-devel libXcursor-devel libXinerama-devel libXrandr-devel xorg-x11-server-devel
Open Source Agenda is not affiliated with "Light Field Renderer" Project. README Source: linusmossberg/light-field-renderer
Stars
58
Open Issues
0
Last Commit
2 years ago
License
MIT

Open Source Agenda Badge

Open Source Agenda Rating