A1: Scene Viewer by Jim McCann (jmccann)

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

My Animation A1-create

Describe your animation and include a screen recording showing it running in real-time:

Describe how you created your animation.

Using the Scene Viewer

Provide a short overview of how to use your viewer.

Command-line Arguments

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

Controls

Document the keyboard and mouse controls used to control your viewer when run interactively. Note that the controls below are placeholders not requirements.

My Code

For each of the following sections, describe the overall structure of your code, and reference the specific files/functions/data structures that you used. For any parts that are incomplete, discuss what you were able to do and what you tried but couldn't get working.

The purpose of this section is to get you to think critically about your code by explaining it to course staff; these thoughts may help you improve the code as you work on it in A2 and beyond. This section also forms a road map to your code that we can use while grading.

Support Code for Math and Vulkan

Cover, at least: what math (vecr/mat/quat) classes and operations you implemented; any clever approaches to avoid writing duplicated code for, e.g., vec2, vec3, vec4; how your code gets a window and a swapchain; how you decided to handle Vulkan resource creation and destruction (e.g., where do pipelines get created? where do they get destroyed?).

Loading scenes, Mesh data A1-load

Cover, at least: how your viewer stores mesh and scene data; your approach to parsing JSON.

Drawing the scene. A1-show

Cover, at least: how your code computes camera transformations; how your code get transformation and vertex data to your shaders.

Include a screenshot of your viewer drawing an example scene.

Handling interactive camera and debug camera movement. A1-show

Cover, at least: what camera controls you decided to implement; where the camera controls are implemented.

Include a screen recording of you moving the camera in a scene.

Frustum culling A1-cull

Cover, at least: your culling approach; what bounding volume you use for meshes and where it is computed.

Include a screenshot or recording showing that culling is working (e.g., by using a debug camera to show that meshes outside the user camera's view aren't being drawn).

Animating the scene A1-move

Cover, at least: how your viewer stores keyframes; where your code updates animations; how your code computes elapsed time (if it isn't running in headless mode!).

Include a screen recording showing an animation being played back by your viewer.

Handling headless mode A1-hide

Cover, at least: how your code deals with not having a window; how you deal with getting the timestamps from the events file to (e.g.) animation updates; any extra events you decided to support.

Performance improvements A1x-fast

Discuss which performance improvements you chose to pursue and how you implemented them.

NOTE: you will demonstrate your performance improvements in the next section.

Performance Tests

This section demonstrates that you have tested your code, including finding its limits.

Before getting into the tests, describe here the relevant information about your testing system(s). (CPU, GPU, Memory, driver versions, OS version, ... -- anything you think might be relevant!)

Culling

Demonstrate a scene / camera angle where your culling code improves performance; and demonstrate one where it does not improve performance. (If you developed more than one culling method, demonstrate the performance gain/loss from each of them in this section.)

Use charts to summarize performance and graphs to show overall performance. Include screenshots of test scenes.

Bottlenecks

Demonstrate your code bottlenecking on scene traversal (CPU), vertex processing/assembly (GPU), and fragment processing/write-back (GPU).

Use graphs to demonstrate sensitivity to test scene complexity. Include screenshots of test scenes.

Performance Improvements

For any other performance improvements you attempted, include comparisons showing them working (or not working). Include screenshots of any test scenes and graphs or charts showing performance differences.

Feedback

This is the end of the structured report. Feel free to add feedback about A1 (or A0!) to this section.