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 |
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.
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.
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 can be found inside another repository IskXCr - CG-Note-Misc
Prompts for assignments and projects can be found in the last section of this document.
Their implementation can be found in the corresponding directory.
This repository contains my assignments and projects for GAMES101 conducted by Prof. Lingqi Yan.
The purpose of this repository is to track personal progress.
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.
View Assignment 7 for implementation of Fresnel reflections, transmission, Microfacet material and BVH with SAH (Surface Area Heuristics).
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.
Requirements:
- Implement a rasterizer running on CPU:
- Manually compute the transformation matrices:
- Rotation around any axis.
- Orthogonal projection and perspective projection.
- Manually compute the transformation matrices:
- 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
- Manually compute the transformation matrices:
- 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.
- Implement a rasterizer to draw Bezier curves, running on CPU:
- Implement De Casteljau algorithm.
- Implement anti-aliasing on the Bezier curve.
- 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 includingwidth
,height
,viewDepth
and etc. - Implement the Moller-Trumbore algorithm.
- Implement method
- 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()
andBVHAccel::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.
- 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.
- 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.
- Implement the method
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.
-
Extension of Assignments
-
Adaptive Tessellation of Subdivision Surfaces with Displacement Mapping (CPU-only is sufficient)
-
Mesh Simplification and Mesh Regularization
-
-
Light Field Camera
-
Ambient Occlusion
-
-
-
Rendering
- Volume Scattering
- Progressive Photon Mapping
- A Practical Model for Subsurface Light Transport
- Hair Rendering
- Glints
-
Animation
-
2D-Grid-Based Fluid Simulation
-
3D-Position-Based Fluid Simulation
-
3D Snow Simulation
-
3D Melting Simulation
-
Rigid Body Simulation
-
-
Others
-
GPU Path Tracer using NVIDIA OptiX
-
Render the world with two triangles:
-
Mesh from Point Clouds
-