I’m happy that the semester end and holidays start. Before I go on a holiday trip, let me share my first semester as a master student first. I started to study at University of Southern California (USC) this fall. I’m aiming to become a programmer in the game industry, so I take Master Degree in Computer Science – Game Development. I was excited to study from great people from here and the industry. This blog will have a story about my first semester in CS Game Development USC. This will only consist the education/study-related, the things related to social life or love life will not be explained.
The structure of this blog will start with an explanation of what courses I took and why. After explained, I will continue with detail for each course, including what I learned from the course and what project(s) I worked on during the course. Last, I will conclude the blog with a single paragraph of how I feel studying game development in USC.
Should we start?
As an international student and a graduate student, I should take at least 8 units each semester. My first semester I took 3 courses with 4 units for each course, so 12 units in total. Two courses are required classes for degree and one is the project-based course, but still related to game development.
- Game Engine Development. This course focus on how the game engine structured and what components of the game engine should and must implement. Besides this course’s required for the degree, I took the class because I was excited to dig deep into a game engine, especially working with the low level one.
- 3D Graphics and Rendering. This course focuses mainly on algorithm making 3D rendering possible. This course is one of the required courses for the degree. Well, I thought the class will work on the one of famous 3D API out there, but I was wrong It was deeper than that, it focused on the algorithm how to make own API and make that work.
- Special Topics (Game Development). This course is a project-based course. We also did project management of making a game here using Scrum. The reason I took this class is that I want to start making a game and I also want to feel working with different people from a different culture in making a game.
The next part will explain the detail of each course, and project(s) I worked on for the course.
Game Engine Development
This course covers all materials are required for making a game engine from zero, from linear algebra, 3D graphics/hardware, AI, animation, physics, networking, user interface, GP GPU, a structure of game engine and how each component interacts with each other. But for this class, we didn’t make a game engine from zero (if it, it will take more than the master degree program). Rather than we use bare-minimum built game engine using C++. If I compared the engine with a currently available engine like Unity3D or Unreal Engine 4, the engine’s nothing.
I learned a lot from this class. What significant thing I feel is about 3D Math and relation with the implementation of the game engine. From this class, I became familiar with using Vector with all its operation (dot/cross product), using Matrix with all its interpretation (how to get basis from a matrix), and some of the math problems mostly appear in engine/game implementation problem.
Also, I started to learn broad components of a game engine, such as rendering, networking, event system, physics, animation on GPU. Mainly we use C++ for implementation and macros is the best weapon for simplifying and injecting code inside a game engine.
We had three projects for the class. Each project consists two people working together. We decided what we will work on for each project. For me and my teammate, we worked on 3 different projects: Physics, Navigation Mesh and Particle System (using CPU and GPU). These are demos of our projects.
Physics Engine – Bowling Game
Navigation Mesh Demo
Particle System Demo
Thanks to my teammate: Hongjie Huang (Max).
3D Graphics and Rendering
This course mainly focuses on implementing an algorithm for rendering and graphics related API. This course covers rendering from a low-level perspective, begin with put pixel, start rendering things, using matrices to move between spaces or manipulate 3D objects, shadings, anti-aliased method, texturing, etc.
Mostly I implemented algorithms here. I like the structure of lecture and homework, start from the simple thing and advance to more difficult thing step by step, but somehow bit boring for both lecture and homework. But in the end, I learn most common method used in 3D graphics API. The goal of this course (practically) is making the software API that can handle simple 3D object rendering. In the end of the class, we worked in a team of four and we decided to add more feature in course’s API, which is implementing shadows: hard shadows and soft shadows. For soft shadows, we use a method to implement soft shadows, called Percentage Filter Soft Shadow. (more information on this method).
The result is very nice.
Thanks to my teammates: Chen, Manasi Vakani and Xueqing (Snow)
Special Topics (Game Development)
This course is relatively new. The course offers its student to work one-semester long game project, from designing a game, prototyping a game and achieve vertical and horizontal slice for the game. Not only working on the project, from the course, we learn best practices of game design and game project using Scrum.
I learned a lot of things here from a non-technical perspective, especially communication, and scoping the project. Since we worked on a multi-language and multi-cultural team, language is a crucial part of communication to be able to understand each other. We suffer this situation for several weeks.
In the first couple weeks, we want to achieve too big of scope, and the play-testing’s not showing any improvement at that time. So, we tried scope down the project in the last few weeks, and try a lot of things to make the game more fun. Hopefully, in the end, we found our game could be fun with the right amount of scope. We still need to improve the game, so we can continue working on the game and release it to the world.
Thanks to my teammates: Qingyou, Xueqing (Snow), Brian and Christina Orcutt.
I’m very happy and thankful for studying at USC. Thanks to LPDP that provides me a scholarship, so I can study at USC. But I feel like I didn’t do so good in this semester. The transition from work mode into study mode is one of the factors. I did realize for computer science courses taking 12 units is too much for the first semester, especially if you’re kind of new in the town. Feeling to go somewhere fun is the biggest temptation for the first time. Becoming a student and part tourist is never been easy for me.
That’s all for this blog. If anyone has questions about studying Game Development at USC, just pull the trigger.
Winter is coming. Time to travel to somewhere nice and free my mind.