3d开发的技术栈(3DTiles处理引擎)
3d开发的技术栈(3DTiles处理引擎)有关TLcd3DTilesProcessorBuilder更多信息,请参阅文档。如果没有可用的地理参考,则 3D 切片处理引擎会在没有参考的情况下处理数据集。3D Tiles Processing Engine 期望 y轴 向上的网格作为输入数据。默认情况下,3D 切片处理引擎会查找包含地理参考信息的文件。该文件可以是包含 EPSG 代码的.epsg文件、包含 WKT 文本的.prj文件或由 Lucy 保存的 .ref文件。你还可以通过 API 设置地理参考。
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
所需的参数是输入文件和输出文件夹:
表 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 |
用例:数据集由根据.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、使用 API3.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“纹理质量设置”中的比较。对于大多数情况,我们建议你保留默认纹理质量值。
如果将该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 属性将完全转移到输出中。这允许客户端对平铺的输出数据执行更真实的渲染。
原文链接:http://www.bimant.com/blog/3d-tiles-processing-engine/