转换工具
使用DasViewer工具将OSGB文件导出为OBJ格式
这是使用该工具打开OSGB模型的界面
导出
通过这个选项,导出OBJ文件,但是在操作的时候出现如下问题:
- 过程很缓慢
- 导出的文件体积很大
- 源文件过大会在中途崩溃,猜测是内存不足导致的
因此要对OSGB源文件进行压缩,在压缩之前首先要了解OSGB的文件格式
模型的数据结构
首先,整个大的校区模型是由这四个Block组成的,其他文件夹的名称可能不是以Block为前缀的,但是只要保证该文件夹下有osgb的文件就可以
然后,让我们看看里面的结构
可以看到他们的名称后缀都是Lxx
,这里表示的是LOD的层级,LOD的意思是(Level Of Detail)
参考这篇文章:
OSGB格式的层级划分和块大小划分规则:
分辨率要求:根据需要展示的分辨率,将地图划分为不同的层级。每个层级的分辨率比前一个层级低一半,直到最小分辨率满足需求。
空间范围:根据倾斜摄影三维模型覆盖的实际空间范围,将地图划分为不同的区域,以便于进行实时加载和渲染。
数据量限制:为了避免单个块过大导致加载时间过长,可以根据实际数据量进行块大小的划分。通常来说,OSGB格式的块大小一般为64m*64m,但也可以根据实际情况进行调整。
在OSGB格式中,每个层级下的数据都被划分为若干个块,每个块由一个或多个文件组成。每个文件包含一部分地图数据和元数据信息,如相机参数、纹理贴图等。这样,可以提高数据读取速度和效率,减少内存占用和加载时间。
因此,LOD层级越高,保留越多的模型细节,请看下面这3个例子:
完整的模型:
最低层级的模型:
L20的某个模型:
可以看到最低层级的模型只保留了模型的基本特征,层级越高模型的细节越多,联想到另一种SH基函数的美
图形学基础|球谐光照(Spherical Harmonics Lighting)-CSDN博客
压缩
我采用一种简单直接的方式进行压缩
在每个文件夹下,只保留前3~4个层级,在这次开发中我只保留到L19,把大于等于L20的模型文件全部删除。
就结果而言,模型精度几乎与原模型无差别,而大小则小了很多