super-three 0.141.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 (646) hide show
  1. package/README.md +9 -9
  2. package/build/three.cjs +2441 -1569
  3. package/build/three.js +2441 -1569
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +2847 -1576
  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 +71 -150
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +149 -403
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -61
  14. package/examples/js/controls/FlyControls.js +29 -63
  15. package/examples/js/controls/OrbitControls.js +125 -103
  16. package/examples/js/controls/PointerLockControls.js +5 -22
  17. package/examples/js/controls/TrackballControls.js +33 -88
  18. package/examples/js/controls/TransformControls.js +101 -182
  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 +6 -20
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +30 -54
  30. package/examples/js/effects/ParallaxBarrierEffect.js +2 -15
  31. package/examples/js/effects/PeppersGhostEffect.js +14 -41
  32. package/examples/js/effects/StereoEffect.js +2 -6
  33. package/examples/js/environments/RoomEnvironment.js +32 -8
  34. package/examples/js/exporters/ColladaExporter.js +52 -78
  35. package/examples/js/exporters/DRACOExporter.js +22 -34
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +168 -345
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +40 -52
  40. package/examples/js/exporters/PLYExporter.js +50 -57
  41. package/examples/js/exporters/STLExporter.js +5 -14
  42. package/examples/js/exporters/USDZExporter.js +119 -27
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +12 -7
  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 +23 -17
  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 +2 -8
  63. package/examples/js/libs/ktx-parse.umd.js +1 -0
  64. package/examples/js/libs/meshopt_decoder.js +98 -32
  65. package/examples/js/lights/LightProbeGenerator.js +32 -39
  66. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  67. package/examples/js/lines/LineGeometry.js +3 -5
  68. package/examples/js/lines/LineMaterial.js +4 -11
  69. package/examples/js/lines/LineSegments2.js +40 -89
  70. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  71. package/examples/js/lines/Wireframe.js +2 -7
  72. package/examples/js/lines/WireframeGeometry2.js +3 -1
  73. package/examples/js/loaders/3DMLoader.js +58 -155
  74. package/examples/js/loaders/3MFLoader.js +72 -106
  75. package/examples/js/loaders/AMFLoader.js +0 -25
  76. package/examples/js/loaders/BVHLoader.js +44 -43
  77. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  78. package/examples/js/loaders/ColladaLoader.js +229 -359
  79. package/examples/js/loaders/DDSLoader.js +24 -25
  80. package/examples/js/loaders/DRACOLoader.js +30 -90
  81. package/examples/js/loaders/EXRLoader.js +69 -177
  82. package/examples/js/loaders/FBXLoader.js +294 -441
  83. package/examples/js/loaders/FontLoader.js +9 -31
  84. package/examples/js/loaders/GCodeLoader.js +15 -16
  85. package/examples/js/loaders/GLTFLoader.js +458 -739
  86. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -17
  87. package/examples/js/loaders/KMZLoader.js +3 -7
  88. package/examples/js/loaders/KTXLoader.js +12 -30
  89. package/examples/js/loaders/LDrawLoader.js +309 -355
  90. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  91. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  92. package/examples/js/loaders/LWOLoader.js +59 -124
  93. package/examples/js/loaders/LogLuvLoader.js +27 -77
  94. package/examples/js/loaders/LottieLoader.js +4 -4
  95. package/examples/js/loaders/MD2Loader.js +26 -27
  96. package/examples/js/loaders/MDDLoader.js +6 -10
  97. package/examples/js/loaders/MMDLoader.js +180 -189
  98. package/examples/js/loaders/MTLLoader.js +18 -47
  99. package/examples/js/loaders/NRRDLoader.js +44 -84
  100. package/examples/js/loaders/OBJLoader.js +56 -77
  101. package/examples/js/loaders/PCDLoader.js +92 -42
  102. package/examples/js/loaders/PDBLoader.js +17 -13
  103. package/examples/js/loaders/PLYLoader.js +65 -51
  104. package/examples/js/loaders/PRWMLoader.js +11 -22
  105. package/examples/js/loaders/PVRLoader.js +7 -16
  106. package/examples/js/loaders/RGBELoader.js +36 -61
  107. package/examples/js/loaders/RGBMLoader.js +26 -87
  108. package/examples/js/loaders/STLLoader.js +20 -27
  109. package/examples/js/loaders/SVGLoader.js +365 -236
  110. package/examples/js/loaders/TDSLoader.js +81 -118
  111. package/examples/js/loaders/TGALoader.js +39 -41
  112. package/examples/js/loaders/TIFFLoader.js +30 -0
  113. package/examples/js/loaders/TTFLoader.js +0 -8
  114. package/examples/js/loaders/TiltLoader.js +14 -15
  115. package/examples/js/loaders/VOXLoader.js +8 -16
  116. package/examples/js/loaders/VRMLLoader.js +266 -354
  117. package/examples/js/loaders/VTKLoader.js +102 -119
  118. package/examples/js/loaders/XYZLoader.js +2 -4
  119. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  120. package/examples/js/loaders/lwo/LWO2Parser.js +39 -89
  121. package/examples/js/loaders/lwo/LWO3Parser.js +38 -79
  122. package/examples/js/materials/MeshGouraudMaterial.js +387 -0
  123. package/examples/js/math/Capsule.js +0 -17
  124. package/examples/js/math/ColorConverter.js +3 -53
  125. package/examples/js/math/ConvexHull.js +185 -141
  126. package/examples/js/math/ImprovedNoise.js +1 -1
  127. package/examples/js/math/Lut.js +8 -15
  128. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  129. package/examples/js/math/OBB.js +90 -49
  130. package/examples/js/math/Octree.js +2 -57
  131. package/examples/js/math/SimplexNoise.js +74 -88
  132. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  133. package/examples/js/misc/GPUComputationRenderer.js +47 -14
  134. package/examples/js/misc/Gyroscope.js +5 -9
  135. package/examples/js/misc/MD2Character.js +14 -23
  136. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  137. package/examples/js/misc/MorphAnimMesh.js +0 -6
  138. package/examples/js/misc/MorphBlendMesh.js +3 -30
  139. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  140. package/examples/js/misc/RollerCoaster.js +17 -24
  141. package/examples/js/misc/TubePainter.js +18 -12
  142. package/examples/js/misc/Volume.js +173 -194
  143. package/examples/js/misc/VolumeSlice.js +91 -99
  144. package/examples/js/modifiers/CurveModifier.js +19 -21
  145. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  146. package/examples/js/modifiers/SimplifyModifier.js +57 -60
  147. package/examples/js/modifiers/TessellateModifier.js +2 -9
  148. package/examples/js/objects/GroundProjectedEnv.js +181 -0
  149. package/examples/js/objects/Lensflare.js +47 -38
  150. package/examples/js/objects/LightningStorm.js +10 -13
  151. package/examples/js/objects/MarchingCubes.js +80 -59
  152. package/examples/js/objects/Reflector.js +31 -22
  153. package/examples/js/objects/ReflectorForSSRPass.js +20 -25
  154. package/examples/js/objects/Refractor.js +61 -33
  155. package/examples/js/objects/ShadowMesh.js +6 -3
  156. package/examples/js/objects/Sky.js +2 -7
  157. package/examples/js/objects/Water.js +23 -18
  158. package/examples/js/objects/Water2.js +20 -19
  159. package/examples/js/physics/AmmoPhysics.js +23 -20
  160. package/examples/js/physics/OimoPhysics.js +19 -17
  161. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  162. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  163. package/examples/js/postprocessing/BloomPass.js +38 -17
  164. package/examples/js/postprocessing/BokehPass.js +29 -12
  165. package/examples/js/postprocessing/ClearPass.js +1 -6
  166. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  167. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  168. package/examples/js/postprocessing/EffectComposer.js +25 -32
  169. package/examples/js/postprocessing/FilmPass.js +7 -5
  170. package/examples/js/postprocessing/GlitchPass.js +10 -11
  171. package/examples/js/postprocessing/HalftonePass.js +9 -9
  172. package/examples/js/postprocessing/LUTPass.js +2 -15
  173. package/examples/js/postprocessing/MaskPass.js +20 -17
  174. package/examples/js/postprocessing/OutlinePass.js +49 -38
  175. package/examples/js/postprocessing/Pass.js +11 -14
  176. package/examples/js/postprocessing/RenderPass.js +3 -7
  177. package/examples/js/postprocessing/RenderPixelatedPass.js +215 -0
  178. package/examples/js/postprocessing/SAOPass.js +40 -32
  179. package/examples/js/postprocessing/SMAAPass.js +34 -17
  180. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  181. package/examples/js/postprocessing/SSAOPass.js +56 -42
  182. package/examples/js/postprocessing/SSRPass.js +78 -61
  183. package/examples/js/postprocessing/SavePass.js +14 -6
  184. package/examples/js/postprocessing/ShaderPass.js +9 -8
  185. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  186. package/examples/js/postprocessing/TexturePass.js +7 -4
  187. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  188. package/examples/js/renderers/CSS2DRenderer.js +4 -23
  189. package/examples/js/renderers/CSS3DRenderer.js +5 -26
  190. package/examples/js/renderers/Projector.js +31 -108
  191. package/examples/js/renderers/SVGRenderer.js +4 -50
  192. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  193. package/examples/js/shaders/AfterimageShader.js +3 -6
  194. package/examples/js/shaders/BasicShader.js +3 -6
  195. package/examples/js/shaders/BleachBypassShader.js +3 -6
  196. package/examples/js/shaders/BlendShader.js +3 -6
  197. package/examples/js/shaders/BokehShader.js +3 -6
  198. package/examples/js/shaders/BokehShader2.js +4 -13
  199. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  200. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  201. package/examples/js/shaders/ColorifyShader.js +2 -6
  202. package/examples/js/shaders/ConvolutionShader.js +5 -10
  203. package/examples/js/shaders/CopyShader.js +3 -6
  204. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  205. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  206. package/examples/js/shaders/DigitalGlitch.js +3 -6
  207. package/examples/js/shaders/DotScreenShader.js +2 -6
  208. package/examples/js/shaders/FXAAShader.js +1 -3
  209. package/examples/js/shaders/FilmShader.js +3 -6
  210. package/examples/js/shaders/FocusShader.js +3 -6
  211. package/examples/js/shaders/FreiChenShader.js +2 -6
  212. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  213. package/examples/js/shaders/GodRaysShader.js +11 -24
  214. package/examples/js/shaders/HalftoneShader.js +3 -6
  215. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  216. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  217. package/examples/js/shaders/HueSaturationShader.js +3 -6
  218. package/examples/js/shaders/KaleidoShader.js +3 -6
  219. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  220. package/examples/js/shaders/LuminosityShader.js +4 -7
  221. package/examples/js/shaders/MMDToonShader.js +2 -4
  222. package/examples/js/shaders/MirrorShader.js +3 -6
  223. package/examples/js/shaders/NormalMapShader.js +2 -6
  224. package/examples/js/shaders/RGBShiftShader.js +3 -6
  225. package/examples/js/shaders/SAOShader.js +2 -6
  226. package/examples/js/shaders/SMAAShader.js +6 -18
  227. package/examples/js/shaders/SSAOShader.js +2 -6
  228. package/examples/js/shaders/SSRShader.js +6 -18
  229. package/examples/js/shaders/SepiaShader.js +3 -6
  230. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  231. package/examples/js/shaders/TechnicolorShader.js +3 -6
  232. package/examples/js/shaders/ToneMapShader.js +4 -7
  233. package/examples/js/shaders/ToonShader.js +8 -24
  234. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  235. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  236. package/examples/js/shaders/VelocityShader.js +126 -0
  237. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  238. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  239. package/examples/js/shaders/VignetteShader.js +3 -6
  240. package/examples/js/shaders/VolumeShader.js +2 -6
  241. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  242. package/examples/js/textures/FlakesTexture.js +0 -1
  243. package/examples/js/utils/BufferGeometryUtils.js +237 -171
  244. package/examples/js/utils/CameraUtils.js +5 -20
  245. package/examples/js/utils/GPUStatsPanel.js +3 -12
  246. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  247. package/examples/js/utils/GeometryUtils.js +15 -36
  248. package/examples/js/utils/LDrawUtils.js +8 -11
  249. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  250. package/examples/js/utils/SceneUtils.js +109 -14
  251. package/examples/js/utils/ShadowMapViewer.js +17 -14
  252. package/examples/js/utils/SkeletonUtils.js +13 -27
  253. package/examples/js/utils/UVsDebug.js +20 -12
  254. package/examples/js/utils/WorkerPool.js +1 -11
  255. package/examples/jsm/animation/CCDIKSolver.js +27 -3
  256. package/examples/jsm/animation/MMDPhysics.js +28 -22
  257. package/examples/jsm/capabilities/WebGPU.js +3 -1
  258. package/examples/jsm/controls/ArcballControls.js +17 -2
  259. package/examples/jsm/controls/FirstPersonControls.js +20 -27
  260. package/examples/jsm/controls/FlyControls.js +16 -24
  261. package/examples/jsm/controls/OrbitControls.js +44 -9
  262. package/examples/jsm/controls/PointerLockControls.js +0 -7
  263. package/examples/jsm/controls/TrackballControls.js +14 -5
  264. package/examples/jsm/controls/TransformControls.js +18 -16
  265. package/examples/jsm/csm/CSM.js +1 -0
  266. package/examples/jsm/csm/CSMHelper.js +30 -0
  267. package/examples/jsm/effects/AnaglyphEffect.js +2 -2
  268. package/examples/jsm/effects/OutlineEffect.js +4 -25
  269. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -2
  270. package/examples/jsm/effects/PeppersGhostEffect.js +2 -2
  271. package/examples/jsm/effects/StereoEffect.js +2 -2
  272. package/examples/jsm/environments/RoomEnvironment.js +23 -0
  273. package/examples/jsm/exporters/ColladaExporter.js +4 -13
  274. package/examples/jsm/exporters/DRACOExporter.js +0 -13
  275. package/examples/jsm/exporters/GLTFExporter.js +29 -110
  276. package/examples/jsm/exporters/KTX2Exporter.js +29 -29
  277. package/examples/jsm/exporters/OBJExporter.js +0 -18
  278. package/examples/jsm/exporters/PLYExporter.js +14 -22
  279. package/examples/jsm/exporters/STLExporter.js +1 -9
  280. package/examples/jsm/exporters/USDZExporter.js +107 -4
  281. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  282. package/examples/jsm/geometries/ParametricGeometry.js +0 -6
  283. package/examples/jsm/helpers/OctreeHelper.js +22 -8
  284. package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
  285. package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
  286. package/examples/jsm/helpers/ViewHelper.js +24 -0
  287. package/examples/jsm/interactive/HTMLMesh.js +14 -15
  288. package/examples/jsm/interactive/InteractiveGroup.js +4 -2
  289. package/examples/jsm/interactive/SelectionHelper.js +5 -3
  290. package/examples/jsm/libs/flow.module.js +610 -160
  291. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  292. package/examples/jsm/libs/meshopt_decoder.module.js +97 -32
  293. package/examples/jsm/libs/utif.module.js +1579 -0
  294. package/examples/jsm/libs/zstddec.module.js +1 -0
  295. package/examples/jsm/lines/LineSegments2.js +4 -0
  296. package/examples/jsm/loaders/3DMLoader.js +1 -2
  297. package/examples/jsm/loaders/ColladaLoader.js +29 -0
  298. package/examples/jsm/loaders/DRACOLoader.js +2 -28
  299. package/examples/jsm/loaders/EXRLoader.js +3 -13
  300. package/examples/jsm/loaders/FBXLoader.js +26 -3
  301. package/examples/jsm/loaders/FontLoader.js +3 -16
  302. package/examples/jsm/loaders/GLTFLoader.js +321 -464
  303. package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
  304. package/examples/jsm/loaders/KTX2Loader.js +254 -53
  305. package/examples/jsm/loaders/LDrawLoader.js +149 -87
  306. package/examples/jsm/loaders/LottieLoader.js +4 -2
  307. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  308. package/examples/jsm/loaders/OBJLoader.js +6 -14
  309. package/examples/jsm/loaders/PCDLoader.js +60 -14
  310. package/examples/jsm/loaders/PLYLoader.js +71 -19
  311. package/examples/jsm/loaders/RGBELoader.js +1 -1
  312. package/examples/jsm/loaders/SVGLoader.js +231 -17
  313. package/examples/jsm/loaders/TIFFLoader.js +36 -0
  314. package/examples/jsm/loaders/USDZLoader.js +633 -0
  315. package/examples/jsm/loaders/VRMLLoader.js +36 -26
  316. package/examples/jsm/loaders/VTKLoader.js +1 -1
  317. package/examples/jsm/loaders/lwo/LWO2Parser.js +6 -8
  318. package/examples/jsm/loaders/lwo/LWO3Parser.js +6 -8
  319. package/examples/jsm/materials/MeshGouraudMaterial.js +423 -0
  320. package/examples/jsm/math/ColorConverter.js +1 -49
  321. package/examples/jsm/math/ConvexHull.js +4 -4
  322. package/examples/jsm/math/Octree.js +1 -1
  323. package/examples/jsm/misc/GPUComputationRenderer.js +43 -0
  324. package/examples/jsm/misc/Volume.js +169 -171
  325. package/examples/jsm/misc/VolumeSlice.js +78 -80
  326. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  327. package/examples/jsm/node-editor/NodeEditor.js +91 -12
  328. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +1 -1
  329. package/examples/jsm/node-editor/accessors/NormalEditor.js +1 -1
  330. package/examples/jsm/node-editor/accessors/PositionEditor.js +1 -1
  331. package/examples/jsm/node-editor/accessors/UVEditor.js +1 -1
  332. package/examples/jsm/node-editor/core/BaseNode.js +10 -3
  333. package/examples/jsm/node-editor/display/BlendEditor.js +1 -1
  334. package/examples/jsm/node-editor/display/NormalMapEditor.js +1 -1
  335. package/examples/jsm/node-editor/inputs/ColorEditor.js +1 -1
  336. package/examples/jsm/node-editor/inputs/FloatEditor.js +1 -1
  337. package/examples/jsm/node-editor/inputs/SliderEditor.js +1 -1
  338. package/examples/jsm/node-editor/inputs/TextureEditor.js +1 -1
  339. package/examples/jsm/node-editor/inputs/Vector2Editor.js +1 -1
  340. package/examples/jsm/node-editor/inputs/Vector3Editor.js +1 -1
  341. package/examples/jsm/node-editor/inputs/Vector4Editor.js +1 -1
  342. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +7 -10
  343. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +1 -1
  344. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +7 -10
  345. package/examples/jsm/node-editor/math/AngleEditor.js +4 -4
  346. package/examples/jsm/node-editor/math/DotEditor.js +1 -1
  347. package/examples/jsm/node-editor/math/InvertEditor.js +3 -3
  348. package/examples/jsm/node-editor/math/LimiterEditor.js +1 -1
  349. package/examples/jsm/node-editor/math/NormalizeEditor.js +1 -1
  350. package/examples/jsm/node-editor/math/OperatorEditor.js +1 -1
  351. package/examples/jsm/node-editor/math/PowerEditor.js +1 -1
  352. package/examples/jsm/node-editor/math/TrigonometryEditor.js +1 -1
  353. package/examples/jsm/node-editor/procedural/CheckerEditor.js +1 -1
  354. package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
  355. package/examples/jsm/node-editor/utils/JoinEditor.js +1 -1
  356. package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
  357. package/examples/jsm/node-editor/utils/PreviewEditor.js +7 -3
  358. package/examples/jsm/node-editor/utils/SplitEditor.js +1 -1
  359. package/examples/jsm/node-editor/utils/TimerEditor.js +1 -1
  360. package/examples/jsm/nodes/Nodes.js +70 -13
  361. package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
  362. package/examples/jsm/nodes/accessors/CubeTextureNode.js +9 -5
  363. package/examples/jsm/nodes/accessors/NormalNode.js +8 -8
  364. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  365. package/examples/jsm/nodes/accessors/PositionNode.js +11 -5
  366. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  367. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
  368. package/examples/jsm/nodes/accessors/SkinningNode.js +8 -1
  369. package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
  370. package/examples/jsm/nodes/core/AttributeNode.js +32 -9
  371. package/examples/jsm/nodes/core/CodeNode.js +3 -3
  372. package/examples/jsm/nodes/core/FunctionCallNode.js +20 -5
  373. package/examples/jsm/nodes/core/FunctionNode.js +2 -2
  374. package/examples/jsm/nodes/core/Node.js +15 -13
  375. package/examples/jsm/nodes/core/NodeBuilder.js +67 -18
  376. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  377. package/examples/jsm/nodes/core/NodeUtils.js +23 -1
  378. package/examples/jsm/nodes/core/NodeVarying.js +17 -0
  379. package/examples/jsm/nodes/core/VaryingNode.js +56 -0
  380. package/examples/jsm/nodes/core/constants.js +13 -13
  381. package/examples/jsm/nodes/display/BlendModeNode.js +85 -0
  382. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +84 -0
  383. package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
  384. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  385. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  386. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
  387. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
  388. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
  389. package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
  390. package/examples/jsm/nodes/gpgpu/ComputeNode.js +3 -1
  391. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  392. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -7
  393. package/examples/jsm/nodes/lighting/LightingContextNode.js +4 -4
  394. package/examples/jsm/nodes/loaders/NodeLoader.js +2 -2
  395. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +33 -0
  396. package/examples/jsm/nodes/materials/Materials.js +21 -31
  397. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +70 -0
  398. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +4 -7
  399. package/examples/jsm/nodes/materials/NodeMaterial.js +11 -3
  400. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +28 -17
  401. package/examples/jsm/nodes/materialx/DISCLAIMER.md +199 -0
  402. package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
  403. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +56 -0
  404. package/examples/jsm/nodes/materialx/lib/mx_noise.js +617 -0
  405. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  406. package/examples/jsm/nodes/math/MathNode.js +7 -17
  407. package/examples/jsm/nodes/math/OperatorNode.js +16 -3
  408. package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +21 -6
  409. package/examples/jsm/nodes/procedural/CheckerNode.js +2 -2
  410. package/examples/jsm/nodes/shadernode/ShaderNode.js +40 -25
  411. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +95 -68
  412. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +49 -6
  413. package/examples/jsm/nodes/utils/ConvertNode.js +18 -12
  414. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  415. package/examples/jsm/nodes/utils/JoinNode.js +15 -9
  416. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  417. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +3 -2
  418. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  419. package/examples/jsm/nodes/utils/RemapNode.js +34 -0
  420. package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
  421. package/examples/jsm/nodes/utils/SplitNode.js +21 -5
  422. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  423. package/examples/jsm/nodes/utils/TimerNode.js +23 -3
  424. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  425. package/examples/jsm/objects/GroundProjectedEnv.js +186 -0
  426. package/examples/jsm/objects/Reflector.js +12 -5
  427. package/examples/jsm/objects/ReflectorForSSRPass.js +3 -5
  428. package/examples/jsm/objects/Refractor.js +12 -6
  429. package/examples/jsm/objects/ShadowMesh.js +8 -2
  430. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  431. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  432. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  433. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  434. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  435. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  436. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  437. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  438. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  439. package/examples/jsm/postprocessing/OutlinePass.js +25 -3
  440. package/examples/jsm/postprocessing/Pass.js +2 -0
  441. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  442. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  443. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  444. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  445. package/examples/jsm/postprocessing/SavePass.js +17 -1
  446. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  447. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  448. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  449. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  450. package/examples/jsm/renderers/CSS2DRenderer.js +2 -2
  451. package/examples/jsm/renderers/CSS3DRenderer.js +2 -2
  452. package/examples/jsm/renderers/Projector.js +2 -24
  453. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +9 -5
  454. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +363 -231
  455. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +7 -3
  456. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  457. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  458. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +68 -3
  459. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +6 -0
  460. package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +6 -0
  461. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  462. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +17 -19
  463. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +16 -14
  464. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +2 -2
  465. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +113 -93
  466. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +5 -3
  467. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +2 -2
  468. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +81 -0
  469. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +63 -36
  470. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  471. package/examples/jsm/shaders/LuminosityShader.js +1 -1
  472. package/examples/jsm/shaders/MMDToonShader.js +2 -4
  473. package/examples/jsm/shaders/ToneMapShader.js +1 -1
  474. package/examples/jsm/shaders/VelocityShader.js +128 -0
  475. package/examples/jsm/utils/BufferGeometryUtils.js +176 -43
  476. package/examples/jsm/utils/GeometryUtils.js +17 -25
  477. package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
  478. package/examples/jsm/utils/SceneUtils.js +117 -12
  479. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  480. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -1
  481. package/examples/jsm/webxr/VRButton.js +1 -7
  482. package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
  483. package/package.json +22 -18
  484. package/src/Three.Legacy.js +262 -36
  485. package/src/Three.js +4 -2
  486. package/src/animation/AnimationAction.js +6 -5
  487. package/src/animation/AnimationClip.js +1 -1
  488. package/src/animation/AnimationMixer.js +1 -1
  489. package/src/animation/AnimationUtils.js +204 -199
  490. package/src/animation/KeyframeTrack.js +1 -1
  491. package/src/animation/PropertyBinding.js +31 -5
  492. package/src/audio/AudioContext.js +5 -5
  493. package/src/cameras/CubeCamera.js +14 -21
  494. package/src/constants.js +2 -4
  495. package/src/core/BufferAttribute.js +81 -111
  496. package/src/core/BufferGeometry.js +3 -41
  497. package/src/core/InstancedBufferAttribute.js +0 -10
  498. package/src/core/InstancedBufferGeometry.js +1 -7
  499. package/src/core/InterleavedBuffer.js +1 -1
  500. package/src/core/InterleavedBufferAttribute.js +57 -8
  501. package/src/core/Object3D.js +22 -5
  502. package/src/core/Uniform.js +0 -7
  503. package/src/core/UniformsGroup.js +92 -0
  504. package/src/extras/DataUtils.js +104 -88
  505. package/src/extras/Earcut.js +67 -67
  506. package/src/extras/core/Path.js +1 -0
  507. package/src/extras/core/ShapePath.js +1 -4
  508. package/src/extras/curves/CatmullRomCurve3.js +4 -2
  509. package/src/geometries/BoxGeometry.js +1 -1
  510. package/src/geometries/CapsuleGeometry.js +1 -1
  511. package/src/geometries/CircleGeometry.js +1 -1
  512. package/src/geometries/ConeGeometry.js +1 -1
  513. package/src/geometries/CylinderGeometry.js +2 -1
  514. package/src/geometries/DodecahedronGeometry.js +1 -1
  515. package/src/geometries/EdgesGeometry.js +5 -4
  516. package/src/geometries/ExtrudeGeometry.js +2 -11
  517. package/src/geometries/IcosahedronGeometry.js +1 -1
  518. package/src/geometries/LatheGeometry.js +2 -2
  519. package/src/geometries/OctahedronGeometry.js +1 -1
  520. package/src/geometries/PlaneGeometry.js +2 -1
  521. package/src/geometries/PolyhedronGeometry.js +2 -2
  522. package/src/geometries/RingGeometry.js +1 -1
  523. package/src/geometries/ShapeGeometry.js +3 -2
  524. package/src/geometries/SphereGeometry.js +2 -1
  525. package/src/geometries/TetrahedronGeometry.js +1 -1
  526. package/src/geometries/TorusGeometry.js +2 -1
  527. package/src/geometries/TorusKnotGeometry.js +2 -1
  528. package/src/geometries/TubeGeometry.js +2 -1
  529. package/src/geometries/WireframeGeometry.js +1 -0
  530. package/src/helpers/ArrowHelper.js +9 -0
  531. package/src/helpers/Box3Helper.js +7 -0
  532. package/src/helpers/BoxHelper.js +7 -1
  533. package/src/helpers/CameraHelper.js +97 -38
  534. package/src/helpers/DirectionalLightHelper.js +6 -1
  535. package/src/helpers/GridHelper.js +7 -0
  536. package/src/helpers/HemisphereLightHelper.js +5 -1
  537. package/src/helpers/PlaneHelper.js +15 -9
  538. package/src/helpers/PointLightHelper.js +2 -1
  539. package/src/helpers/PolarGridHelper.js +25 -14
  540. package/src/helpers/SkeletonHelper.js +7 -0
  541. package/src/helpers/SpotLightHelper.js +5 -2
  542. package/src/lights/LightShadow.js +1 -2
  543. package/src/lights/PointLight.js +2 -2
  544. package/src/lights/SpotLight.js +4 -2
  545. package/src/loaders/FileLoader.js +16 -2
  546. package/src/loaders/LoadingManager.js +1 -1
  547. package/src/loaders/MaterialLoader.js +49 -7
  548. package/src/loaders/ObjectLoader.js +9 -42
  549. package/src/materials/Material.js +2 -34
  550. package/src/materials/Materials.js +0 -27
  551. package/src/materials/MeshLambertMaterial.js +28 -1
  552. package/src/materials/MeshPhysicalMaterial.js +1 -1
  553. package/src/materials/ShaderMaterial.js +3 -7
  554. package/src/math/Color.js +8 -18
  555. package/src/math/MathUtils.js +1 -7
  556. package/src/math/Matrix3.js +54 -25
  557. package/src/math/Matrix4.js +3 -27
  558. package/src/math/Quaternion.js +1 -21
  559. package/src/math/Ray.js +2 -5
  560. package/src/math/Sphere.js +36 -21
  561. package/src/math/Vector2.js +4 -24
  562. package/src/math/Vector3.js +7 -46
  563. package/src/math/Vector4.js +4 -24
  564. package/src/objects/InstancedMesh.js +7 -0
  565. package/src/objects/LOD.js +25 -6
  566. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  567. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  568. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  569. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  570. package/src/renderers/WebGLRenderTarget.js +1 -1
  571. package/src/renderers/WebGLRenderer.js +119 -69
  572. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +12 -12
  573. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -5
  574. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -5
  575. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +24 -24
  576. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  577. package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +1 -1
  578. package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +1 -1
  579. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +2 -1
  580. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +113 -99
  581. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +34 -13
  582. package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
  583. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +28 -0
  584. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  585. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +3 -1
  586. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +13 -1
  587. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  588. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -4
  589. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -4
  590. package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
  591. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  592. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +18 -7
  593. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +8 -3
  594. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +9 -6
  595. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  596. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +14 -10
  597. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
  598. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +1 -1
  599. package/src/renderers/shaders/ShaderChunk.js +7 -2
  600. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  601. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  602. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  603. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +0 -1
  604. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +22 -50
  605. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  606. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +0 -3
  607. package/src/renderers/shaders/ShaderLib.js +50 -36
  608. package/src/renderers/shaders/UniformsLib.js +13 -12
  609. package/src/renderers/shaders/UniformsUtils.js +29 -0
  610. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  611. package/src/renderers/webgl/WebGLBackground.js +17 -9
  612. package/src/renderers/webgl/WebGLLights.js +37 -17
  613. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  614. package/src/renderers/webgl/WebGLMorphtargets.js +0 -20
  615. package/src/renderers/webgl/WebGLProgram.js +6 -11
  616. package/src/renderers/webgl/WebGLPrograms.js +30 -26
  617. package/src/renderers/webgl/WebGLRenderLists.js +5 -4
  618. package/src/renderers/webgl/WebGLRenderStates.js +5 -4
  619. package/src/renderers/webgl/WebGLShaderCache.js +9 -6
  620. package/src/renderers/webgl/WebGLShadowMap.js +13 -16
  621. package/src/renderers/webgl/WebGLState.js +125 -41
  622. package/src/renderers/webgl/WebGLTextures.js +94 -39
  623. package/src/renderers/webgl/WebGLUniforms.js +156 -28
  624. package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
  625. package/src/renderers/webgl/WebGLUtils.js +3 -1
  626. package/src/renderers/webvr/WebVRManager.js +42 -9
  627. package/src/renderers/webvr/WebVRUtils.js +1 -1
  628. package/src/renderers/webxr/WebXRController.js +91 -50
  629. package/src/renderers/webxr/WebXRManager.js +127 -34
  630. package/src/scenes/Scene.js +24 -3
  631. package/src/textures/CompressedArrayTexture.js +18 -0
  632. package/src/textures/Source.js +1 -1
  633. package/src/textures/Texture.js +2 -1
  634. package/src/utils.js +1 -1
  635. package/examples/js/controls/experimental/CameraControls.js +0 -1048
  636. package/examples/js/libs/lottie_canvas.js +0 -12751
  637. package/examples/js/loaders/KTX2Loader.js +0 -558
  638. package/examples/js/shaders/PixelShader.js +0 -51
  639. package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
  640. package/examples/jsm/nodes/accessors/ReflectNode.js +0 -70
  641. package/examples/jsm/nodes/core/NodeVary.js +0 -14
  642. package/examples/jsm/nodes/core/VaryNode.js +0 -54
  643. package/examples/jsm/package.json +0 -3
  644. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
  645. package/examples/jsm/shaders/PixelShader.js +0 -44
  646. package/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js +0 -122
@@ -131,9 +131,9 @@ class AnaglyphEffect {
131
131
 
132
132
  const currentRenderTarget = renderer.getRenderTarget();
133
133
 
134
- scene.updateMatrixWorld();
134
+ if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
135
135
 
136
- if ( camera.parent === null ) camera.updateMatrixWorld();
136
+ if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
137
137
 
138
138
  _stereo.update( camera );
139
139
 
@@ -55,7 +55,7 @@ import {
55
55
  * // How to set outline parameters for each material
56
56
  * material.userData.outlineParameters = {
57
57
  * thickness: 0.01,
58
- * color: [ 0, 0, 0 ]
58
+ * color: [ 0, 0, 0 ],
59
59
  * alpha: 0.8,
60
60
  * visible: true,
61
61
  * keepAlive: true
@@ -429,27 +429,6 @@ class OutlineEffect {
429
429
 
430
430
  this.render = function ( scene, camera ) {
431
431
 
432
- let renderTarget;
433
- let forceClear = false;
434
-
435
- if ( arguments[ 2 ] !== undefined ) {
436
-
437
- console.warn( 'THREE.OutlineEffect.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.' );
438
- renderTarget = arguments[ 2 ];
439
-
440
- }
441
-
442
- if ( arguments[ 3 ] !== undefined ) {
443
-
444
- console.warn( 'THREE.OutlineEffect.render(): the forceClear argument has been removed. Use .clear() instead.' );
445
- forceClear = arguments[ 3 ];
446
-
447
- }
448
-
449
- if ( renderTarget !== undefined ) renderer.setRenderTarget( renderTarget );
450
-
451
- if ( forceClear ) renderer.clear();
452
-
453
432
  if ( this.enabled === false ) {
454
433
 
455
434
  renderer.render( scene, camera );
@@ -471,11 +450,11 @@ class OutlineEffect {
471
450
  this.renderOutline = function ( scene, camera ) {
472
451
 
473
452
  const currentAutoClear = renderer.autoClear;
474
- const currentSceneAutoUpdate = scene.autoUpdate;
453
+ const currentSceneAutoUpdate = scene.matrixWorldAutoUpdate;
475
454
  const currentSceneBackground = scene.background;
476
455
  const currentShadowMapEnabled = renderer.shadowMap.enabled;
477
456
 
478
- scene.autoUpdate = false;
457
+ scene.matrixWorldAutoUpdate = false;
479
458
  scene.background = null;
480
459
  renderer.autoClear = false;
481
460
  renderer.shadowMap.enabled = false;
@@ -488,7 +467,7 @@ class OutlineEffect {
488
467
 
489
468
  cleanupCache();
490
469
 
491
- scene.autoUpdate = currentSceneAutoUpdate;
470
+ scene.matrixWorldAutoUpdate = currentSceneAutoUpdate;
492
471
  scene.background = currentSceneBackground;
493
472
  renderer.autoClear = currentAutoClear;
494
473
  renderer.shadowMap.enabled = currentShadowMapEnabled;
@@ -90,9 +90,9 @@ class ParallaxBarrierEffect {
90
90
 
91
91
  this.render = function ( scene, camera ) {
92
92
 
93
- scene.updateMatrixWorld();
93
+ if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
94
94
 
95
- if ( camera.parent === null ) camera.updateMatrixWorld();
95
+ if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
96
96
 
97
97
  _stereo.update( camera );
98
98
 
@@ -53,9 +53,9 @@ class PeppersGhostEffect {
53
53
 
54
54
  this.render = function ( scene, camera ) {
55
55
 
56
- scene.updateMatrixWorld();
56
+ if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
57
57
 
58
- if ( camera.parent === null ) camera.updateMatrixWorld();
58
+ if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
59
59
 
60
60
  camera.matrixWorld.decompose( _position, _quaternion, _scale );
61
61
 
@@ -25,9 +25,9 @@ class StereoEffect {
25
25
 
26
26
  this.render = function ( scene, camera ) {
27
27
 
28
- scene.updateMatrixWorld();
28
+ if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
29
29
 
30
- if ( camera.parent === null ) camera.updateMatrixWorld();
30
+ if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
31
31
 
32
32
  _stereo.update( camera );
33
33
 
@@ -108,6 +108,29 @@ class RoomEnvironment extends Scene {
108
108
 
109
109
  }
110
110
 
111
+ dispose() {
112
+
113
+ const resources = new Set();
114
+
115
+ this.traverse( ( object ) => {
116
+
117
+ if ( object.isMesh ) {
118
+
119
+ resources.add( object.geometry );
120
+ resources.add( object.material );
121
+
122
+ }
123
+
124
+ } );
125
+
126
+ for ( const resource of resources ) {
127
+
128
+ resource.dispose();
129
+
130
+ }
131
+
132
+ }
133
+
111
134
  }
112
135
 
113
136
  function createAreaLightMaterial( intensity ) {
@@ -243,21 +243,12 @@ class ColladaExporter {
243
243
 
244
244
  // Process the given piece of geometry into the geometry library
245
245
  // Returns the mesh id
246
- function processGeometry( g ) {
246
+ function processGeometry( bufferGeometry ) {
247
247
 
248
- let info = geometryInfo.get( g );
248
+ let info = geometryInfo.get( bufferGeometry );
249
249
 
250
250
  if ( ! info ) {
251
251
 
252
- // convert the geometry to bufferGeometry if it isn't already
253
- const bufferGeometry = g;
254
-
255
- if ( bufferGeometry.isBufferGeometry !== true ) {
256
-
257
- throw new Error( 'THREE.ColladaExporter: Geometry is not of type THREE.BufferGeometry.' );
258
-
259
- }
260
-
261
252
  const meshid = `Mesh${ libraryGeometries.length + 1 }`;
262
253
 
263
254
  const indexCount =
@@ -271,7 +262,7 @@ class ColladaExporter {
271
262
  [ { start: 0, count: indexCount, materialIndex: 0 } ];
272
263
 
273
264
 
274
- const gname = g.name ? ` name="${ g.name }"` : '';
265
+ const gname = bufferGeometry.name ? ` name="${ bufferGeometry.name }"` : '';
275
266
  let gnode = `<geometry id="${ meshid }"${ gname }><mesh>`;
276
267
 
277
268
  // define the geometry node and the vertices for the geometry
@@ -353,7 +344,7 @@ class ColladaExporter {
353
344
  libraryGeometries.push( gnode );
354
345
 
355
346
  info = { meshid: meshid, bufferGeometry: bufferGeometry };
356
- geometryInfo.set( g, info );
347
+ geometryInfo.set( bufferGeometry, info );
357
348
 
358
349
  }
359
350
 
@@ -26,12 +26,6 @@ class DRACOExporter {
26
26
  exportColor: false,
27
27
  } ) {
28
28
 
29
- if ( object.isBufferGeometry === true ) {
30
-
31
- throw new Error( 'DRACOExporter: The first parameter of parse() is now an instance of Mesh or Points.' );
32
-
33
- }
34
-
35
29
  if ( DracoEncoderModule === undefined ) {
36
30
 
37
31
  throw new Error( 'THREE.DRACOExporter: required the draco_encoder to work.' );
@@ -45,13 +39,6 @@ class DRACOExporter {
45
39
  let builder;
46
40
  let dracoObject;
47
41
 
48
-
49
- if ( geometry.isBufferGeometry !== true ) {
50
-
51
- throw new Error( 'THREE.DRACOExporter.parse(geometry, options): geometry is not a THREE.BufferGeometry instance.' );
52
-
53
- }
54
-
55
42
  if ( object.isMesh === true ) {
56
43
 
57
44
  builder = new dracoEncoder.MeshBuilder();
@@ -4,6 +4,7 @@ import {
4
4
  DoubleSide,
5
5
  InterpolateDiscrete,
6
6
  InterpolateLinear,
7
+ LinearEncoding,
7
8
  LinearFilter,
8
9
  LinearMipmapLinearFilter,
9
10
  LinearMipmapNearestFilter,
@@ -18,10 +19,10 @@ import {
18
19
  RepeatWrapping,
19
20
  Scene,
20
21
  Source,
22
+ sRGBEncoding,
21
23
  Vector3
22
24
  } from 'three';
23
25
 
24
-
25
26
  class GLTFExporter {
26
27
 
27
28
  constructor() {
@@ -40,12 +41,6 @@ class GLTFExporter {
40
41
 
41
42
  } );
42
43
 
43
- this.register( function ( writer ) {
44
-
45
- return new GLTFMaterialsPBRSpecularGlossiness( writer );
46
-
47
- } );
48
-
49
44
  this.register( function ( writer ) {
50
45
 
51
46
  return new GLTFMaterialsTransmissionExtension( writer );
@@ -105,14 +100,6 @@ class GLTFExporter {
105
100
  */
106
101
  parse( input, onDone, onError, options ) {
107
102
 
108
- if ( typeof onError === 'object' ) {
109
-
110
- console.warn( 'THREE.GLTFExporter: parse() expects options as the fourth argument now.' );
111
-
112
- options = onError;
113
-
114
- }
115
-
116
103
  const writer = new GLTFWriter();
117
104
  const plugins = [];
118
105
 
@@ -343,27 +330,15 @@ function getPaddedArrayBuffer( arrayBuffer, paddingByte = 0 ) {
343
330
 
344
331
  }
345
332
 
346
- let cachedCanvas = null;
347
-
348
333
  function getCanvas() {
349
334
 
350
- if ( cachedCanvas ) {
351
-
352
- return cachedCanvas;
353
-
354
- }
355
-
356
335
  if ( typeof document === 'undefined' && typeof OffscreenCanvas !== 'undefined' ) {
357
336
 
358
- cachedCanvas = new OffscreenCanvas( 1, 1 );
359
-
360
- } else {
361
-
362
- cachedCanvas = document.createElement( 'canvas' );
337
+ return new OffscreenCanvas( 1, 1 );
363
338
 
364
339
  }
365
340
 
366
- return cachedCanvas;
341
+ return document.createElement( 'canvas' );
367
342
 
368
343
  }
369
344
 
@@ -457,7 +432,6 @@ class GLTFWriter {
457
432
  binary: false,
458
433
  trs: false,
459
434
  onlyVisible: true,
460
- truncateDrawRange: true,
461
435
  maxTextureSize: Infinity,
462
436
  animations: [],
463
437
  includeCustomExtensions: false
@@ -744,6 +718,26 @@ class GLTFWriter {
744
718
 
745
719
  if ( metalnessMap === roughnessMap ) return metalnessMap;
746
720
 
721
+ function getEncodingConversion( map ) {
722
+
723
+ if ( map.encoding === sRGBEncoding ) {
724
+
725
+ return function SRGBToLinear( c ) {
726
+
727
+ return ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );
728
+
729
+ };
730
+
731
+ }
732
+
733
+ return function LinearToLinear( c ) {
734
+
735
+ return c;
736
+
737
+ };
738
+
739
+ }
740
+
747
741
  console.warn( 'THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures.' );
748
742
 
749
743
  const metalness = metalnessMap?.image;
@@ -766,11 +760,12 @@ class GLTFWriter {
766
760
 
767
761
  context.drawImage( metalness, 0, 0, width, height );
768
762
 
763
+ const convert = getEncodingConversion( metalnessMap );
769
764
  const data = context.getImageData( 0, 0, width, height ).data;
770
765
 
771
766
  for ( let i = 2; i < data.length; i += 4 ) {
772
767
 
773
- composite.data[ i ] = data[ i ];
768
+ composite.data[ i ] = convert( data[ i ] / 256 ) * 256;
774
769
 
775
770
  }
776
771
 
@@ -780,11 +775,12 @@ class GLTFWriter {
780
775
 
781
776
  context.drawImage( roughness, 0, 0, width, height );
782
777
 
778
+ const convert = getEncodingConversion( roughnessMap );
783
779
  const data = context.getImageData( 0, 0, width, height ).data;
784
780
 
785
781
  for ( let i = 1; i < data.length; i += 4 ) {
786
782
 
787
- composite.data[ i ] = data[ i ];
783
+ composite.data[ i ] = convert( data[ i ] / 256 ) * 256;
788
784
 
789
785
  }
790
786
 
@@ -799,6 +795,7 @@ class GLTFWriter {
799
795
  const texture = reference.clone();
800
796
 
801
797
  texture.source = new Source( canvas );
798
+ texture.encoding = LinearEncoding;
802
799
 
803
800
  return texture;
804
801
 
@@ -983,7 +980,6 @@ class GLTFWriter {
983
980
  */
984
981
  processAccessor( attribute, geometry, start, count ) {
985
982
 
986
- const options = this.options;
987
983
  const json = this.json;
988
984
 
989
985
  const types = {
@@ -1024,21 +1020,6 @@ class GLTFWriter {
1024
1020
  if ( start === undefined ) start = 0;
1025
1021
  if ( count === undefined ) count = attribute.count;
1026
1022
 
1027
- // @TODO Indexed buffer geometry with drawRange not supported yet
1028
- if ( options.truncateDrawRange && geometry !== undefined && geometry.index === null ) {
1029
-
1030
- const end = start + count;
1031
- const end2 = geometry.drawRange.count === Infinity
1032
- ? attribute.count
1033
- : geometry.drawRange.start + geometry.drawRange.count;
1034
-
1035
- start = Math.max( start, geometry.drawRange.start );
1036
- count = Math.min( end, end2 ) - start;
1037
-
1038
- if ( count < 0 ) count = 0;
1039
-
1040
- }
1041
-
1042
1023
  // Skip creating an accessor if the attribute doesn't have data to export
1043
1024
  if ( count === 0 ) return null;
1044
1025
 
@@ -1482,12 +1463,6 @@ class GLTFWriter {
1482
1463
 
1483
1464
  }
1484
1465
 
1485
- if ( geometry.isBufferGeometry !== true ) {
1486
-
1487
- throw new Error( 'THREE.GLTFExporter: Geometry is not of type THREE.BufferGeometry.' );
1488
-
1489
- }
1490
-
1491
1466
  const meshDef = {};
1492
1467
  const attributes = {};
1493
1468
  const primitives = [];
@@ -2300,62 +2275,6 @@ class GLTFMaterialsUnlitExtension {
2300
2275
 
2301
2276
  }
2302
2277
 
2303
- /**
2304
- * Specular-Glossiness Extension
2305
- *
2306
- * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Archived/KHR_materials_pbrSpecularGlossiness
2307
- */
2308
- class GLTFMaterialsPBRSpecularGlossiness {
2309
-
2310
- constructor( writer ) {
2311
-
2312
- this.writer = writer;
2313
- this.name = 'KHR_materials_pbrSpecularGlossiness';
2314
-
2315
- }
2316
-
2317
- writeMaterial( material, materialDef ) {
2318
-
2319
- if ( ! material.isGLTFSpecularGlossinessMaterial ) return;
2320
-
2321
- const writer = this.writer;
2322
- const extensionsUsed = writer.extensionsUsed;
2323
-
2324
- const extensionDef = {};
2325
-
2326
- if ( materialDef.pbrMetallicRoughness.baseColorFactor ) {
2327
-
2328
- extensionDef.diffuseFactor = materialDef.pbrMetallicRoughness.baseColorFactor;
2329
-
2330
- }
2331
-
2332
- const specularFactor = [ 1, 1, 1 ];
2333
- material.specular.toArray( specularFactor, 0 );
2334
- extensionDef.specularFactor = specularFactor;
2335
- extensionDef.glossinessFactor = material.glossiness;
2336
-
2337
- if ( materialDef.pbrMetallicRoughness.baseColorTexture ) {
2338
-
2339
- extensionDef.diffuseTexture = materialDef.pbrMetallicRoughness.baseColorTexture;
2340
-
2341
- }
2342
-
2343
- if ( material.specularMap ) {
2344
-
2345
- const specularMapDef = { index: writer.processTexture( material.specularMap ) };
2346
- writer.applyTextureTransform( specularMapDef, material.specularMap );
2347
- extensionDef.specularGlossinessTexture = specularMapDef;
2348
-
2349
- }
2350
-
2351
- materialDef.extensions = materialDef.extensions || {};
2352
- materialDef.extensions[ this.name ] = extensionDef;
2353
- extensionsUsed[ this.name ] = true;
2354
-
2355
- }
2356
-
2357
- }
2358
-
2359
2278
  /**
2360
2279
  * Clearcoat Materials Extension
2361
2280
  *
@@ -39,46 +39,46 @@ import {
39
39
  VK_FORMAT_R8G8_UNORM,
40
40
  VK_FORMAT_R8G8B8A8_SRGB,
41
41
  VK_FORMAT_R8G8B8A8_UNORM,
42
- } from '../libs/ktx-parse.module.js';
42
+ } from '../libs/ktx-parse.module.js';
43
43
 
44
44
  const VK_FORMAT_MAP = {
45
45
 
46
- [RGBAFormat]: {
47
- [FloatType]: {
48
- [LinearEncoding]: VK_FORMAT_R32G32B32A32_SFLOAT,
46
+ [ RGBAFormat ]: {
47
+ [ FloatType ]: {
48
+ [ LinearEncoding ]: VK_FORMAT_R32G32B32A32_SFLOAT,
49
49
  },
50
- [HalfFloatType]: {
51
- [LinearEncoding]: VK_FORMAT_R16G16B16A16_SFLOAT,
50
+ [ HalfFloatType ]: {
51
+ [ LinearEncoding ]: VK_FORMAT_R16G16B16A16_SFLOAT,
52
52
  },
53
- [UnsignedByteType]: {
54
- [LinearEncoding]: VK_FORMAT_R8G8B8A8_UNORM,
55
- [sRGBEncoding]: VK_FORMAT_R8G8B8A8_SRGB,
53
+ [ UnsignedByteType ]: {
54
+ [ LinearEncoding ]: VK_FORMAT_R8G8B8A8_UNORM,
55
+ [ sRGBEncoding ]: VK_FORMAT_R8G8B8A8_SRGB,
56
56
  },
57
57
  },
58
58
 
59
- [RGFormat]: {
60
- [FloatType]: {
61
- [LinearEncoding]: VK_FORMAT_R32G32_SFLOAT,
59
+ [ RGFormat ]: {
60
+ [ FloatType ]: {
61
+ [ LinearEncoding ]: VK_FORMAT_R32G32_SFLOAT,
62
62
  },
63
- [HalfFloatType]: {
64
- [LinearEncoding]: VK_FORMAT_R16G16_SFLOAT,
63
+ [ HalfFloatType ]: {
64
+ [ LinearEncoding ]: VK_FORMAT_R16G16_SFLOAT,
65
65
  },
66
- [UnsignedByteType]: {
67
- [LinearEncoding]: VK_FORMAT_R8G8_UNORM,
68
- [sRGBEncoding]: VK_FORMAT_R8G8_SRGB,
66
+ [ UnsignedByteType ]: {
67
+ [ LinearEncoding ]: VK_FORMAT_R8G8_UNORM,
68
+ [ sRGBEncoding ]: VK_FORMAT_R8G8_SRGB,
69
69
  },
70
70
  },
71
71
 
72
- [RedFormat]: {
73
- [FloatType]: {
74
- [LinearEncoding]: VK_FORMAT_R32_SFLOAT,
72
+ [ RedFormat ]: {
73
+ [ FloatType ]: {
74
+ [ LinearEncoding ]: VK_FORMAT_R32_SFLOAT,
75
75
  },
76
- [HalfFloatType]: {
77
- [LinearEncoding]: VK_FORMAT_R16_SFLOAT,
76
+ [ HalfFloatType ]: {
77
+ [ LinearEncoding ]: VK_FORMAT_R16_SFLOAT,
78
78
  },
79
- [UnsignedByteType]: {
80
- [LinearEncoding]: VK_FORMAT_R8_SRGB,
81
- [sRGBEncoding]: VK_FORMAT_R8_UNORM,
79
+ [ UnsignedByteType ]: {
80
+ [ LinearEncoding ]: VK_FORMAT_R8_SRGB,
81
+ [ sRGBEncoding ]: VK_FORMAT_R8_UNORM,
82
82
  },
83
83
  },
84
84
 
@@ -195,8 +195,8 @@ export class KTX2Exporter {
195
195
  channelType: channelType,
196
196
  bitOffset: i * array.BYTES_PER_ELEMENT,
197
197
  bitLength: array.BYTES_PER_ELEMENT * 8 - 1,
198
- samplePosition: [0, 0, 0, 0],
199
- sampleLower: texture.type === UnsignedByteType ? 0 : -1,
198
+ samplePosition: [ 0, 0, 0, 0 ],
199
+ sampleLower: texture.type === UnsignedByteType ? 0 : - 1,
200
200
  sampleUpper: texture.type === UnsignedByteType ? 255 : 1,
201
201
 
202
202
  } );
@@ -214,7 +214,7 @@ export class KTX2Exporter {
214
214
 
215
215
  //
216
216
 
217
- container.keyValue['KTXwriter'] = `three.js ${ REVISION }`;
217
+ container.keyValue[ 'KTXwriter' ] = `three.js ${ REVISION }`;
218
218
 
219
219
  //
220
220
 
@@ -250,7 +250,7 @@ function toDataTexture( renderer, rtt ) {
250
250
 
251
251
  renderer.readRenderTargetPixels( rtt, 0, 0, rtt.width, rtt.height, view );
252
252
 
253
- return new DataTexture( view, rtt.width, rt.height, rtt.texture.format, rtt.texture.type );
253
+ return new DataTexture( view, rtt.width, rtt.height, rtt.texture.format, rtt.texture.type );
254
254
 
255
255
  }
256
256
 
@@ -32,12 +32,6 @@ class OBJExporter {
32
32
 
33
33
  const normalMatrixWorld = new Matrix3();
34
34
 
35
- if ( geometry.isBufferGeometry !== true ) {
36
-
37
- throw new Error( 'THREE.OBJExporter: Geometry is not of type THREE.BufferGeometry.' );
38
-
39
- }
40
-
41
35
  // shortcuts
42
36
  const vertices = geometry.getAttribute( 'position' );
43
37
  const normals = geometry.getAttribute( 'normal' );
@@ -159,12 +153,6 @@ class OBJExporter {
159
153
  const geometry = line.geometry;
160
154
  const type = line.type;
161
155
 
162
- if ( geometry.isBufferGeometry !== true ) {
163
-
164
- throw new Error( 'THREE.OBJExporter: Geometry is not of type THREE.BufferGeometry.' );
165
-
166
- }
167
-
168
156
  // shortcuts
169
157
  const vertices = geometry.getAttribute( 'position' );
170
158
 
@@ -222,12 +210,6 @@ class OBJExporter {
222
210
 
223
211
  const geometry = points.geometry;
224
212
 
225
- if ( geometry.isBufferGeometry !== true ) {
226
-
227
- throw new Error( 'THREE.OBJExporter: Geometry is not of type THREE.BufferGeometry.' );
228
-
229
- }
230
-
231
213
  const vertices = geometry.getAttribute( 'position' );
232
214
  const colors = geometry.getAttribute( 'color' );
233
215
 
@@ -21,30 +21,16 @@ class PLYExporter {
21
21
 
22
22
  parse( object, onDone, options ) {
23
23
 
24
- if ( onDone && typeof onDone === 'object' ) {
25
-
26
- console.warn( 'THREE.PLYExporter: The options parameter is now the third argument to the "parse" function. See the documentation for the new API.' );
27
- options = onDone;
28
- onDone = undefined;
29
-
30
- }
31
-
32
24
  // Iterate over the valid meshes in the object
33
25
  function traverseMeshes( cb ) {
34
26
 
35
27
  object.traverse( function ( child ) {
36
28
 
37
- if ( child.isMesh === true ) {
29
+ if ( child.isMesh === true || child.isPoints ) {
38
30
 
39
31
  const mesh = child;
40
32
  const geometry = mesh.geometry;
41
33
 
42
- if ( geometry.isBufferGeometry !== true ) {
43
-
44
- throw new Error( 'THREE.PLYExporter: Geometry is not of type THREE.BufferGeometry.' );
45
-
46
- }
47
-
48
34
  if ( geometry.hasAttribute( 'position' ) === true ) {
49
35
 
50
36
  cb( mesh, geometry );
@@ -67,6 +53,7 @@ class PLYExporter {
67
53
  options = Object.assign( defaultOptions, options );
68
54
 
69
55
  const excludeAttributes = options.excludeAttributes;
56
+ let includeIndices = true;
70
57
  let includeNormals = false;
71
58
  let includeColors = false;
72
59
  let includeUVs = false;
@@ -75,6 +62,7 @@ class PLYExporter {
75
62
  // and cache the BufferGeometry
76
63
  let vertexCount = 0;
77
64
  let faceCount = 0;
65
+
78
66
  object.traverse( function ( child ) {
79
67
 
80
68
  if ( child.isMesh === true ) {
@@ -82,12 +70,6 @@ class PLYExporter {
82
70
  const mesh = child;
83
71
  const geometry = mesh.geometry;
84
72
 
85
- if ( geometry.isBufferGeometry !== true ) {
86
-
87
- throw new Error( 'THREE.PLYExporter: Geometry is not of type THREE.BufferGeometry.' );
88
-
89
- }
90
-
91
73
  const vertices = geometry.getAttribute( 'position' );
92
74
  const normals = geometry.getAttribute( 'normal' );
93
75
  const uvs = geometry.getAttribute( 'uv' );
@@ -109,12 +91,22 @@ class PLYExporter {
109
91
 
110
92
  if ( colors !== undefined ) includeColors = true;
111
93
 
94
+ } else if ( child.isPoints ) {
95
+
96
+ const mesh = child;
97
+ const geometry = mesh.geometry;
98
+
99
+ const vertices = geometry.getAttribute( 'position' );
100
+ vertexCount += vertices.count;
101
+
102
+ includeIndices = false;
103
+
112
104
  }
113
105
 
114
106
  } );
115
107
 
116
108
  const tempColor = new Color();
117
- const includeIndices = excludeAttributes.indexOf( 'index' ) === - 1;
109
+ includeIndices = includeIndices && excludeAttributes.indexOf( 'index' ) === - 1;
118
110
  includeNormals = includeNormals && excludeAttributes.indexOf( 'normal' ) === - 1;
119
111
  includeColors = includeColors && excludeAttributes.indexOf( 'color' ) === - 1;
120
112
  includeUVs = includeUVs && excludeAttributes.indexOf( 'uv' ) === - 1;