Skip to content

BlueMicro233/GAMES101-projects

Repository files navigation

大纲

只包含 Rendering 相关的部分,几何造型不感兴趣所以没做(不是懒

大部分注释都是用英文写的——因为感觉写英文注释更顺手一点,因为这个课程本身就是 UC Santa Barbara 的 CS180/CS280* 直接平移过来的。

*Fun Fact: UC Berkeley 教的也其实差不多,一些课件的内容甚至是 literally 地完全一致233(如果你感兴趣,伯克利的那个课程的编号是 CS 184/284A,也很值得一看。

Note

GAMES101 的课程作业在对应标题内容的下一节课放出,并且在下一节课通常会有重要知识补充。

例如 hw3 需要的法线计算实际上是在 Lecture 10 Geometry 1 (Introduction) 的前半部分介绍的,而不是在 Lecture 09 Shading 3 (Texture Mapping Cont.) 的部分。

  • hw1:旋转矩阵透视投影矩阵

    • Lecture 01 Overview of Computer Graphics
    • Lecture 02 Review of Linear Algebra
    • Lecture 03 Transformation
    • Lecture 04 Transformation Cont.

  • hw2:光栅化Z-Buffer 算法。

    • Lecture 05 Rasterization 1 (Triangles)
    • Lecture 06 Rasterization 2 (Antialiasing and Z-Buffering)

  • hw3:图形流水线着色器纹理映射局部光照模型(Blinn-Phong)等

    • Lecture 07 Shading 1 (Illumination, Shading and Graphics Pipeline)
    • Lecture 08 Shading 2 (Shading, Pipeline and Texture Mapping)
    • Lecture 09 Shading 3 (Texture Mapping Cont.)

  • hw5:递归式光线追踪 - 光线方程 $r(t) = \vec{o} + t \vec{d}$成像平面上各像素的光线光线-三角形求交(Ray-Tri intersection) (Moller-Trumbore 算法)

    • Lecture 13 Ray Tracing 1

  • hw6:光线追踪加速结构 - 光线-包围盒求交(Ray-Box intersection)层次包围盒(BVH)遍历

    • Lecture 14 Ray Tracing 2

  • hw7:路径追踪(Path Tracing)

    • Lecture 15 Ray Tracing 3
    • Lecture 16 Ray Tracing 4
    • Lecture 17 Materials and Appearances
    • Lecture 18 Advanced Topics in Rendering

...... The Rendering Equation is:

$$ L_o(\mathbf{x}, \omega_o) = L_e(\mathbf{x}, \omega_o) + \int_{\Omega} f_r(\mathbf{x}, \omega_i, \omega_o) L_i(\mathbf{x}, \omega_i) \cos\theta_i d\omega_i $$

摘自 James T. Kajiya 发表于 SIGGRAPH 1986 的论文《The Rendering Equation》,符号形式有调整。 “名字越短,事情越大。”——Lingqi Yan

路径追踪直接光照(Path Traced Direct Illumination)

当代 3A 游戏光线追踪阴影(Ray Traced Shadows)的实现方式。

1 spp 16 spp 128 spp

路径追踪全局光照(Path Traced Global Illumination)

模拟世界。

如今它已开始在各大游戏普及(例如《半条命 2: RTX》、《赛博朋克 2077》以及《生化危机 9:安魂曲》等)。

1 spp 16 spp 128 spp

构建

Windows 11 (x86-64)

你需要安装

  • Windows Subsystem for Linux 2 (WSL 2)
    • 🐧安装一个 Linux 发行版(Arch Linux, Ubuntu, etc.)
  • JetBrains CLion

接着,在 Linux 下安装必要的 C++ 开发工具(CMake, 编译器等):

sudo apt install build-essential
unzip cmake

安装 GAMES101 所需的 OpenCV 计算机视觉库和 Eigen 向量数学库:

sudo apt install libeigen3-dev libopencv-dev

在 CLion 里进行如下配置:

macOS (aarch64)

和 Linux 那边的步骤差不多(OpenCV, Eigen),并且在 CLion 里不需要额外配置工具链,只是 CMakeList.txt 需要改(可以交给 LLM 完成)。

Note

Path Tracing 由于只是粗略地引入了多线程并行加速,macOS 上可能无法直接正常运行(大概率遇到进度条鬼畜之类的问题),所以可能暂时需要把 Renderer.cpp 渲染循环附近的 #pragma omp parallel for schedule(dynamic, 1) 以及 #pragma omp critical 的部分删除,这会牺牲一些性能。布朗尼正在努力修复这个问题。

如果实在是想要直接运行,请确保你已安装 LLVM 框架(brew install llvm)并按如下命令生成构建文件:

cmake .. \
  -DCMAKE_C_COMPILER=/opt/homebrew/opt/llvm/bin/clang \
  -DCMAKE_CXX_COMPILER=/opt/homebrew/opt/llvm/bin/clang++

碎碎念

GAMES101 是最好的中文图形学课程,不接受反驳。学习这门课程可以对图形学(尤其是闫老师的课很注重 Rendering 这块)在做什么有个自上而下的基础认知,不像国内很多图形学课从盘古开天辟地给你讲理论,结果到最后什么都不懂。

闫老师的授课给人一种亲切和有趣感,这种拉近听众与学科之间距离是很多课程难以做到的(当然也有图形学本身就散发魅力的原因)。由于图形学的确有难度,有趣和好玩的体验其实蛮重要的。

做这些作业是真的挺有必要的(因为学的是计算机图形学,怎么能少得了代码实现?)。不过有人会说:“助教框架都写好了,学生基本上就是在实现一些接口,学到了什么?” 此言差矣! 你要知道现在的历史情境下,图形学造轮子比以前还更没用了(工业界在近几十年积累了大量优秀的成品,现在更是 LLM 飞速发展)。只有高效地掌握核心思想的人才能达成最好的学习

同时笔者还认为,这种规模的作业正适合以前从未接触过正经 C++ 项目的大一大二学生拿来作为基本的工具链入门。

虽然笔者在两年多以前就接触到了这个神课,并且刷了不止一遍。但是作业还真没认真做过,由于之前上高中并没有时间配环境和写代码,现在得赶紧补上了(((

About

计算机图形学神课(GAMES101)实验作业

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors