中EN
概念页

图像空间边缘检测

Image-Space Edge Detection

不碰场景几何,只对渲染出的深度、法线、物体 ID 等缓冲(G-buffer)做图像处理来找出描边位置,再用形态学算子加粗、与着色结果合成。它对任何表面都适用、不要求网格连通,是游戏中最常见的描边方式之一;缺点是边的判定需要按内容调参,可能漏检或误检。

原理(15.2.3 节)

Saito 与 Takahashi 首先提出 G-buffer 概念(也用于延迟着色),Decaudin 把它用于卡通渲染。不同缓冲中的不连续对应不同的边:

缓冲能检测的边
深度 (z-buffer)相邻深度突变 → 多数轮廓边
法线法线突变 → 轮廓边、边界边,以及折痕边
物体 ID / 环境色边界边、真正的剪影边
材质 ID材质边

流程分两步:

flowchart LR
  G["几何 pass: 像素着色器写深度/法线/ID 到多个渲染目标"] --> E["后处理 pass: 采样邻域, 边缘检测"]
  E --> D["膨胀 pass: 加粗线条"]
  D --> C["与着色图像合成"]

如上图,几何只渲染一次,之后全部是全屏后处理。

检测算子

  • ID 比较:取本像素 ID 与四个对角邻居比较,有不同就输出黑色;采样全部八个邻居更可靠但更贵。
  • 深度 / 法线滤波:相邻深度差超过阈值即判为边;更好的做法是用 Roberts cross、Sobel、Scharr 等边缘算子,结果不是布尔值,可调阈值或在一个区间内黑白渐变。
  • 《无主之地》(Borderlands) 修改 Sobel 滤波使其产生单像素宽描边,并改进深度计算精度;发行版还屏蔽了前景草地的边。也可以反向利用:忽略深度差很大的边,只在阴影周围加描边。
  • Decaudin 改为处理法线和深度图的梯度而不仅是值,以改进检测。
  • 对颜色缓冲也可以用 高斯差分 (DoG):用两种高斯核分别模糊再相减,在 NPR 中效果尤其讨喜,可生成铅笔、粉彩等风格。

膨胀与腐蚀

膨胀 (dilation) 是形态学算子:对每个像素检查一定半径内的值,输出最暗者,于是细黑线被加粗为搜索区域的直径。多遍膨胀可进一步加粗,额外一遍的开销被每遍所需采样大幅减少所抵消;不同类型可用不同粗细(如剪影比其他轮廓更粗)。腐蚀 (erosion) 可用于细化线条等。

优点

  • 平面、曲面所有表面都能处理;网格无需连通甚至无需一致,因为完全基于图像。
  • 笔画在独立缓冲中生成,可以单独加工再合成:用噪声让线条和表面分别抖动产生小缝隙得到手绘感;用纸张高度场让炭笔沉积在凸起顶部、水彩汇集在凹谷。

缺陷与坑

  • 误检:几乎侧对视线的表面,深度比较会在表面上误判出轮廓像素;玫瑰细茎近看法线变化小不出边,远看邻像素法线变化变快,在某距离会出现假边;深度检测还要补偿透视对深度的影响。
  • 漏检:差异很小时会漏掉,例如桌上的纸张边缘(深度相近、法线相同);纸张对折后重叠处的边也无法检测。
  • 线条有阶梯状锯齿,但形态学抗锯齿(见 抗锯齿)对这种高对比输出很有效。
  • 像素差异如何转化为颜色变化常需按内容调参;《Afro Samurai》示例中权重太小边很淡,太大出现伪影。该作把皱纹等特征边画进纹理,剪影用背面挤出,轮廓用图像边缘检测,展示了混合使用。
  • 风格化受限:难以做虚线、笔刷等,需要显式几何边(见 轮廓边与几何描边)。

艺术媒介模拟

许多模拟水彩、丙烯的 NPR 技术以图像后处理为主,交互应用的挑战在于用最少的纹理采样做最多的事。双边、均值漂移 (mean-shift)、Kuwahara 滤波可在 GPU 上保边平滑,形成绘画感;Montesdeoca 等组合多种简单技术实现交互帧率的水彩效果(如均值漂移色彩匹配软化纹理、提高对比度和饱和度)。

  1. realtime_rendering_4ed.pdf 第 15 章 Non-Photorealistic Rendering

相关页面

图形学轮廓边与几何描边Contour Edges & Geometric Outlining卡通渲染的黑色描边可以按表面着色、过程几何、图像处理、几何边检测或混合方式生成。本页讲边的分类,以及在几何层面生成描边的三类方法:基于着色法线、背面过程几何(偏移、膨胀、外壳)、显式检测轮廓边并做隐藏线消除。图像空间方法见 图像空间边缘检测。图形学卡通着色Toon Shading非真实感渲染 (NPR,也称风格化渲染) 不追求照片般逼真,而是追求特定目的或画风。卡通 / cel 渲染是其中最受关注的一种:用实线分隔大块纯色区域。表面着色常用纯色填充、两色"硬着色"、或对最终图像做色调分离 (posterization);描边见 轮廓边与几何描边。图形学图像处理与后处理Image Processing & Post-Processing后处理是在渲染出图像后再用 GPU 对其做图像处理:把离屏缓冲当纹理,用全屏 pass 让像素着色器(或计算着色器)对每个像素采样邻域并加权求和。核心技巧包括可分离滤波、利用双线性插值减少采样、降采样、以及借助深度/法线保持边缘的(联合)双边滤波(RTR4 12.1 节)。图形学像素着色器Pixel Shader像素着色器(OpenGL 里叫片元着色器)对光栅化产生的每个片元运行,用插值后的顶点数据算出颜色,也可以输出不透明度、修改深度或直接丢弃片元。多渲染目标让它一次输出多组数据,催生了延迟着色。它通常只能写自己所在的像素,但能通过 2×2 quad 拿到相邻像素的导数。图形学抗锯齿Antialiasing渲染本质上是采样,采样频率不足就会混叠(锯齿、闪烁的"萤火虫"、车轮倒转)。屏幕空间抗锯齿在每个像素取多个样本并加权求和:超采样最直接但最贵,MSAA 每像素只着色一次,时间抗锯齿 (TAA) 把样本分散到多帧,形态学方法 (FXAA/SMAA) 作为后处理重建边缘。没有一种方法在所有方面最好。图形学笔触与表面风格化Stroke Surface Stylization除卡通外,表面还可以呈现素描、炭笔、铅笔等笔触风格。核心问题是:按明暗选择笔触纹理,并在物体远近变化、运动时保持屏幕上笔触粗细和密度稳定。屏幕空间纹理会产生"浴室门效应",贴在表面上的纹理又要用色调艺术贴图 (TAM) 解决缩放问题。

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原