super-three 0.133.5 → 0.137.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 (444) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +37132 -0
  4. package/build/three.js +2337 -2017
  5. package/build/three.min.js +2 -2
  6. package/build/three.module.js +6036 -5378
  7. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  8. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  9. package/examples/fonts/open-sans/open-sans.css +9 -0
  10. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  11. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
  12. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  13. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  14. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  15. package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
  16. package/examples/js/animation/CCDIKSolver.js +0 -1
  17. package/examples/js/animation/MMDAnimationHelper.js +3 -1
  18. package/examples/js/animation/MMDPhysics.js +2 -4
  19. package/examples/js/cameras/CinematicCamera.js +2 -7
  20. package/examples/js/controls/ArcballControls.js +99 -72
  21. package/examples/js/controls/DragControls.js +7 -0
  22. package/examples/js/controls/OrbitControls.js +5 -36
  23. package/examples/js/controls/TrackballControls.js +3 -2
  24. package/examples/js/controls/TransformControls.js +24 -1
  25. package/examples/js/controls/experimental/CameraControls.js +6 -2
  26. package/examples/js/csm/CSM.js +2 -2
  27. package/examples/js/csm/CSMFrustum.js +133 -0
  28. package/examples/js/curves/CurveExtras.js +0 -2
  29. package/examples/js/effects/AsciiEffect.js +2 -9
  30. package/examples/js/exporters/GLTFExporter.js +230 -103
  31. package/examples/js/exporters/MMDExporter.js +1 -1
  32. package/examples/js/exporters/USDZExporter.js +45 -26
  33. package/examples/js/geometries/ConvexGeometry.js +1 -1
  34. package/examples/js/geometries/TeapotGeometry.js +0 -1
  35. package/examples/js/geometries/TextGeometry.js +12 -10
  36. package/examples/js/interactive/HTMLMesh.js +14 -2
  37. package/examples/js/interactive/SelectionBox.js +2 -0
  38. package/examples/js/interactive/SelectionHelper.js +22 -7
  39. package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
  40. package/examples/js/lines/LineMaterial.js +58 -20
  41. package/examples/js/lines/LineSegments2.js +29 -24
  42. package/examples/js/loaders/3DMLoader.js +24 -11
  43. package/examples/js/loaders/3MFLoader.js +2 -2
  44. package/examples/js/loaders/AMFLoader.js +0 -2
  45. package/examples/js/loaders/BasisTextureLoader.js +1 -0
  46. package/examples/js/loaders/ColladaLoader.js +61 -4
  47. package/examples/js/loaders/EXRLoader.js +215 -275
  48. package/examples/js/loaders/FBXLoader.js +4 -5
  49. package/examples/js/loaders/GLTFLoader.js +98 -35
  50. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -10
  51. package/examples/js/loaders/KTX2Loader.js +23 -2
  52. package/examples/js/loaders/KTXLoader.js +1 -1
  53. package/examples/js/loaders/LDrawLoader.js +1353 -969
  54. package/examples/js/loaders/LUT3dlLoader.js +19 -10
  55. package/examples/js/loaders/LUTCubeLoader.js +5 -4
  56. package/examples/js/loaders/LWOLoader.js +8 -6
  57. package/examples/js/loaders/LogLuvLoader.js +766 -0
  58. package/examples/js/loaders/MD2Loader.js +5 -5
  59. package/examples/js/loaders/MMDLoader.js +0 -1
  60. package/examples/js/loaders/MTLLoader.js +10 -3
  61. package/examples/js/loaders/NRRDLoader.js +9 -2
  62. package/examples/js/loaders/OBJLoader.js +0 -2
  63. package/examples/js/loaders/PCDLoader.js +2 -2
  64. package/examples/js/loaders/PLYLoader.js +33 -8
  65. package/examples/js/loaders/RGBELoader.js +8 -22
  66. package/examples/js/loaders/RGBMLoader.js +56 -6
  67. package/examples/js/loaders/STLLoader.js +1 -1
  68. package/examples/js/loaders/SVGLoader.js +14 -7
  69. package/examples/js/loaders/TDSLoader.js +237 -271
  70. package/examples/js/loaders/VOXLoader.js +1 -0
  71. package/examples/js/loaders/VRMLLoader.js +11 -22
  72. package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
  73. package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
  74. package/examples/js/math/ConvexHull.js +7 -13
  75. package/examples/js/math/ImprovedNoise.js +1 -1
  76. package/examples/js/misc/GPUComputationRenderer.js +3 -1
  77. package/examples/js/misc/Volume.js +2 -2
  78. package/examples/js/modifiers/CurveModifier.js +8 -7
  79. package/examples/js/modifiers/EdgeSplitModifier.js +0 -6
  80. package/examples/js/modifiers/SimplifyModifier.js +0 -10
  81. package/examples/js/objects/Lensflare.js +2 -10
  82. package/examples/js/objects/MarchingCubes.js +42 -128
  83. package/examples/js/objects/Reflector.js +8 -13
  84. package/examples/js/objects/ReflectorForSSRPass.js +0 -10
  85. package/examples/js/objects/Refractor.js +8 -13
  86. package/examples/js/objects/Sky.js +1 -1
  87. package/examples/js/objects/Water.js +3 -15
  88. package/examples/js/objects/Water2.js +4 -7
  89. package/examples/js/postprocessing/GlitchPass.js +6 -5
  90. package/examples/js/postprocessing/OutlinePass.js +1 -5
  91. package/examples/js/postprocessing/SMAAPass.js +2 -9
  92. package/examples/js/postprocessing/SSAOPass.js +10 -21
  93. package/examples/js/postprocessing/SavePass.js +1 -5
  94. package/examples/js/renderers/CSS2DRenderer.js +29 -23
  95. package/examples/js/renderers/CSS3DRenderer.js +41 -36
  96. package/examples/js/shaders/ConvolutionShader.js +0 -1
  97. package/examples/js/shaders/DigitalGlitch.js +3 -3
  98. package/examples/js/shaders/FXAAShader.js +1 -1
  99. package/examples/js/shaders/FilmShader.js +1 -1
  100. package/examples/js/shaders/GammaCorrectionShader.js +1 -1
  101. package/examples/js/shaders/HorizontalBlurShader.js +1 -2
  102. package/examples/js/shaders/MMDToonShader.js +0 -1
  103. package/examples/js/shaders/SSAOShader.js +1 -1
  104. package/examples/js/shaders/SSRShader.js +1 -1
  105. package/examples/js/shaders/SSRrShader.js +1 -1
  106. package/examples/js/shaders/VerticalBlurShader.js +1 -2
  107. package/examples/js/utils/GeometryUtils.js +1 -1
  108. package/examples/js/utils/LDrawUtils.js +182 -0
  109. package/examples/jsm/animation/CCDIKSolver.js +0 -1
  110. package/examples/jsm/animation/MMDPhysics.js +1 -3
  111. package/examples/jsm/cameras/CinematicCamera.js +2 -5
  112. package/examples/jsm/{WebGL.js → capabilities/WebGL.js} +2 -2
  113. package/examples/jsm/{renderers/webgpu → capabilities}/WebGPU.js +1 -1
  114. package/examples/jsm/controls/ArcballControls.js +80 -77
  115. package/examples/jsm/controls/DragControls.js +7 -0
  116. package/examples/jsm/controls/OrbitControls.js +9 -51
  117. package/examples/jsm/controls/TrackballControls.js +1 -1
  118. package/examples/jsm/controls/TransformControls.js +24 -1
  119. package/examples/jsm/csm/CSM.js +3 -3
  120. package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
  121. package/examples/jsm/curves/CurveExtras.js +0 -2
  122. package/examples/jsm/effects/AsciiEffect.js +2 -9
  123. package/examples/jsm/exporters/GLTFExporter.js +249 -111
  124. package/examples/jsm/exporters/MMDExporter.js +1 -1
  125. package/examples/jsm/exporters/USDZExporter.js +47 -26
  126. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  127. package/examples/jsm/geometries/TeapotGeometry.js +0 -1
  128. package/examples/jsm/geometries/TextGeometry.js +13 -13
  129. package/examples/jsm/interactive/HTMLMesh.js +16 -2
  130. package/examples/jsm/interactive/SelectionBox.js +1 -0
  131. package/examples/jsm/interactive/SelectionHelper.js +19 -7
  132. package/examples/jsm/libs/flow.module.js +4099 -0
  133. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  134. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  135. package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
  136. package/examples/jsm/lines/LineMaterial.js +59 -23
  137. package/examples/jsm/lines/LineSegments2.js +22 -18
  138. package/examples/jsm/loaders/3DMLoader.js +18 -12
  139. package/examples/jsm/loaders/3MFLoader.js +2 -2
  140. package/examples/jsm/loaders/AMFLoader.js +0 -2
  141. package/examples/jsm/loaders/BasisTextureLoader.js +7 -0
  142. package/examples/jsm/loaders/ColladaLoader.js +61 -4
  143. package/examples/jsm/loaders/EXRLoader.js +213 -309
  144. package/examples/jsm/loaders/FBXLoader.js +4 -5
  145. package/examples/jsm/loaders/GLTFLoader.js +102 -40
  146. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -17
  147. package/examples/jsm/loaders/KTX2Loader.js +30 -2
  148. package/examples/jsm/loaders/KTXLoader.js +1 -1
  149. package/examples/jsm/loaders/LDrawLoader.js +1344 -991
  150. package/examples/jsm/loaders/LUT3dlLoader.js +19 -12
  151. package/examples/jsm/loaders/LUTCubeLoader.js +5 -5
  152. package/examples/jsm/loaders/LWOLoader.js +8 -6
  153. package/examples/jsm/loaders/LogLuvLoader.js +606 -0
  154. package/examples/jsm/loaders/MD2Loader.js +5 -5
  155. package/examples/jsm/loaders/MMDLoader.js +0 -1
  156. package/examples/jsm/loaders/MTLLoader.js +11 -4
  157. package/examples/jsm/loaders/NRRDLoader.js +10 -2
  158. package/examples/jsm/loaders/OBJLoader.js +0 -2
  159. package/examples/jsm/loaders/PCDLoader.js +2 -2
  160. package/examples/jsm/loaders/PLYLoader.js +34 -8
  161. package/examples/jsm/loaders/RGBELoader.js +7 -28
  162. package/examples/jsm/loaders/RGBMLoader.js +62 -8
  163. package/examples/jsm/loaders/STLLoader.js +1 -1
  164. package/examples/jsm/loaders/SVGLoader.js +18 -8
  165. package/examples/jsm/loaders/TDSLoader.js +236 -275
  166. package/examples/jsm/loaders/VOXLoader.js +1 -0
  167. package/examples/jsm/loaders/VRMLLoader.js +11 -24
  168. package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
  169. package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
  170. package/examples/jsm/math/ConvexHull.js +7 -13
  171. package/examples/jsm/math/ImprovedNoise.js +1 -1
  172. package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
  173. package/examples/jsm/misc/Volume.js +2 -2
  174. package/examples/jsm/modifiers/CurveModifier.js +9 -8
  175. package/examples/jsm/modifiers/EdgeSplitModifier.js +0 -6
  176. package/examples/jsm/modifiers/SimplifyModifier.js +0 -10
  177. package/examples/jsm/node-editor/NodeEditor.js +709 -0
  178. package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
  179. package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
  180. package/examples/jsm/node-editor/accessors/UVEditor.js +25 -0
  181. package/examples/jsm/node-editor/core/BaseNode.js +83 -0
  182. package/examples/jsm/node-editor/display/BlendEditor.js +44 -0
  183. package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
  184. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
  185. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
  186. package/examples/jsm/node-editor/examples/rim.json +1 -0
  187. package/examples/jsm/node-editor/inputs/ColorEditor.js +95 -0
  188. package/examples/jsm/node-editor/inputs/FloatEditor.js +23 -0
  189. package/examples/jsm/node-editor/inputs/SliderEditor.js +67 -0
  190. package/examples/jsm/node-editor/inputs/Vector2Editor.js +27 -0
  191. package/examples/jsm/node-editor/inputs/Vector3Editor.js +29 -0
  192. package/examples/jsm/node-editor/inputs/Vector4Editor.js +36 -0
  193. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +87 -0
  194. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +97 -0
  195. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +111 -0
  196. package/examples/jsm/node-editor/math/AngleEditor.js +39 -0
  197. package/examples/jsm/node-editor/math/DotEditor.js +35 -0
  198. package/examples/jsm/node-editor/math/InvertEditor.js +39 -0
  199. package/examples/jsm/node-editor/math/LimiterEditor.js +49 -0
  200. package/examples/jsm/node-editor/math/NormalizeEditor.js +27 -0
  201. package/examples/jsm/node-editor/math/OperatorEditor.js +51 -0
  202. package/examples/jsm/node-editor/math/PowerEditor.js +35 -0
  203. package/examples/jsm/node-editor/math/TrigonometryEditor.js +44 -0
  204. package/examples/jsm/node-editor/procedural/CheckerEditor.js +27 -0
  205. package/examples/jsm/node-editor/scene/MeshEditor.js +99 -0
  206. package/examples/jsm/node-editor/scene/Object3DEditor.js +160 -0
  207. package/examples/jsm/node-editor/scene/PointsEditor.js +99 -0
  208. package/examples/jsm/node-editor/utils/JoinEditor.js +58 -0
  209. package/examples/jsm/node-editor/utils/OscillatorEditor.js +43 -0
  210. package/examples/jsm/node-editor/utils/SplitEditor.js +39 -0
  211. package/examples/jsm/node-editor/utils/TimerEditor.js +58 -0
  212. package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
  213. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
  214. package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
  215. package/examples/jsm/nodes/math/MathNode.js +12 -0
  216. package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
  217. package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
  218. package/examples/jsm/nodes/utils/ColorSpaceNode.js +5 -177
  219. package/examples/jsm/objects/Lensflare.js +5 -16
  220. package/examples/jsm/objects/MarchingCubes.js +46 -152
  221. package/examples/jsm/objects/Reflector.js +8 -16
  222. package/examples/jsm/objects/ReflectorForSSRPass.js +0 -12
  223. package/examples/jsm/objects/Refractor.js +8 -16
  224. package/examples/jsm/objects/Sky.js +1 -1
  225. package/examples/jsm/objects/Water.js +3 -18
  226. package/examples/jsm/objects/Water2.js +4 -8
  227. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
  228. package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
  229. package/examples/jsm/postprocessing/BloomPass.js +1 -1
  230. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  231. package/examples/jsm/postprocessing/ClearPass.js +1 -1
  232. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
  233. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  234. package/examples/jsm/postprocessing/EffectComposer.js +3 -3
  235. package/examples/jsm/postprocessing/FilmPass.js +1 -1
  236. package/examples/jsm/postprocessing/GlitchPass.js +10 -7
  237. package/examples/jsm/postprocessing/HalftonePass.js +1 -1
  238. package/examples/jsm/postprocessing/MaskPass.js +1 -1
  239. package/examples/jsm/postprocessing/OutlinePass.js +2 -5
  240. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  241. package/examples/jsm/postprocessing/SAOPass.js +2 -2
  242. package/examples/jsm/postprocessing/SMAAPass.js +3 -12
  243. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
  244. package/examples/jsm/postprocessing/SSAOPass.js +15 -26
  245. package/examples/jsm/postprocessing/SSRPass.js +1 -1
  246. package/examples/jsm/postprocessing/SSRrPass.js +1 -1
  247. package/examples/jsm/postprocessing/SavePass.js +2 -4
  248. package/examples/jsm/postprocessing/ShaderPass.js +1 -1
  249. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  250. package/examples/jsm/postprocessing/TexturePass.js +1 -1
  251. package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
  252. package/examples/jsm/renderers/CSS2DRenderer.js +29 -23
  253. package/examples/jsm/renderers/CSS3DRenderer.js +41 -34
  254. package/examples/jsm/renderers/nodes/Nodes.js +17 -13
  255. package/examples/jsm/renderers/nodes/ShaderNode.js +229 -49
  256. package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
  257. package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
  258. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
  259. package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
  260. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
  261. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
  262. package/examples/jsm/renderers/nodes/accessors/UVNode.js +5 -3
  263. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
  264. package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
  265. package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
  266. package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
  267. package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
  268. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
  269. package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
  270. package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
  271. package/examples/jsm/renderers/nodes/core/Node.js +32 -10
  272. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +147 -128
  273. package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
  274. package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
  275. package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
  276. package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
  277. package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
  278. package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
  279. package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
  280. package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
  281. package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
  282. package/examples/jsm/renderers/nodes/core/constants.js +2 -0
  283. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +43 -63
  284. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
  285. package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
  286. package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
  287. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
  288. package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
  289. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +13 -10
  290. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
  291. package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
  292. package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
  293. package/examples/jsm/renderers/nodes/math/MathNode.js +91 -37
  294. package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
  295. package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
  296. package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
  297. package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
  298. package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
  299. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
  300. package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
  301. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
  302. package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
  303. package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
  304. package/examples/jsm/renderers/nodes/utils/SplitNode.js +33 -8
  305. package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
  306. package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
  307. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
  308. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
  309. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
  310. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
  311. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
  312. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
  313. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
  314. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  315. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
  316. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
  317. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
  318. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +13 -31
  319. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
  320. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +35 -29
  321. package/examples/jsm/renderers/webgpu/constants.js +2 -2
  322. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +459 -95
  323. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  324. package/examples/jsm/shaders/ConvolutionShader.js +0 -1
  325. package/examples/jsm/shaders/DigitalGlitch.js +3 -3
  326. package/examples/jsm/shaders/FXAAShader.js +1 -1
  327. package/examples/jsm/shaders/FilmShader.js +1 -1
  328. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  329. package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
  330. package/examples/jsm/shaders/MMDToonShader.js +0 -1
  331. package/examples/jsm/shaders/SSAOShader.js +1 -1
  332. package/examples/jsm/shaders/SSRShader.js +1 -1
  333. package/examples/jsm/shaders/SSRrShader.js +1 -1
  334. package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
  335. package/examples/jsm/utils/GeometryUtils.js +1 -1
  336. package/examples/jsm/utils/LDrawUtils.js +202 -0
  337. package/examples/jsm/utils/WorkerPool.js +11 -11
  338. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
  339. package/examples/jsm/webxr/VRButton.js +24 -0
  340. package/examples/jsm/webxr/XREstimatedLight.js +2 -0
  341. package/package.json +38 -22
  342. package/src/Three.Legacy.js +18 -0
  343. package/src/Three.js +1 -3
  344. package/src/animation/AnimationMixer.js +1 -0
  345. package/src/cameras/CubeCamera.js +2 -0
  346. package/src/cameras/StereoCamera.js +8 -7
  347. package/src/constants.js +3 -25
  348. package/src/core/BufferGeometry.js +2 -2
  349. package/src/core/Layers.js +7 -1
  350. package/src/core/Object3D.js +3 -1
  351. package/src/extras/ImageUtils.js +63 -0
  352. package/src/extras/PMREMGenerator.js +49 -185
  353. package/src/extras/core/Interpolations.js +1 -1
  354. package/src/geometries/LatheGeometry.js +71 -48
  355. package/src/helpers/CameraHelper.js +1 -1
  356. package/src/loaders/FileLoader.js +110 -139
  357. package/src/loaders/ImageLoader.js +9 -4
  358. package/src/loaders/LoaderUtils.js +26 -0
  359. package/src/loaders/MaterialLoader.js +8 -5
  360. package/src/loaders/ObjectLoader.js +2 -0
  361. package/src/materials/Material.js +8 -8
  362. package/src/materials/MeshPhysicalMaterial.js +20 -14
  363. package/src/math/Box3.js +24 -10
  364. package/src/math/Color.js +1 -39
  365. package/src/math/MathUtils.js +5 -16
  366. package/src/math/Quaternion.js +1 -1
  367. package/src/math/Ray.js +2 -2
  368. package/src/math/Sphere.js +10 -1
  369. package/src/objects/Skeleton.js +1 -0
  370. package/src/renderers/WebGLCubeRenderTarget.js +0 -2
  371. package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
  372. package/src/renderers/WebGLRenderTarget.js +4 -1
  373. package/src/renderers/WebGLRenderer.js +109 -202
  374. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
  375. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
  376. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
  377. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +0 -2
  378. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -78
  379. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  380. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -2
  381. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
  382. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
  383. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  384. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
  385. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
  386. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +10 -3
  387. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +1 -2
  388. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +1 -1
  389. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +2 -2
  390. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  391. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  392. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +9 -8
  393. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -3
  394. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -3
  395. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -1
  396. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -2
  397. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
  398. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
  399. package/src/renderers/shaders/ShaderLib.js +8 -6
  400. package/src/renderers/shaders/UniformsLib.js +1 -2
  401. package/src/renderers/webgl/WebGLBackground.js +2 -2
  402. package/src/renderers/webgl/WebGLCapabilities.js +0 -2
  403. package/src/renderers/webgl/WebGLCubeMaps.js +0 -4
  404. package/src/renderers/webgl/WebGLCubeUVMaps.js +29 -16
  405. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  406. package/src/renderers/webgl/WebGLGeometries.js +2 -2
  407. package/src/renderers/webgl/WebGLMaterials.js +27 -15
  408. package/src/renderers/webgl/WebGLMorphtargets.js +13 -0
  409. package/src/renderers/webgl/WebGLProgram.js +12 -37
  410. package/src/renderers/webgl/WebGLPrograms.js +192 -70
  411. package/src/renderers/webgl/WebGLRenderLists.js +4 -14
  412. package/src/renderers/webgl/WebGLShaderCache.js +120 -0
  413. package/src/renderers/webgl/WebGLShadowMap.js +14 -5
  414. package/src/renderers/webgl/WebGLState.js +159 -19
  415. package/src/renderers/webgl/WebGLTextures.js +449 -87
  416. package/src/renderers/webgl/WebGLUniforms.js +45 -1
  417. package/src/renderers/webgl/WebGLUtils.js +86 -30
  418. package/src/renderers/webxr/WebXRManager.js +77 -107
  419. package/src/scenes/Scene.js +1 -1
  420. package/src/textures/DataTexture.js +0 -2
  421. package/src/textures/DataTexture2DArray.js +0 -2
  422. package/src/textures/DataTexture3D.js +0 -2
  423. package/src/textures/FramebufferTexture.js +25 -0
  424. package/src/textures/Texture.js +8 -1
  425. package/src/textures/VideoTexture.js +1 -3
  426. package/src/utils.js +15 -1
  427. package/examples/js/WebGL.js +0 -90
  428. package/examples/js/controls/DeviceOrientationControls.js +0 -147
  429. package/examples/js/libs/dat.gui.min.js +0 -14
  430. package/examples/js/utils/RoughnessMipmapper.js +0 -278
  431. package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
  432. package/examples/jsm/libs/dat.gui.module.js +0 -3575
  433. package/examples/jsm/libs/glslang.js +0 -78
  434. package/examples/jsm/libs/glslang.wasm +0 -0
  435. package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
  436. package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
  437. package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
  438. package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
  439. package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
  440. package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
  441. package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
  442. package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
  443. package/examples/jsm/utils/RoughnessMipmapper.js +0 -300
  444. package/src/extras/objects/ImmediateRenderObject.js +0 -31
@@ -208,7 +208,11 @@ class NRRDLoader extends Loader {
208
208
  if ( ! headerObject.vectors ) {
209
209
 
210
210
  //if no space direction is set, let's use the identity
211
- headerObject.vectors = [ new Vector3( 1, 0, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ) ];
211
+ headerObject.vectors = [ ];
212
+ headerObject.vectors.push( [ 1, 0, 0 ] );
213
+ headerObject.vectors.push( [ 0, 1, 0 ] );
214
+ headerObject.vectors.push( [ 0, 0, 1 ] );
215
+
212
216
  //apply spacing if defined
213
217
  if ( headerObject.spacings ) {
214
218
 
@@ -216,7 +220,11 @@ class NRRDLoader extends Loader {
216
220
 
217
221
  if ( ! isNaN( headerObject.spacings[ i ] ) ) {
218
222
 
219
- headerObject.vectors[ i ].multiplyScalar( headerObject.spacings[ i ] );
223
+ for ( let j = 0; j <= 2; j ++ ) {
224
+
225
+ headerObject.vectors[ i ][ j ] *= headerObject.spacings[ i ];
226
+
227
+ }
220
228
 
221
229
  }
222
230
 
@@ -684,8 +684,6 @@ class OBJLoader extends Loader {
684
684
 
685
685
  /*
686
686
  * http://paulbourke.net/dataformats/obj/
687
- * or
688
- * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf
689
687
  *
690
688
  * From chapter "Grouping" Syntax explanation "s group_number":
691
689
  * "group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.
@@ -303,9 +303,9 @@ class PCDLoader extends Loader {
303
303
 
304
304
  if ( offset.rgb !== undefined ) {
305
305
 
306
- color.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ 3 ] * i + 0 ) / 255.0 );
307
- color.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ 3 ] * i + 1 ) / 255.0 );
308
306
  color.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ 3 ] * i + 2 ) / 255.0 );
307
+ color.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ 3 ] * i + 1 ) / 255.0 );
308
+ color.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ 3 ] * i + 0 ) / 255.0 );
309
309
 
310
310
  }
311
311
 
@@ -88,7 +88,7 @@ class PLYLoader extends Loader {
88
88
 
89
89
  function parseHeader( data ) {
90
90
 
91
- const patternHeader = /ply([\s\S]*)end_header\r?\n/;
91
+ const patternHeader = /^ply([\s\S]*)end_header\r?\n/;
92
92
  let headerText = '';
93
93
  let headerLength = 0;
94
94
  const result = patternHeader.exec( data );
@@ -363,25 +363,51 @@ class PLYLoader extends Loader {
363
363
 
364
364
  function handleElement( buffer, elementName, element ) {
365
365
 
366
+ function findAttrName( names ) {
367
+
368
+ for ( let i = 0, l = names.length; i < l; i ++ ) {
369
+
370
+ const name = names[ i ];
371
+
372
+ if ( name in element ) return name;
373
+
374
+ }
375
+
376
+ return null;
377
+
378
+ }
379
+
380
+ const attrX = findAttrName( [ 'x', 'px', 'posx' ] ) || 'x';
381
+ const attrY = findAttrName( [ 'y', 'py', 'posy' ] ) || 'y';
382
+ const attrZ = findAttrName( [ 'z', 'pz', 'posz' ] ) || 'z';
383
+ const attrNX = findAttrName( [ 'nx', 'normalx' ] );
384
+ const attrNY = findAttrName( [ 'ny', 'normaly' ] );
385
+ const attrNZ = findAttrName( [ 'nz', 'normalz' ] );
386
+ const attrS = findAttrName( [ 's', 'u', 'texture_u', 'tx' ] );
387
+ const attrT = findAttrName( [ 't', 'v', 'texture_v', 'ty' ] );
388
+ const attrR = findAttrName( [ 'red', 'diffuse_red', 'r', 'diffuse_r' ] );
389
+ const attrG = findAttrName( [ 'green', 'diffuse_green', 'g', 'diffuse_g' ] );
390
+ const attrB = findAttrName( [ 'blue', 'diffuse_blue', 'b', 'diffuse_b' ] );
391
+
366
392
  if ( elementName === 'vertex' ) {
367
393
 
368
- buffer.vertices.push( element.x, element.y, element.z );
394
+ buffer.vertices.push( element[ attrX ], element[ attrY ], element[ attrZ ] );
369
395
 
370
- if ( 'nx' in element && 'ny' in element && 'nz' in element ) {
396
+ if ( attrNX !== null && attrNY !== null && attrNZ !== null ) {
371
397
 
372
- buffer.normals.push( element.nx, element.ny, element.nz );
398
+ buffer.normals.push( element[ attrNX ], element[ attrNY ], element[ attrNZ ] );
373
399
 
374
400
  }
375
401
 
376
- if ( 's' in element && 't' in element ) {
402
+ if ( attrS !== null && attrT !== null ) {
377
403
 
378
- buffer.uvs.push( element.s, element.t );
404
+ buffer.uvs.push( element[ attrS ], element[ attrT ] );
379
405
 
380
406
  }
381
407
 
382
- if ( 'red' in element && 'green' in element && 'blue' in element ) {
408
+ if ( attrR !== null && attrG !== null && attrB !== null ) {
383
409
 
384
- buffer.colors.push( element.red / 255.0, element.green / 255.0, element.blue / 255.0 );
410
+ buffer.colors.push( element[ attrR ] / 255.0, element[ attrG ] / 255.0, element[ attrB ] / 255.0 );
385
411
 
386
412
  }
387
413
 
@@ -4,12 +4,7 @@ import {
4
4
  FloatType,
5
5
  HalfFloatType,
6
6
  LinearEncoding,
7
- LinearFilter,
8
- NearestFilter,
9
- RGBEEncoding,
10
- RGBEFormat,
11
- RGBFormat,
12
- UnsignedByteType
7
+ LinearFilter
13
8
  } from 'three';
14
9
 
15
10
  // https://github.com/mrdoob/three.js/issues/5552
@@ -346,6 +341,7 @@ class RGBELoader extends DataTextureLoader {
346
341
  destArray[ destOffset + 0 ] = sourceArray[ sourceOffset + 0 ] * scale;
347
342
  destArray[ destOffset + 1 ] = sourceArray[ sourceOffset + 1 ] * scale;
348
343
  destArray[ destOffset + 2 ] = sourceArray[ sourceOffset + 2 ] * scale;
344
+ destArray[ destOffset + 3 ] = 1;
349
345
 
350
346
  };
351
347
 
@@ -358,6 +354,7 @@ class RGBELoader extends DataTextureLoader {
358
354
  destArray[ destOffset + 0 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 0 ] * scale, 65504 ) );
359
355
  destArray[ destOffset + 1 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 1 ] * scale, 65504 ) );
360
356
  destArray[ destOffset + 2 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 2 ] * scale, 65504 ) );
357
+ destArray[ destOffset + 3 ] = DataUtils.toHalfFloat( 1 );
361
358
 
362
359
  };
363
360
 
@@ -378,42 +375,33 @@ class RGBELoader extends DataTextureLoader {
378
375
 
379
376
  switch ( this.type ) {
380
377
 
381
- case UnsignedByteType:
382
-
383
- data = image_rgba_data;
384
- format = RGBEFormat; // handled as THREE.RGBAFormat in shaders
385
- type = UnsignedByteType;
386
- break;
387
-
388
378
  case FloatType:
389
379
 
390
380
  numElements = image_rgba_data.length / 4;
391
- const floatArray = new Float32Array( numElements * 3 );
381
+ const floatArray = new Float32Array( numElements * 4 );
392
382
 
393
383
  for ( let j = 0; j < numElements; j ++ ) {
394
384
 
395
- RGBEByteToRGBFloat( image_rgba_data, j * 4, floatArray, j * 3 );
385
+ RGBEByteToRGBFloat( image_rgba_data, j * 4, floatArray, j * 4 );
396
386
 
397
387
  }
398
388
 
399
389
  data = floatArray;
400
- format = RGBFormat;
401
390
  type = FloatType;
402
391
  break;
403
392
 
404
393
  case HalfFloatType:
405
394
 
406
395
  numElements = image_rgba_data.length / 4;
407
- const halfArray = new Uint16Array( numElements * 3 );
396
+ const halfArray = new Uint16Array( numElements * 4 );
408
397
 
409
398
  for ( let j = 0; j < numElements; j ++ ) {
410
399
 
411
- RGBEByteToRGBHalf( image_rgba_data, j * 4, halfArray, j * 3 );
400
+ RGBEByteToRGBHalf( image_rgba_data, j * 4, halfArray, j * 4 );
412
401
 
413
402
  }
414
403
 
415
404
  data = halfArray;
416
- format = RGBFormat;
417
405
  type = HalfFloatType;
418
406
  break;
419
407
 
@@ -455,15 +443,6 @@ class RGBELoader extends DataTextureLoader {
455
443
 
456
444
  switch ( texture.type ) {
457
445
 
458
- case UnsignedByteType:
459
-
460
- texture.encoding = RGBEEncoding;
461
- texture.minFilter = NearestFilter;
462
- texture.magFilter = NearestFilter;
463
- texture.generateMipmaps = false;
464
- texture.flipY = true;
465
- break;
466
-
467
446
  case FloatType:
468
447
 
469
448
  texture.encoding = LinearEncoding;
@@ -1,14 +1,37 @@
1
1
  import {
2
2
  DataTextureLoader,
3
- UnsignedByteType,
4
3
  RGBAFormat,
5
4
  LinearFilter,
6
5
  CubeTexture,
7
- RGBM7Encoding
6
+ HalfFloatType,
7
+ DataUtils
8
8
  } from 'three';
9
9
 
10
10
  class RGBMLoader extends DataTextureLoader {
11
11
 
12
+ constructor( manager ) {
13
+
14
+ super( manager );
15
+
16
+ this.type = HalfFloatType;
17
+ this.maxRange = 7; // more information about this property at https://iwasbeingirony.blogspot.com/2010/06/difference-between-rgbm-and-rgbd.html
18
+
19
+ }
20
+
21
+ setDataType( value ) {
22
+
23
+ this.type = value;
24
+ return this;
25
+
26
+ }
27
+
28
+ setMaxRange( value ) {
29
+
30
+ this.maxRange = value;
31
+ return this;
32
+
33
+ }
34
+
12
35
  loadCubemap( urls, onLoad, onProgress, onError ) {
13
36
 
14
37
  const texture = new CubeTexture();
@@ -43,7 +66,7 @@ class RGBMLoader extends DataTextureLoader {
43
66
 
44
67
  }
45
68
 
46
- texture.encoding = RGBM7Encoding;
69
+ texture.type = this.type;
47
70
  texture.format = RGBAFormat;
48
71
  texture.minFilter = LinearFilter;
49
72
  texture.generateMipmaps = false;
@@ -57,14 +80,45 @@ class RGBMLoader extends DataTextureLoader {
57
80
  const img = UPNG.decode( buffer );
58
81
  const rgba = UPNG.toRGBA8( img )[ 0 ];
59
82
 
83
+ const data = new Uint8Array( rgba );
84
+ const size = img.width * img.height * 4;
85
+
86
+ const output = ( this.type === HalfFloatType ) ? new Uint16Array( size ) : new Float32Array( size );
87
+
88
+ // decode RGBM
89
+
90
+ for ( let i = 0; i < data.length; i += 4 ) {
91
+
92
+ const r = data[ i + 0 ] / 255;
93
+ const g = data[ i + 1 ] / 255;
94
+ const b = data[ i + 2 ] / 255;
95
+ const a = data[ i + 3 ] / 255;
96
+
97
+ if ( this.type === HalfFloatType ) {
98
+
99
+ output[ i + 0 ] = DataUtils.toHalfFloat( Math.min( r * a * this.maxRange, 65504 ) );
100
+ output[ i + 1 ] = DataUtils.toHalfFloat( Math.min( g * a * this.maxRange, 65504 ) );
101
+ output[ i + 2 ] = DataUtils.toHalfFloat( Math.min( b * a * this.maxRange, 65504 ) );
102
+ output[ i + 3 ] = DataUtils.toHalfFloat( 1 );
103
+
104
+ } else {
105
+
106
+ output[ i + 0 ] = r * a * this.maxRange;
107
+ output[ i + 1 ] = g * a * this.maxRange;
108
+ output[ i + 2 ] = b * a * this.maxRange;
109
+ output[ i + 3 ] = 1;
110
+
111
+ }
112
+
113
+ }
114
+
60
115
  return {
61
116
  width: img.width,
62
117
  height: img.height,
63
- data: new Uint8Array( rgba ),
118
+ data: output,
64
119
  format: RGBAFormat,
65
- type: UnsignedByteType,
66
- flipY: true,
67
- encoding: RGBM7Encoding
120
+ type: this.type,
121
+ flipY: true
68
122
  };
69
123
 
70
124
  }
@@ -274,7 +328,7 @@ UPNG.decode = function ( buff ) {
274
328
  var fd, foff = 0; // frames
275
329
 
276
330
  var mgck = [ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a ];
277
- for ( var i = 0; i < 8; i ++ ) if ( data[ i ] != mgck[ i ] ) throw 'The input is not a PNG file!';
331
+ for ( var i = 0; i < 8; i ++ ) if ( data[ i ] != mgck[ i ] ) throw new Error( 'The input is not a PNG file!' );
278
332
 
279
333
  while ( offset < data.length ) {
280
334
 
@@ -151,7 +151,7 @@ class STLLoader extends Loader {
151
151
 
152
152
  for ( let i = 0, il = query.length; i < il; i ++ ) {
153
153
 
154
- if ( query[ i ] !== reader.getUint8( offset + i, false ) ) return false;
154
+ if ( query[ i ] !== reader.getUint8( offset + i ) ) return false;
155
155
 
156
156
  }
157
157
 
@@ -129,7 +129,9 @@ class SVGLoader extends Loader {
129
129
 
130
130
  case 'use':
131
131
  style = parseStyle( node, style );
132
- const usedNodeId = node.href.baseVal.substring( 1 );
132
+
133
+ const href = node.getAttributeNS( 'http://www.w3.org/1999/xlink', 'href' ) || '';
134
+ const usedNodeId = href.substring( 1 );
133
135
  const usedNode = node.viewportElement.getElementById( usedNodeId );
134
136
  if ( usedNode ) {
135
137
 
@@ -248,7 +250,7 @@ class SVGLoader extends Loader {
248
250
 
249
251
  }
250
252
 
251
- if ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );
253
+ if ( j === 0 ) firstPoint.copy( point );
252
254
 
253
255
  }
254
256
 
@@ -440,7 +442,7 @@ class SVGLoader extends Loader {
440
442
 
441
443
  }
442
444
 
443
- if ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );
445
+ if ( j === 0 ) firstPoint.copy( point );
444
446
 
445
447
  }
446
448
 
@@ -659,9 +661,14 @@ class SVGLoader extends Loader {
659
661
 
660
662
  for ( let j = 0; j < selectorList.length; j ++ ) {
661
663
 
664
+ // Remove empty rules
665
+ const definitions = Object.fromEntries(
666
+ Object.entries( stylesheet.style ).filter( ( [ , v ] ) => v !== '' )
667
+ );
668
+
662
669
  stylesheets[ selectorList[ j ] ] = Object.assign(
663
670
  stylesheets[ selectorList[ j ] ] || {},
664
- stylesheet.style
671
+ definitions
665
672
  );
666
673
 
667
674
  }
@@ -2084,7 +2091,7 @@ class SVGLoader extends Loader {
2084
2091
 
2085
2092
  }
2086
2093
 
2087
- return { points: points, isCW: ShapeUtils.isClockWise( points ), identifier: identifier ++, boundingBox: new Box2( new Vector2( minX, minY ), new Vector2( maxX, maxY ) ) };
2094
+ return { curves: p.curves, points: points, isCW: ShapeUtils.isClockWise( points ), identifier: identifier ++, boundingBox: new Box2( new Vector2( minX, minY ), new Vector2( maxX, maxY ) ) };
2088
2095
 
2089
2096
  } );
2090
2097
 
@@ -2101,12 +2108,15 @@ class SVGLoader extends Loader {
2101
2108
 
2102
2109
  if ( ! amIAHole.isHole ) {
2103
2110
 
2104
- const shape = new Shape( p.points );
2111
+ const shape = new Shape();
2112
+ shape.curves = p.curves;
2105
2113
  const holes = isAHole.filter( h => h.isHole && h.for === p.identifier );
2106
2114
  holes.forEach( h => {
2107
2115
 
2108
- const path = simplePaths[ h.identifier ];
2109
- shape.holes.push( new Path( path.points ) );
2116
+ const hole = simplePaths[ h.identifier ];
2117
+ const path = new Path();
2118
+ path.curves = hole.curves;
2119
+ shape.holes.push( path );
2110
2120
 
2111
2121
  } );
2112
2122
  shapesToReturn.push( shape );