Lecture at graduate school of information science and technology in the university of Tokyo, spring semester, 2025
For Zoom link, Slack, and GitHub Classroom invitations
Dr. Nobuyuki Umetani
-
email: n.umetani@gmail.com
-
lab's website: https://cgenglab.github.io/en/
-
Teaching assistants: Kenji Tojo (https://kenji-tojo.github.io/), Yuhan Wu (https://yoharol.github.io/pages/myself/)
- Monday 2rd period, 10:25pm - 12:10pm
Computer-generated images are everywhere in movies, video games, and VR. This course is an introduction to the techniques to animate objects in computer graphics based on the law of physics. The aim of the course is to get familiar with applied mathematics such as linear algebra, vector analysis, partial differential equations, tensor mechanics, variational principle, optimization, and numerical analysis through the animation techniques for particle systems, rigid bodies, and elastic bodies. There are C#/Rust/Python programming assignments to acquire research-oriented graphics programming skills. The students also learn basics use of the computer graphics software Unity and Blender.
Topics:
- mass-spring simulation
- rigid body simulation
- elastic body simulation
- cloth and hair modeling & simulation
- collision-detection using spatial hashing
- finite boundary method
| Day | Topic | Assignment | Slide |
|---|---|---|---|
| (1) Apr. 7 |
Introduction Data structure for simulation, Explicit/implicit shape representation |
[1,2] | |
| (2) Apr. 21 |
Programming 1 Introduction to Rust language, GitHub |
task00 | [3,4] |
| (3) Apr. 28 |
Time Integration Backward & forward Euler method, particle system, Barnes–Hut method |
task01 | [5,6] |
| (4) May 8 |
Newtonian Mechanics |
task02 | [7] |
| (5) May 12 |
Collision Detection principal component analysis sort & sweep method, bounding volume hierarchy |
task03 | [8,9] |
| (6) May 19 |
Linear System matrix data structure, Conjugate gradient method |
task04 | [10,12] |
| (7) May 26 |
Simple Elastic Energy Newton-Raphson method mass-spring system |
task05 | [11,13] |
| (8) June 9 |
Programming 2 Introduction to Unity & C# |
task06 | [14,15,16] |
| (9) June 16 |
Dynamic Simulation Variational time integration |
task07 | [17,18] |
| (10) June 23 |
Optimization with Constraint Lagrange multiplier method |
task08 | [19] |
| (11) June 30 |
Rotation Rotation representation |
task09 | [20] |
| (12) July 7 |
Rigid Body Dynamics inertia tensor, angular velocity |
task10 | [21,22] |
| (13) July 14 |
Continuum Mechanics tensor, finite element method |
[23,24,25] |
- [1] Introduction
- [2] Data Structure
- [3] Rust
- [4] Git & GitHub
- [5] Time Integration
- [6] Floating Point Number
- [7] Newtonian Mechanics
- [8] Jagged Array
- [9] Collision Detection
- [10] Matrix Data Structure
- [11] Linear System Solver
- [12] Jacobian & Hessian
- [13] Grid & Mesh Interpolation
- [14] Unity
- [15] Mass Spring System
- [16] Vector Differentiation
- [17] Optimization
- [18] Variational Integration
- [19] Optimization with Constraints
- [20] Rotation
- [21] Angular Velocity
- [22] Rigid Body Approximation
- [23] Tensor
- [24] Finite Element Method
- [25] Geometric Deformation
- 20% lecture attendance
- Attendance is counted based on writing a secret keyword on LMS. The keyword is announced for each lecture.
- 80% small assignments
- see below
There are many small programming assignments. To do the assignments, you need to create your own copy of this repository through GitHub Classroom. These assignements needs to be submitted using pull request functionality of the GitHub. Look at the following document.
The final submission deadline is at 15:00 pm on July 17th, 2025. The late submission won't be accepted after this final submission deadline.
| Task ID | Language | Title (tentative) | Thumbnail |
|---|---|---|---|
| task00 | Rust | Building Rust project & submitting GitHub pull request | |
| task01 | Rust | Implicit Time Integration | |
| task02 | Rust | Linear Momentum Conservation | |
| task03 | Rust | Acceleration of N-body Simulation | |
| task04 | Rust | Accelerated nearest search using Kd-Tree | |
| task05 | Rust | Solving Laplace equation with Gauss-Seidel Method | |
| task06 | C# | Gradient Descent for Mass-Spring Simulation | |
| task07 | C# | Dynamic Mass-spring System using Variational Euler Time Integration | |
| task08 | C# | Controlling Volume of a Mesh using Lagrange-Multiplier Method | |
| task09 | C# | Rotation and Energy Minimization | |
| task10 | C# | Simulation of Rigid Body Precession |
- Do the assignment by yourself. Don't share the assignments with others.
- Don't post the answers of the assignment on Slack
- Late submission of an assignment is subject to grade deduction
- Score each assignment will not be open soon (instructor needs to adjust weights of the score later)
- You can use AIs tool for coding.
- Ten Min Physics (Youtube channel)
- Physically Based Modeling: Principles and Practice, Siggraph '97 Course notes by Dr. Baraff
- Physics-Based Animation by Kenny Erleben et al. (free textobook about rigid body dynamics)
- Dynamic Deformables: Implementation and Production Practicalities, SIGGRAPH 2020 Courses
- Awesome Computer Graphics (GitHub)
- Skinning: Real-time Shape Deformation SIGGRAPH 2014 Course
