elation-engine 0.9.113 → 0.9.115

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/css/systems/render.css +5 -1
  2. package/package.json +1 -1
  3. package/scripts/assets.js +103 -20
  4. package/scripts/assetworker.js +18 -1
  5. package/scripts/external/holoplay.js +1494 -0
  6. package/scripts/external/octree.js +0 -0
  7. package/scripts/external/three/CSS3DRenderer.js +46 -43
  8. package/scripts/external/three/CubemapToEquirectangular.js +1 -1
  9. package/scripts/external/three/three-extras.js +1553 -392
  10. package/scripts/external/three/three-icosa.js +2575 -0
  11. package/scripts/external/three/three-loaders.js +925 -133
  12. package/scripts/external/three/three-postprocessing.js +3 -3
  13. package/scripts/external/three/three-r116dev.js +50930 -0
  14. package/scripts/external/three/three-spotlighttextures.js +50953 -0
  15. package/scripts/external/three/three-vrm.js +2 -2
  16. package/scripts/external/three/three-working.js +35968 -0
  17. package/scripts/external/three/three.js +38532 -24087
  18. package/scripts/external/three-mesh-bvh.js +5370 -0
  19. package/scripts/external/three-old/BVHLoader.js +406 -0
  20. package/scripts/external/three-old/ColladaLoader.js +5519 -0
  21. package/scripts/external/three-old/ColladaLoader2.js +1694 -0
  22. package/scripts/external/three-old/CubemapToEquirectangular.js +188 -0
  23. package/scripts/external/three-old/DDSLoader.js +269 -0
  24. package/scripts/external/three-old/FBXLoader-mine.js +5063 -0
  25. package/scripts/external/three-old/FBXLoader.js +5112 -0
  26. package/scripts/external/three-old/FlyControls.js +295 -0
  27. package/scripts/external/three-old/GLTF2Loader.js +2950 -0
  28. package/scripts/external/three-old/GLTFLoader.js +2213 -0
  29. package/scripts/external/three-old/JSONLoader.js +435 -0
  30. package/scripts/external/three-old/MTLLoader.js +533 -0
  31. package/scripts/external/three-old/OBJLoader-experimental.js +874 -0
  32. package/scripts/external/three-old/OBJLoader-working.js +727 -0
  33. package/scripts/external/three-old/OBJLoader.js +723 -0
  34. package/scripts/external/three-old/OBJMTLLoader.js +440 -0
  35. package/scripts/external/three-old/OrbitControls.js +592 -0
  36. package/scripts/external/three-old/PLYLoader.js +517 -0
  37. package/scripts/external/three-old/TransformControls.js +1100 -0
  38. package/scripts/external/three-old/VRMLLoader.js +1021 -0
  39. package/scripts/external/three-old/glTFLoader-combined.js +2513 -0
  40. package/scripts/external/three-old/nodethree.js +44018 -0
  41. package/scripts/external/three-old/render/BleachBypassShader.js +64 -0
  42. package/scripts/external/three-old/render/BloomPass.js +116 -0
  43. package/scripts/external/three-old/render/CSS3DRenderer.js +310 -0
  44. package/scripts/external/three-old/render/ClearPass.js +44 -0
  45. package/scripts/external/three-old/render/ConvolutionShader.js +101 -0
  46. package/scripts/external/three-old/render/CopyShader.js +46 -0
  47. package/scripts/external/three-old/render/EffectComposer.js +211 -0
  48. package/scripts/external/three-old/render/FXAAShader.js +88 -0
  49. package/scripts/external/three-old/render/FilmPass.js +60 -0
  50. package/scripts/external/three-old/render/FilmShader.js +104 -0
  51. package/scripts/external/three-old/render/ManualMSAARenderPass.js +168 -0
  52. package/scripts/external/three-old/render/MaskPass.js +97 -0
  53. package/scripts/external/three-old/render/OculusRenderPass.js +84 -0
  54. package/scripts/external/three-old/render/OculusRiftEffect.js +240 -0
  55. package/scripts/external/three-old/render/PortalRenderPass.js +166 -0
  56. package/scripts/external/three-old/render/RecordingPass.js +208 -0
  57. package/scripts/external/three-old/render/RenderPass.js +57 -0
  58. package/scripts/external/three-old/render/SSAOShader.js +259 -0
  59. package/scripts/external/three-old/render/SepiaShader.js +54 -0
  60. package/scripts/external/three-old/render/ShaderPass.js +66 -0
  61. package/scripts/external/three-old/render/VREffect.js +482 -0
  62. package/scripts/external/three-old/shimthree.js +23 -0
  63. package/scripts/external/three-old/stats.js +6 -0
  64. package/scripts/external/three-old/three-88dev.js +45004 -0
  65. package/scripts/external/three-old/three-backgroundoptimization.js +44432 -0
  66. package/scripts/external/three-old/three-updates.js +44735 -0
  67. package/scripts/external/three-old/three-working.js +44719 -0
  68. package/scripts/external/three-old/three.js +44431 -0
  69. package/scripts/external/three-old/threex.rendererstats.js +66 -0
  70. package/scripts/external/three-old/tween.js +13 -0
  71. package/scripts/external/webvr-polyfill-new.js +3497 -0
  72. package/scripts/external/webvr-polyfill-newest.js +3491 -0
  73. package/scripts/external/webvr-polyfill-old.js +6337 -0
  74. package/scripts/geometries.js +2 -2
  75. package/scripts/math.js +6 -6
  76. package/scripts/systems/admin.js +1 -1
  77. package/scripts/systems/controls.js +6 -4
  78. package/scripts/systems/physics.js +10 -10
  79. package/scripts/systems/render.js +58 -20
  80. package/scripts/systems/render2.js +38 -0
  81. package/scripts/things/camera.js +6 -1
  82. package/scripts/things/generic-trackedvectors.js +1875 -0
  83. package/scripts/things/generic.js +3 -4
  84. package/scripts/things/label2d.js +1 -1
  85. package/scripts/things/leapmotion.js +6 -6
  86. package/scripts/things/menu.js +1 -1
  87. package/scripts/things/player-bak.js +638 -0
  88. package/scripts/things/player.js +28 -10
  89. package/scripts/things/skysphere.js +1 -1
  90. package/scripts/things/terrain.js +1 -1
  91. package/scripts/things/text.js +1 -1
@@ -1,8 +1,12 @@
1
+ engine-systems-render-view>canvas {
2
+ position: relative;
3
+ z-index: 1;
4
+ }
1
5
  .engine_systems_render_css3d {
2
6
  position:fixed;
3
7
  top: 0;
4
8
  left: 0;
5
- z-index: -1;
9
+ z-index: 0;
6
10
  }
7
11
  .engine_render_bloom,
8
12
  .engine_render_scale {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "elation-engine",
3
3
  "description": "WebGL/WebVR engine written in Javascript",
4
- "version": "0.9.113",
4
+ "version": "0.9.115",
5
5
  "main": "",
6
6
  "author": "James Baicoianu",
7
7
  "license": "MIT",
package/scripts/assets.js CHANGED
@@ -1,4 +1,4 @@
1
- elation.require(['utils.workerpool', 'engine.external.three.three', 'engine.external.libgif', 'engine.external.textdecoder-polyfill', 'engine.external.three.three-loaders', 'engine.external.three.three-vrm'], function() {
1
+ elation.require(['utils.workerpool', 'engine.external.three.three', 'engine.external.libgif', 'engine.external.textdecoder-polyfill', 'engine.external.three.three-loaders', 'engine.external.three.three-vrm', 'engine.external.three.three-icosa'], function() {
2
2
 
3
3
  THREE.Cache.enabled = true;
4
4
 
@@ -86,6 +86,10 @@ elation.require(['utils.workerpool', 'engine.external.three.three', 'engine.exte
86
86
  basisloader.detectSupport(renderer);
87
87
  this.basisloader = basisloader;
88
88
 
89
+ this.ktx2loader = new THREE.KTX2Loader();
90
+ this.ktx2loader.setTranscoderPath(libpath);
91
+ this.ktx2loader.detectSupport(renderer);
92
+
89
93
  let pmremGenerator = new THREE.PMREMGenerator( renderer );
90
94
  pmremGenerator.compileEquirectangularShader();
91
95
  this.pmremGenerator = pmremGenerator;
@@ -397,7 +401,7 @@ if (!ENV_IS_BROWSER) return;
397
401
  var texture = new THREE.Texture();
398
402
  var uuid = this.uuidmap[url];
399
403
  if (!uuid) {
400
- uuid = this.uuidmap[url] = THREE.Math.generateUUID();
404
+ uuid = this.uuidmap[url] = THREE.MathUtils.generateUUID();
401
405
  }
402
406
  var img = { uuid: uuid, src: url, toDataURL: function() { return url; } };
403
407
  texture.image = img;
@@ -592,8 +596,18 @@ if (!ENV_IS_BROWSER) return;
592
596
  // FIXME - we switched loader to request Blob responses, make sure Basis textures still load
593
597
  let blob = events[0].target.response;
594
598
  blob.arrayBuffer()
595
- .then(buffer => loader._createTexture(buffer))
599
+ .then(buffer => loader._createTexture([buffer]))
596
600
  .then(texture => this.handleLoadBasis(texture))
601
+ } else if (imagetype == 'hdr') {
602
+ let loader = new THREE.RGBELoader();
603
+ loader.load(fullurl, texture => {
604
+ this._texture = texture;
605
+ //const envMap = elation.engine.assets.pmremGenerator.fromEquirectangular( texture );
606
+ //this._texture = envMap.texture;
607
+ this.loaded = true;
608
+ this.uploaded = false;
609
+ this.sendLoadEvents();
610
+ });
597
611
  } else if (imagetype == 'exr') {
598
612
  // TODO - this should probably done off-thread if possible, it currently locks rendering for a noticable amount of time
599
613
  let loader = new THREE.EXRLoader();
@@ -808,8 +822,17 @@ if (!ENV_IS_BROWSER) return;
808
822
  var framedelays = [];
809
823
  var framenum = -1;
810
824
  var lastframe = texture;
825
+ //console.log('load gif?', image);
811
826
  gif.load(function() {
812
827
  var canvas = gif.get_canvas();
828
+ /*
829
+ console.log('gif loaded!', canvas);
830
+ document.body.appendChild(newcanvas);
831
+ newcanvas.style.position = 'absolute';
832
+ newcanvas.style.zIndex = 1000;
833
+ newcanvas.style.top = 0;
834
+ newcanvas.style.left = 0;
835
+ */
813
836
 
814
837
  var doGIFFrame = function(isstatic) {
815
838
  framenum = (framenum + 1) % gif.get_length();
@@ -833,6 +856,7 @@ if (!ENV_IS_BROWSER) return;
833
856
  }
834
857
  }
835
858
  if (frame && frame.image) {
859
+ //console.log('gifframe', frame);
836
860
  /*
837
861
  texture.image = frame.image;
838
862
  texture.needsUpdate = true;
@@ -843,6 +867,8 @@ if (!ENV_IS_BROWSER) return;
843
867
  lastframe = frametex;
844
868
  }
845
869
  elation.events.fire({element: texture, type: 'asset_update', data: frametex});
870
+ elation.events.fire({element: texture, type: 'update', data: frametex});
871
+ elation.events.fire({element: this, type: 'asset_update', data: frametex});
846
872
  }
847
873
 
848
874
  if (!isstatic) {
@@ -955,12 +981,13 @@ if (!ENV_IS_BROWSER) return;
955
981
  srgb: true,
956
982
  tex_linear: true,
957
983
  preload: false,
984
+ extratracks: false,
958
985
  hls: null,
959
986
  type: THREE.UnsignedByteType,
960
- format: THREE.RGBFormat,
987
+ format: THREE.RGBAFormat,
961
988
 
962
989
  load: function() {
963
- var video = this.video;
990
+ var video = this.video || this._video;
964
991
  if (!video && this.src) {
965
992
  var url = this.getProxiedURL(this.src);
966
993
  var video = document.createElement('video');
@@ -975,17 +1002,27 @@ if (!ENV_IS_BROWSER) return;
975
1002
  if ('requestVideoFrameCallback' in video) {
976
1003
  video.requestVideoFrameCallback((time, metadata) => this.updateVideoFrame(time, metadata));
977
1004
  }
1005
+ if (this.extratracks) {
1006
+ this.extratracks.forEach(t => {
1007
+ let track = document.createElement('track');
1008
+ for (let k in t) {
1009
+ track[k] = t[k];
1010
+ }
1011
+ video.appendChild(track);
1012
+ console.log('- add track to video', track);
1013
+ });
1014
+ }
978
1015
  }
979
1016
  this._video = video;
980
- let textureFormat = (this.format == THREE.RGBFormat && this.hasalpha ? THREE.RGBAFormat : this.format);
1017
+ let textureFormat = this.format;
981
1018
  if (false && this.sbs3d) {
982
1019
  this._texture = new THREE.SBSVideoTexture(video, THREE.UVMapping, THREE.ClampToEdgeWrapping, THREE.ClampToEdgeWrapping, null, null, textureFormat, this.type);
983
1020
  this._texture.reverse = this.reverse3d;
984
1021
  } else {
985
1022
  this._texture = new THREE.VideoTexture(video, THREE.UVMapping, THREE.ClampToEdgeWrapping, THREE.ClampToEdgeWrapping, null, null, textureFormat, this.type);
986
1023
  }
987
- this._texture.minFilter = THREE.LinearFilter;
988
- this._texture.magFilter = THREE.LinearFilter;
1024
+ //this._texture.minFilter = THREE.LinearFilter;
1025
+ //this._texture.magFilter = THREE.LinearFilter;
989
1026
  this._texture.encoding = (this.srgb ? THREE.sRGBEncoding : THREE.LinearEncoding);
990
1027
 
991
1028
  elation.events.add(video, 'loadeddata', elation.bind(this, this.handleLoad));
@@ -1017,8 +1054,8 @@ if (!ENV_IS_BROWSER) return;
1017
1054
  // If autoplay failed, retry with muted video
1018
1055
  var strerr = err.toString();
1019
1056
  if (strerr.indexOf('NotAllowedError') == 0) {
1020
- video.muted = true;
1021
- video.play().catch(elation.bind(this, this.handleAutoplayError));
1057
+ //video.muted = true;
1058
+ //video.play().catch((e) => console.log('huh what', e));
1022
1059
  } else if (strerr.indexOf('NotSupportedError') == 0 && this.hls !== false) {
1023
1060
  this.initHLS();
1024
1061
  }
@@ -1041,7 +1078,7 @@ if (!ENV_IS_BROWSER) return;
1041
1078
  elation.events.fire({element: this, type: 'asset_load_progress', data: progress});
1042
1079
  },
1043
1080
  handleError: function(ev) {
1044
- //console.log('video uh oh!', ev);
1081
+ console.log('video error!', ev);
1045
1082
  //this._texture = false;
1046
1083
  //console.log('Video failed to load, try HLS', this._video.error, ev);
1047
1084
  /*
@@ -1079,23 +1116,47 @@ if (!ENV_IS_BROWSER) return;
1079
1116
  initHLS: function() {
1080
1117
  if (typeof Hls != 'function') {
1081
1118
  elation.file.get('js', 'https://cdn.jsdelivr.net/npm/hls.js@latest', elation.bind(this, this.initHLS));
1119
+ //elation.file.get('js', 'https://baicoianu.com/~bai/janusweb/test/hls-modified.js', elation.bind(this, this.initHLS));
1082
1120
  return;
1083
1121
  }
1084
1122
  let hlsConfig = {
1085
1123
  debug: false,
1086
- maxBufferLength: 10,
1087
- maxMaxBufferLength: 60,
1124
+ //maxBufferLength: 10,
1125
+ maxBufferLength: 30,
1126
+ //capLevelOnFPSDrop: true,
1127
+ //fpsDroppedMonitoringThreshold: .05,
1128
+ maxBufferSize: 500 * 1024 * 1024,
1129
+ /*
1088
1130
  xhrSetup: function (xhr,url) {
1089
1131
  //xhr.withCredentials = true; // do send cookie
1090
1132
  xhr.setRequestHeader("Access-Control-Allow-Headers","Content-Type, Accept, X-Requested-With");
1091
1133
  xhr.setRequestHeader("Access-Control-Allow-Origin",document.location.origin);
1092
1134
  xhr.setRequestHeader("Access-Control-Allow-Credentials","true");
1093
1135
  },
1136
+ */
1137
+ xhrSetup: undefined,
1138
+ progressive: false,
1139
+ fetchSetup: function(context, initParams) {
1140
+ //initParams.credentials = 'include';
1141
+ return new Request(context.url, initParams);
1142
+
1143
+ },
1094
1144
  };
1145
+ console.log('set up hls', hlsConfig);
1095
1146
  var hls = new Hls(hlsConfig);
1096
1147
 
1148
+ let mediaErrorCount = 0,
1149
+ lastErrorTime = null,
1150
+ errorTimer = setInterval(() => {
1151
+ if (lastErrorTime) {
1152
+ let timeSinceError = Date.now() - lastErrorTime;
1153
+ if (mediaErrorCount > 0 && timeSinceError >= 10000) {
1154
+ mediaErrorCount--;
1155
+ }
1156
+ }
1157
+ }, 10000);
1097
1158
  hls.on(Hls.Events.ERROR, (event, data) => {
1098
- console.log('HLS.Events.ERROR: ', event, data);
1159
+ console.log('HLS.Events.ERROR: ', event, data, mediaErrorCount);
1099
1160
  if (data.fatal) {
1100
1161
  switch (data.type) {
1101
1162
  case Hls.ErrorTypes.NETWORK_ERROR:
@@ -1112,8 +1173,17 @@ if (!ENV_IS_BROWSER) return;
1112
1173
  }
1113
1174
  //} else if (data.details === 'internalException' && data.type === 'otherError' && isMobile()) {
1114
1175
  // this.hlsDropHighestLevel();
1115
- } else if (data.details == 'bufferStalledError') {
1176
+ } else if (data.type == Hls.ErrorTypes.MEDIA_ERROR) {
1116
1177
  //hls.recoverMediaError();
1178
+ lastErrorTime = Date.now();
1179
+ mediaErrorCount++;
1180
+ if (mediaErrorCount > 4 && hls.currentLevel > 0) {
1181
+ // after 4 media errors, try stepping down to the next lowest level
1182
+ let newlevel = hls.currentLevel - 1;
1183
+ console.warn(`Stepping HLS level down from ${hls.currentLevel} to ${newlevel}`, hls);
1184
+ hls.currentLevel = newlevel;
1185
+ mediaErrorCount = 0;
1186
+ }
1117
1187
  }
1118
1188
  });
1119
1189
 
@@ -1298,6 +1368,7 @@ if (!ENV_IS_BROWSER) return;
1298
1368
  return m;
1299
1369
  },
1300
1370
  assignTextures: function(group, args) {
1371
+ return;
1301
1372
  var minFilter = (this.tex_linear && this.tex_linear != 'false' ? THREE.LinearMipMapLinearFilter : THREE.NearestFilter);
1302
1373
  var magFilter = (this.tex_linear && this.tex_linear != 'false' ? THREE.LinearFilter : THREE.NearestFilter);
1303
1374
 
@@ -1431,11 +1502,20 @@ if (!ENV_IS_BROWSER) return;
1431
1502
  return isGLB;
1432
1503
  },
1433
1504
  loadglTF: function(jobdata) {
1434
- let proxypath = this.getProxiedURL(jobdata.src);
1505
+ let dirpathparts = jobdata.src.split('/');
1506
+ dirpathparts[dirpathparts.length-1] = '';
1507
+ let proxypath = this.getProxiedURL(dirpathparts.join('/'));
1435
1508
  var loader = new THREE.GLTFLoader();
1436
1509
  if (elation.engine.assets.dracopath) {
1437
1510
  loader.setDRACOLoader(new THREE.DRACOLoader().setDecoderPath(elation.engine.assets.dracopath));
1438
1511
  }
1512
+ if (elation.engine.assets.ktx2loader) {
1513
+ loader.setKTX2Loader(elation.engine.assets.ktx2loader);
1514
+ }
1515
+ if (elation.engine.assets.icosapath) {
1516
+ loader.register(parser => new THREE.GLTFGoogleTiltBrushMaterialExtension(parser, elation.engine.assets.icosapath));
1517
+ }
1518
+ loader.setMeshoptDecoder(MeshoptDecoder);
1439
1519
  this._model = new THREE.Group();
1440
1520
  this._model.userData.loaded = false;
1441
1521
  loader.parse(jobdata.srcdata, proxypath, elation.bind(this, function(modeldata) {
@@ -1481,7 +1561,7 @@ if (!ENV_IS_BROWSER) return;
1481
1561
  complete: function(object) {
1482
1562
  this.removePlaceholders();
1483
1563
  this._model.userData.loaded = true;
1484
- //this._model.add(scene);
1564
+ //this._model.add(object);
1485
1565
  this.fillGroup(this._model, object, false);
1486
1566
 
1487
1567
  this.extractTextures(object);
@@ -1559,7 +1639,8 @@ if (!ENV_IS_BROWSER) return;
1559
1639
  var tex = material[texname];
1560
1640
  if (tex) { // && tex.image instanceof HTMLImageElement) {
1561
1641
  var img = tex.image;
1562
- var src = img.originalSrc || img.src;
1642
+ var src = img.originalSrc || img.src || img.data;
1643
+ if (!src) return;
1563
1644
  if (!textures[src]) {
1564
1645
  //elation.engine.assets.loadJSON([{"assettype": "image", name: src, "src": src}], this.baseurl);
1565
1646
  //tex = elation.engine.assets.find('image', src);
@@ -1783,7 +1864,7 @@ if (!ENV_IS_BROWSER) return;
1783
1864
  }),
1784
1865
  });
1785
1866
  },
1786
- loadJSON: function(json) {
1867
+ loadJSON: function(json, replaceExisting=false) {
1787
1868
  //this.json = json;
1788
1869
  elation.events.fire({element: this, type: 'asset_load_processing'});
1789
1870
  var baseurl = (this.baseurl && this.baseurl.length > 0 ? this.baseurl : this.getBaseURL());
@@ -1793,7 +1874,7 @@ if (!ENV_IS_BROWSER) return;
1793
1874
  assetdef.baseurl = baseurl;
1794
1875
  assetdef.assetpack = this;
1795
1876
  var existing = elation.utils.arrayget(this.assetmap, assetdef.assettype + '.' + assetdef.name); //elation.engine.assets.find(assetdef.assettype, assetdef.name, true);
1796
- if (!existing) {
1877
+ if (!existing || replaceExisting) {
1797
1878
  var asset = elation.engine.assets.get(assetdef);
1798
1879
  this.assets.push(asset);
1799
1880
  if (!this.assetmap[asset.assettype]) this.assetmap[asset.assettype] = {};
@@ -2119,6 +2200,7 @@ if (!ENV_IS_BROWSER) return;
2119
2200
 
2120
2201
  let starttime = new Date().getTime();
2121
2202
  lasttime = starttime;
2203
+
2122
2204
  setInterval(() => {
2123
2205
  let d = new Date();
2124
2206
  let now = d.getTime();
@@ -2136,6 +2218,7 @@ if (!ENV_IS_BROWSER) return;
2136
2218
  lasttime = now;
2137
2219
  }
2138
2220
  }, 16);
2221
+
2139
2222
  }
2140
2223
  //this.load();
2141
2224
  },
@@ -26,7 +26,7 @@ elation.require([
26
26
 
27
27
  var uuid = srcmap[url];
28
28
  if (!uuid) {
29
- srcmap[url] = uuid = THREE.Math.generateUUID();
29
+ srcmap[url] = uuid = THREE.MathUtils.generateUUID();
30
30
  }
31
31
  var img = { uuid: uuid, src: url, toDataURL: function() { return url; } };
32
32
  scope.manager.itemStart( url );
@@ -448,6 +448,23 @@ elation.require([
448
448
  return new Promise(function(resolve, reject) {
449
449
  var loader = new THREE.FBXLoader();
450
450
  var modeldata = loader.parse(data);
451
+ let mapnames = ['map', 'normalMap', 'aoMap', 'bumpMap', 'alphaMap', 'emissiveMap', 'envMap', 'lightMap', 'specularMap'];
452
+ let baseurl = job.data.src.substr( 0, job.data.src.lastIndexOf( "/" ) + 1 );
453
+ modeldata.traverse(n => {
454
+ if (n.material) {
455
+ mapnames.forEach(m => {
456
+ if (n.material[m]) {
457
+ let map = n.material[m];
458
+ if (map.image && map.image.src.indexOf(':') == -1) {
459
+ map.image.src = baseurl + map.image.src;
460
+ }
461
+ }
462
+ });
463
+ } else if (n instanceof THREE.Bone) {
464
+ let name = n.name.replace('mixamorig', '');
465
+ n.name = name[0].toLowerCase() + name.substring(1);
466
+ }
467
+ });
451
468
  resolve(modeldata.toJSON());
452
469
  });
453
470
  }