npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

obj23dtiles-extra

v1.0.5

Published

obj to 3d tiles with extra features

Downloads

19

Readme

This fork from PrincessGod/objTo3d-tiles for continue maintaning and add expra features for personal purposes.

New features:

  • Added tilesetOptions parameter for combine tilesets function for setting geometricError and refine method.
  • When used as a node lib, return a Promise (thanks to addam PR)

Features plan:

  1. Move to ES6

  2. Update tests

  3. Improve tilesets combine (make possible to create nested tilesets)

  4. Check jiaojialulu PR and merge if it'll improve the tool

WARNING: THIS REPO IS UNDER DEVELOPING.

Node command line tool and module convert obj model file to 3D Tiles, based on obj2gltf.

NOTE: Only support .b3dm and .i3dm for now!

Please use Cesium after v1.37, cause this 3d tile use glTF2.0.

Getting Start

If you already have installed PrincessGod/obj23dtiles package remove it with command

npm uninstall -g obj23dtiles

Make sure you have Node installed, and then

npm install obj23dtiles-extra

Basic Usage

  • Convert .obj to .gltf
obj23dtiles -i ./bin/barrel/barrel.obj
// Export barrel.gltf at obj folder.
  • Convert .obj to .glb
obj23dtiles -i ./bin/barrel/barrel.obj -b
// Export barrel.glb at obj folder.

NOTE: More detial to convert .gltf and .glb can find at obj2gltf.

NOTE: If your model have tarnsparency texture please add --checkTransparency parameter.

NOTE: If your model using blinn-phong material, and use occlusion when convert to PBR material, the model will looks darker. The useOcclusion default is false, remember adding --useOcclusion if your model using PBR material. Here are some showcase about it.

  • Convert .obj to .b3dm with default BatchTable, which have batchId and name property, and name is model's name.
obj23dtiles -i ./bin/barrel/barrel.obj --b3dm
// Export barrel.b3dm at obj folder.
  • Convert .obj to .b3dm with default BatchTable and export default BatchTable (a JSON file). Maybe get information for custom BatchTable.
obj23dtiles -i ./bin/barrel/barrel.obj --b3dm --outputBatchTable
// Export barrel.b3dm and barrel_batchTable.json at obj folder.
obj23dtiles -i ./bin/barrel/barrel.obj -c ./bin/barrel/customBatchTable.json --b3dm
// Export barrel.b3dm with custom batch table at obj folder.
obj23dtiles -i ./bin/barrel/barrel.obj -f ./bin/barrel/customFeatureTable.json --i3dm
// Export barrel.i3dm at obj folder.
obj23dtiles -i ./bin/barrel/barrel.obj -f ./bin/barrel/customFeatureTable.json
-c ./bin/barrel/customI3dmBatchTable.json --i3dm
// Export barrel.i3dm with BatchTable at obj folder.

FeatureTable support following parameters : position, orientation, scale.

Create Tileset

  • Create a single tileset with .b3dm tile.
obj23dtiles -i ./bin/barrel/barrel.obj --tileset
// Export ./Batchedbarrel folder at obj folder which is a tileset.
  • Create a single tileset with .b3dm tile and custom tileset options, custom BatchTable.
obj23dtiles -i ./bin/barrel/barrel.obj --tileset
-p ./bin/barrel/customTilesetOptions.json -c ./bin/barrel/customBatchTable.json
// Export ./Batchedbarrel folder at obj folder which is a tileset with custom tileset options.
  • Create a single tileset with .i3dm tile.
obj23dtiles -i ./bin/barrel/barrel.obj --tileset --i3dm
-f ./bin/barrel/customFeatureTable.json
// Export ./Instancedbarrel folder at obj folder which is a tileset.
  • Create a single tileset with .i3dm tile and custom tileset options, custom BatchTable.
obj23dtiles -i ./bin/barrel/barrel.obj --tileset --i3dm
-f ./bin/barrel/customFeatureTable.json -p ./bin/barrel/customTilesetOptions.json
-c ./bin/barrel/customI3dmBatchTable.json
// Export ./Instancedbarrel folder at obj folder which is a tileset.

The customTilesetOptions.json can have options bellow, and these are fake values, please only add properties you need, other value will be auto calculate through .obj file.

{
    "longitude":      -1.31968,     // Tile origin's(models' point (0,0,0)) longitude in radian.
    "latitude":       0.698874,     // Tile origin's latitude in radian.
    "transHeight":    0.0,          // Tile origin's height in meters.
    "region":         true,         // Using region bounding volume.
    "box":            false,        // Using box bounding volume.
    "sphere":         false         // Using sphere bounding volume.
}

Possible tileset options

  • @param {Number} [options.longitude=-1.31968] The longitute of tile origin point.
  • @param {Number} [options.latitude=0.698874] The latitute of tile origin point.
  • @param {Number} [options.minHeight=0.0] The minimum height of the tile.
  • @param {Number} [options.maxHeight=40.0] The maximum height of the tile.
  • @param {Number} [options.tileWidth=200.0] The horizontal length (cross longitude) of tile.
  • @param {Number} [options.tileHeight=200.0] The virtical length (cross latitude) of tile.
  • @param {Number} [options.transHeight=0.0] The transform height of the tile.
  • @param {String} [options.gltfUpAxis="Y"] The up axis of model.
  • @param {Object} [options.properties] Pre-model properties.
  • @param {Number} [options.geometricError = 200.0] The geometric error of tile.
  • @param {Matrix4} [options.transform] The tile transform.
  • @param {Boolean} [options.region = true] Using bounding region for tile.
  • @param {Boolean} [options.box] Using bounding box for tile.
  • @param {Boolean} [options.sphere] Using bounding sphere for tile.

NOTE: If you are not specify the transHeight option, your model will be place at earth ground surface, which means no matter what the height your models are, the lowerest point of your models will be place at height = 0.0 on the earth. But if you want keep origin heigth you just need specify transHeight = 0.0.

Here are different bounding volumes.

Combine tilesets

You can combine tilesets into one tileset.json as external tileset.

-i inputDir (required) Input directory include tilesets.
-o outputTileset (optional, default: "tileset.json") Output tileset file path.
-pj tilesetOptionsJson (optional, default: "{}") tileset options json. ex: { "geometricError": 200, "refine": "ADD" }
    tilesetOptionsJson.geometricError (optional, default:500) tileset geometricError.
    tilesetOptionsJson.refine (optional, default: "ADD") tileset refine method.

obj23dtiles combine -i ./bin/barrel/output -pj '{ "geometricError": 200, "refine": "ADD" }'

Using as node module

If you want to use this tool in node or debug, check out how to use as node module.

Test

Navigate to this project folder and run

npm run test

Troubleshooting

First, make sure your .obj file is complete, normally include .obj, .mtl and textures like .jpg or .png. You can preview your .obj model via "Mixed Reality Viewer" if you are in windows 10. Otherwise you can use this online viewer. Second, export .glb and check if it display correctly. You can use Cesium or Three.js gltf viewer. In the end, just export .b3dm or tileset and load in Cesium.

Sample Data

Sample data under the .bin\barrel\ folder.

barrel\
    |
    - barrel.blend              --
    |                             |- Blender project file with texture.
    - barrel.png                --
    |
    - barrel.obj                --
    |                             |- Obj model files.
    - barrel.mtl                --
    |
    - customBatchTable.json     ---- Custom batchtable for b3dm.
    |
    - customTilesetOptions.json ---- Custom tileset optional parameters.
    |
    - customFeatureTable.json   ---- Custom FeatureTable for i3dm.
    |
    - customI3dmBatchTable.json ---- Custom BatchTable for i3dm.
    |
    - output\                   ---- Export data by using upper files.
        |
        - barrel.glb
        |
        - barrel.gltf
        |
        - barrel_batchTable.json    ---- Default batch table.
        |
        - Batchedbarrel\            ---- Tileset use b3dm
        |   |
        |   - tileset.json
        |   |
        |   - barrel.b3dm
        |
        - Instancedbarrel\          ---- Tileset use i3dm
        |   |
        |   - tileset.json
        |   |
        |   - barrel.i3dm
        |
        - BatchedTilesets\          ---- Tileset with custom tileset.json
            |
            - tileset.json
            |
            - barrel_withDefaultBatchTable.b3dm
            |
            - barrel_withCustonBatchTable.b3dm

Resources

Credits

Great thanks to PrincessGod for developing original tool.