想象你是一位摄影师,要在傍晚的商场中庭给一辆车拍广告。头顶是玻璃穹顶,四周有暖黄橱窗、蓝色霓虹、白色射灯……光线从三百六十度涌来,任何一个角度都藏着“光的故事”。如果按传统思路,灯光师得在天花板吊几千盏灯才能模仿这种丰富——这显然不现实。 聪明的灯光师会怎么做?他掏出一颗反光球,咔嚓拍一张照片。这张全景照片记录了整个环境的光线分布:哪个方向亮、哪个方向偏蓝、哪个方向有窗户。然后,计算机按照照片里的亮度分布,从各个方向给物体打光——这就是基于图像的照明(Image-Based Lighting,IBL)。 更妙的是,照片可以在正式渲染前“预加工”:把每个方向的光预先混匀、按材质性格分类,到渲染时直接取用,速度快到实时。现代游戏里那些迷人的金属反射、瓷器高光,大多源自这项技术。
理解 IBL 是踏入物理渲染(PBR)的必经之路。无论你做游戏引擎、影视特效还是三维产品可视化,“环境贴图采样 + 预计算”的思维贯穿始终,掌握它就能让渲染质量从“塑料感”跃升到“照片级”。
可视化演示
动态演示IBL基于图像的照明的核心机制,通过源头/管道/节点/终端四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
IBL基于图像的照明:IBL的 IBL的动机与核心思想 渲染方程与IBL数学分解 核心机制可视化 IBL基于图像的照明整体架构与关键组件
原理概述
回到商场打光的故事。灯光师掏出反光球拍全景照——这张照片不展示“物体长什么样”,而是记录“光从哪来、有多亮”。它像一张藏宝图:每个像素都标注了一个方向上的光能量。把照片套在场景外面,物体就像被一个巨大的发光球包围,光从四面八方涌来。
图形学里,这张“藏宝图”叫环境贴图。环境中的每一点光都假设来自无穷远处,到达物体时近似平行光。于是,物体表面某点收到的总光照,就是对整个包围球所有方向的入射光做积分——数学上是一个球面积分。传统直接光渲染是“一盏灯一盏灯加起来”;IBL 则用一张环境贴图,把“无限盏灯”的贡献一次性算清。
这就是渲染方程在 IBL 下的形态:
你看,有了“全景照片灯光师”,灯光师不用再指挥几千盏灯,只要把照片交给渲染器,让它按方程把每个方向的光“盘账”一遍。但等等——这个积分是实时的吗?这就引出了我们的核心问题:如何在性能允许的前提下完成这笔“光账”。这正是后面几节的故事。
- 出射亮度 $L_o$我们要计算的最终像素颜色,代表从表面射向观察者的光能。
- 入射光 $L_i$环境从某个方向打来的光,是环境贴图采样得到的辐射度。
- 材质响应 $f_r$双向反射分布函数(BRDF),描述材质对入射光的反射性格——磨砂还是镜面。
- 入射角余弦 $n \cdot \omega_i$光斜着打来时能量被摊薄,乘上法线与入射方向点积来修正。
- 微元立体角 $d\omega_i$把天穹切成无穷个小方向片,每个片贡献一点点光,最后积分求和。
环境贴图
照片的“底片”得足够强大。商场里太阳透过穹顶直射时,亮度轻松破几百;背阴角落却只有零点几。普通 JPG 最高只能存 1.0,一张照片里亮处全白、暗处全黑。灯光师必须用 HDR 底片——每通道 16 位浮点,能记录 0 到几千的辐射度,这样才配得上“光的账本”的称号。
HDR 环境贴图一般以等距圆柱投影存储——想象把地球仪摊成世界地图,横轴是方位角,纵轴是高度角。但采样时直接查这种图会有畸变与接缝,实践中通常预先把全景图转换成立方体贴图:想象一个巨大的盒子罩住场景,六面墙各贴一张图,向量方向命中哪面墙就采样哪面。要量化“这个方向的光有多少”,还需要理解立体角:
所以,灯光师拿到的不只是一张“好看的照片”,而是一份被量化成球面方向的光账本。每一笔账都精确到“哪个方向、多少亮度”。底片是 HDR,账本才能覆盖从太阳到阴影的百倍动态范围。接下来就该考虑:这么厚一本账,怎么在渲染时快速算完?
- 天顶角 $\theta$从正上方(北极)开始往下扫,范围 0 到 π,对应照片的“竖”方向。
- 方位角 $\phi$绕着竖直轴转一圈,范围 0 到 2π,对应照片的“横”方向。
- 球面微元 $\sin\theta \, d\theta \, d\phi$球面上一个小方格的实际面积,越靠近赤道越“宽”。
- 总立体角 $4\pi$把全球面所有微元加起来,得到 4π 球面度——这是环境贴图覆盖的“光的总视野”。
预计算卷积
账本太厚了。渲染方程里,每个像素都要对天穹做一次积分——若用蒙特卡洛采样(随机撒点求平均),一个像素少说几百次环境贴图采样,几百万像素乘下来,画面就会卡死。灯光师们想出了“提前炖汤”的办法:做菜时现场切菜太慢,那就开拍前把高汤熬好,拍的时候舀一勺就行。
这个“炖汤”在 IBL 里叫预卷积(Pre-convolution)或预计算。学术上的关键是拆分近似(Split-Sum):把“光照 × 材质”的联合积分,拆成两个独立积分——一个只跟环境光有关,一个只跟材质有关。既然它们都只依赖固定的输入,就都可以提前算好,存进贴图。
“炖汤”也要讲究:漫反射和镜面反射要分两口锅。粗糙的墙面(漫反射)吃的是“大锅平均”;光洁的镜面(镜面反射)吃的是“小灶精雕”。下面两节我们分别看看这两锅汤怎么炖。
- 完整积分(左)光照与材质耦合,无法离线固定,因为材质每帧都在变。
- 光照积分(右一)只对环境光在法线半球上积分,结果是与方向相关的辐照度/预滤波环境图。
- 材质积分(右二)只对 BRDF 积分,结果是与视线角度、粗糙度相关的缩放因子,存成 LUT。
- 近似关系 $\approx$工程上接受一定误差换取实时性——这正是游戏里“够用”的哲学。
漫反射IBL
先看漫反射这锅汤。磨砂墙面、哑光陶瓷、皮肤……这些材质的特点是:光打上去后被微观凹凸散射到所有方向,观察者从哪个角度看都差不多。所以漫反射只关心“这个法线方向总共收到了多少光”,至于光具体从哪个方向来,不重要。
于是灯光师把环境贴图“揉”成一张辐照度图(Irradiance Map):对每个可能的法线方向,预先把半球上所有入射光按余弦加权求和,存成一个像素。运行时材质只要拿自己的法线去查这张图,就得到了从四面八方汇聚过来的总光照,完全不需要实时积分。这就是漫反射 IBL 的数学表达:
回到比喻:漫反射辐照度图就像这间商场每个位置上的“平均光线指数”——你站在哪儿,抬头朝哪个方向,这张地图就告诉你那儿整体多亮。灯光师把它做成一张贴图,任何哑光物体一到场,查一下就知道自己该有多亮。那镜面反射的“小灶”呢?接着看。
- 辐照度 $E(n)$法线方向 $n$ 上“收到的总光量”,这就是辐照度图的像素值。
- 反照率颜色 $c$材质固有色,例如红墙的 $c$ 偏红,决定漫反射光的色相。
- 兰伯特归一化 $\pi$朗伯体在半球上均匀散射,散射亮度与入射总光量的换算系数为 $1/\pi$。
镜面反射IBL
镜面反射是挑剔的食客。一个抛光的金属球,会像镜子一样映出窗外的霓虹招牌,连招牌上一行小字都看得清;而粗糙的塑料球,只会看到一团模糊的光斑。光滑程度决定了它需要多“高清”的环境细节。
于是灯光师为镜面单独炖一锅“分级高汤”:把环境贴图按不同粗糙度预先模糊成一系列图层,这就是预滤波环境贴图(Prefiltered Environment Map)。粗糙度 0 保留全部细节;粗糙度 1 糊成一团。这些图层自上而下排列,正好是一组 Mipmap 金字塔。运行时根据材质的粗糙度选合适的层采样,光滑表面采清晰层,粗糙表面采模糊层。
所以镜面这锅汤的秘诀是“分级+预滤”。开拍时金属还是玻璃,只看材质的粗糙度参数——手指一拨,就能在“镜面”和“毛玻璃”之间平滑滑动,而环境贴图已在离线阶段被炖成了多层高汤。接下来,材质那边还有一张“性格卡”要准备。
- 预滤波结果 $L_{\text{pre}}$粗糙度为 $r$ 时,从法线方向看过去的“模糊环境光”。
- 分布核 $D$决定哪些方向的入射光参与加权,粗糙度就是核的宽度。
- 加权积分把核覆盖到的入射光按权重加起来,等价于对原环境贴图做一次“方向模糊”。
BRDF查找表
同样是镜面,金属和皮革对光的反应完全不同:金属会把光染上自身颜色,非金属则染上光源颜色;掠射角下几乎所有材质都会变成“镜子”(菲涅尔效应);粗糙表面还有微表面互相遮挡的损耗。这些性格,都写在 BRDF 这个“材质身份证”里。
如果在运行时逐像素计算完整的 BRDF 积分,开销依然不小。灯光师的聪明办法是:把 BRDF 的积分结果也预先算成一张二维查找表——横轴是视线与法线的余弦值 NdotV,纵轴是粗糙度,每个像素存两个浮点数:一个是菲涅尔缩放因子,一个是几何遮蔽修正因子。运行时只需两次贴图采样。
这张“性格卡”是纯几何光学性质,与具体场景无关——全世界所有金属、所有塑料,都用同一张 LUT,只要在采样时乘上各自的菲涅尔基础反射率 $F_0$ 即可。灯光师把这张卡打印出来贴在摄影棚里,任何材质进场都能立刻查到它的“光反应性格”。万事俱备,终于可以开拍了!
- 输入 NdotV视线方向与法线方向夹角的余弦,决定菲涅尔效应有多强。
- 输入粗糙度 $r$决定微表面遮挡与多次散射的修正。
- BRDF 积分把材质的反射响应在半球上积分,得到“这种材质面对这个角度的光,整体反射多少”。
- 输出 LUT 纹理按 (NoV, r) 查表,等价于瞬间完成几十次采样才能算出的积分。
渲染合成
所有准备工作就绪,正式渲染时就像灯光师按下开机键:现场不再做任何昂贵的积分,只有几次纹理采样和一次乘加。
合成公式把漫反射与镜面反射按金属度权重混合。金属度 $m$ 越接近 1,物体越“金属”,漫反射越少,镜面反射越强,且反射色由材质固有色决定:
至此,“全景照片灯光师”正式上岗:漫反射是浑厚的基本面光,镜面反射是锐利的点睛高光,LUT 是两者之间的调音台。两道光相加,PBR 材质呈现出的正是照片级的光影质感。不过,真正的片场还有最后一课:这些“高汤”和“性格卡”要如何高效管理?
- 漫反射权重 $(1 - F)$入射角越接近掠射,菲涅尔反射越强,漫反射份额越少。
- 镜面反射项预滤波环境贴图提供“环境长什么样”,LUT 提供“材质怎么回应”。
- 最终输出 $L_o$写入帧缓冲的颜色,经过色调映射(把 HDR 数值压到屏幕可显示的 0~1 范围)后显示。
工程实践
片场不只是理论,还有后勤。一个标准 IBL 流程分四步:拍摄或生成 HDR 环境贴图 → 转换成立方体贴图 → 离线预计算辐照度图与多级预滤波贴图 → 运行时采样合成。在游戏引擎里,这四步被封装成“反射探针”(Reflection Probe),美术只需放一个探针,引擎自动完成后续所有预计算。
工程上的挑战主要是存储与更新。HDR 立方体贴图六面总共能轻松突破百兆字节,直接用会撑爆显存,必须用 BC6H 等 HDR 压缩格式把每像素压到 8 字节甚至更少;动态环境(如日夜循环)则需要增量更新预滤波贴图,或者对低频的辐照度图“偷懒”——只更新粗 Mip 层。预计算的采样质量与误差的关系:
从拍全景照片,到预炖高汤,再到实时开拍,IBL 的整个流程就像一支训练有素的灯光团队:前期精雕细琢,现场一气呵成。下回你在游戏里看到一块金属挡泥板映出整条街道,在心里向那位“全景照片灯光师”致敬吧。
- 采样数 $N$预计算时在半球上撒的随机方向数。
- 误差衰减 $\propto 1/\sqrt{N}$想误差减半,采样数要翻四倍,这正是实时不可行的原因。
- 离线 vs 实时离线圈钱多买质量,实时只买速度。
AI 应用场景
游戏引擎的物理光照
阶段:模型渲染管线 / 光照预计算
解决的问题:传统点光源无法表现开阔室外场景的复杂环境光,逐灯布置成本极高且不真实。IBL 用一张 HDRI 全景贴图提供全方向光照,配合预卷积贴图实现实时 PBR 渲染,画面质感从“塑料感”跃升到“影楼级”。
具体案例:某开放世界游戏在黄昏场景中,美术将实拍的金色落日 HDRI 装入反射探针,预计算辐照度与镜面预滤波后,汽车漆面映出天空的云层,草地受光从刺眼渐变到柔和,昼夜切换时探针在几帧内平滑更新。
影视特效与虚拟制片
阶段:合成与光照匹配
解决的问题:实拍素材的光线方向、强度与色彩复杂,CG 角色要“焊”进画面必须与实景光照一致。IBL 用现场拍摄的反光球 HDR 照片重建环境光照,让 CG 角色与实拍场景共享同一“灯光师”。
具体案例:某电影拍摄现场,灯光组在绿幕前放一颗镜面球。合成师用球面反射重建场景 HDR 环境贴图,CG 怪物站在演员身边,高光与阴影方向和实拍灯光完全吻合,后期调色工作量大幅下降。
建筑与产品可视化
阶段:离线渲染加速
解决的问题:建筑师希望客户在“真实环境”里看设计方案。传统路径追踪每帧要几百次采样,交互漫游卡顿;IBL 预计算把静态环境光照转成纹理,漫反射与镜面反射实时可查,实现无级漫游。
具体案例:某家居品牌线上展厅,客户端加载了一组室内 HDRI,沙发、木地板、陶瓷花瓶的漫反射与高光全部由 IBL 驱动,用户旋转视角时,金属龙头的反射随环境连续变化,帧率保持 60fps。
Python 演示
import numpy as np def make_environment(size=64, sun=8.0): """生成一张 HDR 全景环境贴图:蓝色渐变天空 + 强烈太阳(亮度 > 1)""" h, w = size, size * 2 y, x = np.mgrid[0:h, 0:w] theta = (y + 0.5) / h * np.pi phi = (x + 0.5) / w * 2 * np.pi sky = np.stack([ 0.10 + 0.15 * np.sin(theta), 0.15 + 0.30 * np.sin(theta), 0.30 + 0.55 * np.sin(theta), ], axis=-1).astype(np.float32) sun_dx = ((x - 0.25 * w) % w) sun_d = np.sqrt((y - 0.30 * h) ** 2 + np.minimum(sun_dx, w - sun_dx) ** 2) sky[sun_d < 4] = [sun, 0.85 * sun, 0.70 * sun] return sky def prefilter(env, sigma): """高斯模糊模拟预滤波:sigma 越大 = 粗糙度越高 = 越模糊""" h, w, _ = env.shape k = max(1, int(3 * sigma)) ys = np.arange(-k, k + 1) k1 = np.exp(-ys * ys / (2 * sigma * sigma + 1e-6)) k1 /= k1.sum() out = np.zeros_like(env) for dy, wy in zip(ys, k1): yy = np.clip(np.arange(h)[:, None] + dy, 0, h - 1) row = np.zeros((h, w, 3), dtype=np.float32) for dx, wx in zip(ys, k1): xx = (np.arange(w)[None, :] + dx) % w row += env[yy, xx] * wx out += row * wy return out def irradiance_map(env): """漫反射辐照度图:对整张环境做大力度低通滤波""" return prefilter(env, sigma=8.0) def main(): env = make_environment() irr = irradiance_map(env) spec_levels = [prefilter(env, s) for s in (0.0, 1.5, 3.0, 6.0)] print("HDR 环境亮度范围:", round(env.min(), 2), "->", round(env.max(), 2)) print("辐照度图平均亮度:", np.round(irr.mean(axis=(0, 1)), 3)) print("镜面预滤波各级均值:", [round(m.mean(), 3) for m in spec_levels]) np.savez("ibl_cache.npz", env=env, irradiance=irr, specular=np.stack(spec_levels)) print("预计算缓存已写入 ibl_cache.npz") if __name__ == "__main__": main()
sky = np.stack([...], axis=-1)构造三通道 HDR 天空,亮度随高度角变化,模拟真实穹顶。sky[sun_d < 4] = [sun, 0.85 * sun, 0.70 * sun]在太阳位置写入远大于 1 的辐射度,这是 HDR 与普通 LDR 照片的本质区别。k1 = np.exp(-ys*ys / (2*sigma*sigma + 1e-6))生成高斯核,sigma 控制模糊程度,对应粗糙度。xx = (np.arange(w)[None, :] + dx) % w水平方向取模实现环绕寻址:全景图左右边缘是连通的。out += env[yy, xx] * wx加权累加所有偏移采样,完成一次卷积。irr = irradiance_map(env)拿到“环境光总账本”,即每个法线方向收到的平均光量。spec_levels = [prefilter(env, s) for s in (0.0, 1.5, 3.0, 6.0)]按粗糙度梯度生成四级预滤波贴图,对应镜面 Mipmap 金字塔。np.savez("ibl_cache.npz", ...)把预计算结果缓存到磁盘,渲染时直接加载,避免重复卷积。
常见误区
误区我以为 IBL 就是给物体“贴一张天空图”,让球体看起来有反射,就像加了个滤镜一样简单。
正解贴图反射只是视觉把戏,IBL 是把环境贴图当作真实的光源参与光照计算。它要经过预卷积生成辐照度图(漫反射的光源)和预滤波贴图(镜面反射的光源),再结合 BRDF LUT 才算光照。就像全景照片不是贴在墙上的装饰画,而是被灯光师当成“光的账本”逐方向结算。
为何常见:因为最终画面确实很像“贴了一张反射图”,初学者容易把结果当原理。
误区我在网上找了一张日落 JPG,转成立方体贴图后直接用,结果高光处白茫茫一片、暗部死黑。
正解JPG 每通道只有 8 位,峰值亮度被钳制在 1.0,无法表示太阳等真实光源的辐射度。IBL 必须用 16 位浮点 HDR 编码(如 Radiance、EXR、PFM),才能记录 0 到上千的动态范围。否则就像用一张曝光不足的底片去当灯光师——灯光师根本不知道太阳有多亮。
为何常见:屏幕最终显示的是 LDR 图像,给人“好像 JPG 也够用”的错觉,但中间的光照计算早就失真了。
误区我觉得反正 GPU 很强,直接在着色器里对每个方向循环采样环境贴图不就行了,为什么非要预计算?
正解实时积分需要对半球做几百次纹理采样,每个像素都做一遍,连高端显卡也扛不住。预计算的本质是“用离线时间换运行时速度”:把光照积分和材质积分提前算好存进贴图,运行时只要查表。这正是拆分近似存在的原因。
为何常见:只看到最终公式简单,没意识到逐像素积分的计算量是天文数字。
误区我一开始以为粗糙的物体反射更“强”,所以应该选分辨率最高的 Mip 层,结果画面闪瞎眼。
正解方向反了。粗糙度大 → 微表面紊乱 → 反射被摊平 → 预滤波贴图的模糊层(高 Mip 层)才对。粗糙度小 → 镜面反射 → 细节层(低 Mip 层)。类比:镜面(光滑)要 4K 高清图,毛玻璃(粗糙)用低分辨率糊图就够了。
为何常见:“粗糙”听起来像“更有纹理”,容易误以为是更清晰。
误区我觉得 BRDF 那么复杂,LUT 应该是个 3D 纹理,要输入光源方向、视线方向、法线方向一堆参数。
正解标准拆分近似中,LUT 只有两个输入:NdotV 和粗糙度,是一张 2D 纹理。因为 BRDF 积分经过坐标变换后,只依赖这两个归一化参数;光源方向等已经被预滤波贴图“消化”掉了。就像一张性格卡,只写“角度+粗糙度→反射强度”两列,别的都省了。
为何常见:BRDF 函数本身参数很多,但经过预计算和变量代换,真正需要实时查的维度只剩下两个。
面试题
Q1. IBL 中记录环境各方向入射光的贴图称为什么?
- A.深度贴图
- B.环境贴图← 正确答案
- C.法线贴图
- D.阴影贴图
答案:B。环境贴图以 HDR 全景或立方体的形式记录四周入射光,是 IBL 的“光的账本”。深度贴图存深度、法线贴图存法线方向、阴影贴图存遮挡信息,都不是光源角色。就像灯光师的账本记录光的方向和亮度,而不是记录物体形状。
Q2. 为什么 IBL 要求环境贴图使用 HDR 编码?
- A.让文件体积更小
- B.保存高动态辐射度← 正确答案
- C.兼容旧版显卡驱动
- D.屏幕显示更鲜艳
答案:B。HDR 用浮点存储,能记录太阳等光源大于 1 的辐射度;LDR 的 JPG 峰值被钳制在 1.0。显示器虽然最终显示 LDR,但光照计算必须在 HDR 空间进行,否则亮处死白、暗处死黑。就像底片宽容度不够,灯光师就看不到太阳的真实亮度。
Q3. IBL 预计算的拆分近似把渲染方程拆成哪两部分?
- A.环境光照积分← 正确答案
- B.BRDF 材质积分← 正确答案
- C.阴影遮挡积分
- D.场景深度积分
答案:AB。拆分近似的核心是把“光 × 材质”耦合积分拆成独立的光照积分(生成辐照度图/预滤波贴图)与 BRDF 积分(生成 LUT)。阴影和深度不是拆分对象,阴影属于遮挡信息,在 IBL 中另用遮挡探针或阴影贴图处理。
Q4. 漫反射 IBL 的辐照度图采样时主要依据哪个量?
- A.观察视线方向
- B.表面法线方向← 正确答案
- C.主光源方向
- D.镜面反射方向
答案:B。漫反射假设光被均匀散射,与视线方向无关,只问“法线朝哪、那里总共有多亮”。辐照度图以法线方向为索引。视线方向只影响镜面反射(NdotV 进入 LUT),光源方向在预卷积时已被平均掉了。
Q5. 镜面反射 IBL 中,粗糙度大的材质应采样预滤波贴图的哪一层?
- A.最清晰的底层
- B.更模糊的高层← 正确答案
- C.任意一层都行
- D.全部层一并采样
答案:B。预滤波贴图按粗糙度把环境模糊成 Mipmap 金字塔:粗糙度 0 用清晰底层,粗糙度 1 用最糊顶楼。粗糙度大意味着微表面把反射方向打散,需要的是“毛玻璃”效果,而非高清细节。就像毛玻璃看霓虹灯,糊成一片才对。
Q6. 标准 IBL 中 BRDF LUT 的输入参数通常有哪些?
- A.NdotV 视线点积← 正确答案
- B.材质表面粗糙度← 正确答案
- C.环境贴图的亮度
- D.相机空间的位置
答案:AB。拆分近似把 BRDF 积分化简为只依赖 NdotV 和粗糙度的二维函数,因此 LUT 是 2D 纹理。环境亮度已被预滤波贴图承载,相机坐标经过归一化后不再直接进 LUT。这就像性格卡只记录“角度+粗糙度”两个字段,其余信息归属别的贴图。
Q7. 为什么 IBL 要把 BRDF 积分预计算成 LUT,而不是在着色器里实时计算?
- A.LUT 查表必然更精确
- B.避免逐像素积分开销← 正确答案
- C.可以压缩显存占用
- D.实时积分输出全黑
答案:B。BRDF 积分含菲涅尔、几何遮蔽和法线分布三项,逐像素实时做蒙特卡洛积分需要几百次采样,代价远超几次贴图采样。LUT 用离线精度换取运行时速度,查表和计算的结果高度一致但快几个数量级。与“提前炖高汤,开拍舀一勺”同理。
Q8. 环境贴图覆盖的整个球面立体角是多少?
- A.半球立体角 2π
- B.平面内角 180 度
- C.全空间立体角 4π← 正确答案
- D.归一化数值是 1
答案:C。立体角是三维空间中的“张角面积占比”。完整球面的立体角是 4π 球面度,半球是 2π。环境贴图记录四周所有方向的光,所以覆盖 4π;而半球积分出现在具体某点法线的上半空间。
Q9. 下列哪个是 IBL 最典型的工业应用场景?
- A.游戏引擎环境反射← 正确答案
- B.数据库索引优化
- C.自然语言文本分类
- D.音频信号降噪
答案:A。IBL 是游戏引擎和影视特效渲染管线中环境光照的标配,为 PBR 材质提供全局方向的环境光。数据库、NLP、音频处理与图像光照无关。就像全景照片灯光师只服务于片场,不会去管账房先生的算盘。
Q10. 关于 IBL 工程实践的描述,正确的有哪些?
- A.预计算结果可缓存为纹理← 正确答案
- B.动态环境需增量更新预滤波← 正确答案
- C.环境贴图必须用立方体投影
- D.漫反射与镜面反射互斥
答案:AB。预计算的辐照度图和预滤波贴图就是贴图资源,可缓存复用;夜晚到白天的动态环境需要渐进式重预计算。全景投影也可以做 IBL,立方体只是便于采样,非必须。IBL 最终输出是漫反射项与镜面反射项的加权和,二者共存而非互斥。