图形学梳理

基础线代知识

时至今日,各类工具使得人们不必再掌握全部的计算,相比计算,我想学习图形学需要更多几何直觉而不是计算方式。

向量

点乘、叉乘

矩阵

变换

模型、相机(视图)

投影(正交、透视)

视口

光栅化

采样

信号学

反走样

着色

画家算法、z-buffer

光照计算

光照模型:Phong

镜面反射出的光线与观察者视线的夹角。

改进的算法:入射与视线的半向量(归一化后的(入射 + 视线))与法线的夹角。

L = La + Ld + Ls = ka * Ia + kd * (I / r^2) * max(0, n dot l) + ks (I / r2) * max(0, n dot h) ^ p

k 为漫反射系数(颜色),I 为光照强度,r 为测试点距离光照中心的距离,n 为法向量,l 为入射向量,h 为半向量,p 越大,高光越小。

光照频率:面、顶点、像素(Phong)

Phong 英年早逝,实属可惜。

顶点法线:附近面加权平均,面的面积越大权越大。

面内的像素法线:重心坐标(下面讲)

实时渲染管线

一系列操作的过程叫做管线。

顶点 -> 顶点处理

-> 屏幕空间顶点 -> 三角处理

-> 屏幕空间三角 -> 光栅化

-> 图元 -> 图元处理

-> 着色图元 -> 帧缓冲操作

-> 图像(像素数组)

着色器(shader):在可编程管线中,负责处理着色的东西

纹理映射

重心坐标:(a, b, c) 满足以下条件: (x, y) = aA + bB + cC; a + b + c = 1;
若点在三角形内,需要所有数都为非负的。

插值

临近:寻找最近的纹理

双线性(Bilinear):取临近的四个进行线性插值

双立方(Bicubic):取临近的十六个进行三次插值

大尺寸纹理

会导致采样率不足,单像素对应的点过多

经典问题:点查询,范围查询问题(平均值)

Mipmap

Mipmap -> 快速,非准确,正方形的范围查询。

基本思想为提前进行多级的平均计算,增加的额外空间为 1/3。

  • lv0 -> 128x
  • lv1 -> 64x
  • lv2 -> 32x
  • lv3 -> 16x
  • lv4 -> 8x
  • lv5 -> 4x
  • lv6 -> 2x
  • lv7 -> 1x

总共有 log2 层,每层是上层的一半。

mipmap D 与 D+1 之间进行三线性插值(Trilinear):D 进行一次双线性,D + 1 进行一次,他们的结果进行一次。

mipmap 的问题:会出现 overblur,远处细节丢失

各向异性过滤

生成 Ripmap,允许对长条形区域进行查询

相比 mipmap 解决长条问题,但未解决斜着的问题。开销增加为 3x

EWA 过滤

几何

环境光(可以用纹理表达)

球形环境光

球形图 问题:展开会扭曲

立方图 球映射到包围他的立方体

法线贴图

调光照

位移贴图

调顶点

几何分类

隐式

距离函数
水平集
分型

显式


图形学梳理
http://tt432.github.io/图形学梳理/
作者
秦千久
发布于
2023年7月8日
许可协议