CesiumGS / obj2gltf

Convert OBJ assets to glTF
Apache License 2.0
1.71k stars 307 forks source link

Conversion error (after >1 hour of converting) #33

Closed mflux closed 7 years ago

mflux commented 7 years ago

Here is what I'm trying to convert: https://dl.dropboxusercontent.com/u/705999/Paris.zip

Command I ran node node_modules/obj2gltf/bin/obj2gltf.js "Paris2010_0.obj" model.gltf -s

After seemingly stuck converting, I decided to let it run for the rest of the day. After about 1.5 hours or so, a js error finally came up:

    { Error
        at new DeveloperError (c:\Users\Flux\Documents\assetdev\Paris\node_modules\cesium\Source\Core\DeveloperError.js:44:19)
        at Object.Tipsify.tipsify (c:\Users\Flux\Documents\assetdev\Paris\node_modules\cesium\Source\Core\Tipsify.js:189:19)
        at Object.GeometryPipeline.reorderForPostVertexCache (c:\Users\Flux\Documents\assetdev\Paris\node_modules\cesium\Source\Core\GeometryPipeline.js:433:40)
        at optimizeForVertexCache (c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\lib\optimizeForVertexCache.js:93:38)
        at Function.Pipeline.processJSONWithExtras (c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\lib\Pipeline.js:95:5)
        at c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\lib\Pipeline.js:177:29
        at tryCatcher (c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\node_modules\bluebird\js\release\util.js:16:23)
        at Promise._settlePromiseFromHandler (c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\node_modules\bluebird\js\release\promise.js:504:31)
        at Promise._settlePromise (c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\node_modules\bluebird\js\release\promise.js:561:18)
        at Promise._settlePromise0 (c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\node_modules\bluebird\js\release\promise.js:606:10)
        at Promise._settlePromises (c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\node_modules\bluebird\js\release\promise.js:685:18)
        at Promise._fulfill (c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\node_modules\bluebird\js\release\promise.js:630:18)
        at Promise._resolveCallback (c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\node_modules\bluebird\js\release\promise.js:425:57)
        at Promise._settlePromiseFromHandler (c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\node_modules\bluebird\js\release\promise.js:516:17)
        at Promise._settlePromise (c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\node_modules\bluebird\js\release\promise.js:561:18)
        at Promise._settlePromise0 (c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\node_modules\bluebird\js\release\promise.js:606:10)
        at Promise._settlePromises (c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\node_modules\bluebird\js\release\promise.js:685:18)
        at Promise._fulfill (c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\node_modules\bluebird\js\release\promise.js:630:18)
        at PromiseArray._resolve (c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\node_modules\bluebird\js\release\promise_array.js:125:19)
        at PromiseArray._promiseFulfilled (c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\node_modules\bluebird\js\release\promise_array.js:143:14)
        at Promise._settlePromise (c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\node_modules\bluebird\js\release\promise.js:566:26)
        at Promise._settlePromise0 (c:\Users\Flux\Documents\assetdev\Paris\node_modules\gltf-pipeline\node_modules\bluebird\js\release\promise.js:606:10)
      name: 'DeveloperError',
      message: 'indices length must be a multiple of three.',
      stack: 'Error\n    at new DeveloperError (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\cesium\\Source\\Core\\DeveloperError.js:44:19)\n    at Object.Tipsify.tipsify (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\cesium\\Source\\Core\\Tipsify.js:189:19)\n    at Object.GeometryPipeline.reorderForPostVertexCache (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\cesium\\Source\\Core\\GeometryPipeline.js:433:40)\n    at optimizeForVertexCache (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\lib\\optimizeForVertexCache.js:93:38)\n    at Function.Pipeline.processJSONWithExtras (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\lib\\Pipeline.js:95:5)\n    at c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\lib\\Pipeline.js:177:29\n    at tryCatcher (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n    at Promise._settlePromiseFromHandler (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\node_modules\\bluebird\\js\\release\\promise.js:504:31)\n    at Promise._settlePromise (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\node_modules\\bluebird\\js\\release\\promise.js:561:18)\n    at Promise._settlePromise0 (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\node_modules\\bluebird\\js\\release\\promise.js:606:10)\n    at Promise._settlePromises (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\node_modules\\bluebird\\js\\release\\promise.js:685:18)\n    at Promise._fulfill (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\node_modules\\bluebird\\js\\release\\promise.js:630:18)\n    at Promise._resolveCallback (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\node_modules\\bluebird\\js\\release\\promise.js:425:57)\n    at Promise._settlePromiseFromHandler (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\node_modules\\bluebird\\js\\release\\promise.js:516:17)\n    at Promise._settlePromise (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\node_modules\\bluebird\\js\\release\\promise.js:561:18)\n    at Promise._settlePromise0 (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\node_modules\\bluebird\\js\\release\\promise.js:606:10)\n    at Promise._settlePromises (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\node_modules\\bluebird\\js\\release\\promise.js:685:18)\n    at Promise._fulfill (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\node_modules\\bluebird\\js\\release\\promise.js:630:18)\n    at PromiseArray._resolve (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\node_modules\\bluebird\\js\\release\\promise_array.js:125:19)\n    at PromiseArray._promiseFulfilled (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\node_modules\\bluebird\\js\\release\\promise_array.js:143:14)\n    at Promise._settlePromise (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\node_modules\\bluebird\\js\\release\\promise.js:566:26)\n    at Promise._settlePromise0 (c:\\Users\\Flux\\Documents\\assetdev\\Paris\\node_modules\\gltf-pipeline\\node_modules\\bluebird\\js\\release\\promise.js:606:10)' }

Any ideas on what could be going wrong? It's not that big of an obj (around 40 mb with 30 mb of textures).

lilleyse commented 7 years ago

Something seems to be breaking in the optimizeForVertexCache stage of gltf-pipeline, which obj2gltf uses.

Whether or not there's an easy fix for that, we plan on adding an option to not optimize the gltf. This will significantly speed up conversion times. For something like this it should be less than a minute with that option.

lilleyse commented 7 years ago

Partially fixed in #49 since gltf-pipeline is now off by default and it will not break at this stage.

A separate issue with this file is some faces have more than 4 vertices. There's a new issue open for that: #55