Page 2: Graphics Town Overview

Overview

The goal of this project is to create a town. It has to be a living town, with things moving around in it. We will provide you with a starter framework. But you must add the contents of the town.

We hesitate to tell you what to do, since students in the past have come up with some really creative things. We’ve seen cities with skyscrapers, space cities with flying saucers, tropical islands, a Harry Potter city with flying broomsticks, farms with cows and chickens, farms where flying saucers came and abducted the cows, … There are gallery pages with some old projects if you want some ideas (see below - or check out the old galleries to see some motivating examples).

If this sounds like its arbitrarily open-ended, you have the right idea. Clearly, you could make this as fancy as you want. Our goal is to give you the opportunity to demonstrate your competence at writing 3D graphics programs, as well as an opportunity to experiment with some more advanced topics that you think are interesting. However, we encourage you to focus on the core requirements first.

The hard part in specifying this assignment is providing grading criteria. The short version: do enough cool stuff and document it. We want students to be creative and try things out, but also focus on graphics aspects in their projects. Previous versions of the assignment had long complicated lists of grading criteria. This semester, it’s simpler, but there are still lots of options listed.

You will create your town by building on top of the “Graphics Town Framework” that we will provide. You have been using this framework over the past several workbooks. In fact, you can take objects from prior workbooks and put them in your town. When you try the example, you will notice that there are some additional features of the framework that you haven’t used yet (like the ability to ride objects or look at specific objects) - these will make it easier for us to see things in your world.

All of the requirements are objects that you add to the framework (you should have experience doing this from prior assignments). Some requirements are specific, while others are more broad.

Deadlines

Ideally, we would give you as much time as possible so you have lots of time to make cool stuff. But, because of the end of the semester, we are limited in how much time we can give you. There are University rules and practical issues with grading assignments in a timely manner.

The assignment is due the last day of class, May 1, 2024. Late assignments will not be accepted.

Remember, turning in your assignment means submitting the Canvas P2 Assignment. We won’t know to grade your assignment if you do not do the assignment.

Requirements

The gr-01-01.html page has a view of your town that allows the user to explore and see everything. An appropriate interface is provided by the framework. The initial repository you start with provides a simple “world.” You need to change that simple world into something more interesting. You will need to add new objects (and probably remove the ones that are there). You will need to arrange the objects in a meaningful way. You will need to give the (at least some of the) objects behaviors. We use the term “behavior” for the code that makes the object move and do stuff.

The real requirement is to make a cool world that shows off your ability to do graphics programming. Page  4  (Graphics Town Rubric) gives some more specific things that you must do in order to get full credit. But basically, it is to make objects and put them in the world. The rubric may seem long and complicated, but that is because we are trying to quantify “cool enough” in a way that gives students flexibility.

The framework provides the required user interface Page  3  (Graphics Town Hints). You should not need to change the framework code. You should use the framework correctly in order to provide the required user interface.

You will need to define new object types (with behaviors, through their stepWorld methods), and update the gr-01-01.js file to create the world appropriately by placing objects into the GrWorld. You should be experienced with doing this from prior workbooks. Note: be sure to use the timeDelta parameter of stepWorld: your objects must stop when the the world is stopped, and the speed control of the world must work. See Page  3  (Graphics Town Hints) for some details.

The objects you create have names that allow them to be identified in the user interface. This means that all objects should have meaningful names, and these names have to be unique. Objects are automatically put on the “lookat” list in the user interface.

You must identify some objects to be on the “highlight” list in the UI: this is a shorter version of the “lookat” list that allows us to find interesting objects quickly. The rubric will specify which objects should be placed on this list. See Page  3  (Graphics Town Hints) for some details on highlight.

The examples directory contains a bunch of sample objects, as well as an example “setup” function that places them into the world. You may use the objects (see below about using objects from others). You may want to make the groundplane bigger (you give yourself more “land”), or remove it altogether. Be warned: the framework code computes the initial camera position based on the groundplane, so if you have no groundplane, you will need to give an initial camera configuration.

Your town must look like a reasonable scene - it can’t just be a collection of random objects placed haphazardly (as the sample scene is). We will ask you what your “theme” is.

Your program needs to run at a reasonable frame rate on a testing computer. Not all of the course staff have fast computers with fancy GPUs. Don’t go too overboard with excessive numbers of objects.

You must also provide documentation by filling in the p2-workbook.txt of the workbook. This is very important! We cannot give you credit for things that you do not document!

Collaboration: Use, Re-Use and Attribution

You must complete this assignment yourself. We are not allowing students to work in groups.

For this assignment, we do allow you to use pieces that you have made for prior assignments without attribution. However, there are a bunch of rules for this.

You must give attribution for anything that you do not make yourself and provide sufficient documentation to show that you understand the code. If you find it on the web, you must give a link. If you get it from someone else, you must explicitly name them in your documentation. You must have permission to use anything that you did not make yourself. If you find it on the web, make sure that it has an open license. If you get it from someone else, make sure it is OK with them. If your work is based on a tutorial, online document, or something like that, please specify it in the textbox.

You are encouraged to use pieces from your old workbooks for this assignment. In the past, you’ve been using the Graphics Town framework to make houses, cars, shiny objects, amusement park rides, … You need to make some new stuff, but you are also encouraged to use old stuff as well. The goal is to have lots of stuff. In fact, some of your 2D assignments can be converted (the fireworks and train are good candidates).

Not recommended You may use art assets (e.g. 3D model files and images) that you obtain online. If you use a model or texture (or any other “asset”) from the web, make sure you have the legal right to use it, and document where it came from when you give attribution. Note that an object loaded from a 3D model file fulfills a requirement, but not all of your objects can be files you obtained.

History

The Graphics Town Project has a long history (since 2000, and students have generally liked it over the years. The history is described on this 2014 page. That page also discusses the old C++ framework code (which you don’t have to look at). The assignment is described at the 2014 Graphics Town Project Page. 2014 was the last year of the C++ version of the assignment.

The most interesting thing about the history is to see what other students have done to inspire you. The past five years, students had a similar (but not identical) assignment: galleries.

There is a Gallery for some years past. Remember, these were different assignments: in older assignments students didn’t have a high level API (like THREE) to work with, and they were given less starter code. It’s pretty remarkable how creative the students were. 2014, 2010, 2009.

The 2000 Graphics Town Assignment Page is an interesting historical artifact. Things have come a long way in 20 years.

Next: Graphics Town Hints
Page 2 Rubric (61 points total)
Points (31):
Box final-grtown
1 pt
program runs (or seems to run correctly - worth looking at error console)
Box final-grtown
1 pt
frame rate seems OK (not too slow)
Box final-grtown
1 pt
UI is there and seems to work (can lookat and ride)
Box final-grtown
1 pt
highlight list looks OK
Box final-grtown
1 pt
visually distinct from example
Box final-grtown
2 pt
theme makes sense (need explanation)
Box final-grtown
2 pt
cool theme bonus (need explanation)
Box final-grtown
2 pt
objects created for this assignment 1, not trivial, can be identified in world (need explanation)
Box final-grtown
2 pt
objects created for this assignment 2, not trivial, can be identified in world (need explanation)
Box final-grtown
1 pt
5 more kinds of objects 1, not trivial, can identify (need explanation)
Box final-grtown
1 pt
5 more kinds of objects 2, not trivial, can identify (need explanation)
Box final-grtown
1 pt
5 more kinds of objects 3, not trivial, can identify (need explanation)
Box final-grtown
1 pt
5 more kinds of objects 4, not trivial, can identify (need explanation)
Box final-grtown
1 pt
5 more kinds of objects 5, not trivial, can identify (need explanation)
Box final-grtown
1 pt
has building, natural, vehicle (need explanation)
Box final-grtown
2 pt
loaded model (need explanation)
Box final-grtown
2 pt
shader: identifiable and not trivial (need explanation)
Box final-grtown
1 pt
three behaviors you made 1, not trivial, can be identified in scene (need explanation)
Box final-grtown
1 pt
three behaviors you made 2, not trivial, can be identified in scene (need explanation)
Box final-grtown
1 pt
three behaviors you made 3, not trivial, can be identified in scene (need explanation)
Box final-grtown
1 pt
at least one object is rideable / followable
Box final-grtown
2 pt
behavior that is not simple (need explanation)
Box final-grtown
2 pt
articulated figure (need explanation)
Advanced points (30) :
Box final-grtown
1 pt
advanced thing 1: has a challenge type (need the name and number from the list)
Box final-grtown
3 pt
advanced thing 1: works properly, can be identified in the town (need explanation)
Box final-grtown
2 pt
advanced thing 1: points above and beyond (need explanation)
Box final-grtown
1 pt
advanced thing 2: has a challenge type (need the name and number from the list)
Box final-grtown
3 pt
advanced thing 2: works properly, can be identified in the town (need explanation)
Box final-grtown
2 pt
advanced thing 2: points above and beyond (need explanation)
Box final-grtown
1 pt
advanced thing 3: has a challenge type (need the name and number from the list)
Box final-grtown
3 pt
advanced thing 3: works properly, can be identified in the town (need explanation)
Box final-grtown
2 pt
advanced thing 3: points above and beyond (need explanation)
Box final-grtown
1 pt
advanced thing 4: has a challenge type (need the name and number from the list)
Box final-grtown
3 pt
advanced thing 4: works properly, can be identified in the town (need explanation)
Box final-grtown
2 pt
advanced thing 4: points above and beyond (need explanation)
Box final-grtown
1 pt
advanced thing 5: has a challenge type (need the name and number from the list)
Box final-grtown
3 pt
advanced thing 5: works properly, can be identified in the town (need explanation)
Box final-grtown
2 pt
advanced thing 5: points above and beyond (need explanation)