想象你是一位胶片摄影师。在影棚里按完快门,得到的只是一卷泡在药水味里的底片——画面灰蒙蒙、光线乱窜,根本不能直接拿给客户。真正的成片,是在暗房里“冲”出来的:先定曝光基准,再调反差,最后局部修饰。游戏引擎里的后处理(Post-processing)就是这间暗房:3D 场景渲染出来的画面只是“底片”,后处理 Shader 拿到它,按工序一格一格地调颜色和光影,最后才输出到屏幕。我们这篇文章的主角,就是暗房里最常用的三件工具——FX 色彩分级、Bloom 泛光、DOF 景深——以及让它们跑得飞快的 GPU 优化手法。你会发现,它们其实一点都不神秘:一张色卡、一盏柔光灯、一个对焦环,懂生活的人就懂后处理。

岗位关联

后处理是游戏画面“电影感”的最后一道工序,也是渲染工程师与 AI 画质增强工程师的核心技能。理解 Bloom、DOF、LUT 的实现与优化,能直接支撑你在引擎调参、性能预算、AI 生成内容画质增强中的工程判断。

目录
  1. 可视化演示
  2. 后处理管线
  3. 色彩分级 FX
  4. Bloom 泛光
  5. DOF 景深
  6. GPU 优化
  7. 工程实践
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

分步展示游戏后处理管线中Bloom泛光、DOF景深与色彩分级LUT三大核心特效的实现原理与GPU流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Bloom泛光效果 亮度阈值提取→多尺度高斯模糊金字塔→加法混合合成 Bloom = Source + Σ Blur_i(Bright) 模拟镜头强光溢出光圈效果。

后处理管线

想象你按下快门的瞬间,暗房工作开始了。底片上记录的亮度范围远超相纸能呈现的极限——窗外阳光可能是画面的 20 倍亮,但相纸最白也只是白。所以摄影师会先用“HDR 冲洗盆”把底片泡开:让所有亮度信息保留下来,等一切修饰完成,再在最后一刻把亮度“压”进相纸的宽容度。游戏后处理一模一样:3D 场景渲染出的画面叫 HDR 缓冲,它允许像素亮度超过 1.0;所有 FX、Bloom、DOF 都在这个更“宽容”的空间里计算,最后一步才做色调映射(Tone Mapping)把亮度压回屏幕能显示的 [0,1] 范围。这张“冲洗盆”在 GPU 里叫渲染目标(Render Target / FBO),后处理 Shader 每跑一道工序,就是一次新的 Pass。

最简单的色调映射公式由 Reinhard 提出:把任意大亮度 L 压成一个永远小于 1 的柔和值,像相纸把刺眼的太阳柔化成温暖的午后。

你看,暗房的规矩就是“先冲后定”:中间穿插 FX、Bloom、DOF 三道修饰,最后才定影出片。理解了管线顺序,后面三个工具就好比往工作台上依次摆好的色卡、柔光灯和对焦环。

Ld=L1+L\displaystyle L_d = \frac{L}{1 + L}
L 是 HDR 空间里的物理亮度,可以大于 1;除以 (1+L) 后结果恒落在 0 到 1 之间,高光被逐渐“按”下去,暗部几乎不变。
  1. HDR 亮度 L像素在 HDR 缓冲中记录的物理亮度,阳光、灯珠可以远大于 1。
    L∈[0,+∞)L \in [0, +\infty)
  2. 分母加压给 L 加上一个 1,构造出比 L 更大的分母。
    1+L1 + L
  3. 压缩映射两者相除,结果恒在 0 到 1 之间,亮度越高增益越小。
    Ld=L1+L\displaystyle L_d = \frac{L}{1 + L}

色彩分级 FX

暗房里最神奇的东西是一本翻得卷了边的“色卡”——调色师把它举到某张照片前,暗房里原本灰扑扑的色调立刻有了电影味:青橙、日系、赛博朋克,全在一页页色卡里。这个色卡在 GPU 中叫 LUT(Look-Up Table,查找表)。游戏中的 FX 色彩分级不靠逐像素写复杂调色公式,而是把“输入颜色→输出颜色”的映射关系预先烘焙成一张 3D 色卡:33×33×33 个格点,每个格点存一个映射后的 RGB 值。运行时把一个像素的颜色当作三维坐标,直接去这张色卡里“查”,一步就完成整套风格化调色——效率高到像是暗房里的魔法。

但有个关键问题:输入颜色是连续的,而色卡网格是离散的——就像你查到的颜色刚好落在两个色块之间。GPU 的做法是找到它周围的八个格点,做三线性插值(Trilinear Interpolation),把离散的格点“连”成平滑的连续色。下面是一维的插值思想,三维就是它的三次延伸。

调色师凭一本色卡就能让整部片子有了情绪,游戏美术也凭一张 LUT 让整个场景一秒“入戏”。而 LUT 尺寸并非越大越好——33³ 的格子间距配合三线性插值已经足够顺滑,后面我们会在优化章节里细算这笔账。

C=(1−t)⋅Clo+t⋅Chi,t=u−⌊u⌋\displaystyle C = (1 - t) \cdot C_{\mathrm{lo}} + t \cdot C_{\mathrm{hi}}, \quad t = u - \lfloor u \rfloor
u 是输入颜色映射到色卡后的坐标,t 表示它落在两个格点之间的比例;最终颜色按比例混合最近的两个格点颜色。
  1. 归一化坐标把 0~1 的颜色值放大到色卡尺寸范围内。
    u=c×(N−1)\displaystyle u = c \times (N - 1)
  2. 找相邻格点取整数部分定位前后两个格子,小数部分作为混合比例。
    Clo=LUT(⌊u⌋),Chi=LUT(⌊u⌋+1),t=u−⌊u⌋C_{\mathrm{lo}} = \mathrm{LUT}(\lfloor u \rfloor), \quad C_{\mathrm{hi}} = \mathrm{LUT}(\lfloor u \rfloor + 1), \quad t = u - \lfloor u \rfloor
  3. 线性混合按比例把两个格点颜色混成一个平滑值。
    C=(1−t)⋅Clo+t⋅Chi\displaystyle C = (1 - t) \cdot C_{\mathrm{lo}} + t \cdot C_{\mathrm{hi}}

Bloom 泛光

霓虹灯招牌为什么在照片里那么迷人?不是灯管本身亮,而是它周围晕开的一圈光雾——像是给灯管涂了一层柔光油,把刺眼的硬边化成了朦胧。这就是 Bloom 泛光。但注意一个细节:柔光油只涂灯管,绝不能涂满整面墙。游戏里对应第一步“亮度提取”:把亮度超过阈值的像素单独拎出来,只让它们拥有发光资格。这一步的数学很朴素——按人眼敏感度给 RGB 加权求和得到亮度 Y,再和阈值 T 比一比。

选出的高光接下来要“晕开”。如果直接做大半径高斯模糊,GPU 会累趴下。聪明做法是金字塔:把高光图逐级缩小成 1/2、1/4、1/8,每一级用很小的高斯核模糊——小图上的小核,等效于大图上的大核,成本却省了一个量级。最后把各级光晕从小到大逐层叠加回原图:最内层亮而锐,最外层暗而散,一盏霓虹灯就这样在屏幕上“亮”了起来。给灯管涂油,而不是给整面墙抹灰——这就是 Bloom 的全部秘密。

Y=0.2126 R+0.7152 G+0.0722 B,B=max⁡(Y−T,0)\displaystyle Y = 0.2126\, R + 0.7152\, G + 0.0722\, B, \qquad B = \max\left(Y - T, 0\right)
绿色权重最高,因为人眼对绿色最敏感;提取后的 B 中,暗部为 0、高光保留,接下来的模糊只会“染”到高光区域。
  1. 感知亮度按人眼对红绿蓝的敏感程度加权,算出每个像素的亮度。
    Y=0.2126 R+0.7152 G+0.0722 B\displaystyle Y = 0.2126\, R + 0.7152\, G + 0.0722\, B
  2. 阈值筛选亮度超过阈值的像素才算“高光”,低于阈值的直接归零。
    Y−TY - T
  3. 提取高光取最大值,结果只保留高光部分,暗部完全不参与后续模糊。
    B=max⁡(Y−T,0)\displaystyle B = \max\left(Y - T, 0\right)

DOF 景深

婚礼摄影师最爱干一件事:拧对焦环,直到新娘的眼睛锐利如星,而身后宾客的灯光全部化成一团温柔的光斑。这就是景深(Depth of Field,DOF)。游戏里的 DOF 后处理要回答一个问题:每个像素该糊多少?答案藏在“散景圆”(Circle of Confusion,CoC)里——一个理想点光源经过镜头后,如果没落在焦平面上,就会在感光元件上投出一个“圆斑”,圆斑直径越大,看起来越模糊。它由四个参数决定:焦距 f、光圈数 N、对焦距离 d_f、以及这个像素自己的深度 d_s。

更讲究的引擎还会把散景圆画成镜头叶片的多边形甚至猫眼形状,而不是正圆,这就是异形 bokeh。但万变不离其宗:CoC 算出“糊多少”,接下来只是用什么形状去糊的问题。真实镜头的光学直觉,在这里变成了一个公式。

CoC=f2N∣1df−1ds∣\displaystyle \mathrm{CoC} = \frac{f^2}{N} \left| \frac{1}{d_f} - \frac{1}{d_s} \right|
光圈数 N 越小代表光圈越大,散景圆越大;像素深度离对焦面越远,散景圆同样越大。算出 CoC 后,用它作为高斯模糊半径,近处清晰、远处如碎星。
  1. 离焦程度对焦距离与像素深度的倒数差,表示像素偏离焦平面多远。
    ∣1df−1ds∣\displaystyle \left| \frac{1}{d_f} - \frac{1}{d_s} \right|
  2. 焦距放大焦距 f 的平方项,让长焦镜头更容易产生强烈虚化。
    f2f^2
  3. 光圈调节除以 N,大光圈(小 N)让光线锥更散,光斑更大。
    f2N\displaystyle \frac{f^2}{N}
  4. 散景圆直径三部分合体,得到用于模糊的 CoC 值。
    CoC=f2N∣1df−1ds∣\displaystyle \mathrm{CoC} = \frac{f^2}{N} \left| \frac{1}{d_f} - \frac{1}{d_s} \right|

GPU 优化

暗房上了自动化流水线:一群工人并排站在传送带前,每人只负责一块区域——这就是 GPU 的并行。但即便有上万工人,也经不起浪费。第一个浪费大户是大核模糊:直接对一个像素算 9×9 的卷积,每个像素要读 81 个邻居,带宽瞬间爆掉。高斯核是可分离的,一个二维高斯等价于先横向、再纵向各做一次一维卷积——就像先横着擦一遍玻璃、再竖着擦一遍,效果一样,工作量从 81 次采样降到 18 次。

第二个浪费大户是全分辨率。人眼对低频模糊的敏感度远低于高频细节,所以 Bloom、DOF 这类低频效果完全可以在 1/2、1/4 分辨率上计算,最后再放大合并——原画的高频细节仍然由原始画面保留,观感几乎无损。再配合双线性采样“免费”完成一部分模糊,优化三板斧就此集齐:分离卷积降采样数、半分辨率降像素数、双线性补偿降 pass 数。流水线上的每一分钱,都花在了刀刃上。

CtexCsep=W×H×k2W×H×2k=k2\displaystyle \frac{C_{\mathrm{tex}}}{C_{\mathrm{sep}}} = \frac{W \times H \times k^2}{W \times H \times 2k} = \frac{k}{2}
直接二维卷积每个像素要采样 k×k 个邻居;分离成横向 + 纵向两次一维卷积后,只需 2k 次。核越大,省得越多。
  1. 直接卷积成本整张图每个像素采样 k 乘 k 个邻居,总采样次数巨大。
    Ctex=W×H×k2C_{\mathrm{tex}} = W \times H \times k^2
  2. 分离卷积成本先横后竖各一次一维卷积,总成本约两倍的 W×H×k。
    Csep=W×H×k+W×H×k=2WHkC_{\mathrm{sep}} = W \times H \times k + W \times H \times k = 2 W H k
  3. 加速比两者相除,核越大加速越明显。
    CtexCsep=k2\displaystyle \frac{C_{\mathrm{tex}}}{C_{\mathrm{sep}}} = \frac{k}{2}

工程实践

暗房所有工具都齐了,最后一张工作台上贴着一张检查表。第一行写着“预算”:一帧只有 16.7 毫秒(60 FPS),后处理所有 Pass 加起来不许超支。每个 Pass 的耗时大约是“像素数 × 单个像素成本 ÷ 并行度”,半分辨率不只是省一半——是省四分之三的像素。所以上线前要给每个效果称重:Bloom 占几毫秒、DOF 占几毫秒、FX 几乎免费,加起来必须在预算红线内。

检查表第二行是“平台适配”:手机 GPU 的带宽和桌面级差距巨大,同样的 Bloom 在主机上可以四层金字塔,手机上可能砍到两层加半分辨率。第三行是“调试技巧”:把每个 Pass 的输出可视化出来,单独看亮度提取对不对、模糊层级是否平滑,就像暗房里每道工序都要抽看样片。最后是“效果融合”:Bloom 和 DOF 别抢戏,光晕太强会盖过景深的层次,LUT 色调太浓会让光晕显得脏。后处理不是把三个法宝都开到最大,而是像老摄影师一样,心里有张预算表,手里有把尺子——知道什么时候该收,什么时候该放。

∑iPassMsi≤1000FPS\displaystyle \sum_{i} \mathrm{PassMs}_i \le \frac{1000}{\mathrm{FPS}}
所有后处理 Pass 的单帧耗时之和,必须小于帧预算。60 FPS 对应 16.7 毫秒,30 FPS 对应 33.3 毫秒。
  1. 单 Pass 耗时每个后处理工序在 GPU 上消耗的毫秒数。
    PassMsi\mathrm{PassMs}_i
  2. 累加所有工序把全部 Pass 耗时加总。
    ∑iPassMsi\displaystyle \sum_{i} \mathrm{PassMs}_i
  3. 帧预算上限一帧总时间,目标是让总和不超过它。
    1000FPS\displaystyle \frac{1000}{\mathrm{FPS}}

AI 应用场景

游戏引擎实时特效调参

阶段:效果调优与自动化

解决的问题:传统方式下,美术要手调 Bloom 阈值、强度、金字塔层数等十几个参数,一个霓虹夜景场景要反复迭代数天才能既有“赛博朋克感”又不糊成一片。借助 AI 自动调参(如贝叶斯优化),可以把“画面评分”作为目标函数,让 AI 在参数空间里自动搜索最优组合,几小时完成原本数天的人工试错。

具体案例:某开放世界游戏的雨夜城市关卡,美术希望霓虹灯广告牌有柔和的 Bloom 光晕、路面反射清晰、远处楼宇有轻微 DOF。AI 调参工具以截图评分(锐度、光晕强度、噪点)为反馈,自动调整 Bloom 阈值与 DOF 对焦距离,最终在保证 60 FPS 的前提下输出一组风格参数。

AI 虚拟主播背景虚化

阶段:模型推理后处理

解决的问题:AI 虚拟主播或视频会议中,人像分割模型输出的 alpha 蒙版边缘常有毛刺,直接用会穿帮。工程上把 AI 分割结果作为深度近似,再套用 DOF 的 CoC 公式:主播所在深度为对焦面,背景按距离做散景模糊,边缘瑕疵被柔化,画面立刻有了单反质感。

具体案例:某虚拟偶像直播系统,用轻量人像分割模型得到前景深度后,对背景做 1/4 分辨率的散景模糊,并在人物边缘用 CoC 渐变为 0,实现“近实远虚”的直播镜头感,GPU 占用仅增加 1.2ms。

AIGC 批量成片风格统一

阶段:生成内容后期色彩管理

解决的问题:AI 绘图工具(如 Stable Diffusion)批量生成的图片往往色调不统一,有的偏灰、有的偏紫。人工逐张修色成本极高。采用 FX 色彩分级的 LUT 方案:先由调色师制作一张电影感 LUT,再用 GPU 批量对每张生成图做 3D LUT 映射,让整批成片色调稳定如一。

具体案例:某短视频团队的 AI 漫画批量生产管线,对每日 5000 张生成图统一套用“青橙色调”LUT,单张处理耗时小于 2ms,解决了批量成片风格漂移问题。

Python 演示

python45 行
import numpy as np def luminance(rgb):    return 0.2126 * rgb[..., 0] + 0.7152 * rgb[..., 1] + 0.0722 * rgb[..., 2] def brightness_extract(img, threshold):    lum = luminance(img)    mask = lum[..., None] > threshold    return np.where(mask, img, 0.0) def box_blur(img, radius):    """Two passes of box filter to approximate Gaussian blur."""    h, w, _ = img.shape    out = img.copy()    k = 2 * radius + 1    for _ in range(2):        cum = np.cumsum(out, axis=1)        cum = np.concatenate([np.zeros((h, 1, 3)), cum], axis=1)        left = np.maximum(np.arange(w) - radius, 0)        right = np.minimum(np.arange(w) + radius + 1, w)        out = (cum[:, right] - cum[:, left]) / (right - left)[None, :, None]        cum = np.cumsum(out, axis=0)        cum = np.concatenate([np.zeros((1, w, 3)), cum], axis=0)        top = np.maximum(np.arange(h) - radius, 0)        bottom = np.minimum(np.arange(h) + radius + 1, h)        out = (cum[bottom] - cum[top]) / (bottom - top)[:, None, None]    return out def bloom(img, threshold=0.5, blur_radius=4, strength=0.8):    bright = brightness_extract(img, threshold)    blurred = box_blur(bright, blur_radius)    return np.clip(img + blurred * strength, 0, 1) if __name__ == "__main__":    rng = np.random.default_rng(0)    canvas = np.zeros((128, 192, 3), dtype=np.float32)    for x, y, c in [(30, 60, 1.0), (90, 40, 0.9), (150, 80, 0.8), (70, 100, 0.3)]:        canvas[y:y + 8, x:x + 8] = [c, c * 0.8, c * 0.4]    result = bloom(canvas, threshold=0.5, blur_radius=4, strength=0.8)    before = canvas[64:72, 90:98, 0].mean()    after = result[64:72, 90:98, 0].mean()    changed = int((result > canvas).sum())    print("bright pixels:", int((luminance(canvas) > 0.5).sum()))    print("mean red before:", round(before, 3), "after:", round(after, 3))    print("pixels brightened:", changed)
目的:用 numpy 模拟 Bloom 流水线——亮度提取 + 盒式近似高斯 + 叠加回原图,验证“只染高光”的核心思想。
  1. return 0.2126 * rgb[..., 0] + 0.7152 * rgb[..., 1] + 0.0722 * rgb[..., 2]感知亮度公式,绿色权重最高,人眼最敏感
  2. mask = lum[..., None] > threshold生成高光掩码,只让超过阈值的像素参与 Bloom
  3. return np.where(mask, img, 0.0)高光提取:暗部清零,亮部保留
  4. blurred = box_blur(bright, blur_radius)对高光做模糊模拟光晕扩散
  5. return np.clip(img + blurred * strength, 0, 1)叠加合成,强度系数控制光晕强弱
  6. canvas[y:y + 8, x:x + 8] = [c, c * 0.8, c * 0.4]生成模拟霓虹灯的亮块,暖色调
  7. print("pixels brightened:", changed)对比处理前后,验证暗部未被污染

常见误区

误区我把整张截图做了高斯模糊再和原图叠加,觉得这就是泛光,结果画面蒙上一层灰,暗部也变亮了。

正解Bloom 的第一步必须是亮度提取。把亮度超过阈值的像素单独拎出来,只对“高光”做模糊。就像夜拍霓虹灯,你要晕染的是灯管本身,而不是把整条街抹上一层雾。暗部一旦被模糊就会发灰,所以 B=max(L−T,0) 这步不可省略。

为何常见:“泛光”字面听起来像整图发光,加上很多入门教程直接演示“柔光叠加”,让初学者忽略了高光筛选。

误区为了光晕更强,我直接上 64×64 大核,结果帧率暴跌,光晕还糊成一坨没有层次。

正解GPU 上大核代价是采样数按 k² 爆炸。正确做法是金字塔:逐级把图缩成 1/2、1/4,每级用小核模糊,再逐级放大叠回。小图上的 5×5 核,等效于大图上的 40×40 核,成本却只有零头。

为何常见:直觉上“核越大越模糊”,忽略了缩图天生自带模糊效果,也没算过采样次数。

误区我把场景深度分三档,近景不糊、中景糊一点、远景糊很多,结果画面像贴了三层纸片。

正解景深的核心是散景圆 CoC:模糊半径由光圈、焦距、对焦距离和像素深度共同决定,且连续变化。正确做法是每个像素按自己的 CoC 决定模糊半径,再配合圆形采样模拟真正散景,不是三档贴片。

为何常见:只看到“远处模糊”的表象,没理解模糊量来自光线锥体投影的物理过程,于是用深度分箱偷懒。

误区LUT 是查表,那 256³ 的巨型表肯定比 33³ 更准,反正显存大无所谓。

正解33³ 的格子间距已足够细腻,中间由三线性插值补平,再往上收益急剧递减,却要多花约 460 倍显存。GPU 上显存带宽很贵,“够用 + 插值”远比“极大表”划算,这是工程权衡的典型例子。

为何常见:“查表等于离散近似”的直觉让人以为表越大越好,忘了插值已经补偿了离散误差。

误区我把 Bloom、DOF 全拉满在 4K 全分辨率算,觉得这样细节最完整,结果直接掉到 40 FPS。

正解人眼对低频模糊的敏感度远低于高频细节。Bloom、DOF 属于低频效果,通常在 1/2 或 1/4 分辨率计算,再放大合并;高频细节由原始画面保留,观感几乎无损,性能却省一大截。

为何常见:只关心“信息量最大”,不理解人类视觉感知特性,也没意识到分辨率对 GPU 成本是乘法级增长。

面试题

Q1. Bloom 后处理流水线的第一步是?

单选题 · easy

  • A.对整图进行高斯模糊
  • B.按阈值提取高亮区域← 正确答案
  • C.把图像缩小到一半
  • D.叠加镜头光晕贴图

答案:B。Bloom 先做亮度提取,只保留超过阈值的“高光”,再对高光做模糊和叠加。如果先整图模糊,暗部会被污染发灰,就像柔光油涂满了整面墙而不是只涂灯管。

Q2. 为何高斯模糊常用“分离卷积”实现?

单选题 · mid

  • A.避免边缘黑边问题
  • B.计算量从 k² 降到 2k← 正确答案
  • C.能让颜色更加柔和
  • D.支持半透明混合模式

答案:B。二维高斯核可分解为横向和纵向两个一维核。直接卷积每像素要采样 k×k 次,分离后只要 2k 次。核越大省得越多,是 Bloom 金字塔里最核心的优化手段。

Q3. 散景圆(CoC)直径与下列哪个量成正比?

单选题 · mid

  • A.镜头光圈直径← 正确答案
  • B.对焦距离平方
  • C.屏幕分辨率
  • D.场景像素总量

答案:A。光圈直径越大,光线锥散开得越厉害,散景圆越大。公式 CoC=(f²/N)|1/d_f−1/d_s| 中,光圈数 N 越小(光圈越大)CoC 越大,与分辨率、像素总量无关。

Q4. 下列哪些属于常见的后处理特效?

多选题 · mid

  • A.骨骼蒙皮动画
  • B.Bloom 泛光← 正确答案
  • C.DOF 景深← 正确答案
  • D.LUT 色彩映射← 正确答案

答案:BCD。Bloom、DOF、LUT 色彩分级都是拿到渲染结果后再加工的后处理特效。骨骼蒙皮属于顶点动画阶段,发生在渲染之前,不归后处理管。

Q5. 3D LUT 在 GPU 上采样后还需做什么?

单选题 · easy

  • A.三线性插值进行平滑← 正确答案
  • B.再做一次高斯模糊
  • C.转换到 YUV 色域空间
  • D.反色处理后输出

答案:A。LUT 网格是离散的,输入颜色通常落在格子之间,需要三线性插值(对 8 个相邻格点混合)才能得到平滑连续的输出颜色,避免色带断层。

Q6. Reinhard 色调映射 L/(1+L) 的数学特征是?

单选题 · extreme

  • A.单调递增且永远小于 1← 正确答案
  • B.单调递减且趋近于零
  • C.在 0.5 处达到最高峰值
  • D.周期性振荡收敛

答案:A。L/(1+L) 对 L>0 始终单调递增,极限趋近 1(永远不到 1),暗部增益接近 1、高光增益趋近 0,所以能把无限 HDR 亮度柔和地压进屏幕范围,是“先冲后定”的最后一道闸门。

Q7. 半分辨率处理 Bloom 可能引发哪些问题?

多选题 · hard

  • A.亮度数值漂移← 正确答案
  • B.高频细节丢失← 正确答案
  • C.锐利边缘闪烁← 正确答案
  • D.浮点精度溢出

答案:ABC。降采样会丢失高频细节,亮度均值可能漂移,锐利边缘在逐帧动画中容易出现闪烁。浮点溢出不是半分辨率特有的问题。工程上通常用双线性采样补偿细节、并做亮度归一化来缓解。

Q8. 人眼对哪个颜色通道的亮度最敏感?

单选题 · easy

  • A.红色通道 R
  • B.绿色通道 G← 正确答案
  • C.蓝色通道 B
  • D.透明度通道 A

答案:B。亮度公式 Y=0.2126R+0.7152G+0.0722B 中绿色权重最高,因为人眼视锥细胞对绿色波段最敏感。这也是 Bloom 亮度提取和很多色彩转换的基础。

Q9. 下列哪些属于 Bloom 金字塔的正确做法?

多选题 · hard

  • A.每级分辨率减半← 正确答案
  • B.小核模糊替代大核← 正确答案
  • C.分级上采样并叠加← 正确答案
  • D.用光栅化绘制光晕

答案:ABC。金字塔把高光图逐级减半,每级用小核模糊,再从上到下逐级放大叠加,等效于大核模糊而成本骤降。光栅化绘制光晕属于贴片冒充,不是标准 Bloom 金字塔流程。

Q10. 3D LUT 选 33³ 而非 256³ 的主要原因是?

单选题 · mid

  • A.33 是质数便于并行
  • B.32 间隔加插值已足够← 正确答案
  • C.256 超出 GPU 上限
  • D.33 立方显存更整齐

答案:B。颜色连续变化,33 个格点把 0~1 切成 32 段,配合三线性插值已能平滑覆盖;再加密感知收益极小,显存却是 256³ 的约 460 分之一。工程上“够用 + 插值”远胜“堆尺寸”。