CIS 410/510 Final Project: Volume Rendering
With this version of the final project, you will do volume rendering.
25 point version
Performing this version of the project will earn you 25 points (out of 35 possible).
Implement a ray-casting volume renderer that uses compositing for its ray function.
The volume renderer should work on rectilinear grids, should be able to cast rays
using perspective projection (i.e., like the slides in class) from arbitrary camera
positions. The specifications (data set, transfer functions, camera positions, and
image size) are posted below.
You should work with the data structures for a camera and a transfer function
posted to the web as part of the project, as the final images use these specifications.
Your deliverables are two-fold:
- (1) your code
- (2) the image your code produces
Here are some resources to get going:
- Basic data structures here.
- Image you will produce for astro data set will look something like this (data set: astro512.vtk, samples per ray: 1024).
- Low res astro data set (1MB) here (use this for testing and use 100 samples per ray).
- High res astro data set (500MB) here (use this for final image and use 1000 samples per ray).
- High res astro data set (500MB) in ASCII here (slower to work with, but may work better on Windows).
- Camera and transfer function for astro data set here.
- Also: the opacity correction assumes a default number of samples per ray. The reference picture assumes 500 samples per ray, so you should use that as your default as well.
- I instrumented my program with print statements. Here was the output.
- Here is a video we took during class on setting rays.
Ways to Earn Additional Points
Each of these tasks will take some investigation on your own.
- 2 extra points: implement multi-variate transfer functions. This will involve finding a data set with multiple variables, designing a transfer function, and (of course) modifying your code to.
- 3 extra points: implement early ray termination and determine its efficacy. This will involve experimenting with multiple termination criteria (i.e., terminating at 95% opaque, 99% opaque, 99.9% opaque) and evaluating the resulting speedups.
- 5 extra points: implement unstructured volume rendering (volume rendering of unstructured meshes). This would involve a data structure to locate what cell a sample overlaps with, and interpolation within the cell. You also should identify an unstructured data set that you can volume render. It is fine to focus on a single cell type (likely tetrahedrons or hexahedrons).
What to upload:
- (1) your code
- (2) the image your code produces
- (3) an additional text file with a few sentences indicating which of the "extra" things you have implemented
- (4) additional files (like data files) that I would need to verify your code