SciVis 2015 Project 3: "rendr"

Assigned Tue Feb 17; Due Thu Feb 26 at 11:59pm

In this project you will build a direct volume renderer. This involves material covered in the class Jan 29 through Feb 5, and the readings on volume rendering assigned, and FSV Chapter 5. You will combine 3D convolution with elements of graphics (a simple camera model, the over operator, and Blinn-Phong shading) to complete a tool that can make high-quality volume renderings of real-world 3D datasets.

Logistics

Your CNETID-scivis-2015 directory should now be populated with a p3rendr directory which contains all the files for this project. As long as you have environment variable $SCIVIS set correctly, and if you are logged into one of the CSIL Macs, you should be able to type make in p3rendr to build a rendr executable. You should also have a reference executable rrendr which you should use for comparison and debugging. You can work individually or in pairs for this project; see the information in the Logistics section of the Project 1 page for details; you should see a "Project 3: rendr (p3rendr)" assignment for which you can create a work group. If you pair up with the same partner as in a previous assignment, you will be re-using the previously created repository. Because of the amount of work in this assignment, working with a partner is encouraged.

What to do

As with other projects, the best description of what to do lies mainly in the given source files, and reference executable rrendr. Run "./rrendr" to review the commands available, and run "./rrendr about" to see what will need to be implemented. Reading through and understanding the header file rnd.h is essential. The rndMath.h macro collection is much like mprMath.h from the previous project, but expended somewhat.

The handling of these lines

/* v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v  begin student code */
/* ^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^  end student code */
is the same as in the previous assignment.

You will be editing the header file (rnd.h) to augment the definition of three structs: rndContext, rndConvo (for storing the output of convolution computation), and rndRay (for storing the state associated with one ray marching through space). Thus, even more than in the previous project, your work will involve making multiple coordinate changes to multiple files. In some source files you may also add new functions, but these should be static functions (only for use within that source file). As before, you may not create new source files, or edit the Makefile.

At the start of the functions that you have to implement, there is a comment block that defines what the inputs and outputs to the function should be; this provides the technical definition of what a correct implementation should be. The reference implementation rmapr should conform to this. For this project there is no additional work for 33710 students to do relative to 23710 students.

Example rendr/rrendr commands to try

The commands here use "./rrendr"; you should make sure that you get the exactly same results by running "./rendr". There is new data in the scivis-2015 repository, which below will be referred to below as "$SCIVIS", in the data/3d subdirectory. Read the 00-info.txt file there to see a description of the datasets useful for this project.

Grading

The grade will be based on correctness (75%), debugging process (15%), and style (10%). If your code does not compile cleanly, with the Makefile provided, you will get a ZERO for correctness. Correctness will be evaluated with examples such as those above, and maybe some additional ones to test corner cases. Rendering with and without multiple threads should generate identical results..

To get full credit for debugging process, you will prepare a write-up, submitted as p3rendr.pdf in your repository, which documents how you proved to yourself that your code is correct, ignoring the reference implementation. Supposing you had no reference implementation (as in the real world), what kind of datasets would you create, and how would you render them, to see if your code was correct? Below are four major areas of concern for code correctness, which include the kinds of things you should be worrying about when writing and testing your code. You should choose three things from the list, and in your write-up, describe what experiment(s) you performed to test the correctness of your code. An experiment is a procedure that produces a targeted comparison between your mental model of how things work, which how things actually do work. To document an experiment, you need to describe what the input data is (what new dataset(s) did you create by adding new capability to rendr svs?), how you set up the rendering (how is rendr go being run), what you expected to see in the output, and what you actually got in the output.

The correctness of convolution is not part of the debugging process credit; you can use the zramp datasets as noted above to test your convolution.

For the style points, keep in mind: