super-three 0.161.0 → 0.163.0

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 (206) hide show
  1. package/build/three.cjs +822 -1332
  2. package/build/three.module.js +820 -1328
  3. package/build/three.module.min.js +1 -1
  4. package/examples/jsm/controls/DragControls.js +91 -30
  5. package/examples/jsm/controls/OrbitControls.js +32 -6
  6. package/examples/jsm/controls/TransformControls.js +9 -9
  7. package/examples/jsm/exporters/GLTFExporter.js +30 -3
  8. package/examples/jsm/exporters/USDZExporter.js +15 -0
  9. package/examples/jsm/geometries/TextGeometry.js +10 -2
  10. package/examples/jsm/interactive/HTMLMesh.js +7 -9
  11. package/examples/jsm/interactive/InteractiveGroup.js +15 -25
  12. package/examples/jsm/libs/fflate.module.js +694 -496
  13. package/examples/jsm/libs/rhino3dm/rhino3dm.js +1 -8723
  14. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +1 -8734
  15. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  16. package/examples/jsm/libs/tween.module.js +32 -14
  17. package/examples/jsm/lines/LineMaterial.js +0 -2
  18. package/examples/jsm/loaders/3DMLoader.js +13 -21
  19. package/examples/jsm/loaders/3MFLoader.js +2 -0
  20. package/examples/jsm/loaders/EXRLoader.js +89 -19
  21. package/examples/jsm/loaders/FBXLoader.js +1 -1
  22. package/examples/jsm/loaders/GLTFLoader.js +6 -0
  23. package/examples/jsm/loaders/KTX2Loader.js +2 -6
  24. package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
  25. package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
  26. package/examples/jsm/loaders/LUTImageLoader.js +0 -14
  27. package/examples/jsm/loaders/RGBMLoader.js +16 -0
  28. package/examples/jsm/loaders/VOXLoader.js +9 -2
  29. package/examples/jsm/loaders/VRMLLoader.js +6 -2
  30. package/examples/jsm/misc/GPUComputationRenderer.js +0 -6
  31. package/examples/jsm/misc/ProgressiveLightMap.js +1 -0
  32. package/examples/jsm/nodes/Nodes.js +15 -8
  33. package/examples/jsm/nodes/accessors/AccessorsUtils.js +10 -0
  34. package/examples/jsm/nodes/accessors/BatchNode.js +78 -0
  35. package/examples/jsm/nodes/accessors/ClippingNode.js +144 -0
  36. package/examples/jsm/nodes/accessors/InstanceNode.js +25 -2
  37. package/examples/jsm/nodes/accessors/MaterialNode.js +2 -2
  38. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +2 -12
  39. package/examples/jsm/nodes/accessors/MorphNode.js +20 -10
  40. package/examples/jsm/nodes/accessors/NormalNode.js +12 -2
  41. package/examples/jsm/nodes/accessors/ReferenceNode.js +87 -29
  42. package/examples/jsm/nodes/accessors/RendererReferenceNode.js +29 -0
  43. package/examples/jsm/nodes/accessors/SkinningNode.js +31 -10
  44. package/examples/jsm/nodes/accessors/StorageBufferNode.js +18 -0
  45. package/examples/jsm/nodes/accessors/TangentNode.js +8 -2
  46. package/examples/jsm/nodes/accessors/TextureNode.js +30 -7
  47. package/examples/jsm/nodes/accessors/UniformsNode.js +140 -0
  48. package/examples/jsm/nodes/code/CodeNode.js +6 -0
  49. package/examples/jsm/nodes/core/AssignNode.js +68 -12
  50. package/examples/jsm/nodes/core/Node.js +67 -6
  51. package/examples/jsm/nodes/core/NodeBuilder.js +23 -24
  52. package/examples/jsm/nodes/core/NodeFrame.js +8 -8
  53. package/examples/jsm/nodes/core/NodeUtils.js +2 -2
  54. package/examples/jsm/nodes/core/TempNode.js +1 -1
  55. package/examples/jsm/nodes/core/UniformNode.js +20 -0
  56. package/examples/jsm/nodes/display/BlendModeNode.js +30 -1
  57. package/examples/jsm/nodes/display/NormalMapNode.js +3 -5
  58. package/examples/jsm/nodes/display/PassNode.js +17 -1
  59. package/examples/jsm/nodes/display/ToneMappingNode.js +8 -4
  60. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -0
  61. package/examples/jsm/nodes/fog/FogExp2Node.js +4 -5
  62. package/examples/jsm/nodes/fog/FogNode.js +13 -3
  63. package/examples/jsm/nodes/fog/FogRangeNode.js +4 -3
  64. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  65. package/examples/jsm/nodes/lighting/EnvironmentNode.js +12 -69
  66. package/examples/jsm/nodes/materials/NodeMaterial.js +70 -17
  67. package/examples/jsm/nodes/math/CondNode.js +42 -7
  68. package/examples/jsm/nodes/math/MathNode.js +20 -0
  69. package/examples/jsm/nodes/pmrem/PMREMNode.js +193 -0
  70. package/examples/jsm/nodes/pmrem/PMREMUtils.js +288 -0
  71. package/examples/jsm/nodes/shadernode/ShaderNode.js +1 -1
  72. package/examples/jsm/nodes/utils/ArrayElementNode.js +0 -6
  73. package/examples/jsm/nodes/utils/EquirectUVNode.js +1 -1
  74. package/examples/jsm/nodes/utils/LoopNode.js +2 -0
  75. package/examples/jsm/nodes/utils/StorageArrayElementNode.js +91 -0
  76. package/examples/jsm/objects/QuadMesh.js +7 -23
  77. package/examples/jsm/physics/RapierPhysics.js +4 -4
  78. package/examples/jsm/postprocessing/GlitchPass.js +0 -3
  79. package/examples/jsm/postprocessing/LUTPass.js +5 -71
  80. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  81. package/examples/jsm/postprocessing/SAOPass.js +0 -1
  82. package/examples/jsm/postprocessing/SSAOPass.js +0 -3
  83. package/examples/jsm/renderers/common/Animation.js +3 -0
  84. package/examples/jsm/renderers/common/Background.js +3 -3
  85. package/examples/jsm/renderers/common/ClippingContext.js +165 -0
  86. package/examples/jsm/renderers/common/Info.js +11 -19
  87. package/examples/jsm/renderers/common/PostProcessing.js +12 -4
  88. package/examples/jsm/renderers/common/RenderContext.js +3 -1
  89. package/examples/jsm/renderers/common/RenderContexts.js +2 -13
  90. package/examples/jsm/renderers/common/RenderObject.js +46 -3
  91. package/examples/jsm/renderers/common/RenderObjects.js +2 -0
  92. package/examples/jsm/renderers/common/Renderer.js +113 -39
  93. package/examples/jsm/renderers/common/StorageBufferAttribute.js +2 -2
  94. package/examples/jsm/renderers/common/StorageInstancedBufferAttribute.js +17 -0
  95. package/examples/jsm/renderers/common/Textures.js +3 -13
  96. package/examples/jsm/renderers/common/UniformsGroup.js +6 -4
  97. package/examples/jsm/renderers/common/extras/PMREMGenerator.js +777 -0
  98. package/examples/jsm/renderers/common/nodes/NodeStorageBuffer.js +23 -0
  99. package/examples/jsm/renderers/common/nodes/NodeUniformBuffer.js +23 -0
  100. package/examples/jsm/renderers/common/nodes/Nodes.js +6 -18
  101. package/examples/jsm/renderers/webgl/WebGLBackend.js +174 -30
  102. package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +141 -0
  103. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +136 -11
  104. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +8 -2
  105. package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +1 -0
  106. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +90 -0
  107. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +3 -1
  108. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -2
  109. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -2
  110. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +67 -37
  111. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +20 -43
  112. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +32 -1
  113. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -4
  114. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +94 -20
  115. package/examples/jsm/shaders/OutputShader.js +4 -0
  116. package/examples/jsm/utils/GPUStatsPanel.js +10 -45
  117. package/examples/jsm/utils/SkeletonUtils.js +14 -3
  118. package/examples/jsm/utils/TextureUtils.js +1 -1
  119. package/examples/jsm/webxr/VRButton.js +13 -5
  120. package/examples/jsm/webxr/XRButton.js +0 -1
  121. package/examples/jsm/webxr/XRControllerModelFactory.js +8 -0
  122. package/package.json +4 -3
  123. package/src/Three.Legacy.js +20 -0
  124. package/src/Three.js +0 -2
  125. package/src/animation/AnimationClip.js +1 -1
  126. package/src/constants.js +4 -7
  127. package/src/core/BufferAttribute.js +0 -11
  128. package/src/core/BufferGeometry.js +23 -29
  129. package/src/core/Object3D.js +21 -7
  130. package/src/core/Raycaster.js +18 -4
  131. package/src/core/RenderTarget.js +44 -21
  132. package/src/extras/PMREMGenerator.js +11 -0
  133. package/src/extras/curves/EllipseCurve.js +2 -2
  134. package/src/helpers/SpotLightHelper.js +18 -1
  135. package/src/loaders/DataTextureLoader.js +0 -4
  136. package/src/loaders/MaterialLoader.js +1 -0
  137. package/src/loaders/ObjectLoader.js +4 -1
  138. package/src/materials/Material.js +2 -1
  139. package/src/materials/MeshBasicMaterial.js +3 -0
  140. package/src/materials/MeshLambertMaterial.js +3 -0
  141. package/src/materials/MeshPhongMaterial.js +3 -0
  142. package/src/materials/MeshStandardMaterial.js +3 -0
  143. package/src/materials/ShaderMaterial.js +0 -4
  144. package/src/math/Quaternion.js +13 -12
  145. package/src/math/Spherical.js +4 -5
  146. package/src/math/Vector3.js +7 -7
  147. package/src/objects/BatchedMesh.js +4 -3
  148. package/src/objects/InstancedMesh.js +63 -0
  149. package/src/objects/Mesh.js +0 -1
  150. package/src/renderers/WebGLCubeRenderTarget.js +1 -10
  151. package/src/renderers/WebGLRenderer.js +70 -136
  152. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -0
  153. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
  154. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
  155. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
  156. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  157. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
  158. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
  159. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +1 -1
  160. package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +14 -0
  161. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +11 -2
  162. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +32 -22
  163. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +23 -0
  164. package/src/renderers/shaders/ShaderChunk.js +2 -0
  165. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +3 -2
  166. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  167. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  168. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +1 -0
  169. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -0
  170. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +1 -0
  171. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -0
  172. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -0
  173. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +1 -0
  174. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
  175. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +1 -0
  176. package/src/renderers/shaders/ShaderLib/points.glsl.js +1 -0
  177. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -0
  178. package/src/renderers/shaders/ShaderLib.js +3 -2
  179. package/src/renderers/shaders/UniformsLib.js +1 -0
  180. package/src/renderers/shaders/UniformsUtils.js +10 -1
  181. package/src/renderers/webgl/WebGLAttributes.js +6 -33
  182. package/src/renderers/webgl/WebGLBackground.js +18 -0
  183. package/src/renderers/webgl/WebGLBindingStates.js +14 -51
  184. package/src/renderers/webgl/WebGLBufferRenderer.js +3 -25
  185. package/src/renderers/webgl/WebGLCapabilities.js +2 -12
  186. package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
  187. package/src/renderers/webgl/WebGLExtensions.js +4 -19
  188. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +3 -25
  189. package/src/renderers/webgl/WebGLLights.js +6 -32
  190. package/src/renderers/webgl/WebGLMaterials.js +26 -4
  191. package/src/renderers/webgl/WebGLMorphtargets.js +79 -210
  192. package/src/renderers/webgl/WebGLProgram.js +30 -48
  193. package/src/renderers/webgl/WebGLPrograms.js +5 -14
  194. package/src/renderers/webgl/WebGLRenderStates.js +8 -6
  195. package/src/renderers/webgl/WebGLState.js +21 -75
  196. package/src/renderers/webgl/WebGLTextures.js +143 -275
  197. package/src/renderers/webgl/WebGLUniformsGroups.js +1 -1
  198. package/src/renderers/webgl/WebGLUtils.js +6 -57
  199. package/src/renderers/webxr/WebXRDepthSensing.js +2 -3
  200. package/src/renderers/webxr/WebXRManager.js +2 -2
  201. package/src/scenes/Scene.js +14 -0
  202. package/src/textures/Texture.js +6 -24
  203. package/examples/jsm/nodes/core/ArrayUniformNode.js +0 -26
  204. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
  205. package/src/renderers/WebGL1Renderer.js +0 -7
  206. package/src/renderers/WebGLMultipleRenderTargets.js +0 -82
@@ -413,18 +413,21 @@ var Tween = /** @class */ (function () {
413
413
  Tween.prototype.isPaused = function () {
414
414
  return this._isPaused;
415
415
  };
416
+ Tween.prototype.getDuration = function () {
417
+ return this._duration;
418
+ };
416
419
  Tween.prototype.to = function (target, duration) {
417
420
  if (duration === void 0) { duration = 1000; }
418
421
  if (this._isPlaying)
419
422
  throw new Error('Can not call Tween.to() while Tween is already started or paused. Stop the Tween first.');
420
423
  this._valuesEnd = target;
421
424
  this._propertiesAreSetUp = false;
422
- this._duration = duration;
425
+ this._duration = duration < 0 ? 0 : duration;
423
426
  return this;
424
427
  };
425
428
  Tween.prototype.duration = function (duration) {
426
429
  if (duration === void 0) { duration = 1000; }
427
- this._duration = duration;
430
+ this._duration = duration < 0 ? 0 : duration;
428
431
  return this;
429
432
  };
430
433
  Tween.prototype.dynamic = function (dynamic) {
@@ -673,12 +676,13 @@ var Tween = /** @class */ (function () {
673
676
  * it is still playing, just paused).
674
677
  */
675
678
  Tween.prototype.update = function (time, autoStart) {
679
+ var _this = this;
680
+ var _a;
676
681
  if (time === void 0) { time = now(); }
677
682
  if (autoStart === void 0) { autoStart = true; }
678
683
  if (this._isPaused)
679
684
  return true;
680
685
  var property;
681
- var elapsed;
682
686
  var endTime = this._startTime + this._duration;
683
687
  if (!this._goToEnd && !this._isPlaying) {
684
688
  if (time > endTime)
@@ -702,18 +706,37 @@ var Tween = /** @class */ (function () {
702
706
  }
703
707
  this._onEveryStartCallbackFired = true;
704
708
  }
705
- elapsed = (time - this._startTime) / this._duration;
706
- elapsed = this._duration === 0 || elapsed > 1 ? 1 : elapsed;
709
+ var elapsedTime = time - this._startTime;
710
+ var durationAndDelay = this._duration + ((_a = this._repeatDelayTime) !== null && _a !== void 0 ? _a : this._delayTime);
711
+ var totalTime = this._duration + this._repeat * durationAndDelay;
712
+ var calculateElapsedPortion = function () {
713
+ if (_this._duration === 0)
714
+ return 1;
715
+ if (elapsedTime > totalTime) {
716
+ return 1;
717
+ }
718
+ var timesRepeated = Math.trunc(elapsedTime / durationAndDelay);
719
+ var timeIntoCurrentRepeat = elapsedTime - timesRepeated * durationAndDelay;
720
+ // TODO use %?
721
+ // const timeIntoCurrentRepeat = elapsedTime % durationAndDelay
722
+ var portion = Math.min(timeIntoCurrentRepeat / _this._duration, 1);
723
+ if (portion === 0 && elapsedTime === _this._duration) {
724
+ return 1;
725
+ }
726
+ return portion;
727
+ };
728
+ var elapsed = calculateElapsedPortion();
707
729
  var value = this._easingFunction(elapsed);
708
730
  // properties transformations
709
731
  this._updateProperties(this._object, this._valuesStart, this._valuesEnd, value);
710
732
  if (this._onUpdateCallback) {
711
733
  this._onUpdateCallback(this._object, elapsed);
712
734
  }
713
- if (elapsed === 1) {
735
+ if (this._duration === 0 || elapsedTime >= this._duration) {
714
736
  if (this._repeat > 0) {
737
+ var completeCount = Math.min(Math.trunc((elapsedTime - this._duration) / durationAndDelay) + 1, this._repeat);
715
738
  if (isFinite(this._repeat)) {
716
- this._repeat--;
739
+ this._repeat -= completeCount;
717
740
  }
718
741
  // Reassign starting values, restart by making startTime = now
719
742
  for (property in this._valuesStartRepeat) {
@@ -731,12 +754,7 @@ var Tween = /** @class */ (function () {
731
754
  if (this._yoyo) {
732
755
  this._reversed = !this._reversed;
733
756
  }
734
- if (this._repeatDelayTime !== undefined) {
735
- this._startTime = time + this._repeatDelayTime;
736
- }
737
- else {
738
- this._startTime = time + this._delayTime;
739
- }
757
+ this._startTime += durationAndDelay * completeCount;
740
758
  if (this._onRepeatCallback) {
741
759
  this._onRepeatCallback(this._object);
742
760
  }
@@ -812,7 +830,7 @@ var Tween = /** @class */ (function () {
812
830
  return Tween;
813
831
  }());
814
832
 
815
- var VERSION = '21.0.0';
833
+ var VERSION = '23.1.1';
816
834
 
817
835
  /**
818
836
  * Tween.js - Licensed under the MIT license
@@ -603,12 +603,10 @@ class LineMaterial extends ShaderMaterial {
603
603
  if ( value === true ) {
604
604
 
605
605
  this.defines.USE_ALPHA_TO_COVERAGE = '';
606
- this.extensions.derivatives = true;
607
606
 
608
607
  } else {
609
608
 
610
609
  delete this.defines.USE_ALPHA_TO_COVERAGE;
611
- this.extensions.derivatives = false;
612
610
 
613
611
  }
614
612
 
@@ -192,6 +192,7 @@ class Rhino3dmLoader extends Loader {
192
192
  mat.color.g = material.color.g;
193
193
  mat.color.b = material.color.b;
194
194
  mat.type = material.type;
195
+ mat.vertexColors = material.vertexColors;
195
196
 
196
197
  const json = JSON.stringify( mat );
197
198
 
@@ -205,6 +206,7 @@ class Rhino3dmLoader extends Loader {
205
206
  _mat.color.g = m.color.g;
206
207
  _mat.color.b = m.color.b;
207
208
  _mat.type = m.type;
209
+ _mat.vertexColors = m.vertexColors;
208
210
 
209
211
  if ( JSON.stringify( _mat ) === json ) {
210
212
 
@@ -488,7 +490,7 @@ class Rhino3dmLoader extends Loader {
488
490
 
489
491
  default:
490
492
 
491
- let matId;
493
+ let matId = null;
492
494
 
493
495
  switch ( attributes.materialSource.name ) {
494
496
 
@@ -498,10 +500,6 @@ class Rhino3dmLoader extends Loader {
498
500
 
499
501
  matId = data.layers[ attributes.layerIndex ].renderMaterialIndex;
500
502
 
501
- } else {
502
-
503
- matId = null;
504
-
505
503
  }
506
504
 
507
505
  break;
@@ -512,17 +510,13 @@ class Rhino3dmLoader extends Loader {
512
510
 
513
511
  matId = attributes.materialIndex;
514
512
 
515
- } else {
516
-
517
- matId = null;
518
-
519
513
  }
520
514
 
521
515
  break;
522
516
 
523
517
  }
524
518
 
525
- let material;
519
+ let material = null;
526
520
 
527
521
  if ( matId >= 0 ) {
528
522
 
@@ -530,13 +524,8 @@ class Rhino3dmLoader extends Loader {
530
524
  material = this._createMaterial( rMaterial, data.renderEnvironment );
531
525
 
532
526
 
533
- } else {
534
-
535
- material = this._createMaterial();
536
-
537
527
  }
538
528
 
539
- material = this._compareMaterials( material );
540
529
  const _object = this._createObject( obj, material );
541
530
 
542
531
  if ( _object === undefined ) {
@@ -675,19 +664,22 @@ class Rhino3dmLoader extends Loader {
675
664
 
676
665
  geometry = loader.parse( obj.geometry );
677
666
 
678
- if ( geometry.attributes.hasOwnProperty( 'color' ) ) {
679
667
 
680
- mat.vertexColors = true;
668
+ if ( mat === null ) {
669
+
670
+ mat = this._createMaterial();
681
671
 
682
672
  }
683
673
 
684
- if ( mat === null ) {
685
674
 
686
- mat = this._createMaterial();
687
- mat = this._compareMaterials( mat );
675
+ if ( geometry.attributes.hasOwnProperty( 'color' ) ) {
676
+
677
+ mat.vertexColors = true;
688
678
 
689
679
  }
690
680
 
681
+ mat = this._compareMaterials( mat );
682
+
691
683
  const mesh = new Mesh( geometry, mat );
692
684
  mesh.castShadow = attributes.castsShadows;
693
685
  mesh.receiveShadow = attributes.receivesShadows;
@@ -1529,7 +1521,7 @@ function Rhino3dmWorker() {
1529
1521
 
1530
1522
  // TODO: precalculate resulting vertices and faces and warn on excessive results
1531
1523
  _geometry.subdivide( 3 );
1532
- mesh = rhino.Mesh.createFromSubDControlNet( _geometry );
1524
+ mesh = rhino.Mesh.createFromSubDControlNet( _geometry, false );
1533
1525
  if ( mesh ) {
1534
1526
 
1535
1527
  geometry = mesh.toThreejsJSON();
@@ -144,6 +144,8 @@ class ThreeMFLoader extends Loader {
144
144
 
145
145
  }
146
146
 
147
+ if ( relsName === undefined ) throw new Error( 'THREE.ThreeMFLoader: Cannot find relationship file `rels` in 3MF archive.' );
148
+
147
149
  //
148
150
 
149
151
  const relsView = zip[ relsName ];
@@ -1886,10 +1886,10 @@ class EXRLoader extends DataTextureLoader {
1886
1886
 
1887
1887
  function parseBox2i( dataView, offset ) {
1888
1888
 
1889
- const xMin = parseUint32( dataView, offset );
1890
- const yMin = parseUint32( dataView, offset );
1891
- const xMax = parseUint32( dataView, offset );
1892
- const yMax = parseUint32( dataView, offset );
1889
+ const xMin = parseInt32( dataView, offset );
1890
+ const yMin = parseInt32( dataView, offset );
1891
+ const xMax = parseInt32( dataView, offset );
1892
+ const yMax = parseInt32( dataView, offset );
1893
1893
 
1894
1894
  return { xMin: xMin, yMin: yMin, xMax: xMax, yMax: yMax };
1895
1895
 
@@ -1898,7 +1898,8 @@ class EXRLoader extends DataTextureLoader {
1898
1898
  function parseLineOrder( dataView, offset ) {
1899
1899
 
1900
1900
  const lineOrders = [
1901
- 'INCREASING_Y'
1901
+ 'INCREASING_Y',
1902
+ 'DECREASING_Y'
1902
1903
  ];
1903
1904
 
1904
1905
  const lineOrder = parseUint8( dataView, offset );
@@ -2066,10 +2067,12 @@ class EXRLoader extends DataTextureLoader {
2066
2067
  width: EXRHeader.dataWindow.xMax - EXRHeader.dataWindow.xMin + 1,
2067
2068
  height: EXRHeader.dataWindow.yMax - EXRHeader.dataWindow.yMin + 1,
2068
2069
  channels: EXRHeader.channels.length,
2070
+ channelLineOffsets: {},
2071
+ scanOrder: null,
2069
2072
  bytesPerLine: null,
2070
2073
  lines: null,
2071
2074
  inputSize: null,
2072
- type: EXRHeader.channels[ 0 ].pixelType,
2075
+ type: null,
2073
2076
  uncompress: null,
2074
2077
  getter: null,
2075
2078
  format: null,
@@ -2125,6 +2128,43 @@ class EXRLoader extends DataTextureLoader {
2125
2128
 
2126
2129
  EXRDecoder.scanlineBlockSize = EXRDecoder.lines;
2127
2130
 
2131
+ const channels = {};
2132
+ for ( const channel of EXRHeader.channels ) {
2133
+
2134
+ switch ( channel.name ) {
2135
+
2136
+ case 'Y':
2137
+ case 'R':
2138
+ case 'G':
2139
+ case 'B':
2140
+ case 'A':
2141
+ channels[ channel.name ] = true;
2142
+ EXRDecoder.type = channel.pixelType;
2143
+
2144
+ }
2145
+
2146
+ }
2147
+
2148
+ // RGB images will be converted to RGBA format, preventing software emulation in select devices.
2149
+ let fillAlpha = false;
2150
+
2151
+ if ( channels.R && channels.G && channels.B ) {
2152
+
2153
+ fillAlpha = ! channels.A;
2154
+ EXRDecoder.outputChannels = 4;
2155
+ EXRDecoder.decodeChannels = { R: 0, G: 1, B: 2, A: 3 };
2156
+
2157
+ } else if ( channels.Y ) {
2158
+
2159
+ EXRDecoder.outputChannels = 1;
2160
+ EXRDecoder.decodeChannels = { Y: 0 };
2161
+
2162
+ } else {
2163
+
2164
+ throw new Error( 'EXRLoader.parse: file contains unsupported data channels.' );
2165
+
2166
+ }
2167
+
2128
2168
  if ( EXRDecoder.type == 1 ) {
2129
2169
 
2130
2170
  // half
@@ -2164,15 +2204,13 @@ class EXRLoader extends DataTextureLoader {
2164
2204
 
2165
2205
  }
2166
2206
 
2167
- EXRDecoder.blockCount = ( EXRHeader.dataWindow.yMax + 1 ) / EXRDecoder.scanlineBlockSize;
2207
+ EXRDecoder.blockCount = EXRDecoder.height / EXRDecoder.scanlineBlockSize;
2168
2208
 
2169
2209
  for ( let i = 0; i < EXRDecoder.blockCount; i ++ )
2170
2210
  parseInt64( dataView, offset ); // scanlineOffset
2171
2211
 
2172
2212
  // we should be passed the scanline offset table, ready to start reading pixel data.
2173
2213
 
2174
- // RGB images will be converted to RGBA format, preventing software emulation in select devices.
2175
- EXRDecoder.outputChannels = ( ( EXRDecoder.channels == 3 ) ? 4 : EXRDecoder.channels );
2176
2214
  const size = EXRDecoder.width * EXRDecoder.height * EXRDecoder.outputChannels;
2177
2215
 
2178
2216
  switch ( outputType ) {
@@ -2181,7 +2219,7 @@ class EXRLoader extends DataTextureLoader {
2181
2219
  EXRDecoder.byteArray = new Float32Array( size );
2182
2220
 
2183
2221
  // Fill initially with 1s for the alpha value if the texture is not RGBA, RGB values will be overwritten
2184
- if ( EXRDecoder.channels < EXRDecoder.outputChannels )
2222
+ if ( fillAlpha )
2185
2223
  EXRDecoder.byteArray.fill( 1, 0, size );
2186
2224
 
2187
2225
  break;
@@ -2189,7 +2227,7 @@ class EXRLoader extends DataTextureLoader {
2189
2227
  case HalfFloatType:
2190
2228
  EXRDecoder.byteArray = new Uint16Array( size );
2191
2229
 
2192
- if ( EXRDecoder.channels < EXRDecoder.outputChannels )
2230
+ if ( fillAlpha )
2193
2231
  EXRDecoder.byteArray.fill( 0x3C00, 0, size ); // Uint16Array holds half float data, 0x3C00 is 1
2194
2232
 
2195
2233
  break;
@@ -2200,7 +2238,31 @@ class EXRLoader extends DataTextureLoader {
2200
2238
 
2201
2239
  }
2202
2240
 
2203
- EXRDecoder.bytesPerLine = EXRDecoder.width * EXRDecoder.inputSize * EXRDecoder.channels;
2241
+ let byteOffset = 0;
2242
+ for ( const channel of EXRHeader.channels ) {
2243
+
2244
+ if ( EXRDecoder.decodeChannels[ channel.name ] !== undefined ) {
2245
+
2246
+ EXRDecoder.channelLineOffsets[ channel.name ] = byteOffset * EXRDecoder.width;
2247
+
2248
+ }
2249
+
2250
+ byteOffset += channel.pixelType * 2;
2251
+
2252
+ }
2253
+
2254
+ EXRDecoder.bytesPerLine = EXRDecoder.width * byteOffset;
2255
+ EXRDecoder.outLineWidth = EXRDecoder.width * EXRDecoder.outputChannels;
2256
+
2257
+ if ( EXRHeader.lineOrder === 'INCREASING_Y' ) {
2258
+
2259
+ EXRDecoder.scanOrder = ( y ) => y;
2260
+
2261
+ } else {
2262
+
2263
+ EXRDecoder.scanOrder = ( y ) => EXRDecoder.height - 1 - y;
2264
+
2265
+ }
2204
2266
 
2205
2267
  if ( EXRDecoder.outputChannels == 4 ) {
2206
2268
 
@@ -2231,11 +2293,10 @@ class EXRLoader extends DataTextureLoader {
2231
2293
  const EXRDecoder = setupDecoder( EXRHeader, bufferDataView, uInt8Array, offset, this.type );
2232
2294
 
2233
2295
  const tmpOffset = { value: 0 };
2234
- const channelOffsets = { R: 0, G: 1, B: 2, A: 3, Y: 0 };
2235
2296
 
2236
2297
  for ( let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder.height / EXRDecoder.scanlineBlockSize; scanlineBlockIdx ++ ) {
2237
2298
 
2238
- const line = parseUint32( bufferDataView, offset ); // line_no
2299
+ const line = parseInt32( bufferDataView, offset ) - EXRHeader.dataWindow.yMin; // line_no
2239
2300
  EXRDecoder.size = parseUint32( bufferDataView, offset ); // data_len
2240
2301
  EXRDecoder.lines = ( ( line + EXRDecoder.scanlineBlockSize > EXRDecoder.height ) ? ( EXRDecoder.height - line ) : EXRDecoder.scanlineBlockSize );
2241
2302
 
@@ -2246,17 +2307,26 @@ class EXRLoader extends DataTextureLoader {
2246
2307
 
2247
2308
  for ( let line_y = 0; line_y < EXRDecoder.scanlineBlockSize; line_y ++ ) {
2248
2309
 
2249
- const true_y = line_y + scanlineBlockIdx * EXRDecoder.scanlineBlockSize;
2250
- if ( true_y >= EXRDecoder.height ) break;
2310
+ const scan_y = scanlineBlockIdx * EXRDecoder.scanlineBlockSize;
2311
+ const true_y = line_y + EXRDecoder.scanOrder( scan_y );
2312
+ if ( true_y >= EXRDecoder.height ) continue;
2313
+
2314
+ const lineOffset = line_y * EXRDecoder.bytesPerLine;
2315
+ const outLineOffset = ( EXRDecoder.height - 1 - true_y ) * EXRDecoder.outLineWidth;
2251
2316
 
2252
2317
  for ( let channelID = 0; channelID < EXRDecoder.channels; channelID ++ ) {
2253
2318
 
2254
- const cOff = channelOffsets[ EXRHeader.channels[ channelID ].name ];
2319
+ const name = EXRHeader.channels[ channelID ].name;
2320
+ const lOff = EXRDecoder.channelLineOffsets[ name ];
2321
+ const cOff = EXRDecoder.decodeChannels[ name ];
2322
+
2323
+ if ( cOff === undefined ) continue;
2324
+
2325
+ tmpOffset.value = lineOffset + lOff;
2255
2326
 
2256
2327
  for ( let x = 0; x < EXRDecoder.width; x ++ ) {
2257
2328
 
2258
- tmpOffset.value = ( line_y * ( EXRDecoder.channels * EXRDecoder.width ) + channelID * EXRDecoder.width + x ) * EXRDecoder.inputSize;
2259
- const outIndex = ( EXRDecoder.height - 1 - true_y ) * ( EXRDecoder.width * EXRDecoder.outputChannels ) + x * EXRDecoder.outputChannels + cOff;
2329
+ const outIndex = outLineOffset + x * EXRDecoder.outputChannels + cOff;
2260
2330
  EXRDecoder.byteArray[ outIndex ] = EXRDecoder.getter( viewer, tmpOffset );
2261
2331
 
2262
2332
  }
@@ -2845,7 +2845,7 @@ class AnimationParser {
2845
2845
 
2846
2846
  const quaternionValues = [];
2847
2847
 
2848
- if ( ! values || ! times ) return new QuaternionKeyframeTrack( modelName + '.quaternion', [], [] );
2848
+ if ( ! values || ! times ) return new QuaternionKeyframeTrack( modelName + '.quaternion', [ 0 ], [ 0 ] );
2849
2849
 
2850
2850
  for ( let i = 0; i < values.length; i += 3 ) {
2851
2851
 
@@ -2627,6 +2627,12 @@ class GLTFParser {
2627
2627
 
2628
2628
  } ) ).then( function () {
2629
2629
 
2630
+ for ( const scene of result.scenes ) {
2631
+
2632
+ scene.updateMatrixWorld();
2633
+
2634
+ }
2635
+
2630
2636
  onLoad( result );
2631
2637
 
2632
2638
  } );
@@ -160,12 +160,8 @@ class KTX2Loader extends Loader {
160
160
  || renderer.extensions.has( 'WEBKIT_WEBGL_compressed_texture_pvrtc' )
161
161
  };
162
162
 
163
- if ( renderer.capabilities.isWebGL2 ) {
164
-
165
- // https://github.com/mrdoob/three.js/pull/22928
166
- this.workerConfig.etc1Supported = false;
167
-
168
- }
163
+ // https://github.com/mrdoob/three.js/pull/22928
164
+ this.workerConfig.etc1Supported = false;
169
165
 
170
166
  }
171
167
 
@@ -3,7 +3,6 @@
3
3
 
4
4
  import {
5
5
  ClampToEdgeWrapping,
6
- DataTexture,
7
6
  Data3DTexture,
8
7
  FileLoader,
9
8
  FloatType,
@@ -144,19 +143,6 @@ export class LUT3dlLoader extends Loader {
144
143
 
145
144
  }
146
145
 
147
- const texture = new DataTexture();
148
- texture.image.data = data;
149
- texture.image.width = size;
150
- texture.image.height = size * size;
151
- texture.format = RGBAFormat;
152
- texture.type = this.type;
153
- texture.magFilter = LinearFilter;
154
- texture.minFilter = LinearFilter;
155
- texture.wrapS = ClampToEdgeWrapping;
156
- texture.wrapT = ClampToEdgeWrapping;
157
- texture.generateMipmaps = false;
158
- texture.needsUpdate = true;
159
-
160
146
  const texture3D = new Data3DTexture();
161
147
  texture3D.image.data = data;
162
148
  texture3D.image.width = size;
@@ -174,7 +160,6 @@ export class LUT3dlLoader extends Loader {
174
160
 
175
161
  return {
176
162
  size,
177
- texture,
178
163
  texture3D,
179
164
  };
180
165
 
@@ -2,7 +2,6 @@
2
2
 
3
3
  import {
4
4
  ClampToEdgeWrapping,
5
- DataTexture,
6
5
  Data3DTexture,
7
6
  FileLoader,
8
7
  FloatType,
@@ -127,18 +126,6 @@ export class LUTCubeLoader extends Loader {
127
126
 
128
127
  }
129
128
 
130
- const texture = new DataTexture();
131
- texture.image.data = data;
132
- texture.image.width = size;
133
- texture.image.height = size * size;
134
- texture.type = this.type;
135
- texture.magFilter = LinearFilter;
136
- texture.minFilter = LinearFilter;
137
- texture.wrapS = ClampToEdgeWrapping;
138
- texture.wrapT = ClampToEdgeWrapping;
139
- texture.generateMipmaps = false;
140
- texture.needsUpdate = true;
141
-
142
129
  const texture3D = new Data3DTexture();
143
130
  texture3D.image.data = data;
144
131
  texture3D.image.width = size;
@@ -158,7 +145,6 @@ export class LUTCubeLoader extends Loader {
158
145
  size,
159
146
  domainMin,
160
147
  domainMax,
161
- texture,
162
148
  texture3D,
163
149
  };
164
150
 
@@ -1,7 +1,6 @@
1
1
  import {
2
2
  Loader,
3
3
  TextureLoader,
4
- DataTexture,
5
4
  Data3DTexture,
6
5
  RGBAFormat,
7
6
  UnsignedByteType,
@@ -124,18 +123,6 @@ export class LUTImageLoader extends Loader {
124
123
  parse( dataArray, size ) {
125
124
 
126
125
  const data = new Uint8Array( dataArray );
127
- const texture = new DataTexture();
128
- texture.image.data = data;
129
- texture.image.width = size;
130
- texture.image.height = size * size;
131
- texture.format = RGBAFormat;
132
- texture.type = UnsignedByteType;
133
- texture.magFilter = LinearFilter;
134
- texture.minFilter = LinearFilter;
135
- texture.wrapS = ClampToEdgeWrapping;
136
- texture.wrapT = ClampToEdgeWrapping;
137
- texture.generateMipmaps = false;
138
- texture.needsUpdate = true;
139
126
 
140
127
  const texture3D = new Data3DTexture();
141
128
  texture3D.image.data = data;
@@ -154,7 +141,6 @@ export class LUTImageLoader extends Loader {
154
141
 
155
142
  return {
156
143
  size,
157
- texture,
158
144
  texture3D,
159
145
  };
160
146
 
@@ -36,6 +36,12 @@ class RGBMLoader extends DataTextureLoader {
36
36
 
37
37
  const texture = new CubeTexture();
38
38
 
39
+ for ( let i = 0; i < 6; i ++ ) {
40
+
41
+ texture.images[ i ] = undefined;
42
+
43
+ }
44
+
39
45
  let loaded = 0;
40
46
 
41
47
  const scope = this;
@@ -75,6 +81,16 @@ class RGBMLoader extends DataTextureLoader {
75
81
 
76
82
  }
77
83
 
84
+ loadCubemapAsync( urls, onProgress ) {
85
+
86
+ return new Promise( ( resolve, reject ) => {
87
+
88
+ this.loadCubemap( urls, resolve, onProgress, reject );
89
+
90
+ } );
91
+
92
+ }
93
+
78
94
  parse( buffer ) {
79
95
 
80
96
  const img = UPNG.decode( buffer );
@@ -56,9 +56,16 @@ class VOXLoader extends Loader {
56
56
  const id = data.getUint32( 0, true );
57
57
  const version = data.getUint32( 4, true );
58
58
 
59
- if ( id !== 542658390 || version !== 150 ) {
59
+ if ( id !== 542658390 ) {
60
60
 
61
- console.error( 'Not a valid VOX file' );
61
+ console.error( 'THREE.VOXLoader: Invalid VOX file.' );
62
+ return;
63
+
64
+ }
65
+
66
+ if ( version !== 150 ) {
67
+
68
+ console.error( 'THREE.VOXLoader: Invalid VOX file. Unsupported version:', version );
62
69
  return;
63
70
 
64
71
  }
@@ -1012,7 +1012,9 @@ class VRMLLoader extends Loader {
1012
1012
 
1013
1013
  const pointsMaterial = new PointsMaterial( {
1014
1014
  name: Loader.DEFAULT_MATERIAL_NAME,
1015
- color: 0xffffff
1015
+ color: 0xffffff,
1016
+ opacity: material.opacity,
1017
+ transparent: material.transparent
1016
1018
  } );
1017
1019
 
1018
1020
  if ( geometry.attributes.color !== undefined ) {
@@ -1037,7 +1039,9 @@ class VRMLLoader extends Loader {
1037
1039
 
1038
1040
  const lineMaterial = new LineBasicMaterial( {
1039
1041
  name: Loader.DEFAULT_MATERIAL_NAME,
1040
- color: 0xffffff
1042
+ color: 0xffffff,
1043
+ opacity: material.opacity,
1044
+ transparent: material.transparent
1041
1045
  } );
1042
1046
 
1043
1047
  if ( geometry.attributes.color !== undefined ) {
@@ -171,12 +171,6 @@ class GPUComputationRenderer {
171
171
 
172
172
  this.init = function () {
173
173
 
174
- if ( renderer.capabilities.isWebGL2 === false && renderer.extensions.has( 'OES_texture_float' ) === false ) {
175
-
176
- return 'No OES_texture_float support for float textures.';
177
-
178
- }
179
-
180
174
  if ( renderer.capabilities.maxVertexTextures === 0 ) {
181
175
 
182
176
  return 'No support for vertex shader textures.';
@@ -45,6 +45,7 @@ class ProgressiveLightMap {
45
45
 
46
46
  // Vertex Shader: Set Vertex Positions to the Unwrapped UV Positions
47
47
  shader.vertexShader =
48
+ 'attribute vec2 uv1;\n' +
48
49
  '#define USE_LIGHTMAP\n' +
49
50
  '#define LIGHTMAP_UV uv1\n' +
50
51
  shader.vertexShader.slice( 0, - 1 ) +