super-three 0.133.2 → 0.135.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 (246) hide show
  1. package/build/three.js +619 -538
  2. package/build/three.min.js +1 -1
  3. package/build/three.module.js +763 -616
  4. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  5. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  6. package/examples/fonts/open-sans/open-sans.css +9 -0
  7. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  8. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  9. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  10. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  11. package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
  12. package/examples/js/controls/ArcballControls.js +68 -27
  13. package/examples/js/controls/DragControls.js +7 -0
  14. package/examples/js/controls/OrbitControls.js +5 -36
  15. package/examples/js/controls/TrackballControls.js +3 -2
  16. package/examples/js/csm/CSM.js +2 -2
  17. package/examples/js/csm/CSMFrustum.js +133 -0
  18. package/examples/js/exporters/GLTFExporter.js +147 -63
  19. package/examples/js/exporters/USDZExporter.js +45 -26
  20. package/examples/js/lines/LineMaterial.js +58 -20
  21. package/examples/js/lines/LineSegments2.js +29 -24
  22. package/examples/js/loaders/3DMLoader.js +24 -11
  23. package/examples/js/loaders/3MFLoader.js +2 -2
  24. package/examples/js/loaders/ColladaLoader.js +61 -3
  25. package/examples/js/loaders/FBXLoader.js +1 -1
  26. package/examples/js/loaders/GLTFLoader.js +94 -31
  27. package/examples/js/loaders/KTX2Loader.js +12 -0
  28. package/examples/js/loaders/LWOLoader.js +8 -6
  29. package/examples/js/loaders/LogLuvLoader.js +766 -0
  30. package/examples/js/loaders/PLYLoader.js +32 -7
  31. package/examples/js/loaders/RGBELoader.js +2 -1
  32. package/examples/js/loaders/SVGLoader.js +7 -3
  33. package/examples/js/loaders/TDSLoader.js +237 -271
  34. package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
  35. package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
  36. package/examples/js/objects/MarchingCubes.js +42 -128
  37. package/examples/js/renderers/CSS2DRenderer.js +4 -4
  38. package/examples/js/renderers/CSS3DRenderer.js +4 -4
  39. package/examples/js/utils/RoughnessMipmapper.js +1 -0
  40. package/examples/jsm/controls/ArcballControls.js +61 -29
  41. package/examples/jsm/controls/DragControls.js +7 -0
  42. package/examples/jsm/controls/OrbitControls.js +9 -51
  43. package/examples/jsm/controls/TrackballControls.js +1 -1
  44. package/examples/jsm/csm/CSM.js +3 -3
  45. package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
  46. package/examples/jsm/exporters/GLTFExporter.js +160 -74
  47. package/examples/jsm/exporters/USDZExporter.js +47 -26
  48. package/examples/jsm/libs/flow.module.js +3218 -0
  49. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  50. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  51. package/examples/jsm/lines/LineMaterial.js +59 -23
  52. package/examples/jsm/lines/LineSegments2.js +22 -18
  53. package/examples/jsm/loaders/3DMLoader.js +18 -12
  54. package/examples/jsm/loaders/3MFLoader.js +2 -2
  55. package/examples/jsm/loaders/ColladaLoader.js +61 -3
  56. package/examples/jsm/loaders/FBXLoader.js +1 -1
  57. package/examples/jsm/loaders/GLTFLoader.js +99 -35
  58. package/examples/jsm/loaders/KTX2Loader.js +19 -0
  59. package/examples/jsm/loaders/LWOLoader.js +8 -6
  60. package/examples/jsm/loaders/LogLuvLoader.js +606 -0
  61. package/examples/jsm/loaders/PLYLoader.js +33 -7
  62. package/examples/jsm/loaders/SVGLoader.js +7 -4
  63. package/examples/jsm/loaders/TDSLoader.js +225 -285
  64. package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
  65. package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
  66. package/examples/jsm/node-editor/NodeEditor.js +455 -0
  67. package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
  68. package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
  69. package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
  70. package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
  71. package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
  72. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
  73. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
  74. package/examples/jsm/node-editor/examples/rim.json +1 -0
  75. package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
  76. package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
  77. package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
  78. package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
  79. package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
  80. package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
  81. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +69 -0
  82. package/examples/jsm/node-editor/math/DotEditor.js +36 -0
  83. package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
  84. package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
  85. package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
  86. package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
  87. package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
  88. package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
  89. package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
  90. package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
  91. package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
  92. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
  93. package/examples/jsm/nodes/materials/nodes/StandardNode.js +6 -6
  94. package/examples/jsm/nodes/utils/ColorSpaceNode.js +1 -49
  95. package/examples/jsm/objects/MarchingCubes.js +46 -152
  96. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
  97. package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
  98. package/examples/jsm/postprocessing/BloomPass.js +1 -1
  99. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  100. package/examples/jsm/postprocessing/ClearPass.js +1 -1
  101. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
  102. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  103. package/examples/jsm/postprocessing/EffectComposer.js +3 -3
  104. package/examples/jsm/postprocessing/FilmPass.js +1 -1
  105. package/examples/jsm/postprocessing/GlitchPass.js +1 -1
  106. package/examples/jsm/postprocessing/HalftonePass.js +1 -1
  107. package/examples/jsm/postprocessing/MaskPass.js +1 -1
  108. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  109. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  110. package/examples/jsm/postprocessing/SAOPass.js +1 -1
  111. package/examples/jsm/postprocessing/SMAAPass.js +1 -1
  112. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
  113. package/examples/jsm/postprocessing/SSAOPass.js +1 -1
  114. package/examples/jsm/postprocessing/SSRPass.js +1 -1
  115. package/examples/jsm/postprocessing/SSRrPass.js +1 -1
  116. package/examples/jsm/postprocessing/SavePass.js +1 -1
  117. package/examples/jsm/postprocessing/ShaderPass.js +1 -1
  118. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  119. package/examples/jsm/postprocessing/TexturePass.js +1 -1
  120. package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
  121. package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
  122. package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
  123. package/examples/jsm/renderers/nodes/Nodes.js +14 -13
  124. package/examples/jsm/renderers/nodes/ShaderNode.js +193 -41
  125. package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
  126. package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
  127. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
  128. package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
  129. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
  130. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
  131. package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
  132. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
  133. package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
  134. package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
  135. package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
  136. package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
  137. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
  138. package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
  139. package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
  140. package/examples/jsm/renderers/nodes/core/Node.js +32 -10
  141. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
  142. package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
  143. package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
  144. package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
  145. package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
  146. package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
  147. package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
  148. package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
  149. package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
  150. package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
  151. package/examples/jsm/renderers/nodes/core/constants.js +2 -0
  152. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +47 -25
  153. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
  154. package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
  155. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
  156. package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
  157. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +10 -2
  158. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
  159. package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
  160. package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
  161. package/examples/jsm/renderers/nodes/math/MathNode.js +87 -36
  162. package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
  163. package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
  164. package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
  165. package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
  166. package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
  167. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
  168. package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
  169. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
  170. package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
  171. package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
  172. package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
  173. package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
  174. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
  175. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +191 -94
  176. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
  177. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
  178. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
  179. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +3 -3
  180. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
  181. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
  182. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
  183. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +3 -5
  184. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +11 -27
  185. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +62 -28
  186. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +34 -27
  187. package/examples/jsm/renderers/webgpu/constants.js +2 -2
  188. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +430 -98
  189. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  190. package/examples/jsm/utils/RoughnessMipmapper.js +1 -0
  191. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
  192. package/package.json +10 -10
  193. package/src/Three.Legacy.js +6 -0
  194. package/src/Three.js +0 -1
  195. package/src/cameras/StereoCamera.js +8 -7
  196. package/src/constants.js +1 -2
  197. package/src/core/Layers.js +7 -1
  198. package/src/core/Object3D.js +2 -0
  199. package/src/extras/PMREMGenerator.js +11 -6
  200. package/src/loaders/FileLoader.js +89 -152
  201. package/src/loaders/ImageLoader.js +9 -4
  202. package/src/loaders/LoaderUtils.js +26 -0
  203. package/src/loaders/MaterialLoader.js +7 -4
  204. package/src/loaders/ObjectLoader.js +2 -0
  205. package/src/materials/Material.js +4 -4
  206. package/src/materials/MeshPhysicalMaterial.js +20 -14
  207. package/src/math/MathUtils.js +5 -16
  208. package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
  209. package/src/renderers/WebGLRenderer.js +83 -117
  210. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
  211. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -27
  212. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  213. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
  214. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  215. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  216. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +1 -1
  217. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +13 -5
  218. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
  219. package/src/renderers/shaders/ShaderLib.js +6 -4
  220. package/src/renderers/shaders/UniformsLib.js +1 -2
  221. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  222. package/src/renderers/webgl/WebGLMaterials.js +27 -15
  223. package/src/renderers/webgl/WebGLProgram.js +10 -6
  224. package/src/renderers/webgl/WebGLPrograms.js +17 -12
  225. package/src/renderers/webgl/WebGLShadowMap.js +14 -5
  226. package/src/renderers/webgl/WebGLState.js +31 -17
  227. package/src/renderers/webgl/WebGLTextures.js +188 -51
  228. package/src/renderers/webgl/WebGLUniforms.js +45 -1
  229. package/src/renderers/webxr/WebXRManager.js +71 -110
  230. package/src/textures/Texture.js +6 -0
  231. package/src/utils.js +37 -1
  232. package/examples/js/controls/DeviceOrientationControls.js +0 -147
  233. package/examples/js/libs/dat.gui.min.js +0 -14
  234. package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
  235. package/examples/jsm/libs/dat.gui.module.js +0 -3575
  236. package/examples/jsm/libs/glslang.js +0 -78
  237. package/examples/jsm/libs/glslang.wasm +0 -0
  238. package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
  239. package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
  240. package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
  241. package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
  242. package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
  243. package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
  244. package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
  245. package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
  246. package/src/extras/objects/ImmediateRenderObject.js +0 -31
@@ -94,6 +94,12 @@ class GLTFLoader extends Loader {
94
94
 
95
95
  } );
96
96
 
97
+ this.register( function ( parser ) {
98
+
99
+ return new GLTFMaterialsSheenExtension( parser );
100
+
101
+ } );
102
+
97
103
  this.register( function ( parser ) {
98
104
 
99
105
  return new GLTFMaterialsTransmissionExtension( parser );
@@ -379,6 +385,18 @@ class GLTFLoader extends Loader {
379
385
 
380
386
  }
381
387
 
388
+ parseAsync( data, path ) {
389
+
390
+ const scope = this;
391
+
392
+ return new Promise( function ( resolve, reject ) {
393
+
394
+ scope.parse( data, path, resolve, reject );
395
+
396
+ } );
397
+
398
+ }
399
+
382
400
  }
383
401
 
384
402
  /* GLTFREGISTRY */
@@ -428,6 +446,7 @@ const EXTENSIONS = {
428
446
  KHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',
429
447
  KHR_MATERIALS_IOR: 'KHR_materials_ior',
430
448
  KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness',
449
+ KHR_MATERIALS_SHEEN: 'KHR_materials_sheen',
431
450
  KHR_MATERIALS_SPECULAR: 'KHR_materials_specular',
432
451
  KHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',
433
452
  KHR_MATERIALS_UNLIT: 'KHR_materials_unlit',
@@ -704,6 +723,80 @@ class GLTFMaterialsClearcoatExtension {
704
723
 
705
724
  }
706
725
 
726
+ /**
727
+ * Sheen Materials Extension
728
+ *
729
+ * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen
730
+ */
731
+ class GLTFMaterialsSheenExtension {
732
+
733
+ constructor( parser ) {
734
+
735
+ this.parser = parser;
736
+ this.name = EXTENSIONS.KHR_MATERIALS_SHEEN;
737
+
738
+ }
739
+
740
+ getMaterialType( materialIndex ) {
741
+
742
+ const parser = this.parser;
743
+ const materialDef = parser.json.materials[ materialIndex ];
744
+
745
+ if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
746
+
747
+ return MeshPhysicalMaterial;
748
+
749
+ }
750
+
751
+ extendMaterialParams( materialIndex, materialParams ) {
752
+
753
+ const parser = this.parser;
754
+ const materialDef = parser.json.materials[ materialIndex ];
755
+
756
+ if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
757
+
758
+ return Promise.resolve();
759
+
760
+ }
761
+
762
+ const pending = [];
763
+
764
+ materialParams.sheenColor = new Color( 0, 0, 0 );
765
+ materialParams.sheenRoughness = 0;
766
+ materialParams.sheen = 1;
767
+
768
+ const extension = materialDef.extensions[ this.name ];
769
+
770
+ if ( extension.sheenColorFactor !== undefined ) {
771
+
772
+ materialParams.sheenColor.fromArray( extension.sheenColorFactor );
773
+
774
+ }
775
+
776
+ if ( extension.sheenRoughnessFactor !== undefined ) {
777
+
778
+ materialParams.sheenRoughness = extension.sheenRoughnessFactor;
779
+
780
+ }
781
+
782
+ if ( extension.sheenColorTexture !== undefined ) {
783
+
784
+ pending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture ) );
785
+
786
+ }
787
+
788
+ if ( extension.sheenRoughnessTexture !== undefined ) {
789
+
790
+ pending.push( parser.assignTexture( materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture ) );
791
+
792
+ }
793
+
794
+ return Promise.all( pending );
795
+
796
+ }
797
+
798
+ }
799
+
707
800
  /**
708
801
  * Transmission Materials Extension
709
802
  *
@@ -814,7 +907,7 @@ class GLTFMaterialsVolumeExtension {
814
907
  materialParams.attenuationDistance = extension.attenuationDistance || 0;
815
908
 
816
909
  const colorArray = extension.attenuationColor || [ 1, 1, 1 ];
817
- materialParams.attenuationTint = new Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );
910
+ materialParams.attenuationColor = new Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );
818
911
 
819
912
  return Promise.all( pending );
820
913
 
@@ -917,11 +1010,11 @@ class GLTFMaterialsSpecularExtension {
917
1010
  }
918
1011
 
919
1012
  const colorArray = extension.specularColorFactor || [ 1, 1, 1 ];
920
- materialParams.specularTint = new Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );
1013
+ materialParams.specularColor = new Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );
921
1014
 
922
1015
  if ( extension.specularColorTexture !== undefined ) {
923
1016
 
924
- pending.push( parser.assignTexture( materialParams, 'specularTintMap', extension.specularColorTexture ).then( function ( texture ) {
1017
+ pending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture ).then( function ( texture ) {
925
1018
 
926
1019
  texture.encoding = sRGBEncoding;
927
1020
 
@@ -1887,34 +1980,6 @@ const ALPHA_MODES = {
1887
1980
  BLEND: 'BLEND'
1888
1981
  };
1889
1982
 
1890
- /* UTILITY FUNCTIONS */
1891
-
1892
- function resolveURL( url, path ) {
1893
-
1894
- // Invalid URL
1895
- if ( typeof url !== 'string' || url === '' ) return '';
1896
-
1897
- // Host Relative URL
1898
- if ( /^https?:\/\//i.test( path ) && /^\//.test( url ) ) {
1899
-
1900
- path = path.replace( /(^https?:\/\/[^\/]+).*/i, '$1' );
1901
-
1902
- }
1903
-
1904
- // Absolute URL http://,https://,//
1905
- if ( /^(https?:)?\/\//i.test( url ) ) return url;
1906
-
1907
- // Data URI
1908
- if ( /^data:.*,.*$/i.test( url ) ) return url;
1909
-
1910
- // Blob URL
1911
- if ( /^blob:.*$/i.test( url ) ) return url;
1912
-
1913
- // Relative URL
1914
- return path + url;
1915
-
1916
- }
1917
-
1918
1983
  /**
1919
1984
  * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material
1920
1985
  */
@@ -2574,7 +2639,7 @@ class GLTFParser {
2574
2639
 
2575
2640
  return new Promise( function ( resolve, reject ) {
2576
2641
 
2577
- loader.load( resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {
2642
+ loader.load( LoaderUtils.resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {
2578
2643
 
2579
2644
  reject( new Error( 'THREE.GLTFLoader: Failed to load buffer "' + bufferDef.uri + '".' ) );
2580
2645
 
@@ -2820,7 +2885,7 @@ class GLTFParser {
2820
2885
 
2821
2886
  }
2822
2887
 
2823
- loader.load( resolveURL( sourceURI, options.path ), onLoad, undefined, reject );
2888
+ loader.load( LoaderUtils.resolveURL( sourceURI, options.path ), onLoad, undefined, reject );
2824
2889
 
2825
2890
  } );
2826
2891
 
@@ -3590,10 +3655,9 @@ class GLTFParser {
3590
3655
 
3591
3656
  if ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {
3592
3657
 
3593
- // Node may be a Group (glTF mesh with several primitives) or a Mesh.
3594
3658
  node.traverse( function ( object ) {
3595
3659
 
3596
- if ( object.isMesh === true && object.morphTargetInfluences ) {
3660
+ if ( object.morphTargetInfluences ) {
3597
3661
 
3598
3662
  targetNames.push( object.name ? object.name : object.uuid );
3599
3663
 
@@ -37,6 +37,8 @@ const KTX2TransferSRGB = 2;
37
37
  const KTX2_ALPHA_PREMULTIPLIED = 1;
38
38
  const _taskCache = new WeakMap();
39
39
 
40
+ let _activeLoaders = 0;
41
+
40
42
  class KTX2Loader extends Loader {
41
43
 
42
44
  constructor( manager ) {
@@ -154,6 +156,21 @@ class KTX2Loader extends Loader {
154
156
 
155
157
  } );
156
158
 
159
+ if ( _activeLoaders > 0 ) {
160
+
161
+ // Each instance loads a transcoder and allocates workers, increasing network and memory cost.
162
+
163
+ console.warn(
164
+
165
+ 'THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues.'
166
+ + ' Use a single KTX2Loader instance, or call .dispose() on old instances.'
167
+
168
+ );
169
+
170
+ }
171
+
172
+ _activeLoaders++;
173
+
157
174
  }
158
175
 
159
176
  return this.transcoderPending;
@@ -248,6 +265,8 @@ class KTX2Loader extends Loader {
248
265
  URL.revokeObjectURL( this.workerSourceURL );
249
266
  this.workerPool.dispose();
250
267
 
268
+ _activeLoaders--;
269
+
251
270
  return this;
252
271
 
253
272
  }
@@ -4,10 +4,10 @@
4
4
  * @desc Load files in LWO3 and LWO2 format on Three.js
5
5
  *
6
6
  * LWO3 format specification:
7
- * http://static.lightwave3d.com/sdk/2018/html/filefmts/lwo3.html
7
+ * https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo3.html
8
8
  *
9
9
  * LWO2 format specification:
10
- * http://static.lightwave3d.com/sdk/2018/html/filefmts/lwo2.html
10
+ * https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo2.html
11
11
  *
12
12
  **/
13
13
 
@@ -465,7 +465,7 @@ class MaterialParser {
465
465
  break;
466
466
  case 'Roughness':
467
467
  maps.roughnessMap = texture;
468
- maps.roughness = 0.5;
468
+ maps.roughness = 1;
469
469
  break;
470
470
  case 'Specular':
471
471
  maps.specularMap = texture;
@@ -480,7 +480,7 @@ class MaterialParser {
480
480
  break;
481
481
  case 'Metallic':
482
482
  maps.metalnessMap = texture;
483
- maps.metalness = 0.5;
483
+ maps.metalness = 1;
484
484
  break;
485
485
  case 'Transparency':
486
486
  case 'Alpha':
@@ -591,7 +591,7 @@ class MaterialParser {
591
591
 
592
592
  if ( attributes[ 'Bump Height' ] ) params.bumpScale = attributes[ 'Bump Height' ].value * 0.1;
593
593
 
594
- if ( attributes[ 'Refraction Index' ] ) params.refractionRatio = 1 / attributes[ 'Refraction Index' ].value;
594
+ if ( attributes[ 'Refraction Index' ] ) params.refractionRatio = 0.98 / attributes[ 'Refraction Index' ].value;
595
595
 
596
596
  this.parsePhysicalAttributes( params, attributes, maps );
597
597
  this.parseStandardAttributes( params, attributes, maps );
@@ -707,10 +707,12 @@ class MaterialParser {
707
707
 
708
708
  if ( attributes.metalness !== undefined ) {
709
709
 
710
- delete attributes.metalness;
710
+ attributes.metalness = 1; // For most transparent materials metalness should be set to 1 if not otherwise defined. If set to 0 no refraction will be visible
711
711
 
712
712
  }
713
713
 
714
+ attributes.opacity = 1; // transparency fades out refraction, forcing opacity to 1 ensures a closer visual match to the material in Lightwave.
715
+
714
716
  } else envMap.mapping = EquirectangularReflectionMapping;
715
717
 
716
718
  maps.envMap = envMap;