super-three 0.144.0 → 0.147.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 (450) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +735 -387
  3. package/build/three.js +735 -387
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +910 -408
  6. package/examples/js/animation/AnimationClipCreator.js +0 -8
  7. package/examples/js/animation/CCDIKSolver.js +50 -67
  8. package/examples/js/animation/MMDAnimationHelper.js +66 -137
  9. package/examples/js/animation/MMDPhysics.js +70 -134
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +138 -405
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -54
  14. package/examples/js/controls/FlyControls.js +29 -55
  15. package/examples/js/controls/OrbitControls.js +125 -99
  16. package/examples/js/controls/PointerLockControls.js +5 -14
  17. package/examples/js/controls/TrackballControls.js +33 -86
  18. package/examples/js/controls/TransformControls.js +85 -170
  19. package/examples/js/csm/CSM.js +4 -39
  20. package/examples/js/csm/CSMFrustum.js +3 -9
  21. package/examples/js/csm/CSMHelper.js +24 -4
  22. package/examples/js/csm/CSMShader.js +2 -6
  23. package/examples/js/curves/CurveExtras.js +27 -27
  24. package/examples/js/curves/NURBSCurve.js +4 -16
  25. package/examples/js/curves/NURBSSurface.js +3 -9
  26. package/examples/js/curves/NURBSUtils.js +8 -45
  27. package/examples/js/effects/AnaglyphEffect.js +4 -18
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +26 -30
  30. package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
  31. package/examples/js/effects/PeppersGhostEffect.js +12 -39
  32. package/examples/js/effects/StereoEffect.js +0 -4
  33. package/examples/js/environments/RoomEnvironment.js +12 -10
  34. package/examples/js/exporters/ColladaExporter.js +48 -65
  35. package/examples/js/exporters/DRACOExporter.js +22 -22
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +141 -317
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +42 -33
  40. package/examples/js/exporters/PLYExporter.js +38 -33
  41. package/examples/js/exporters/STLExporter.js +5 -7
  42. package/examples/js/exporters/USDZExporter.js +113 -27
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +11 -6
  45. package/examples/js/geometries/DecalGeometry.js +53 -20
  46. package/examples/js/geometries/LightningStrike.js +54 -67
  47. package/examples/js/geometries/ParametricGeometries.js +8 -7
  48. package/examples/js/geometries/ParametricGeometry.js +25 -12
  49. package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
  50. package/examples/js/geometries/TeapotGeometry.js +54 -50
  51. package/examples/js/geometries/TextGeometry.js +6 -4
  52. package/examples/js/helpers/LightProbeHelper.js +1 -2
  53. package/examples/js/helpers/OctreeHelper.js +22 -20
  54. package/examples/js/helpers/PositionalAudioHelper.js +8 -6
  55. package/examples/js/helpers/RectAreaLightHelper.js +6 -7
  56. package/examples/js/helpers/VertexNormalsHelper.js +15 -13
  57. package/examples/js/helpers/VertexTangentsHelper.js +15 -9
  58. package/examples/js/helpers/ViewHelper.js +31 -16
  59. package/examples/js/interactive/HTMLMesh.js +25 -39
  60. package/examples/js/interactive/InteractiveGroup.js +9 -14
  61. package/examples/js/interactive/SelectionBox.js +3 -70
  62. package/examples/js/interactive/SelectionHelper.js +0 -8
  63. package/examples/js/lights/LightProbeGenerator.js +32 -39
  64. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  65. package/examples/js/lines/LineGeometry.js +3 -5
  66. package/examples/js/lines/LineMaterial.js +4 -11
  67. package/examples/js/lines/LineSegments2.js +40 -89
  68. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  69. package/examples/js/lines/Wireframe.js +2 -7
  70. package/examples/js/lines/WireframeGeometry2.js +3 -1
  71. package/examples/js/loaders/3DMLoader.js +58 -155
  72. package/examples/js/loaders/3MFLoader.js +72 -106
  73. package/examples/js/loaders/AMFLoader.js +0 -25
  74. package/examples/js/loaders/BVHLoader.js +44 -43
  75. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  76. package/examples/js/loaders/ColladaLoader.js +228 -359
  77. package/examples/js/loaders/DDSLoader.js +24 -25
  78. package/examples/js/loaders/DRACOLoader.js +29 -66
  79. package/examples/js/loaders/EXRLoader.js +67 -164
  80. package/examples/js/loaders/FBXLoader.js +287 -441
  81. package/examples/js/loaders/FontLoader.js +6 -15
  82. package/examples/js/loaders/GCodeLoader.js +15 -16
  83. package/examples/js/loaders/GLTFLoader.js +409 -706
  84. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
  85. package/examples/js/loaders/KMZLoader.js +3 -7
  86. package/examples/js/loaders/KTXLoader.js +12 -30
  87. package/examples/js/loaders/LDrawLoader.js +178 -289
  88. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  89. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  90. package/examples/js/loaders/LWOLoader.js +59 -124
  91. package/examples/js/loaders/LogLuvLoader.js +27 -77
  92. package/examples/js/loaders/LottieLoader.js +4 -4
  93. package/examples/js/loaders/MD2Loader.js +26 -27
  94. package/examples/js/loaders/MDDLoader.js +6 -10
  95. package/examples/js/loaders/MMDLoader.js +180 -189
  96. package/examples/js/loaders/MTLLoader.js +18 -47
  97. package/examples/js/loaders/NRRDLoader.js +44 -84
  98. package/examples/js/loaders/OBJLoader.js +50 -65
  99. package/examples/js/loaders/PCDLoader.js +34 -29
  100. package/examples/js/loaders/PDBLoader.js +17 -13
  101. package/examples/js/loaders/PLYLoader.js +62 -48
  102. package/examples/js/loaders/PRWMLoader.js +11 -22
  103. package/examples/js/loaders/PVRLoader.js +7 -16
  104. package/examples/js/loaders/RGBELoader.js +36 -61
  105. package/examples/js/loaders/RGBMLoader.js +26 -87
  106. package/examples/js/loaders/STLLoader.js +20 -27
  107. package/examples/js/loaders/SVGLoader.js +361 -233
  108. package/examples/js/loaders/TDSLoader.js +81 -118
  109. package/examples/js/loaders/TGALoader.js +39 -41
  110. package/examples/js/loaders/TIFFLoader.js +0 -1
  111. package/examples/js/loaders/TTFLoader.js +0 -8
  112. package/examples/js/loaders/TiltLoader.js +14 -15
  113. package/examples/js/loaders/VOXLoader.js +8 -16
  114. package/examples/js/loaders/VRMLLoader.js +243 -340
  115. package/examples/js/loaders/VTKLoader.js +101 -118
  116. package/examples/js/loaders/XYZLoader.js +2 -4
  117. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  118. package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
  119. package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
  120. package/examples/js/materials/MeshGouraudMaterial.js +15 -13
  121. package/examples/js/math/Capsule.js +0 -17
  122. package/examples/js/math/ColorConverter.js +3 -3
  123. package/examples/js/math/ConvexHull.js +185 -141
  124. package/examples/js/math/ImprovedNoise.js +1 -1
  125. package/examples/js/math/Lut.js +8 -15
  126. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  127. package/examples/js/math/OBB.js +90 -49
  128. package/examples/js/math/Octree.js +2 -57
  129. package/examples/js/math/SimplexNoise.js +74 -88
  130. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  131. package/examples/js/misc/GPUComputationRenderer.js +26 -16
  132. package/examples/js/misc/Gyroscope.js +5 -9
  133. package/examples/js/misc/MD2Character.js +14 -23
  134. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  135. package/examples/js/misc/MorphAnimMesh.js +0 -6
  136. package/examples/js/misc/MorphBlendMesh.js +3 -30
  137. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  138. package/examples/js/misc/RollerCoaster.js +17 -24
  139. package/examples/js/misc/TubePainter.js +18 -12
  140. package/examples/js/misc/Volume.js +16 -45
  141. package/examples/js/misc/VolumeSlice.js +14 -24
  142. package/examples/js/modifiers/CurveModifier.js +19 -21
  143. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  144. package/examples/js/modifiers/SimplifyModifier.js +56 -59
  145. package/examples/js/modifiers/TessellateModifier.js +2 -9
  146. package/examples/js/objects/GroundProjectedEnv.js +2 -14
  147. package/examples/js/objects/Lensflare.js +47 -38
  148. package/examples/js/objects/LightningStorm.js +10 -13
  149. package/examples/js/objects/MarchingCubes.js +80 -59
  150. package/examples/js/objects/Reflector.js +22 -20
  151. package/examples/js/objects/ReflectorForSSRPass.js +19 -23
  152. package/examples/js/objects/Refractor.js +52 -30
  153. package/examples/js/objects/ShadowMesh.js +1 -2
  154. package/examples/js/objects/Sky.js +2 -7
  155. package/examples/js/objects/Water.js +23 -18
  156. package/examples/js/objects/Water2.js +20 -19
  157. package/examples/js/physics/AmmoPhysics.js +23 -20
  158. package/examples/js/physics/OimoPhysics.js +19 -17
  159. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  160. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  161. package/examples/js/postprocessing/BloomPass.js +38 -17
  162. package/examples/js/postprocessing/BokehPass.js +29 -12
  163. package/examples/js/postprocessing/ClearPass.js +1 -6
  164. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  165. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  166. package/examples/js/postprocessing/EffectComposer.js +25 -32
  167. package/examples/js/postprocessing/FilmPass.js +7 -5
  168. package/examples/js/postprocessing/GlitchPass.js +10 -11
  169. package/examples/js/postprocessing/HalftonePass.js +9 -9
  170. package/examples/js/postprocessing/LUTPass.js +2 -15
  171. package/examples/js/postprocessing/MaskPass.js +20 -17
  172. package/examples/js/postprocessing/OutlinePass.js +45 -36
  173. package/examples/js/postprocessing/Pass.js +11 -14
  174. package/examples/js/postprocessing/RenderPass.js +3 -7
  175. package/examples/js/postprocessing/RenderPixelatedPass.js +215 -0
  176. package/examples/js/postprocessing/SAOPass.js +40 -32
  177. package/examples/js/postprocessing/SMAAPass.js +34 -17
  178. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  179. package/examples/js/postprocessing/SSAOPass.js +56 -42
  180. package/examples/js/postprocessing/SSRPass.js +78 -61
  181. package/examples/js/postprocessing/SavePass.js +14 -6
  182. package/examples/js/postprocessing/ShaderPass.js +9 -8
  183. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  184. package/examples/js/postprocessing/TexturePass.js +7 -4
  185. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  186. package/examples/js/renderers/CSS2DRenderer.js +2 -21
  187. package/examples/js/renderers/CSS3DRenderer.js +3 -24
  188. package/examples/js/renderers/Projector.js +29 -85
  189. package/examples/js/renderers/SVGRenderer.js +4 -50
  190. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  191. package/examples/js/shaders/AfterimageShader.js +3 -6
  192. package/examples/js/shaders/BasicShader.js +3 -6
  193. package/examples/js/shaders/BleachBypassShader.js +3 -6
  194. package/examples/js/shaders/BlendShader.js +3 -6
  195. package/examples/js/shaders/BokehShader.js +3 -6
  196. package/examples/js/shaders/BokehShader2.js +4 -13
  197. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  198. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  199. package/examples/js/shaders/ColorifyShader.js +2 -6
  200. package/examples/js/shaders/ConvolutionShader.js +5 -10
  201. package/examples/js/shaders/CopyShader.js +3 -6
  202. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  203. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  204. package/examples/js/shaders/DigitalGlitch.js +3 -6
  205. package/examples/js/shaders/DotScreenShader.js +2 -6
  206. package/examples/js/shaders/FXAAShader.js +1 -3
  207. package/examples/js/shaders/FilmShader.js +3 -6
  208. package/examples/js/shaders/FocusShader.js +3 -6
  209. package/examples/js/shaders/FreiChenShader.js +2 -6
  210. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  211. package/examples/js/shaders/GodRaysShader.js +11 -24
  212. package/examples/js/shaders/HalftoneShader.js +3 -6
  213. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  214. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  215. package/examples/js/shaders/HueSaturationShader.js +3 -6
  216. package/examples/js/shaders/KaleidoShader.js +3 -6
  217. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  218. package/examples/js/shaders/LuminosityShader.js +3 -6
  219. package/examples/js/shaders/MMDToonShader.js +2 -8
  220. package/examples/js/shaders/MirrorShader.js +3 -6
  221. package/examples/js/shaders/NormalMapShader.js +2 -6
  222. package/examples/js/shaders/RGBShiftShader.js +3 -6
  223. package/examples/js/shaders/SAOShader.js +2 -6
  224. package/examples/js/shaders/SMAAShader.js +6 -18
  225. package/examples/js/shaders/SSAOShader.js +2 -6
  226. package/examples/js/shaders/SSRShader.js +6 -18
  227. package/examples/js/shaders/SepiaShader.js +3 -6
  228. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  229. package/examples/js/shaders/TechnicolorShader.js +3 -6
  230. package/examples/js/shaders/ToneMapShader.js +3 -6
  231. package/examples/js/shaders/ToonShader.js +8 -24
  232. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  233. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  234. package/examples/js/shaders/VelocityShader.js +126 -0
  235. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  236. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  237. package/examples/js/shaders/VignetteShader.js +3 -6
  238. package/examples/js/shaders/VolumeShader.js +2 -6
  239. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  240. package/examples/js/textures/FlakesTexture.js +0 -1
  241. package/examples/js/utils/BufferGeometryUtils.js +236 -170
  242. package/examples/js/utils/CameraUtils.js +5 -20
  243. package/examples/js/utils/GPUStatsPanel.js +3 -12
  244. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  245. package/examples/js/utils/GeometryUtils.js +13 -18
  246. package/examples/js/utils/LDrawUtils.js +8 -11
  247. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  248. package/examples/js/utils/SceneUtils.js +117 -6
  249. package/examples/js/utils/ShadowMapViewer.js +17 -14
  250. package/examples/js/utils/SkeletonUtils.js +13 -27
  251. package/examples/js/utils/UVsDebug.js +20 -12
  252. package/examples/js/utils/WorkerPool.js +1 -11
  253. package/examples/jsm/animation/CCDIKSolver.js +27 -3
  254. package/examples/jsm/animation/MMDPhysics.js +25 -0
  255. package/examples/jsm/capabilities/WebGPU.js +3 -1
  256. package/examples/jsm/controls/FirstPersonControls.js +20 -20
  257. package/examples/jsm/controls/FlyControls.js +16 -17
  258. package/examples/jsm/controls/OrbitControls.js +44 -4
  259. package/examples/jsm/controls/TrackballControls.js +14 -2
  260. package/examples/jsm/controls/TransformControls.js +1 -1
  261. package/examples/jsm/csm/CSM.js +1 -0
  262. package/examples/jsm/csm/CSMHelper.js +30 -0
  263. package/examples/jsm/exporters/GLTFExporter.js +0 -79
  264. package/examples/jsm/exporters/USDZExporter.js +93 -1
  265. package/examples/jsm/helpers/OctreeHelper.js +22 -8
  266. package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
  267. package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
  268. package/examples/jsm/helpers/ViewHelper.js +24 -0
  269. package/examples/jsm/interactive/HTMLMesh.js +5 -6
  270. package/examples/jsm/interactive/InteractiveGroup.js +4 -2
  271. package/examples/jsm/libs/flow.module.js +610 -160
  272. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  273. package/examples/jsm/lines/LineSegments2.js +4 -0
  274. package/examples/jsm/loaders/3DMLoader.js +1 -2
  275. package/examples/jsm/loaders/ColladaLoader.js +28 -0
  276. package/examples/jsm/loaders/FBXLoader.js +18 -2
  277. package/examples/jsm/loaders/GLTFLoader.js +269 -428
  278. package/examples/jsm/loaders/KTX2Loader.js +68 -29
  279. package/examples/jsm/loaders/LDrawLoader.js +14 -13
  280. package/examples/jsm/loaders/LottieLoader.js +4 -2
  281. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  282. package/examples/jsm/loaders/PCDLoader.js +1 -1
  283. package/examples/jsm/loaders/PLYLoader.js +68 -16
  284. package/examples/jsm/loaders/SVGLoader.js +227 -14
  285. package/examples/jsm/loaders/USDZLoader.js +351 -111
  286. package/examples/jsm/loaders/VRMLLoader.js +13 -1
  287. package/examples/jsm/math/ConvexHull.js +4 -4
  288. package/examples/jsm/math/Octree.js +1 -1
  289. package/examples/jsm/node-editor/NodeEditor.js +91 -12
  290. package/examples/jsm/node-editor/core/BaseNode.js +10 -3
  291. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +6 -9
  292. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +6 -9
  293. package/examples/jsm/node-editor/math/AngleEditor.js +3 -3
  294. package/examples/jsm/node-editor/math/InvertEditor.js +2 -2
  295. package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
  296. package/examples/jsm/node-editor/utils/PreviewEditor.js +4 -0
  297. package/examples/jsm/nodes/Nodes.js +30 -3
  298. package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
  299. package/examples/jsm/nodes/accessors/NormalNode.js +6 -6
  300. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  301. package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
  302. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  303. package/examples/jsm/nodes/accessors/SkinningNode.js +8 -1
  304. package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
  305. package/examples/jsm/nodes/core/AttributeNode.js +31 -8
  306. package/examples/jsm/nodes/core/Node.js +1 -1
  307. package/examples/jsm/nodes/core/NodeBuilder.js +55 -6
  308. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  309. package/examples/jsm/nodes/core/NodeVarying.js +7 -4
  310. package/examples/jsm/nodes/core/VaryingNode.js +6 -4
  311. package/examples/jsm/nodes/core/constants.js +13 -13
  312. package/examples/jsm/nodes/display/BlendModeNode.js +85 -0
  313. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -12
  314. package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
  315. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  316. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  317. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
  318. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
  319. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
  320. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  321. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  322. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
  323. package/examples/jsm/nodes/materials/Materials.js +9 -7
  324. package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
  325. package/examples/jsm/nodes/materialx/{Disclaimer.md → DISCLAIMER.md} +1 -1
  326. package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
  327. package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_hsv.js +1 -1
  328. package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_noise.js +13 -3
  329. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  330. package/examples/jsm/nodes/math/MathNode.js +5 -5
  331. package/examples/jsm/nodes/math/OperatorNode.js +16 -3
  332. package/examples/jsm/nodes/shadernode/ShaderNode.js +35 -20
  333. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +87 -63
  334. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +29 -0
  335. package/examples/jsm/nodes/utils/ConvertNode.js +15 -14
  336. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  337. package/examples/jsm/nodes/utils/JoinNode.js +8 -2
  338. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  339. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  340. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  341. package/examples/jsm/nodes/utils/RemapNode.js +34 -0
  342. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  343. package/examples/jsm/nodes/utils/TimerNode.js +21 -1
  344. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  345. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  346. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  347. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  348. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  349. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  350. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  351. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  352. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  353. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  354. package/examples/jsm/postprocessing/OutlinePass.js +21 -1
  355. package/examples/jsm/postprocessing/Pass.js +2 -0
  356. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  357. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  358. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  359. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  360. package/examples/jsm/postprocessing/SavePass.js +17 -1
  361. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  362. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  363. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  364. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  365. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +56 -35
  366. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  367. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  368. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
  369. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
  370. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +41 -9
  371. package/examples/jsm/shaders/MMDToonShader.js +0 -2
  372. package/examples/jsm/shaders/VelocityShader.js +128 -0
  373. package/examples/jsm/utils/BufferGeometryUtils.js +174 -42
  374. package/examples/jsm/utils/SceneUtils.js +129 -4
  375. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  376. package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
  377. package/package.json +13 -13
  378. package/src/Three.js +1 -0
  379. package/src/animation/PropertyBinding.js +7 -0
  380. package/src/audio/AudioContext.js +5 -5
  381. package/src/cameras/CubeCamera.js +14 -14
  382. package/src/constants.js +1 -1
  383. package/src/core/InstancedBufferGeometry.js +1 -7
  384. package/src/core/InterleavedBufferAttribute.js +4 -4
  385. package/src/extras/Earcut.js +67 -67
  386. package/src/geometries/PolyhedronGeometry.js +1 -1
  387. package/src/geometries/ShapeGeometry.js +1 -1
  388. package/src/helpers/ArrowHelper.js +9 -0
  389. package/src/helpers/Box3Helper.js +7 -0
  390. package/src/helpers/BoxHelper.js +7 -1
  391. package/src/helpers/DirectionalLightHelper.js +5 -1
  392. package/src/helpers/GridHelper.js +7 -0
  393. package/src/helpers/HemisphereLightHelper.js +4 -1
  394. package/src/helpers/PlaneHelper.js +9 -0
  395. package/src/helpers/PointLightHelper.js +2 -1
  396. package/src/helpers/PolarGridHelper.js +7 -0
  397. package/src/helpers/SkeletonHelper.js +7 -0
  398. package/src/helpers/SpotLightHelper.js +4 -2
  399. package/src/lights/LightShadow.js +1 -2
  400. package/src/lights/PointLight.js +2 -2
  401. package/src/lights/SpotLight.js +2 -2
  402. package/src/loaders/FileLoader.js +4 -1
  403. package/src/loaders/ObjectLoader.js +5 -1
  404. package/src/materials/Material.js +1 -1
  405. package/src/materials/MeshPhysicalMaterial.js +1 -1
  406. package/src/math/Color.js +5 -5
  407. package/src/math/Matrix3.js +53 -18
  408. package/src/math/Ray.js +2 -5
  409. package/src/math/Sphere.js +36 -21
  410. package/src/objects/InstancedMesh.js +7 -0
  411. package/src/objects/LOD.js +25 -6
  412. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  413. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  414. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  415. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  416. package/src/renderers/WebGLRenderTarget.js +1 -1
  417. package/src/renderers/WebGLRenderer.js +36 -62
  418. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  419. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
  420. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
  421. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  422. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  423. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -4
  424. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  425. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
  426. package/src/renderers/shaders/ShaderChunk.js +3 -0
  427. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  428. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  429. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  430. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +0 -3
  431. package/src/renderers/shaders/ShaderLib.js +20 -6
  432. package/src/renderers/shaders/UniformsLib.js +1 -1
  433. package/src/renderers/shaders/UniformsUtils.js +15 -0
  434. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  435. package/src/renderers/webgl/WebGLBackground.js +15 -7
  436. package/src/renderers/webgl/WebGLLights.js +0 -4
  437. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  438. package/src/renderers/webgl/WebGLShadowMap.js +3 -1
  439. package/src/renderers/webgl/WebGLState.js +78 -41
  440. package/src/renderers/webgl/WebGLTextures.js +94 -39
  441. package/src/renderers/webgl/WebGLUniforms.js +152 -24
  442. package/src/renderers/webgl/WebGLUtils.js +1 -1
  443. package/src/renderers/webxr/WebXRController.js +46 -13
  444. package/src/renderers/webxr/WebXRManager.js +70 -2
  445. package/src/scenes/Scene.js +8 -0
  446. package/src/textures/CompressedArrayTexture.js +18 -0
  447. package/src/textures/Texture.js +2 -1
  448. package/examples/js/libs/lottie_canvas.js +0 -12751
  449. package/examples/js/shaders/PixelShader.js +0 -51
  450. package/examples/jsm/shaders/PixelShader.js +0 -44
@@ -17,13 +17,14 @@ class HemisphereLightHelper extends Object3D {
17
17
  super();
18
18
 
19
19
  this.light = light;
20
- this.light.updateMatrixWorld();
21
20
 
22
21
  this.matrix = light.matrixWorld;
23
22
  this.matrixAutoUpdate = false;
24
23
 
25
24
  this.color = color;
26
25
 
26
+ this.type = 'HemisphereLightHelper';
27
+
27
28
  const geometry = new OctahedronGeometry( size );
28
29
  geometry.rotateY( Math.PI * 0.5 );
29
30
 
@@ -75,6 +76,8 @@ class HemisphereLightHelper extends Object3D {
75
76
 
76
77
  }
77
78
 
79
+ this.light.updateWorldMatrix( true, false );
80
+
78
81
  mesh.lookAt( _vector.setFromMatrixPosition( this.light.matrixWorld ).negate() );
79
82
 
80
83
  }
@@ -49,6 +49,15 @@ class PlaneHelper extends Line {
49
49
 
50
50
  }
51
51
 
52
+ dispose() {
53
+
54
+ this.geometry.dispose();
55
+ this.material.dispose();
56
+ this.children[ 0 ].geometry.dispose();
57
+ this.children[ 0 ].material.dispose();
58
+
59
+ }
60
+
52
61
  }
53
62
 
54
63
  export { PlaneHelper };
@@ -12,7 +12,6 @@ class PointLightHelper extends Mesh {
12
12
  super( geometry, material );
13
13
 
14
14
  this.light = light;
15
- this.light.updateMatrixWorld();
16
15
 
17
16
  this.color = color;
18
17
 
@@ -58,6 +57,8 @@ class PointLightHelper extends Mesh {
58
57
 
59
58
  update() {
60
59
 
60
+ this.light.updateWorldMatrix( true, false );
61
+
61
62
  if ( this.color !== undefined ) {
62
63
 
63
64
  this.material.color.set( this.color );
@@ -83,6 +83,13 @@ class PolarGridHelper extends LineSegments {
83
83
 
84
84
  }
85
85
 
86
+ dispose() {
87
+
88
+ this.geometry.dispose();
89
+ this.material.dispose();
90
+
91
+ }
92
+
86
93
  }
87
94
 
88
95
 
@@ -94,6 +94,13 @@ class SkeletonHelper extends LineSegments {
94
94
 
95
95
  }
96
96
 
97
+ dispose() {
98
+
99
+ this.geometry.dispose();
100
+ this.material.dispose();
101
+
102
+ }
103
+
97
104
  }
98
105
 
99
106
 
@@ -14,13 +14,14 @@ class SpotLightHelper extends Object3D {
14
14
  super();
15
15
 
16
16
  this.light = light;
17
- this.light.updateMatrixWorld();
18
17
 
19
18
  this.matrix = light.matrixWorld;
20
19
  this.matrixAutoUpdate = false;
21
20
 
22
21
  this.color = color;
23
22
 
23
+ this.type = 'SpotLightHelper';
24
+
24
25
  const geometry = new BufferGeometry();
25
26
 
26
27
  const positions = [
@@ -63,7 +64,8 @@ class SpotLightHelper extends Object3D {
63
64
 
64
65
  update() {
65
66
 
66
- this.light.updateMatrixWorld();
67
+ this.light.updateWorldMatrix( true, false );
68
+ this.light.target.updateWorldMatrix( true, false );
67
69
 
68
70
  const coneLength = this.light.distance ? this.light.distance : 1000;
69
71
  const coneWidth = coneLength * Math.tan( this.light.angle );
@@ -75,8 +75,7 @@ class LightShadow {
75
75
  0.0, 0.0, 0.0, 1.0
76
76
  );
77
77
 
78
- shadowMatrix.multiply( shadowCamera.projectionMatrix );
79
- shadowMatrix.multiply( shadowCamera.matrixWorldInverse );
78
+ shadowMatrix.multiply( _projScreenMatrix );
80
79
 
81
80
  }
82
81
 
@@ -3,7 +3,7 @@ import { PointLightShadow } from './PointLightShadow.js';
3
3
 
4
4
  class PointLight extends Light {
5
5
 
6
- constructor( color, intensity, distance = 0, decay = 1 ) {
6
+ constructor( color, intensity, distance = 0, decay = 2 ) {
7
7
 
8
8
  super( color, intensity );
9
9
 
@@ -12,7 +12,7 @@ class PointLight extends Light {
12
12
  this.type = 'PointLight';
13
13
 
14
14
  this.distance = distance;
15
- this.decay = decay; // for physically correct lights, should be 2.
15
+ this.decay = decay;
16
16
 
17
17
  this.shadow = new PointLightShadow();
18
18
 
@@ -4,7 +4,7 @@ import { Object3D } from '../core/Object3D.js';
4
4
 
5
5
  class SpotLight extends Light {
6
6
 
7
- constructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 1 ) {
7
+ constructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 2 ) {
8
8
 
9
9
  super( color, intensity );
10
10
 
@@ -20,7 +20,7 @@ class SpotLight extends Light {
20
20
  this.distance = distance;
21
21
  this.angle = angle;
22
22
  this.penumbra = penumbra;
23
- this.decay = decay; // for physically correct lights, should be 2.
23
+ this.decay = decay;
24
24
 
25
25
  this.map = null;
26
26
 
@@ -109,7 +109,10 @@ class FileLoader extends Loader {
109
109
 
110
110
  const callbacks = loading[ url ];
111
111
  const reader = response.body.getReader();
112
- const contentLength = response.headers.get( 'Content-Length' );
112
+
113
+ // Nginx needs X-File-Size check
114
+ // https://serverfault.com/questions/482875/why-does-nginx-remove-content-length-header-for-chunked-content
115
+ const contentLength = response.headers.get( 'Content-Length' ) || response.headers.get( 'X-File-Size' );
113
116
  const total = contentLength ? parseInt( contentLength ) : 0;
114
117
  const lengthComputable = total !== 0;
115
118
  let loaded = 0;
@@ -101,6 +101,8 @@ class ObjectLoader extends Loader {
101
101
 
102
102
  if ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {
103
103
 
104
+ if ( onError !== undefined ) onError( new Error( 'THREE.ObjectLoader: Can\'t load ' + url ) );
105
+
104
106
  console.error( 'THREE.ObjectLoader: Can\'t load ' + url );
105
107
  return;
106
108
 
@@ -795,6 +797,8 @@ class ObjectLoader extends Loader {
795
797
 
796
798
  }
797
799
 
800
+ if ( data.backgroundBlurriness !== undefined ) object.backgroundBlurriness = data.backgroundBlurriness;
801
+
798
802
  break;
799
803
 
800
804
  case 'PerspectiveCamera':
@@ -1029,7 +1033,7 @@ class ObjectLoader extends Loader {
1029
1033
 
1030
1034
  if ( child !== undefined ) {
1031
1035
 
1032
- object.addLevel( child, level.distance );
1036
+ object.addLevel( child, level.distance, level.hysteresis );
1033
1037
 
1034
1038
  }
1035
1039
 
@@ -300,7 +300,7 @@ class Material extends EventDispatcher {
300
300
  if ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid;
301
301
  if ( this.thickness !== undefined ) data.thickness = this.thickness;
302
302
  if ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;
303
- if ( this.attenuationDistance !== undefined ) data.attenuationDistance = this.attenuationDistance;
303
+ if ( this.attenuationDistance !== undefined && this.attenuationDistance !== Infinity ) data.attenuationDistance = this.attenuationDistance;
304
304
  if ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex();
305
305
 
306
306
  if ( this.size !== undefined ) data.size = this.size;
@@ -55,7 +55,7 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
55
55
 
56
56
  this.thickness = 0;
57
57
  this.thicknessMap = null;
58
- this.attenuationDistance = 0.0;
58
+ this.attenuationDistance = Infinity;
59
59
  this.attenuationColor = new Color( 1, 1, 1 );
60
60
 
61
61
  this.specularIntensity = 1.0;
package/src/math/Color.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { clamp, euclideanModulo, lerp } from './MathUtils.js';
2
2
  import { ColorManagement, SRGBToLinear, LinearToSRGB } from './ColorManagement.js';
3
- import { SRGBColorSpace, LinearSRGBColorSpace } from '../constants.js';
3
+ import { SRGBColorSpace } from '../constants.js';
4
4
 
5
5
  const _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,
6
6
  'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,
@@ -117,7 +117,7 @@ class Color {
117
117
 
118
118
  }
119
119
 
120
- setRGB( r, g, b, colorSpace = LinearSRGBColorSpace ) {
120
+ setRGB( r, g, b, colorSpace = ColorManagement.workingColorSpace ) {
121
121
 
122
122
  this.r = r;
123
123
  this.g = g;
@@ -129,7 +129,7 @@ class Color {
129
129
 
130
130
  }
131
131
 
132
- setHSL( h, s, l, colorSpace = LinearSRGBColorSpace ) {
132
+ setHSL( h, s, l, colorSpace = ColorManagement.workingColorSpace ) {
133
133
 
134
134
  // h,s,l ranges are in 0.0 - 1.0
135
135
  h = euclideanModulo( h, 1 );
@@ -369,7 +369,7 @@ class Color {
369
369
 
370
370
  }
371
371
 
372
- getHSL( target, colorSpace = LinearSRGBColorSpace ) {
372
+ getHSL( target, colorSpace = ColorManagement.workingColorSpace ) {
373
373
 
374
374
  // h,s,l ranges are in 0.0 - 1.0
375
375
 
@@ -414,7 +414,7 @@ class Color {
414
414
 
415
415
  }
416
416
 
417
- getRGB( target, colorSpace = LinearSRGBColorSpace ) {
417
+ getRGB( target, colorSpace = ColorManagement.workingColorSpace ) {
418
418
 
419
419
  ColorManagement.fromWorkingColorSpace( toComponents( this, _rgb ), colorSpace );
420
420
 
@@ -231,12 +231,11 @@ class Matrix3 {
231
231
 
232
232
  }
233
233
 
234
- scale( sx, sy ) {
234
+ //
235
235
 
236
- const te = this.elements;
236
+ scale( sx, sy ) {
237
237
 
238
- te[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx;
239
- te[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy;
238
+ this.premultiply( _m3.makeScale( sx, sy ) );
240
239
 
241
240
  return this;
242
241
 
@@ -244,37 +243,71 @@ class Matrix3 {
244
243
 
245
244
  rotate( theta ) {
246
245
 
246
+ this.premultiply( _m3.makeRotation( - theta ) );
247
+
248
+ return this;
249
+
250
+ }
251
+
252
+ translate( tx, ty ) {
253
+
254
+ this.premultiply( _m3.makeTranslation( tx, ty ) );
255
+
256
+ return this;
257
+
258
+ }
259
+
260
+ // for 2D Transforms
261
+
262
+ makeTranslation( x, y ) {
263
+
264
+ this.set(
265
+
266
+ 1, 0, x,
267
+ 0, 1, y,
268
+ 0, 0, 1
269
+
270
+ );
271
+
272
+ return this;
273
+
274
+ }
275
+
276
+ makeRotation( theta ) {
277
+
278
+ // counterclockwise
279
+
247
280
  const c = Math.cos( theta );
248
281
  const s = Math.sin( theta );
249
282
 
250
- const te = this.elements;
251
-
252
- const a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];
253
- const a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ];
283
+ this.set(
254
284
 
255
- te[ 0 ] = c * a11 + s * a21;
256
- te[ 3 ] = c * a12 + s * a22;
257
- te[ 6 ] = c * a13 + s * a23;
285
+ c, - s, 0,
286
+ s, c, 0,
287
+ 0, 0, 1
258
288
 
259
- te[ 1 ] = - s * a11 + c * a21;
260
- te[ 4 ] = - s * a12 + c * a22;
261
- te[ 7 ] = - s * a13 + c * a23;
289
+ );
262
290
 
263
291
  return this;
264
292
 
265
293
  }
266
294
 
267
- translate( tx, ty ) {
295
+ makeScale( x, y ) {
268
296
 
269
- const te = this.elements;
297
+ this.set(
270
298
 
271
- te[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ];
272
- te[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ];
299
+ x, 0, 0,
300
+ 0, y, 0,
301
+ 0, 0, 1
302
+
303
+ );
273
304
 
274
305
  return this;
275
306
 
276
307
  }
277
308
 
309
+ //
310
+
278
311
  equals( matrix ) {
279
312
 
280
313
  const te = this.elements;
@@ -330,4 +363,6 @@ class Matrix3 {
330
363
 
331
364
  }
332
365
 
366
+ const _m3 = /*@__PURE__*/ new Matrix3();
367
+
333
368
  export { Matrix3 };
package/src/math/Ray.js CHANGED
@@ -356,12 +356,9 @@ class Ray {
356
356
 
357
357
  if ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;
358
358
 
359
- // These lines also handle the case where tmin or tmax is NaN
360
- // (result of 0 * Infinity). x !== x returns true if x is NaN
359
+ if ( tymin > tmin || isNaN( tmin ) ) tmin = tymin;
361
360
 
362
- if ( tymin > tmin || tmin !== tmin ) tmin = tymin;
363
-
364
- if ( tymax < tmax || tmax !== tmax ) tmax = tymax;
361
+ if ( tymax < tmax || isNaN( tmax ) ) tmax = tymax;
365
362
 
366
363
  if ( invdirz >= 0 ) {
367
364
 
@@ -3,8 +3,7 @@ import { Vector3 } from './Vector3.js';
3
3
 
4
4
  const _box = /*@__PURE__*/ new Box3();
5
5
  const _v1 = /*@__PURE__*/ new Vector3();
6
- const _toFarthestPoint = /*@__PURE__*/ new Vector3();
7
- const _toPoint = /*@__PURE__*/ new Vector3();
6
+ const _v2 = /*@__PURE__*/ new Vector3();
8
7
 
9
8
  class Sphere {
10
9
 
@@ -161,23 +160,31 @@ class Sphere {
161
160
 
162
161
  expandByPoint( point ) {
163
162
 
164
- // from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L649-L671
163
+ if ( this.isEmpty() ) {
164
+
165
+ this.center.copy( point );
166
+
167
+ this.radius = 0;
165
168
 
166
- _toPoint.subVectors( point, this.center );
169
+ return this;
170
+
171
+ }
167
172
 
168
- const lengthSq = _toPoint.lengthSq();
173
+ _v1.subVectors( point, this.center );
174
+
175
+ const lengthSq = _v1.lengthSq();
169
176
 
170
177
  if ( lengthSq > ( this.radius * this.radius ) ) {
171
178
 
179
+ // calculate the minimal sphere
180
+
172
181
  const length = Math.sqrt( lengthSq );
173
- const missingRadiusHalf = ( length - this.radius ) * 0.5;
174
182
 
175
- // Nudge this sphere towards the target point. Add half the missing distance to radius,
176
- // and the other half to position. This gives a tighter enclosure, instead of if
177
- // the whole missing distance were just added to radius.
183
+ const delta = ( length - this.radius ) * 0.5;
178
184
 
179
- this.center.add( _toPoint.multiplyScalar( missingRadiusHalf / length ) );
180
- this.radius += missingRadiusHalf;
185
+ this.center.addScaledVector( _v1, delta / length );
186
+
187
+ this.radius += delta;
181
188
 
182
189
  }
183
190
 
@@ -187,25 +194,33 @@ class Sphere {
187
194
 
188
195
  union( sphere ) {
189
196
 
190
- // from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L759-L769
197
+ if ( sphere.isEmpty() ) {
198
+
199
+ return this;
191
200
 
192
- // To enclose another sphere into this sphere, we only need to enclose two points:
193
- // 1) Enclose the farthest point on the other sphere into this sphere.
194
- // 2) Enclose the opposite point of the farthest point into this sphere.
201
+ }
202
+
203
+ if ( this.isEmpty() ) {
195
204
 
196
- if ( this.center.equals( sphere.center ) === true ) {
205
+ this.copy( sphere );
197
206
 
198
- _toFarthestPoint.set( 0, 0, 1 ).multiplyScalar( sphere.radius );
207
+ return this;
208
+
209
+ }
199
210
 
211
+ if ( this.center.equals( sphere.center ) === true ) {
212
+
213
+ this.radius = Math.max( this.radius, sphere.radius );
200
214
 
201
215
  } else {
202
216
 
203
- _toFarthestPoint.subVectors( sphere.center, this.center ).normalize().multiplyScalar( sphere.radius );
217
+ _v2.subVectors( sphere.center, this.center ).setLength( sphere.radius );
204
218
 
205
- }
219
+ this.expandByPoint( _v1.copy( sphere.center ).add( _v2 ) );
206
220
 
207
- this.expandByPoint( _v1.copy( sphere.center ).add( _toFarthestPoint ) );
208
- this.expandByPoint( _v1.copy( sphere.center ).sub( _toFarthestPoint ) );
221
+ this.expandByPoint( _v1.copy( sphere.center ).sub( _v2 ) );
222
+
223
+ }
209
224
 
210
225
  return this;
211
226
 
@@ -7,6 +7,7 @@ const _instanceWorldMatrix = /*@__PURE__*/ new Matrix4();
7
7
 
8
8
  const _instanceIntersects = [];
9
9
 
10
+ const _identity = /*@__PURE__*/ new Matrix4();
10
11
  const _mesh = /*@__PURE__*/ new Mesh();
11
12
 
12
13
  class InstancedMesh extends Mesh {
@@ -24,6 +25,12 @@ class InstancedMesh extends Mesh {
24
25
 
25
26
  this.frustumCulled = false;
26
27
 
28
+ for ( let i = 0; i < count; i ++ ) {
29
+
30
+ this.setMatrixAt( i, _identity );
31
+
32
+ }
33
+
27
34
  }
28
35
 
29
36
  copy( source, recursive ) {
@@ -38,7 +38,7 @@ class LOD extends Object3D {
38
38
 
39
39
  const level = levels[ i ];
40
40
 
41
- this.addLevel( level.object.clone(), level.distance );
41
+ this.addLevel( level.object.clone(), level.distance, level.hysteresis );
42
42
 
43
43
  }
44
44
 
@@ -48,7 +48,7 @@ class LOD extends Object3D {
48
48
 
49
49
  }
50
50
 
51
- addLevel( object, distance = 0 ) {
51
+ addLevel( object, distance = 0, hysteresis = 0 ) {
52
52
 
53
53
  distance = Math.abs( distance );
54
54
 
@@ -66,7 +66,7 @@ class LOD extends Object3D {
66
66
 
67
67
  }
68
68
 
69
- levels.splice( l, 0, { distance: distance, object: object } );
69
+ levels.splice( l, 0, { distance: distance, hysteresis: hysteresis, object: object } );
70
70
 
71
71
  this.add( object );
72
72
 
@@ -80,6 +80,8 @@ class LOD extends Object3D {
80
80
 
81
81
  }
82
82
 
83
+
84
+
83
85
  getObjectForDistance( distance ) {
84
86
 
85
87
  const levels = this.levels;
@@ -90,7 +92,15 @@ class LOD extends Object3D {
90
92
 
91
93
  for ( i = 1, l = levels.length; i < l; i ++ ) {
92
94
 
93
- if ( distance < levels[ i ].distance ) {
95
+ let levelDistance = levels[ i ].distance;
96
+
97
+ if ( levels[ i ].object.visible ) {
98
+
99
+ levelDistance -= levelDistance * levels[ i ].hysteresis;
100
+
101
+ }
102
+
103
+ if ( distance < levelDistance ) {
94
104
 
95
105
  break;
96
106
 
@@ -139,7 +149,15 @@ class LOD extends Object3D {
139
149
 
140
150
  for ( i = 1, l = levels.length; i < l; i ++ ) {
141
151
 
142
- if ( distance >= levels[ i ].distance ) {
152
+ let levelDistance = levels[ i ].distance;
153
+
154
+ if ( levels[ i ].object.visible ) {
155
+
156
+ levelDistance -= levelDistance * levels[ i ].hysteresis;
157
+
158
+ }
159
+
160
+ if ( distance >= levelDistance ) {
143
161
 
144
162
  levels[ i - 1 ].object.visible = false;
145
163
  levels[ i ].object.visible = true;
@@ -180,7 +198,8 @@ class LOD extends Object3D {
180
198
 
181
199
  data.object.levels.push( {
182
200
  object: level.object.uuid,
183
- distance: level.distance
201
+ distance: level.distance,
202
+ hysteresis: level.hysteresis
184
203
  } );
185
204
 
186
205
  }
@@ -3,7 +3,7 @@ import { Data3DTexture } from '../textures/Data3DTexture.js';
3
3
 
4
4
  class WebGL3DRenderTarget extends WebGLRenderTarget {
5
5
 
6
- constructor( width, height, depth ) {
6
+ constructor( width = 1, height = 1, depth = 1 ) {
7
7
 
8
8
  super( width, height );
9
9
 
@@ -3,7 +3,7 @@ import { DataArrayTexture } from '../textures/DataArrayTexture.js';
3
3
 
4
4
  class WebGLArrayRenderTarget extends WebGLRenderTarget {
5
5
 
6
- constructor( width, height, depth ) {
6
+ constructor( width = 1, height = 1, depth = 1 ) {
7
7
 
8
8
  super( width, height );
9
9
 
@@ -9,7 +9,7 @@ import { CubeTexture } from '../textures/CubeTexture.js';
9
9
 
10
10
  class WebGLCubeRenderTarget extends WebGLRenderTarget {
11
11
 
12
- constructor( size, options = {} ) {
12
+ constructor( size = 1, options = {} ) {
13
13
 
14
14
  super( size, size, options );
15
15
 
@@ -2,7 +2,7 @@ import { WebGLRenderTarget } from './WebGLRenderTarget.js';
2
2
 
3
3
  class WebGLMultipleRenderTargets extends WebGLRenderTarget {
4
4
 
5
- constructor( width, height, count, options = {} ) {
5
+ constructor( width = 1, height = 1, count = 1, options = {} ) {
6
6
 
7
7
  super( width, height, options );
8
8
 
@@ -11,7 +11,7 @@ import { Source } from '../textures/Source.js';
11
11
  */
12
12
  class WebGLRenderTarget extends EventDispatcher {
13
13
 
14
- constructor( width, height, options = {} ) {
14
+ constructor( width = 1, height = 1, options = {} ) {
15
15
 
16
16
  super();
17
17