objTo3d-tiles

将 obj 模型转换为 3D Tiles 的 Node 命令行工具以及 Node 模块, 基于obj2gltf。

在线示例

注意: 目前只支持 .b3dm 和 .i3dm !

请使用 Cesium v1.37 或以后版本, 因为这里的 3D Tiles 使用 glTF2.0 。

开始使用

确保已经安装 Node , 然后

npm install -g obj23dtiles

基本用法

obj23dtiles -i ./bin/barrel/barrel.obj
// 在模型目录导出 barrel.gltf
obj23dtiles -i ./bin/barrel/barrel.obj -b
// 在模型目录导出 barrel.glb

注意: 更多 .gltf 和 .glb 的转换信息可以在 obj2gltf 查看。

注意: 如果你的模型中包含透明纹理,请添加 --checkTransparency 参数。

注意: 如果的模型使用 blinn-phong 材质, 当转换为PBR材质时使用遮蔽贴图会使模型看起来变暗。 所以 useOcclusion (使用遮蔽贴图) 默认为 false, 如果你的模型本身就准备使用PBR材质,请加 --useOcclusion 参数,这里有一些对比图。

obj23dtiles -i ./bin/barrel/barrel.obj --b3dm
// 在模型目录导出 barrel.b3dm
obj23dtiles -i ./bin/barrel/barrel.obj --b3dm --outputBatchTable
// 在模型目录导出 barrel.b3dm 和 barrel_batchTable.json
obj23dtiles -i ./bin/barrel/barrel.obj -c ./bin/barrel/customBatchTable.json --b3dm
// 在模型目录导出 barrel.b3dm
obj23dtiles -i ./bin/barrel/barrel.obj -f ./bin/barrel/customFeatureTable.json --i3dm
// 在模型目录导出 barrel.i3dm
obj23dtiles -i ./bin/barrel/barrel.obj -f ./bin/barrel/customFeatureTable.json
-c ./bin/barrel/customI3dmBatchTable.json --i3dm
// 在模型目录导出 barrel.i3dm

要素表目前可以使用以下属性控制模型 : position(位置),orientation(旋转),scale(缩放)。

创建单个瓦片

obj23dtiles -i ./bin/barrel/barrel.obj --tileset
// 在模型目录导出 Batchedbarrel 文件夹
obj23dtiles -i ./bin/barrel/barrel.obj --tileset
-p ./bin/barrel/customTilesetOptions.json -c ./bin/barrel/customBatchTable.json
// 在模型目录导出 Batchedbarrel 文件夹
obj23dtiles -i ./bin/barrel/barrel.obj --tileset --i3dm
-f ./bin/barrel/customFeatureTable.json
// 在模型目录导出 Instancedbarrel 文件夹
obj23dtiles -i ./bin/barrel/barrel.obj --tileset --i3dm
-f ./bin/barrel/customFeatureTable.json -p ./bin/barrel/customTilesetOptions.json
-c ./bin/barrel/customI3dmBatchTable.json
// 在模型目录导出 Instancedbarrel 文件夹

customTilesetOptions.json 配置文件可以包含以下信息, 这些都是虚拟值,请在文件中包含自己想修改的属性,没有出现的属性会根据模型自动计算。

{
    "longitude":      -1.31968,     // 瓦片原点(模型原点 (0,0,0)) 经度的弧度值。
    "latitude":       0.698874,     // 瓦片原点维度的弧度值。
    "transHeight":    0.0,          // 瓦片原点所在高度,单位为米。
    "region":         true,         // 使用 region 作为外包体。
    "box":            false,        // 使用 box 作为外包体。
    "sphere":         false         // 使用 sphere 作为外包体。
}

注意: 如果你没有指明 transHeight 属性,你的模型会被放置在高度为0的地表,无论你模型最低点是什么值。比如你有一个飞机模型,它在1000单位高度,那就会被放置在地面上,同样的道理如果你有一个潜艇,都在原点以下,也会被抬升到地面上。所以如果你想保留原始模型的相对高度,可以设置 transHeight = 0.0。

这是不用的外包体示意图。

捆绑瓦片

你可以将多个瓦片捆绑为一个瓦片,每个瓦片作为外置瓦片集合到一个 tileset.json 中。

obj23dtiles combine -i ./bin/barrel/output/

作为 Node 模块使用

如果你想调试此工具或者在node中使用,可以看看如何作为Node模块使用。

测试

导航到项目文件夹下,运行

npm run test

问题定位

首先,确保你的 .obj 文件是完整的,通常情况下包含 .obj, .mtl 和纹理文件比如 .jpg 或 .png。 如果你使用的 Win10, 可以使用自带的模型浏览工具 “Mixed Reality Viewer” 浏览你的 .obj 文件, 或者使用这个在线浏览工具。

其次,使用此工具导出 .glb 然后查看是否现实正常,你可以使用Cesium 或者 Three.js gltf 浏览器。

最后,直接导出 .b3dm 或瓦片然后在 Cesium 中加载。

样例数据

示例代码中的样例数据在 .bin\barrel\ 文件夹下。

barrel\
    |
    - barrel.blend              --
    |                             |- Blender 工程文件和纹理
    - barrel.png                --
    |
    - barrel.obj                --
    |                             |- Obj 模型文件
    - barrel.mtl                --
    |
    - customBatchTable.json     ---- b3dm 使用的属性表例子
    |
    - customTilesetOptions.json ---- 自定义瓦片配置文件
    |
    - customFeatureTable.json   ---- i3dm 使用的要素表例子
    |
    - customI3dmBatchTable.json ---- i3dm 使用的属性表例子
    |
    - output\                   ---- 导出的数据
        |
        - barrel.glb
        |
        - barrel.gltf
        |
        - barrel_batchTable.json    ---- 默认属性表
        |
        - Batchedbarrel\            ---- 使用 b3dm 的瓦片
        |   |
        |   - tileset.json
        |   |
        |   - barrel.b3dm
        |
        - Instancedbarrel\          ---- 使用 i3dm 的瓦片
        |   |
        |   - tileset.json
        |   |
        |   - barrel.i3dm
        |
        - BatchedTilesets\          ---- 自定义配置文件的瓦片
            |
            - tileset.json
            |
            - barrel_withDefaultBatchTable.b3dm
            |
            - barrel_withCustonBatchTable.b3dm

相关资源