图形学 · GraphicsNote
相机、采样与重建
Cameras, Sampling & Reconstruction
相机把世界几何映射到屏幕,而采样与重建决定连续信号如何变成有限像素。理解投影、视锥、像素滤波、频谱混叠和时间采样,才能解释远处闪烁、纹理摩尔纹、运动拖影和 TAA 鬼影,而不只是记住某个抗锯齿开关。
相机模型
常见变换链为:
其中 为模型变换, 为视图变换, 为投影变换。透视投影使远处物体缩小,正交投影保持尺寸;深度范围、手性、NDC 约定和矩阵乘法顺序必须与图形 API 对齐。
相机设计还包括 FOV、纵横比、近远裁剪面、抖动、曝光和运动历史。近裁剪面过小会恶化深度精度;FOV、分辨率和动态缩放共同决定屏幕采样密度。
采样与重建
渲染器对连续可见性/辐射信号进行像素区域积分的近似。若信号频率超过采样频率,会发生混叠;抗锯齿可以通过预过滤、随机/分层采样、时域积累或重建滤波降低伪影,但无法凭空恢复未采集的信息。
- 预过滤:在缩小纹理或几何时先去除高频,Mipmap 是常用近似。
- 空间采样:每像素多样本、抖动或重要性采样改善空间覆盖。
- 时间采样:跨帧积累提高样本数,但依赖运动矢量和历史有效性。
- 重建:利用邻域、历史或先验估计目标分辨率;滤波半径越大越平滑,也越可能丢细节。
应用:从伪影反推根因
flowchart TD
S["连续场景信号"] --> Q["相机与投影采样"]
Q --> A["像素/时间样本"]
A --> F["过滤与历史重投影"]
F --> R["重建图像"]
R --> D{"伪影"}
D -->|"闪烁/摩尔纹"| S1["高频未预过滤"]
D -->|"鬼影"| S2["历史无效或运动估计错误"]
D -->|"边缘锯齿"| S3["空间样本不足"]诊断时先固定相机和分辨率,再分别关闭历史、改变采样模式、检查运动矢量和深度一致性;不要直接把所有问题归因于“采样少”。
取舍与常见坑
- 增加样本万能论:样本数增加会提高成本,错误的重建仍会放大伪影。
- 忽略坐标约定:深度范围、Y 翻转、左/右手性不一致会造成系统性错误。
- 历史缓存污染:瞬移、遮挡、材质变化和曝光突变需要检测并拒绝历史。
- 滤波过宽:能消除闪烁但会造成糊、拖影和细节丢失;按内容频率选择。
- 只看静帧:时间采样问题必须在运动、旋转和镜头切换中验收。
出处 · Sources
相关页面
图形学坐标空间Coordinate Spaces顶点从模型到屏幕要依次经过模型空间、世界空间、观察空间、裁剪空间、标准化设备坐标 (NDC)、窗口坐标。每一步变换都有明确目的,大部分可以用 4×4 矩阵表示并相乘合并。图形学着色器纹理采样Shader Texture SamplingGPU 把图像存成 sampler2D:一张浮点向量的「表」,坐标连续时硬件做插值。片元里用 texture2D(sampler, uv)(现代 GLSL 为 texture)按归一化 UV 取色。BoS 强调:通道是 [0,1] 连续域、可越界重复、可用噪声扭曲 UV——图像变成可拉伸的「数码软垫」,为后处理与光学玩具式特效铺路。图形学抗锯齿Antialiasing渲染本质上是采样,采样频率不足就会混叠(锯齿、闪烁的"萤火虫"、车轮倒转)。屏幕空间抗锯齿在每个像素取多个样本并加权求和:超采样最直接但最贵,MSAA 每像素只着色一次,时间抗锯齿 (TAA) 把样本分散到多帧,形态学方法 (FXAA/SMAA) 作为后处理重建边缘。没有一种方法在所有方面最好。图形学时间重投影Temporal Reprojection重投影是在新的视点和朝向下复用前几帧已计算的样本。目的一是利用时间相干把渲染开销摊到多帧(与时间抗锯齿相关),二是当前帧来不及完成时快速生成近似帧(对 VR 防止晕动尤其重要)。分为反向重投影(从上一帧收集)和正向重投影(把上一帧散布到当前帧)(RTR4 12.2 节)。