Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Inverse Rendering

逆向渲染从照片反推出生成照片的形状、材质、光照和相机参数,从而实现重新打光和材质编辑。

逆向渲染是从一张或多张图像中还原其背后物理场景的过程,包括物体的三维形状、表面材质、照明以及拍摄图像的相机。计算机图形学中的渲染是正向过程,会将场景描述转换为像素。逆向渲染则沿着相同的物理过程反向运行,寻找能够重现观测照片的场景参数。它位于计算机视觉与图形学的交汇处,也称为逆向图形学。Stephen Marschner 在康奈尔大学完成的 1998 年博士论文《计算机图形学中的逆向渲染》,将从照片中还原照明和表面反射率表述为这类逆问题。

通过合成进行分析#

大多数逆向渲染方法都遵循一种称为“通过合成进行分析”的循环:先猜测场景,渲染场景,将结果与真实照片比较,再调整猜测以缩小差异。可微渲染能让每次调整都更高效。渲染器会报告每个像素相对于每个场景参数的变化情况,因此梯度下降可以一次更新数千个参数,方式与训练神经网络时的反向传播相同。像 Mitsuba 3 这样的基于物理的可微渲染器,还能将这一方法扩展到阴影、反射以及表面之间的光线反弹。

对于最简单的场景——由一个远处光源照亮的哑光球体——只需几行 PyTorch 代码就能实现这个循环。代码片段使用优化器看不到的光线方向和表面亮度(反照率)渲染目标照片,然后仅凭像素还原这两项参数,并使用 Adam 优化器:

import torch
import torch.nn.functional as F

# Unit normals of a sphere seen head-on, on a 64 x 64 pixel grid
y, x = torch.meshgrid(torch.linspace(-1, 1, 64), torch.linspace(-1, 1, 64), indexing="ij")
z = (1 - x**2 - y**2).clamp(min=0).sqrt()
normals = torch.stack([x, y, z], dim=-1)[z > 0]

# Lambertian "photo" lit from a direction the optimizer never sees, with albedo 0.8
photo = 0.8 * (normals @ F.normalize(torch.tensor([0.6, -0.4, 0.7]), dim=0)).clamp(min=0)

# Fit light direction and albedo: render, compare with the photo, follow the gradients
light = torch.tensor([0.0, 0.0, 1.0], requires_grad=True)
albedo = torch.tensor(0.3, requires_grad=True)
optimizer = torch.optim.Adam([light, albedo], lr=0.02)
for _ in range(500):
    render = albedo * (normals @ F.normalize(light, dim=0)).clamp(min=0)
    loss = (render - photo).pow(2).mean()
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

print(f"Light direction: {F.normalize(light.detach(), dim=0).numpy().round(3)}, albedo: {albedo.item():.3f}")

它会精确打印出隐藏值 Light direction: [ 0.597 -0.398 0.697], albedo: 0.800。生产系统保留相同的循环,但会将单行着色模型替换为完整的光传输模型,待求参数也会扩展到网格、纹理贴图和环境光照。

问题为何存在歧义#

许多不同的场景都能生成相同的图像。暗斑可能是颜色较深的涂层、阴影,也可能是背离光源倾斜的表面;亮斑则可能来自光泽材质,也可能是灯具恰好放在某个位置。亮度本身也存在歧义:光照增强一倍、反照率减半,像素结果仍然相同。这就是代码片段要对光照方向归一化,并让反照率承载全部亮度的原因。方法主要通过以下三种方式缩小答案范围:

  • 更多观测:从多个视角拍摄物体,或像光度立体法那样在几种已知光源下拍摄,比只拍一张照片更能约束形状和材质。
  • 学习到的先验:在大量渲染场景上训练的网络,可以根据单张图像预测可能的法线、材质或照明,为优化器提供良好的初始值。
  • 已知几何:如果形状来自深度传感器或深度模型,剩下的未知量就只有材质和照明。

单张图像的深度估计可以为普通照片提供这种几何信息。Ultralytics YOLO26 深度模型能从单张 RGB 图像预测以米为单位的逐像素深度图;根据深度图梯度计算出的表面法线,就是球体示例中已知的明暗几何信息。

逆向渲染与重建、神经渲染的区别#

三维重建会还原几何信息,通常使用运动恢复结构和多视图立体视觉,并且通常会将拍摄时的照明烘焙进表面颜色。神经辐射场和高斯泼溅也使用相同的渲染并比较循环进行拟合,但它们会建模场景从各个方向看起来的样子,而不将表面与光源分离,因此其新视角会保留原始照明。逆向渲染的目标正是实现这种分离,从而支持重新布光、编辑材质以及逼真地插入虚拟物体。近期许多方法会结合深度学习,在辐射场中加入反射率和照明模型,拓展更广泛的神经渲染领域。

资产采集、AR 与视觉特效#

  • 3D 资产采集:零售商和游戏工作室会扫描真实产品并生成 3D 资产,为颜色、粗糙度和表面法向量分别生成贴图,让同一个模型在商品页面或游戏引擎中都能适应任意光照正确渲染。
  • 增强现实:Google ARCore 等 AR 框架会根据摄像头画面估计房间照明,让虚拟物体呈现匹配的着色、阴影和反射。
  • 视觉特效:Paul Debevec 及其同事于 2000 年推出的光照舞台装置,会在密集分布的多个照明方向下拍摄表演者的脸部,以还原其反射率,让工作室能够重新照亮数字人脸,使其与任意镜头匹配。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来