Skip to content

Latest commit

 

History

History

GAMES-101

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

GAMES101 - Notes, Assignments and Projects

View reports for assignments and projects at the following links.

Name Status
Assignment 1 Completed
Assignment 2 Completed
Assignment 3 Completed
Assignment 4 Completed
Assignment 5 Completed
Assignment 6 Completed
Assignment 7 Completed
Assignment 8 Completed
Project Not Started

Academic Integrity (IMPORTANT)

As a course requirement, code using the skeleton provided by the course cannot and should NOT be published on GitHub.

Uploading these assignments are solely for educational and discussion purposes, as the online version of this course has stopped accepting new assignment submissions.

FOR ANYONE WHO IS CURRENTLY OR IS TO BE ENROLLED IN THIS COURSE (OR ITS ENGLISH VERSION), DO NOT VIEW OR EVEN COPY-PASTE CODE FOR ASSIGNMENTS PROVIDED INSIDE THIS COURSE REPOSITORY, AS THIS IS A DIRECT VIOLATION OF ACADEMIC INTEGRITY.

Introduction to This Course

GAMES101 (2020-02), or Introduction to Computer Graphics, conducted by Prof. Lingqi Yan, is an introductory course that explores the fundamentals of Computer Graphics. This comprehensive offering provides students with a solid foundation in essential principles and techniques used in CG, including rendering (both rasterization and modern ray-tracing), geometry, and animation. Additionally, the course showcases the captivating nature of the field and highlights cutting-edge research conducted by leading experts. Students are expected to gain a deeper understanding of visually stunning virtual environments and stay informed about the latest advancements in CG.

Course Website - GAMES101

The corresponding English version can be found at Course Website - CS180/CS280 - Introduction to Computer Graphics. Notice that the English version conducted at UCSB covers less content in comparison to GAMES101.

Notes

Notes can be found inside another repository IskXCr - CG-Note-Misc

Assignments & Projects

Prompts for assignments and projects can be found in the last section of this document.

Their implementation can be found in the corresponding directory.

About This Repository

This repository contains my assignments and projects for GAMES101 conducted by Prof. Lingqi Yan.

The purpose of this repository is to track personal progress.

Notes, Text and Copyright Disclaimer

COPYRIGHT DISCLAIMER: If not otherwise specifically mentioned, all the figures inside the notes are captured/created from slides. If you have found a figure without reference, then either it is from the slides and made by the author, or the source has been mentioned in the slides (for some reason they are not mentioned inside the notes). The author of these notes doesn't own the COPYRIGHT of them, and there is NO copyright infringement intended.

Project Demo

Selected Assignment Demos

View Assignment 7 for implementation of Fresnel reflections, transmission, Microfacet material and BVH with SAH (Surface Area Heuristics).

Appendix: List of Assignments

We list, in the following sections, features of frameworks that are expected to be implemented by students. The actual implementation may differ and can be found under the corresponding repository. (e.g., extra features)

The original framework are generally modified heavily by us to suit the need. Some of the modifications are specified in their corresponding readme.md file.

Bonus points are italicized.

Assignment 1 - MVP Transformation and Triangle Rasterization

Requirements:

  • Implement a rasterizer running on CPU:
    • Manually compute the transformation matrices:
      • Rotation around any axis.
      • Orthogonal projection and perspective projection.

Assignment 2 - Further on Triangle Rasterization

  • Implement a rasterizer running on CPU:
    • Manually compute the transformation matrices:
      • Rotation around any axis.
      • Orthogonal projection and perspective projection.
    • Create bounding boxes for triangles.
    • Fast inside_triangle test.
    • Z-Buffer.
    • Anti-aliasing - supersampling:
      • 4xMSAA

Assignment 3 - Shaders

  • Implement a rasterizer running on CPU:
    • Inherit features from Assignment 2.
    • Inherit features from Assignment 1.
    • Implement Phong fragment shader.
    • Implement texture fragment shader.
    • Implement bump fragment shader.
    • Implement displacement fragment shader.
    • Implement bilinear interpolation on textures.

Assignment 4 - Bezier Curve

  • Implement a rasterizer to draw Bezier curves, running on CPU:
    • Implement De Casteljau algorithm.
    • Implement anti-aliasing on the Bezier curve.

Assignment 5 - Whitted-Style Ray Tracing

  • Implement a ray-tracer to render a sample scene, running on CPU:
    • Implement method render(), in which computation of ray directions should be done given parameters including width, height, viewDepth and etc.
    • Implement the Moller-Trumbore algorithm.

Assignment 6 - Further on Whitted-Style Ray Tracing

  • Implement a ray-tracer to render a sample scene, running on CPU:
    • Inherit features from Assignment 5.
    • Implement method Bounds3::IntersectP to detect ray-bounding-box intersections.
    • Implement method BVHAccel::Intersect() and BVHAccel::getIntersection() to traverse the BVH built.
    • Implement the Surface Area Heuristic method, which relies on particular assumptions about the distribution of rays.
      • Recursively build the BVH using SAH.

Assignment 7 - Physically Based Ray Tracing

  • Implement a ray-tracer to render the Cornell Box, running on CPU:
    • Inherit intersection tests and BVH methods from Assignment 6.
    • Implement the Path Tracing algorithm from scratch.
    • Implement multi-threading on rendering from scratch.
    • Implement the microfacet material based on the framework.

The framework has been heavily modified. Other materials have also been added.

Assignment 8 - Physically Based Animation

  • Implement algorithms to simulate a mass-spring system:
    • Implement the method CGL::Rope::Rope().
    • Implement explicit Euler method and semi-implicit Euler method.
    • Implement Verlet method.
    • Implement damping.

Appendix: Project

We list the possible topics that students are expected to implement. The actual topic may differ from the reference or out of this recommendation list.