The objective of the project is to build a fully functional 3D Graphics System with the ability to generate a synthetic light field of the 3D scenes using arbitrary user-defined camera arrays. The objective is to get to learn and implement the main features of light fields, including the depth of field and light diffusion phenomena simulation.
Since the course assignments are progressive steps towards the 3D Graphics System, this page will relate the main developments in the system trough their solution, as well as the advances with the main project. This will mantain the project well documented and open to discussion and assesment by the professor.
- LEVOY, M; HANRAHAN, P. Light Field Rendering. SIGGRAPH, 1996.
- The (New) Stanford Light Field Archive
- Synthetic Light Field Archive
- Cha Zhang; Tsuhan Chen (2006). Light Field Sampling. Morgan and Claypool Publishers.
- Synthetic scenes were generated using the S3D software and its tools developed along the course assignments.
- An interactive viewer allowing free camera movement in the scene was programmed. In the viewer, the desired view of the image can be transformed in a light field automatically. [ code ]
- The program generates JPG images and an xml file formated and arranged to work with the flash light field viewer developed by Andrew Adams at Stanford University for The (New) Stanford Light Field Archive.
- The results can be viewed in a local copy of the viewer with my own scenes in the following links.
Presentation of the results in class [ pdf ].
- Study the sampling and reconstruction aspects of the light field: 4D filters and anti-aliasing.
- Develop the depth field computation for improving the focus distances in both synthetic and captured images.
- Combine the code generated with high quality 3D image renderers to obtain realistic results.
- A scene consisting of a set of spheres arranged in a MxN grid strcuture with row and grid hierarchy leves, was created. [ code ]
- The scene hierarchy was used to generate various animation examples on the sphere grid. [ code ]
- The program to plot the scene wireframe was used and modified with a manipulator to handle camera movements (view transformations). The transformations include camera translations (arrows) and rotations (W-A-S-D block). [ code ]
- The CSG parser was updated so it would accept the primitives defined so far. [ code ]
- A simple CSG-parser was programmed and tested reading infix csg expressions. [ code ]
- A recursive function for classifying a point inside or outside a CSG object was defined. [ code ]
- The function was tested computing the volume of CSG objects with regular 3D grids [ code ] and generating some ASCII outputs of the objects (see below). The results of convergence of the volume for the different grids are shown in the table below.
- A function for generating rotation surfaces from a point list, writing both SDL and OFF meshes was programmed and tested. [ code ]
- The functions for computing mesh normals and the function for writing them in SDL format were tested successfully.
|TABLE.- Volumes of CSG objects estimated using regular 3D grids and point classification|
|Step size||Sphere \ Cylinder||Sphere & Sphere||Sphere \ Cylinder||(Sphere & Cone) | Cylinder|
- The function for rotation surfaces was updated so it can use general parametric curves. [ code ]
- Cone and cylinder primitives were implemented. [ code ]
- A ray-tracing volume approximation was programmed and tested with the sphere, the cone and the cylinder. [ code ]
- An ASCII-art inspired visualization of the primitves was programmed only for test purpose before being able to visualize the meshes (see below).
- The functions for computing meshes were completed and tested. [ code / code ]
- A function for writing OFF formatted meshes was designed and the result was tested using GeomView. [ code ]
- Functions for parsing and translating meshes between S3D-SDL and OFF formats were programmed and tested. [ code ]
The code for testing the previous functions was integrated with a command line parser for primitives, inspired in the calculator parser. [ code ]