super-three 0.141.0 → 0.144.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 (353) hide show
  1. package/README.md +8 -8
  2. package/build/three.cjs +1558 -1034
  3. package/build/three.js +1558 -1034
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +2012 -1243
  6. package/examples/js/animation/MMDPhysics.js +1 -16
  7. package/examples/js/controls/ArcballControls.js +16 -3
  8. package/examples/js/controls/FirstPersonControls.js +0 -7
  9. package/examples/js/controls/FlyControls.js +0 -8
  10. package/examples/js/controls/OrbitControls.js +0 -4
  11. package/examples/js/controls/PointerLockControls.js +0 -8
  12. package/examples/js/controls/TrackballControls.js +0 -2
  13. package/examples/js/controls/TransformControls.js +20 -16
  14. package/examples/js/effects/AnaglyphEffect.js +2 -2
  15. package/examples/js/effects/OutlineEffect.js +4 -24
  16. package/examples/js/effects/ParallaxBarrierEffect.js +2 -2
  17. package/examples/js/effects/PeppersGhostEffect.js +2 -2
  18. package/examples/js/effects/StereoEffect.js +2 -2
  19. package/examples/js/environments/RoomEnvironment.js +22 -0
  20. package/examples/js/exporters/ColladaExporter.js +4 -13
  21. package/examples/js/exporters/DRACOExporter.js +0 -12
  22. package/examples/js/exporters/GLTFExporter.js +28 -29
  23. package/examples/js/exporters/OBJExporter.js +2 -23
  24. package/examples/js/exporters/PLYExporter.js +12 -24
  25. package/examples/js/exporters/STLExporter.js +0 -7
  26. package/examples/js/exporters/USDZExporter.js +6 -0
  27. package/examples/js/geometries/ConvexGeometry.js +1 -1
  28. package/examples/js/geometries/ParametricGeometry.js +1 -8
  29. package/examples/js/interactive/SelectionHelper.js +2 -0
  30. package/examples/js/libs/ktx-parse.umd.js +1 -0
  31. package/examples/js/libs/meshopt_decoder.js +98 -32
  32. package/examples/js/loaders/ColladaLoader.js +1 -0
  33. package/examples/js/loaders/DRACOLoader.js +2 -25
  34. package/examples/js/loaders/EXRLoader.js +2 -13
  35. package/examples/js/loaders/FBXLoader.js +10 -3
  36. package/examples/js/loaders/FontLoader.js +3 -16
  37. package/examples/js/loaders/GLTFLoader.js +52 -36
  38. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -11
  39. package/examples/js/loaders/LDrawLoader.js +139 -74
  40. package/examples/js/loaders/OBJLoader.js +7 -13
  41. package/examples/js/loaders/PCDLoader.js +59 -14
  42. package/examples/js/loaders/PLYLoader.js +3 -3
  43. package/examples/js/loaders/SVGLoader.js +4 -3
  44. package/examples/js/loaders/TIFFLoader.js +31 -0
  45. package/examples/js/loaders/VRMLLoader.js +33 -24
  46. package/examples/js/loaders/VTKLoader.js +1 -1
  47. package/examples/js/loaders/lwo/LWO2Parser.js +8 -7
  48. package/examples/js/loaders/lwo/LWO3Parser.js +8 -7
  49. package/examples/js/materials/MeshGouraudMaterial.js +385 -0
  50. package/examples/js/math/ColorConverter.js +0 -50
  51. package/examples/js/misc/GPUComputationRenderer.js +23 -0
  52. package/examples/js/misc/Volume.js +198 -190
  53. package/examples/js/misc/VolumeSlice.js +90 -88
  54. package/examples/js/modifiers/SimplifyModifier.js +1 -1
  55. package/examples/js/objects/GroundProjectedEnv.js +193 -0
  56. package/examples/js/objects/Reflector.js +9 -2
  57. package/examples/js/objects/ReflectorForSSRPass.js +3 -4
  58. package/examples/js/objects/Refractor.js +10 -4
  59. package/examples/js/objects/ShadowMesh.js +5 -1
  60. package/examples/js/postprocessing/OutlinePass.js +5 -3
  61. package/examples/js/renderers/CSS2DRenderer.js +2 -2
  62. package/examples/js/renderers/CSS3DRenderer.js +2 -2
  63. package/examples/js/renderers/Projector.js +2 -23
  64. package/examples/js/shaders/LuminosityShader.js +1 -1
  65. package/examples/js/shaders/MMDToonShader.js +6 -2
  66. package/examples/js/shaders/ToneMapShader.js +1 -1
  67. package/examples/js/utils/BufferGeometryUtils.js +1 -1
  68. package/examples/js/utils/GeometryUtils.js +2 -18
  69. package/examples/js/utils/PackedPhongMaterial.js +1 -1
  70. package/examples/js/utils/SceneUtils.js +0 -16
  71. package/examples/jsm/animation/MMDPhysics.js +3 -22
  72. package/examples/jsm/controls/ArcballControls.js +17 -2
  73. package/examples/jsm/controls/FirstPersonControls.js +0 -7
  74. package/examples/jsm/controls/FlyControls.js +0 -7
  75. package/examples/jsm/controls/OrbitControls.js +0 -5
  76. package/examples/jsm/controls/PointerLockControls.js +0 -7
  77. package/examples/jsm/controls/TrackballControls.js +0 -3
  78. package/examples/jsm/controls/TransformControls.js +18 -16
  79. package/examples/jsm/effects/AnaglyphEffect.js +2 -2
  80. package/examples/jsm/effects/OutlineEffect.js +4 -25
  81. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -2
  82. package/examples/jsm/effects/PeppersGhostEffect.js +2 -2
  83. package/examples/jsm/effects/StereoEffect.js +2 -2
  84. package/examples/jsm/environments/RoomEnvironment.js +23 -0
  85. package/examples/jsm/exporters/ColladaExporter.js +4 -13
  86. package/examples/jsm/exporters/DRACOExporter.js +0 -13
  87. package/examples/jsm/exporters/GLTFExporter.js +29 -31
  88. package/examples/jsm/exporters/KTX2Exporter.js +29 -29
  89. package/examples/jsm/exporters/OBJExporter.js +0 -18
  90. package/examples/jsm/exporters/PLYExporter.js +14 -22
  91. package/examples/jsm/exporters/STLExporter.js +1 -9
  92. package/examples/jsm/exporters/USDZExporter.js +14 -3
  93. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  94. package/examples/jsm/geometries/ParametricGeometry.js +0 -6
  95. package/examples/jsm/interactive/HTMLMesh.js +9 -9
  96. package/examples/jsm/interactive/SelectionHelper.js +5 -3
  97. package/examples/jsm/libs/meshopt_decoder.module.js +97 -32
  98. package/examples/jsm/libs/utif.module.js +1579 -0
  99. package/examples/jsm/libs/zstddec.module.js +1 -0
  100. package/examples/jsm/loaders/ColladaLoader.js +1 -0
  101. package/examples/jsm/loaders/DRACOLoader.js +2 -28
  102. package/examples/jsm/loaders/EXRLoader.js +3 -13
  103. package/examples/jsm/loaders/FBXLoader.js +10 -3
  104. package/examples/jsm/loaders/FontLoader.js +3 -16
  105. package/examples/jsm/loaders/GLTFLoader.js +52 -36
  106. package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
  107. package/examples/jsm/loaders/KTX2Loader.js +192 -30
  108. package/examples/jsm/loaders/LDrawLoader.js +135 -74
  109. package/examples/jsm/loaders/OBJLoader.js +6 -14
  110. package/examples/jsm/loaders/PCDLoader.js +59 -13
  111. package/examples/jsm/loaders/PLYLoader.js +3 -3
  112. package/examples/jsm/loaders/RGBELoader.js +1 -1
  113. package/examples/jsm/loaders/SVGLoader.js +4 -3
  114. package/examples/jsm/loaders/TIFFLoader.js +36 -0
  115. package/examples/jsm/loaders/USDZLoader.js +393 -0
  116. package/examples/jsm/loaders/VRMLLoader.js +23 -25
  117. package/examples/jsm/loaders/VTKLoader.js +1 -1
  118. package/examples/jsm/loaders/lwo/LWO2Parser.js +6 -8
  119. package/examples/jsm/loaders/lwo/LWO3Parser.js +6 -8
  120. package/examples/jsm/materials/MeshGouraudMaterial.js +423 -0
  121. package/examples/jsm/math/ColorConverter.js +1 -49
  122. package/examples/jsm/misc/GPUComputationRenderer.js +43 -0
  123. package/examples/jsm/misc/Volume.js +169 -171
  124. package/examples/jsm/misc/VolumeSlice.js +78 -80
  125. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  126. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +1 -1
  127. package/examples/jsm/node-editor/accessors/NormalEditor.js +1 -1
  128. package/examples/jsm/node-editor/accessors/PositionEditor.js +1 -1
  129. package/examples/jsm/node-editor/accessors/UVEditor.js +1 -1
  130. package/examples/jsm/node-editor/display/BlendEditor.js +1 -1
  131. package/examples/jsm/node-editor/display/NormalMapEditor.js +1 -1
  132. package/examples/jsm/node-editor/inputs/ColorEditor.js +1 -1
  133. package/examples/jsm/node-editor/inputs/FloatEditor.js +1 -1
  134. package/examples/jsm/node-editor/inputs/SliderEditor.js +1 -1
  135. package/examples/jsm/node-editor/inputs/TextureEditor.js +1 -1
  136. package/examples/jsm/node-editor/inputs/Vector2Editor.js +1 -1
  137. package/examples/jsm/node-editor/inputs/Vector3Editor.js +1 -1
  138. package/examples/jsm/node-editor/inputs/Vector4Editor.js +1 -1
  139. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +1 -1
  140. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +1 -1
  141. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +1 -1
  142. package/examples/jsm/node-editor/math/AngleEditor.js +1 -1
  143. package/examples/jsm/node-editor/math/DotEditor.js +1 -1
  144. package/examples/jsm/node-editor/math/InvertEditor.js +1 -1
  145. package/examples/jsm/node-editor/math/LimiterEditor.js +1 -1
  146. package/examples/jsm/node-editor/math/NormalizeEditor.js +1 -1
  147. package/examples/jsm/node-editor/math/OperatorEditor.js +1 -1
  148. package/examples/jsm/node-editor/math/PowerEditor.js +1 -1
  149. package/examples/jsm/node-editor/math/TrigonometryEditor.js +1 -1
  150. package/examples/jsm/node-editor/procedural/CheckerEditor.js +1 -1
  151. package/examples/jsm/node-editor/utils/JoinEditor.js +1 -1
  152. package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
  153. package/examples/jsm/node-editor/utils/PreviewEditor.js +3 -3
  154. package/examples/jsm/node-editor/utils/SplitEditor.js +1 -1
  155. package/examples/jsm/node-editor/utils/TimerEditor.js +1 -1
  156. package/examples/jsm/nodes/Nodes.js +43 -13
  157. package/examples/jsm/nodes/accessors/CubeTextureNode.js +9 -5
  158. package/examples/jsm/nodes/accessors/NormalNode.js +4 -4
  159. package/examples/jsm/nodes/accessors/PositionNode.js +5 -5
  160. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
  161. package/examples/jsm/nodes/core/AttributeNode.js +3 -3
  162. package/examples/jsm/nodes/core/CodeNode.js +3 -3
  163. package/examples/jsm/nodes/core/FunctionCallNode.js +20 -5
  164. package/examples/jsm/nodes/core/FunctionNode.js +2 -2
  165. package/examples/jsm/nodes/core/Node.js +14 -12
  166. package/examples/jsm/nodes/core/NodeBuilder.js +12 -12
  167. package/examples/jsm/nodes/core/NodeUtils.js +23 -1
  168. package/examples/jsm/nodes/core/{NodeVary.js → NodeVarying.js} +3 -3
  169. package/examples/jsm/nodes/core/{VaryNode.js → VaryingNode.js} +7 -7
  170. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +94 -0
  171. package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
  172. package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -0
  173. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -7
  174. package/examples/jsm/nodes/lighting/LightingContextNode.js +4 -4
  175. package/examples/jsm/nodes/loaders/NodeLoader.js +2 -2
  176. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +31 -0
  177. package/examples/jsm/nodes/materials/Materials.js +13 -25
  178. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +70 -0
  179. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +4 -7
  180. package/examples/jsm/nodes/materials/NodeMaterial.js +2 -2
  181. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +28 -17
  182. package/examples/jsm/nodes/materialx/Disclaimer.md +199 -0
  183. package/examples/jsm/nodes/materialx/functions/lib/mx_hsv.js +56 -0
  184. package/examples/jsm/nodes/materialx/functions/lib/mx_noise.js +607 -0
  185. package/examples/jsm/nodes/math/MathNode.js +2 -12
  186. package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +21 -6
  187. package/examples/jsm/nodes/procedural/CheckerNode.js +2 -2
  188. package/examples/jsm/nodes/shadernode/ShaderNode.js +5 -5
  189. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +8 -5
  190. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +20 -6
  191. package/examples/jsm/nodes/utils/ConvertNode.js +8 -3
  192. package/examples/jsm/nodes/utils/JoinNode.js +7 -7
  193. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +2 -1
  194. package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
  195. package/examples/jsm/nodes/utils/SplitNode.js +21 -5
  196. package/examples/jsm/nodes/utils/TimerNode.js +2 -2
  197. package/examples/jsm/objects/GroundProjectedEnv.js +186 -0
  198. package/examples/jsm/objects/Reflector.js +12 -5
  199. package/examples/jsm/objects/ReflectorForSSRPass.js +3 -5
  200. package/examples/jsm/objects/Refractor.js +12 -6
  201. package/examples/jsm/objects/ShadowMesh.js +8 -2
  202. package/examples/jsm/postprocessing/OutlinePass.js +5 -3
  203. package/examples/jsm/renderers/CSS2DRenderer.js +2 -2
  204. package/examples/jsm/renderers/CSS3DRenderer.js +2 -2
  205. package/examples/jsm/renderers/Projector.js +2 -24
  206. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +9 -5
  207. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +329 -218
  208. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +7 -3
  209. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +39 -3
  210. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +6 -0
  211. package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +6 -0
  212. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  213. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +17 -19
  214. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +16 -14
  215. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +2 -2
  216. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +66 -81
  217. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +5 -3
  218. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +2 -2
  219. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +81 -0
  220. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +25 -30
  221. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  222. package/examples/jsm/shaders/LuminosityShader.js +1 -1
  223. package/examples/jsm/shaders/MMDToonShader.js +2 -2
  224. package/examples/jsm/shaders/ToneMapShader.js +1 -1
  225. package/examples/jsm/utils/BufferGeometryUtils.js +2 -1
  226. package/examples/jsm/utils/GeometryUtils.js +17 -25
  227. package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
  228. package/examples/jsm/utils/SceneUtils.js +1 -21
  229. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -1
  230. package/examples/jsm/webxr/VRButton.js +1 -7
  231. package/package.json +18 -14
  232. package/src/Three.Legacy.js +262 -36
  233. package/src/Three.js +3 -2
  234. package/src/animation/AnimationAction.js +6 -5
  235. package/src/animation/AnimationClip.js +1 -1
  236. package/src/animation/AnimationMixer.js +1 -1
  237. package/src/animation/AnimationUtils.js +204 -199
  238. package/src/animation/KeyframeTrack.js +1 -1
  239. package/src/animation/PropertyBinding.js +24 -5
  240. package/src/cameras/CubeCamera.js +0 -7
  241. package/src/constants.js +2 -4
  242. package/src/core/BufferAttribute.js +81 -111
  243. package/src/core/BufferGeometry.js +3 -41
  244. package/src/core/InstancedBufferAttribute.js +0 -10
  245. package/src/core/InterleavedBuffer.js +1 -1
  246. package/src/core/InterleavedBufferAttribute.js +56 -7
  247. package/src/core/Object3D.js +22 -5
  248. package/src/core/Uniform.js +0 -7
  249. package/src/core/UniformsGroup.js +92 -0
  250. package/src/extras/DataUtils.js +104 -88
  251. package/src/extras/core/Path.js +1 -0
  252. package/src/extras/core/ShapePath.js +1 -4
  253. package/src/extras/curves/CatmullRomCurve3.js +4 -2
  254. package/src/geometries/BoxGeometry.js +1 -1
  255. package/src/geometries/CapsuleGeometry.js +1 -1
  256. package/src/geometries/CircleGeometry.js +1 -1
  257. package/src/geometries/ConeGeometry.js +1 -1
  258. package/src/geometries/CylinderGeometry.js +2 -1
  259. package/src/geometries/DodecahedronGeometry.js +1 -1
  260. package/src/geometries/EdgesGeometry.js +5 -4
  261. package/src/geometries/ExtrudeGeometry.js +2 -11
  262. package/src/geometries/IcosahedronGeometry.js +1 -1
  263. package/src/geometries/LatheGeometry.js +2 -2
  264. package/src/geometries/OctahedronGeometry.js +1 -1
  265. package/src/geometries/PlaneGeometry.js +2 -1
  266. package/src/geometries/PolyhedronGeometry.js +1 -1
  267. package/src/geometries/RingGeometry.js +1 -1
  268. package/src/geometries/ShapeGeometry.js +2 -1
  269. package/src/geometries/SphereGeometry.js +2 -1
  270. package/src/geometries/TetrahedronGeometry.js +1 -1
  271. package/src/geometries/TorusGeometry.js +2 -1
  272. package/src/geometries/TorusKnotGeometry.js +2 -1
  273. package/src/geometries/TubeGeometry.js +2 -1
  274. package/src/geometries/WireframeGeometry.js +1 -0
  275. package/src/helpers/CameraHelper.js +97 -38
  276. package/src/helpers/DirectionalLightHelper.js +1 -0
  277. package/src/helpers/HemisphereLightHelper.js +1 -0
  278. package/src/helpers/PlaneHelper.js +6 -9
  279. package/src/helpers/PolarGridHelper.js +18 -14
  280. package/src/helpers/SpotLightHelper.js +1 -0
  281. package/src/lights/SpotLight.js +2 -0
  282. package/src/loaders/FileLoader.js +12 -1
  283. package/src/loaders/LoadingManager.js +1 -1
  284. package/src/loaders/MaterialLoader.js +49 -7
  285. package/src/loaders/ObjectLoader.js +4 -41
  286. package/src/materials/Material.js +1 -33
  287. package/src/materials/Materials.js +0 -27
  288. package/src/materials/MeshLambertMaterial.js +28 -1
  289. package/src/materials/ShaderMaterial.js +3 -7
  290. package/src/math/Color.js +3 -13
  291. package/src/math/MathUtils.js +1 -7
  292. package/src/math/Matrix3.js +1 -7
  293. package/src/math/Matrix4.js +3 -27
  294. package/src/math/Quaternion.js +1 -21
  295. package/src/math/Vector2.js +4 -24
  296. package/src/math/Vector3.js +7 -46
  297. package/src/math/Vector4.js +4 -24
  298. package/src/renderers/WebGLRenderer.js +84 -8
  299. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +12 -12
  300. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -5
  301. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -5
  302. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +24 -24
  303. package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +1 -1
  304. package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +1 -1
  305. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +2 -1
  306. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +113 -99
  307. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +34 -12
  308. package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
  309. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +30 -0
  310. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +3 -1
  311. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +13 -1
  312. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -4
  313. package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
  314. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +18 -7
  315. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +8 -3
  316. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +9 -6
  317. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  318. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +14 -10
  319. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +1 -1
  320. package/src/renderers/shaders/ShaderChunk.js +4 -2
  321. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +0 -1
  322. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +22 -50
  323. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  324. package/src/renderers/shaders/ShaderLib.js +31 -31
  325. package/src/renderers/shaders/UniformsLib.js +12 -11
  326. package/src/renderers/shaders/UniformsUtils.js +14 -0
  327. package/src/renderers/webgl/WebGLBackground.js +2 -2
  328. package/src/renderers/webgl/WebGLLights.js +37 -13
  329. package/src/renderers/webgl/WebGLMorphtargets.js +0 -20
  330. package/src/renderers/webgl/WebGLProgram.js +6 -11
  331. package/src/renderers/webgl/WebGLPrograms.js +30 -26
  332. package/src/renderers/webgl/WebGLRenderLists.js +5 -4
  333. package/src/renderers/webgl/WebGLRenderStates.js +5 -4
  334. package/src/renderers/webgl/WebGLShaderCache.js +9 -6
  335. package/src/renderers/webgl/WebGLShadowMap.js +10 -15
  336. package/src/renderers/webgl/WebGLState.js +47 -0
  337. package/src/renderers/webgl/WebGLUniforms.js +4 -4
  338. package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
  339. package/src/renderers/webgl/WebGLUtils.js +2 -0
  340. package/src/renderers/webvr/WebVRManager.js +42 -9
  341. package/src/renderers/webvr/WebVRUtils.js +1 -1
  342. package/src/renderers/webxr/WebXRController.js +45 -37
  343. package/src/renderers/webxr/WebXRManager.js +58 -33
  344. package/src/scenes/Scene.js +16 -3
  345. package/src/textures/Source.js +1 -1
  346. package/src/utils.js +1 -1
  347. package/examples/js/controls/experimental/CameraControls.js +0 -1048
  348. package/examples/js/loaders/KTX2Loader.js +0 -558
  349. package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
  350. package/examples/jsm/nodes/accessors/ReflectNode.js +0 -70
  351. package/examples/jsm/package.json +0 -3
  352. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
  353. package/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js +0 -122
@@ -1213,7 +1213,7 @@
1213
1213
  return new THREE.BoxGeometry( param.width * 2, param.height * 2, param.depth * 2, 8, 8, 8 );
1214
1214
 
1215
1215
  case 2:
1216
- return new createCapsuleGeometry( param.width, param.height, 16, 8 );
1216
+ return new THREE.CapsuleGeometry( param.width, param.height, 8, 16 );
1217
1217
 
1218
1218
  default:
1219
1219
  return null;
@@ -1222,21 +1222,6 @@
1222
1222
 
1223
1223
  }
1224
1224
 
1225
- function createCapsuleGeometry( radius, cylinderHeight, segmentsRadius, segmentsHeight ) {
1226
-
1227
- var geometry = new THREE.CylinderGeometry( radius, radius, cylinderHeight, segmentsRadius, segmentsHeight, true );
1228
- var upperSphere = new THREE.Mesh( new THREE.SphereGeometry( radius, segmentsRadius, segmentsHeight, 0, Math.PI * 2, 0, Math.PI / 2 ) );
1229
- var lowerSphere = new THREE.Mesh( new THREE.SphereGeometry( radius, segmentsRadius, segmentsHeight, 0, Math.PI * 2, Math.PI / 2, Math.PI / 2 ) );
1230
- upperSphere.position.set( 0, cylinderHeight / 2, 0 );
1231
- lowerSphere.position.set( 0, - cylinderHeight / 2, 0 );
1232
- upperSphere.updateMatrix();
1233
- lowerSphere.updateMatrix();
1234
- geometry.merge( upperSphere.geometry, upperSphere.matrix );
1235
- geometry.merge( lowerSphere.geometry, lowerSphere.matrix );
1236
- return geometry;
1237
-
1238
- }
1239
-
1240
1225
  for ( var i = 0, il = bodies.length; i < il; i ++ ) {
1241
1226
 
1242
1227
  var param = bodies[ i ].params;
@@ -1850,7 +1850,7 @@
1850
1850
 
1851
1851
  this._gizmoMatrixState.copy( this._gizmoMatrixState0 );
1852
1852
 
1853
- if ( this.camera.zoom != 1 ) {
1853
+ if ( this.camera.zoom !== 1 ) {
1854
1854
 
1855
1855
  //adapt gizmos size to camera zoom
1856
1856
  const size = 1 / this.camera.zoom;
@@ -1867,9 +1867,22 @@
1867
1867
 
1868
1868
  }
1869
1869
 
1870
- this._gizmoMatrixState.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale );
1870
+ this._gizmoMatrixState.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale ); //
1871
+
1872
+
1873
+ this._gizmos.traverse( function ( object ) {
1874
+
1875
+ if ( object.isLine ) {
1876
+
1877
+ object.geometry.dispose();
1878
+ object.material.dispose();
1879
+
1880
+ }
1881
+
1882
+ } );
1883
+
1884
+ this._gizmos.clear(); //
1871
1885
 
1872
- this._gizmos.clear();
1873
1886
 
1874
1887
  this._gizmos.add( gizmoX );
1875
1888
 
@@ -10,13 +10,6 @@
10
10
 
11
11
  constructor( object, domElement ) {
12
12
 
13
- if ( domElement === undefined ) {
14
-
15
- console.warn( 'THREE.FirstPersonControls: The second parameter "domElement" is now mandatory.' );
16
- domElement = document;
17
-
18
- }
19
-
20
13
  this.object = object;
21
14
  this.domElement = domElement; // API
22
15
 
@@ -9,14 +9,6 @@
9
9
  constructor( object, domElement ) {
10
10
 
11
11
  super();
12
-
13
- if ( domElement === undefined ) {
14
-
15
- console.warn( 'THREE.FlyControls: The second parameter "domElement" is now mandatory.' );
16
- domElement = document;
17
-
18
- }
19
-
20
12
  this.object = object;
21
13
  this.domElement = domElement; // API
22
14
 
@@ -21,8 +21,6 @@
21
21
  constructor( object, domElement ) {
22
22
 
23
23
  super();
24
- if ( domElement === undefined ) console.warn( 'THREE.OrbitControls: The second parameter "domElement" is now mandatory.' );
25
- if ( domElement === document ) console.error( 'THREE.OrbitControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.' );
26
24
  this.object = object;
27
25
  this.domElement = domElement;
28
26
  this.domElement.style.touchAction = 'none'; // disable touch scroll
@@ -844,8 +842,6 @@
844
842
 
845
843
  function onMouseMove( event ) {
846
844
 
847
- if ( scope.enabled === false ) return;
848
-
849
845
  switch ( state ) {
850
846
 
851
847
  case STATE.ROTATE:
@@ -21,14 +21,6 @@
21
21
  constructor( camera, domElement ) {
22
22
 
23
23
  super();
24
-
25
- if ( domElement === undefined ) {
26
-
27
- console.warn( 'THREE.PointerLockControls: The second parameter "domElement" is now mandatory.' );
28
- domElement = document.body;
29
-
30
- }
31
-
32
24
  this.domElement = domElement;
33
25
  this.isLocked = false; // Set to constrain the pitch of the camera
34
26
  // Range is 0 to Math.PI radians
@@ -15,8 +15,6 @@
15
15
  constructor( object, domElement ) {
16
16
 
17
17
  super();
18
- if ( domElement === undefined ) console.warn( 'THREE.TrackballControls: The second parameter "domElement" is now mandatory.' );
19
- if ( domElement === document ) console.error( 'THREE.TrackballControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.' );
20
18
  const scope = this;
21
19
  const STATE = {
22
20
  NONE: - 1,
@@ -181,7 +181,17 @@
181
181
 
182
182
  this.camera.updateMatrixWorld();
183
183
  this.camera.matrixWorld.decompose( this.cameraPosition, this.cameraQuaternion, this._cameraScale );
184
- this.eye.copy( this.cameraPosition ).sub( this.worldPosition ).normalize();
184
+
185
+ if ( this.camera.isOrthographicCamera ) {
186
+
187
+ this.camera.getWorldDirection( this.eye );
188
+
189
+ } else {
190
+
191
+ this.eye.copy( this.cameraPosition ).sub( this.worldPosition ).normalize();
192
+
193
+ }
194
+
185
195
  super.updateMatrixWorld( this );
186
196
 
187
197
  }
@@ -521,7 +531,7 @@
521
531
  this.visible = true;
522
532
  return this;
523
533
 
524
- } // Detatch from object
534
+ } // Detach from object
525
535
 
526
536
 
527
537
  detach() {
@@ -599,12 +609,6 @@
599
609
 
600
610
  }
601
611
 
602
- update() {
603
-
604
- console.warn( 'THREE.TransformControls: update function has no more functionality and therefore has been deprecated.' );
605
-
606
- }
607
-
608
612
  } // mouse / touch event handlers
609
613
 
610
614
 
@@ -1109,12 +1113,12 @@
1109
1113
  if ( this.mode === 'translate' || this.mode === 'scale' ) {
1110
1114
 
1111
1115
  // Hide translate and scale axis facing the camera
1112
- const AXIS_HIDE_TRESHOLD = 0.99;
1113
- const PLANE_HIDE_TRESHOLD = 0.2;
1116
+ const AXIS_HIDE_THRESHOLD = 0.99;
1117
+ const PLANE_HIDE_THRESHOLD = 0.2;
1114
1118
 
1115
1119
  if ( handle.name === 'X' ) {
1116
1120
 
1117
- if ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_TRESHOLD ) {
1121
+ if ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_THRESHOLD ) {
1118
1122
 
1119
1123
  handle.scale.set( 1e-10, 1e-10, 1e-10 );
1120
1124
  handle.visible = false;
@@ -1125,7 +1129,7 @@
1125
1129
 
1126
1130
  if ( handle.name === 'Y' ) {
1127
1131
 
1128
- if ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_TRESHOLD ) {
1132
+ if ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_THRESHOLD ) {
1129
1133
 
1130
1134
  handle.scale.set( 1e-10, 1e-10, 1e-10 );
1131
1135
  handle.visible = false;
@@ -1136,7 +1140,7 @@
1136
1140
 
1137
1141
  if ( handle.name === 'Z' ) {
1138
1142
 
1139
- if ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_TRESHOLD ) {
1143
+ if ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_THRESHOLD ) {
1140
1144
 
1141
1145
  handle.scale.set( 1e-10, 1e-10, 1e-10 );
1142
1146
  handle.visible = false;
@@ -1147,7 +1151,7 @@
1147
1151
 
1148
1152
  if ( handle.name === 'XY' ) {
1149
1153
 
1150
- if ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_TRESHOLD ) {
1154
+ if ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_THRESHOLD ) {
1151
1155
 
1152
1156
  handle.scale.set( 1e-10, 1e-10, 1e-10 );
1153
1157
  handle.visible = false;
@@ -1158,7 +1162,7 @@
1158
1162
 
1159
1163
  if ( handle.name === 'YZ' ) {
1160
1164
 
1161
- if ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_TRESHOLD ) {
1165
+ if ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_THRESHOLD ) {
1162
1166
 
1163
1167
  handle.scale.set( 1e-10, 1e-10, 1e-10 );
1164
1168
  handle.visible = false;
@@ -1169,7 +1173,7 @@
1169
1173
 
1170
1174
  if ( handle.name === 'XZ' ) {
1171
1175
 
1172
- if ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_TRESHOLD ) {
1176
+ if ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_THRESHOLD ) {
1173
1177
 
1174
1178
  handle.scale.set( 1e-10, 1e-10, 1e-10 );
1175
1179
  handle.visible = false;
@@ -62,8 +62,8 @@
62
62
  this.render = function ( scene, camera ) {
63
63
 
64
64
  const currentRenderTarget = renderer.getRenderTarget();
65
- scene.updateMatrixWorld();
66
- if ( camera.parent === null ) camera.updateMatrixWorld();
65
+ if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
66
+ if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
67
67
 
68
68
  _stereo.update( camera );
69
69
 
@@ -49,7 +49,7 @@
49
49
  * // How to set outline parameters for each material
50
50
  * material.userData.outlineParameters = {
51
51
  * thickness: 0.01,
52
- * color: [ 0, 0, 0 ]
52
+ * color: [ 0, 0, 0 ],
53
53
  * alpha: 0.8,
54
54
  * visible: true,
55
55
  * keepAlive: true
@@ -336,26 +336,6 @@
336
336
 
337
337
  this.render = function ( scene, camera ) {
338
338
 
339
- let renderTarget;
340
- let forceClear = false;
341
-
342
- if ( arguments[ 2 ] !== undefined ) {
343
-
344
- console.warn( 'THREE.OutlineEffect.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.' );
345
- renderTarget = arguments[ 2 ];
346
-
347
- }
348
-
349
- if ( arguments[ 3 ] !== undefined ) {
350
-
351
- console.warn( 'THREE.OutlineEffect.render(): the forceClear argument has been removed. Use .clear() instead.' );
352
- forceClear = arguments[ 3 ];
353
-
354
- }
355
-
356
- if ( renderTarget !== undefined ) renderer.setRenderTarget( renderTarget );
357
- if ( forceClear ) renderer.clear();
358
-
359
339
  if ( this.enabled === false ) {
360
340
 
361
341
  renderer.render( scene, camera );
@@ -374,10 +354,10 @@
374
354
  this.renderOutline = function ( scene, camera ) {
375
355
 
376
356
  const currentAutoClear = renderer.autoClear;
377
- const currentSceneAutoUpdate = scene.autoUpdate;
357
+ const currentSceneAutoUpdate = scene.matrixWorldAutoUpdate;
378
358
  const currentSceneBackground = scene.background;
379
359
  const currentShadowMapEnabled = renderer.shadowMap.enabled;
380
- scene.autoUpdate = false;
360
+ scene.matrixWorldAutoUpdate = false;
381
361
  scene.background = null;
382
362
  renderer.autoClear = false;
383
363
  renderer.shadowMap.enabled = false;
@@ -385,7 +365,7 @@
385
365
  renderer.render( scene, camera );
386
366
  scene.traverse( restoreOriginalMaterial );
387
367
  cleanupCache();
388
- scene.autoUpdate = currentSceneAutoUpdate;
368
+ scene.matrixWorldAutoUpdate = currentSceneAutoUpdate;
389
369
  scene.background = currentSceneBackground;
390
370
  renderer.autoClear = currentAutoClear;
391
371
  renderer.shadowMap.enabled = currentShadowMapEnabled;
@@ -50,8 +50,8 @@
50
50
 
51
51
  this.render = function ( scene, camera ) {
52
52
 
53
- scene.updateMatrixWorld();
54
- if ( camera.parent === null ) camera.updateMatrixWorld();
53
+ if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
54
+ if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
55
55
 
56
56
  _stereo.update( camera );
57
57
 
@@ -57,8 +57,8 @@
57
57
 
58
58
  this.render = function ( scene, camera ) {
59
59
 
60
- scene.updateMatrixWorld();
61
- if ( camera.parent === null ) camera.updateMatrixWorld();
60
+ if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
61
+ if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
62
62
  camera.matrixWorld.decompose( _position, _quaternion, _scale ); // front
63
63
 
64
64
  _cameraF.position.copy( _position );
@@ -23,8 +23,8 @@
23
23
 
24
24
  this.render = function ( scene, camera ) {
25
25
 
26
- scene.updateMatrixWorld();
27
- if ( camera.parent === null ) camera.updateMatrixWorld();
26
+ if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
27
+ if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
28
28
 
29
29
  _stereo.update( camera );
30
30
 
@@ -85,6 +85,28 @@
85
85
 
86
86
  }
87
87
 
88
+ dispose() {
89
+
90
+ const resources = new Set();
91
+ this.traverse( object => {
92
+
93
+ if ( object.isMesh ) {
94
+
95
+ resources.add( object.geometry );
96
+ resources.add( object.material );
97
+
98
+ }
99
+
100
+ } );
101
+
102
+ for ( const resource of resources ) {
103
+
104
+ resource.dispose();
105
+
106
+ }
107
+
108
+ }
109
+
88
110
  }
89
111
 
90
112
  function createAreaLightMaterial( intensity ) {
@@ -208,21 +208,12 @@
208
208
  // Returns the mesh id
209
209
 
210
210
 
211
- function processGeometry( g ) {
211
+ function processGeometry( bufferGeometry ) {
212
212
 
213
- let info = geometryInfo.get( g );
213
+ let info = geometryInfo.get( bufferGeometry );
214
214
 
215
215
  if ( ! info ) {
216
216
 
217
- // convert the geometry to bufferGeometry if it isn't already
218
- const bufferGeometry = g;
219
-
220
- if ( bufferGeometry.isBufferGeometry !== true ) {
221
-
222
- throw new Error( 'THREE.ColladaExporter: Geometry is not of type THREE.BufferGeometry.' );
223
-
224
- }
225
-
226
217
  const meshid = `Mesh${libraryGeometries.length + 1}`;
227
218
  const indexCount = bufferGeometry.index ? bufferGeometry.index.count * bufferGeometry.index.itemSize : bufferGeometry.attributes.position.count;
228
219
  const groups = bufferGeometry.groups != null && bufferGeometry.groups.length !== 0 ? bufferGeometry.groups : [ {
@@ -230,7 +221,7 @@
230
221
  count: indexCount,
231
222
  materialIndex: 0
232
223
  } ];
233
- const gname = g.name ? ` name="${g.name}"` : '';
224
+ const gname = bufferGeometry.name ? ` name="${bufferGeometry.name}"` : '';
234
225
  let gnode = `<geometry id="${meshid}"${gname}><mesh>`; // define the geometry node and the vertices for the geometry
235
226
 
236
227
  const posName = `${meshid}-position`;
@@ -312,7 +303,7 @@
312
303
  meshid: meshid,
313
304
  bufferGeometry: bufferGeometry
314
305
  };
315
- geometryInfo.set( g, info );
306
+ geometryInfo.set( bufferGeometry, info );
316
307
 
317
308
  }
318
309
 
@@ -27,12 +27,6 @@
27
27
  exportColor: false
28
28
  } ) {
29
29
 
30
- if ( object.isBufferGeometry === true ) {
31
-
32
- throw new Error( 'DRACOExporter: The first parameter of parse() is now an instance of Mesh or Points.' );
33
-
34
- }
35
-
36
30
  if ( DracoEncoderModule === undefined ) {
37
31
 
38
32
  throw new Error( 'THREE.DRACOExporter: required the draco_encoder to work.' );
@@ -45,12 +39,6 @@
45
39
  let builder;
46
40
  let dracoObject;
47
41
 
48
- if ( geometry.isBufferGeometry !== true ) {
49
-
50
- throw new Error( 'THREE.DRACOExporter.parse(geometry, options): geometry is not a THREE.BufferGeometry instance.' );
51
-
52
- }
53
-
54
42
  if ( object.isMesh === true ) {
55
43
 
56
44
  builder = new dracoEncoder.MeshBuilder();
@@ -77,13 +77,6 @@
77
77
 
78
78
  parse( input, onDone, onError, options ) {
79
79
 
80
- if ( typeof onError === 'object' ) {
81
-
82
- console.warn( 'THREE.GLTFExporter: parse() expects options as the fourth argument now.' );
83
- options = onError;
84
-
85
- }
86
-
87
80
  const writer = new GLTFWriter();
88
81
  const plugins = [];
89
82
 
@@ -300,27 +293,15 @@
300
293
 
301
294
  }
302
295
 
303
- let cachedCanvas = null;
304
-
305
296
  function getCanvas() {
306
297
 
307
- if ( cachedCanvas ) {
308
-
309
- return cachedCanvas;
310
-
311
- }
312
-
313
298
  if ( typeof document === 'undefined' && typeof OffscreenCanvas !== 'undefined' ) {
314
299
 
315
- cachedCanvas = new OffscreenCanvas( 1, 1 );
316
-
317
- } else {
318
-
319
- cachedCanvas = document.createElement( 'canvas' );
300
+ return new OffscreenCanvas( 1, 1 );
320
301
 
321
302
  }
322
303
 
323
- return cachedCanvas;
304
+ return document.createElement( 'canvas' );
324
305
 
325
306
  }
326
307
 
@@ -676,6 +657,27 @@
676
657
  buildMetalRoughTexture( metalnessMap, roughnessMap ) {
677
658
 
678
659
  if ( metalnessMap === roughnessMap ) return metalnessMap;
660
+
661
+ function getEncodingConversion( map ) {
662
+
663
+ if ( map.encoding === THREE.sRGBEncoding ) {
664
+
665
+ return function SRGBToLinear( c ) {
666
+
667
+ return c < 0.04045 ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );
668
+
669
+ };
670
+
671
+ }
672
+
673
+ return function LinearToLinear( c ) {
674
+
675
+ return c;
676
+
677
+ };
678
+
679
+ }
680
+
679
681
  console.warn( 'THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures.' );
680
682
  const metalness = metalnessMap?.image;
681
683
  const roughness = roughnessMap?.image;
@@ -692,11 +694,12 @@
692
694
  if ( metalness ) {
693
695
 
694
696
  context.drawImage( metalness, 0, 0, width, height );
697
+ const convert = getEncodingConversion( metalnessMap );
695
698
  const data = context.getImageData( 0, 0, width, height ).data;
696
699
 
697
700
  for ( let i = 2; i < data.length; i += 4 ) {
698
701
 
699
- composite.data[ i ] = data[ i ];
702
+ composite.data[ i ] = convert( data[ i ] / 256 ) * 256;
700
703
 
701
704
  }
702
705
 
@@ -705,11 +708,12 @@
705
708
  if ( roughness ) {
706
709
 
707
710
  context.drawImage( roughness, 0, 0, width, height );
711
+ const convert = getEncodingConversion( roughnessMap );
708
712
  const data = context.getImageData( 0, 0, width, height ).data;
709
713
 
710
714
  for ( let i = 1; i < data.length; i += 4 ) {
711
715
 
712
- composite.data[ i ] = data[ i ];
716
+ composite.data[ i ] = convert( data[ i ] / 256 ) * 256;
713
717
 
714
718
  }
715
719
 
@@ -720,6 +724,7 @@
720
724
  const reference = metalnessMap || roughnessMap;
721
725
  const texture = reference.clone();
722
726
  texture.source = new THREE.Source( canvas );
727
+ texture.encoding = THREE.LinearEncoding;
723
728
  return texture;
724
729
 
725
730
  }
@@ -1348,12 +1353,6 @@
1348
1353
 
1349
1354
  }
1350
1355
 
1351
- if ( geometry.isBufferGeometry !== true ) {
1352
-
1353
- throw new Error( 'THREE.GLTFExporter: Geometry is not of type THREE.BufferGeometry.' );
1354
-
1355
- }
1356
-
1357
1356
  const meshDef = {};
1358
1357
  const attributes = {};
1359
1358
  const primitives = [];
@@ -20,14 +20,7 @@
20
20
  let nbNormals = 0;
21
21
  let nbVertexUvs = 0;
22
22
  const geometry = mesh.geometry;
23
- const normalMatrixWorld = new THREE.Matrix3();
24
-
25
- if ( geometry.isBufferGeometry !== true ) {
26
-
27
- throw new Error( 'THREE.OBJExporter: Geometry is not of type THREE.BufferGeometry.' );
28
-
29
- } // shortcuts
30
-
23
+ const normalMatrixWorld = new THREE.Matrix3(); // shortcuts
31
24
 
32
25
  const vertices = geometry.getAttribute( 'position' );
33
26
  const normals = geometry.getAttribute( 'normal' );
@@ -133,14 +126,7 @@
133
126
 
134
127
  let nbVertex = 0;
135
128
  const geometry = line.geometry;
136
- const type = line.type;
137
-
138
- if ( geometry.isBufferGeometry !== true ) {
139
-
140
- throw new Error( 'THREE.OBJExporter: Geometry is not of type THREE.BufferGeometry.' );
141
-
142
- } // shortcuts
143
-
129
+ const type = line.type; // shortcuts
144
130
 
145
131
  const vertices = geometry.getAttribute( 'position' ); // name of the line object
146
132
 
@@ -193,13 +179,6 @@
193
179
 
194
180
  let nbVertex = 0;
195
181
  const geometry = points.geometry;
196
-
197
- if ( geometry.isBufferGeometry !== true ) {
198
-
199
- throw new Error( 'THREE.OBJExporter: Geometry is not of type THREE.BufferGeometry.' );
200
-
201
- }
202
-
203
182
  const vertices = geometry.getAttribute( 'position' );
204
183
  const colors = geometry.getAttribute( 'color' );
205
184
  output += 'o ' + points.name + '\n';
@@ -17,30 +17,16 @@
17
17
 
18
18
  parse( object, onDone, options ) {
19
19
 
20
- if ( onDone && typeof onDone === 'object' ) {
21
-
22
- console.warn( 'THREE.PLYExporter: The options parameter is now the third argument to the "parse" function. See the documentation for the new API.' );
23
- options = onDone;
24
- onDone = undefined;
25
-
26
- } // Iterate over the valid meshes in the object
27
-
28
-
20
+ // Iterate over the valid meshes in the object
29
21
  function traverseMeshes( cb ) {
30
22
 
31
23
  object.traverse( function ( child ) {
32
24
 
33
- if ( child.isMesh === true ) {
25
+ if ( child.isMesh === true || child.isPoints ) {
34
26
 
35
27
  const mesh = child;
36
28
  const geometry = mesh.geometry;
37
29
 
38
- if ( geometry.isBufferGeometry !== true ) {
39
-
40
- throw new Error( 'THREE.PLYExporter: Geometry is not of type THREE.BufferGeometry.' );
41
-
42
- }
43
-
44
30
  if ( geometry.hasAttribute( 'position' ) === true ) {
45
31
 
46
32
  cb( mesh, geometry );
@@ -62,6 +48,7 @@
62
48
  };
63
49
  options = Object.assign( defaultOptions, options );
64
50
  const excludeAttributes = options.excludeAttributes;
51
+ let includeIndices = true;
65
52
  let includeNormals = false;
66
53
  let includeColors = false;
67
54
  let includeUVs = false; // count the vertices, check which properties are used,
@@ -75,13 +62,6 @@
75
62
 
76
63
  const mesh = child;
77
64
  const geometry = mesh.geometry;
78
-
79
- if ( geometry.isBufferGeometry !== true ) {
80
-
81
- throw new Error( 'THREE.PLYExporter: Geometry is not of type THREE.BufferGeometry.' );
82
-
83
- }
84
-
85
65
  const vertices = geometry.getAttribute( 'position' );
86
66
  const normals = geometry.getAttribute( 'normal' );
87
67
  const uvs = geometry.getAttribute( 'uv' );
@@ -100,11 +80,19 @@
100
80
  if ( uvs !== undefined ) includeUVs = true;
101
81
  if ( colors !== undefined ) includeColors = true;
102
82
 
83
+ } else if ( child.isPoints ) {
84
+
85
+ const mesh = child;
86
+ const geometry = mesh.geometry;
87
+ const vertices = geometry.getAttribute( 'position' );
88
+ vertexCount += vertices.count;
89
+ includeIndices = false;
90
+
103
91
  }
104
92
 
105
93
  } );
106
94
  const tempColor = new THREE.Color();
107
- const includeIndices = excludeAttributes.indexOf( 'index' ) === - 1;
95
+ includeIndices = includeIndices && excludeAttributes.indexOf( 'index' ) === - 1;
108
96
  includeNormals = includeNormals && excludeAttributes.indexOf( 'normal' ) === - 1;
109
97
  includeColors = includeColors && excludeAttributes.indexOf( 'color' ) === - 1;
110
98
  includeUVs = includeUVs && excludeAttributes.indexOf( 'uv' ) === - 1;