CesiumLab中将人工模型(fbx、obj)、建筑矢量面(shp)和BIM模型(clm)的处理都集中在一起,统一使用通用模型处理。
输入文件部分,加载文件在这里不在赘述,输入了文件后,点击每条记录后面的小齿轮就可以进入设置值参数界面,具体参数面板,根据输入类型不同而不同。
1.obj参数设置
1)空间参考
对于通用模型,大部分的数据都没有自带空间参考,为了便于处理,所以我们使用了一个默认值: ENU:39.90691,116.39123 此位置在天安门附近。模型坐标的 (0,0,0)点会放置到该位置,如果你的模型坐标非常大,距离零点很远,可能漂浮在半空中。默认坐标仅仅是为了测试,需要根据你数据具体设置。
2)属性文件
通用模型处理的数据,都会默认带两个属性:id,name对于不同的数据 id 和 name 来源不同。 Obj: name 来自 node name,id 是随机生成 Fbx:name 来自 node name,id 是根据 fbxsdk 的unqiueid 计算 md5 得到。 Clm:name 来自 构件名称,id 根据导出插件,revit 来自构件的 uuid,microstation 来自构件 id。 Shp:name 来自 name 字段,如果没有来自 FID,id 是来自 FID。
除了这两个属性之外,在本章【属性字段】部分可以选择是否携带可选属性。对于 obj、 fbx 等模型来说,由于本身不携带属性数据,我们支持通过属性文件来外挂属性字段。对于属性文件的要求:
-
必须是csv 格式,utf8 编码,注意 csv 是通过英文逗号分割的。
-
第一列必须是【唯一名称】。
-
第一列的值和模型场景里的名称关联匹配
3)透明模式
用户可以强制设置透贴的形式,可以指定是 mask 或者blend。 【Mask】:适合树叶类的透明。 【blend】:适合玻璃类透明。 【自 动】:表示让程序自动判断。如果你透明通道数据里的 alpha 值,除了 0,就是 255,那就用 mask,否则就用 blend。
4)强制双面
由于数据制作或者转格式中的一些缺陷,一些三角面绕向是反向的。或者还有一些类似护栏、纱网等对象,虽然在 3dmax 里正面背面观察都可以,但是导出后可能只在一个面能观察到,为了避免此种问题。这里可以开启,不过该选项会导致一定的渲染性能损失。
5)无光照
对于烘焙后的 3dsmax 数据,光照阴影已经烘焙到贴图上了,无需通过 Cesium 的渲染光照计算或者说也不能通过 Cesium 的光照计算,那么开启此选项后,保证模型颜色和烘焙效果一致。
6)翻转YZ
Obj 没有信息存储向上轴的问题,比如 gltf 是 y 向上,但是很多三维引擎尤其地理引擎都是 z 向上,我们默认认为 obj 也是 z 向上。这个开关需要和你 3dsmax 导出时候的选项一致,向上轴就不会错。
7)gbk 编码
Obj 是个纯文本文件,所有文本文件都涉及到文字编码问题,如果 obj 内容都是纯英文,这里可以忽略。如果处理结果点查属性,发现有乱码,那么打开这个开关切片下再尝试。默认 3dsmax 导出的 obj 都是 gbk 编码的。
8)翻转绕向
Obj 格式简单,但是来源多种,一般来说 3dsmax 导出的数据没有绕向问题,但是发现有背面裁剪情况,尝试开启此选项,重新处理。
2.fbx参数设置
fbx的参数设置可以完全参照obj参数设置去设置,这里不再赘述。
3.shp参数设置
1)空间参考
一般来说 shp 的空间参考信息完备,这里不需要设置。
2)造型参数
造型参数,处理程序根据 shp 的轮廓信息来生成三维几何体需要的。各项参数详述:
-
造型参数.建筑高度
建筑高度有两种方式: 1)固定高度方式:
根据给定值来设置建筑模型的高度。
2)高度字段方式: 建筑高度 = 选择的字段值 * 设定的倍率 比如 shp 里有楼层个数字段 floor,那么这里可以选择 floor,倍率设置 3,表示一层三米,总高度 = floor 的值 * 3 2.造型参数.底面高度
和【建筑高度】字段类似,固定或者字段两种方式来设置建筑底面的高度。设置不赘述,下一个参数会统一说明建筑的高度计算方式 3.造型参数.绝对高度
如果 【绝对高度】开关关闭,那么 建筑下底高 = 【底面高度】+ 【地面中心点的地形高程】建筑上顶高 = 建筑下底高 + 【建筑高度】 如果 【绝对高度】开关打开,那么建筑下底高 = 【底面高度】建筑上顶高 = 【建筑高度】 4.造型参数.分类单体
【分类单体】打开之后,生成的 3dtiles 比较特殊,是一种支持 Cesium 分类渲染的几何体,可以用来做倾斜单体化,具体见这篇文章 分类单体化的说明 - Cesium实验室 5.造型参数.仅外轮廓
建筑矢量面可能是带孔洞的复杂 Polygon,如果此开关打开,那么会忽略内部孔洞,只按外轮廓生成建筑几何体。 6.造型参数.边界简化
一般来说,建筑矢量面的外轮廓边界并不复杂,我们不需要开启此参数(保持默认值 0),但是如果有一些非建筑轮廓的矢量面,希望也能拉体,如果边界过于复杂,可以常设设置此参数来简化边界,比如设置了 1,那就表示以 1 米误差来简化边界。这种使用是非常规方式,请自行测试。 7.造型参数.缓冲范围
这个主要需求在于,很多单体化矢量是基于正射来勾勒得单体化轮廓,但是如果此轮廓勾勒得过于紧密,单体化不足以完全包裹倾斜得模型范围,导致部分裸漏,效果不好,可以尝试设置缓冲范围,我们对矢量轮廓向外做一个缓冲区,然后再进行生成几何体操作。
3)贴图设置
对于shp 生成的白模,我们可以依据条件来进行模型贴图。条件是一个列表,可以设置多个。点击操作里弹出添加条件界面:
1.贴图设置.顶部纹理
顶部纹理:需要设置一个 jpg 图片的路径,可以点击【选择】按钮来选择该路径。
2.贴图设置.顶纹理宽
顶纹理宽:默认为 0,表示一张纹理覆盖整个顶面。如果不为 0,比如设置了 1,表示这张纹理每隔 1 米重复一次,那处理程序会计算重复次数,设置每个顶点的 UV 坐标。
3.贴图设置.侧面纹理
侧面纹理:需要设置一个 jpg 图片的路径,可以点击【选择】按钮来选择该路径。
4.贴图设置.侧纹理宽
侧纹理宽:默认是 0,表示一张纹理图片贴满整个侧面。如果不是 0,比如设置 1,表示这张贴图每隔 1 米重复一次,那处理程序会计算重复次数,设置每个顶点的 UV 坐标。
5.贴图设置.条件
需要选择一个 【字段】,选择 【操作符】,输入【条件值】比如 字段选择的“floor”,操作符 “==”,条件是“3” 那么表示这个贴图条件只作用在 floor==3 的建筑物上,其他条件类似。 多个条件的判定逻辑: 对每个矢量对象,所有条件按照添加顺序顺次判定,只要对象满足了某个条件,立即采用该条件的贴图设置,不再做后续判定。
6.贴图设置.内置贴图
我们自带了三种贴图效果,单击该图片,会添加一个配置条件,内置的贴图已经配置好了,只需要设置下条件即可。
4)地形高程
地表高程我们支持从地形切片的输出数据来采样,而且支持多个地形数据。点击【添加紧凑高程切片】选择 pak 地形切片,会列在此表格里。 点击【添加散列高程切片】选择散列地形切片,散列地形会列在此表格里。 处理程序会按照列表顺序来依次采样,只要正确采样到对应点位高度,就停止采样下一个。 建筑的高程,我们只采样轮廓的中心点位置。
4.clm参数设置
具体还是参照obj参数设置,这里不在赘述。