super-three 0.173.4 → 0.175.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 (832) hide show
  1. package/build/three.cjs +22198 -1564
  2. package/build/three.core.js +21287 -1346
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +882 -189
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +8 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +19358 -17482
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +19342 -17482
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +144 -42
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +194 -71
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +74 -30
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +51 -5
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +36 -1
  94. package/examples/jsm/loaders/DDSLoader.js +25 -1
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +71 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +222 -9
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +87 -19
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +56 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +90 -70
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +105 -13
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +109 -73
  162. package/examples/jsm/misc/VolumeSlice.js +91 -48
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +75 -2
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +134 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +268 -134
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/AST.js +10 -0
  273. package/examples/jsm/transpiler/GLSLDecoder.js +17 -3
  274. package/examples/jsm/transpiler/TSLEncoder.js +83 -15
  275. package/examples/jsm/transpiler/Transpiler.js +31 -0
  276. package/examples/jsm/tsl/display/AfterImageNode.js +24 -25
  277. package/examples/jsm/tsl/display/AnaglyphPassNode.js +2 -3
  278. package/examples/jsm/tsl/display/AnamorphicNode.js +8 -9
  279. package/examples/jsm/tsl/display/BleachBypass.js +1 -2
  280. package/examples/jsm/tsl/display/BloomNode.js +15 -16
  281. package/examples/jsm/tsl/display/DenoiseNode.js +9 -10
  282. package/examples/jsm/tsl/display/DepthOfFieldNode.js +5 -6
  283. package/examples/jsm/tsl/display/DotScreenNode.js +5 -6
  284. package/examples/jsm/tsl/display/FXAANode.js +2 -3
  285. package/examples/jsm/tsl/display/FilmNode.js +9 -8
  286. package/examples/jsm/tsl/display/GTAONode.js +11 -12
  287. package/examples/jsm/tsl/display/GaussianBlurNode.js +14 -14
  288. package/examples/jsm/tsl/display/LensflareNode.js +15 -16
  289. package/examples/jsm/tsl/display/Lut3DNode.js +4 -5
  290. package/examples/jsm/tsl/display/MotionBlur.js +1 -2
  291. package/examples/jsm/tsl/display/OutlineNode.js +7 -8
  292. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -3
  293. package/examples/jsm/tsl/display/PixelationPassNode.js +14 -15
  294. package/examples/jsm/tsl/display/RGBShiftNode.js +5 -6
  295. package/examples/jsm/tsl/display/SMAANode.js +13 -7
  296. package/examples/jsm/tsl/display/SSAAPassNode.js +7 -7
  297. package/examples/jsm/tsl/display/SSRNode.js +6 -7
  298. package/examples/jsm/tsl/display/Sepia.js +1 -2
  299. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -3
  300. package/examples/jsm/tsl/display/StereoCompositePassNode.js +4 -4
  301. package/examples/jsm/tsl/display/StereoPassNode.js +2 -3
  302. package/examples/jsm/tsl/display/TRAAPassNode.js +11 -10
  303. package/examples/jsm/tsl/display/TransitionNode.js +4 -5
  304. package/examples/jsm/tsl/display/hashBlur.js +1 -2
  305. package/examples/jsm/tsl/lighting/TiledLightsNode.js +33 -7
  306. package/examples/jsm/tsl/math/Bayer.js +31 -0
  307. package/examples/jsm/tsl/utils/Raymarching.js +67 -0
  308. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  309. package/examples/jsm/utils/CameraUtils.js +10 -7
  310. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  311. package/examples/jsm/utils/GeometryUtils.js +12 -13
  312. package/examples/jsm/utils/LDrawUtils.js +11 -4
  313. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  314. package/examples/jsm/utils/SceneUtils.js +50 -3
  315. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  316. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  317. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  318. package/examples/jsm/utils/SortUtils.js +14 -5
  319. package/examples/jsm/utils/UVsDebug.js +9 -4
  320. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  321. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  322. package/examples/jsm/utils/WorkerPool.js +65 -2
  323. package/examples/jsm/webxr/ARButton.js +18 -0
  324. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  325. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  326. package/examples/jsm/webxr/Text2D.js +11 -0
  327. package/examples/jsm/webxr/VRButton.js +30 -0
  328. package/examples/jsm/webxr/XRButton.js +22 -0
  329. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  330. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  331. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  332. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  333. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  334. package/examples/jsm/webxr/XRPlanes.js +17 -0
  335. package/package.json +3 -4
  336. package/src/Three.TSL.js +7 -1
  337. package/src/animation/AnimationAction.js +262 -30
  338. package/src/animation/AnimationClip.js +141 -2
  339. package/src/animation/AnimationMixer.js +99 -15
  340. package/src/animation/AnimationObjectGroup.js +41 -18
  341. package/src/animation/AnimationUtils.js +169 -19
  342. package/src/animation/KeyframeTrack.js +144 -10
  343. package/src/animation/PropertyBinding.js +77 -3
  344. package/src/animation/PropertyMixer.js +72 -5
  345. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  346. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  347. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  348. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  350. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  351. package/src/audio/Audio.js +339 -0
  352. package/src/audio/AudioAnalyser.js +58 -1
  353. package/src/audio/AudioContext.js +15 -0
  354. package/src/audio/AudioListener.js +76 -0
  355. package/src/audio/PositionalAudio.js +107 -0
  356. package/src/cameras/ArrayCamera.js +28 -0
  357. package/src/cameras/Camera.js +47 -0
  358. package/src/cameras/CubeCamera.js +66 -0
  359. package/src/cameras/OrthographicCamera.js +109 -0
  360. package/src/cameras/PerspectiveCamera.js +163 -40
  361. package/src/cameras/StereoCamera.js +46 -0
  362. package/src/constants.js +1429 -5
  363. package/src/core/BufferAttribute.js +413 -3
  364. package/src/core/BufferGeometry.js +337 -1
  365. package/src/core/Clock.js +60 -0
  366. package/src/core/EventDispatcher.js +44 -2
  367. package/src/core/GLBufferAttribute.js +99 -0
  368. package/src/core/InstancedBufferAttribute.js +29 -0
  369. package/src/core/InstancedBufferGeometry.js +20 -0
  370. package/src/core/InstancedInterleavedBuffer.js +26 -0
  371. package/src/core/InterleavedBuffer.js +137 -3
  372. package/src/core/InterleavedBufferAttribute.js +197 -0
  373. package/src/core/Layers.js +71 -10
  374. package/src/core/Object3D.js +593 -0
  375. package/src/core/Raycaster.js +134 -1
  376. package/src/core/RenderTarget.js +170 -11
  377. package/src/core/RenderTarget3D.js +25 -0
  378. package/src/core/RenderTargetArray.js +18 -0
  379. package/src/core/Uniform.js +29 -0
  380. package/src/core/UniformsGroup.js +84 -2
  381. package/src/extras/Controls.js +88 -1
  382. package/src/extras/DataUtils.js +48 -8
  383. package/src/extras/Earcut.js +13 -780
  384. package/src/extras/ImageUtils.js +20 -2
  385. package/src/extras/PMREMGenerator.js +41 -25
  386. package/src/extras/ShapeUtils.js +24 -2
  387. package/src/extras/TextureUtils.js +95 -15
  388. package/src/extras/core/Curve.js +150 -50
  389. package/src/extras/core/CurvePath.js +63 -22
  390. package/src/extras/core/Interpolations.js +29 -3
  391. package/src/extras/core/Path.js +134 -1
  392. package/src/extras/core/Shape.js +63 -0
  393. package/src/extras/core/ShapePath.js +76 -0
  394. package/src/extras/curves/ArcCurve.js +22 -0
  395. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  396. package/src/extras/curves/CubicBezierCurve.js +67 -0
  397. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  398. package/src/extras/curves/EllipseCurve.js +102 -0
  399. package/src/extras/curves/LineCurve.js +36 -0
  400. package/src/extras/curves/LineCurve3.js +36 -0
  401. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  402. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  403. package/src/extras/curves/SplineCurve.js +48 -0
  404. package/src/extras/lib/earcut.js +685 -0
  405. package/src/geometries/BoxGeometry.js +38 -0
  406. package/src/geometries/CapsuleGeometry.js +34 -0
  407. package/src/geometries/CircleGeometry.js +40 -0
  408. package/src/geometries/ConeGeometry.js +38 -0
  409. package/src/geometries/CylinderGeometry.js +39 -0
  410. package/src/geometries/DodecahedronGeometry.js +32 -0
  411. package/src/geometries/EdgesGeometry.js +28 -0
  412. package/src/geometries/ExtrudeGeometry.js +112 -28
  413. package/src/geometries/IcosahedronGeometry.js +32 -0
  414. package/src/geometries/LatheGeometry.js +40 -0
  415. package/src/geometries/OctahedronGeometry.js +32 -0
  416. package/src/geometries/PlaneGeometry.js +34 -0
  417. package/src/geometries/PolyhedronGeometry.js +29 -0
  418. package/src/geometries/RingGeometry.js +36 -0
  419. package/src/geometries/ShapeGeometry.js +37 -0
  420. package/src/geometries/SphereGeometry.js +37 -0
  421. package/src/geometries/TetrahedronGeometry.js +32 -0
  422. package/src/geometries/TorusGeometry.js +35 -0
  423. package/src/geometries/TorusKnotGeometry.js +38 -0
  424. package/src/geometries/TubeGeometry.js +49 -0
  425. package/src/geometries/WireframeGeometry.js +32 -0
  426. package/src/helpers/ArrowHelper.js +60 -3
  427. package/src/helpers/AxesHelper.js +28 -0
  428. package/src/helpers/Box3Helper.js +28 -0
  429. package/src/helpers/BoxHelper.js +43 -7
  430. package/src/helpers/CameraHelper.js +45 -5
  431. package/src/helpers/DirectionalLightHelper.js +52 -0
  432. package/src/helpers/GridHelper.js +26 -0
  433. package/src/helpers/HemisphereLightHelper.js +39 -0
  434. package/src/helpers/PlaneHelper.js +33 -0
  435. package/src/helpers/PointLightHelper.js +43 -0
  436. package/src/helpers/PolarGridHelper.js +30 -0
  437. package/src/helpers/SkeletonHelper.js +39 -2
  438. package/src/helpers/SpotLightHelper.js +40 -0
  439. package/src/lights/AmbientLight.js +25 -0
  440. package/src/lights/DirectionalLight.js +57 -0
  441. package/src/lights/DirectionalLightShadow.js +15 -0
  442. package/src/lights/HemisphereLight.js +32 -0
  443. package/src/lights/Light.js +36 -0
  444. package/src/lights/LightProbe.js +43 -0
  445. package/src/lights/LightShadow.js +159 -0
  446. package/src/lights/PointLight.js +59 -0
  447. package/src/lights/PointLightShadow.js +21 -0
  448. package/src/lights/RectAreaLight.js +59 -0
  449. package/src/lights/SpotLight.js +102 -0
  450. package/src/lights/SpotLightShadow.js +22 -0
  451. package/src/lights/webgpu/IESSpotLight.js +21 -0
  452. package/src/loaders/AnimationLoader.js +31 -0
  453. package/src/loaders/AudioLoader.js +31 -0
  454. package/src/loaders/BufferGeometryLoader.js +34 -0
  455. package/src/loaders/Cache.js +45 -0
  456. package/src/loaders/CompressedTextureLoader.js +36 -3
  457. package/src/loaders/CubeTextureLoader.js +45 -0
  458. package/src/loaders/DataTextureLoader.js +44 -3
  459. package/src/loaders/FileLoader.js +57 -1
  460. package/src/loaders/ImageBitmapLoader.js +57 -0
  461. package/src/loaders/ImageLoader.js +30 -0
  462. package/src/loaders/Loader.js +130 -0
  463. package/src/loaders/LoaderUtils.js +18 -36
  464. package/src/loaders/LoadingManager.js +142 -0
  465. package/src/loaders/MaterialLoader.js +57 -0
  466. package/src/loaders/ObjectLoader.js +53 -0
  467. package/src/loaders/TextureLoader.js +33 -0
  468. package/src/loaders/nodes/NodeLoader.js +13 -9
  469. package/src/loaders/nodes/NodeMaterialLoader.js +6 -6
  470. package/src/loaders/nodes/NodeObjectLoader.js +12 -12
  471. package/src/materials/LineBasicMaterial.js +74 -1
  472. package/src/materials/LineDashedMaterial.js +52 -0
  473. package/src/materials/Material.js +481 -4
  474. package/src/materials/MeshBasicMaterial.js +165 -0
  475. package/src/materials/MeshDepthMaterial.js +93 -0
  476. package/src/materials/MeshDistanceMaterial.js +76 -0
  477. package/src/materials/MeshLambertMaterial.js +273 -0
  478. package/src/materials/MeshMatcapMaterial.js +142 -0
  479. package/src/materials/MeshNormalMaterial.js +113 -0
  480. package/src/materials/MeshPhongMaterial.js +288 -0
  481. package/src/materials/MeshPhysicalMaterial.js +292 -1
  482. package/src/materials/MeshStandardMaterial.js +297 -0
  483. package/src/materials/MeshToonMaterial.js +218 -0
  484. package/src/materials/PointsMaterial.js +89 -0
  485. package/src/materials/RawShaderMaterial.js +25 -0
  486. package/src/materials/ShaderMaterial.js +215 -6
  487. package/src/materials/ShadowMaterial.js +54 -0
  488. package/src/materials/SpriteMaterial.js +82 -0
  489. package/src/materials/nodes/Line2NodeMaterial.js +14 -14
  490. package/src/materials/nodes/LineBasicNodeMaterial.js +3 -3
  491. package/src/materials/nodes/LineDashedNodeMaterial.js +12 -12
  492. package/src/materials/nodes/MeshBasicNodeMaterial.js +7 -7
  493. package/src/materials/nodes/MeshLambertNodeMaterial.js +5 -5
  494. package/src/materials/nodes/MeshMatcapNodeMaterial.js +3 -3
  495. package/src/materials/nodes/MeshNormalNodeMaterial.js +8 -4
  496. package/src/materials/nodes/MeshPhongNodeMaterial.js +9 -9
  497. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +43 -43
  498. package/src/materials/nodes/MeshSSSNodeMaterial.js +18 -21
  499. package/src/materials/nodes/MeshStandardNodeMaterial.js +11 -11
  500. package/src/materials/nodes/MeshToonNodeMaterial.js +4 -4
  501. package/src/materials/nodes/NodeMaterial.js +66 -47
  502. package/src/materials/nodes/PointsNodeMaterial.js +6 -6
  503. package/src/materials/nodes/ShadowNodeMaterial.js +13 -4
  504. package/src/materials/nodes/SpriteNodeMaterial.js +17 -9
  505. package/src/materials/nodes/VolumeNodeMaterial.js +25 -128
  506. package/src/materials/nodes/manager/NodeMaterialObserver.js +8 -8
  507. package/src/math/Box2.js +177 -0
  508. package/src/math/Box3.js +243 -0
  509. package/src/math/Color.js +343 -0
  510. package/src/math/Cylindrical.js +65 -6
  511. package/src/math/Euler.js +137 -4
  512. package/src/math/Frustum.js +83 -0
  513. package/src/math/Interpolant.js +87 -8
  514. package/src/math/Line3.js +94 -0
  515. package/src/math/MathUtils.js +405 -19
  516. package/src/math/Matrix2.js +70 -0
  517. package/src/math/Matrix3.js +229 -4
  518. package/src/math/Matrix4.js +368 -3
  519. package/src/math/Plane.js +164 -2
  520. package/src/math/Quaternion.js +262 -6
  521. package/src/math/Ray.js +160 -0
  522. package/src/math/Sphere.js +147 -0
  523. package/src/math/Spherical.js +70 -8
  524. package/src/math/SphericalHarmonics3.js +112 -14
  525. package/src/math/Triangle.js +206 -2
  526. package/src/math/Vector2.js +388 -2
  527. package/src/math/Vector3.js +541 -4
  528. package/src/math/Vector4.js +393 -0
  529. package/src/math/interpolants/CubicInterpolant.js +10 -1
  530. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  531. package/src/math/interpolants/LinearInterpolant.js +13 -0
  532. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  533. package/src/nodes/Nodes.js +1 -0
  534. package/src/nodes/TSL.js +1 -0
  535. package/src/nodes/accessors/AccessorsUtils.js +4 -2
  536. package/src/nodes/accessors/Arrays.js +6 -6
  537. package/src/nodes/accessors/BatchNode.js +10 -11
  538. package/src/nodes/accessors/Bitangent.js +6 -2
  539. package/src/nodes/accessors/BufferAttributeNode.js +33 -31
  540. package/src/nodes/accessors/BufferNode.js +12 -13
  541. package/src/nodes/accessors/BuiltinNode.js +7 -8
  542. package/src/nodes/accessors/Camera.js +9 -2
  543. package/src/nodes/accessors/ClippingNode.js +4 -4
  544. package/src/nodes/accessors/CubeTextureNode.js +17 -19
  545. package/src/nodes/accessors/InstanceNode.js +10 -11
  546. package/src/nodes/accessors/InstancedMeshNode.js +3 -4
  547. package/src/nodes/accessors/Lights.js +12 -15
  548. package/src/nodes/accessors/MaterialNode.js +45 -9
  549. package/src/nodes/accessors/MaterialProperties.js +51 -2
  550. package/src/nodes/accessors/MaterialReferenceNode.js +11 -12
  551. package/src/nodes/accessors/ModelNode.js +20 -3
  552. package/src/nodes/accessors/ModelViewProjectionNode.js +1 -2
  553. package/src/nodes/accessors/MorphNode.js +29 -26
  554. package/src/nodes/accessors/Normal.js +11 -3
  555. package/src/nodes/accessors/Object3DNode.js +51 -16
  556. package/src/nodes/accessors/PointUVNode.js +2 -3
  557. package/src/nodes/accessors/Position.js +8 -3
  558. package/src/nodes/accessors/ReferenceBaseNode.js +29 -29
  559. package/src/nodes/accessors/ReferenceNode.js +31 -31
  560. package/src/nodes/accessors/ReflectVector.js +4 -2
  561. package/src/nodes/accessors/RendererReferenceNode.js +9 -10
  562. package/src/nodes/accessors/SceneNode.js +5 -4
  563. package/src/nodes/accessors/SkinningNode.js +53 -44
  564. package/src/nodes/accessors/StorageBufferNode.js +24 -24
  565. package/src/nodes/accessors/StorageTextureNode.js +17 -17
  566. package/src/nodes/accessors/Tangent.js +6 -2
  567. package/src/nodes/accessors/Texture3DNode.js +11 -12
  568. package/src/nodes/accessors/TextureBicubic.js +2 -3
  569. package/src/nodes/accessors/TextureNode.js +68 -47
  570. package/src/nodes/accessors/TextureSizeNode.js +5 -6
  571. package/src/nodes/accessors/UV.js +2 -3
  572. package/src/nodes/accessors/UniformArrayNode.js +24 -24
  573. package/src/nodes/accessors/UserDataNode.js +11 -12
  574. package/src/nodes/accessors/VelocityNode.js +4 -5
  575. package/src/nodes/accessors/VertexColorNode.js +7 -8
  576. package/src/nodes/code/CodeNode.js +15 -13
  577. package/src/nodes/code/ExpressionNode.js +8 -9
  578. package/src/nodes/code/FunctionCallNode.js +29 -9
  579. package/src/nodes/code/FunctionNode.js +1 -1
  580. package/src/nodes/code/ScriptableNode.js +27 -28
  581. package/src/nodes/code/ScriptableValueNode.js +11 -12
  582. package/src/nodes/core/ArrayNode.js +29 -12
  583. package/src/nodes/core/AssignNode.js +4 -5
  584. package/src/nodes/core/AttributeNode.js +8 -9
  585. package/src/nodes/core/BypassNode.js +3 -4
  586. package/src/nodes/core/CacheNode.js +5 -6
  587. package/src/nodes/core/ConstNode.js +4 -4
  588. package/src/nodes/core/ContextNode.js +9 -9
  589. package/src/nodes/core/IndexNode.js +8 -4
  590. package/src/nodes/core/InputNode.js +7 -7
  591. package/src/nodes/core/LightingModel.js +17 -17
  592. package/src/nodes/core/MRTNode.js +9 -10
  593. package/src/nodes/core/Node.js +49 -37
  594. package/src/nodes/core/NodeAttribute.js +7 -7
  595. package/src/nodes/core/NodeBuilder.js +248 -175
  596. package/src/nodes/core/NodeCache.js +4 -4
  597. package/src/nodes/core/NodeCode.js +6 -6
  598. package/src/nodes/core/NodeFrame.js +10 -10
  599. package/src/nodes/core/NodeFunction.js +8 -8
  600. package/src/nodes/core/NodeFunctionInput.js +8 -8
  601. package/src/nodes/core/NodeParser.js +1 -1
  602. package/src/nodes/core/NodeUniform.js +7 -7
  603. package/src/nodes/core/NodeUtils.js +22 -24
  604. package/src/nodes/core/NodeVar.js +9 -9
  605. package/src/nodes/core/NodeVarying.js +4 -4
  606. package/src/nodes/core/OutputStructNode.js +2 -3
  607. package/src/nodes/core/ParameterNode.js +6 -7
  608. package/src/nodes/core/PropertyNode.js +41 -13
  609. package/src/nodes/core/StackNode.js +11 -12
  610. package/src/nodes/core/StructNode.js +2 -3
  611. package/src/nodes/core/StructTypeNode.js +10 -6
  612. package/src/nodes/core/TempNode.js +3 -3
  613. package/src/nodes/core/UniformGroupNode.js +15 -12
  614. package/src/nodes/core/UniformNode.js +9 -10
  615. package/src/nodes/core/VarNode.js +14 -18
  616. package/src/nodes/core/VaryingNode.js +10 -10
  617. package/src/nodes/core/constants.js +0 -2
  618. package/src/nodes/display/BlendModes.js +21 -14
  619. package/src/nodes/display/BumpMapNode.js +5 -6
  620. package/src/nodes/display/ColorAdjustment.js +13 -9
  621. package/src/nodes/display/ColorSpaceFunctions.js +4 -4
  622. package/src/nodes/display/ColorSpaceNode.js +15 -12
  623. package/src/nodes/display/FrontFacingNode.js +3 -3
  624. package/src/nodes/display/NormalMapNode.js +5 -6
  625. package/src/nodes/display/PassNode.js +122 -35
  626. package/src/nodes/display/PosterizeNode.js +2 -3
  627. package/src/nodes/display/RenderOutputNode.js +8 -9
  628. package/src/nodes/display/ScreenNode.js +16 -7
  629. package/src/nodes/display/ToneMappingFunctions.js +12 -8
  630. package/src/nodes/display/ToneMappingNode.js +8 -8
  631. package/src/nodes/display/ToonOutlinePassNode.js +3 -4
  632. package/src/nodes/display/ViewportDepthNode.js +15 -7
  633. package/src/nodes/display/ViewportDepthTextureNode.js +6 -7
  634. package/src/nodes/display/ViewportSharedTextureNode.js +6 -7
  635. package/src/nodes/display/ViewportTextureNode.js +16 -16
  636. package/src/nodes/fog/Fog.js +5 -2
  637. package/src/nodes/functions/BSDF/LTC.js +45 -1
  638. package/src/nodes/functions/BasicLightingModel.js +5 -8
  639. package/src/nodes/functions/PhongLightingModel.js +6 -8
  640. package/src/nodes/functions/PhysicalLightingModel.js +40 -42
  641. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  642. package/src/nodes/functions/ToonLightingModel.js +5 -6
  643. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  644. package/src/nodes/functions/material/getParallaxCorrectNormal.js +8 -8
  645. package/src/nodes/geometry/RangeNode.js +4 -5
  646. package/src/nodes/gpgpu/AtomicFunctionNode.js +33 -48
  647. package/src/nodes/gpgpu/BarrierNode.js +6 -4
  648. package/src/nodes/gpgpu/ComputeBuiltinNode.js +26 -31
  649. package/src/nodes/gpgpu/ComputeNode.js +43 -16
  650. package/src/nodes/gpgpu/WorkgroupInfoNode.js +16 -17
  651. package/src/nodes/lighting/AONode.js +2 -2
  652. package/src/nodes/lighting/AmbientLightNode.js +1 -1
  653. package/src/nodes/lighting/AnalyticLightNode.js +50 -9
  654. package/src/nodes/lighting/BasicLightMapNode.js +2 -2
  655. package/src/nodes/lighting/DirectionalLightNode.js +3 -12
  656. package/src/nodes/lighting/EnvironmentNode.js +5 -8
  657. package/src/nodes/lighting/HemisphereLightNode.js +1 -1
  658. package/src/nodes/lighting/LightProbeNode.js +1 -1
  659. package/src/nodes/lighting/LightUtils.js +1 -5
  660. package/src/nodes/lighting/LightingContextNode.js +10 -10
  661. package/src/nodes/lighting/LightingNode.js +1 -1
  662. package/src/nodes/lighting/LightsNode.js +68 -25
  663. package/src/nodes/lighting/PointLightNode.js +12 -27
  664. package/src/nodes/lighting/PointShadowNode.js +5 -6
  665. package/src/nodes/lighting/RectAreaLightNode.js +5 -10
  666. package/src/nodes/lighting/ShadowBaseNode.js +8 -9
  667. package/src/nodes/lighting/ShadowNode.js +28 -15
  668. package/src/nodes/lighting/SpotLightNode.js +8 -19
  669. package/src/nodes/math/ConditionalNode.js +26 -9
  670. package/src/nodes/math/Hash.js +2 -3
  671. package/src/nodes/math/MathNode.js +217 -150
  672. package/src/nodes/math/MathUtils.js +8 -6
  673. package/src/nodes/math/OperatorNode.js +198 -89
  674. package/src/nodes/math/TriNoise3D.js +2 -3
  675. package/src/nodes/parsers/GLSLNodeFunction.js +3 -3
  676. package/src/nodes/parsers/GLSLNodeParser.js +1 -1
  677. package/src/nodes/pmrem/PMREMNode.js +61 -37
  678. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  679. package/src/nodes/procedural/Checker.js +2 -3
  680. package/src/nodes/shapes/Shapes.js +2 -3
  681. package/src/nodes/tsl/TSLBase.js +2 -1
  682. package/src/nodes/tsl/TSLCore.js +117 -19
  683. package/src/nodes/utils/ArrayElementNode.js +5 -3
  684. package/src/nodes/utils/ConvertNode.js +3 -3
  685. package/src/nodes/utils/CubeMapNode.js +7 -8
  686. package/src/nodes/utils/DebugNode.js +70 -0
  687. package/src/nodes/utils/Discard.js +5 -5
  688. package/src/nodes/utils/EquirectUVNode.js +3 -4
  689. package/src/nodes/utils/FlipNode.js +3 -3
  690. package/src/nodes/utils/FunctionOverloadingNode.js +3 -4
  691. package/src/nodes/utils/JoinNode.js +29 -4
  692. package/src/nodes/utils/LoopNode.js +67 -35
  693. package/src/nodes/utils/MatcapUVNode.js +1 -2
  694. package/src/nodes/utils/MaxMipLevelNode.js +4 -5
  695. package/src/nodes/utils/MemberNode.js +2 -2
  696. package/src/nodes/utils/Oscillators.js +8 -6
  697. package/src/nodes/utils/Packing.js +4 -4
  698. package/src/nodes/utils/PostProcessingUtils.js +6 -5
  699. package/src/nodes/utils/RTTNode.js +19 -19
  700. package/src/nodes/utils/ReflectorNode.js +35 -25
  701. package/src/nodes/utils/RemapNode.js +9 -9
  702. package/src/nodes/utils/RotateNode.js +3 -4
  703. package/src/nodes/utils/SetNode.js +3 -3
  704. package/src/nodes/utils/SplitNode.js +5 -5
  705. package/src/nodes/utils/SpriteSheetUVNode.js +4 -5
  706. package/src/nodes/utils/SpriteUtils.js +5 -6
  707. package/src/nodes/utils/StorageArrayElementNode.js +3 -4
  708. package/src/nodes/utils/Timer.js +9 -5
  709. package/src/nodes/utils/TriplanarTexturesNode.js +20 -20
  710. package/src/nodes/utils/UVUtils.js +4 -4
  711. package/src/nodes/utils/ViewportUtils.js +3 -4
  712. package/src/objects/BatchedMesh.js +319 -32
  713. package/src/objects/Bone.js +24 -0
  714. package/src/objects/ClippingGroup.js +4 -4
  715. package/src/objects/Group.js +24 -0
  716. package/src/objects/InstancedMesh.js +120 -2
  717. package/src/objects/LOD.js +99 -5
  718. package/src/objects/Line.js +82 -0
  719. package/src/objects/LineLoop.js +20 -0
  720. package/src/objects/LineSegments.js +18 -0
  721. package/src/objects/Mesh.js +75 -0
  722. package/src/objects/Points.js +60 -0
  723. package/src/objects/Skeleton.js +105 -0
  724. package/src/objects/SkinnedMesh.js +99 -5
  725. package/src/objects/Sprite.js +54 -0
  726. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  727. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  728. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  729. package/src/renderers/WebGLRenderTarget.js +19 -0
  730. package/src/renderers/WebGLRenderer.js +622 -83
  731. package/src/renderers/common/Animation.js +6 -6
  732. package/src/renderers/common/Attributes.js +3 -3
  733. package/src/renderers/common/Backend.js +40 -31
  734. package/src/renderers/common/Background.js +4 -3
  735. package/src/renderers/common/BindGroup.js +5 -5
  736. package/src/renderers/common/Binding.js +4 -4
  737. package/src/renderers/common/Bindings.js +10 -0
  738. package/src/renderers/common/Buffer.js +5 -5
  739. package/src/renderers/common/BufferUtils.js +7 -9
  740. package/src/renderers/common/BundleGroup.js +6 -6
  741. package/src/renderers/common/ChainMap.js +3 -3
  742. package/src/renderers/common/ClippingContext.js +8 -8
  743. package/src/renderers/common/Color4.js +8 -8
  744. package/src/renderers/common/ComputePipeline.js +2 -2
  745. package/src/renderers/common/CubeRenderTarget.js +13 -0
  746. package/src/renderers/common/DataMap.js +2 -2
  747. package/src/renderers/common/Geometries.js +6 -6
  748. package/src/renderers/common/IndirectStorageBufferAttribute.js +3 -3
  749. package/src/renderers/common/Info.js +17 -17
  750. package/src/renderers/common/Pipeline.js +3 -3
  751. package/src/renderers/common/Pipelines.js +12 -12
  752. package/src/renderers/common/PostProcessing.js +13 -1
  753. package/src/renderers/common/ProgrammableStage.js +11 -11
  754. package/src/renderers/common/QuadMesh.js +5 -3
  755. package/src/renderers/common/RenderContext.js +24 -24
  756. package/src/renderers/common/RenderContexts.js +4 -4
  757. package/src/renderers/common/RenderList.js +16 -16
  758. package/src/renderers/common/RenderObject.js +27 -27
  759. package/src/renderers/common/RenderObjects.js +4 -4
  760. package/src/renderers/common/RenderPipeline.js +1 -1
  761. package/src/renderers/common/Renderer.js +272 -200
  762. package/src/renderers/common/RendererUtils.js +0 -2
  763. package/src/renderers/common/SampledTexture.js +20 -20
  764. package/src/renderers/common/Sampler.js +5 -5
  765. package/src/renderers/common/StorageBuffer.js +2 -2
  766. package/src/renderers/common/StorageBufferAttribute.js +4 -4
  767. package/src/renderers/common/StorageInstancedBufferAttribute.js +4 -4
  768. package/src/renderers/common/StorageTexture.js +6 -6
  769. package/src/renderers/common/Textures.js +6 -6
  770. package/src/renderers/common/TimestampQueryPool.js +66 -7
  771. package/src/renderers/common/Uniform.js +26 -26
  772. package/src/renderers/common/UniformBuffer.js +2 -2
  773. package/src/renderers/common/UniformsGroup.js +18 -18
  774. package/src/renderers/common/XRManager.js +369 -54
  775. package/src/renderers/common/XRRenderTarget.js +5 -5
  776. package/src/renderers/common/extras/PMREMGenerator.js +62 -37
  777. package/src/renderers/common/nodes/NodeBuilderState.js +7 -7
  778. package/src/renderers/common/nodes/NodeLibrary.js +13 -13
  779. package/src/renderers/common/nodes/NodeSampledTexture.js +12 -12
  780. package/src/renderers/common/nodes/NodeSampler.js +1 -1
  781. package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
  782. package/src/renderers/common/nodes/NodeUniform.js +9 -9
  783. package/src/renderers/common/nodes/NodeUniformsGroup.js +3 -3
  784. package/src/renderers/common/nodes/Nodes.js +13 -13
  785. package/src/renderers/shaders/UniformsLib.js +1 -4
  786. package/src/renderers/shaders/UniformsUtils.js +1 -3
  787. package/src/renderers/webgl/WebGLBackground.js +4 -2
  788. package/src/renderers/webgl/WebGLState.js +19 -19
  789. package/src/renderers/webgl-fallback/WebGLBackend.js +163 -146
  790. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +4 -4
  791. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +89 -99
  792. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +2 -2
  793. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +5 -5
  794. package/src/renderers/webgl-fallback/utils/WebGLState.js +97 -47
  795. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +79 -31
  796. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +37 -29
  797. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -3
  798. package/src/renderers/webgpu/WebGPUBackend.js +200 -119
  799. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +3 -13
  800. package/src/renderers/webgpu/WebGPURenderer.js +19 -13
  801. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +171 -178
  802. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -3
  803. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +1 -1
  804. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +43 -9
  805. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +2 -2
  806. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  807. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +18 -10
  808. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +9 -9
  809. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +37 -37
  810. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +31 -18
  811. package/src/renderers/webgpu/utils/WebGPUUtils.js +9 -9
  812. package/src/renderers/webxr/WebXRController.js +87 -2
  813. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  814. package/src/renderers/webxr/WebXRManager.js +187 -11
  815. package/src/scenes/Fog.js +60 -0
  816. package/src/scenes/FogExp2.js +51 -0
  817. package/src/scenes/Scene.js +88 -0
  818. package/src/textures/CanvasTexture.js +28 -0
  819. package/src/textures/CompressedArrayTexture.js +57 -0
  820. package/src/textures/CompressedCubeTexture.js +29 -0
  821. package/src/textures/CompressedTexture.js +64 -6
  822. package/src/textures/CubeTexture.js +52 -4
  823. package/src/textures/Data3DTexture.js +77 -0
  824. package/src/textures/DataArrayTexture.js +93 -0
  825. package/src/textures/DataTexture.js +65 -0
  826. package/src/textures/DepthTexture.js +61 -9
  827. package/src/textures/FramebufferTexture.js +62 -0
  828. package/src/textures/Source.js +69 -0
  829. package/src/textures/Texture.js +362 -3
  830. package/src/textures/VideoFrameTexture.js +43 -6
  831. package/src/textures/VideoTexture.js +49 -4
  832. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -23,18 +23,24 @@ import WebGLTimestampQueryPool from './utils/WebGLTimestampQueryPool.js';
23
23
  */
24
24
  class WebGLBackend extends Backend {
25
25
 
26
+ /**
27
+ * WebGLBackend options.
28
+ *
29
+ * @typedef {Object} WebGLBackend~Options
30
+ * @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
31
+ * @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
32
+ * @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
33
+ * @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
34
+ * @property {boolean} [antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
35
+ * @property {number} [samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.
36
+ * @property {boolean} [forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
37
+ * @property {WebGL2RenderingContext} [context=undefined] - A WebGL 2 rendering context.
38
+ */
39
+
26
40
  /**
27
41
  * Constructs a new WebGPU backend.
28
42
  *
29
- * @param {Object} parameters - The configuration parameter.
30
- * @param {Boolean} [parameters.logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
31
- * @param {Boolean} [parameters.alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
32
- * @param {Boolean} [parameters.depth=true] - Whether the default framebuffer should have a depth buffer or not.
33
- * @param {Boolean} [parameters.stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
34
- * @param {Boolean} [parameters.antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
35
- * @param {Number} [parameters.samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.
36
- * @param {Boolean} [parameters.forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
37
- * @param {WebGL2RenderingContext} [parameters.context=undefined] - A WebGL 2 rendering context.
43
+ * @param {WebGLBackend~Options} [parameters] - The configuration parameter.
38
44
  */
39
45
  constructor( parameters = {} ) {
40
46
 
@@ -43,7 +49,7 @@ class WebGLBackend extends Backend {
43
49
  /**
44
50
  * This flag can be used for type testing.
45
51
  *
46
- * @type {Boolean}
52
+ * @type {boolean}
47
53
  * @readonly
48
54
  * @default true
49
55
  */
@@ -53,7 +59,7 @@ class WebGLBackend extends Backend {
53
59
  * A reference to a backend module holding shader attribute-related
54
60
  * utility functions.
55
61
  *
56
- * @type {WebGLAttributeUtils?}
62
+ * @type {?WebGLAttributeUtils}
57
63
  * @default null
58
64
  */
59
65
  this.attributeUtils = null;
@@ -62,7 +68,7 @@ class WebGLBackend extends Backend {
62
68
  * A reference to a backend module holding extension-related
63
69
  * utility functions.
64
70
  *
65
- * @type {WebGLExtensions?}
71
+ * @type {?WebGLExtensions}
66
72
  * @default null
67
73
  */
68
74
  this.extensions = null;
@@ -71,7 +77,7 @@ class WebGLBackend extends Backend {
71
77
  * A reference to a backend module holding capability-related
72
78
  * utility functions.
73
79
  *
74
- * @type {WebGLCapabilities?}
80
+ * @type {?WebGLCapabilities}
75
81
  * @default null
76
82
  */
77
83
  this.capabilities = null;
@@ -80,7 +86,7 @@ class WebGLBackend extends Backend {
80
86
  * A reference to a backend module holding texture-related
81
87
  * utility functions.
82
88
  *
83
- * @type {WebGLTextureUtils?}
89
+ * @type {?WebGLTextureUtils}
84
90
  * @default null
85
91
  */
86
92
  this.textureUtils = null;
@@ -89,7 +95,7 @@ class WebGLBackend extends Backend {
89
95
  * A reference to a backend module holding renderer-related
90
96
  * utility functions.
91
97
  *
92
- * @type {WebGLBufferRenderer?}
98
+ * @type {?WebGLBufferRenderer}
93
99
  * @default null
94
100
  */
95
101
  this.bufferRenderer = null;
@@ -97,7 +103,7 @@ class WebGLBackend extends Backend {
97
103
  /**
98
104
  * A reference to the rendering context.
99
105
  *
100
- * @type {WebGL2RenderingContext?}
106
+ * @type {?WebGL2RenderingContext}
101
107
  * @default null
102
108
  */
103
109
  this.gl = null;
@@ -106,7 +112,7 @@ class WebGLBackend extends Backend {
106
112
  * A reference to a backend module holding state-related
107
113
  * utility functions.
108
114
  *
109
- * @type {WebGLState?}
115
+ * @type {?WebGLState}
110
116
  * @default null
111
117
  */
112
118
  this.state = null;
@@ -115,7 +121,7 @@ class WebGLBackend extends Backend {
115
121
  * A reference to a backend module holding common
116
122
  * utility functions.
117
123
  *
118
- * @type {WebGLUtils?}
124
+ * @type {?WebGLUtils}
119
125
  * @default null
120
126
  */
121
127
  this.utils = null;
@@ -123,14 +129,14 @@ class WebGLBackend extends Backend {
123
129
  /**
124
130
  * Dictionary for caching VAOs.
125
131
  *
126
- * @type {Object<String,WebGLVertexArrayObject>}
132
+ * @type {Object<string,WebGLVertexArrayObject>}
127
133
  */
128
134
  this.vaoCache = {};
129
135
 
130
136
  /**
131
137
  * Dictionary for caching transform feedback objects.
132
138
  *
133
- * @type {Object<String,WebGLTransformFeedback>}
139
+ * @type {Object<string,WebGLTransformFeedback>}
134
140
  */
135
141
  this.transformFeedbackCache = {};
136
142
 
@@ -138,7 +144,7 @@ class WebGLBackend extends Backend {
138
144
  * Controls if `gl.RASTERIZER_DISCARD` should be enabled or not.
139
145
  * Only relevant when using compute shaders.
140
146
  *
141
- * @type {Boolean}
147
+ * @type {boolean}
142
148
  * @default false
143
149
  */
144
150
  this.discard = false;
@@ -147,7 +153,7 @@ class WebGLBackend extends Backend {
147
153
  * A reference to the `EXT_disjoint_timer_query_webgl2` extension. `null` if the
148
154
  * device does not support the extension.
149
155
  *
150
- * @type {EXTDisjointTimerQueryWebGL2?}
156
+ * @type {?EXTDisjointTimerQueryWebGL2}
151
157
  * @default null
152
158
  */
153
159
  this.disjoint = null;
@@ -156,19 +162,11 @@ class WebGLBackend extends Backend {
156
162
  * A reference to the `KHR_parallel_shader_compile` extension. `null` if the
157
163
  * device does not support the extension.
158
164
  *
159
- * @type {KHRParallelShaderCompile?}
165
+ * @type {?KHRParallelShaderCompile}
160
166
  * @default null
161
167
  */
162
168
  this.parallel = null;
163
169
 
164
- /**
165
- * Whether to track timestamps with a Timestamp Query API or not.
166
- *
167
- * @type {Boolean}
168
- * @default false
169
- */
170
- this.trackTimestamp = ( parameters.trackTimestamp === true );
171
-
172
170
  /**
173
171
  * A reference to the current render context.
174
172
  *
@@ -186,6 +184,15 @@ class WebGLBackend extends Backend {
186
184
  */
187
185
  this._knownBindings = new WeakSet();
188
186
 
187
+
188
+ /**
189
+ * Whether the device supports framebuffers invalidation or not.
190
+ *
191
+ * @private
192
+ * @type {boolean}
193
+ */
194
+ this._supportsInvalidateFramebuffer = typeof navigator === 'undefined' ? false : /OculusBrowser/g.test( navigator.userAgent );
195
+
189
196
  /**
190
197
  * The target framebuffer when rendering with
191
198
  * the WebXR device API.
@@ -194,7 +201,7 @@ class WebGLBackend extends Backend {
194
201
  * @type {WebGLFramebuffer}
195
202
  * @default null
196
203
  */
197
- this._xrFamebuffer = null;
204
+ this._xrFramebuffer = null;
198
205
 
199
206
  }
200
207
 
@@ -212,10 +219,10 @@ class WebGLBackend extends Backend {
212
219
  const parameters = this.parameters;
213
220
 
214
221
  const contextAttributes = {
215
- antialias: false, // MSAA is applied via a custom renderbuffer
222
+ antialias: renderer.samples > 0,
216
223
  alpha: true, // always true for performance reasons
217
- depth: false, // depth and stencil are set to false since the engine always renders into a framebuffer target first
218
- stencil: false
224
+ depth: renderer.depth,
225
+ stencil: renderer.stencil
219
226
  };
220
227
 
221
228
  const glContext = ( parameters.context !== undefined ) ? parameters.context : renderer.domElement.getContext( 'webgl2', contextAttributes );
@@ -266,7 +273,7 @@ class WebGLBackend extends Backend {
266
273
  /**
267
274
  * The coordinate system of the backend.
268
275
  *
269
- * @type {Number}
276
+ * @type {number}
270
277
  * @readonly
271
278
  */
272
279
  get coordinateSystem() {
@@ -322,11 +329,11 @@ class WebGLBackend extends Backend {
322
329
  /**
323
330
  * Sets the XR rendering destination.
324
331
  *
325
- * @param {WebGLFramebuffer} xrFamebuffer - The XR framebuffer.
332
+ * @param {WebGLFramebuffer} xrFramebuffer - The XR framebuffer.
326
333
  */
327
- setXRTarget( xrFamebuffer ) {
334
+ setXRTarget( xrFramebuffer ) {
328
335
 
329
- this._xrFamebuffer = xrFamebuffer;
336
+ this._xrFramebuffer = xrFramebuffer;
330
337
 
331
338
  }
332
339
 
@@ -337,7 +344,7 @@ class WebGLBackend extends Backend {
337
344
  *
338
345
  * @param {XRRenderTarget} renderTarget - The XR render target.
339
346
  * @param {WebGLTexture} colorTexture - A native color texture.
340
- * @param {WebGLTexture?} [depthTexture=null] - A native depth texture.
347
+ * @param {?WebGLTexture} [depthTexture=null] - A native depth texture.
341
348
  */
342
349
  setXRRenderTargetTextures( renderTarget, colorTexture, depthTexture = null ) {
343
350
 
@@ -351,16 +358,16 @@ class WebGLBackend extends Backend {
351
358
 
352
359
  this.set( renderTarget.depthTexture, { textureGPU: depthTexture, glInternalFormat: glInternalFormat } );
353
360
 
354
- renderTarget.autoAllocateDepthBuffer = false;
355
-
356
361
  // The multisample_render_to_texture extension doesn't work properly if there
357
362
  // are midframe flushes and an external depth texture.
358
- if ( this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) {
363
+ if ( ( this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) && renderTarget.autoAllocateDepthBuffer ) {
359
364
 
360
365
  console.warn( 'THREE.WebGLBackend: Render-to-texture extension was disabled because an external texture was provided' );
361
366
 
362
367
  }
363
368
 
369
+ renderTarget.autoAllocateDepthBuffer = false;
370
+
364
371
  }
365
372
 
366
373
  }
@@ -438,18 +445,6 @@ class WebGLBackend extends Backend {
438
445
 
439
446
  //
440
447
 
441
- //
442
-
443
- this.initTimestampQuery( renderContext );
444
-
445
- renderContextData.previousContext = this._currentContext;
446
- this._currentContext = renderContext;
447
-
448
- this._setFramebuffer( renderContext );
449
-
450
- this.clear( renderContext.clearColor, renderContext.clearDepth, renderContext.clearStencil, renderContext, false );
451
-
452
- //
453
448
  if ( renderContext.viewport ) {
454
449
 
455
450
  this.updateViewport( renderContext );
@@ -468,6 +463,18 @@ class WebGLBackend extends Backend {
468
463
 
469
464
  }
470
465
 
466
+ //
467
+
468
+ this.initTimestampQuery( renderContext );
469
+
470
+ renderContextData.previousContext = this._currentContext;
471
+ this._currentContext = renderContext;
472
+
473
+ this._setFramebuffer( renderContext );
474
+
475
+ this.clear( renderContext.clearColor, renderContext.clearDepth, renderContext.clearStencil, renderContext, false );
476
+
477
+
471
478
  const occlusionQueryCount = renderContext.occlusionQueryCount;
472
479
 
473
480
  if ( occlusionQueryCount > 0 ) {
@@ -498,6 +505,8 @@ class WebGLBackend extends Backend {
498
505
  const renderContextData = this.get( renderContext );
499
506
  const previousContext = renderContextData.previousContext;
500
507
 
508
+ state.resetVertexState();
509
+
501
510
  const occlusionQueryCount = renderContext.occlusionQueryCount;
502
511
 
503
512
  if ( occlusionQueryCount > 0 ) {
@@ -562,12 +571,22 @@ class WebGLBackend extends Backend {
562
571
  const viewY = renderContext.height - height - y;
563
572
 
564
573
  gl.blitFramebuffer( x, viewY, x + width, viewY + height, x, viewY, x + width, viewY + height, mask, gl.NEAREST );
565
- gl.invalidateSubFramebuffer( gl.READ_FRAMEBUFFER, renderTargetContextData.invalidationArray, x, viewY, width, height );
574
+
575
+ if ( this._supportsInvalidateFramebuffer === true ) {
576
+
577
+ gl.invalidateSubFramebuffer( gl.READ_FRAMEBUFFER, renderTargetContextData.invalidationArray, x, viewY, width, height );
578
+
579
+ }
566
580
 
567
581
  } else {
568
582
 
569
583
  gl.blitFramebuffer( 0, 0, renderContext.width, renderContext.height, 0, 0, renderContext.width, renderContext.height, mask, gl.NEAREST );
570
- gl.invalidateFramebuffer( gl.READ_FRAMEBUFFER, renderTargetContextData.invalidationArray );
584
+
585
+ if ( this._supportsInvalidateFramebuffer === true ) {
586
+
587
+ gl.invalidateFramebuffer( gl.READ_FRAMEBUFFER, renderTargetContextData.invalidationArray );
588
+
589
+ }
571
590
 
572
591
  }
573
592
 
@@ -669,7 +688,7 @@ class WebGLBackend extends Backend {
669
688
  *
670
689
  * @param {RenderContext} renderContext - The render context.
671
690
  * @param {Object3D} object - The 3D object to test.
672
- * @return {Boolean} Whether the 3D object is fully occluded or not.
691
+ * @return {boolean} Whether the 3D object is fully occluded or not.
673
692
  */
674
693
  isOccluded( renderContext, object ) {
675
694
 
@@ -696,7 +715,7 @@ class WebGLBackend extends Backend {
696
715
  /**
697
716
  * Defines the scissor test.
698
717
  *
699
- * @param {Boolean} boolean - Whether the scissor test should be enabled or not.
718
+ * @param {boolean} boolean - Whether the scissor test should be enabled or not.
700
719
  */
701
720
  setScissorTest( boolean ) {
702
721
 
@@ -706,29 +725,44 @@ class WebGLBackend extends Backend {
706
725
 
707
726
  }
708
727
 
728
+ /**
729
+ * Returns the clear color and alpha into a single
730
+ * color object.
731
+ *
732
+ * @return {Color4} The clear color.
733
+ */
734
+ getClearColor() {
735
+
736
+ const clearColor = super.getClearColor();
737
+
738
+ // Since the canvas is always created with alpha: true,
739
+ // WebGL must always premultiply the clear color.
740
+
741
+ clearColor.r *= clearColor.a;
742
+ clearColor.g *= clearColor.a;
743
+ clearColor.b *= clearColor.a;
744
+
745
+ return clearColor;
746
+
747
+ }
748
+
709
749
  /**
710
750
  * Performs a clear operation.
711
751
  *
712
- * @param {Boolean} color - Whether the color buffer should be cleared or not.
713
- * @param {Boolean} depth - Whether the depth buffer should be cleared or not.
714
- * @param {Boolean} stencil - Whether the stencil buffer should be cleared or not.
715
- * @param {Object?} [descriptor=null] - The render context of the current set render target.
716
- * @param {Boolean} [setFrameBuffer=true] - TODO.
752
+ * @param {boolean} color - Whether the color buffer should be cleared or not.
753
+ * @param {boolean} depth - Whether the depth buffer should be cleared or not.
754
+ * @param {boolean} stencil - Whether the stencil buffer should be cleared or not.
755
+ * @param {?Object} [descriptor=null] - The render context of the current set render target.
756
+ * @param {boolean} [setFrameBuffer=true] - TODO.
717
757
  */
718
758
  clear( color, depth, stencil, descriptor = null, setFrameBuffer = true ) {
719
759
 
720
- const { gl } = this;
760
+ const { gl, renderer } = this;
721
761
 
722
762
  if ( descriptor === null ) {
723
763
 
724
764
  const clearColor = this.getClearColor();
725
765
 
726
- // premultiply alpha
727
-
728
- clearColor.r *= clearColor.a;
729
- clearColor.g *= clearColor.a;
730
- clearColor.b *= clearColor.a;
731
-
732
766
  descriptor = {
733
767
  textures: null,
734
768
  clearColorValue: clearColor
@@ -756,14 +790,11 @@ class WebGLBackend extends Backend {
756
790
 
757
791
  clearColor = this.getClearColor();
758
792
 
759
- // premultiply alpha
760
-
761
- clearColor.r *= clearColor.a;
762
- clearColor.g *= clearColor.a;
763
- clearColor.b *= clearColor.a;
764
-
765
793
  }
766
794
 
795
+ const clearDepth = renderer.getClearDepth();
796
+ const clearStencil = renderer.getClearStencil();
797
+
767
798
  if ( depth ) this.state.setDepthMask( true );
768
799
 
769
800
  if ( descriptor.textures === null ) {
@@ -779,7 +810,15 @@ class WebGLBackend extends Backend {
779
810
 
780
811
  for ( let i = 0; i < descriptor.textures.length; i ++ ) {
781
812
 
782
- gl.clearBufferfv( gl.COLOR, i, [ clearColor.r, clearColor.g, clearColor.b, clearColor.a ] );
813
+ if ( i === 0 ) {
814
+
815
+ gl.clearBufferfv( gl.COLOR, i, [ clearColor.r, clearColor.g, clearColor.b, clearColor.a ] );
816
+
817
+ } else {
818
+
819
+ gl.clearBufferfv( gl.COLOR, i, [ 0, 0, 0, 1 ] );
820
+
821
+ }
783
822
 
784
823
  }
785
824
 
@@ -787,15 +826,15 @@ class WebGLBackend extends Backend {
787
826
 
788
827
  if ( depth && stencil ) {
789
828
 
790
- gl.clearBufferfi( gl.DEPTH_STENCIL, 0, 1, 0 );
829
+ gl.clearBufferfi( gl.DEPTH_STENCIL, 0, clearDepth, clearStencil );
791
830
 
792
831
  } else if ( depth ) {
793
832
 
794
- gl.clearBufferfv( gl.DEPTH, 0, [ 1.0 ] );
833
+ gl.clearBufferfv( gl.DEPTH, 0, [ clearDepth ] );
795
834
 
796
835
  } else if ( stencil ) {
797
836
 
798
- gl.clearBufferiv( gl.STENCIL, 0, [ 0 ] );
837
+ gl.clearBufferiv( gl.STENCIL, 0, [ clearStencil ] );
799
838
 
800
839
  }
801
840
 
@@ -842,17 +881,17 @@ class WebGLBackend extends Backend {
842
881
 
843
882
  const { programGPU, transformBuffers, attributes } = this.get( pipeline );
844
883
 
845
- const vaoKey = this._getVaoKey( null, attributes );
884
+ const vaoKey = this._getVaoKey( attributes );
846
885
 
847
886
  const vaoGPU = this.vaoCache[ vaoKey ];
848
887
 
849
888
  if ( vaoGPU === undefined ) {
850
889
 
851
- this._createVao( null, attributes );
890
+ this._createVao( attributes );
852
891
 
853
892
  } else {
854
893
 
855
- gl.bindVertexArray( vaoGPU );
894
+ state.setVertexState( vaoGPU );
856
895
 
857
896
  }
858
897
 
@@ -950,7 +989,7 @@ class WebGLBackend extends Backend {
950
989
 
951
990
  state.useProgram( programGPU );
952
991
 
953
- //
992
+ // vertex state
954
993
 
955
994
  const renderObjectData = this.get( renderObject );
956
995
 
@@ -958,7 +997,7 @@ class WebGLBackend extends Backend {
958
997
 
959
998
  if ( vaoGPU === undefined || renderObjectData.geometryId !== renderObject.geometry.id ) {
960
999
 
961
- const vaoKey = this._getVaoKey( renderObject.getIndex(), renderObject.getAttributes() );
1000
+ const vaoKey = this._getVaoKey( renderObject.getAttributes() );
962
1001
 
963
1002
  vaoGPU = this.vaoCache[ vaoKey ];
964
1003
 
@@ -966,7 +1005,7 @@ class WebGLBackend extends Backend {
966
1005
 
967
1006
  let staticVao;
968
1007
 
969
- ( { vaoGPU, staticVao } = this._createVao( renderObject.getIndex(), renderObject.getAttributes() ) );
1008
+ ( { vaoGPU, staticVao } = this._createVao( renderObject.getAttributes() ) );
970
1009
 
971
1010
  if ( staticVao ) {
972
1011
 
@@ -979,11 +1018,10 @@ class WebGLBackend extends Backend {
979
1018
 
980
1019
  }
981
1020
 
982
- gl.bindVertexArray( vaoGPU );
983
-
984
- //
985
-
986
1021
  const index = renderObject.getIndex();
1022
+ const indexGPU = ( index !== null ) ? this.get( index ).bufferGPU : null;
1023
+
1024
+ state.setVertexState( vaoGPU, indexGPU );
987
1025
 
988
1026
  //
989
1027
 
@@ -1064,6 +1102,8 @@ class WebGLBackend extends Backend {
1064
1102
 
1065
1103
  if ( object._multiDrawInstances !== null ) {
1066
1104
 
1105
+ // @deprecated, r174
1106
+ warnOnce( 'THREE.WebGLBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
1067
1107
  renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
1068
1108
 
1069
1109
  } else if ( ! this.hasFeature( 'WEBGL_multi_draw' ) ) {
@@ -1153,17 +1193,13 @@ class WebGLBackend extends Backend {
1153
1193
 
1154
1194
  }
1155
1195
 
1156
- //
1157
-
1158
- gl.bindVertexArray( null );
1159
-
1160
1196
  }
1161
1197
 
1162
1198
  /**
1163
1199
  * Explain why always null is returned.
1164
1200
  *
1165
1201
  * @param {RenderObject} renderObject - The render object.
1166
- * @return {Boolean} Whether the render pipeline requires an update or not.
1202
+ * @return {boolean} Whether the render pipeline requires an update or not.
1167
1203
  */
1168
1204
  needsRenderUpdate( /*renderObject*/ ) {
1169
1205
 
@@ -1175,7 +1211,7 @@ class WebGLBackend extends Backend {
1175
1211
  * Explain why no cache key is computed.
1176
1212
  *
1177
1213
  * @param {RenderObject} renderObject - The render object.
1178
- * @return {String} The cache key.
1214
+ * @return {string} The cache key.
1179
1215
  */
1180
1216
  getRenderCacheKey( /*renderObject*/ ) {
1181
1217
 
@@ -1248,11 +1284,11 @@ class WebGLBackend extends Backend {
1248
1284
  *
1249
1285
  * @async
1250
1286
  * @param {Texture} texture - The texture to copy.
1251
- * @param {Number} x - The x coordinate of the copy origin.
1252
- * @param {Number} y - The y coordinate of the copy origin.
1253
- * @param {Number} width - The width of the copy.
1254
- * @param {Number} height - The height of the copy.
1255
- * @param {Number} faceIndex - The face index.
1287
+ * @param {number} x - The x coordinate of the copy origin.
1288
+ * @param {number} y - The y coordinate of the copy origin.
1289
+ * @param {number} width - The width of the copy.
1290
+ * @param {number} height - The height of the copy.
1291
+ * @param {number} faceIndex - The face index.
1256
1292
  * @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.
1257
1293
  */
1258
1294
  async copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {
@@ -1396,9 +1432,9 @@ class WebGLBackend extends Backend {
1396
1432
  * Formats the source code of error messages.
1397
1433
  *
1398
1434
  * @private
1399
- * @param {String} string - The code.
1400
- * @param {Number} errorLine - The error line.
1401
- * @return {String} The formatted code.
1435
+ * @param {string} string - The code.
1436
+ * @param {number} errorLine - The error line.
1437
+ * @return {string} The formatted code.
1402
1438
  */
1403
1439
  _handleSource( string, errorLine ) {
1404
1440
 
@@ -1425,8 +1461,8 @@ class WebGLBackend extends Backend {
1425
1461
  * @private
1426
1462
  * @param {WebGL2RenderingContext} gl - The rendering context.
1427
1463
  * @param {WebGLShader} shader - The WebGL shader object.
1428
- * @param {String} type - The shader type.
1429
- * @return {String} The shader errors.
1464
+ * @param {string} type - The shader type.
1465
+ * @return {string} The shader errors.
1430
1466
  */
1431
1467
  _getShaderErrors( gl, shader, type ) {
1432
1468
 
@@ -1639,8 +1675,8 @@ class WebGLBackend extends Backend {
1639
1675
  *
1640
1676
  * @param {BindGroup} bindGroup - The bind group.
1641
1677
  * @param {Array<BindGroup>} bindings - Array of bind groups.
1642
- * @param {Number} cacheIndex - The cache index.
1643
- * @param {Number} version - The version.
1678
+ * @param {number} cacheIndex - The cache index.
1679
+ * @param {number} version - The version.
1644
1680
  */
1645
1681
  createBindings( bindGroup, bindings /*, cacheIndex, version*/ ) {
1646
1682
 
@@ -1678,8 +1714,8 @@ class WebGLBackend extends Backend {
1678
1714
  *
1679
1715
  * @param {BindGroup} bindGroup - The bind group.
1680
1716
  * @param {Array<BindGroup>} bindings - Array of bind groups.
1681
- * @param {Number} cacheIndex - The cache index.
1682
- * @param {Number} version - The version.
1717
+ * @param {number} cacheIndex - The cache index.
1718
+ * @param {number} version - The version.
1683
1719
  */
1684
1720
  updateBindings( bindGroup /*, bindings, cacheIndex, version*/ ) {
1685
1721
 
@@ -1813,8 +1849,8 @@ class WebGLBackend extends Backend {
1813
1849
  /**
1814
1850
  * Checks if the given feature is supported by the backend.
1815
1851
  *
1816
- * @param {String} name - The feature's name.
1817
- * @return {Boolean} Whether the feature is supported or not.
1852
+ * @param {string} name - The feature's name.
1853
+ * @return {boolean} Whether the feature is supported or not.
1818
1854
  */
1819
1855
  hasFeature( name ) {
1820
1856
 
@@ -1835,7 +1871,7 @@ class WebGLBackend extends Backend {
1835
1871
  /**
1836
1872
  * Returns the maximum anisotropy texture filtering value.
1837
1873
  *
1838
- * @return {Number} The maximum anisotropy texture filtering value.
1874
+ * @return {number} The maximum anisotropy texture filtering value.
1839
1875
  */
1840
1876
  getMaxAnisotropy() {
1841
1877
 
@@ -1848,13 +1884,14 @@ class WebGLBackend extends Backend {
1848
1884
  *
1849
1885
  * @param {Texture} srcTexture - The source texture.
1850
1886
  * @param {Texture} dstTexture - The destination texture.
1851
- * @param {Vector4?} [srcRegion=null] - The region of the source texture to copy.
1852
- * @param {(Vector2|Vector3)?} [dstPosition=null] - The destination position of the copy.
1853
- * @param {Number} [level=0] - The mip level to copy.
1887
+ * @param {?(Box3|Box2)} [srcRegion=null] - The region of the source texture to copy.
1888
+ * @param {?(Vector2|Vector3)} [dstPosition=null] - The destination position of the copy.
1889
+ * @param {number} [srcLevel=0] - The source mip level to copy from.
1890
+ * @param {number} [dstLevel=0] - The destination mip level to copy to.
1854
1891
  */
1855
- copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {
1892
+ copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {
1856
1893
 
1857
- this.textureUtils.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, level );
1894
+ this.textureUtils.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, srcLevel, dstLevel );
1858
1895
 
1859
1896
  }
1860
1897
 
@@ -1912,7 +1949,7 @@ class WebGLBackend extends Backend {
1912
1949
 
1913
1950
  } else if ( isXRRenderTarget && hasExternalTextures === false ) {
1914
1951
 
1915
- fb = this._xrFamebuffer;
1952
+ fb = this._xrFramebuffer;
1916
1953
 
1917
1954
  } else {
1918
1955
 
@@ -1961,7 +1998,7 @@ class WebGLBackend extends Backend {
1961
1998
 
1962
1999
  } else {
1963
2000
 
1964
- if ( useMultisampledRTT ) {
2001
+ if ( hasExternalTextures && useMultisampledRTT ) {
1965
2002
 
1966
2003
  multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
1967
2004
 
@@ -1994,7 +2031,7 @@ class WebGLBackend extends Backend {
1994
2031
  textureData.renderTarget = descriptor.renderTarget;
1995
2032
  textureData.cacheKey = cacheKey; // required for copyTextureToTexture()
1996
2033
 
1997
- if ( useMultisampledRTT ) {
2034
+ if ( hasExternalTextures && useMultisampledRTT ) {
1998
2035
 
1999
2036
  multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
2000
2037
 
@@ -2135,22 +2172,13 @@ class WebGLBackend extends Backend {
2135
2172
  * Computes the VAO key for the given index and attributes.
2136
2173
  *
2137
2174
  * @private
2138
- * @param {BufferAttribute?} index - The index. `null` for non-indexed geometries.
2139
2175
  * @param {Array<BufferAttribute>} attributes - An array of buffer attributes.
2140
- * @return {String} The VAO key.
2176
+ * @return {string} The VAO key.
2141
2177
  */
2142
- _getVaoKey( index, attributes ) {
2178
+ _getVaoKey( attributes ) {
2143
2179
 
2144
2180
  let key = '';
2145
2181
 
2146
- if ( index !== null ) {
2147
-
2148
- const indexData = this.get( index );
2149
-
2150
- key += ':' + indexData.id;
2151
-
2152
- }
2153
-
2154
2182
  for ( let i = 0; i < attributes.length; i ++ ) {
2155
2183
 
2156
2184
  const attributeData = this.get( attributes[ i ] );
@@ -2167,11 +2195,10 @@ class WebGLBackend extends Backend {
2167
2195
  * Creates a VAO from the index and attributes.
2168
2196
  *
2169
2197
  * @private
2170
- * @param {BufferAttribute?} index - The index. `null` for non-indexed geometries.
2171
2198
  * @param {Array<BufferAttribute>} attributes - An array of buffer attributes.
2172
2199
  * @return {Object} The VAO data.
2173
2200
  */
2174
- _createVao( index, attributes ) {
2201
+ _createVao( attributes ) {
2175
2202
 
2176
2203
  const { gl } = this;
2177
2204
 
@@ -2182,16 +2209,6 @@ class WebGLBackend extends Backend {
2182
2209
 
2183
2210
  gl.bindVertexArray( vaoGPU );
2184
2211
 
2185
- if ( index !== null ) {
2186
-
2187
- const indexData = this.get( index );
2188
-
2189
- gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, indexData.bufferGPU );
2190
-
2191
- key += ':' + indexData.id;
2192
-
2193
- }
2194
-
2195
2212
  for ( let i = 0; i < attributes.length; i ++ ) {
2196
2213
 
2197
2214
  const attribute = attributes[ i ];
@@ -2371,7 +2388,7 @@ class WebGLBackend extends Backend {
2371
2388
  *
2372
2389
  * @private
2373
2390
  * @param {RenderTarget} renderTarget - The render target that should be multisampled.
2374
- * @return {Boolean} Whether to use the `WEBGL_multisampled_render_to_texture` extension for MSAA or not.
2391
+ * @return {boolean} Whether to use the `WEBGL_multisampled_render_to_texture` extension for MSAA or not.
2375
2392
  */
2376
2393
  _useMultisampledRTT( renderTarget ) {
2377
2394