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.
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.
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.
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.
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.
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