super-three 0.155.0 → 0.157.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 (268) hide show
  1. package/build/three.cjs +361 -324
  2. package/build/three.js +361 -324
  3. package/build/three.min.js +2 -2
  4. package/build/three.module.js +354 -323
  5. package/build/three.module.min.js +1 -1
  6. package/examples/jsm/capabilities/WebGL.js +17 -0
  7. package/examples/jsm/controls/DragControls.js +3 -2
  8. package/examples/jsm/controls/OrbitControls.js +13 -5
  9. package/examples/jsm/csm/CSMShader.js +59 -21
  10. package/examples/jsm/exporters/EXRExporter.js +102 -24
  11. package/examples/jsm/exporters/GLTFExporter.js +1 -1
  12. package/examples/jsm/libs/rhino3dm/rhino3dm.js +8726 -4
  13. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +8737 -4
  14. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  15. package/examples/jsm/libs/tween.module.js +790 -735
  16. package/examples/jsm/libs/utif.module.js +1644 -1558
  17. package/examples/jsm/lights/LightProbeGenerator.js +37 -3
  18. package/examples/jsm/lines/LineMaterial.js +90 -156
  19. package/examples/jsm/loaders/3DMLoader.js +378 -104
  20. package/examples/jsm/loaders/DDSLoader.js +46 -3
  21. package/examples/jsm/loaders/EXRLoader.js +4 -4
  22. package/examples/jsm/loaders/FBXLoader.js +2 -0
  23. package/examples/jsm/loaders/GLTFLoader.js +18 -8
  24. package/examples/jsm/loaders/KTX2Loader.js +126 -77
  25. package/examples/jsm/loaders/LDrawLoader.js +22 -16
  26. package/examples/jsm/loaders/LogLuvLoader.js +2 -2
  27. package/examples/jsm/loaders/MMDLoader.js +10 -7
  28. package/examples/jsm/loaders/RGBELoader.js +48 -66
  29. package/examples/jsm/loaders/STLLoader.js +7 -0
  30. package/examples/jsm/loaders/USDZLoader.js +215 -12
  31. package/examples/jsm/materials/MeshGouraudMaterial.js +22 -18
  32. package/examples/jsm/nodes/Nodes.js +8 -1
  33. package/examples/jsm/nodes/accessors/BitangentNode.js +1 -1
  34. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +30 -4
  35. package/examples/jsm/nodes/accessors/BufferNode.js +1 -1
  36. package/examples/jsm/nodes/accessors/CameraNode.js +1 -1
  37. package/examples/jsm/nodes/accessors/CubeTextureNode.js +19 -4
  38. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +4 -5
  39. package/examples/jsm/nodes/accessors/InstanceNode.js +2 -2
  40. package/examples/jsm/nodes/accessors/LineMaterialNode.js +29 -0
  41. package/examples/jsm/nodes/accessors/MaterialNode.js +23 -13
  42. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +12 -9
  43. package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
  44. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +5 -4
  45. package/examples/jsm/nodes/accessors/MorphNode.js +4 -4
  46. package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
  47. package/examples/jsm/nodes/accessors/Object3DNode.js +3 -3
  48. package/examples/jsm/nodes/accessors/PointUVNode.js +1 -1
  49. package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
  50. package/examples/jsm/nodes/accessors/ReferenceNode.js +13 -7
  51. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +2 -2
  52. package/examples/jsm/nodes/accessors/SceneNode.js +2 -2
  53. package/examples/jsm/nodes/accessors/SkinningNode.js +2 -2
  54. package/examples/jsm/nodes/accessors/StorageBufferNode.js +1 -1
  55. package/examples/jsm/nodes/accessors/TangentNode.js +1 -1
  56. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +2 -2
  57. package/examples/jsm/nodes/accessors/TextureNode.js +18 -8
  58. package/examples/jsm/nodes/accessors/TextureSizeNode.js +2 -2
  59. package/examples/jsm/nodes/accessors/TextureStoreNode.js +29 -0
  60. package/examples/jsm/nodes/accessors/UVNode.js +1 -1
  61. package/examples/jsm/nodes/accessors/UserDataNode.js +2 -2
  62. package/examples/jsm/nodes/code/CodeNode.js +1 -1
  63. package/examples/jsm/nodes/code/ExpressionNode.js +1 -1
  64. package/examples/jsm/nodes/code/FunctionCallNode.js +1 -1
  65. package/examples/jsm/nodes/code/FunctionNode.js +18 -7
  66. package/examples/jsm/nodes/code/ScriptableNode.js +2 -2
  67. package/examples/jsm/nodes/code/ScriptableValueNode.js +2 -2
  68. package/examples/jsm/nodes/core/ArrayUniformNode.js +1 -1
  69. package/examples/jsm/nodes/core/AttributeNode.js +3 -3
  70. package/examples/jsm/nodes/core/BypassNode.js +1 -1
  71. package/examples/jsm/nodes/core/CacheNode.js +1 -1
  72. package/examples/jsm/nodes/core/ConstNode.js +1 -1
  73. package/examples/jsm/nodes/core/ContextNode.js +2 -2
  74. package/examples/jsm/nodes/core/IndexNode.js +1 -1
  75. package/examples/jsm/nodes/core/InputNode.js +1 -1
  76. package/examples/jsm/nodes/core/Node.js +45 -14
  77. package/examples/jsm/nodes/core/NodeBuilder.js +83 -15
  78. package/examples/jsm/nodes/core/NodeFrame.js +37 -14
  79. package/examples/jsm/nodes/core/NodeUniform.js +1 -1
  80. package/examples/jsm/nodes/core/OutputStructNode.js +62 -0
  81. package/examples/jsm/nodes/core/PropertyNode.js +3 -1
  82. package/examples/jsm/nodes/core/StackNode.js +5 -5
  83. package/examples/jsm/nodes/core/StructTypeNode.js +24 -0
  84. package/examples/jsm/nodes/core/TempNode.js +1 -1
  85. package/examples/jsm/nodes/core/UniformNode.js +3 -1
  86. package/examples/jsm/nodes/core/VarNode.js +1 -1
  87. package/examples/jsm/nodes/core/VaryingNode.js +1 -1
  88. package/examples/jsm/nodes/core/constants.js +1 -1
  89. package/examples/jsm/nodes/display/BlendModeNode.js +2 -2
  90. package/examples/jsm/nodes/display/BumpMapNode.js +2 -2
  91. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -2
  92. package/examples/jsm/nodes/display/ColorSpaceNode.js +2 -2
  93. package/examples/jsm/nodes/display/FrontFacingNode.js +1 -1
  94. package/examples/jsm/nodes/display/NormalMapNode.js +2 -2
  95. package/examples/jsm/nodes/display/PosterizeNode.js +2 -2
  96. package/examples/jsm/nodes/display/ToneMappingNode.js +2 -2
  97. package/examples/jsm/nodes/display/ViewportDepthNode.js +2 -2
  98. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +1 -1
  99. package/examples/jsm/nodes/display/ViewportNode.js +21 -7
  100. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +1 -1
  101. package/examples/jsm/nodes/display/ViewportTextureNode.js +1 -1
  102. package/examples/jsm/nodes/fog/FogExp2Node.js +2 -2
  103. package/examples/jsm/nodes/fog/FogNode.js +2 -2
  104. package/examples/jsm/nodes/fog/FogRangeNode.js +2 -2
  105. package/examples/jsm/nodes/geometry/RangeNode.js +2 -2
  106. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  107. package/examples/jsm/nodes/lighting/AONode.js +2 -2
  108. package/examples/jsm/nodes/lighting/AmbientLightNode.js +3 -3
  109. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +4 -4
  110. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +4 -4
  111. package/examples/jsm/nodes/lighting/EnvironmentNode.js +2 -2
  112. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +3 -3
  113. package/examples/jsm/nodes/lighting/IESSpotLightNode.js +2 -2
  114. package/examples/jsm/nodes/lighting/LightNode.js +2 -2
  115. package/examples/jsm/nodes/lighting/LightingContextNode.js +3 -3
  116. package/examples/jsm/nodes/lighting/LightingNode.js +1 -1
  117. package/examples/jsm/nodes/lighting/LightsNode.js +4 -4
  118. package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
  119. package/examples/jsm/nodes/lighting/SpotLightNode.js +4 -4
  120. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +449 -0
  121. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +1 -1
  122. package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +54 -0
  123. package/examples/jsm/nodes/materials/Materials.js +2 -0
  124. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -1
  125. package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +2 -2
  126. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -2
  127. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
  128. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +6 -6
  129. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +3 -3
  130. package/examples/jsm/nodes/materials/NodeMaterial.js +39 -29
  131. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +1 -1
  132. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +2 -2
  133. package/examples/jsm/nodes/math/CondNode.js +1 -1
  134. package/examples/jsm/nodes/math/HashNode.js +34 -0
  135. package/examples/jsm/nodes/math/MathNode.js +2 -2
  136. package/examples/jsm/nodes/math/OperatorNode.js +1 -1
  137. package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
  138. package/examples/jsm/nodes/shadernode/ShaderNode.js +85 -28
  139. package/examples/jsm/nodes/utils/ArrayElementNode.js +1 -1
  140. package/examples/jsm/nodes/utils/ConvertNode.js +1 -1
  141. package/examples/jsm/nodes/utils/DiscardNode.js +1 -1
  142. package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -2
  143. package/examples/jsm/nodes/utils/JoinNode.js +1 -1
  144. package/examples/jsm/nodes/utils/LoopNode.js +11 -11
  145. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -2
  146. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  147. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  148. package/examples/jsm/nodes/utils/PackingNode.js +2 -2
  149. package/examples/jsm/nodes/utils/RemapNode.js +2 -2
  150. package/examples/jsm/nodes/utils/RotateUVNode.js +2 -2
  151. package/examples/jsm/nodes/utils/SetNode.js +62 -0
  152. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +2 -2
  153. package/examples/jsm/nodes/utils/SplitNode.js +2 -2
  154. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +2 -2
  155. package/examples/jsm/nodes/utils/TimerNode.js +2 -2
  156. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +2 -2
  157. package/examples/jsm/objects/Sky.js +1 -3
  158. package/examples/jsm/postprocessing/FilmPass.js +3 -5
  159. package/examples/jsm/postprocessing/OutputPass.js +3 -2
  160. package/examples/jsm/postprocessing/RenderPass.js +30 -12
  161. package/examples/jsm/postprocessing/SAOPass.js +23 -98
  162. package/examples/jsm/postprocessing/SSAOPass.js +10 -30
  163. package/examples/jsm/renderers/common/Backend.js +11 -8
  164. package/examples/jsm/renderers/common/Background.js +2 -2
  165. package/examples/jsm/renderers/common/Binding.js +6 -0
  166. package/examples/jsm/renderers/common/Bindings.js +4 -5
  167. package/examples/jsm/renderers/common/Pipelines.js +9 -9
  168. package/examples/jsm/renderers/common/RenderContext.js +3 -0
  169. package/examples/jsm/renderers/common/RenderContexts.js +26 -1
  170. package/examples/jsm/renderers/common/RenderList.js +12 -4
  171. package/examples/jsm/renderers/common/RenderObject.js +43 -15
  172. package/examples/jsm/renderers/common/RenderObjects.js +8 -14
  173. package/examples/jsm/renderers/common/Renderer.js +52 -16
  174. package/examples/jsm/renderers/common/SampledTexture.js +6 -3
  175. package/examples/jsm/renderers/common/Sampler.js +1 -1
  176. package/examples/jsm/renderers/common/StorageBuffer.js +1 -1
  177. package/examples/jsm/renderers/common/StorageTexture.js +19 -0
  178. package/examples/jsm/renderers/common/Textures.js +166 -21
  179. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +35 -0
  180. package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +21 -11
  181. package/examples/jsm/renderers/common/nodes/NodeSampler.js +1 -7
  182. package/examples/jsm/renderers/common/nodes/Nodes.js +79 -18
  183. package/examples/jsm/renderers/webgl/WebGLBackend.js +702 -0
  184. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +207 -20
  185. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +84 -0
  186. package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +26 -0
  187. package/examples/jsm/renderers/webgl/utils/WebGLState.js +529 -0
  188. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +212 -0
  189. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +242 -0
  190. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +340 -0
  191. package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodeBuilder.js +4 -4
  192. package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodes.js +14 -2
  193. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +282 -43
  194. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +18 -2
  195. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +93 -60
  196. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -2
  197. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +15 -2
  198. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -14
  199. package/examples/jsm/renderers/webgpu/utils/WebGPUTexturePassUtils.js +285 -0
  200. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +205 -284
  201. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +6 -5
  202. package/examples/jsm/shaders/FilmShader.js +11 -54
  203. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  204. package/examples/jsm/shaders/MMDToonShader.js +4 -4
  205. package/examples/jsm/shaders/OutputShader.js +2 -2
  206. package/examples/jsm/shaders/SAOShader.js +0 -13
  207. package/examples/jsm/shaders/SSAOShader.js +33 -26
  208. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +6 -6
  209. package/examples/jsm/utils/BufferGeometryUtils.js +6 -4
  210. package/package.json +1 -1
  211. package/src/Three.js +1 -2
  212. package/src/animation/AnimationUtils.js +3 -20
  213. package/src/animation/KeyframeTrack.js +8 -8
  214. package/src/audio/Audio.js +6 -0
  215. package/src/cameras/Camera.js +1 -5
  216. package/src/cameras/CubeCamera.js +14 -8
  217. package/src/constants.js +10 -1
  218. package/src/core/Object3D.js +1 -14
  219. package/src/core/RenderTarget.js +16 -7
  220. package/src/core/UniformsGroup.js +2 -2
  221. package/src/extras/core/CurvePath.js +4 -1
  222. package/src/loaders/DataTextureLoader.js +0 -2
  223. package/src/loaders/MaterialLoader.js +1 -1
  224. package/src/loaders/ObjectLoader.js +6 -0
  225. package/src/materials/Material.js +10 -10
  226. package/src/math/Color.js +1 -5
  227. package/src/math/ColorManagement.js +82 -60
  228. package/src/math/Vector2.js +2 -2
  229. package/src/math/Vector3.js +3 -3
  230. package/src/math/Vector4.js +4 -4
  231. package/src/objects/Line.js +1 -1
  232. package/src/objects/Mesh.js +1 -1
  233. package/src/objects/Points.js +1 -1
  234. package/src/objects/Sprite.js +2 -2
  235. package/src/renderers/WebGLRenderer.js +42 -51
  236. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
  237. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js +1 -1
  238. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +35 -2
  239. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -9
  240. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +19 -15
  241. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +2 -2
  242. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +4 -4
  243. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +3 -3
  244. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -6
  245. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +4 -4
  246. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +1 -1
  247. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +16 -16
  248. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +3 -3
  249. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +11 -1
  250. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +1 -1
  251. package/src/renderers/shaders/ShaderLib/background.glsl.js +8 -0
  252. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -1
  253. package/src/renderers/shaders/UniformsUtils.js +2 -2
  254. package/src/renderers/webgl/WebGLBackground.js +9 -17
  255. package/src/renderers/webgl/WebGLLights.js +14 -3
  256. package/src/renderers/webgl/WebGLProgram.js +36 -5
  257. package/src/renderers/webgl/WebGLPrograms.js +9 -1
  258. package/src/renderers/webgl/WebGLTextures.js +19 -8
  259. package/src/renderers/webgl/WebGLUtils.js +25 -20
  260. package/src/scenes/Fog.js +1 -0
  261. package/src/scenes/FogExp2.js +1 -0
  262. package/src/textures/Source.js +2 -2
  263. package/src/textures/Texture.js +2 -2
  264. package/src/utils.js +9 -1
  265. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureMipmapUtils.js +0 -163
  266. package/src/lights/AmbientLightProbe.js +0 -21
  267. package/src/lights/HemisphereLightProbe.js +0 -30
  268. /package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/SlotNode.js +0 -0
@@ -1520,19 +1520,19 @@ class LDrawPartsGeometryCache {
1520
1520
  const group = info.group;
1521
1521
  if ( info.faces.length > 0 ) {
1522
1522
 
1523
- group.add( createObject( info.faces, 3, false, info.totalFaces ) );
1523
+ group.add( createObject( this.loader, info.faces, 3, false, info.totalFaces ) );
1524
1524
 
1525
1525
  }
1526
1526
 
1527
1527
  if ( info.lineSegments.length > 0 ) {
1528
1528
 
1529
- group.add( createObject( info.lineSegments, 2 ) );
1529
+ group.add( createObject( this.loader, info.lineSegments, 2 ) );
1530
1530
 
1531
1531
  }
1532
1532
 
1533
1533
  if ( info.conditionalSegments.length > 0 ) {
1534
1534
 
1535
- group.add( createObject( info.conditionalSegments, 2, true ) );
1535
+ group.add( createObject( this.loader, info.conditionalSegments, 2, true ) );
1536
1536
 
1537
1537
  }
1538
1538
 
@@ -1640,7 +1640,7 @@ function sortByMaterial( a, b ) {
1640
1640
 
1641
1641
  }
1642
1642
 
1643
- function createObject( elements, elementSize, isConditionalSegments = false, totalElements = null ) {
1643
+ function createObject( loader, elements, elementSize, isConditionalSegments = false, totalElements = null ) {
1644
1644
 
1645
1645
  // Creates a LineSegments (elementSize = 2) or a Mesh (elementSize = 3 )
1646
1646
  // With per face / segment material, implemented with mesh groups and materials array
@@ -1759,11 +1759,13 @@ function createObject( elements, elementSize, isConditionalSegments = false, tot
1759
1759
 
1760
1760
  if ( isConditionalSegments ) {
1761
1761
 
1762
- materials.push( material.userData.edgeMaterial.userData.conditionalEdgeMaterial );
1762
+ const edgeMaterial = loader.edgeMaterialCache.get( material );
1763
+
1764
+ materials.push( loader.conditionalEdgeMaterialCache.get( edgeMaterial ) );
1763
1765
 
1764
1766
  } else {
1765
1767
 
1766
- materials.push( material.userData.edgeMaterial );
1768
+ materials.push( loader.edgeMaterialCache.get( material ) );
1767
1769
 
1768
1770
  }
1769
1771
 
@@ -1886,6 +1888,8 @@ class LDrawLoader extends Loader {
1886
1888
  // Array of THREE.Material
1887
1889
  this.materials = [];
1888
1890
  this.materialLibrary = {};
1891
+ this.edgeMaterialCache = new WeakMap();
1892
+ this.conditionalEdgeMaterialCache = new WeakMap();
1889
1893
 
1890
1894
  // This also allows to handle the embedded text files ("0 FILE" lines)
1891
1895
  this.partsCache = new LDrawPartsGeometryCache( this );
@@ -1906,8 +1910,8 @@ class LDrawLoader extends Loader {
1906
1910
  this.missingColorMaterial = new MeshStandardMaterial( { name: Loader.DEFAULT_MATERIAL_NAME, color: 0xFF00FF, roughness: 0.3, metalness: 0 } );
1907
1911
  this.missingEdgeColorMaterial = new LineBasicMaterial( { name: Loader.DEFAULT_MATERIAL_NAME, color: 0xFF00FF } );
1908
1912
  this.missingConditionalEdgeColorMaterial = new LDrawConditionalLineMaterial( { name: Loader.DEFAULT_MATERIAL_NAME, fog: true, color: 0xFF00FF } );
1909
- this.missingColorMaterial.userData.edgeMaterial = this.missingEdgeColorMaterial;
1910
- this.missingEdgeColorMaterial.userData.conditionalEdgeMaterial = this.missingConditionalEdgeColorMaterial;
1913
+ this.edgeMaterialCache.set( this.missingColorMaterial, this.missingEdgeColorMaterial );
1914
+ this.conditionalEdgeMaterialCache.set( this.missingEdgeColorMaterial, this.missingConditionalEdgeColorMaterial );
1911
1915
 
1912
1916
  }
1913
1917
 
@@ -2126,11 +2130,11 @@ class LDrawLoader extends Loader {
2126
2130
 
2127
2131
  if ( c.isLineSegments ) {
2128
2132
 
2129
- material = material.userData.edgeMaterial;
2133
+ material = loader.edgeMaterialCache.get( material );
2130
2134
 
2131
2135
  if ( c.isConditionalLine ) {
2132
2136
 
2133
- material = material.userData.conditionalEdgeMaterial;
2137
+ material = loader.conditionalEdgeMaterialCache.get( material );
2134
2138
 
2135
2139
  }
2136
2140
 
@@ -2151,7 +2155,7 @@ class LDrawLoader extends Loader {
2151
2155
  getMainEdgeMaterial() {
2152
2156
 
2153
2157
  const mat = this.getMaterial( MAIN_EDGE_COLOUR_CODE );
2154
- return mat ? mat.userData.edgeMaterial : null;
2158
+ return mat ? this.edgeMaterialCache.get( mat ) : null;
2155
2159
 
2156
2160
  }
2157
2161
 
@@ -2236,7 +2240,7 @@ class LDrawLoader extends Loader {
2236
2240
  }
2237
2241
 
2238
2242
  // Get the edge material for this triangle material
2239
- edgeMaterial = edgeMaterial.userData.edgeMaterial;
2243
+ edgeMaterial = this.edgeMaterialCache.get( edgeMaterial );
2240
2244
 
2241
2245
  }
2242
2246
 
@@ -2380,7 +2384,7 @@ class LDrawLoader extends Loader {
2380
2384
  edgeMaterial.name = name + ' - Edge';
2381
2385
 
2382
2386
  // This is the material used for conditional edges
2383
- edgeMaterial.userData.conditionalEdgeMaterial = new LDrawConditionalLineMaterial( {
2387
+ const conditionalEdgeMaterial = new LDrawConditionalLineMaterial( {
2384
2388
 
2385
2389
  fog: true,
2386
2390
  transparent: isTransparent,
@@ -2389,15 +2393,17 @@ class LDrawLoader extends Loader {
2389
2393
  opacity: alpha,
2390
2394
 
2391
2395
  } );
2392
- edgeMaterial.userData.conditionalEdgeMaterial.userData.code = code;
2393
- edgeMaterial.userData.conditionalEdgeMaterial.name = name + ' - Conditional Edge';
2396
+ conditionalEdgeMaterial.userData.code = code;
2397
+ conditionalEdgeMaterial.name = name + ' - Conditional Edge';
2398
+
2399
+ this.conditionalEdgeMaterialCache.set( edgeMaterial, conditionalEdgeMaterial );
2394
2400
 
2395
2401
  }
2396
2402
 
2397
2403
  material.userData.code = code;
2398
2404
  material.name = name;
2399
2405
 
2400
- material.userData.edgeMaterial = edgeMaterial;
2406
+ this.edgeMaterialCache.set( material, edgeMaterial );
2401
2407
 
2402
2408
  this.addMaterial( material );
2403
2409
 
@@ -393,7 +393,7 @@ UTIF.toRGBA = function ( out, type ) {
393
393
  break;
394
394
 
395
395
  default:
396
- console.error( 'THREE.LogLuvLoader: Unsupported texture data type:', type );
396
+ throw new Error( 'THREE.LogLuvLoader: Unsupported texture data type: ' + type );
397
397
 
398
398
  }
399
399
 
@@ -451,7 +451,7 @@ UTIF.toRGBA = function ( out, type ) {
451
451
 
452
452
  } else {
453
453
 
454
- console.log( 'Unsupported Photometric interpretation: ' + intp );
454
+ throw new Error( 'THREE.LogLuvLoader: Unsupported Photometric interpretation: ' + intp );
455
455
 
456
456
  }
457
457
 
@@ -27,6 +27,7 @@ import {
27
27
  Skeleton,
28
28
  SkinnedMesh,
29
29
  SrcAlphaFactor,
30
+ SRGBColorSpace,
30
31
  TextureLoader,
31
32
  Uint16BufferAttribute,
32
33
  Vector3,
@@ -1133,17 +1134,18 @@ class MaterialBuilder {
1133
1134
  * MMDToonMaterial doesn't have ambient. Set it to emissive instead.
1134
1135
  * It'll be too bright if material has map texture so using coef 0.2.
1135
1136
  */
1136
- params.diffuse = new Color().fromArray( material.diffuse );
1137
+ params.diffuse = new Color().setRGB(
1138
+ material.diffuse[ 0 ],
1139
+ material.diffuse[ 1 ],
1140
+ material.diffuse[ 2 ],
1141
+ SRGBColorSpace
1142
+ );
1137
1143
  params.opacity = material.diffuse[ 3 ];
1138
- params.specular = new Color().fromArray( material.specular );
1144
+ params.specular = new Color().setRGB( ...material.specular, SRGBColorSpace );
1139
1145
  params.shininess = material.shininess;
1140
- params.emissive = new Color().fromArray( material.ambient );
1146
+ params.emissive = new Color().setRGB( ...material.ambient, SRGBColorSpace );
1141
1147
  params.transparent = params.opacity !== 1.0;
1142
1148
 
1143
- params.diffuse.convertSRGBToLinear();
1144
- params.specular.convertSRGBToLinear();
1145
- params.emissive.convertSRGBToLinear();
1146
-
1147
1149
  //
1148
1150
 
1149
1151
  params.fog = true;
@@ -1452,6 +1454,7 @@ class MaterialBuilder {
1452
1454
  t.flipY = false;
1453
1455
  t.wrapS = RepeatWrapping;
1454
1456
  t.wrapT = RepeatWrapping;
1457
+ t.colorSpace = SRGBColorSpace;
1455
1458
 
1456
1459
  for ( let i = 0; i < texture.readyCallbacks.length; i ++ ) {
1457
1460
 
@@ -25,10 +25,6 @@ class RGBELoader extends DataTextureLoader {
25
25
  parse( buffer ) {
26
26
 
27
27
  const
28
- /* return codes for rgbe routines */
29
- //RGBE_RETURN_SUCCESS = 0,
30
- RGBE_RETURN_FAILURE = - 1,
31
-
32
28
  /* default error routine. change this to change error handling */
33
29
  rgbe_read_error = 1,
34
30
  rgbe_write_error = 2,
@@ -38,19 +34,14 @@ class RGBELoader extends DataTextureLoader {
38
34
 
39
35
  switch ( rgbe_error_code ) {
40
36
 
41
- case rgbe_read_error: console.error( 'THREE.RGBELoader Read Error: ' + ( msg || '' ) );
42
- break;
43
- case rgbe_write_error: console.error( 'THREE.RGBELoader Write Error: ' + ( msg || '' ) );
44
- break;
45
- case rgbe_format_error: console.error( 'THREE.RGBELoader Bad File Format: ' + ( msg || '' ) );
46
- break;
37
+ case rgbe_read_error: throw new Error( 'THREE.RGBELoader: Read Error: ' + ( msg || '' ) );
38
+ case rgbe_write_error: throw new Error( 'THREE.RGBELoader: Write Error: ' + ( msg || '' ) );
39
+ case rgbe_format_error: throw new Error( 'THREE.RGBELoader: Bad File Format: ' + ( msg || '' ) );
47
40
  default:
48
- case rgbe_memory_error: console.error( 'THREE.RGBELoader: Error: ' + ( msg || '' ) );
41
+ case rgbe_memory_error: throw new Error( 'THREE.RGBELoader: Memory Error: ' + ( msg || '' ) );
49
42
 
50
43
  }
51
44
 
52
- return RGBE_RETURN_FAILURE;
53
-
54
45
  },
55
46
 
56
47
  /* offsets to red, green, and blue components in a data (float) pixel */
@@ -138,14 +129,14 @@ class RGBELoader extends DataTextureLoader {
138
129
 
139
130
  if ( buffer.pos >= buffer.byteLength || ! ( line = fgets( buffer ) ) ) {
140
131
 
141
- return rgbe_error( rgbe_read_error, 'no header found' );
132
+ rgbe_error( rgbe_read_error, 'no header found' );
142
133
 
143
134
  }
144
135
 
145
136
  /* if you want to require the magic token then uncomment the next line */
146
137
  if ( ! ( match = line.match( magic_token_re ) ) ) {
147
138
 
148
- return rgbe_error( rgbe_format_error, 'bad initial token' );
139
+ rgbe_error( rgbe_format_error, 'bad initial token' );
149
140
 
150
141
  }
151
142
 
@@ -199,13 +190,13 @@ class RGBELoader extends DataTextureLoader {
199
190
 
200
191
  if ( ! ( header.valid & RGBE_VALID_FORMAT ) ) {
201
192
 
202
- return rgbe_error( rgbe_format_error, 'missing format specifier' );
193
+ rgbe_error( rgbe_format_error, 'missing format specifier' );
203
194
 
204
195
  }
205
196
 
206
197
  if ( ! ( header.valid & RGBE_VALID_DIMENSIONS ) ) {
207
198
 
208
- return rgbe_error( rgbe_format_error, 'missing image size specifier' );
199
+ rgbe_error( rgbe_format_error, 'missing image size specifier' );
209
200
 
210
201
  }
211
202
 
@@ -231,7 +222,7 @@ class RGBELoader extends DataTextureLoader {
231
222
 
232
223
  if ( scanline_width !== ( ( buffer[ 2 ] << 8 ) | buffer[ 3 ] ) ) {
233
224
 
234
- return rgbe_error( rgbe_format_error, 'wrong scanline width' );
225
+ rgbe_error( rgbe_format_error, 'wrong scanline width' );
235
226
 
236
227
  }
237
228
 
@@ -239,7 +230,7 @@ class RGBELoader extends DataTextureLoader {
239
230
 
240
231
  if ( ! data_rgba.length ) {
241
232
 
242
- return rgbe_error( rgbe_memory_error, 'unable to allocate buffer space' );
233
+ rgbe_error( rgbe_memory_error, 'unable to allocate buffer space' );
243
234
 
244
235
  }
245
236
 
@@ -255,7 +246,7 @@ class RGBELoader extends DataTextureLoader {
255
246
 
256
247
  if ( pos + 4 > buffer.byteLength ) {
257
248
 
258
- return rgbe_error( rgbe_read_error );
249
+ rgbe_error( rgbe_read_error );
259
250
 
260
251
  }
261
252
 
@@ -266,7 +257,7 @@ class RGBELoader extends DataTextureLoader {
266
257
 
267
258
  if ( ( 2 != rgbeStart[ 0 ] ) || ( 2 != rgbeStart[ 1 ] ) || ( ( ( rgbeStart[ 2 ] << 8 ) | rgbeStart[ 3 ] ) != scanline_width ) ) {
268
259
 
269
- return rgbe_error( rgbe_format_error, 'bad rgbe scanline format' );
260
+ rgbe_error( rgbe_format_error, 'bad rgbe scanline format' );
270
261
 
271
262
  }
272
263
 
@@ -282,7 +273,7 @@ class RGBELoader extends DataTextureLoader {
282
273
 
283
274
  if ( ( 0 === count ) || ( ptr + count > ptr_end ) ) {
284
275
 
285
- return rgbe_error( rgbe_format_error, 'bad scanline data' );
276
+ rgbe_error( rgbe_format_error, 'bad scanline data' );
286
277
 
287
278
  }
288
279
 
@@ -362,70 +353,61 @@ class RGBELoader extends DataTextureLoader {
362
353
  byteArray.pos = 0;
363
354
  const rgbe_header_info = RGBE_ReadHeader( byteArray );
364
355
 
365
- if ( RGBE_RETURN_FAILURE !== rgbe_header_info ) {
366
-
367
- const w = rgbe_header_info.width,
368
- h = rgbe_header_info.height,
369
- image_rgba_data = RGBE_ReadPixels_RLE( byteArray.subarray( byteArray.pos ), w, h );
370
-
371
- if ( RGBE_RETURN_FAILURE !== image_rgba_data ) {
372
-
373
- let data, type;
374
- let numElements;
375
-
376
- switch ( this.type ) {
377
-
378
- case FloatType:
356
+ const w = rgbe_header_info.width,
357
+ h = rgbe_header_info.height,
358
+ image_rgba_data = RGBE_ReadPixels_RLE( byteArray.subarray( byteArray.pos ), w, h );
379
359
 
380
- numElements = image_rgba_data.length / 4;
381
- const floatArray = new Float32Array( numElements * 4 );
382
360
 
383
- for ( let j = 0; j < numElements; j ++ ) {
361
+ let data, type;
362
+ let numElements;
384
363
 
385
- RGBEByteToRGBFloat( image_rgba_data, j * 4, floatArray, j * 4 );
364
+ switch ( this.type ) {
386
365
 
387
- }
366
+ case FloatType:
388
367
 
389
- data = floatArray;
390
- type = FloatType;
391
- break;
368
+ numElements = image_rgba_data.length / 4;
369
+ const floatArray = new Float32Array( numElements * 4 );
392
370
 
393
- case HalfFloatType:
371
+ for ( let j = 0; j < numElements; j ++ ) {
394
372
 
395
- numElements = image_rgba_data.length / 4;
396
- const halfArray = new Uint16Array( numElements * 4 );
373
+ RGBEByteToRGBFloat( image_rgba_data, j * 4, floatArray, j * 4 );
397
374
 
398
- for ( let j = 0; j < numElements; j ++ ) {
375
+ }
399
376
 
400
- RGBEByteToRGBHalf( image_rgba_data, j * 4, halfArray, j * 4 );
377
+ data = floatArray;
378
+ type = FloatType;
379
+ break;
401
380
 
402
- }
381
+ case HalfFloatType:
403
382
 
404
- data = halfArray;
405
- type = HalfFloatType;
406
- break;
383
+ numElements = image_rgba_data.length / 4;
384
+ const halfArray = new Uint16Array( numElements * 4 );
407
385
 
408
- default:
386
+ for ( let j = 0; j < numElements; j ++ ) {
409
387
 
410
- console.error( 'THREE.RGBELoader: unsupported type: ', this.type );
411
- break;
388
+ RGBEByteToRGBHalf( image_rgba_data, j * 4, halfArray, j * 4 );
412
389
 
413
390
  }
414
391
 
415
- return {
416
- width: w, height: h,
417
- data: data,
418
- header: rgbe_header_info.string,
419
- gamma: rgbe_header_info.gamma,
420
- exposure: rgbe_header_info.exposure,
421
- type: type
422
- };
392
+ data = halfArray;
393
+ type = HalfFloatType;
394
+ break;
423
395
 
424
- }
396
+ default:
397
+
398
+ throw new Error( 'THREE.RGBELoader: Unsupported type: ' + this.type );
399
+ break;
425
400
 
426
401
  }
427
402
 
428
- return null;
403
+ return {
404
+ width: w, height: h,
405
+ data: data,
406
+ header: rgbe_header_info.string,
407
+ gamma: rgbe_header_info.gamma,
408
+ exposure: rgbe_header_info.exposure,
409
+ type: type
410
+ };
429
411
 
430
412
  }
431
413
 
@@ -274,6 +274,7 @@ class STLLoader extends Loader {
274
274
  const geometry = new BufferGeometry();
275
275
  const patternSolid = /solid([\s\S]*?)endsolid/g;
276
276
  const patternFace = /facet([\s\S]*?)endfacet/g;
277
+ const patternName = /solid\s(.+)/;
277
278
  let faceCounter = 0;
278
279
 
279
280
  const patternFloat = /[\s]+([+-]?(?:\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?)/.source;
@@ -282,6 +283,7 @@ class STLLoader extends Loader {
282
283
 
283
284
  const vertices = [];
284
285
  const normals = [];
286
+ const groupNames = [];
285
287
 
286
288
  const normal = new Vector3();
287
289
 
@@ -297,6 +299,9 @@ class STLLoader extends Loader {
297
299
 
298
300
  const solid = result[ 0 ];
299
301
 
302
+ const name = ( result = patternName.exec( solid ) ) !== null ? result[ 1 ] : '';
303
+ groupNames.push( name );
304
+
300
305
  while ( ( result = patternFace.exec( solid ) ) !== null ) {
301
306
 
302
307
  let vertexCountPerFace = 0;
@@ -345,6 +350,8 @@ class STLLoader extends Loader {
345
350
  const start = startVertex;
346
351
  const count = endVertex - startVertex;
347
352
 
353
+ geometry.userData.groupNames = groupNames;
354
+
348
355
  geometry.addGroup( start, count, groupCount );
349
356
  groupCount ++;
350
357