Project

Team assignments

Projects must be completed in teams of 3-5 members. Each team will select one member to be the team leader. Each team must complete one of the project options listed below. This project is broken into a number of smaller pieces: a proposal, five milestones, the final project submission, and a presentation. Each of these should be completed as a team but submitted only by the team leader (except for the presentation, which is shared by the entire team).

The first lab (04/03) will provide an opportunity to form teams, if you have not already done so. By Friday (04/06), each team leader must submit the names of all members of his/her team on iLearn. Decide as a team which of the three project options you would like to pursue; the team leader will note this along with the list of team members.

Proposals

Each team will prepare a proposal, which the team leader will upload on iLearn. Each proposal must specify in detail what the team will do, what will be accomplished and submitted at each of the five milestones, and what functionality will be demonstrated at the final presentation or in the final submission. Each project must meet the general requirements outlined below as well as the requirements specific to the chosen project option.

Please exercise a combination of ambition and restraint when writing your proposals. For many students, this class will be your last opportunity to produce a major product and impress a potential future employer. If done well, all three project options will lead to a visually appealing and interesting result. On the other hand, be realistic about what you can accomplish given the size of your team and the time available. Please note that it is okay to take some risk here. It is possible to recieve good scores for your project even if your proposal ended up being a bit too ambitious, provided reasonable effort was applied towards achieving that goal. You may distinguish between primary and secondary objectives in your proposal, distinguishing between what you are sure you can accomplish and what you would like to accomplish in addition to that.

Common project requirements

Each project must meet the following requirements

Project options

Option 1: Game

Write a computer game. The game may be 2D or 3D. The narrative of the game must be original; the objective is not to produce a clone or variation of an existing game.

You may use an open source game engine for this project. You may find a list of game engines and their licenses here. You may also use open source tools for modelling and creating game assets. We recommend using blender for both tasks; we will provide limited assistance to teams using this tool. We will also introduce its use during two of the labs. You are not restricted to using blender, but we will not be able to assist you with the use of other tools. If you would like to use an alternative tool, please state this in your proposal. We will try to make these tools available in WCH 133 so that you can use them when you work on your projects during labs. Note that the restriction on commercial tools applies to artistic tools only (Unity game engine, Maya, Houdini, etc.). There is no restriction on the use of commercial tools for other purposes (Microsoft Office, Keynote, Visual Studio, XCode, Sublime Text, Matlab, etc.)

Each team must make their own assets, including geometry, scenery, characters, etc. You may not receive assistance from anyone outside your team (for example, if you have a friend who is an artist, they may not produce artwork for your game). You may not purchase or download any assets for your game. The one exception to this is music. You may download music for your game, subject to the following restrictions:

No commercial assets or music are permitted, and there is zero tolerance for violation of copyright.

There is no language restriction for this project option. The language(s) you use will largely be dictated by your choice of game engine.

Your first milestone must contain a complete plan for your game, which you must submit for this milestone. This should contain (1) the story line and objective for the game, (2) a list of all of the characters in your game, (3) all of the actions that your characters will be able to perform, (4) all of the interactions that can occur between your characters, and (5) all of the interactions that can occur between your characters and the world. If some of your characters will have AI, explain how those characters will behave. Your proposal should contain a sketch of this information, and it should be detailed enough that you can choose reasonable milestones. The information submitted for the first milestone must be essentially exhaustive. If you are unable to plan out all of the characters and interactions in a week, you will probably not be able to implement all of them in a quarter. Note that you do not need to provide sketches for the characters at this stage.

The other milestones are up to you. For example, if your milestone is to have completed the geometry for each of your characters, then you might submit screenshots of the geometry you have produced. If your milestone is to have the navigation controls and a subset of game interactions working, submit a video recording of a team member playing the game and demonstrating that those interactions work.

You must demonstrate your completed game during your final presentation. Please test it carefully before you present, as per Murphy's law.

Option 2: Ray Tracing

For ray tracing project, you will produce a functional and practically useful ray tracer. The ray tracers you wrote in CS 130 lack many basic features, such as the ability to render triangulated geometry or apply texture maps. In this project, you will implement those features. You may use code that one or more of your team members wrote in CS 130/230 as a starting point for this project; you should document where this code came from.

At a minimum, your final ray tracer must support the following features

All ray tracers must be written in C or C++, and they must compile and run on the Linux machines in WCH 133.

A reasonable way to break up milestones for this project is to list out the features you plan to implement and divide them into six sets. You may submit renders demonstrating that the required functionality works to show that you have completed the objectives for each milestone. If you see artifacts in your results, this is also a good opportunity to submit these and get feedback on what might be causing them.

Although there are no particular requirements on the order you plan things, I recommend doing the acceleration structure early. Without it, renders may become painfully slow. It will be helpful if you are able to disable the acceleration structure for testing purposes, since it is very common for bugs to exist in these routines.

Option 3: Fluid simulation

Write a fluid simulator. You may simulate smoke or water. As a general rule, smoke is easier, but water is more impressive. The fluid simulator is more math-intensive than the other two project options.

You should implement splitting for the fluids. The simulation should be Eulerian (fixed regular grid). That means you will need to implement:

For simplicity, you do not need to implement: Your simulator must be written in C or C++, and they must compile and run on the Linux machines in WCH 133. The final simulations for this project will require significant amounts of computing resources. Suitable computing resources will be made available for these groups towards the end of the quarter. Be sure to reserve a full week of time in your schedule for running and rendering these final simulations (steps FS and FR below). Running larger sims tends to expose bugs that were unnoticed at smaller resolution; they never run to completion correctly on the first try.

Since there will not be sufficient time before the proposal is due for students to fully understand what will be involved in writing a fluid simulator, I have listed below the major steps that will be required and the dependencies between them. Use this to help you plan out your proposals and milestones.

Dependency graph: