跳到正文

浮点误差与几何鲁棒性

55 分钟

浮点误差与几何鲁棒性

从一幅错误图像开始

先别背公式。把现象放到屏幕上:让几乎共线三点计算有向面积并比较绝对/相对容差。图形学里的黑屏、裂缝、闪烁、镜像、错误高光或噪声都只是最终症状。你要沿数据流逆向追踪:输入几何在哪个坐标系,矩阵按什么约定组合,连续图元怎样变成离散样本,属性在哪个空间插值,光和材质用什么单位,最终颜色何时进入显示编码。不能用“显卡会画出来”代替机制。
(长段唯一锚点:CG-01-06-浮点误差与几何鲁棒性。)

本节真正要掌握的是:几何判断要根据尺度使用容差、稳定公式和一致的边界归属,避免把理论等号直接写成浮点等号。请把它写成输入对象、公式/算法、输出对象和不变量四部分。若是几何算法,写坐标、绕序和退化条件;若是渲染算法,写采样位置、PDF或可见性;若是管线阶段,写前后空间和资源状态。(唯一锚点:图形学1-6《浮点误差与几何鲁棒性》。)
(长段唯一锚点:CG-01-06-浮点误差与几何鲁棒性。)

固定坐标、单位与约定

在纸上先列世界、观察、裁剪、NDC、屏幕或切线空间,标出向量是行还是列、矩阵乘法顺序、坐标手性、屏幕原点、y轴方向、深度范围和像素中心。围绕浮点误差与几何鲁棒性,每个量旁写所在空间与单位。图形错误常不是公式不会,而是把不同空间的量直接相乘。
(长段唯一锚点:CG-01-06-浮点误差与几何鲁棒性。)

再写三个不变量:例如重心权重和为1、法线与切向垂直、深度测试与绘制顺序无关、BRDF半球能量不增、PDF非负且积分为1。关键边界是:随意加固定epsilon会在不同尺度下误判,共边像素还需统一top-left规则。把它改成具体输入和错误输出,才能证明你理解条件。(约定锚点:CG-01-06。)
(长段唯一锚点:CG-01-06-浮点误差与几何鲁棒性。)

跟我逐阶段算一遍

执行实验:让几乎共线三点计算有向面积并比较绝对/相对容差。固定最小场景和所有输入数值;先用手算或清晰参考实现得到一个中间结果,再逐阶段记录矩阵后顶点、裁剪状态、重心、深度、UV、法线、可见度和线性颜色。只比较最终PNG会把首个错误扩散成许多像素,逐阶段证据才能区分几何、采样与着色。
(长段唯一锚点:CG-01-06-浮点误差与几何鲁棒性。)

本节做一个工作量检查:若处理5个顶点、每个像素8个样本,在题设的一像素一属性简化模型下核心组合数是 5×8=40。这个数字不代表真实GPU时间;裁剪、覆盖面积、缓存、分支、并行和纹理访问都会改变成本。公式价值是公开假设,不是冒充性能承诺。(计算锚点:浮点误差与几何鲁棒性。)
(长段唯一锚点:CG-01-06-浮点误差与几何鲁棒性。)

分三轮把这一节真正做会

第一步,先构造浮点误差与几何鲁棒性的最小输入:明确对象所在空间、矩阵与向量约定、采样位置、边界规则和预期不变量;把贯穿任务“让几乎共线三点计算有向面积并比较绝对/相对容差”缩成一个能手算的场景。接着,依据“几何判断要根据尺度使用容差、稳定公式和一致的边界归属,避免把理论等号直接写成浮点等号”逐项变换或计算,保留每个中间坐标、权重、深度、方向、概率或颜色,不允许从输入直接跳到最终图片。最后,把数值送入光栅、着色、射线或显示阶段,并针对“随意加固定epsilon会在不同尺度下误判,共边像素还需统一top-left规则”制作一个失败版本;比较正确与失败结果,定位首个偏差,再用尺度、极端值或顺序变化复核结论。(推进链唯一锚点:浮点误差与几何鲁棒性-1-6。)
(长段唯一锚点:CG-01-06-浮点误差与几何鲁棒性。)

可运行实验怎样设计

代码题使用Python标准库,从标准输入读取并输出稳定数值或小网格,不访问外网、不依赖GPU和图形窗口。几何题固定浮点容差与边界规则,光栅题固定像素中心和top-left约定,射线题固定t区间,蒙特卡洛题直接读取给定样本而非随机生成。发布前每个参考实现运行至少四组测试。
(长段唯一锚点:CG-01-06-浮点误差与几何鲁棒性。)

你要补第五组测试:零长度向量、退化三角形、w接近零、共边像素、纹理边界、背光、擦边射线、零PDF或大时间步任选一项。优化版本必须逐输出比对参考模型。伪代码、只看图片和依赖某块显卡的程序都不算在线可运行实验。(实验锚点:浮点误差与几何鲁棒性。)
(长段唯一锚点:CG-01-06-浮点误差与几何鲁棒性。)

数值误差与失败边界

主动把输入推到边界:让三点几乎共线、相机向上与前向平行、三角形穿近裁剪面、射线擦过球、粗糙度趋零或弹簧步长变大。先预测哪个分母、判别式、边函数或能量项会不稳定,再运行模型。epsilon必须与尺度和算法含义相关,不能在所有比较中随手加同一个常数。
(长段唯一锚点:CG-01-06-浮点误差与几何鲁棒性。)

遇到画面错误,保留线框、法线、深度、UV、可见度和各光照分量调试视图。每个视图只验证一组假设;如果深度正确而颜色错,就不应继续怀疑MVP。错误定位的目标是找到第一项不满足不变量的中间量。(失败锚点:浮点误差与几何鲁棒性。)

与前后章节建立联系

向前追问本节依赖的向量、坐标、采样或数据结构,向后追问它怎样影响插值、可见性、材质、光线、动画或GPU阶段。画至少三条因果箭头并写空间或测度。例如非均匀缩放若错误变换法线,会改变N·L,再改变BRDF结果,最后让阴影边界附近出现不合理亮度。
(长段唯一锚点:CG-01-06-浮点误差与几何鲁棒性。)

同一症状可能有多个原因:纹理游动可能来自透视插值、UV接缝或mipmap导数;黑点可能来自自交、零向量、NaN或色调映射。下一项检查要能区分至少两个假设,而不是反复调参数。(连接锚点:浮点误差与几何鲁棒性。)

在线练习与严格验收

本节至少绑定单选、多选和计算题,部分课时另有真实代码实验。单选先圈坐标空间和约定,多选逐项找反例,计算题保留中间向量与单位,代码题通过全部测试并新增退化输入。章节卷、期中、期末、几何和渲染专项使用独立题池,不能靠记随课答案通过。

错题按空间混淆、矩阵顺序、绕序边界、透视插值、浮点退化、能量/PDF、可见性、时间积分或资源状态分类。更换坐标、提交顺序、样本或时间步重做;仍能重建算法才算迁移。(练习锚点:浮点误差与几何鲁棒性。)

下课前闭卷自检

一,列出浮点误差与几何鲁棒性输入输出所在空间。二,写核心公式或伪状态机及不变量。三,复述“几何判断要根据尺度使用容差、稳定公式和一致的边界归属,避免把理论等号直接写成浮点等号”的适用条件。四,为“让几乎共线三点计算有向面积并比较绝对/相对容差”补一个退化测试。五,用具体输入解释“随意加固定epsilon会在不同尺度下误判,共边像素还需统一top-left规则”。六,指出一个数值误差来源。七,画它与前后两节的因果连接。
(长段唯一锚点:CG-01-06-浮点误差与几何鲁棒性。)

若答案仍是“矩阵变换一下”“GPU插值”“多采样就更真实”,回到中间缓冲和数值推演,写出谁在何空间用什么公式产生哪个样本。合格不是能认图,而是能从一个坏像素定位首个错误阶段。(自检锚点:浮点误差与几何鲁棒性。)

Practice

本课练习

4

先独立作答再提交;编程题会在隔离沙箱中真实编译、运行并对拍。

1单选:浮点误差与几何鲁棒性 3

验收浮点误差与几何鲁棒性的实验“让几乎共线三点计算有向面积并比较绝对/相对容差”时,哪项操作能形成可复核证据?

登录 后答题可以领小红花
2多选:浮点误差与几何鲁棒性 3

严格验收浮点误差与几何鲁棒性时,哪些材料不可缺少?

多选题:必须选全正确项,漏选或多选均不得分。

登录 后答题可以领小红花
3计算:浮点误差与几何鲁棒性 3

围绕浮点误差与几何鲁棒性建立简化工作量:处理5个顶点,每个顶点对应1个独立样本组合;忽略裁剪、缓存与并行,共执行多少次顶点-样本组合?

登录 后答题可以领小红花
4U01独立题06:浮点误差与几何鲁棒性 4

阶段卷验收浮点误差与几何鲁棒性,哪些材料不可缺少?

多选题:必须选全正确项,漏选或多选均不得分。

登录 后答题可以领小红花