Git Product home page Git Product logo

light-field-renderer's Introduction

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

light-field-renderer's People

Contributors

linusmossberg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

light-field-renderer's Issues

two errors when compiling on macOS Big Sur 11.5.1

Hi, I don't really know what I'm doing, but I after running make in the build dir of the repo, it gets to about 83% then borks out with 13 warnings and 2 errors. Any help would be appreciated and thanks for your time. full cli output to => errors.pdf

/Users/jz/Desktop/light-field-renderer/source/core/camera-array.cpp:107:32: error: use of undeclared identifier 'GL_RG'
        case 2: pixel_format = GL_RG; break;

/Users/jz/Desktop/light-field-renderer/source/core/camera-array.cpp:126:9: error: use of undeclared identifier 'glGenerateMipmap'
        glGenerateMipmap(GL_TEXTURE_2D);

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.