Notifications
Article
摄影制图法工作流程指南(4)
Updated 3 months ago
198
0
为了让更多开发者和游戏工作室能够掌握和运用到摄影制图法,Unity编写了《摄影制图法工作流程》作为指南。
《摄影制图法工作流程》指南:
  • 摄影制图法工作流程指南(1)-准备阶段:概述、所需硬件和软件设备、考虑的问题。
  • 摄影制图法工作流程指南(2)-采集阶段:采集非小型对象、采集表面。
  • 摄影制图法工作流程指南(3)-采集阶段:采集小型对象、采集漫反射反照率(颜色纹理)、采集树叶。
今天我们将介绍摄影制图法最后的一个阶段处理过程,由于篇幅限制,我们本篇重点为:图像处理、重构创建模型、烘培网格

处理阶段

重构软件是摄影制图工作流程处理阶段中最重要的一部分。
我们建议使用CapturingReality的Reality Capture。Reality Capture的重构效率和质量都远超Agisoft的Photoscan、Autodesk的123D Catch这些软件,而且价格实惠。像visualSFM这样的解决方案,并不能用于商业用途。

图像处理-DCraw和Photoshop

1.确定重构所需的图片集

在开始进行处理前,先检查提供给重构软件的照片是否足够。使用Reality Capture意味着图像应该互相对齐并创建出单个组件。你可以使用Reality Capture中的RAW数据来直接检查图像集的对齐情况。
如果需要更多图像,可以需要再次踏上拍摄之旅,或者使用拍摄结束时录制的4K视频,从中提取画面图像。这一步骤必须首先完成,以便后面能够顺利完成对照片集的操作。

2.将RAW转换为TIFF

Reality Capture可以直接处理RAW文件。然而,为了在提取漫反射反照率时得到更好的结果,需要正确将图像转换为线性格式,并且调节照片集的白平衡。
这里我们使用的是DCraw而不是Photoshop或Camera RAW,因为DCraw能让你在导出为TIFF时拥有正确的线性转换。这也意味着我们不会在调节白平衡时使用Camera RAW。我们使用的是Photoshop。
为了将RAW文件转换为TIFF,在包含照片和DCraw可执行文件的文件夹中打开命令提示符。运行命令"dcraw -v -4 -T *.CR2",CR2为RAW文件格式。
命令参数解释如下:
-v:打印出转换过程的详细信息,因为这个过程耗时较长
-4:通过使用相机的白平衡并设置伽玛曲线为1来导出16位线性格式
-T:导出为TIFF格式
然后将所有TIFF文件(16位文件)移动到特定文件夹中。

3.白平衡

在发送给重构软件之前,照片上的白平衡在Photoshop中是以32位格式来处理的。具体过程如下:
  1. 在Photoshop中打开包含颜色检查器的TIFF文件
  2. 将TIFF文件转换为32位
  3. 选取第二灰色色块(60%)的颜色。最好使用第二个色块,尤其是当第一色块接近1 (255, 255, 255)时
  4. 关闭TIFF,不保存改动
  5. 对TIFF文件夹应用色块脚本
  • 转换为32位
  • 用0.6, 0.6, 0.6 (60% 灰色)的纯色新建一个图层
  • 设置纯色图层为multiply(正片叠底模式)
  • 新建带有之前选取颜色的图层
  • 设置颜色图层为divide(划分模式)
  • 合并所有图层
  • 转换为8位
  • 保存并关闭
照片将转换为8位,以避免Reality Capture中的伽马校对出现问题。而且8位文件的存储所需空间较小,在处理大量照片时很有帮助。
在重构期间,Reality Capture会转换图像为8位格式,例如JPEG。所以在存储为8位时不会丢失任何信息。

重构-Reality Capture

1.添加所有图像

使用添加图像或文件夹的按钮来载入照片集,或者通过从文件浏览器拖入文件来载入。
无论何时都可以添加照片,在对齐过程产生多个组件时也可以添加照片。

2.对齐图像

在开始重构前,图像必须对齐在一起。每当添加新图像时,都需要对图像进行对齐处理。

3.检查组件

请检查是否所有图像都被分到同一组件中。
如果没有的话,从新的采集过程添加更多图像,直到所有图像都链接到相同的组件为止。
当你拥有单个组件时,就可以用它进行重构了。

4.视频中的帧

VLC可以用于从视频中提取单帧画面,步骤如下:

  • 启动VLC。
  • 点击Tools -> Preferences
  • 将Show settings调为All。。
  • 在Video/Filters设置目录中勾选"Scene video filter"。别忘了在完成任务后取消勾选这一选项。
  • 在Video/Filters/Scene filter设置目录中添加保存各帧画面的目录。
  • 设置Recording ratio。将该值设为10,指每10帧保存1帧画面。
  • 保存设置。
  • 打开并播放视频。
各帧画面将在播放时提取到所选目录中。
请注意:Reality Capture 支持VLC默认提取格式,即png格式。从视频中提取出的图像也需要调节白平衡。采集的视频必须在一些画面中包含颜色检查器。

5.控制点

如果不是所有图像都链接到同一组件中,并且没有更多的可用图像,则需要手动创建控制点来校正缺失链接。
创建一些控制点并在图像上拖放它们到不同的组件中。不同图像的控制点应该在3D空间中展示相同的位置。
在添加几个控制点后,测试图像对齐来检查它们是否解决了缺失链接的问题。重复这个过程,直到得到一个用于重构的有效组件。
添加控制点是个十分漫长的过程。建议尽可能地添加照片来解决缺失链接,因为这种修复采集内容的方法更快。

6.设置缩放大小

控制点可以用于设置对象的实际比例。
创建二个控制点并将它们放在显示颜色检查器标尺的图像中。我们必须将这些控制点分配给二个或更多图像。使用的图像越多,结果就越精确。对于自然资产,二个图像就足够了。
在对齐选项卡中点击"Define distance"(定义距离)按钮。单击第一个控制点,然后按住左键将其连接到第二个控制点上,这样就可以将二个控制点链接起来。松开按钮时,距离限制就创建出来了。
默认情况下,距离单位是米,你也可以在Reality Capture安装文件夹中的local.xml文件中修改单位。
在限制属性中,设置距离为0.05。
护照颜色检查器标尺的长度是5厘米。如果你在照片中使用了不同的长度,请输入其测量值。单击“定义距离”按钮下的“更新”按钮来刷新实际距离值。
缩放设置也可以在重构后调整。
对于表面和细节材质,则不需要重新缩放。它们的大小受到采集期间的标记以及纹理分辨率的限制。例如:2048x2048的面积为2平方米,游戏比率为1024/m。

7.创建模型

首先选择用于创建模型的组件,然后设置重构区域。对于表面和细节材质,设置靠近标记的位置为重构区域。
选择模型质量,理想情况下应该选择最高质量的模式,但也可以根据电脑的处理能力选取较低的等级。
下图显示了用三层细节重构的岩石。
选择预览质量大概会用36秒产生230万个多边形的模型。这个模型可以用来烘焙出1K分辨率的纹理。
选择正常质量大约会用28分钟产生1.015亿个多边形的模型。这个模型可以用来烘焙出分辨率高达8K的纹理。
选择高质量则会用7小时21分钟来产生4.073亿个多边形的模型。这个模型可以用来烘焙出分辨率高达16K的纹理。
高质量模式或许看上去并没有必要,但这是确定对象上所有部分都有正确分辨率的一个好方法。正常质量可以在一些部分产生平均结果。法线贴图的烘焙质量取决于高质量网格。

8.上色或纹理

使用Reality Capture可以通过顶点(Colorize上色)或是在纹理中存储颜色信息。
如何选择将取决于重构结果。当重构点云密集且均匀时,建议使用顶点上色。
Reality Capture会将网格显示为点云,但在内部它将其转换为带有顶点的网格。照片颜色会转换为顶点颜色。该过程需要一个.ply文件,该文件处理顶点颜色,文件格式比带有大型纹理的.obj文件更好处理。
在顶点存储颜色的另一个好处是,不会对模型的大小造成任何限制。16Kx16K的纹理只能存储268 Mpixels,高质量模式可以产生顶点数大于2.68亿的模型。给顶点上色所需的时间取决于顶点总量。
如果点云比较稀疏,或是在重构中有明显的间隙,建议使用纹理而不是顶点颜色。
这是因为来自源照片的颜色会传递给纹理,而且纹理会跨越顶点间的间隙,因为它们是在网格表面上绘制的。默认纹理大小是16Kx16K,这个值可以在网格属性中修改。在烘焙过程前最好尽可能保持较高的质量,即使用高分辨率纹理。
请注意:从源照片创建颜色纹理和创建法线贴图是二个分离的过程。颜色纹理与漫反射反照率纹理有关,而法线贴图的创建过程仅取决于重构几何体的质量。

9.简化

使用Reality Capture生成的高分辨率网格不能用于实时环境中,而且多数3D软件无法处理如此巨量的网格,因此需要使用较低分辨率的网格。
所以我们需要通过使用烘焙工具生成法线贴图来做出尽可能与高分辨率网格相似的较低分辨率网格。烘焙工具会传输高分辨率网格的高频信息到贴图中,否则这些高频信息将在转换低分辨率网格到纹理时丢失。
Reality Capture提供Simplify简化流程来优化网格。简化能允许你定义想要的多边形数。如果简化过程得到了不错的结果,它可以用作基础产生用于烘焙的低分辨率网格。
如果得到的结果不够好,或是如果网格还是太复杂,可以使用简化流程来制作带有100万或200万多边形数的中等分辨率的网格,这样的网格可以轻松导入到类似3ds Max的3D软件。你可以在3ds Max使用它来制作出用于烘焙的低分辨率网格。

10.导出网格

高分辨率和中低分辨率的网格都会被导出保存。高分辨率网格将用作烘焙法线贴图的源,而中低分辨率网格可以在3D软件中重新制作并生成合适的低分辨率网格,用作烘焙的目标。
在工作流程或重构选项卡中点击Mesh按钮。如果重构结果得到了密集而均等的网格,选择.ply格式。我们必须对网格进行上色。
Save mesh by parts属性应设为False。
Export vertex color属性应设为True。
不应用任何移动和缩放设置。
其它情况下选择obj格式。网格必须有纹理。
Save mesh by parts属性应设为False。
Export vertex color属性必须设为True。
不应用任何移动和缩放设置。
在之前的岩石示例中,导出为.ply格式的高分辨率网格大小为7.77GB,而.obj格式的大小为47GB。如果想要节省时间和磁盘空间,建议使用.ply格式。

为烘焙创建低分辨率网格

低分辨率网格将用作烘焙目标。高分辨率网格和低分辨率网格必须位于相同位置且大小相同,因为烘焙过程要从高分辨率网格向低分辨率网格进行投影。
在这部分,我们需要使用到3ds Max的PLY导入/导出插件。在3ds Max中,从Reality Capture导入中分辨率或低分辨率。设置缩放值为1,确保没有选中翻转轴。

1.可平铺表面

在Reality Capture网格创建一个方形平面,平面需要具有足够的分区来匹配全局形状。然后应用平面UV,建议在下面投影步骤之前执行这一步。在Reality Capture网格上投射方形平面,使用一致性工具可以快速完成。
设置缩放值为1,不选中翻转轴,并以.obj或.fbx格式导出平面。该平面将用作烘焙的低分辨率网格。

2.细节材质

对于细节材质,我们的目标是在细节法线贴图中仅烘焙高频信息。
创建一个拥有足够分区的方形平面,用来匹配网格的中低频信息。网格中的分区越多意味着在法线贴图上存储的信息更少。有了匹配中低频信息的网格分区后,细节纹理的烘焙过程将只保留高频信息,然后应用平面UV。
将方形平面放置并投射到Reality Capture网格上。一致性工具可以快速完成这一步。
设置缩放值为1,不选中翻转轴,并以.obj或.fbx格式导出平面,该平面将用作烘焙的低分辨率网格。

3.对象

几何体
从Reality Capture低分辨率网格开始处理并清理网格,或是基于Reality Capture的中分辨率网格进行重新拓扑。这一步是制作游戏资产的常见过程,因此在这篇指南中不多加叙述。
为了节省时间,中分辨率网格可以通过Instant Mesh软件进行处理,制作出低分辨率网格。这样得到的结果通常质量不错。即使质量欠佳,它仍可以给3ds Max制作用于烘焙的低分辨率网格。
3ds Max清理网格。
UV布局
任何UV工具都可以用来完成UV布局。
我们可以尝试通过降低UV簇的数量来最大限度减少接缝数,并使用所有可用空间。在多边形数量和等效UV空间之间保持均匀的比例。在网格的所有可见部分上,使它们都拥有相似的纹理分辨率是很重要的。UV对最后得到的资产质量有很大影响,需要花费较多的时间。
点击Unwrap/display/Show Edges distortion打开检查边缘失真功能,并通过创建新接缝并使用UV松弛来最小化边缘失真的情况。
如下图所示:红色部分表示明显的边缘失真情况。
在完成UV布局后,用.obj或.fbx格式导出没有修改过缩放、旋转和位置的网格。注意导出时缩放值为1,确保未选中翻转轴。
请注意:使用.ply格式时不会使用UV1通道。当使用带有Reality Capture所生成纹理的.obj格式时,会使用UV1通道。

小结

摄影制图法处理过程中的图像处理、重构创建模型、烘培网格就分享到这里, 下篇是整个系列最后的一篇,涉及到处理流程中的纹理烘焙和移除光照,尽请关注!更多Unity技术内容分享尽在Unity官方中文论坛(UnityChina.cn)!

Unity China
379
Comments