A2: Materials by Jim McCann (jmccann)

Summarize, in about one paragraph, your approach to the materials assignment. How did you structure your code? What's cool about it? Are there parts you weren't able to complete?

My Model A2-create

Describe the model and texture you created and include a screen recording showing it running in real-time:

Describe your creation process for the model and texture.

Using the Cube Utility

Provide a short overview of how to use your cube utility.

Command-line Arguments (Cube Utility)

Document the command-line arguments that can be used to control your cube utility. Include both the command-line arguments required by the assignment statement and any additional arguments or functions you decided to add.

Command-line Arguments (Viewer)

Document the command-line arguments that can be used to control your viewer. This will probably be a copy of the section from your A1 report with a few new flags relating to tone mapping.

Evidence

The purpose of this section is to get you to think critically about your code by providing evidence sufficient to demonstrate to course staff that it works. These thoughts may also help you improve the code as you work on it in A3 and beyond.

Environment Loading and Display A2-env

What functions and data structures in your code are involved with loading environment cube maps and converting them from RGBE8 format to the format you chose to use for them on-GPU? (And what format did you choose for that?).

Provide evidence that your code can load environment maps and display "environment" and "mirror" materials.

Tone Mapping A2-tone

Describe, in a few sentences, how your display code deals with tone mapping, and what you chose for your custom non-linear tone mapping curve.

Provide evidence that your tone mapping and exposure controls work.

Plot your tone-mapping curve:

The result of (my tone-mapping curve) applied to a color of increasing intensity.

Lambertian Diffuse A2-diffuse

Where and how does your code implement the "lambertian" material?

Provide evidence that your Lambertain cube-map pre-filtering works. Provide evidence that your "lambertian" material works.

Plot timings for your Lambertian cube map pre-filtering as applied to various cube sizes.

Normal Mapping A2-normal

Where and how does your code implement the normal mapping? (Both the texture loading and the usage in materials.)

Provide evidence that your normal mapping works properly.

What, if any, is the performance impact of normal mapping in your viewer? Can you make normal mapping a bottleneck? (I'm not actually sure if you can! Asking this one out of curiosity to see what you try.) If so, please include the scene.

Physically-Based Material A2-pbr

Where and how does your code implement the "pbr" material? How did you implement the integration required to pre-filter cube maps? Where does your code precompute and load the "environment BRDF" (the second part of the split sum), and how is it stored?

Provide evidence that your "pbr" material works properly.

Provide evidence that your cube utility is able to correctly pre-filter cube maps with the cosine-weighted GGX normal distribution function. You may wish to, e.g., show that no energy is lost.

Provide evidence that your cube utility is able to correctly pre-integrate the environment BRDF part of the split sum. (E.g., an image of the precomputed table to compare to the one presented by Karis.)

Provide charts of timings characterizing the performance of your cube utility.

Displacement Mapping A2x-displacement

How did you implement displacement mapping?

What is the performance impact of using displacement mapping in a scene? Include charts or tables and an example scene where displacement mapping is a bottleneck.

Feedback

This is the end of the structured report. Feel free to add feedback about A1 to this section.