跳转至

Lecture 1: Overview of Computer Graphics

本课程内容参考B站视频的内容学习: GAMES101-现代计算机图形学入门-闫令琪

计算机图形学

  • 有关投影、曲线、表面的数学
  • 光影物理
  • 3D图形表示和处理
  • 动画/模拟

简单来说,计算机图形学包含Modeling、Rendering、Simulation三大部分。


什么是计算机图形学

图形学 vs 图像处理 vs 计算机视觉

这三个领域经常被混淆,但它们有本质区别:

领域 输入 → 输出 典型任务
计算机图形学 模型/场景 → 图像 渲染、建模、动画
图像处理 图像 → 图像 滤波、降噪、增强
计算机视觉 图像 → 模型/信息 识别、检测、三维重建

计算机图形学的核心任务是 将三维场景描述转化为二维图像,即"渲染(Rendering)"。除此之外还包括几何建模(Modeling)、物理模拟(Simulation)和动画(Animation)等方向。


图形学的应用领域

典型应用

  • 影视特效 — 皮克斯、工业光魔等公司的 CG 动画与视觉特效
  • 电子游戏 — 实时渲染技术驱动的游戏画面
  • CAD/CAM — 计算机辅助设计与制造
  • 科学可视化 — 医学影像、流体仿真可视化
  • 虚拟现实 / 增强现实 — VR/AR 中的实时渲染
  • 机器人仿真 — 训练与测试环境

:material-pipeline: 渲染管线概述

渲染管线(Rendering Pipeline) 是将三维场景描述转换为最终二维图像的一系列有序步骤。理解管线是学习图形学的基础。

graph LR
    A["顶点数据\n(Vertices)"] --> B["顶点着色器\nVertex Shader"]
    B --> C["图元装配\nPrimitive Assembly"]
    C --> D["光栅化\nRasterization"]
    D --> E["片段着色器\nFragment Shader"]
    E --> F["帧缓冲\nFramebuffer"]
    F --> G["屏幕图像\nImage"]
管线各阶段详解
  1. 顶点处理(Vertex Processing):将顶点从模型坐标系经过 Model、View、Projection 变换到裁剪空间(Clip Space),再映射到屏幕坐标。这一步通常由 顶点着色器(Vertex Shader) 完成。

  2. 图元装配(Primitive Assembly):将变换后的顶点组装为三角形等基本图元。

  3. 光栅化(Rasterization):将连续的三角形离散化为片段(Fragment),即像素候选。这一步决定了哪些像素被三角形覆盖。

  4. 片段处理(Fragment Processing):对每个片段计算颜色,涉及纹理采样、着色(Shading)等操作,通常由 片段着色器(Fragment Shader) 完成。

  5. 帧缓冲操作(Framebuffer Operations):执行深度测试(Z-Test)、模板测试(Stencil Test)、混合(Blending)等,最终写入帧缓冲。


光栅化简介

光栅化(Rasterization) 是实时渲染中最核心的技术之一,其本质是将连续的几何图元(主要是三角形)转换为离散的像素集合。

为什么用三角形

三角形的独特优势

  • 是最简单的多边形,三个顶点唯一确定一个平面
  • 任何复杂曲面都可以用三角形网格(Triangle Mesh)近似
  • 三角形内外判断算法高效且明确
  • 硬件高度优化(GPU 原生支持三角形光栅化)

采样判断

光栅化的核心问题是:对于屏幕上的每个像素中心点 \((x+0.5, y+0.5)\),判断它是否在三角形内部。常用方法是 向量叉积法(详见 Lecture 5)。

\[ inside(tri, x, y) = \begin{cases} 1, & \text{if } (x, y) \text{ is inside the triangle} \\ 0, & \text{otherwise} \end{cases} \]

光栅化的挑战

走样与抗锯齿

由于采样是在离散的像素网格上进行的,必然会产生 走样(Aliasing) 现象——表现为锯齿状边缘。解决方案包括:

  • MSAA(多重采样抗锯齿):在每个像素内使用多个采样点
  • FXAA / TAA:后处理抗锯齿技术
  • 超分辨率渲染:以更高分辨率渲染后降采样

这些内容将在 Lecture 6 中详细讨论。


GAMES101 课程结构总览

graph TD
    L1["L1 概述"] --> L2["L2 线性代数"]
    L2 --> L3["L3 变换"]
    L3 --> L4["L4 变换续"]
    L4 --> L5["L5 光栅化 1"]
    L5 --> L6["L6 光栅化 2"]
    L6 --> L7["L7 着色 1"]
    L7 --> L8["L8 着色 2"]
    L8 --> L9["L9 着色 3"]
    L9 --> L10["L10 几何 1"]
    L10 --> L11["L11 几何 2"]
    L11 --> L12["L12 几何 3"]
    L12 --> L13["L13 光线追踪 1"]
    L13 --> L14["L14 光线追踪 2"]
    L14 --> L15["L15 光线追踪 3"]
    L15 --> L16["L16 光线追踪 4"]
    L16 --> L17["L17 材质"]
    L17 --> L18["L18 进阶渲染"]
    L18 --> L19["L19 相机与透镜"]
    L19 --> L20["L20 颜色"]
    L20 --> L21["L21 动画 1"]
    L21 --> L22["L22 动画 2"]

本课程共 22 讲,覆盖从数学基础到前沿渲染技术的完整知识体系。后续笔记将逐步展开每一讲的核心内容。