CIS 565: GPU Programming and Architecture
University of Pennsylvania
Fall 2016
The final project gives you an opportunity to embark on a large GPU programming endeavor of your choice. You are free to select an area in graphics, GPU computing, or both. You can reproduce the results of recent research, add a novel extension to existing work, fulfill a real need in the community, or implement something completely original.
Expect this to be 2-3x more work than the hardest project this semester. The best projects will require a time commitment of at least 100 hours per student. It will be worth it.
- Form teams of two. Each team member will receive the same grade. Teams of three will be considered, but will be expected to build something truly amazing like this. Teams of one are not encouraged, but can be accommodated on a case-by-case basis.
- Use GitHub. We encourage, but do not require, you to develop in a public repo as open source.
- Programming language, graphics and compute APIs, and target platforms are up to you.
- You are allowed to use existing code and libraries. These should be prominently credited and your code should be easily identifiable. Be incredibly clear about what is your work and what is not.
Extend the WebGL 2 Samples Pack
See WebGLSamples/WebGL2Samples#91
On mobile, how does the power usage of JavaScript/WebGL compare to C++/OpenGL ES 2 (or Java/ES or Objective C/ES)? For example, if the same app is developed in WebGL and OpenGL ES, which one drains the battery first - and why? What type of benchmarks need to be developed, e.g., CPU bound, GPU compute bound, GPU memory bound, etc.?
Create a tutorial using WebGL that teaches either basic GPU architecture (parallelism, branches, multithreading, SIMD, etc.) or Tile-Based Architectures like those used in mobile GPUs. For inspiration, see Making WebGL Dance by Steven Wittens.
Propose and prototype a next-generation WebGL API. See Thoughts about a WebGL-Next.
Disclosure: I am one of the glTF spec editors.
glTF, the GL Transmission Format (glTF), is a new runtime asset delivery format for WebGL. It needs an ecosystem of tools, documentation, and extensions. See these ideas. Ideas:
- Contribute to assimp, notes.
- Contribute to the Blender glTF exporter.
- Write a detailed size/performance analysis of glTF compared to other 3D model formats
GPU-accelerate the prebaking AO stage in the glTF Pipeline. See the AO Roadmap.
Use a uniform grid; see A Memory Efficient Uniform Grid Build Process for GPUs.
Contribute to renderdoc.
Does batching still help with Vulkan? If so, when it is worth it?
Create a domain-specific shading language targeting SPIR-V. Perhaps a language tuned for CSG, voxels, or ray marching.
Implement a new abstraction layer using Vulkan that is higher level than Vulkan, but lower level than, for example, Unity.
Prototype a small engine with multithreading for LOD and culling.
Write a Vulkan for OpenGL developers tutorial series.
GPU accelerate filters in PDAL or PCL.
GPU accelerate parts of autonomous cars.
Use CUDA or compute shaders to build a custom or hybrid rendering pipeline, e.g., instead of creating a rasterization pipeline for triangles, create a graphics pipeline optimizations for points, voxels, or vectors.
Surfels: Surface Elements as Rendering Primitives by Hanspeter Pfister et al.
VoxelPipe: A Programmable Pipeline for 3D Voxelization by Jacopo Pantaleoni.
Massively-Parallel Vector Graphics by Francisco Ganacim.
For example, see Multiview Rendering for VR and Efficient Stereoscopic Rendering of Building Information Models (BIM).
Anything that runs in real-time using the GPU and the Tango API.
Anything using the NVIDIA Jetson TK1.
For inspiration, browse the CIS 565 final projects from previous semesters: Fall 2015, Fall 2014, Fall 2013, Fall 2012, Spring 2012, and Spring 2011.
A guideline is that your project should be better than last semester's projects; that is how we move the field forward.
- Fall 2015
- Forward+ Renderer using OpenGL/Compute Shaders by Bradley Crusco and Megan Moore
- WebGL Fragment Shader Profiler by Sally Kong and Terry Sun
- GPU Cloth with OpenGL Compute Shaders by Gary Li
- Fall 2014
- Bidirectional Path Tracer in CUDA by Paula Huelin Merino and Robbie Cassidy
- GPU-Accelerated Dynamic Fracture in the Browser with WebCL by Kai Ninomiya and Jiatong He
- Uniform grid and kd-tree in CUDA by Jeremy Newlin and Danny Rerucha
- Fall 2013
- Surface Mesh Reconstruction from RGBD Images by Collin Boots and Dalton Banks
- Sparse Voxel Octree by Cheng-Tso Lin
- Terrain tessellation by Mikey Chen and Vimanyu Jain
- GPU Photon Mapper by Ishaan Singh, Yingting Xiao, and Xiaoyan Zhu
- Fall 2012
- Non-photorealistic Rendering by Kong Ma
- Procedural Terrain by Tiju Thomas
- KD Trees on the GPU by Zakiuddin Shehzan Mohammed
- Spring 2012
- Single Pass Order Independent Transparency by Sean Lilley
- GPU-Accelerated Logo Detection by Yu Luo
- GPU-Accelerated Simplified General Perturbation No. 4 (SGP4) Model by Matthew Ahn
- Spring 2011
- Fast Pedestrian Recognition on the GPU by Fan Deng
- Screen Space Fluid Rendering by Terry Kaleas
- Deferred Shader with Screen Space Classification by Sean Thomas
Browse these for ideas galore!
- Journal of Computer Graphics Techniques
- Advances in Real-Time Rendering SIGGRAPH courses
- Ke-Sen Huang's conference pages - papers from SIGGRAPH, Eurographics, I3D, and elsewhere
- Real-Time Rendering Portal and WebGL Resources - links to an amazing amount of content
Sign up for a time slot ASAP.
Your project pitch is a 15-minute meeting with Patrick, Shrek, and Gary and a write-up no longer than one page that includes an overview of your approach with specific goals. First, focus on why there is a need for your project. Then describe what exactly you are going to do. In addition to your write-up, provide supplemental figures, images, or videos.
Think of your pitch as if you are trying to get a startup funded, convincing your company to start a new project, or responding to a grant. For an example, see Forward+ Renderer using OpenGL/Compute Shaders by Bradley Crusco and Megan Moore
Before the meeting:
- Email your one page pitch and any supplemental material to Patrick, Shrek, and Gary by end of Tuesday 11/15.
After the meeting:
- Push your pitch to a new GitHub repo for your project
- Email the repo link to [email protected] (if the project is open source)
Your first presentation should be 7-10 minutes long. Present your work-in-progress. Your presentation should include a few slides, plus videos, screenshots, or demos if possible. Be sure to
- Demonstrate working code (videos and screenshots are OK; it doesn’t have to be live).
- Provide a roadmap with future milestones (11/28 and 12/12), and the final result (date TBA). Set goals for each.
See the Cesium Presenter's Guide for tips on presenting. Be sure to present as a team; for a great example, see http://www.youtube.com/watch?v=OTCuYzAw31Y
After class, push your presentation to your GitHub repo.
A 5-7 minute presentation on your progress over the past week. Demonstrate how you reached or exceeded the goals for this milestone. If you didn't reach them, explain why. Remind us of your upcoming milestones.
After class, push your presentation to your GitHub repo.
Same format as Milestone 2.
5-minute final presentation.
This should be a polished presentation with a 1-2 slide overview of the technical at a high-level of abstraction, followed by a demo/video of the results in different representative scenarios, followed by a careful performance analysis, and finally shortcomings of the approach.
It is OK to present this as a few slides with a demo/video for the results section, or to prepare a video for the entire presentation and then talk to the video as your presentation.
Please practice for timing; do not exceed five minutes.
By 6pm:
- Push the following to GitHub
- Final presentation slides/video
- Final code - should be clean, documented, and tested
- A detailed README.md including:
- Name of your project
- Your names and links to your website/LinkedIn/twitter/whatever
- Choice screenshots including debug views
- Link to demo if possible. WebGL demos should include your names and a link back to your github repo
- Overview of technique and links to references
- Link to video
- Detailed performance analysis
- Install and build instructions
As always, see How to make an attractive GitHub repo for tips on your README.md.
The final project is worth 50% of your final grade. The breakdown is:
- Milestone 1: 25%
- Milestone 2: 25%
- Milestone 3: 25%
- Final Presentation: 25%