4,重建顶层。
倾斜摄影数据的组织方式,一个 Data 目录下的 Tile 可能会成千上万,如果不使用重建顶层,那么输出的3DTiles的包围盒会非常非常多,增加加载时长。重建顶层,程序会根据瓦片的空间结构关系采用八叉树重建,包围盒该合并的合并,该废弃的废弃,最终加快加载速度。
爆肝第三天,地图数据发布详细教程
作者:御剑飞行
在第二篇中,我们介绍了Maomost Studio支持的数据发布能力
爆肝三天,制作属于自己的地图——DAY2(地图数据发布)
那么本篇完结篇中,我会详细介绍数据集发布的过程,每一个参数我都会详细的说明,让大家加深对Maomost Studio的全能性与便利性的认识。后续我们Mapmost Studio开放使用时,大家也可以去使用并体验体验~~。
一,Mapmost Studio 地图影像发布流程
首先你需要准备好你的数据集,需要确认数据集是否带有地理空间信息。若数据集没有地理空间信息的话,切片程序无法执行下去,并报错。
1,开始
点击控制面板左上方的服务应用集按钮。
然后,点击资源服务管理下拉列表。
接下来点击发布影像服务按钮。
进入到影像服务发布面板,点击右上角的上传按钮。
进入影像发布参数控制面板。
2,输入文件
在面板上输入文件虚线框中,可以自行输入或拖入你的影像文件。
这是我上传好的结果。
3,空间参考
一般情况下空间参考默认为空,你不需要做任何设置,这是因为影像文件中往往都内含地理空间信息。
如果这里没有设置,那么切片程序会从tif 的地理空间信息里读取地理信息数据,如果没有读取成功,切片最终就失败了。
如果你在这里设置空间参考,那么切片程序会使用你设置好的,但是如果此空间参考和影像地理空间信息里的空间范围有冲突,也会导致处理失败或者出现结果异常。所以注意,这里空间参考设置要么就保留空白,要么你就要明确知道影像数据的正确空间参考,否则不要去尝试。
如果你要自行设置,下面是设置方法。
其设置方法与model2tiles等程序相同,分为三种:
第一种为EPSG:{code}。
第二种为采用 wtk 方式描述的空间参考。
第三种为站心坐标系 ENU(east north up),以ENU:{维度},{经度}的方式来设置。
在你要自行设置空间参考的时候,Mapmost Studio支持经纬度局部坐标系(也就是ENU:{维度},{经度} )与EPSG坐标系(也就是EPSG:{code})。
我在这里先选择经纬度局部坐标系试一下。
点击好确认后,就是业界默认的ENU:{维度},{经度} 显示方式:
那如果你要选择EPSG编码搜索,你需要这样设置。就是在编码搜索框中键入你要的EPSG编码,下方会自动出现该坐标系的正式名称。
4,零点坐标
一般而言零点坐标在这里不需要你手动设置,我们的切片程序没有使用这个字段。因为我们觉得影像的偏移不是必须的,或者说这个功能没有人会需要(或许大家加载影像都是想让影像正好,没有人会想让影像偏移)。
5,服务层级
服务层级也就是最终瓦片的最大放大层级,就是你想让瓦片在墨卡托投影下最终能放大到多少级别。切片程序会默认自动计算出最大级别。同时我们Studio的控制面板提供自行设置,范围是【10,25】。如果你自己设置了服务层级,切片程序会取设置的服务层级和自动计算的最小值。一般而言,我们不用管它就好,程序会自行计算。
6,颜色拉伸
栅格数据每个位置有一个值(或者多个波段值),这个值不一定是颜色值,但是除了地形高程栅格外,其他类型的数据如果要做 三维可视化都需要转为图片切片,那么切片里就说常规颜色值。所以就需要一个栅格值到颜色值的映射算法。当然对于绝大多数非专业的栅格(尤其是下载得到的)里面的值就是 RGBA,
那么这个映射就很简单,每个点位最终颜色=栅格里存储的值。
颜色拉伸支持“偏移缩放”、“最值”、“百分比”三种方式。
(1)选中【偏移缩放】,如果【偏移】是 0,【缩放】是 0,根据栅格的波段数值类型来进行自动
处理。如果栅格的每个波段是 8bit,那么根据如下计算:
切片颜色=栅格里存储的值
如果栅格的每个波段是 16bit,那么如下计算:
切片颜色=栅格里存储的值*255/65535
如果【缩放】不是 0 值,那么按照下述计算
切片颜色= ( 栅格里存储的值 + 偏移 ) * 缩放
(2)选中【最值】,则按照下述计算
切片的像素颜色= ( 栅格里存储的值 – 最小值 ) * ( 255 / (最大值 – 最小值))
(3)选中【百分比】,首先根据最小百分比和最大百分比计算需要裁剪的最小像素个数和最大像素个数,然后把所有像素值进行排序,并统计每个像素值的个数,最小像素个数和最大像素个数进行裁剪,最后将剩余部分进行线性拉伸。
例如最小最大百要比都设置为 0.25 时,影像大小为 100*100 像素,首先把像素值从小到大排序,然后找到正序第 100*100*0.25 个像素的像素值 minvalue 和倒序第 100*100*0.25个像素的像素值 maxvalue,最后进行线性拉伸(同最小最大值拉伸),如下述计算
切片的像素颜色= ( 栅格里存储的值 – minvalue ) * ( 255 / (maxvalue – minvalue))
7,背景透明
下拉会出现自动、第四波段、透明色三种方式。
(1), 选中【自动】
处理程序内部自动根据栅格的波段元数据判定哪个波段是透明色。
(2), 选中【第四波段】
如果栅格的波段数大于 3 个,那么强制使用第四波段是透明波段。适合实际数据带第四波段,并且明确知道该波段是透明值的数据。
(3), 选中【透明色】
无论栅格的波段数是多少,只要读取到的颜色等于设定的 RGB 值,认为该像素是纯透明的。
8,服务类型
服务类型说白了就是切出来的影像切片的坐标形式,支持WMTS、TMS两种。
其中
WMTS就是GOOGLE那种切片坐标零点在左上角的切片坐标形式,
TMS就是切片坐标零点在左下角的切片坐标形式。
给大家个网站可以体验下栅格地图两种坐标形式的区别,这网站整的很详细。
Tiles à la Google Maps: Coordinates, Tile Bounds and Projection | No code | MapTiler
9,投影参数
支持经纬度和墨卡托两种。两者投影的精度不相同。
10,瓦片大小
就是最终切片后,正方形切片影像图片的像素宽高,支持256、512、1024三种。
11,发布
别忘了写服务名称,在控制面板最开始的那个框框。我在这里写了“ggggg”,点击发布按钮后,任务面板最上方会出现你的任务进度。(影像比较大,慢慢等吧~~~)
12,预览
发布成功就可以预览了,点击右边那个小眼睛。
随鼠标拖动,影像会自动根据放大层级去更新。
二,Mapmost Studio三维模型发布流程
怎么进入的部分,这次我直接上图。
1,开始
2,服务名称
填你所喜,写你所好。
3,模型类型
目前三维通用模型切片输出3DTiles支持三种格式:OBJ、GLTF、FBX。
在这三个中选一个即可。我这时选择GLTF给大家演示一下。
4,服务文件
操作照旧。
5,空间参考
这部分大家一直是比较在意的,下面我再重复一下。
空间参考分为三种:
第一种为EPSG:{code}。
EPSG:4326 这就是 WGS84 椭球定义的官方编码 。
EPSG:3857 这是流行的电子地图 web 墨卡托,比如谷歌地图,高德地图等都是这种方式。
EPSG:4490 这是我国的椭球定义标准 CGCS2000 。
EPSG:4546 等紧挨着的一系列,都是基于 EPSG:4490 椭球定义,采用 3 度带分割高斯克吕格投影的投影坐标系,也是目前国内数据常用的相关坐标系。
第二种为采用 wtk 方式描述的空间参考,在工程领域,由于一些精度需要,会自定义中
央经线,这样就没有对应的 EPSG 编码,那么这种方式下,会使用如下类似的格式来编写:类似下面这种:
GEOGCS["WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223
563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
第三种为站心坐标系 ENU(east north up),经常有一些模型没有考虑和地球位置匹配的问题, 可以采用站心坐标系的方式来处理。ENU 是以一个地球表面的位置点做为 0,0,0 点,以垂直地表向上为 z 轴,以正东向为 x 轴,正北向为 y 轴的一个局部空间来定义位置。在这里以ENU:{维度},{经度}的方式来设置。
在你要自行设置空间参考的时候,Mapmost Studio支持经纬度局部坐标系(也就是ENU:{维度},{经度} )与EPSG坐标系(也就是EPSG:{code})。
这次演示我使用EPSG:3857试一下。
6,零点坐标
零点坐标本质上就是中心偏移,是相对于你在上面选择的坐标系的中心点的偏移。零点坐标的出现还是数据精度的问题。假设你要建城市的三维模型,采用流行的 2000 某个投影坐标系,你会发现你的模型坐标非常大:
这个坐标范围几乎难以操作,实践中,经常假定我所有数据都有一个偏移位置,建模的坐标 + 这个偏移位置 = EPSG:4549 下投影坐标,这样就可以解决建模工具的精度问题。那么这个偏移位置就应该设置在零点坐标上。
切片程序的处理逻辑也简单,做空间变换:
模型坐标 + 零点坐标 = WGS84 世界坐标
这样数据才能精确放置到地球上。
在这里,我之前就选择了EPSG:3857坐标系。而我选择的glb模型本身是没有坐标系的,glb模型中的网格中的点的坐标全都是相对坐标,是相对于模型中心点的坐标,比如“23.909,56.345,1.889”,而模型中心点的坐标就是“0,0,0”。
因此我随机设置了一个中心点:"13433488.47,3674354.40,0",这是在EPSG:3857下的XY坐标。结合我之前讲过的“零点坐标本质上就是中心偏移,是相对于你在上面选择的坐标系的中心点的偏移。”,因此中心点:"13433488.47,3674354.40,0"就是相对于EPSG:3857坐标系中心点的偏移,这下大家应该理解了。
(换句话说,如果我选择ENU坐标系,比如ENU:39.90691,116.39123,那么我设置零点坐标的时候,比如“零点坐标:0,0,9.45”,其实就是经纬度保持不变,模型相对于地面的高度整体向上偏移9.45米。)
7,场景处理器
当前通用三维模型切片程序支持小场景和八叉树两种处理模式。目前八叉树处理模式我们正在测试,所以当前只支持小场景模式。下面的讲述都是围绕着小场景处理器展开的。
8,大小参数
大小参数控制产生的最大切片数据量,如果处理过程有一些b3dm超过你设置的大小参数的值(单位是MB),会尝试进行分割,以保证输出的B3DM文件的大小均不超过你设置的大小参数的值(单位是MB)。需要注意,这个分割是在空间进行的。
9,实例优化数
输出的3DTiles瓦片集中若有一些模型是复用的,那么不必每个模型都存储为b3dm,因此只要把模型集合体和纹理存一份,然后保存这些复用的模型的空间变换就可以了,这个最终输出的文件就是i3dm。比如场景中有一座森林,森林中的树都是相同的,如果我每棵树都存成一个b3dm,那浪费的存储空间将会非常恐怖。因此,我只将树存一份,以及所有树的相对空间变换矩阵(4X4列优先矩阵)统统存在一起,就是最终的i3dm。
实例优化数就是控制,当一个模型被复用超过多少次的时候,那么我们就把该模型使用 i3dm 方式输出。反之使用b3dm。
模型复用率越高,i3dm 优化意义越大。有人尝试把这个值设置为 2,只要复用超过 2 次,就使用 i3dm,就会发现 i3dm 的个数会很多,反倒导致最终的渲染效率降低。所以这个阈值最好和你的数据来匹配调整更合适一些,达到一个渲染批次和数据量的平衡。
10,纹理合并与翻转YZ
纹理合并开关被打开后,输出的3DTiles中的模型的相同的纹理会被合并,从而减少drall call。
翻转YZ指的是OBJ、GLTF某些模型的坐标的YZ其实是翻转过来的,如果这时,此开关不打开,最后输出的3DTiles加载出来时就是“立着的”。
11,纹理压缩与顶点压缩
纹理压缩支持默认、basis、webp、ktx2三个选项。
选择【默认】使用 jpg(非透明)或者 png(透明)格式。
选择【basis】比原来的综合优化(crn)的压缩速度更快,且支持 pc,android,iphone多平台使用。
选择【Webp】使用 webp 格式的纹理,webp 存储量大约是默认 jpg 的 70%,可以加快网络传输,但是它只能在 chrome 下使用,而且不会减少显存占用。
选择【ktx2】 使用 ktx2 格式的纹理,存储量大约是默认 jpg 的 90%,可以固定减少显存消耗 5/6 左右,比如一张 1024*1024 分辨率纹理,默认 jpg 在显存里实际占用是固定 3MB显存,处理程 ktx2 只占 3MB / 6 = 512KB,这个对于显卡来说极度友好。
顶点压缩采用了 Draco 压缩算法来减少顶点数据的存储量,Draco 是比较高效的一种压缩方式,目前我们内部的配置是顶点采用 14bit,法向量采用 10bit,纹理坐标采用 10bit,总计 34bit 存储一个顶点。未压缩的数据顶点是 96bit(3 个 float),法向量 96bit(3 个 float), 纹理坐标 64bit(2 个 float),总计 256bit。那么压缩率是 :大约 1/7.5,这个压缩率很强大的,大量节省传输数据量。如果你的模型观察视角都是较大范围,那么可以开启这个,如果你的模型包含一些细小的零件,那么最好不要开启,会导致模型扭曲变形。
12,颜色转纹理
这个开关选项,如果开启,如果模型 Mesh 的材质存在基础颜色(baseColorFactor),且不等于纯白色,会做如下操作:
如果此 Mesh 材质也存在基础色纹理,那么该纹理的每个像素值会乘以这个基础颜色。
如果此 Mesh 材质不存在基础色纹理,那么会构造一个 4x4 的小纹理设置到这个材质上,并且把材质的基础色设置为白色。
这么做的意义在于,对于一些 BIM 构件,内部几乎没有纹理,绝大部分构件都是不同颜色,为了能降低渲染批次,而进行此操作。
13,发布并预览
三,Mapmost Studio倾斜摄影数据集发布流程
怎么进入的部分,直接上图。
1,开始
2,填写服务名称
3,服务文件、空间参考、零点坐标
这三项与Mapmost Studio三维模型发布流程相同,不再赘述。
4,重建顶层。
倾斜摄影数据的组织方式,一个 Data 目录下的 Tile 可能会成千上万,如果不使用重建顶层,那么输出的3DTiles的包围盒会非常非常多,增加加载时长。重建顶层,程序会根据瓦片的空间结构关系采用八叉树重建,包围盒该合并的合并,该废弃的废弃,最终加快加载速度。
5,强制双面与无光照
强制双面的意思是双面渲染。大家可能发现一些倾斜模型从这面看有纹理,从反面看就没了纹理,强制双面就是让反面也渲染纹理。
无光照的部分,倾斜数据的来源是实景照片,无光照选项开启后,倾斜模型的渲染部分不参与 Cesium引擎的默认光照计算,显示的更加真实一些。而且生成的 3dtiles 里不包含法向信息,节省了空间。一般来说无需关闭,但是一些引擎对于不含法向信息的模型渲染是黑色的,为了避免这个问题可以尝试关闭该选项。
6,纹理格式、顶点压缩、压缩等级
这部分同Mapmost Studio三维模型发布流程。
只是倾斜摄影数据发布这部分的纹理格式支持“默认、webp、ktx2”三种。
7,发布并预览
如果倾斜数据量比较大,那么切片时间就会长一些。
四,结语
本篇文章是《制作属于自己的地图》的完结篇,详细介绍了Mapmost Studio地图影像发布、三维模型发布、倾斜摄影数据发布,大家可以看到这个平台工具是非常便捷的,一顿鼠标点点点,最终就把地图数据服务发出来了。我们后面会把底图影像放上去,之后就更加便捷了。请大家即时关注我们的动态,谢谢!
关注Mapmost,持续更新GIS、三维美术、计算机技术干货
Mapmost是一套以三维地图和时空计算为特色的数字孪生底座平台,包含了空间数据管理工具(Studio)、应用开发工具(SDK)、应用创作工具(Alpha)。平台能力已覆盖城市时空数据的集成、多源数据资源的发布管理,以及数字孪生应用开发工具链,满足企业开发者用户快速搭建数字孪生场景的切实需求,助力实现行业领先。
欢迎进入官网体验使用:Mapmost——让人与机器联合创作成为新常态