摄影制图法(Photogrammetry) — Reality Capture使用教程(一步接一步)

摄影制图法(Photogrammetry) — Reality Capture使用教程(一步接一步)

(本文系作者原创,版权归原作者所有,转载请注明出处)

什么是摄影制图法(Photogrammetry)?

简单粗暴的理解,摄影制图法就是通过对一个三维实体从各个不同的角度重叠覆盖拍摄相当数量的照片,然后通过某种神奇的算法,(电)脑补出该实体的真实样貌。

做个不恰当的比喻,就好像你围着一个雕塑仔细看了一圈,然后凭借记忆重新雕(复刻)一个一模一样的模型。

为什么用Reality Capture?

Reality Capture算是目前市面上最好的摄影制图法软件,其优点我就不一一列举了(用就对了...),有兴趣的朋友可以上其官网上自己了解一下。

缺点也很明显:就是贵!不过现在有一个新的收费方式叫做PPI (PAY-PER-INPUT = 每输入一次付一次的钱),这种方式可能对不常用的用户来说稍微便宜一些,我不评论因为我没用过这种收费模式。

有兴趣的朋友也可以去看一下我的sketchfab账号,里面有我上传的几个我个人的摄影制图法作品:

Ok,打完广告,我们步入正题:

预备阶段 — 拍照:

(以下是Unity出品的摄影制图法工作流程指南,篇幅非常长,特别细致,好处是对于有一定基础的技术人员来说是一本很不错的查漏补缺的教程,但是对于新手来说,有点过于繁琐,我未来会陆续推出简化版的覆盖以下(1)(2)(3)的教程,但是如果对于还不会拍照片的朋友不妨先看看Unity的官方教程。)

以下是英文原版pdf文档,这版是2017年推出的。2019了,随着技术的进步,一些手续其实已经不需要做了。但是依旧是非常好的参考书目!建议英文水平好的朋友可以花点时间研究一下。

Reality Capture使用流程:

假设我们已经具有了300+张清晰全面的RAW格式照片。(怎么拍照,我会在接下来的教程中详解)

(备注:因为目前Reality Capture只有英文版本,所以以下我可能会更多的使用英文以便于理解实际中的操作。)

基础的用户使用界面

第一步:Add Imagery

有两种导入方式,一种是导入图片,另一种是导入文件夹(内的所有图片)。我的建议是使用第一种,因为届时可以取消选定你觉得图片质量不好的图片。

第二步:Alignment - Align images

同样也有两种途径进行图片匹配 (Align Images),效果都一样,看个人使用习惯。这一步是计算cloud points。

第三步:Add Control Points (不是必须的步骤)

添加Control Points(控制点)的目的是为了弥补电脑自动图片匹配后,产生的cloud points效果不佳的情况。

具体再解释一下,Reality Capture会识别颜色差,找出不同位置拍摄的照片中相同的像素点,然后通过相同的像素点重建3D模型(mesh),但是如果图片拍的不好,覆盖区域太少,或者被复制模型颜色单一,很难分辨出相同像素的点,那么就需要人工添加Control Points以告诉RC哪些点是相同像素点。

因为这一步用图片解释起来非常困难,所以请大家移步油管看下面的教程。

Work with Control PointsqDY

第四步:Change perspectives in the scene

这一步的目的是调整视角,以便缩小重建区域(只重建我们需要的部分,同时也可以缩短花费的时间),并且也可以为将来有效地清除模型中我们不需要的部分做准备。

第五步:Define Ground Plane

这一步是为了将pivot point放置在mesh正中心,y=0的位置,以便将来放置到AR场景中时,模型不会漂浮在表面上。

第六步:Set Reconstruction Region

缩小重建区域,剔除掉多余的部分。以便加速重建进程,节省耗时。

第七步:Normal Detail

这里是形成模型的mesh。

第八步:观察mesh是否是残缺的

如果残缺,执行下面步骤:

_Control Points (这里这步则变成必须的了)

_Align Images

_Change Perspective in the Scene

_Set Reconstruction Region

_Normal Detail

如果效果不错,执行以下步骤:

第九步:用Lasso Tool清除多余的部分

1-点击Lasso(套索) 2-选中不想要的部分 3-点击Filter Selection删除选中的多余部分。

第十步:Simplify to a high poly model (简化为高多边形模型)

备注:我这里用的是high poly to low poly的工作流程。

如果不适量的降低poly count(多边形数量),结果就是模型文件所占的空间会巨大,随随便便几个G。所以这里,我选择使用Simplify Tool,将模型的triangle count降到一百万。即使降到一百万,这个模型依旧太大,将来我们还要继续降低poly count,这个high poly模型只是一个样本,我们在更后期(Maya中)只会用它作为baking texture的原料,不会用到最终的场景(AR里)。

第十一步:Smoothing Tool (顺滑工具...我自己翻译的咋感觉有点别扭)

这个工具的效果不是很明显,但是我总是习惯性地顺滑一下...

第十二步:Colorize

这一步是给mesh上色。

第十三步:Unwrap (展开,我个人觉得翻译成扒皮更合适 hhhh)

这一步其实是为了接下来的texturize(添加纹理)做准备,具体概念我也有点解释不清楚,但是这一步非常重要。我这里选择8192*8192是因为我们现在处理的是high poly model,为将来在Maya中baking texture做准备。这里的数值越高,baking texture完的效果就越好。

第十四步:Texturize (添加纹理)

顾名思义,添加纹理。

第十五步:导出high poly model

注意,Export textures要勾选Ture,图片的格式建议选择.tiff,png也可以吧,但是我一般选.tiff。

完成到这一步high poly model就制作好了。接下来要做的就是重复以上的部分步骤,制作一个low poly model。Low poly model会在Maya中充当受体,baking texture时,接受刚刚做好的high poly model的高分辨率texture。

第十六步及以后:重复以下步骤

_Simplify to low poly model

这时候就可以根据模型的复杂程度,凭经验估算合适应该简化的poly counts,一般来说我会尝试简化到300k,100k,50k。

_Check integrity (不必须)

_Smooth

_Colorize

_Unwrap

这次扒皮就不需要8192这么高的分辨率了,对于low poly model, 一般来说用2048*2048或者1024*1024就够了。

接下来重复以下步骤

_Texturize

_Export low poly model with texture

总结:

大功告成!我们在Reality Capture里的(3D重建)的步骤就完成啦。现在我们拥有了两个模型,一个high poly和一个low poly模型。接下来,我们还需要经过其他几个大步骤才能最终得到理想的,我们可以在AR场景中使用的最终模型。

我们只完成了浅黄色的部分,还有接下来好多步...路漫漫其修远兮!

摄影制图法需要大家亲手去实践才能真正理解其中的奥妙,希望大家可以动手去试试!Get your hands dirty!

(本文系作者原创,版权归原作者所有,转载请注明出处)

额外参考:

编辑于 2019-11-02 14:56