这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
11.2 抖动与蓝噪声
抖动不减少量化误差,它把误差从低频的「带状」搬到高频的「噪声」。本节把 0..255 的斜坡量化到 8 级,比较无抖动、Bayer 有序抖动、Floyd–Steinberg 误差扩散与 16×16 蓝噪声:总误差几乎不变,低频带状分量从 6.4844 压到 1.2 上下;蓝噪声更把阈值矩阵的低频功率占比压到同尺寸白噪声的 1/243。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
抖动不减少量化误差,它把误差从低频的「带状」搬到高频的「噪声」。本节把 0..255 的斜坡量化到 8 级,比较无抖动、Bayer 有序抖动、Floyd–Steinberg 误差扩散与 16×16 蓝噪声:总误差几乎不变,低频带状分量从 6.4844 压到 1.2 上下;蓝噪声更把阈值矩阵的低频功率占比压到同尺寸白噪声的 1/243。
时间抗锯齿的全部机制可以压成三个整数:帧间权重 w = ONE//(k+1)、确定性的 Halton 子像素抖动、历史帧的 3×3 邻域裁剪。本节在解析圆盘上实测——静止相机下 1→16 帧的 MAE 从 1.9163 收敛到 0.3881;每帧微动 0.25 px 时,裁剪把重影误差从 9.2405 压到 4.929。
同一份场景、同一套顶点变换、同一个 Lambert 公式,只把「插值颜色」换成「插值法线再逐像素求值」:覆盖掩码与深度缓冲逐像素相同(几何封版),颜色却有 41261 个像素不同(537.2526‰),MAE 3.5764、PSNR 37.06 dB、最大通道差 48。
Phong 高光要构造反射向量 R = 2(N·L)N − L 再算 R·V 的幂次,Blinn-Phong 改用半步向量 H。本节用 66 个观察方向实测两者的叶宽、最大差与运算量,把 x^32 的平方链(5 次 fmul)与 31 次逐次相乘逐位比对,并推翻「Blinn-Phong 不会照亮背面」这句流传很广的话。
卷一封版了几何到像素的骨架,卷二只换着色环节。本节从 N·L 的几何含义出发,把 Lambert 漫反射写成纯整数点积加一次算术右移:66 个方向实测受光 30、背光 36,去掉 max(0, N·L) 后出现 81 个负通道,而钳制版所有通道落在 [0, 200]。
《计算机图形学》卷二《着色、光照与纹理》附录 A:全卷共用的 Q16.16 定点常数表(1/π、9/π、3/π)、逐像素层的量级上界推导、六个着色公式的整数形式速查(Lambert、Phong、Blinn-Phong、GGX、Smith、Schlick)、材质参数表、能量守恒残差汇总,以及各章产物的数据集索引与复现命令。所有数字来自本机实跑。
《计算机图形学》卷二《着色、光照与纹理》目录:16 章 48 节,只替换卷一封版的着色环节——逐顶点 Lambert 改为插值法线后逐像素求值,把光照模型、BRDF 与能量守恒、法线贴图、阴影、环境光遮蔽、微表面 PBR、sRGB 与色调映射、程序化纹理与后处理全部写成可逐像素断言的整数。本页给出分工、六档可运行性口径、卷二新基线与全书 16 章 48 节完整清单。
图片把正文撑开的那一刻,CLS 就已经发生。本节把占位盒、首屏媒体优先级、懒加载触发条件与失败降级拆成可计算的纯函数,用固有宽高和可视区域算出布局位移分数,复盘一次信息流图片加载导致误触的抖动事故与修复顺序,并给出与结构化块模型、sanitize 的接口边界。
把前 17 章的能力收束成一个完整项目:先划清 library 的需求边界,再用 Book、Member、Loan 三个 record 和 LibraryService 的借阅、归还方法,把「一本书同时只能借给一个人、借期 14 天、逾期按天计费」写成可执行的领域规则。
说明卷二怎么用:arch-lab 在性能与高可用主题下新增哪些组件、L1–L4 验收标准如何判定、代码块标记与抽取方式、压测器和故障注入的复现口径、五组固定场景、两种阅读路线、每篇的常见失败模式,以及本书对实测值、目标值、示例值和未执行部分的处理承诺。
四张调试缓冲不该各写各的导出代码。本节把它们收进一个统一导出器:每张图写出 8 位 PNG、一份 sha256、一条「回读像素 == 内存缓冲」断言,再用纯 xml.etree 拼一张内嵌 base64 的 SVG 联系表,最后用 ET.fromstring 回读校验结构与内嵌字节。
二值覆盖掩码只回答「涂过没有」,调试要问「涂了几次」。本节把覆盖率存成整数计数,用双重计数与二值化基线两条不变量把它钉住;线框复用第 7 章的整数 Bresenham 只描正面三角形,并在浏览器里用加法混合让 GPU 独立算出同一份计数,再逐像素对齐。
深度缓冲不是距离,直接 gray = z*255/ONE 会把整帧压进 20 个灰度级、闲置 236 级。本节先把这个浪费量化,再用按距离等分的 8x32 分段映射把每级钉在 0.157 世界单位;法线图由插值后的顶点法线编码进 RGB,两条负例必须被模长判据拒绝。
画家算法不逐像素做深度测试,只把三角形按质心深度从远到近画、后画者胜。本节在可分离场景里让画家与 z-buffer 逐字节相同,在相交场景里让它们出现 63 个差异像素,并说清差异的来源是质心排序在交叉处判错了局部前后。脚本用「深度 = 绘制序号的相反数」把画家算法搭在共享光栅化器上。
把 library 的构建从「我这儿能打包」推进到「谁都能复现」:用 outputTimestamp 固定 jar 条目时间,用固定依赖、BOM 和 enforcer 禁止动态版本,再用 sha256、dependency:tree 与离线构建验证发布产物。
只裁近平面时投影坐标会飞出视口 64 倍,整数包围盒加剪刀矩形把扫描窗口压回视口且逐字节不改像素;保护带 G=0 就能让 80.7% 的三角形免裁,G=256 提到 93.4%。本节实测原始包围盒 4922869 单元、夹紧后 244708、扫描 223753 单元覆盖 43730 像素。
近平面裁剪会把三角形裁成四边形甚至五边形,重建它靠的是扇形三角化的整数恒等式:三个扇形三角形的面积和精确等于多边形面积,逆序则精确变号。本节实测英雄三角形 3→4→5 的逐步计数、面积比恰为 t^2 = 1/4 的解析解,以及「丢弃 vs 裁剪」两帧覆盖异或为 0 而颜色差 171。
视锥六个面在视图空间解析写成四条整数系数,与投影矩阵同源;Sutherland–Hodgman 的交点用 fdiv 定标、算术右移降精度,于是面积守恒成为精确整数恒等式。本节实测六平面系数、487 个顶点的分类、英雄三角形 3 裁成 5 的逐步计数,以及裁剪前后两帧覆盖异或为 0。
两个几乎重合的面若在深度缓冲里落进同一格,深度测试就分不出前后,像素随视角抖动——这就是深度冲突。本节用两块相距 13/65536 的平行墙,把朴素线性 z、标准透视 z、逆转 z 三种映射的冲突像素数摆在一起,解释逆转 z 为何要把深度测试从 < 翻成 >,并如实说明定点缓冲与浮点缓冲下它的差别。
作者正文、运营配置、第三方嵌入的信任级别并不相同。本节把 sanitize 定义为能力边界而不是标签黑名单,给出作者、运营、嵌入三套白名单策略,处理 URL 协议与实体编码绕过,并用测试复盘一次直接 innerHTML 导致的脚本注入事故与修复顺序。