中EN
概念页

面光源

Area Lights

更新于 2026-10-13 约 10 分钟光照面光源代表点LTC矢量辐照度PBRT

真实光源从来不是点。面光源要求对光源所张立体角 ωl\omega_l 积分 BRDF,实时渲染倾向于用闭式解或近似而不是多条光线取平均。主要做法有:Lambert 表面的矢量辐照度与包裹光照、光泽表面的粗糙度修正和"最具代表性的点",以及最准确的线性变换余弦 (LTC)。

点光源近似的误差

  • 点/方向光的近似:Lo(v)=∫l∈ωlf(l,v)Ll(n⋅l)+dl≈πf(lc,v)clight(n⋅lc)+L_o(v)=\int_{l\in\omega_l} f(l,v)L_l(n\cdot l)^+dl \approx \pi f(l_c,v)c_{light}(n\cdot l_c)^+。零立体角意味着无穷大辐亮度,物理上不可实现。
  • 误差取决于两点:光源从着色点看去的立体角大小,以及表面的光泽程度。决定因素是光源发射角相对 BRDF 高光立体角的大小;小光源、粗糙表面误差小。
  • 面光源高光可以用点光源加大粗糙度来模仿,这解释了为什么只用点光源的系统也能"看起来对"——美术在补偿误差。但这样把材质和特定灯光耦合在一起,换了灯光场景内容就不对了。
  • 计算了面光源也应相应使用软阴影,否则硬阴影会抵消部分效果;漏光会产生明显瑕疵。

Lambert 表面:矢量辐照度

对 Lambert 表面 Lo=ρssπEL_o=\frac{\rho_{ss}}{\pi}E,只需算辐照度。Gershun 提出、Arvo 推广的矢量辐照度:

e(p)=∫l∈ΘLi(p,l) l dl\mathbf{e}(p)=\int_{l\in\Theta} L_i(p,l)\,l\,dl

平面净辐照度 E(p,n)−E(p,−n)=n⋅e(p)E(p,n)-E(p,-n)=n\cdot\mathbf{e}(p)。若光源没有任何部分处于表面"地平线以下",则 E(p,n)=n⋅eE(p,n)=n\cdot\mathbf{e},任意形状面光源可无误差地转换为方向光:lc=e/∥e∥l_c=\mathbf{e}/\|\mathbf{e}\|,clight=c′∥e∥/πc_{light}=c'\|\mathbf{e}\|/\pi(c′c' 为可分离出的颜色)。

  • 球形光源(半径 rlr_l、中心 plp_l、均匀辐亮度 LlL_l):lc=pl−p∥pl−p∥l_c=\frac{p_l-p}{\|p_l-p\|},clight=(rl∥pl−p∥)2Llc_{light}=\left(\frac{r_l}{\|p_l-p\|}\right)^2L_l,即标准平方反比衰减。但不是所有形状都如此,圆盘光的衰减正比于 1/(d2+1)1/(d^2+1)。
  • 对 Lambert 表面,面光源与点光源的全部差异都来自遮挡(地平线裁剪)。Snyder 给出考虑遮挡的球光源解析式,只依赖 r/rlr/r_l 与 θi\theta_i,可预计算为二维纹理。

包裹光照 (Wrap Lighting)

在钳制前修改 n⋅ln\cdot l,不太物理但有效:

  • Forsyth:E=πclight((n⋅l)+kwrap1+kwrap)+E=\pi c_{light}\left(\frac{(n\cdot l)+k_{wrap}}{1+k_{wrap}}\right)^+,kwrapk_{wrap} 从 0(点光)到 1(覆盖整个半球)。
  • Valve:E=πclight((n⋅l)+12)2E=\pi c_{light}\left(\frac{(n\cdot l)+1}{2}\right)^2。

光泽表面

光泽表面的主要视觉效果是高光:形状近似光源,边缘按粗糙度模糊。早期经验做法如给高光加阈值形成平顶高光。主流思路是为每个着色点找一个等效点光源设置,只改着色输入,不改着色数学,代码改动局部、在一定条件下退化为原始着色。

方法做法缺点
粗糙度修正(Mittring,UE "Elemental")光源锥与高光瓣锥立体角相加,换一个更粗糙的瓣。Karis 对 GGX 球光:αg′=(αg+rl2∥pl−p∥)\alpha_g'=\left(\alpha_g+\frac{r_l}{2\|p_l-p\|}\right) 钳制到 [0,1]近镜面材质失效;微表面瓣有长拖尾,重映射效果差;高光过糊
最具代表性的点 (MRP)把光方向指向光源上贡献最大的点。Picott 用与反射线夹角最小的点;Karis 改用离反射线最近的点,并给出保能量的强度缩放粗糙表面上高光比参考解"更锐"
Iwanicki & Pesce 拟合对数值积分结果拟合 BRDF 瓣、软阈值、代表点参数与能量缩放,给出闭式近似依赖拟合
de Carpentier找使 n⋅hn\cdot h 而非 n⋅rn\cdot r 最大的代表点,改善掠射角高光形状—

Karis 球光代表点:反射线上离球心 ll 最近点 pcr=(l⋅r)r−lp_{cr}=(l\cdot r)r-l,球面上离它最近的点 pcs=l+pcr⋅min⁡(1,radius∥pcr∥)p_{cs}=l+p_{cr}\cdot\min(1,\frac{radius}{\|p_{cr}\|})。

代表点方法的理论依据是积分中值定理 ∫Df(x)dx=f(c)∫D1\int_D f(x)dx=f(c)\int_D 1,也类似蒙特卡洛的重要性采样。反射向量落在光源锥外时等同点光源;落在锥内时代表点连续移动,相当于把高光峰"拉宽"。

其他光源形状

  • 球光只适合较小的真实灯具,但它是打破"灯光与粗糙度错误耦合"的最简单手段。
  • 管状光 / 胶囊光(荧光灯管):Picott 给出 Lambert 闭式解,等价于线段两端两个点光源配合适当衰减;Phong 高光用线段上与反射向量夹角最小的点做代表点,再用球光近似"加粗"成胶囊。Karis 改用离反射向量最近的点并加能量缩放。
  • 平面面光源(矩形即 card light、圆盘、多边形):可表示广告牌、电视屏、柔光箱、反光板、墙面反射等。Drobot 的代表点:Lambert 被积函数的 (n⋅l)+(n\cdot l)^+ 最大点 pcp_c 和 1/rl21/r_l^2 最大点 prp_r 之间取 pmax=tmpc+(1−tm)prp_{max}=t_mp_c+(1-t_m)p_r,tmt_m 由数值积分拟合一个平均值;还支持带纹理的面光,用按不同半径圆形足迹预积分的三维查找表。
  • 多边形光:Lambert 推出漫反射精确闭式解;Arvo 用辐照度张量与斯托克斯定理把面积分变为边界积分,支持 Phong 瓣,但每条边的开销与 Phong 指数成线性;Lecocq 给出 O(1) 近似并推广到半向量 BRDF。

线性变换余弦 (LTC)

Heitz 等:用 3×33\times3 矩阵对余弦瓣做缩放、拉伸、倾斜,可表达多种球面形状。余弦瓣对球面多边形的积分早有闭式解;用矩阵的逆变换多边形域即可抵消矩阵,复杂度不变。离线把 BRDF 拟合成 LTC,按粗糙度、入射角等制表。支持带纹理多边形光以及更便宜的矩形、圆盘、线光。比代表点更贵,但准确得多。

flowchart LR
  A["LTC 瓣 + 球面多边形"] -->|"乘以矩阵逆"| B["余弦瓣 + 变换后多边形"]
  B --> C["闭式积分"]
  C --> D["等于原 LTC 在原多边形上的积分"]

上图表示 LTC 的核心:把积分域一起逆变换后,被积函数回到普通余弦瓣。

误差来源

  • 真实灯具很少是均匀发光体:遮光片(gobo、cookie)、蜂窝格栅、反射镜系统会产生强方向性并形成远离物理中心的虚拟发光体,衰减计算应考虑这一偏移。
  • 现有实时阴影技术都不能准确考虑光源形状:阴影只是乘一个标量,而正确做法应在与 BRDF 积分时计入遮挡。
  • 多种光照表示混用时,不同表示之间的结果一致性可能比各自的绝对误差更重要;误差应在感知、面向结果的框架下评估。
  • IES 灯光文件只描述角度发射分布,不建模光学系统对衰减的影响,也不描述光源表面上的发射。

PBRT 的视角:把形状当作面光源来采样(PBRT 4e 第 6 章)

在 pbrt 中,面光源就是给 Shape 附上发光分布,所以每种形状必须提供 Area() 和两套 Sample()/PDF():一套按面积,一套按参考点的立体角。默认只在法线所在一侧发光,ReverseOrientation 可以翻转;形状的 NormalBounds() 方向锥可以快速判断某个发光形状照不到某点。PBRT 的结论是:近处的大光源值得按立体角采样(球用锥内均匀采样,三角形用球面三角形采样,矩形用球面矩形采样,再用双线性 warp 近似 cos⁡θ\cos\theta 因子);圆柱、圆盘和一般双线性面片只做面积采样再换算 PDF;曲线不能当光源。公式和推导见 形状采样。上文实时渲染中的 LTC 等方法是解析地积分,PBRT 是用蒙特卡洛估计,二者目标相同、做法不同。

PBRT 的视角:DiffuseAreaLight(PBRT 4e 12.4)

  • 面光源 = 形状 + 表面每点的方向分布;DiffuseAreaLight 的方向分布是均匀的(朗伯发射)。代价是积分通常没有闭式,要用蒙特卡洛,换来软阴影和更柔和的高光(书中图 12.15:圆盘越大,半影越宽,龙身上的高光越弱)。
  • 默认只在外法线一侧发光,可用翻转变换或 ReverseOrientation 改到另一侧,twoSided 双面发光。若形状有 alpha 纹理,被抠掉的部分不发光(用随机 alpha 测试判断)。原书脚注:pbrt 还"勉强"支持一个非物理技巧——给面光源一张全零 alpha 纹理,得到不可见光源(光线永远打不到它);构造函数把这种光源归为 LightType::DeltaPosition,使积分器只通过光源采样计入它,而不指望 BSDF 采样命中。
  • 发光可以是常数光谱 Lemit,也可以是图像(查询时 vv 翻转,与图像纹理约定一致),再乘 scale。
  • SampleLi() 直接调用 Shape::Sample(ctx, u),它已返回相对接收点立体角的 PDF(见 形状采样);采样点被 alpha 抠掉或亮度为 0 则返回无效样本,省一条阴影光线。图像发光时只按形状采样不理想,pbrt 只让 BilinearPatch 额外接受一张采样用图像(需在场景里重复指定,作者承认不优雅)。
  • 功率 Φ=πAL\Phi=\pi AL(双面再乘 2);图像发光取平均值,忽略 alpha 和 (u,v)(u,v) 参数化畸变,因此可能有误差。
  • 与本页上文的关系:上文 RTR4 方法是在着色时解析近似面光源积分(矢量辐照度、LTC、代表点);pbrt 用采样 + 阴影光线无偏地求积分,可见性自动正确,代价是噪声。延伸阅读中 Peters 2021a 用 LTC 做线光源的 BRDF 乘积采样,把两条路线接了起来。多光源时如何选面光源见 多光源采样与光源 BVH。
  1. realtime_rendering_4ed.pdf 第 10 章 Local Illumination
  2. PBRT 4e source excerpt: chapter 06 (Shapes)
  3. Pharr, Jakob, Humphreys《Physically Based Rendering: From Theory to Implementation》第 4 版(MIT Press, 2023)第 6 章 6.1.6–6.1.7 节,pbr-book.org/4ed/Shapes
  4. PBRT 4e source excerpt: chapter 12 (Light Sources)
  5. Pharr, Jakob, Humphreys《Physically Based Rendering: From Theory to Implementation》第 4 版(MIT Press, 2023)第 12 章 12.4 节,pbr-book.org/4ed/Light_Sources

相关页面

图形学着色模型与光源Shading Models & Light Sources着色模型描述物体颜色如何随表面朝向、观察方向和光照变化。光源通过两个参数与着色模型交互:指向光源的方向 \mathbf{l} 和光的颜色 \mathbf{c}{\text{light}}。方向光、点光源、聚光灯的区别就在于这两个量如何随场景变化;距离衰减和方向衰减函数的选择同时影响画面与性能。图形学双向反射分布函数BRDFBRDF f(\mathbf{l},\mathbf{v}) 量化局部反射:只依赖入射方向 \mathbf{l} 和出射(观察)方向 \mathbf{v},涵盖表面反射与局部次表面散射。它通过反射方程把入射辐射亮度转换为出射辐射亮度,物理上需满足 Helmholtz 互易性与能量守恒,用方向反照率检验。方向光和精确光源可从小面光源的极限推导,使积分变为对光源的求和。本页对应 RTR4 9.3–9.4 节。图形学微表面理论Microfacet Theory微表面理论把小于像素的微几何建模为大量平坦微面元,用法线分布函数 (NDF) D(\mathbf{m}) 描述其朝向统计,用遮蔽函数 G1 和遮蔽-阴影函数 G2 描述可见性,并据此推导宏观 BRDF。镜面反射时每个微面元是完美菲涅耳镜,积分退化为在半向量处求值,得到 FG2D/(4|\mathbf{n}\cdot\mathbf{l}||\mathbf{n}\cdot\mathbf{v}|)。GGX 分布配合高度相关的 Smith G2 是当今影视和游戏最常用的组合;该框架忽略微面元间的多次反射,可用补偿项弥补。本页对应 RTR4 9.6–9.8 节。图形学软阴影 PCF 与 PCSSSoft Shadows with PCF & PCSS百分比渐近过滤 (PCF) 在阴影贴图上取多个样本,分别与表面深度比较后混合结果,得到伪软阴影,但半影宽度恒定。PCSS 先搜索附近遮挡体的平均深度,再据此决定过滤宽度,从而在接触处硬、远处软(接触硬化)。图形学基于图像的光照Image-Based Lighting用纹理数据(通常是相机拍摄的 360° HDR 全景)照明场景称为基于图像的光照。实时引擎常用预滤波的高光立方体贴图(配合 split-sum 近似)处理高光,用辐照度环境贴图或球谐系数处理漫反射。它们只依赖少量光照图元而不需要知道场景其他表面,因此仍属局部光照。图形学球面函数基Spherical Basis Functions要让环境光照超越常数项,需要表示"每个入射方向的辐亮度"这样的球面函数。把函数转成某种表示叫投影,从表示求值叫重建。本页对比表格形式、环境立方体、球面高斯、球谐函数,以及专门为半球设计的 AHD、Half-Life 2 基和 H-basis。图形学方向遮蔽Directional Occlusion方向遮蔽用比单个 AO 标量更有表现力的方式记录"哪些方向被挡住",例如地平线角、可见性锥(环境孔径)、球面有向距离或球谐。它主要用于面光源和环境光照的软遮蔽,以及凹凸细节自阴影、超大地形等阴影贴图分辨率不够的场合;对点光源,专门的阴影技术质量更好(RTR4 11.4 节)。游戏开发 · UE5光源类型与静态光照Light Types & Static LightingUE 有五种光源:定向光、天空光、点光、聚光和矩形光。每个光源有三种移动性 (Mobility):静态 (Static) 只烘焙进光照贴图;固定 (Stationary) 烘焙间接光,同时能为可移动物体投射动态阴影,但一个物体最多受 4 个固定光源影响;可移动 (Movable) 完全动态。烘焙由 Lightmass(CPU 版或基于 DXR 的 GPU 版)完成,Lightmass 重要性体积用来把光子集中到可玩区域。图形学随机光线追踪与路径追踪Stochastic Ray Tracing & Path Tracing光线追踪用投射光线同时解决可见性问题和光照问题。GEA 从最简单的"眼睛光线 + 着色方程"讲起,逐步加入阴影光线、透射光线、用蒙特卡洛估计渲染方程的随机光线追踪、递归间接光照,再到每次只走一条路径的路径追踪、双向路径追踪和 Metropolis 光传输,最后讨论降噪与光线投射效率(GEA4 卷 II 12.6.3–12.6.5)。图形学辐射度量学与光度学Radiometry & Photometry辐射度量学精确度量电磁辐射,是基于物理渲染的第一步;光度学用人眼灵敏度对它加权。渲染中最重要的量是辐射亮度 L:眼睛和相机测的就是它,着色方程要算的也是沿视线的辐射亮度。游戏数学球面几何与方向参数化Spherical Geometry & Direction Parameterizations渲染中大量计算发生在单位球面上:方向就是球面上的点,一组方向就是球面上的一块区域。本页按 PBRT 4e 3.8 节整理立体角、球面多边形面积、三种球面参数化(球坐标、八面体编码、等面积映射)以及用于剔除光源的方向锥,并附原书一处公式问题。游戏数学形状采样Shape Sampling把形状当作面光源时,需要在形状上采样点。最简单的是按面积均匀采样再把 PDF 换算成立体角;更好的是只在参考点看得到的立体角内均匀采样,消掉 1/r^2 和背面带来的方差。本页按 PBRT 第 4 版第 6 章整理各种形状的采样公式及其推导要点。图形学多光源采样与光源 BVHMany-Light Sampling & Light BVH场景有成百上千个光源时,不可能在每个着色点对所有光源做直接光照。利用求和的蒙特卡洛估计 \sumi fi\approx fj/p(j),每次只随机选一个(或几个)光源并除以其概率即可无偏。选择概率可以均匀、按功率,或随着色点变化——后者需要一棵把光源聚合起来的层次结构(光源 BVH)。本页对应 PBRT 4e 12.6 节,并对照实时渲染的分簇/分块光源剔除。游戏美术灯光工作流与光源类型Lighting Workflow & Light Types现以第 3 版 Ch2 为准。 3D 少有「美丽意外」——要控制流程(何时开灯、反馈环、命名与版本)、选对光源类型,并用衰减、diffuse/spec 分离、light linking、cookie 等手段细化。第 3 版新增 Physically Based Lights(IES/光度学灯) 实践。游戏美术光的品质:软硬、衰减与 ThrowQualities of Light现以第 3 版为准。 第 1 版独立 Ch5「Qualities of Light」;第 3 版把品质讨论拆入 Ch1(识别光源)、Ch2(衰减/cookie)、Ch4(throw patterns)等。本页汇总美术向「光长什么样」:软硬、衰减、投射图案(gobo/cookie/throw)。

被这些页面引用1 篇

输入关键词开始搜索

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