用网格生成3D Tiles

3D Tiles Processing Engine 是一个引擎,它允许你将网格的多级数据集平铺到针对流式优化的 3D Tiles 瓦片集中。

这包括:

  • 支持 OBJ 或 GLB 输入文件的命令行示例,并允许你通过.prj.ref文件对输入数据进行地理配准。
  • 比命令行引擎更灵活的 API。它允许你插入自定义网格格式和参考工厂。

本用户指南提供了帮助你开始使用命令行和 API 的基本指南。

1、运行要求

  • 系统要求

有关Java 堆设置和磁盘缓存的详细信息, 请参阅TLcd3DTilesProcessorBuilder类的 文档

  • 输入数据的方向

3D Tiles Processing Engine 期望 y轴 向上的网格作为输入数据。

  • 输入数据的地理参考

默认情况下,3D 切片处理引擎会查找包含地理参考信息的文件。该文件可以是包含 EPSG 代码的.epsg文件、包含 WKT 文本的.prj文件或由 Lucy 保存的 .ref文件。

你还可以通过 API 设置地理参考。

如果没有可用的地理参考,则 3D 切片处理引擎会在没有参考的情况下处理数据集。

有关TLcd3DTilesProcessorBuilder更多信息,请参阅文档

2、从命令行运行 3D Tiles 处理引擎

要从命令行使用 3D Tiles 处理引擎,请调用版本示例文件夹中的 meshup 脚本: meshup.bat(Windows) 或meshup.sh(Linux/Mac)。

处理引擎帮助文档将打印输出在控制台中。

默认情况下,命令行示例在 32 位系统上以 2GB 的最大堆大小运行,在 64 位系统上以 4GB 的最大堆大小运行。可以在相应的配置文件中覆盖最大堆大小:

  • config/samples/meshup/Meshup.vmoptions
  • config/samples/meshup/Meshup64.vmoptions

2.1 命令行参数

所需的参数是输入文件和输出文件夹:

表 1. 必需的参数
名称描述样本值

-i或者--input

包含 OBJ 或 GLB 文件的输入文件或文件夹

C:/city3D/OBJS/,C:/city3D/mesh.obj

-o或者--output

处理后的 3DTiles 的输出文件夹

C:/city3D/3DTiles/

可选参数是:

表 2. 可选参数
名称描述默认值样本值

-R或者--recursive

如果-i指向一个文件夹,则递归扫描它以查找输入文件

false

true

-q或者--textureQuality

纹理质量(从 0 到 1,使用 1 进行 PNG 编码)

0.7

0.7、0.9、1.0

-r或者--reference

包含模型参考的文件 ( .epsg,.prj.ref)

没有任何

C:/reference.prj

-f或者--forcePNG

如果此参数设置为 true,则纹理始终编码为 PNG。如果您需要透明度支持,请启用此选项。

false

true

-v或者--maxVertices

单个图块中的最大顶点数。默认值为 2000。增加这个数字可以得到一个不那么深的树,但是更大的瓦片。

2000

1200、3500、5000

-t或者--maxTextureSize

每个图块使用的最大纹理大小。默认为 256,表示纹理为 256x256。增加此值可减少平铺深度。

256

128、512、1024

-d或者--dropSmallParts

在简化图块之前删除小的复杂部件。这会增加计算成本,但可以通过简化来提高高度不平衡网格的质量。

false

true

-b或者--preserveBorders

保留边界。默认禁用。此参数将以计算成本改善边界简化。当您在生成的 3DTiles 中看到孔或网格在其边界附近严重扭曲时使用此选项,例如:建筑物的底部。

false

true

-s或者--strategy

要使用的简化策略。

QUADRIC_EDGE_COLLAPSE

QUADRIC_EDGE_COLLAPSE、聚类、DROP_SMALL_PARTS

-c或者--forceColor

将输出网格中的纹理转换为单一的平均颜色。此选项可用于丢弃输出网格中的纹理。相反,单个纹理将转换为平均颜色。

false

true

-m或者--meshCompression

要使用的网格压缩算法。

NONE

DRACO

2.2 命令行示例

用例:数据集由根据.prj文件引用的 OBJ 文件夹组成。

meshup.bat -i c:/Meshes/ -o c:/Meshes/Tileset/ -r c:/Meshes/reference.prj

用例:数据集由单个 OBJ 组成,文件未被引用

meshup.bat -i c:/Meshes/mesh.obj -o c:/Meshes/Tileset/

用例:网格具有纹理面和彩色面。需要 PNG 纹理编码以避免视觉伪影

meshup.bat -i c:/Meshes/mesh.obj -o c:/Meshes/Tileset/ -q 1.0

2.3 为数据添加偏移量

该过程将选择与输入网格同名的任何.xyz文件。如果.xyz文件的第一行是一个 3D 点,它将在相应的网格和定义网格的同一参考中应用它作为全局偏移。有关更多信息,请参阅为网格数据设置全局偏移

3、使用 API

3.1 用网格数据创建 OGC 3D Tiles

可以通过 TLcd3DTilesProcessorBuilder 访问 API 。

参数设置为适合大多数情况的默认值。你只需要指定源文件夹和文件,或者源ILcdModel和输出文件夹。

  return TLcd3DTilesProcessorBuilder.newBuilder()
                                    .addInputFiles("path/to/input/folder/mesh.obj")
                                    .outputPath("path/to/output/folder/")
                                    .process()
                                    .get();
  return TLcd3DTilesProcessorBuilder.newBuilder()
                                    .addInputFiles("path/to/input/folder/mesh1.obj")
                                    .addInputFiles("path/to/input/folder/mesh2.obj")
                                    .outputPath("path/to/output/folder/")
                                    .process()
                                    .get();

3.2 添加地理参考

在构建器上,可以指定一个特定ILcdModelReference或工厂,它在给定网格文件名的情况下返回特定的引用:

return TLcd3DTilesProcessorBuilder.newBuilder()
                                    .addInputFiles("path/to/input/folder/mesh1.obj")
                                    .outputPath("path/to/output/folder/")
                                    .defaultModelReference(new TLcdGeodeticReference())
                                    .process()
                                    .get();
  return TLcd3DTilesProcessorBuilder.newBuilder()
                                    .addInputFiles("path/to/input/folder/mesh1.obj")
                                    .outputPath("path/to/output/folder/")
                                    .modelReferenceDecoder(new ILcdModelReferenceDecoder() {
                                      @Override
                                      public ILcdModelReference decodeModelReference(String aModelReference) throws IOException {
                                        return new TLcdGeodeticReference();
                                      }
                                    })
                                    .process()
                                    .get();

如果未指定地理参考,则 3D  Tiles处理引擎会查找包含该参考的文件。该文件必须具有扩展名.epgs.prj.ref,并且与网格具有相同的文件名或名称为directory

有关TLcd3DTilesProcessorBuilder更多信息,请参阅文档

3.3 为网格数据设置全局偏移

可以为整个数据集或每个网格文件传递全局偏移。全局偏移应用于文件本身的引用。

在构建器上,指定单个全局偏移或将文件路径作为参数的工厂:

  TLcd3DTilesProcessorBuilder.newBuilder()
                             .addInputFiles("path/to/input/folder/mesh1.obj")
                             .outputPath("path/to/output/folder/")
                             .globalShift(new TLcdXYZPoint(0, 100, 25))
                             .process()
                             .get();

如果未调用这些方法,或者生成的全局偏移为空,则 3D Tiles处理引擎会尝试从与网格文件同名的.xyz文件的第一行检索全局偏移。例如,文件mesh.obj的全局移位将在mesh.xyz文件中。

.xyz文件应该有一个格式为 <x value> <y value> <z value>的单行,例如:

0 0 -10

3.4 强制 PNG 编码

与纹理面相反,彩色面具有单一颜色而不是纹理。3D Tiles处理引擎生成瓦片,其中所有颜色和纹理都合并到一个纹理图集中。

如果网格同时包含彩色面和纹理面,则可以将forcePNGEncoding参数设置为true以防止颜色编码伪影。此设置还会增加图块的权重,因此仅当你看到明显的伪影时才使用此设置。

对于只有颜色而没有纹理的网格,会自动使用 PNG 编码。

3.5 设置纹理质量

JPEG 编码的纹理质量值默认为 0.7f。可以通过textureQuality选项自行将其设置为 0.0f 和 1.0f 之间的值。

将此选项设置为较低的值会减小单个输出图块的大小,并导致典型的 JPEG 编码伪影。例如,请参见图 2“纹理质量设置”中的比较。对于大多数情况,我们建议你保留默认纹理质量值。

3.6 选择 Texture-To-Color 选项

如果将该textureToColor选项设置为 true,则 3D  Tiles处理引擎会将每个纹理转换为其平均颜色。当纹理质量低时,这可能很有用,因为它往往会为模型提供类似 CAD 的外观。生成的图块集也会更轻,处理速度也会显着加快。

此选项适用于包含许多小纹理的模型。如果模型具有单一的大纹理图集,则结果是具有单一颜色的模型。

4、文件格式和材料属性

3D Tiles Processing Engine 当前支持两种输入格式:Wavefront OBJ 和 GLB(glTF 的二进制变体)。输出格式始终为 OGC 3D Tiles,它实际上在内部使用 GLB 来表示 tile 有效负载。这对材料属性的处理方式有一些影响。

OBJ 格式将材质属性存储在外部.mtl文件中,并使用传统的环境、漫反射和镜面反射/光泽参数对材质进行建模。

另一方面,glTF 允许材质具有更丰富的 PBR(基于物理的渲染)属性。glTF/GLB 文件中的材质不仅可以包含基础颜色贴图,还可以包含“金属”和“粗糙度”属性(允许更好地控制表面的感知“光泽度”)、法线贴图和环境遮挡贴图。

如果使用 3D Tiles Processing Engine 处理 OBJ 文件,则 3D Tiles 输出只考虑漫反射颜色。但是,如果使用 GLB 文件作为输入,则源数据的 PBR 属性将完全转移到输出中。这允许客户端对平铺的输出数据执行更真实的渲染。


原文链接:Processing meshes into OGC 3D tiles

BimAnt翻译整理,转载请标明出处