Photogrammetry 完全指南

原文地址 https://80.lv/articles/full-photogrammetry-guide-for-3d-artists/

本文为有道翻译+人工修改,有些地方可能翻译不准确,请大家及时在评论里反映。


Vlad Kuzmin 分享了很多摄影测量的技巧。学习如何扫描真实世界的物体,清理和渲染。.

指定计划

    一个好的摄影测量的成功取决于正确的计划。这意味着不仅仅是充满电的相机电池和相机三脚架。而且不只是良好的阴天或合适的工作室扫描设置。在你开始疯狂拍摄之前,首先你需要估计一下你的目标是如何拍摄的。如果你在室外拍摄,你需要检查你的物体,光线条件和物体周围的可用路径

    在你计划拍摄的物体周围有足够的移动空间是很好的。你应该在物体周围有3到5米的可用空间,为了拍摄特写镜头,你需要达到至少比物体高50cm(物体高度为3米)。

 

预习

    良好的扫描练习:在物体周围至少有一个每10度的增量(大概一圈能拍36张图),整个物体要包含在图像中。为了获得更好的结果,您可以从不同的角度创建更多的循环(一圈)。这些图像给摄影测量软件一个“基本框架”。这个“框架”将被用于更近距离拍摄的对齐和深度计算。  

    接下来就是中距离和近距离镜头:如果第一个距离在3米以外的物体,中距离是1.5米,近距离是50厘米。中距离镜头要衔接上近距离和远距离。

    在远距离图像中,一枚硬币看起来像一个点,在近距离图像中,硬币是清晰的细节。特征(连接点)检测算法不能识别一个图像中的点和其他图像中的一个大硬币。这就是为什么中间步骤是必要的。

    在中距和近距镜头,我们需要记住所有的表面。扫描对象的每边都需要拍摄:背后,上面,较低的,内侧,等等,每一个点的每个表面都需要至少2 – 3个图片,一个正对的和两个轻微的偏10°-15°。

    我看过很多由爱好者拍摄的照片,他们的膝盖、腋下、椅子的底部、桌子的底部、屋顶的底部,甚至雕塑的顶部(很常见的问题)都被完全遗忘了。

    不要忘记适当的重叠:每个镜头都需要与下一个镜头重叠至少60%(80%以上甚至更好)。

    好的摄影测量三维扫描需要多少张图片? A post with advice on taking images for photogrammetry scan.

    避免全景拍摄(相机停留在三脚架上,而你只旋转相机)。摄影测量软件可以看到一个全景图像。这样的图像没有视差的变化,因此没有深度信息来计算网格的细节。或者软件不能正确地对齐这些图像。

    当你有一个关于物体的基本计划并且已经知道需要额外注意的物体的部分时,你就可以开始拍摄了。

    拍摄,小侧步,拍摄,小侧步,拍摄…完成循环后,举起相机,开始下一个循环等等。

在一些光照条件下,例如,一个洞穴中的物体和一个比其他颜色更深的物体,最好使用其他的技术。从下面拍摄,再将摄像机向上移动,以此类推。在那之后,做一个小的台阶,重复垂直运动,但从上到下。从下面到顶部。

    如果你是这样拍摄的,你可以调整相机的设置,这样物体的任何背光的一面都不会曝光不足,光线也不会曝光过度。在此过程中,您应该避免在相机上更改ISO设置。具有不同ISO设置的图像往往有不同的“噪点模式”或噪点等级。不同ISO的图像需要分别进行预处理。

    你应该始终遵循物体的形状和曲线。拍摄需要是正对着,或者仅仅是与表面的一个轻微的角度。

    当你知道你有所有必要的图像,比如雕塑头的顶部,背面,向下看的表面等等,现在是最后的“绝杀”镜头的时候了。这些可以是最复杂的表面的随机照片,或者是脸部、眼睛、耳朵、手掌等精细细节的表面,这样做是为了确保我们没有遗忘任何东西。

    我们需要记住,图像需要尽可能的清晰。此外,场地的深度需要尽可能大。如果你使用的是单反相机或无反光镜相机,你应该已经知道如何实现这一点。

    你甚至可以使用一部好的智能手机。iPhone有一个很好的摄像头,可以用于高分辨率的摄影测量和亚毫米分辨率。只有获得良好的纹理是后处理中更困难的一步。

    我知道从40-90张图片中得到好的结果总是很棒的,你会从更多的图片中得到更好的结果。如果你使用智能手机,你可以使用300-500张照片或两倍以上的相机。少数图像不是我们的选择。拍完所有必要的照片后,是时候回到办公室了。

 

删除旋转标签

    几乎所有的照片编辑软件都会根据你使用的相机旋转自动旋转图像。你会在屏幕上看到“正确的方式”。

    通常,对于现代摄影测量软件来说,旋转图片不是一个问题,但垂直用相机拍摄的照片可以旋转90°和270°,被视为不同的透镜组,并不总是可取的。

    这就是为什么通过使用ExifTool或ExiftoolGui来删除摄像机旋转EXIF标记是明智的。

exiftool –Orientation=1 -n image.ext 或

exiftool –Orientation=1 –n *

    对于批处理,从选定文件夹中的所有图像中删除此标记。

    如果你的专用相机只用于摄影测量,你可以在相机设置中禁用图像旋转。

 

预处理

    如果我告诉您任何预处理的数据集总是比未处理的要好呢?嗯,你的相机很好,你的照片在Instagram上看起来很棒。是的,可以用原生的iPhone相机应用程序拍摄并进行适当的扫描。但是,最好是在原始的和预处理的图像中进行拍摄,以获得更好的对齐、网格和纹理。

    人类的眼睛比任何摄影测量软件都能看到更多的细节。这就是为什么我们需要应用预处理-我们将帮助摄影测量软件识别细节,特别是在阴影和照明区域。

    我个人的偏好是在Adobe Photoshop中使用CameraRAW。Lightroom、DxO Optics,、Affinity Photo或其他免费或付费的图像处理工具也可以使用。我们需要修复曝光,减轻阴影部分,使照明区域变暗。我们也可以去掉色差。去除噪点并锐化图像。但是要小心,因为图像不能以任何方式被扭曲。

    纠正镜头扭曲是严格禁止的!图像处理工具的校正并不是摄影测量的校正。你需要强行取消相机、Lightroom、DxO或其他你使用的照片编辑软件的镜头畸变校正。否则,您将会损坏执行正确的摄影测量过程所需的数据。

 

 

对于大多数户外扫描,我使用这些设置。是的,他们是强大的

曝光: 从 +0.0 到 +1.5
(取决于光照条件。通常情况下,图像会被曝光不足。)

Lights: 从 -50 到 -100
Shadows: 从 +50 到 +100
Lights: 从 -50 到 -100
Blacks: 从 +20 到 +100

你可以添加更多的细节对比清晰,抖动,和Dehaze(除雾)…低ISO图像,默认的降噪和锐化就足够了。但是“细节”设置最好设置为零。

    我更喜欢通过Adobe Photoshop进行批处理图像处理,并使用动作脚本与CameraRAW打开图像。该脚本可以运行一些额外的过滤器、操作或插件。我可以稍微调整一下每个数据集的脚本。

    预处理的基本思想是在阴影和光线中增加细节的可视性,增强细微对比度。

    注意:所有的过程都需要16位,并且输出16位tiff/png。导出也可以是8位JPG, 100%的质量。16位就足够了(是的- 如果你知道数学和图像处理的基础知识,8位JPG图像可以提供16位纹理)。

 

REALITYCAPTURE:

    如果这个词让你感到害怕那我很抱歉,但是没有其他的摄影测量工具能替代RealityCapture.的能力。不仅因为它的速度快,而且与其他工具相比,更高的模型细节和很低的硬件要求。所有的计算,除了对齐相机RealityCapture 使用out of core。想象一个30亿的多边形网格在16Gb内存!这种能力也适用于非企业用户。

也许价格会有点高: 3个月为99欧元(33欧元/月)。但是在一些国家,这就像在餐馆吃饭一样(…………)。

其他竞争对手(同类软件)的成本就像喷气飞机,或者像糖蜜一样慢(-.- 小心得罪人)。

这就是为什么我要使用RealityCapture,因为我想本周从扫描中获得所有可能的细节。

注意:即使16Gb内存足够,32Gb的内存更适合工作。

 

– Dude, I don’t like cats!
– You just don’t know how cook them!

为什么RealityCapture会带来坏的结果的两个原因:

     第一个原因——你不知道如何“烹饪”RealityCapture! (使用)
     第二个原因——你不知道如何“拍摄”图像!

第二个是人们使用RealityCapture获取不良结果的主要原因。垃圾进垃圾出!

如果你有一个好的数据集,结果应该是不可思议的。你可以用一部iPhone 6相机,在高度为3米的物体上达到0.5毫米的分辨率。

    你可以在开发人员的网站上,或者在SketchFab博客上找到RealityCapture的基本工作流程。你也可以在应用程序本身找到更多的建议。帮助文档是最有好的,您可以很容易地找到对任何选定工具的解释。RealityCapture (RC)提供的是对所有摄影测量步骤的完全控制。默认设置足以从良好的数据集获得良好的结果。然而,不是完美的数据集需要一些微调,这可以通过为每个数据集裁剪必要的设置来实现。

 

REALITYCAPTURE—设置

缓存位置:

    在默认情况下,RC使用一个系统临时文件夹,用于所有临时文件(可以从120-150Gb到平均12-24Mpx图像数据集)。一旦项目中的文件被使用,或者您同时使用多个项目,最好将缓存位置设置为专用的大型SSD (512Gb或更多)或快速HDD。RC的90%或所有操作out of the core,所有临时文件都被写入到缓存目录中。这些临时文件可以在稍后的步骤中被RealityCapture重用,并且可以大大加快计算速度。我的建议是将缓存位置设置为另一个驱动器,例如,Z:/RC_TEMP。在此之后,需要重新加载RC。

 

相机使用EXIF分组

    没有理由不使用这个设置。启用分组可以帮助您避免错误的相机和镜头判断。RealityCapture通过一个镜头组中的所有图像来计算这些参数。我强烈推荐这款“带主镜头相机”的转盘扫描。对于多摄像机设备来说,分组是不必要的。

有两种方法对图像进行分组。

1:选择1D view左上角的“Image”分支,在窗口上显示,按group。

 

2: 在图像导入上启用分组。

图像重叠:

    它定义了被拍摄的图像如何覆盖扫描对象。默认情况下,这将设置为Medium。

    如果数据集的所有图像至少有70-80%的重叠与最近的图像重叠,则可以设置中重叠。这些重叠设置对大多数业余爱好者来说都是不好的,因为它需要800-1000张图片,在简单的形状之间没有空隙。如果您有一个小的数据集,它很可能会被分成许多组件(连接的和对齐的图像组)。这就是为什么在大多数情况下,低重叠是首选。

传感器灵敏度:

它定义了如何精细和有多少特性(物体的唯一位置)RC将尝试检测。

例如:对于丰富的花岗岩纹理,你可以使用低灵敏度。对于微妙的白色大理石纹理,你将不得不使用高灵敏度。

超高灵敏度很少被使用。它可以用于工作室里的面部或身体扫描。最好不要设置比要求更高的灵敏度。

控制台视图:

    在一些RC窗口中,我建议启用控制台视图。它可以显示一些有用的信息,当我们需要联系支持或其他专家时,它可以提供帮助。


REALITYCAPTURE 工作流程


对齐

如果这是一个较老的工程,或者我们不确定分组的图像,我们可以点击左上角的“Images”,点击“Clear Calibration Groups”- Ungroup 和“Group Calibrations w.r.t. EXIF”-Group。

现在,当所有的图像都被EXIF分组时,改变图像重叠到低,并检查所需的检测器灵敏度。接下来,我们可以运行alignment。根据图像的数量和大小,这可能需要几分钟。

当在RC中进行任何操作时,我们可以在console视图中看到:

如果我们使用默认设置,每个图像有40000个特征,在控制台视图中,我们看到一些图像的特征小于40000个,这通常指向图像质量的问题。稍后,我们可以确定这些图像没有正确对齐,丢失或出现问题的原因是在网格或纹理中。

我们还可以看到这个过程的详细时间报告。

     如果我们正确地拍摄了数据集,99%或所有的图像都在第一步中对齐。由于图像的问题,只丢失了一些图像。不好的图像很可能是那些比我们在console视图中看到的更小的检测功能。如果我们在左窗口中看到不止一个组件,但是我们的数据集很好,那么RealityCapture可以将所有图像作为下一个步骤中的一个组件对齐。我们需要删除小的组件,只留下最大的,再对齐。

     在这一点上,RC将重复用第一步中检测到的特性(从缓存目录中存储的数据),优化主组件的摄像机位置,并为我们在第一个对齐步骤中使用的其他组件找到合适的位置。

     如果必要的话,可以重复几次。即使是一个组件,RealityCapture也会改进相机定位和镜头设置,从而提高质量。如果每次对齐后,您都可以看到相同数量的独立组件和相同的图像计数,这意味着我们需要使用手动控制点。

 

     在RC中使用手动控制点和组件,是一个单独的任务。例如,这是用来扫描巨大的物体,比如建筑物和城堡,你可以扫描内部和外部。控制点工作流是一种单独的技术,它不适合本教程,因为它需要更多的时间来解释。

    控制点(CP)工作流程的基本思想:

    在一个小的组件中,创建大约3-4个控制点,通过从控制点窗口拖动到选定的图像,将它们至少放置在3-4个图像上。

    为了细化它们的位置,点击一个放置的CP,在保持这个点的同时,使用缩放轮,调整缩放级别,更精确地放置点,然后释放。

    在至少3到4个图像上放置最大组件的相同控制点。

    左右箭头键可用于在数据集中的图像之间切换。

    在选定的2D视点的场景选项卡中启用Residuals ,将显示当前CP到正确位置的线,由当前组件摄像机对齐估计。

 

一段由开发者制作的短片,展示了控制点的工作流程:

https://youtu.be/3ojj3q4S2o4

     完成此操作后,删除小组件并再次运行对齐。如果在数据集中没有更多的错误,RC将合并并对齐所有的摄像机与一个组件。如果您不再需要这些旧组件,您也可以删除它们。

     现在,几乎所有的图像都对齐在一个组件中。我们终于可以改进相机的对齐方式。为此,我们可以对所有图像进行分组,并运行最终对齐。在这一步骤中,RC将把所有的相机都当作不同的镜头来计算,并根据不同的变焦或传感器/镜头从光学稳定(如果你使用它)来调整小的偏差。

     在此步骤中,我们可以减少最小的再投影误差。默认情况下是2px。虽然对于大多数数据集来说,它已经足够好了,但我个人的偏好是将相机改进到至少1px的错误。把它设置得更低,将使平均值和中值误差更加精确。更少的错误-更好的网格,更好的网格-后面就更少的工作。

 

MESHING  构建模型

     首先,我们需要通过定义一个地平面来对齐我们的扫描到地面。视图之间的切换可以通过键盘上的4、6和2个数字键来完成,也可以通过场景选项卡完成。接下来,我们需要定义重建区域。最好设置尽可能小,以适合扫描对象或扫描区域。

记得保存

     接下来,我们可以运行正常或高模式的网格。如果您在正常的细节模式下有默认设置,RC将计算从2x向下采样的图像的深度映射。高细节模式使用图像而不需要向下采样。RealityCapture可以将细节重构到0.25px,这意味着正常模式下的网格有时是足够的。如果你确信数据集是干净而清晰的,通过在高细节模式下进行网格划分,你会得到更多真实的细节。然而,这需要更多的时间。

     对于一个测试,我们可以设置4 x down-sample正常模式的细节。这将给出足够的细节来对最终的网格质量进行高效的估计,并且将会很快完成(在适当的硬件上5 – 10百万网格需要20 – 30分钟)。

     对于PC硬件来说,最大的压力是深度图的计算。此时,GPU、CPU和SSD/HDD使用率可以达到100%。并且由于系统不能控制GPU优先级,而这是在进行的同时,您将不能使用PC(在夜间运行,特别是在高模式下运行时更好)。

永远别忘记保存!

     你可以从这里几种不同的方式。许多用户选择将一个网格的数量减少到1-1.5 百万多边形,并将其从RC直接上传至SketchFab。但是,从任何摄影测量应用程序中,一个原始的、未被修改过的网格都是不完美的。这就是为什么我们需要修复原始网格。

 

SIMPLIFYING  简化模型

在高分辨率网格中,一个500-700px的图像网格的普通多边形数约为100-200百万多边形。可以肯定地说,我们不需要所有的这些。

     从16mln的多边形,4K材质可以将微细节存储在一个法线贴图上,8K到大约需要67百万的多边形。为了得到最好的结果,16百万多边形网格细节需要存储在8K法线贴图上。这意味着我们可以把一个原始的100-200百万多边形网格简化到8-16百万的多边形,没有任何问题。decimation算法会保留这些锋利的细节,我们不需要担心这个。

     为了导出网格,OBJ是最通用的格式。

 

修复原始模型的错误拓扑 (旧方法)

如果您使用的是外部软件,如ZBrush,您可以跳过这一步。

     在原始网格中非常常见的问题是,从decimation 步骤后或T-顶点(零面积多边形)中出现的孔和non-manifold 的边/顶点(交叉)。因为RealityCapture很少有twisted相交的多边形,所以我们只需要填充这些孔。为此,我们可以使用MeshLab或MeshMixer。

     在MeshLab – Close Holes。在某些情况下,有两个多边形的洞,中间只有一个顶点,而MeshLab不能关闭这个孔。您将需要删除一个或两个多边形并再次运行该工具。为了消除t顶点,我们需要运行tool «Remove T-vertices with edge flip»,值为10-20。

     在我们关闭所有的孔并固定所有的t顶点后,我们可以将网格导入到一个曲面雕刻app中,我个人喜好是3d coat。这个应用程序可以使用不固定的网格,但是最好在导入之前修复拓扑错误。

 

3D-COAT

    这个应用程序对于3D扫描网格来说是非常棒的。与ZBrush相比,它有一个线性的工作流,工具是工具,对象是对象。使用简单,你不需要谷歌如何导入OBJ文件,并发现你的对象是一个工具,你需要一个工具来修复工具内的工具…

One important note: Because we have already fixed the mesh topology, we won’t have to import it as “repair scanned mesh”. This is usually slow and requires watertight meshes.

We need to only import the mesh for SURFACE Sculpting. (什么鬼)

     另一件值得注意的事情是:3D-Coat的体素雕刻令人惊叹。但是我们必须避免所有Surface<->Voxel转换和在3D-Coat中减面。该操作将通过一些快速筛选的泊松网格重建算法来破坏我们的所有微细节。

     3D-Coat在动态网格镶嵌上有巨大的优势(你可以有时也需要禁用)。它叫做“消除拉伸”。这将增加网格分辨率,只在你工作的区域。其他的网格部分保持不变。

     当导入表面雕刻时,你会得到一个提示,告诉你你需要启用“import without voxelization”,respect negative volume 和保留旋转坐标。您将需要按自动缩放,并按下应用。

     在此之后,另一个弹出对话框将显示,我们需要选择Yes来存储原始的缩放、旋转和etch,它将在3D空间中存储原始的网格信息。这是不应该改变的,或者以后当我们将网格导入RC作为一个固定的网格时,它不会和原来的网格在同一个地方。

 

SCULPTING 雕刻

     这是工作中最有创意的部分。3 d-coat提供了一系列不同的工具。最常用的是填充、压平、冲、带alphas 的笔刷,以及有无动态镶嵌。

3DCoat网格雕刻基础:

Simple Brush – rise; Fill – fill pits or canals; Flat – flatten hills, etc.

When holding the CTRL button pressed, most tools are reversed.

Brush – dig; Fill – smooth flatten hills (fill them from the other side of the polygons); Flat – rise (careful with this), etc.

A special CTRL + SHIFT will switch any tool to Relax polygons. This works like smooth, is faster and does not increase the polygon density.

Another useful tool is the Tangent smooth tool. It can relax edges between big and small polygons but retain a shape of a surface.

We can fix big polygons with the “Draw” tool with default smooth “alpha”, set depth to 0.5 or less and enable “remove stretching”. Simply paint over the big polygons with or without CTRL and these will be subdivided. Next, select a “random” alpha and increase the depth up to 1 to add some noise similar to a correctly reconstructed surface.

If we have some shifted surface, we can fill the cracks with the Fill tool, or flatten it with CTRL + Fill. Or even smooth them with relaxation. After that, recover the original noise with “Draw” tool with alphas.

A video explaining the basics of how this works can be seen here:

      修正的基本思想 :从弱表面的大多边形增加网格分辨率。解决定位错误。找回丢失的部分。在固定好形状后,添加一些与原始未接触表面类似的小噪点细节(以防你扫描的是有机或石头物体)。对于光滑的表面来说,噪点是不必要的,但是雕刻需要注意尖锐的边缘和平坦的表面。有时,您可以将被扫描的对象分割成多个部分,分别恢复各个部分,然后将其合并回去。

     经过所有这些步骤,我们获得了一个“干净”的高分辨率网格。这需要作为OBJ导出。

QUALITY CHECK 检测质量

     我们会检查我们干净的网格的质量。与最开始的原始模型一样,我们可以在MeshLab 或MeshMixer中检查错误。检查相同的错误:孔、相交的多边形、t形顶点以及在雕刻步骤中可能出现的更多错误。

     然后导出干净的模型。

 

IMPORT BACK TO REALITYCAPTURE   导回进REALITYCAPTURE

现在我们需要从reconstruction 选项卡导入干净的模型到RealityCapture。如果我们工作中仔细,干净的模型将被放置在原始模型的位置。如果模型在位置、方向或形状上有许多较大的差异,那么摄影测量软件将无法正确地计算纹理。

 

 

TEXTURING  生成贴图纹理

    接下来的一步是将已清理的高分辨率网格进行纹理处理。在高度2-3米的物体中,产生16k的纹理分辨率是很好的,之后会被还原成最终的4k或8k纹理。

    RC有一个16k分辨率和UV展开的一个“maximal textures count”,导入模型默认是16k纹理分辨率。您首先需要检查这些设置。

    对于提高贴图效果,我们需要将外环的照相机的纹理权重改为非常小的值。使用相机套索工具,选择这些外环相机,或选择所有中距离和近距离摄像机,并反转选择。在图像属性将重量改为0.01(1%)或更少。

接下来,我们可以运行Unwrap,然后是Texturize。或者只是纹理化(如果模型没有UV贴图,它会自动打开)。在此步骤中,RC使用GPU,这样您的系统可能不会响应高的GPU负载。完成后,我们可以简单的导出干净、高分辨率的模型和纹理。

 

DECIMATION   抽取

     如果我告诉你所有自动或半自动的quad重新拓扑工具都是坏的呢?

     简单的低多边形拓扑规则:低多边形网格边缘需要尽可能地跟随高分辨率网格。但是凹陷的边, 眼状,尖锐的边缘,所有这些都是自动重新拓扑工具的问题。

     当然,你可以用向导。这肯定会增加最后的低多边形网格质量。你使用的指导越多,完成工作所需的时间就越多。有时,太多的指导和方法会失败。在许多情况下,手动的重新拓扑比使用自动的方法更快地工作。

     所有的实时引擎都使用三角形,如果我们不需要动画(morph)扫描,静态对象如石头,雕塑等,根本不需要四边面。我们使用MeshLab 的Quadric Edge Collapse Decimation ,将高模减成低模,抽取50%,从10百万到 5百万等等。

不要担心,因为这一步不需要太多的关注。在设置中设置0.5,并按“OK

通过这种方法,我们将保留大部分细节,而不是简单地将10百万转换为30k多边形网格。或者通过任何四种自动重拓扑结构。

     当大量使用100-150k多边形时,最好检查网格是否存在拓扑错误,如果存在的话,修复它们。如果你有高分辨率的模型,高分辨率模型上可以有小的桥梁或尖峰,当边缘坍塌时,这些可以形成自我交叉的多边形。这可能导致在最后的decimation步骤中出现问题。这在MeshLab,MeshMixer 或者其他软件中很容易修复。100k多边形网格不是一个需要处理的问题。模型的问题都修复完后,可以再抽取50%,直到50-75k,后面使用.

     如果物体是一个简单的,均匀的扫描,像石头,并且它没有我们想要保存的部分,我们可以将它抽取1到2次并且得到一个10k-30k多边形网格。如果我们的物体是一个雕像或一个底座,我们可以使用选择性抽取。

     选择重要的细节部分:脸,手掌、手指…我们可以用粗糙的选框工具选择,和画笔为多边形选择工具选择。

在我们得到所有想要保留的部分后,我们可以应用选择反向。并且只对这些部分使用50%的decimate,只使用“Simplify only selected faces”选项。如果这是对一个基座上的雕像扫描,我们可以再次选择基座,并将其抽取50%。你可以选择底部的底部,并再次将其删除,特别是如果在扫描中看不到的面。

 

     我们应该对任何拓扑错误(包括T顶点)进行网格的最后检查。

 

UV

   许多人喜欢四边形的一个主要原因是,循环边缘可以更快的展UV。抽取过的模型都是三角面,但这不是问题。3D-Coat 非常适合扫描,不仅是因为动态细分。但是因为它有一个神奇的UV Path工具。可以“绘制”Path,并且它们的流可以很容易地调整。因此,我们在3D-Coat中打开低模 使用“UV map mesh”。

这里有一个视频解释了UV Path的工作原理:

 

     另一个具有类似功能的软件是Blender。它可以用来在两个选定的顶点之间“绘制”路径,但是它不允许像3D-Coat那样简单的调整。根据拓扑结构,UV路径工具需要几分钟才能展开UV。

     有一个基本原则:在隐蔽的地方,凹陷里或在锋利的边缘处切割UV。然后就是UV排布,这个就不多说了。(虽然我没用过3D-Coat,但是我觉得unfold3D应该是最好的展UV工具。)

 

BAKING   烘焙

     在这之后,我们需要准备我们的低模。对于大多数的扫描,这是一个更好的选项来设置所有的顶点或所有的多边形平滑,取决于所使用的3D软件。实时渲染引擎将处理整个网格平滑。这是最简单的方法,以避免稍后使用切线空间法线图( tangent space normal map)。

     我推荐 xNormal。 (emmm…..我推荐knald。GPU的快得一批!)

     它是免费的,与商业工具相比有许多优点。允许在高模或低模上设置多边形的平滑度。它不需要4-8Gb的VRAM来烘焙8k纹理。可以使用CPU和RAM来烘焙超高分辨率的模型和巨大的贴图。

     打开xNormal,通过拖拽到高分辨率网格窗口加载高模。设置“Average normals”。右击,选择“Base texture for bake”并添加纹理。

加载低模到low-resolution meshes窗口; 设置 “average normals“.

我们现在可以切换到Tools窗口并选择ray distance calculator.。运行这将计算高低模的最小/最大距离。

     如果我们在前面的步骤都是对的,我们应该期望的是非常小的数字,比如0.05。

     有时可能会出现很大的最大距离;这可能是由于一个或两个多边形的碰撞,或者高模上有 尖状物。在这种情况下,最好检查烘焙的纹理是否有错误。如果只有很小的错误,或者在xNormal中调整距离设置,然后再次烘焙,就可以在Photoshop中修复纹理。在我的大部分扫描中,我只在低模窗口设置了0.1的最小值和最大距离。

在此之后,我们可以选择烘焙设置,纹理大小,render basket 大小和抗锯齿设置。最好为法线和base color设置最大4x采样。

对于一个AO和cavity,因为这些是不可见的,并且需要太多的计算时间,所以我们可以设置1x的值。

 

开启Normal map烘焙 (计算tangent space)和 Base color。

在xNormal全局设置里, 你可以在不同的图像格式中选择 8/16/32 bits。我喜欢16bit的 tiff.

烘焙 Normal map 和Base color maps

     在此之后,在Photoshop中打开一个生成的法线贴图。检查所有的小细节,洞穴或多个小的元素,如手掌。如果我们设置错误的最小/最大距离,我们将不能看到连续的颜色。在这种情况下,需要调整最小/最大值设置。如果一切正常,下一步是删除alpha通道,并将最大压缩的图像保存为PNG(无损,支持16位,比ZIP tiff更好压缩)。

     为了在SketchFab或Marmoset Viewer中使用,最好将映射的图像向下采样到4k(如果原始数据是8k),保存一个JPEG,以达到最大质量(在保存时图像将转换为8bit)。

     回到xNormal,禁用Normal map 和Base color maps,启用AO和cavity map。然后把x4换成x1。接下来烘焙这些贴图。这个过程非常缓慢,所以你可以最小化xNormal,并减少它在任务管理器中的优先级。

     在xNormal完成烘焙AO和cavity map后,打开Photoshop中的map,删除alpha通道,将RGB转换为灰度。

     在小细节的地方重复检查错误。接下来,将它保存为8k PNG文件归档,然后保存2k或1k的用于SketcFab或Marmoset(因为阴影的细节不需要高分辨率,并且加载速度更快)。并保存与最大质量JPG。

 

BASE COLOR TEXTURE

     如果你的镜头是正确的,并且你的相机是正确对齐的,那么纹理应该是非常好的,并且只需要在相机从一个高的角度捕捉到表面或者重建看不见的表面的地方。

     这个目的最好的工具是在Photoshop中使用Content-Aware Fill(内容感知填充)或Patch(修补)工具。。这些可以让你复制并将图像的另一部分融合到我们想要修复和重建的部分。这个过程需要技术和艺术技巧,尤其注重细节。你需要找到类似的、良好的图像部分,可以作为源使用,并尽可能地)使用UV贴图变形。你需要记住,所有的UV块都有延伸的边界,需要适当的渲染。特写渲染的时候可以看到一个像素的黑边。或者在实时引擎中使用,低级MIP-maps可以使这样的边缘清晰可见。这就是为什么边界如此重要(需要8px甚至更大)。

     对于恢复较大的区域,您可以使用Content-Aware Fill(内容感知填充)或Patch(修补)工具。

     如果你需要恢复在UV块之间的纹理,这可能会造成一些问题。在这种情况下,您需要创建另一个临时的UV,将边缘合并到一个UV,并且你可以连续地“绘制”一个新的纹理。首先,将纹理从高分辨率复制到临时的UV布局,然后恢复部分。然后从临时的UV贴图到工作的UV贴图,将校正后的纹理烘焙出来。

     你需要记住,所有新的纹理转换都删除了小细节。这就是为什么对临时UV贴图使用更高分辨率的原因。你甚至可以增加UV块的大小,你需要一个修复。并使用双尺寸分辨率- 16k的临时贴图为8k工作贴图。

     之后,将固定的和原始的纹理与图层和masks融合在一起,通过掩盖在临时贴图中未被触摸的所有区域。因为这主要是用Photoshop(或另一种首选工具)完成的,我们不会在本教程中介绍它,但我希望您能理解这个基本概念。(看完似懂非懂…….)

 

ASIDE   旁白

     你可能发现在高分辨率的网格上使用8bit的源图像和纹理,并将其烘焙到16位,有点奇怪。是的,你没看错。

     如果你在预处理步骤中去除阴影和去光图像,那么16和8bit之间的区别仅仅是图像中LSB部分的噪点。这就是为什么我们可以使用8bit图像来贴图。

     任何纹理生成或烘焙步骤都有亚像素的转换,特别是当我们从16/32k纹理到8/4K的时候。这一步将总是添加额外bit,16位足够。

     在预处理步骤中,可能需要16位流程恢复阴影中的细节,我们不增加任何额外细节。

     最有可能的是,由于这个工作流,我没有成功地使用Unity Unlit工具,因为纹理已经被去光,只需要小的技巧和颜色修正。任何颜色的纹理校正,最好在16位工作。

 如果你知道如何更好地使用16/32bit流程,为什么要阅读本教程?

 

SKETCHFAB    (后面关于上传Sketchfab的,就不翻译了,有兴趣的可以自行翻译)

At last, we have our low poly OBJ mesh.

For Sketchfab we’ll use 1-2K maps for the AO and cavity, 2-4K for normals and albedo (and if used 2-4K maps for specular/glossiness).

We can pack all files with 7zip (as a .zip or .7z archive) and upload them to SketchFab. Or simply pack the OBJ and MTL files, or only FBX mesh file. You can later add all the textures via the SketcFab 3D Editor.

A useful trick: If you want to upload a “scene” to SketchFab containing more than one object, you will need to export all meshes as OBJ and create an empty file sketchfab.zbrush, then upload as an archive. In such case, SketchFab will treat the separate objects as one scene file.

 

SKETCHFAB 3D EDITOR

I hope you have successfully added all the required materials to your model.

Normals from xNormal usually don’t require a Y-flip.

Ambient Occlusion looks better with “Occlude specularity” ON and at 80-90%. Cavity with 50%.

Next, we need to talk about the lights and background.

Because our scene is a 3D scan, the lights, environment, and background need to be selected wisely. We want to show a good picture or mood, but at the same time show the scanned object and all its details. Sometimes seeing a good scan is the only way for people around the world to see some unique objects or world heritage artifacts.

This means that the background should not clash with the hero of our story – scanned the object. The used lights need to contribute to the details of the object.

Light can be generated from an environment map and can create a shadow, so you don’t need to use additional light.

But If you can set up proper lights, your model will look very realistic.

I personally love the dark or light grey clean SketchFab background. But seeing interesting combinations of photos of scanned places and objects can look good too.

The Blurred Environment map as a background usually looks cheap and boring, and you’ll have to work on creating something better.

POST-PROCESSING

A post-process filter that can be used without causing problems on the scans is the Sharpen, and its default settings are usually enough.

SSAO (Screen space ambient occlusion) can look very interesting, but it is a bit strong for my taste. Also, as we have pre-baked AO and cavity, the additional SSAO effect is not needed.

I strongly recommend avoiding using DOF, aberrations, or other strong post-processing effects that can destroy the charm of a good scan.

To be honest: If you see any of these effects in combination with the Shadeless mode, this most likely means that the scan has gone bad or has a low quality, and the author needs to hide as much of it as possible.

The same goes for camera restrictions. In my opinion, if you don’t want to show all 360 degrees of the scanned object – simply use still renders or video.

Next, save the scene. This can take some time if we have added textures (they are needed to be uploaded).

Then exit to view mode.

Do not skip adding a nice description, and maybe some details regarding the used software and hardware like cameras, lens, number of images, etc.

Also, add tags with names of used software. This is helpful to other users that are searching photogrammetry tools and helps them understand the Pros and Cons of the modern photogrammetry software by browsing through the SketchFab.

Finally, Scale and Rotate the scene in the view window, and save the correct view with the left top Save View button.

Double check all the text, press Publish and wait for likes or maybe a Staff Pick .

 

RESOURCES   资源

如果你想了解更多关于RealityCapture、photogrammetry 或 3Dscanning的信息, 欢迎访问 Capturing Reality Forum.

或者在Facebook上找到更多这样的群组:

在这里你不仅可以找到我,还可以找到许多其他的摄影测量和3D扫描的专家,VFX和VR/AR。

一定要先搜索和阅读,因为你会发现很多有用的东西,而且大多数问题已经被问到和回答了。

 

ABOUT THE AUTHOR    关于作者

Vlad Kuzmin

出生于苏联,列宁格勒(圣彼得堡),1970年代。擅长设计,UI/UX设计,广告,摄影测量,和3d视觉。认证的Adobe ACE/ RealityCapture和摄影测量专家。快速找到和混合不同的技术从不同的设计部门,以获得成功的最有效的方式。

在过去的5年里在日本生活和工作。曾在一家日本电子游戏公司担任UI/UX设计师。在过去的一年里,他把时间都花在了东京Avatta工作室(avatta.net)的摄影测量上。Avatta的客户包括Sega, Sony Computer Entertainment, NHK, Amazon Japan等,公司拥有全国最好的全身和面部摄像设备。


画忆翻译,转载注明。

1、如果【蓝奏云】链接打不开,请删除链接里的www,或者将www改成wwx。
2、别秀你的浏览器了,请用下载器下载!!!。
3、如有下载链接失效,请在下方留言。说明具体失效资源的名称。
—— >> 有问题进QQ群,大厅(聊天吹牛逼)747152817,阁楼(学习讨论)1014164464 << ——

画忆妙妙屋 » Photogrammetry 完全指南

发表评论