Final Project: 3D Scanning Campus / Video Game Plugin


There will be a final project in this course which accounts for 10% of the overall course grade and which will be completed during the last month of the course, aftermost of the major programming assignments have wrapped up. In particular, students will work together to 3D scan different buildings on campus simply by taking pictures of them, a process known as photogrammetry. This is the technique that we used the last time graphics occurred to create a virtual 3D model of the Ursinus smokestack.

Alternatively, if a students are doing the linked inquiry with DIGS-250, they will create a plugin programmatically to add some effect to the game they're working on in that class.


  • Students will learn to scope out and follow through on a medium sized, open ended project.
  • Students will learn how to apply technical knowledge in a creative, artistic application.
  • Students will learn how to give and receive constructive feedback in a professional setting.

One of the biggest challenges will be to appropriately scope out your project under the time constraints. You want to have enough done that someone can explore your prototype and determine whether the concept "works." But you don't want to over-engineer and get stuck without something that runs. Please see these excellent videos on appropriately scoping out video game designs. Many of these ideas transfer to any highly complex project, not just video games.


To save time in class, students will be required to make videos summarizing their work. For students doing the game, a simple way to do this could be to screencast playing the game, while talking over and explaining how it works. For students doing the 3D scanning, make a video showing walking around the scan virtually. Students may also want to include some slides explaining some of the implementation details further. Once the videos are completed, each student will be randomly assigned 3-4 videos from other groups in the course to watch and for which to provide critical feedback. This feedback will factor into the participation grade.
NOTE: I will of course also be watching each video carefully myself.

Game Plugin Grading Rubric

60%Technical refinement: Does your game incorporate concepts we learned in graphics? How much did the project mature over the time you worked on it? How close are you to the final goal that you had?
15%Narrated video: Graded for overall clarity, quality of figures/animations, and demonstration of what you did so that other students can understand it
10%Code/Documentation/Mini Report: In lieu of a formal final report, you will submit a brief summary of what you accomplished, along with code and directions on how to use it. You can think of this as an extended README. You will be graded on the quality of your code and documentation (how easy is it for someone who doesn't know your project to run your code?).
15%Above and beyond: How much did you do to refine this project and to make it your own? Did you put any unique twists on it that weren't suggested by the instructor?

3D Scanning Directions/Rubric

Buildings To Scan

Here are some buildings we can scan from the outside. Each student can pick a different building

  • Pfahler/IDC/Thomas: This is a big one, so you might want to try just pictures of Pfahler by themselves first
  • Upper Wismer / Lower Wismer
  • Myrin Library
  • Schellhase Commons
  • Bomberger hall outside, and chapel inside
  • The Kaleidoscope
  • Berman museum of art
  • Olin Hall

Step 1: Photogrammetry (50%)

The first step is to take a bunch of pictures of the building that you're scanning, and then to use photogrammetry software to stitch them together. I highly recommend using the open source program meshroom to do the reconstruction. They have an official tutorial at this link, and there are many videos on youtube about how to do this (such as this one). It may take some time to run, and you may find that you need to take more pictures to fill in certain areas and to tweak some of the parameters a bit. But overall, this is one of the most user friendly programs I have seen to do this.

Step 2: Geometry simplification (15%)

You will notice that the geometry on your model can be quite messy, and that there are a lot of vertices. This is a drawback when making things interactive in the browser over a network, particularly on mobile devices using mobile data. We should start by simplifying the geometry as much as possible so it's quick to load and render. Instant meshes is an excellent tool to do this. You can read a tutorial about it at this link. Unfortunately, it does not also apply the existing texture. For this, we have one more step to do, as explained next

Step 3: Baking high resolution texture onto low resolution model (25%)

Now that we have a lower resolution module, we need to create a texture for it. We can do this by lining it up with the original model and "baking" the old texture onto it (we're basically rendering it on). Click here to read a tutorial about how to do this using Blender.

Narrated Video (10%)

Show a flythrough/walkthrough of your final model