欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

三维重建的材料重构

最编程 2024-06-24 08:36:11
...

传统三维重建的研究方向一般只着重在几何形状的重建,比如结构光,多视几何等,对于材质这一块,通常的做法是利用已知位姿下拍摄的rgb图像,借助纹理映射生成一个纹理图像,即所谓的diffuse纹理。这样的纹理图像容易受到拍照时光照的影响,并且在渲染过程中无法再编辑。比如下图展示的花瓶,由于其表面具有较强的反射性,导致各角度的图像中出现了LED灯珠的倒影,这些倒影也会最终出现在重建的模型中,给人一种不真实的瑕疵感。在电商展示等领域中,用户往往希望展示的商品与真实情况更贴合,因此只是简单的纹理映射很难满足用户的需求。为了改善展示效果,需要在几何重建的同时进行材质重建,主要是从拍摄的图像中能分离出物体材质的diffuse及specular的反射属性。

vase.png

本文主要是在最近阅读的一些材质重建相关的文献基础上,加上自己的理解,做了一些整理,内容不一定全,用词也不一定准确,今后将随着理解的加深再慢慢修改。

在进行材质重建介绍之前,我们必须首先明确所谓的材质包含哪些具体的属性,而要说清楚这个,又必须得从物体的光照反射模型说起。

光照反射模型

光与物体的交互是一个很复杂的过程,可能会发生反射,散射,折射等一系列行为,对应的模型也多种多样,通常而言,越精细的模型能够更好地描述光与物体的交互过程。这里我们主要关注光的反射模型,我们考虑能将光大部分反射出去的物体表面,比如透明的物体就不适用。相对简单的光照模型有Phong模型,而在游戏渲染中通常使用的是PBR模型。本节内容主要摘自learnopengl.com

Phong光照模型

该模型把光经过物体以后被接受的部分分成三部分,ambient,diffuse,specular。ambient指物体对环境光散射呈现的光照,diffuse是指物体漫反射的光,而specular是指物体镜面发射的光。这里需要提一下直接光照(direct illumination)和间接光照(indirect illumination),简单理解可以认为,直接光照对应光源发出的光,而间接光照是指环境中的其他物体反射出来的光。因此,ambient对应的是物体对间接光照的反射,而diffuse和specular对应的是物体对直接光照的反射。通常来说,我们认为ambient部分会比较弱,diffuse部分是对物体颜色贡献最大的部分,而specular部分则可以给人带来光斑的效果。

phong.png

\begin{align*} I_{out} &= ambient+diffuse+specular\\ & = k_a*I_a + k_d*I_L * (L\cdot N) + k_s*I_L*(R\cdot V)^\alpha \end{align*}

其中,k_a,k_d,k_s分别代表ambient,diffuse和specular系数,I_a代表环境光强度,I_L代表直接的入射光强度,L代表入射方向,N代表物体表面法向,V代表观察方向,即出射方向,R代表入射方向经法向的对称方向,即绝对的镜面反射方向,参见下图其计算公式如下

R.png

\alpha叫做shininess,可以用来调节镜面反射的程度。这里提一下,如果我们定义中间向量(halfway vector)~H=\frac{L+V}{\|L+V\|},将specular中的R\cdot V替换成H\cdot N,我们得到的便是Blinn-Phong模型。二者从意义上来讲是一样的,但H的计算会比R的计算容易得多。

Phong模型中的diffuse k_d和specular k_s两部分,在渲染时,通常可以使用diffuse map和specular map来记录。

PBR模型

一种更复杂的模型是PBR(Physically based rendering),它更常用于游戏等各种渲染引擎。顾名思义,该种模型更贴近于物理模型,能取得比Phong模型更真实的渲染效果。模型可具体描述为

L_o(x, w_o)= L_a(x, w_o)+\int_{\Omega}f(x,w_i, w_o)\cdot L_i(x,w_i)(w_i\cdot n)\mathrm{d}w_i

其中,L_a表示环境光ambient部分,L_o,L_i分别代表出射光强度和入射光强度,可以由rgb值来描述,w_o,w_i分别代表了出射方向和入射方向,x代表了物体表面的点的三维位置坐标,n代表了该点的法向方向,\Omega描述的是以x为中心,nz方向的一个半球面,而f则是BRDF,描述的是物体在给定入射方向和出射方向下的反射幅度,或者可以理解为反射的权重。整个方程描述的其实是能量守恒定律,即入射光的能量等于出射光的能量,因此这里适用的情况是光几乎没有透射,也就是说透明的物体是再次不适用该模型的。

BRDF

BRDF的全称是Bidirectional Reflective Distribution Function,这里的bidirection指的就是入射和出射两个方向。由于它的值也和位置x有关,也有将其描述成svBRDF的,即spatially varying BRDF。由上述公式可见,svBRDF完全描述了物体的反射特性,仿照Phong模型,我们可以分解出diffuse和specular的分量,一般采用Cook-Torrance模型。

f(x,w_i,w_o)=f_d(x)+f_s(x,w_i,w_o)

需要注意的是,这里的diffuse部分f_d只与物体的三维位置相关,而与入射方向出射方向无关。说明这里的diffuse部分反映的是物体本身的颜色,这个颜色与光照是没有关系的。而f_s是与光的入射方向和反射方向相关的,这也好理解,对于一个光面的物体,我们从不同角度去看是会看到不同的反射光斑的。

f_d(x) = k_d*\frac{c}{\pi}

这里的c被称作diffuse albedo,可以理解为物体的颜色,加上光照模型积分里的w_i\cdot n项,diffuse部分与Phong模型的diffuse部分是类似的。这里的\pi是用来归一化积分的。

f_s(x,w_i,w_o) = \frac{D*G*F}{4(w_i\cdot n)(w_o\cdot n)}

注意到f_s的分母中,含有w_i\cdot n项,会和积分外的这一项消掉。公式中每一项的意义如下:

  • D: 法向分布函数(Normal Distribution Function),描述的是那些正好能反射到观察方向的表面占比(表面法向刚好与中间向量h重合)。一般采用Trowbridge-Reitz GGX分布,

    D=NDF_{GGX}(n,h,\alpha) = \frac{\alpha^2}{\pi((n\cdot h)^2(\alpha^2-1)+1)^2}

    这里的\alpha是用来描述镜面反射特性的一个重要参数,叫做roughness。它其实反映的就是物体表面局部的平整程度,\alpha=0代表绝对平整,而\alpha=1代表不平整。这里采用了Microfacet模型,即在微观上看,物体表面可以看做由一个个facet组成,\alpha实际上描述的是这些facet的法向的一致程度,越小代表一致程度越高。

  • G:被称作几何函数,主要是用来描述阴影和遮挡效应带来的光照损失,这里使用Schlick-GGX近似。

masking.png

shadowing.png

\begin{align*} G_s(n,v,k)&=\frac{n\cdot v}{(n\cdot v)(1-k)+k}\\ G(n,w_o,w_i,k)&= G_s(n,w_o,k)*G_s(n,w_i,k) \end{align*}

其中,k是由roughness~\alpha变换而来,对于直接光照情形

k=\frac{(\alpha+1)^2}{8}
而对于间接光照情形
k=\frac{\alpha^2}{2}
G将是一个介于[0,1]之间的数,主要是描述光照的损失。

  • F:描述Fresnel效应,即从不同的观察角度去看,得到的镜面反射分量是有区别的。根据这个解释,F其实就是对应了Phong模型中的k_sF一般使用Schlick近似

    F=F_0+(1-F_0)*(1-(w_o\cdot h))^5

    其中,

    F_0=\frac{(n_r-1)^2}{(n_r+1)^2}

    这里的F计算公式是根据实验数据拟合出来的,在UE4中这个公式略有不同,但都是基于快速计算的原则拟合出来的。n_r代表了物体的折射率。实际使用中,一般使用一个常数来代替F_0。这里需要提一下金属(导体)与非金属(非导体)的区别。由于金属和非金属的折射率差别很大,金属对应的F_0将远大于非金属,因此会引入一个金属度(metalness)的概念,它介于0到1之间,将会影响F_0的取值。与非金属的常数F_c对应,引入金属度后F_0的计算方法为
    F_0 = F_c * (1-metallic) + c * metallic
    F_0变成F_cc的线性插值,权重则由金属度来决定。如果认为光线全部都会反射出来,根据能量守恒,一般有k_s+k_d=1,而对于金属,由于折射的光全部会被吸收,不会再被反射出来,因此k_d将会变为0。引入金属度后,将有
    k_s = F, k_d = (1-k_s)*(1-metallic)

讲到这里,我们就可以介绍物体的材质主要包括那些信息了。一般会有如下一些属性:diffuse albedo(对应公式中的c),normal map(对应公式中的n),roughness map(对应公式中的\alpha),metalness map(对应金属度,没有显式对应)。上述属性都是逐点的,与位置相关,一般可存储在对应的UV map图,渲染过程类似于texture,事实上,这里的diffuse albedo就对应了一般的texture mapping中使用的texture图。之所以PBR会比较流行,是因为它所需要的材质map都有明确对应的物理意义,对于美术而言,在创造数资时可以通过调整map图的分布得到期望的结果。

上面的介绍中,还有一种常见的材质贴图没有介绍到,即AO贴图(ambient occlussion),它描述的其实是物体由于自身几何遮挡,对于环境光的损耗,而形成的暗的阴影效果。如果按照Phong模型中对ambient光的描述,可以简单写为
L_a(x, w_o) = k_a * c * ao
如果考虑复杂的环境光,则需要引入基于图像的光照(image based lighting, IBL),这里就不再详述了,总之ao是描述的对ambient光的损耗。

材质的重建

材质重建的问题描述与基于多视角RGB图的形状重建类似,一般是在不同的角度,不同的光照条件下拍摄了一系列的rgb图片,从这些图片中去恢复物体表面对应的材质属性:diffuse,normal,roughness等。根据硬件设置的不同,材质重建一般有几类方法,一类是基于light stage的,一类是基于可控光照的,还有一类是基于不清楚光照的条件的(或者称自然光照条件下的)。从已知相机和光源绝对位置,到已知相机光源相对位置,再到相机和光源都不可知,这几类的硬件越来越简单,问题的病态程度却越来越大,重建的难度也是越来越大。

Light stage

lightstage.png

light stage一般呈现为一个球形的笼子,被拍摄的物品放在中间,球形的节点上放置着led灯或相机。拍摄时,设备整体放置暗室中,led灯依次闪亮,而相机则从不同角度拍下物体的图像。与light stage高频同步出现的一个技术叫做光度立体视觉(Photometric Stereo),讲的就是基于上述测量来进行材质重建,一般是指法向的重建。

Photometric stereo

光度立体视觉问题,可以简化描述为,固定相机和物体位置,即拍摄方向固定,调整光源(一般是点光源,如lightstage中的led灯)的入射方向,拍摄不同入射方向下的图像,根据这一系列图像,恢复物体在该视角下的法向分布。这与立体视觉中拍摄多个角度的图像来进行几何重建有点类似,这也是它被称为stereo的原因,而又因为拍摄方向不变,只是光的方向发生改变,所以才叫做光度立体视觉。

Photometric_stereo.png

在最初始的模型中,假设物体是Lambertian的,即物体表面只有漫反射,且每个方向的漫反射强度都是一样的。基本的成像模型可以表述为

I=k(L\cdot n)

这里,k代表了反射率,按前述假设,它与方向无关,L代表了入射光的方向和强度矢量,而n代表了物体表面的法向。按照这样的假设,对于一个固定的像素点,其需要恢复的东西包括kn,而由于n是单位向量,所以实际上的未知数只有三个。因此,最少只需要有三个不同入射角的图像即可恢复法向信息。

显然这样的模型的适用性是有限的,首先就是它只适用于纯漫反射的物体,另外,它也无法恢复出除法向以外的其他材质信息。为了弥补这些缺陷,后续也有很多研究基于这种测量,利用机器学习的手段,提出了更复杂的模型去恢复材质。基于对材质的不同描述方式,一般会有两种套路,一种是直接使用BRDF,被称作non-parametric方法,而另一种是使用PBR材质,也叫做parametric方法。

直接使用BRDF的方法,假设物体的BRDF由几种已知的物体的BRDF线性组合获得。恢复材质的过程实际上是获取线性组合的权重的过程。比如DPSN,利用全连接网络,有两个分支,分别预测某个视角下的normal分布及权重分布,具体的网络结构如下

dpsn.png

输入是某一个视角(对应某一个相机)下不同光照拍摄的图像,对于其中某张图的每一个像素,由于相机位置没动,其在不同图像中的对应像素位置与其本身是完全一样的,以这一组像素的值为输入,最终能得到该像素处的法向n及BRDF权重c

而使用PBR材质的方法,则是直接用神经网络去回归出各个属性,比如deep 3d capture,以某一视角下的不同光照图为输入,经过一些全连接网络,最终输出该视角下的diffuse albedo,roughness等。然后,再通过某种聚合的手段,将上述per-view的map转化成对于模型per-vertex的map。

deep3dcapture.png

从上面的介绍中可以看到,几何的重建与材质的重建其实是可以独立分开进行的,因此在有些文献中,会通过引进第三方扫描仪来获取形状,再将其当做先验去重建材质。Lightstage这种方式目前在拍摄人脸方向使用挺多,应用场景主要是影视的制作,医美等。同时它的造价可以很贵,LED的数量也可多达几万个,并且由于人很难保持不动,还需要使用高速高帧率的相机进行拍摄。国外有一家创业公司M-XR,其视频展示了利用lightstage去重建物品的材质,效果也不错,他们就是使用第三方扫描仪来先获取形状。

Controllable light

在lightstage的配置中,光照和相机位置都是不动的,因此光照方向,强度,相机位姿等都可以通过预先标定的手段获得。lightstage的缺点在于设备昂贵且比较大,参考scanner,有人开始思考使用移动设备来进行重建。常见的思路都是将光照与相机绑定在一起,即光的方向与观察方向的相对关系预先可以知道。这样通过确定相机的位置,相当于知道了光与相机在空间中的分布。

文献中比较多的一类方式是采用相机+闪光灯的方式,被称作unstructured flash,拍出来的图像也被叫做photometric images。这种方式是在相机上绑定一个闪光灯,在每个视角拍摄闪光灯打亮的场景,通过拍摄的图像进行材质的重建。与lightstage不同的是,这种模式无法完成在同一个相机视角下,拍摄不同光照的图像,每次只能得到一张图像。

一篇常被提及做对比的文章是Nam et. al2018 。它采用的是non-parametric的方式,预先计算了几个基础的BRDF,这些值是通过我们上面提到的Cook-Torrance模型来实现的。由于每次拍摄都是孤立的入射方向和出射方向,反射方程中的积分可以被简化掉。文章通过相机标定及SFM获取内外参,利用MVS+Poisson来获取初始的几何结构及法向分布,然后利用非线性优化去优化基础BRDF的权重。文章采取迭代的形式,在优化完权重后,会将其固定再去优化几何结构等,以此往复。

nam.png

文章Schmitt et.al 2020与上述思路类似,区别在于它的形状是由RGBD sensor提供的,并且只是将BRDF中的specular部分做了线性分解。

rgbd-unstructrued.png

文章IRON则是利用了神经网络来完成重建。它首先利用一个NeuS网络去完成几何(SDF)的重建,同时获得一个feature向量。以该向量结合位置及法向,分别利用三个全连接网络去恢复diffuse albedo (c),specular albedo (k_s?)和roughness (\alpha)。文章Sai et.al 2020与上述方式均有些区别,它将volume rendering和反射方程结合起来,重新构造了测量的光照值与BRDF参数的对应模型。

在Nerf类文章中,volume rendering通常这样表达

\begin{align*} L(c,w_o)&=\int_0^{\infty} \tau_c(x)\sigma(x)L_s(x,w_o)\mathrm{d}t\\ \tau_c(x)&=\mathrm{e}^{-\int_0^t\sigma(c-uw_o)\mathrm{d}u} \end{align*}

即最终测量的rgb值会是观察视线上所有rgb值的加权。在Nerf中,我们只需关注L_s(x,w_o),将其化作一个MLP,即可进行额外视角的合成。而在材质重建中,我们可以将L_s利用反射方程进一步描述成BRDF的函数,由于入射方向和出射方向固定,可以省略积分得到

L_s(x, w_o) = f(x, w_o, w_i)*L_i(x, w_i)*(w_i\cdot n)

综合起来,就可以得到测量值与BRDF之间的关系了,再利用Nerf一样的手段,可以去同步重建几何结构和材质。

还有另一类方式,采用一个light pattern去照射物体,这类方式主要是在浙大的研究论文中出现。他们的网络设计并不直接去拟合BRDF的参数,而是引入了lumitexel的概念,大概就是一个围绕物体点的cubemap,通过在同一个视角变换不同的lighting pattern,去拟合测量值与lumitexel之间的关系。最后,再通过BRDF的具体模型,利用优化的手段去拟合相关参数,以能达到同样的cubemap。文章Kang et.al 2019就使用了一个类似lightstage的装置,通过控制led的开关,实现投射不同的light pattern到物体上。

control.png

lumitexel.png

而文章Ma et.al2021则使用第三方扫描仪先获取物体的三维结构,再利用物体三维结构去帮助做位姿求解,然后可以较精确地得到不同视角图像下的对应像素。对于每个三维顶点,以其在每幅rgb图中的测量值,加上自身在该视角下的3D位置,法向,切向等信息,为网络的输入,输出则是该点的lumitexel,再利用BRDF的拟合,完成各个材质属性的估计。

ma.png

ma_pipeline.png

国内的相芯科技即是利用了浙大的技术,主要做文物的展示,以达到“流光溢彩”的程度。

Unknown illumination

对于光照不明的情形,反射方程中又多了一个未知项L_i,于是问题变成了需要同时重建形状,法向,材质和光照。通常对于环境光照,是采用cubemap的方式来描述,假设每个面的分辨率为512\times512,那一共需要估计6\times512\times512个光照相关的参数。也正是由于需要求解的参数量变多了很多,重建问题也会变得更加ill-posed。文献中,一般会首先将形状部分的重建分离出来,比如NeRFactor中使用预训练的NeRF来估计形状,nvdiffrec中使用DMTet来估计形状。在基于形状获得的基础上,再类似于Nerf的机制,利用神经网络构造三维表面点到材质属性的MLP,再利用渲染出来的二维图像与拍摄的二维图像对比进行优化。不同的方法中的细节会有所不同,但大的原则是如上所述的,以下给出的是NeRFactor的流程。

nerfactor.png

其他

在查看文献中,还有提到使用polarizer的。一种方式是在光源和相机前面均加上线性偏振片,通过这种物理手段可以有效地去除一些specular的效果,将得到的偏振图像当做diffuse albedo即可。还有一种方式是只在光源前加偏振片,这样对应的成像模型就不能由上述反射方程来描述,会有专门的偏振模型,这里就不再说明了。(我也没看懂。。)

参考文献

  1. https://learnopengl.com/PBR/Theory

  2. Santo, Hiroaki, et al. "Deep photometric stereo network." Proceedings of the IEEE international conference on computer vision workshops. 2017.

  3. Bi, Sai, et al. "Deep 3d capture: Geometry and reflectance from sparse multi-view images." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2020.

  4. https://www.m-xr.com/

  5. Nam, Giljoo, et al. "Practical svbrdf acquisition of 3d objects with unstructured flash photography." ACM Transactions on Graphics (TOG) 37.6 (2018): 1-12.

  6. Schmitt, Carolin, et al. "On joint estimation of pose, geometry and svBRDF from a handheld scanner." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2020.

  7. Zhang, Kai, et al. "IRON: Inverse Rendering by Optimizing Neural SDFs and Materials from Photometric Images." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2022.

  8. Bi, Sai, et al. "Neural reflectance fields for appearance acquisition." arXiv preprint arXiv:2008.03824 (2020).

  9. Kang, Kaizhang, et al. "Learning efficient illumination multiplexing for joint capture of reflectance and shape." ACM Trans. Graph. 38.6 (2019): 165-1.

  10. Ma, Xiaohe, et al. "Free-form scanning of non-planar appearance with neural trace photography." ACM Transactions on Graphics (TOG) 40.4 (2021): 1-13.

  11. https://www.faceunity.com/

  12. Zhang, Xiuming, et al. "Nerfactor: Neural factorization of shape and reflectance under an unknown illumination." ACM Transactions on Graphics (TOG) 40.6 (2021): 1-18.

  13. Munkberg, Jacob, et al. "Extracting Triangular 3D Models, Materials, and Lighting From Images." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2022.