2025-0922-2139 gdc - Visual Effects Summit - Lessons in Lens Flares
Slip-box
To be fleeting notes
Fleeting
To be literature notes (Understanding)
L-Origin
下面是《Lessons in Lens Flares》的精炼要点与可落地做法(偏向实时 VFX / 游戏):为什么要管镜头光晕
-
画面写实度越来越高,镜头伪像(flares、ghosts、CA 等)已成为实时 VFX 的常见需求。
-
没有“一招鲜”引擎方案,关键是理解真实镜头的行为,然后在项目里用合适的方法重建。
两类镜头 → 两套气质
-
Spherical(球面)
-
光源周围的放射状光刺(条数≈光圈叶片数)。
-
圆/多边形的虚化与 ghost。
-
常规 16:9 视野,观感“真实纪录感”更强。
-
-
Anamorphic(变形)
-
主体是水平条纹(streaks);也可能带不同气质的放射刺。
-
垂直拉伸的椭圆虚化;ghost 可横向或纵向拉伸。
-
产出 2.39:1(数字标准 21:9),**更“电影感”**与“绘画感”。
-
光晕元素图鉴(你需要复现的“构件”)
-
Glare:光源周围的大软光晕,降低局部对比度。
-
Ghosts:黏在“画面中心↔光源”的直线轨道上转动的“光源拷贝”;形状/颜色常随镜头元素/镀膜变化。
-
Halos:环形/椭圆环,常伴色散(CA);光源在屏外时更显著。
-
Lens Dirt:前镜片灰尘被光打亮,呈失焦散点;常与前组反射同场出现。
-
Radial Rays / Streak Ghosts:放射刺 / 变形条纹的“分身”。
行为学规则(做系统时要驱动的量)
-
焦段:广角 → 元素多而小;长焦 → 少而大。
-
入射角:掠射更克制;直射更清晰、元素更完整。
-
屏外光源(Outside-edge flare):光一到屏边就会出现的“预告式”元素。
-
遮挡/显隐:ghost 最不线性,会跳跃式消失/出现;其它元素多为平滑减弱。
-
景深:对焦内→元素锐利小;对焦外→变大、变软;变形镜头像素拉伸/压缩更明显。
-
色散(CA):靠近画面边缘的元素出现颜色分离;Halos/ghosts 受影响显著。
-
光源色 vs 镀膜色:有的元素吃光源色,有的会呈镀膜色(需看参考决定)。
驱动参数(引擎里最重要的信号)
-
光源屏幕坐标
L。 -
画面中心到光源的距离
d = |L - C|。 -
通过
L与d驱动:位置(沿 C↔L 线)、反向偏移(镜面反射感)、尺度/不透明度随距变化、旋转角、色彩/强度随入射角与遮挡变化。
在 After Effects 的搭建流程(可映射到引擎材质/蓝图)
-
取光源形状:最好从场景高亮阈值提取(真实合成)→ 得到 flare seed。
-
Primary Streak(主条纹):基于 seed 做横向拉伸、形状破碎、收边遮罩。
-
Glare:复制 seed 放大 + 大模糊 + 软遮罩。
-
Radial Rays:横向挤压 → 波形扰动 → 极坐标扭转 → 径向模糊 → 中心 pinching。
-
Ghosts:锚点绑定“屏幕中心”,沿 C↔L 线旋转;加径向模糊(最暗模式)做遮挡感。
-
Streak Ghosts:用“反向偏移”表达沿线分布,复制叠加出层次。
-
Chromatic:做彩虹条/分色副本,少量发光/软滤镜增强。
-
混合:AE 用 Add(叠加到纯黑)/Screen(叠加到实拍);引擎里多数用 Additive/Modulate+Add 组合。
常用表达式(思路):
位置反向偏移:元素 X 方向与光源反向移动(沿 C↔L 线求反向)。
Scale/Opacity by distance:
scale = f(d)、opacity = g(d)。Rotate by light angle:面向/背离中心角度驱动旋转/切换。
在引擎实现的实用清单
-
屏幕空间 flare 管线(后处理/全屏通道),输入:可见强光 buffer 或直接的“可参与 flare 的光源列表”(含屏幕坐标、可见性、色/强度)。
-
元素库:glare、ghost、streak、halo、dirt 的可复用图层(程序形状 + 纹理 mask + 小噪声),统一在 C↔L 线上布置与排序。
-
遮挡与显隐:
-
用遮挡率(深度/体积遮挡)驱动整体强度;
-
给 ghosts 做非线性显隐曲线与错峰延迟(还原“乱序消失”的感觉)。
-
-
景深/焦距感:用景深参数或对焦距离,驱动元素模糊半径与拉伸。
-
色散:屏幕坐标归一化半径
r驱动 RGB 偏移量;靠边更强。 -
屏外 flare:当
L超出屏幕但距离边缘 < 阈值时,激活专门的 edge flare layer。 -
镜头脏污:静态/动态 dirt 贴图 × bloom/光源强度;只在强光时点亮。
-
性能:尽量图层合批、减少采样;按光源数量与亮度阈值做 budget;移动端限制 ghost/streak 层数。
-
可美术调参:镜头类型预设(Spherical/Anamorphic)、光圈叶片数→放射刺条数、镀膜主色、ghost 尺寸/数量/衰减、CA 强度、edge flare 开/关。
参考—从零到可用的最小实现
-
拿到每个候选光源的屏幕坐标
L与强度I(可做阈值过滤/基于亮区中心)。 -
计算
d = |L - C|与单位方向u = normalize(C - L)。 -
画层:
-
Glare:以
L为中心的高斯光斑,radius, opacity ~ I, d。 -
主 Streak:在
L做横向条,长度/厚度 ~I, d,叠少量分色。 -
Ghost(N 个):对每个 ghost,位置
P = lerp(C, L, t_i)或P = C - u * k_i * d,并随d旋转/缩放/错峰显隐。 -
Edge Flare:当
L出界但近边时,在边线生成椭圆/条纹。
-
-
全部 Additive 合成,Bloom 收尾。
制作与审片小贴士
-
永远对比真实参考(不同焦段/入射角/遮挡/对焦拉动)。
-
别让 flare 遮蔽信息或喧宾夺主:UI、安全区域、角色 silhouette 要能读清。
-
与曝光 & Bloom配合调;避免“双重发光”漂白。
-
预设一键切换:摄影机类型(Spherical/Anamorphic)与风格强度(自然/电影/风格化)。
一句话总结:把“光源屏幕位置 + 与中心距离”当成一切行为的驱动核心,用分层的可复用元素(glare/ghost/streak/halo/dirt)去组合,再按镜头类型与拍摄语法规定它们如何出现、如何变形、如何消失—就能做出可信、可控、性能友好的镜头光晕系统。
L-My Words
L-Zotero citation key
To be permanent notes (Complete Ideas)
P-Self Explained Sentences
P-Connection
- Parent
- Caused by::
- - Driven by::
- - Cite from::
-
- Caused by::
- Child
- Excalidraw::
- - Is source of::
- - Including::
- - Have Example::
- - Contributes to::
- - Consist of::
-
- Excalidraw::
- Friend
- Left
- Achieved with::
- - Affected by::
- - Supported by::
- - Enhanced by::
- - related::
-
- Achieved with::
- Right
- against::
- - Opposites::
-
- against::
- Left