现实虚拟化:从三维重建到逆渲染(Inverse Rendering)

时间:2023-02-02 17:02:21

作者:KirFrank@知乎(已授权)

原文:​https://zhuanlan.zhihu.com/p/568205134​


三维计算机视觉可以分为两个主要问题:三维重建(3D Reconstruction)和三维理解(3D Understanding),前者侧重于从图片恢复出场景的几何表示,后者侧重于提取出场景中实体的空间关系和语义信息。

三维重建已经是一个被深入研究的问题,其中涉及到的知识包括基础的多视角几何(Multiple view geometry),状态估计(State Estimation),优化理论,到​​图像处理​​/视觉中特征点检测、图形学中的几何表示和处理等等。

基于视觉的三维重建将输入的一系列图片转换为几何模型。尽管三维重建可以帮助我们采集场景的几何结构,对于三维测绘、自动驾驶等场景具有极大价值,但如果我们想要感受真实世界一样,那么三维重建的结果远远不能满足我们人眼的要求。同时,由于和真实世界的差距,利用三维重建出的模型训练深度网络也会产生一些泛化性的问题(Domain Gap)。这样,逆渲染(Inverse Rendering)可以在三维重建的基础上,进一步恢复出场景的光照、材质等信息,从而可以实现更具真实感的渲染。

什么是逆渲染呢?我们先说渲染是什么。渲染(Rendering)是图形学的三大问题之一,除此之外还包括几何(Geometry)和动画(Animation)。给定一个虚拟三维场景的描述(包括模型、位置关系、光照等),渲染过程将3D的场景转化为2D的图片。而逆渲染则是渲染的逆过程,给定一系列照片,恢复出场景的几何、光照和材质。

因此无论是三维重建和逆渲染,都可以视为图片和场景之间的一个桥梁。在介绍其流程之前,我们先介绍下照片和场景的本质。

01  照片的本质

照片本质是三维世界在二维平面上的一个投影。我们通过相机中的图像传感器阵列来记录场景中物体表面发出的光线的颜色(RGB)。因此图片中的每一个像素对应了三维空间中的一个点,而这样一个对应关系通过相机模型(Camera Model)来表达。相机模型有一系列相机参数,称为相机的内参(Intrinsic)。最为常见的就是针孔相机模型(Pin-hole),全景相机(Omnidirectional)等等。

现实虚拟化:从三维重建到逆渲染(Inverse Rendering)

​https://mphy0026.readthedocs.io/en/latest/calibration/camera_calibration.html​

02  场景的本质

虽然我们一直说三维重建要恢复场景,那么到底如何表示场景呢?简单来说,场景(Scene)可以由多个物体(Object)组成。场景可以通过物体本身的模型以及之间的相对位置关系来描述。我们可以对每个物体赋予一个坐标系,并且定义一个世界原点。这样,无论是什么样的物体,我们都可以通过坐标系之间的相对坐标系变换来表示,包括位置(Translation)和旋转(Rotation)两部分,简称位姿(Pose)。同样的,作为拍摄场景的相机(Camera),也可以视作一个特殊的物体。

现实虚拟化:从三维重建到逆渲染(Inverse Rendering)

http://www.codinglabs.net/article_world_view_projection_matrix.aspx

不过通常来说,在三维重建中我们主要将场景中的所有物体视为一个整体,用单个模型来表示。对于一个模型,我们分成几何结构(Geometry)、材质纹理(Texture/Material)及其映射关系来表示。对于几何表示,我们主要关心的是物体的表面(毕竟里面看不到),因此我们可以用最基础的Point Cloud,即一系列3D点的集合来表示。也可以再增加点与点之间的连接关系,通过一系列的面片来表示,也就是Mesh。

现实虚拟化:从三维重建到逆渲染(Inverse Rendering)

03  如何从照片恢复场景

由于逆渲染一定程度上包括了三维重建,我们先说说如何进行三维重建。经典的三维重建可以分为三步:

  • 从多个视角的照片恢复出各视角的相机位姿,以及场景的稀疏结构——SfM
  • 估计出各个视角的深度图,从而得到单视角的点云——MVS
  • 融合各个视角的点云,并进行表面重建——Surface Reconstruction

这一技术路线已经有相当成熟的开源工作和产品,如Colmap,RealityCapture等。

当然,深度学习方法也可以与经典方法结合,在某些情况下可以起到明显作用。如SfM中的特征点检测,利用深度网络可以更好地处理纹理缺失、运动模糊的情况,或者MVS中利用深度模型进行深度估计。

同时近两年端到端的表面重建方法效果上也逐渐超过了经典方法,如IDR、VolSDF,NeuS等,这些方法利用深度网络来将输入图片直接嵌入进网络中,进而提取出Mesh。

现实虚拟化:从三维重建到逆渲染(Inverse Rendering)

VolSDF

04  如何进一步恢复材质和光照

利用三维重建方法得到物体的几何模型后,我们可以进一步通过逆渲染技术恢复出物体的材质、场景的光照,从而可以在新的光照条件下实现更具真实感的效果。

光照是场景中能量的来源。对于物体为中心的场景,常通过环境贴图(Environmental Map)来表示。材质则决定了光线如何与物体表面进行作用,比如反射、散射或透射。光照、材质、几何与图片之间的映射关系,则通过渲染方程(Rendering Equation)来描述。

现实虚拟化:从三维重建到逆渲染(Inverse Rendering)

逆渲染可以分成两个子问题:

  • 光照恢复(Inverse Lighting)
  • 材质恢复(Inverse Material)

对于光照恢复,经典方法通常构造一个最小二乘优化问题或以矩阵分解的方式来求解光照,使得该光照能呈现出与观测到的照片相同的效果。但由于这一问题的病态性(ill-posed),导致多种光照设定都能呈现出相同的结果,因此需要一些特殊的正则化来保证光照的合理性。

而对于材质恢复,如果想要获得较为准确的结果,则需要已知光照条件下求解。实际中通常会对物体在不同角度下打光,观测物体表面的反射情况。

而随着可微渲染(Differentiable Rendering)以及神经渲染(Neural Rendering)的爆发增长,我们可以利用渲染方程作为桥梁,直接优化未知的光照和材质参数,使得问题大大简化。

现实虚拟化:从三维重建到逆渲染(Inverse Rendering)

PhySG

Reference

[1] https://colmap.github.io/

[2] http://graphics.stanford.edu/~srm/thesis/index.html


  1. ​神经渲染技术在自动驾驶领域应用​
  2. ​六问Nerf | 简单易懂的神经辐射场入门介绍​
  3. ​ECCV2022 | PCLossNet:不进行匹配的点云重建网络​
  4. ​下载 | 101篇NeRF优质论文推荐(含项目代码)​
  5. ​详尽 | PyTorch动态图解析​
  6. ​精华文稿|在非理想输入下NeRF的重建​