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
@@ -409,7 +409,7 @@
409
409
 
410
410
  if ( attribute.isInstancedInterleavedBufferAttribute ) {
411
411
 
412
- newAttribute = new InstancedBufferAttribute( array, itemSize, normalized, attribute.meshPerAttribute );
412
+ newAttribute = new THREE.InstancedBufferAttribute( array, itemSize, normalized, attribute.meshPerAttribute );
413
413
 
414
414
  } else {
415
415
 
@@ -23,13 +23,7 @@
23
23
 
24
24
  if ( 0 <= -- iterations ) {
25
25
 
26
- const tmp = [];
27
- Array.prototype.push.apply( tmp, hilbert2D( vec[ 0 ], half, iterations, v0, v3, v2, v1 ) );
28
- Array.prototype.push.apply( tmp, hilbert2D( vec[ 1 ], half, iterations, v0, v1, v2, v3 ) );
29
- Array.prototype.push.apply( tmp, hilbert2D( vec[ 2 ], half, iterations, v0, v1, v2, v3 ) );
30
- Array.prototype.push.apply( tmp, hilbert2D( vec[ 3 ], half, iterations, v2, v1, v0, v3 ) ); // Return recursive call
31
-
32
- return tmp;
26
+ return [ ...hilbert2D( vec[ 0 ], half, iterations, v0, v3, v2, v1 ), ...hilbert2D( vec[ 1 ], half, iterations, v0, v1, v2, v3 ), ...hilbert2D( vec[ 2 ], half, iterations, v0, v1, v2, v3 ), ...hilbert2D( vec[ 3 ], half, iterations, v2, v1, v0, v3 ) ];
33
27
 
34
28
  } // Return complete Hilbert Curve.
35
29
 
@@ -66,17 +60,7 @@
66
60
 
67
61
  if ( -- iterations >= 0 ) {
68
62
 
69
- const tmp = [];
70
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 0 ], half, iterations, v0, v3, v4, v7, v6, v5, v2, v1 ) );
71
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 1 ], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3 ) );
72
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 2 ], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3 ) );
73
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 3 ], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5 ) );
74
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 4 ], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5 ) );
75
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 5 ], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7 ) );
76
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 6 ], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7 ) );
77
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 7 ], half, iterations, v6, v5, v2, v1, v0, v3, v4, v7 ) ); // Return recursive call
78
-
79
- return tmp;
63
+ return [ ...hilbert3D( vec[ 0 ], half, iterations, v0, v3, v4, v7, v6, v5, v2, v1 ), ...hilbert3D( vec[ 1 ], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3 ), ...hilbert3D( vec[ 2 ], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3 ), ...hilbert3D( vec[ 3 ], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5 ), ...hilbert3D( vec[ 4 ], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5 ), ...hilbert3D( vec[ 5 ], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7 ), ...hilbert3D( vec[ 6 ], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7 ), ...hilbert3D( vec[ 7 ], half, iterations, v6, v5, v2, v1, v0, v3, v4, v7 ) ];
80
64
 
81
65
  } // Return complete Hilbert Curve.
82
66
 
@@ -93,7 +93,7 @@
93
93
  #endif
94
94
  #endif`, THREE.ShaderChunk.morphtarget_vertex, THREE.ShaderChunk.skinning_vertex, THREE.ShaderChunk.displacementmap_vertex, THREE.ShaderChunk.project_vertex, THREE.ShaderChunk.logdepthbuf_vertex, THREE.ShaderChunk.clipping_planes_vertex, 'vViewPosition = - mvPosition.xyz;', THREE.ShaderChunk.worldpos_vertex, THREE.ShaderChunk.envmap_vertex, THREE.ShaderChunk.shadowmap_vertex, THREE.ShaderChunk.fog_vertex, '}' ].join( '\n' ); // Use the original THREE.MeshPhongMaterial's fragmentShader.
95
95
 
96
- this.fragmentShader = [ '#define PHONG', 'uniform vec3 diffuse;', 'uniform vec3 emissive;', 'uniform vec3 specular;', 'uniform float shininess;', 'uniform float opacity;', THREE.ShaderChunk.common, THREE.ShaderChunk.packing, THREE.ShaderChunk.dithering_pars_fragment, THREE.ShaderChunk.color_pars_fragment, THREE.ShaderChunk.uv_pars_fragment, THREE.ShaderChunk.uv2_pars_fragment, THREE.ShaderChunk.map_pars_fragment, THREE.ShaderChunk.alphamap_pars_fragment, THREE.ShaderChunk.aomap_pars_fragment, THREE.ShaderChunk.lightmap_pars_fragment, THREE.ShaderChunk.emissivemap_pars_fragment, THREE.ShaderChunk.envmap_common_pars_fragment, THREE.ShaderChunk.envmap_pars_fragment, THREE.ShaderChunk.cube_uv_reflection_fragment, THREE.ShaderChunk.fog_pars_fragment, THREE.ShaderChunk.bsdfs, THREE.ShaderChunk.lights_pars_begin, THREE.ShaderChunk.normal_pars_fragment, THREE.ShaderChunk.lights_phong_pars_fragment, THREE.ShaderChunk.shadowmap_pars_fragment, THREE.ShaderChunk.bumpmap_pars_fragment, THREE.ShaderChunk.normalmap_pars_fragment, THREE.ShaderChunk.specularmap_pars_fragment, THREE.ShaderChunk.logdepthbuf_pars_fragment, THREE.ShaderChunk.clipping_planes_pars_fragment, 'void main() {', THREE.ShaderChunk.clipping_planes_fragment, 'vec4 diffuseColor = vec4( diffuse, opacity );', 'ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );', 'vec3 totalEmissiveRadiance = emissive;', THREE.ShaderChunk.logdepthbuf_fragment, THREE.ShaderChunk.map_fragment, THREE.ShaderChunk.color_fragment, THREE.ShaderChunk.alphamap_fragment, THREE.ShaderChunk.alphatest_fragment, THREE.ShaderChunk.specularmap_fragment, THREE.ShaderChunk.normal_fragment_begin, THREE.ShaderChunk.normal_fragment_maps, THREE.ShaderChunk.emissivemap_fragment, // accumulation
96
+ this.fragmentShader = [ '#define PHONG', 'uniform vec3 diffuse;', 'uniform vec3 emissive;', 'uniform vec3 specular;', 'uniform float shininess;', 'uniform float opacity;', THREE.ShaderChunk.common, THREE.ShaderChunk.packing, THREE.ShaderChunk.dithering_pars_fragment, THREE.ShaderChunk.color_pars_fragment, THREE.ShaderChunk.uv_pars_fragment, THREE.ShaderChunk.uv2_pars_fragment, THREE.ShaderChunk.map_pars_fragment, THREE.ShaderChunk.alphamap_pars_fragment, THREE.ShaderChunk.aomap_pars_fragment, THREE.ShaderChunk.lightmap_pars_fragment, THREE.ShaderChunk.emissivemap_pars_fragment, THREE.ShaderChunk.envmap_common_pars_fragment, THREE.ShaderChunk.envmap_pars_fragment, THREE.ShaderChunk.fog_pars_fragment, THREE.ShaderChunk.bsdfs, THREE.ShaderChunk.lights_pars_begin, THREE.ShaderChunk.normal_pars_fragment, THREE.ShaderChunk.lights_phong_pars_fragment, THREE.ShaderChunk.shadowmap_pars_fragment, THREE.ShaderChunk.bumpmap_pars_fragment, THREE.ShaderChunk.normalmap_pars_fragment, THREE.ShaderChunk.specularmap_pars_fragment, THREE.ShaderChunk.logdepthbuf_pars_fragment, THREE.ShaderChunk.clipping_planes_pars_fragment, 'void main() {', THREE.ShaderChunk.clipping_planes_fragment, 'vec4 diffuseColor = vec4( diffuse, opacity );', 'ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );', 'vec3 totalEmissiveRadiance = emissive;', THREE.ShaderChunk.logdepthbuf_fragment, THREE.ShaderChunk.map_fragment, THREE.ShaderChunk.color_fragment, THREE.ShaderChunk.alphamap_fragment, THREE.ShaderChunk.alphatest_fragment, THREE.ShaderChunk.specularmap_fragment, THREE.ShaderChunk.normal_fragment_begin, THREE.ShaderChunk.normal_fragment_maps, THREE.ShaderChunk.emissivemap_fragment, // accumulation
97
97
  THREE.ShaderChunk.lights_phong_fragment, THREE.ShaderChunk.lights_fragment_begin, THREE.ShaderChunk.lights_fragment_maps, THREE.ShaderChunk.lights_fragment_end, // modulation
98
98
  THREE.ShaderChunk.aomap_fragment, 'vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;', THREE.ShaderChunk.envmap_fragment, 'gl_FragColor = vec4( outgoingLight, diffuseColor.a );', THREE.ShaderChunk.tonemapping_fragment, THREE.ShaderChunk.encodings_fragment, THREE.ShaderChunk.fog_fragment, THREE.ShaderChunk.premultiplied_alpha_fragment, THREE.ShaderChunk.dithering_fragment, '}' ].join( '\n' );
99
99
  this.setValues( parameters );
@@ -95,25 +95,9 @@
95
95
 
96
96
  }
97
97
 
98
- function detach( child, parent, scene ) {
99
-
100
- console.warn( 'THREE.SceneUtils: detach() has been deprecated. Use scene.attach( child ) instead.' );
101
- scene.attach( child );
102
-
103
- }
104
-
105
- function attach( child, scene, parent ) {
106
-
107
- console.warn( 'THREE.SceneUtils: attach() has been deprecated. Use parent.attach( child ) instead.' );
108
- parent.attach( child );
109
-
110
- }
111
-
112
98
  THREE.SceneUtils = {};
113
- THREE.SceneUtils.attach = attach;
114
99
  THREE.SceneUtils.createMeshesFromInstancedMesh = createMeshesFromInstancedMesh;
115
100
  THREE.SceneUtils.createMeshesFromMultiMaterialMesh = createMeshesFromMultiMaterialMesh;
116
101
  THREE.SceneUtils.createMultiMaterialObject = createMultiMaterialObject;
117
- THREE.SceneUtils.detach = detach;
118
102
 
119
103
  } )();
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  Bone,
3
3
  BoxGeometry,
4
+ CapsuleGeometry,
4
5
  Color,
5
- CylinderGeometry,
6
6
  Euler,
7
7
  Matrix4,
8
8
  Mesh,
@@ -209,7 +209,7 @@ class MMDPhysics {
209
209
  // mesh's default world transform as position(0, 0, 0),
210
210
  // quaternion(0, 0, 0, 1) and scale(0, 0, 0)
211
211
 
212
- let parent = mesh.parent;
212
+ const parent = mesh.parent;
213
213
 
214
214
  if ( parent !== null ) mesh.parent = null;
215
215
 
@@ -1358,7 +1358,7 @@ class MMDPhysicsHelper extends Object3D {
1358
1358
  return new BoxGeometry( param.width * 2, param.height * 2, param.depth * 2, 8, 8, 8 );
1359
1359
 
1360
1360
  case 2:
1361
- return new createCapsuleGeometry( param.width, param.height, 16, 8 );
1361
+ return new CapsuleGeometry( param.width, param.height, 8, 16 );
1362
1362
 
1363
1363
  default:
1364
1364
  return null;
@@ -1367,25 +1367,6 @@ class MMDPhysicsHelper extends Object3D {
1367
1367
 
1368
1368
  }
1369
1369
 
1370
- function createCapsuleGeometry( radius, cylinderHeight, segmentsRadius, segmentsHeight ) {
1371
-
1372
- var geometry = new CylinderGeometry( radius, radius, cylinderHeight, segmentsRadius, segmentsHeight, true );
1373
- var upperSphere = new Mesh( new SphereGeometry( radius, segmentsRadius, segmentsHeight, 0, Math.PI * 2, 0, Math.PI / 2 ) );
1374
- var lowerSphere = new Mesh( new SphereGeometry( radius, segmentsRadius, segmentsHeight, 0, Math.PI * 2, Math.PI / 2, Math.PI / 2 ) );
1375
-
1376
- upperSphere.position.set( 0, cylinderHeight / 2, 0 );
1377
- lowerSphere.position.set( 0, - cylinderHeight / 2, 0 );
1378
-
1379
- upperSphere.updateMatrix();
1380
- lowerSphere.updateMatrix();
1381
-
1382
- geometry.merge( upperSphere.geometry, upperSphere.matrix );
1383
- geometry.merge( lowerSphere.geometry, lowerSphere.matrix );
1384
-
1385
- return geometry;
1386
-
1387
- }
1388
-
1389
1370
  for ( var i = 0, il = bodies.length; i < il; i ++ ) {
1390
1371
 
1391
1372
  var param = bodies[ i ].params;
@@ -1040,7 +1040,7 @@ class ArcballControls extends EventDispatcher {
1040
1040
 
1041
1041
  }
1042
1042
 
1043
- this._v3_1.setFromMatrixPosition(this._gizmoMatrixState);
1043
+ this._v3_1.setFromMatrixPosition( this._gizmoMatrixState );
1044
1044
 
1045
1045
  this.applyTransformMatrix( this.scale( size, this._v3_1 ) );
1046
1046
 
@@ -2279,7 +2279,7 @@ class ArcballControls extends EventDispatcher {
2279
2279
  this._gizmoMatrixState0.identity().setPosition( tbCenter );
2280
2280
  this._gizmoMatrixState.copy( this._gizmoMatrixState0 );
2281
2281
 
2282
- if ( this.camera.zoom != 1 ) {
2282
+ if ( this.camera.zoom !== 1 ) {
2283
2283
 
2284
2284
  //adapt gizmos size to camera zoom
2285
2285
  const size = 1 / this.camera.zoom;
@@ -2294,8 +2294,23 @@ class ArcballControls extends EventDispatcher {
2294
2294
 
2295
2295
  this._gizmoMatrixState.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale );
2296
2296
 
2297
+ //
2298
+
2299
+ this._gizmos.traverse( function ( object ) {
2300
+
2301
+ if ( object.isLine ) {
2302
+
2303
+ object.geometry.dispose();
2304
+ object.material.dispose();
2305
+
2306
+ }
2307
+
2308
+ } );
2309
+
2297
2310
  this._gizmos.clear();
2298
2311
 
2312
+ //
2313
+
2299
2314
  this._gizmos.add( gizmoX );
2300
2315
  this._gizmos.add( gizmoY );
2301
2316
  this._gizmos.add( gizmoZ );
@@ -12,13 +12,6 @@ class FirstPersonControls {
12
12
 
13
13
  constructor( object, domElement ) {
14
14
 
15
- if ( domElement === undefined ) {
16
-
17
- console.warn( 'THREE.FirstPersonControls: The second parameter "domElement" is now mandatory.' );
18
- domElement = document;
19
-
20
- }
21
-
22
15
  this.object = object;
23
16
  this.domElement = domElement;
24
17
 
@@ -12,13 +12,6 @@ class FlyControls extends EventDispatcher {
12
12
 
13
13
  super();
14
14
 
15
- if ( domElement === undefined ) {
16
-
17
- console.warn( 'THREE.FlyControls: The second parameter "domElement" is now mandatory.' );
18
- domElement = document;
19
-
20
- }
21
-
22
15
  this.object = object;
23
16
  this.domElement = domElement;
24
17
 
@@ -25,9 +25,6 @@ class OrbitControls extends EventDispatcher {
25
25
 
26
26
  super();
27
27
 
28
- if ( domElement === undefined ) console.warn( 'THREE.OrbitControls: The second parameter "domElement" is now mandatory.' );
29
- if ( domElement === document ) console.error( 'THREE.OrbitControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.' );
30
-
31
28
  this.object = object;
32
29
  this.domElement = domElement;
33
30
  this.domElement.style.touchAction = 'none'; // disable touch scroll
@@ -960,8 +957,6 @@ class OrbitControls extends EventDispatcher {
960
957
 
961
958
  function onMouseMove( event ) {
962
959
 
963
- if ( scope.enabled === false ) return;
964
-
965
960
  switch ( state ) {
966
961
 
967
962
  case STATE.ROTATE:
@@ -19,13 +19,6 @@ class PointerLockControls extends EventDispatcher {
19
19
 
20
20
  super();
21
21
 
22
- if ( domElement === undefined ) {
23
-
24
- console.warn( 'THREE.PointerLockControls: The second parameter "domElement" is now mandatory.' );
25
- domElement = document.body;
26
-
27
- }
28
-
29
22
  this.domElement = domElement;
30
23
  this.isLocked = false;
31
24
 
@@ -16,9 +16,6 @@ class TrackballControls extends EventDispatcher {
16
16
 
17
17
  super();
18
18
 
19
- if ( domElement === undefined ) console.warn( 'THREE.TrackballControls: The second parameter "domElement" is now mandatory.' );
20
- if ( domElement === document ) console.error( 'THREE.TrackballControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.' );
21
-
22
19
  const scope = this;
23
20
  const STATE = { NONE: - 1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4 };
24
21
 
@@ -205,7 +205,15 @@ class TransformControls extends Object3D {
205
205
  this.camera.updateMatrixWorld();
206
206
  this.camera.matrixWorld.decompose( this.cameraPosition, this.cameraQuaternion, this._cameraScale );
207
207
 
208
- this.eye.copy( this.cameraPosition ).sub( this.worldPosition ).normalize();
208
+ if ( this.camera.isOrthographicCamera ) {
209
+
210
+ this.camera.getWorldDirection( this.eye );
211
+
212
+ } else {
213
+
214
+ this.eye.copy( this.cameraPosition ).sub( this.worldPosition ).normalize();
215
+
216
+ }
209
217
 
210
218
  super.updateMatrixWorld( this );
211
219
 
@@ -555,7 +563,7 @@ class TransformControls extends Object3D {
555
563
 
556
564
  }
557
565
 
558
- // Detatch from object
566
+ // Detach from object
559
567
  detach() {
560
568
 
561
569
  this.object = undefined;
@@ -635,12 +643,6 @@ class TransformControls extends Object3D {
635
643
 
636
644
  }
637
645
 
638
- update() {
639
-
640
- console.warn( 'THREE.TransformControls: update function has no more functionality and therefore has been deprecated.' );
641
-
642
- }
643
-
644
646
  }
645
647
 
646
648
  // mouse / touch event handlers
@@ -1308,12 +1310,12 @@ class TransformControlsGizmo extends Object3D {
1308
1310
 
1309
1311
  // Hide translate and scale axis facing the camera
1310
1312
 
1311
- const AXIS_HIDE_TRESHOLD = 0.99;
1312
- const PLANE_HIDE_TRESHOLD = 0.2;
1313
+ const AXIS_HIDE_THRESHOLD = 0.99;
1314
+ const PLANE_HIDE_THRESHOLD = 0.2;
1313
1315
 
1314
1316
  if ( handle.name === 'X' ) {
1315
1317
 
1316
- if ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_TRESHOLD ) {
1318
+ if ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_THRESHOLD ) {
1317
1319
 
1318
1320
  handle.scale.set( 1e-10, 1e-10, 1e-10 );
1319
1321
  handle.visible = false;
@@ -1324,7 +1326,7 @@ class TransformControlsGizmo extends Object3D {
1324
1326
 
1325
1327
  if ( handle.name === 'Y' ) {
1326
1328
 
1327
- if ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_TRESHOLD ) {
1329
+ if ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_THRESHOLD ) {
1328
1330
 
1329
1331
  handle.scale.set( 1e-10, 1e-10, 1e-10 );
1330
1332
  handle.visible = false;
@@ -1335,7 +1337,7 @@ class TransformControlsGizmo extends Object3D {
1335
1337
 
1336
1338
  if ( handle.name === 'Z' ) {
1337
1339
 
1338
- if ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_TRESHOLD ) {
1340
+ if ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_THRESHOLD ) {
1339
1341
 
1340
1342
  handle.scale.set( 1e-10, 1e-10, 1e-10 );
1341
1343
  handle.visible = false;
@@ -1346,7 +1348,7 @@ class TransformControlsGizmo extends Object3D {
1346
1348
 
1347
1349
  if ( handle.name === 'XY' ) {
1348
1350
 
1349
- if ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_TRESHOLD ) {
1351
+ if ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_THRESHOLD ) {
1350
1352
 
1351
1353
  handle.scale.set( 1e-10, 1e-10, 1e-10 );
1352
1354
  handle.visible = false;
@@ -1357,7 +1359,7 @@ class TransformControlsGizmo extends Object3D {
1357
1359
 
1358
1360
  if ( handle.name === 'YZ' ) {
1359
1361
 
1360
- if ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_TRESHOLD ) {
1362
+ if ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_THRESHOLD ) {
1361
1363
 
1362
1364
  handle.scale.set( 1e-10, 1e-10, 1e-10 );
1363
1365
  handle.visible = false;
@@ -1368,7 +1370,7 @@ class TransformControlsGizmo extends Object3D {
1368
1370
 
1369
1371
  if ( handle.name === 'XZ' ) {
1370
1372
 
1371
- if ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_TRESHOLD ) {
1373
+ if ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_THRESHOLD ) {
1372
1374
 
1373
1375
  handle.scale.set( 1e-10, 1e-10, 1e-10 );
1374
1376
  handle.visible = false;
@@ -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();