回答这个问题就必须提及传统的渲染流程。
在一个真实场景中,往往有多个物体,有多光源,光源发射的光线在物体表面进行了折射和反射。
相机是连接3D世界和2D图片的桥梁,当相机在拍照时,经过物体折射或者反射的光线进入到相机中,最终成像。
传统渲染流程中,图片上像素的位置,是将世界坐标系下物体每个点的位置,经过相机坐标系,归一化相机坐标系,最终得到像素坐标系。同时,对3D世界中的光源和物体建模,模拟光照位置和强度,模拟物体的材质、纹理、反射率等属性。最终渲染方程基于这些参数最终计算物体的颜色。
在传统渲染流程中,这些光照和物体的,是事先人为确定好的。需要大量调试和人的经验来确定这些参数,这些参数被明确的定义和存储在某种形式的数据结构中。————这就叫做显式表示
那么当我们已知2D图片,想要重建3D场景时,就会面临三个问题:
1、根据图片推测光源的位置、强度,场景中物体的材质,建模难度巨大。
2、传统的三维重建算法需要手动设计和提取特征,无法捕捉到所有重要的信息,对噪声、遮挡、光照变化等因素,鲁棒性较差。在遇到复杂场景时,重建结果不准确。
3、传统算法泛化能力较差,往往是针对特定数据集进行设计的。
而神经网络就是代替过去手动提取特征的过程,用多层次的网络结构,来捕获图片中复杂的特征,通过对比真实图片和生成图片的差距,不断优化网络的参数,形成复杂的非线性方程。说白了,神经网络可以学的多,学的细,而且可以适配不同的场景。正是因为这些方面的优势,才让神经网络异军突起,成为研究的热点。