super-three 0.173.5 → 0.176.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 +21993 -1359
  2. package/build/three.core.js +21129 -1188
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +835 -142
  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 +19493 -17617
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +19477 -17617
  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 +185 -9
  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
@@ -28,8 +28,6 @@ import { Vector4 } from '../../math/Vector4.js';
28
28
  import { RenderTarget } from '../../core/RenderTarget.js';
29
29
  import { DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping, LinearFilter, LinearSRGBColorSpace, HalfFloatType, RGBAFormat, PCFShadowMap } from '../../constants.js';
30
30
 
31
- /** @module Renderer **/
32
-
33
31
  const _scene = /*@__PURE__*/ new Scene();
34
32
  const _drawingBufferSize = /*@__PURE__*/ new Vector2();
35
33
  const _screen = /*@__PURE__*/ new Vector4();
@@ -43,27 +41,34 @@ const _vector4 = /*@__PURE__*/ new Vector4();
43
41
  class Renderer {
44
42
 
45
43
  /**
46
- * Constructs a new renderer.
44
+ * Renderer options.
47
45
  *
48
- * @param {Backend} backend - The backend the renderer is targeting (e.g. WebGPU or WebGL 2).
49
- * @param {Object} parameters - The configuration parameter.
50
- * @param {Boolean} [parameters.logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
51
- * @param {Boolean} [parameters.alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
52
- * @param {Boolean} [parameters.depth=true] - Whether the default framebuffer should have a depth buffer or not.
53
- * @param {Boolean} [parameters.stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
54
- * @param {Boolean} [parameters.antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
55
- * @param {Number} [parameters.samples=0] - When `antialias` is `true`, `4` samples are used by default. This parameter can set to any other integer value than 0
46
+ * @typedef {Object} Renderer~Options
47
+ * @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
48
+ * @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
49
+ * @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
50
+ * @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
51
+ * @property {boolean} [antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
52
+ * @property {number} [samples=0] - When `antialias` is `true`, `4` samples are used by default. This parameter can set to any other integer value than 0
56
53
  * to overwrite the default.
57
- * @param {Function?} [parameters.getFallback=null] - This callback function can be used to provide a fallback backend, if the primary backend can't be targeted.
58
- * @param {Number} [parameters.colorBufferType=HalfFloatType] - Defines the type of color buffers. The default `HalfFloatType` is recommend for best
54
+ * @property {?Function} [getFallback=null] - This callback function can be used to provide a fallback backend, if the primary backend can't be targeted.
55
+ * @property {number} [colorBufferType=HalfFloatType] - Defines the type of color buffers. The default `HalfFloatType` is recommend for best
59
56
  * quality. To save memory and bandwidth, `UnsignedByteType` might be used. This will reduce rendering quality though.
60
57
  */
58
+
59
+ /**
60
+ * Constructs a new renderer.
61
+ *
62
+ * @param {Backend} backend - The backend the renderer is targeting (e.g. WebGPU or WebGL 2).
63
+ * @param {Renderer~Options} [parameters] - The configuration parameter.
64
+
65
+ */
61
66
  constructor( backend, parameters = {} ) {
62
67
 
63
68
  /**
64
69
  * This flag can be used for type testing.
65
70
  *
66
- * @type {Boolean}
71
+ * @type {boolean}
67
72
  * @readonly
68
73
  * @default true
69
74
  */
@@ -101,7 +106,7 @@ class Renderer {
101
106
  /**
102
107
  * The number of MSAA samples.
103
108
  *
104
- * @type {Number}
109
+ * @type {number}
105
110
  * @default 0
106
111
  */
107
112
  this.samples = samples || ( antialias === true ) ? 4 : 0;
@@ -111,7 +116,7 @@ class Renderer {
111
116
  * before execute a `render()` call. The target can be the canvas (default framebuffer)
112
117
  * or the current bound render target (custom framebuffer).
113
118
  *
114
- * @type {Boolean}
119
+ * @type {boolean}
115
120
  * @default true
116
121
  */
117
122
  this.autoClear = true;
@@ -120,7 +125,7 @@ class Renderer {
120
125
  * When `autoClear` is set to `true`, this property defines whether the renderer
121
126
  * should clear the color buffer.
122
127
  *
123
- * @type {Boolean}
128
+ * @type {boolean}
124
129
  * @default true
125
130
  */
126
131
  this.autoClearColor = true;
@@ -129,7 +134,7 @@ class Renderer {
129
134
  * When `autoClear` is set to `true`, this property defines whether the renderer
130
135
  * should clear the depth buffer.
131
136
  *
132
- * @type {Boolean}
137
+ * @type {boolean}
133
138
  * @default true
134
139
  */
135
140
  this.autoClearDepth = true;
@@ -138,7 +143,7 @@ class Renderer {
138
143
  * When `autoClear` is set to `true`, this property defines whether the renderer
139
144
  * should clear the stencil buffer.
140
145
  *
141
- * @type {Boolean}
146
+ * @type {boolean}
142
147
  * @default true
143
148
  */
144
149
  this.autoClearStencil = true;
@@ -146,7 +151,7 @@ class Renderer {
146
151
  /**
147
152
  * Whether the default framebuffer should be transparent or opaque.
148
153
  *
149
- * @type {Boolean}
154
+ * @type {boolean}
150
155
  * @default true
151
156
  */
152
157
  this.alpha = alpha;
@@ -154,7 +159,7 @@ class Renderer {
154
159
  /**
155
160
  * Whether logarithmic depth buffer is enabled or not.
156
161
  *
157
- * @type {Boolean}
162
+ * @type {boolean}
158
163
  * @default false
159
164
  */
160
165
  this.logarithmicDepthBuffer = logarithmicDepthBuffer;
@@ -162,7 +167,7 @@ class Renderer {
162
167
  /**
163
168
  * Defines the output color space of the renderer.
164
169
  *
165
- * @type {String}
170
+ * @type {string}
166
171
  * @default SRGBColorSpace
167
172
  */
168
173
  this.outputColorSpace = SRGBColorSpace;
@@ -170,7 +175,7 @@ class Renderer {
170
175
  /**
171
176
  * Defines the tone mapping of the renderer.
172
177
  *
173
- * @type {Number}
178
+ * @type {number}
174
179
  * @default NoToneMapping
175
180
  */
176
181
  this.toneMapping = NoToneMapping;
@@ -178,7 +183,7 @@ class Renderer {
178
183
  /**
179
184
  * Defines the tone mapping exposure.
180
185
  *
181
- * @type {Number}
186
+ * @type {number}
182
187
  * @default 1
183
188
  */
184
189
  this.toneMappingExposure = 1.0;
@@ -191,7 +196,7 @@ class Renderer {
191
196
  * it may be necessary to turn off sorting and use other methods to deal with transparency rendering
192
197
  * e.g. manually determining each object's rendering order.
193
198
  *
194
- * @type {Boolean}
199
+ * @type {boolean}
195
200
  * @default true
196
201
  */
197
202
  this.sortObjects = true;
@@ -199,7 +204,7 @@ class Renderer {
199
204
  /**
200
205
  * Whether the default framebuffer should have a depth buffer or not.
201
206
  *
202
- * @type {Boolean}
207
+ * @type {boolean}
203
208
  * @default true
204
209
  */
205
210
  this.depth = depth;
@@ -207,7 +212,7 @@ class Renderer {
207
212
  /**
208
213
  * Whether the default framebuffer should have a stencil buffer or not.
209
214
  *
210
- * @type {Boolean}
215
+ * @type {boolean}
211
216
  * @default false
212
217
  */
213
218
  this.stencil = stencil;
@@ -249,15 +254,15 @@ class Renderer {
249
254
  * This callback function can be used to provide a fallback backend, if the primary backend can't be targeted.
250
255
  *
251
256
  * @private
252
- * @type {Function}
257
+ * @type {?Function}
253
258
  */
254
259
  this._getFallback = getFallback;
255
260
 
256
261
  /**
257
- * The renderer's pixel ration.
262
+ * The renderer's pixel ratio.
258
263
  *
259
264
  * @private
260
- * @type {Number}
265
+ * @type {number}
261
266
  * @default 1
262
267
  */
263
268
  this._pixelRatio = 1;
@@ -266,7 +271,7 @@ class Renderer {
266
271
  * The width of the renderer's default framebuffer in logical pixel unit.
267
272
  *
268
273
  * @private
269
- * @type {Number}
274
+ * @type {number}
270
275
  */
271
276
  this._width = this.domElement.width;
272
277
 
@@ -274,7 +279,7 @@ class Renderer {
274
279
  * The height of the renderer's default framebuffer in logical pixel unit.
275
280
  *
276
281
  * @private
277
- * @type {Number}
282
+ * @type {number}
278
283
  */
279
284
  this._height = this.domElement.height;
280
285
 
@@ -298,7 +303,7 @@ class Renderer {
298
303
  * Whether the scissor test should be enabled or not.
299
304
  *
300
305
  * @private
301
- * @type {Boolean}
306
+ * @type {boolean}
302
307
  */
303
308
  this._scissorTest = false;
304
309
 
@@ -306,7 +311,7 @@ class Renderer {
306
311
  * A reference to a renderer module for managing shader attributes.
307
312
  *
308
313
  * @private
309
- * @type {Attributes?}
314
+ * @type {?Attributes}
310
315
  * @default null
311
316
  */
312
317
  this._attributes = null;
@@ -315,7 +320,7 @@ class Renderer {
315
320
  * A reference to a renderer module for managing geometries.
316
321
  *
317
322
  * @private
318
- * @type {Geometries?}
323
+ * @type {?Geometries}
319
324
  * @default null
320
325
  */
321
326
  this._geometries = null;
@@ -324,7 +329,7 @@ class Renderer {
324
329
  * A reference to a renderer module for managing node related logic.
325
330
  *
326
331
  * @private
327
- * @type {Nodes?}
332
+ * @type {?Nodes}
328
333
  * @default null
329
334
  */
330
335
  this._nodes = null;
@@ -333,7 +338,7 @@ class Renderer {
333
338
  * A reference to a renderer module for managing the internal animation loop.
334
339
  *
335
340
  * @private
336
- * @type {Animation?}
341
+ * @type {?Animation}
337
342
  * @default null
338
343
  */
339
344
  this._animation = null;
@@ -342,7 +347,7 @@ class Renderer {
342
347
  * A reference to a renderer module for managing shader program bindings.
343
348
  *
344
349
  * @private
345
- * @type {Bindings?}
350
+ * @type {?Bindings}
346
351
  * @default null
347
352
  */
348
353
  this._bindings = null;
@@ -351,7 +356,7 @@ class Renderer {
351
356
  * A reference to a renderer module for managing render objects.
352
357
  *
353
358
  * @private
354
- * @type {RenderObjects?}
359
+ * @type {?RenderObjects}
355
360
  * @default null
356
361
  */
357
362
  this._objects = null;
@@ -360,7 +365,7 @@ class Renderer {
360
365
  * A reference to a renderer module for managing render and compute pipelines.
361
366
  *
362
367
  * @private
363
- * @type {Pipelines?}
368
+ * @type {?Pipelines}
364
369
  * @default null
365
370
  */
366
371
  this._pipelines = null;
@@ -369,7 +374,7 @@ class Renderer {
369
374
  * A reference to a renderer module for managing render bundles.
370
375
  *
371
376
  * @private
372
- * @type {RenderBundles?}
377
+ * @type {?RenderBundles}
373
378
  * @default null
374
379
  */
375
380
  this._bundles = null;
@@ -378,7 +383,7 @@ class Renderer {
378
383
  * A reference to a renderer module for managing render lists.
379
384
  *
380
385
  * @private
381
- * @type {RenderLists?}
386
+ * @type {?RenderLists}
382
387
  * @default null
383
388
  */
384
389
  this._renderLists = null;
@@ -387,7 +392,7 @@ class Renderer {
387
392
  * A reference to a renderer module for managing render contexts.
388
393
  *
389
394
  * @private
390
- * @type {RenderContexts?}
395
+ * @type {?RenderContexts}
391
396
  * @default null
392
397
  */
393
398
  this._renderContexts = null;
@@ -396,7 +401,7 @@ class Renderer {
396
401
  * A reference to a renderer module for managing textures.
397
402
  *
398
403
  * @private
399
- * @type {Textures?}
404
+ * @type {?Textures}
400
405
  * @default null
401
406
  */
402
407
  this._textures = null;
@@ -405,7 +410,7 @@ class Renderer {
405
410
  * A reference to a renderer module for backgrounds.
406
411
  *
407
412
  * @private
408
- * @type {Background?}
413
+ * @type {?Background}
409
414
  * @default null
410
415
  */
411
416
  this._background = null;
@@ -424,7 +429,7 @@ class Renderer {
424
429
  * A reference to the current render context.
425
430
  *
426
431
  * @private
427
- * @type {RenderContext?}
432
+ * @type {?RenderContext}
428
433
  * @default null
429
434
  */
430
435
  this._currentRenderContext = null;
@@ -433,7 +438,7 @@ class Renderer {
433
438
  * A custom sort function for the opaque render list.
434
439
  *
435
440
  * @private
436
- * @type {Function?}
441
+ * @type {?Function}
437
442
  * @default null
438
443
  */
439
444
  this._opaqueSort = null;
@@ -442,7 +447,7 @@ class Renderer {
442
447
  * A custom sort function for the transparent render list.
443
448
  *
444
449
  * @private
445
- * @type {Function?}
450
+ * @type {?Function}
446
451
  * @default null
447
452
  */
448
453
  this._transparentSort = null;
@@ -451,7 +456,7 @@ class Renderer {
451
456
  * The framebuffer target.
452
457
  *
453
458
  * @private
454
- * @type {RenderTarget?}
459
+ * @type {?RenderTarget}
455
460
  * @default null
456
461
  */
457
462
  this._frameBufferTarget = null;
@@ -470,7 +475,7 @@ class Renderer {
470
475
  * The clear depth value.
471
476
  *
472
477
  * @private
473
- * @type {Number}
478
+ * @type {number}
474
479
  * @default 1
475
480
  */
476
481
  this._clearDepth = 1;
@@ -479,7 +484,7 @@ class Renderer {
479
484
  * The clear stencil value.
480
485
  *
481
486
  * @private
482
- * @type {Number}
487
+ * @type {number}
483
488
  * @default 0
484
489
  */
485
490
  this._clearStencil = 0;
@@ -488,7 +493,7 @@ class Renderer {
488
493
  * The current render target.
489
494
  *
490
495
  * @private
491
- * @type {RenderTarget?}
496
+ * @type {?RenderTarget}
492
497
  * @default null
493
498
  */
494
499
  this._renderTarget = null;
@@ -497,7 +502,7 @@ class Renderer {
497
502
  * The active cube face.
498
503
  *
499
504
  * @private
500
- * @type {Number}
505
+ * @type {number}
501
506
  * @default 0
502
507
  */
503
508
  this._activeCubeFace = 0;
@@ -506,16 +511,25 @@ class Renderer {
506
511
  * The active mipmap level.
507
512
  *
508
513
  * @private
509
- * @type {Number}
514
+ * @type {number}
510
515
  * @default 0
511
516
  */
512
517
  this._activeMipmapLevel = 0;
513
518
 
519
+ /**
520
+ * The current output render target.
521
+ *
522
+ * @private
523
+ * @type {?RenderTarget}
524
+ * @default null
525
+ */
526
+ this._outputRenderTarget = null;
527
+
514
528
  /**
515
529
  * The MRT setting.
516
530
  *
517
531
  * @private
518
- * @type {MRTNode?}
532
+ * @type {?MRTNode}
519
533
  * @default null
520
534
  */
521
535
  this._mrt = null;
@@ -525,7 +539,7 @@ class Renderer {
525
539
  * to be rendered.
526
540
  *
527
541
  * @private
528
- * @type {Function?}
542
+ * @type {?Function}
529
543
  * @default null
530
544
  */
531
545
  this._renderObjectFunction = null;
@@ -534,7 +548,7 @@ class Renderer {
534
548
  * Used to keep track of the current render object function.
535
549
  *
536
550
  * @private
537
- * @type {Function?}
551
+ * @type {?Function}
538
552
  * @default null
539
553
  */
540
554
  this._currentRenderObjectFunction = null;
@@ -543,7 +557,7 @@ class Renderer {
543
557
  * Used to keep track of the current render bundle.
544
558
  *
545
559
  * @private
546
- * @type {RenderBundle?}
560
+ * @type {?RenderBundle}
547
561
  * @default null
548
562
  */
549
563
  this._currentRenderBundle = null;
@@ -557,7 +571,7 @@ class Renderer {
557
571
  * and pipeline updates.
558
572
  *
559
573
  * @private
560
- * @type {Function?}
574
+ * @type {?Function}
561
575
  * @default null
562
576
  */
563
577
  this._handleObjectFunction = this._renderObjectDirect;
@@ -568,7 +582,7 @@ class Renderer {
568
582
  * isn't possible anymore.
569
583
  *
570
584
  * @private
571
- * @type {Boolean}
585
+ * @type {boolean}
572
586
  * @default false
573
587
  */
574
588
  this._isDeviceLost = false;
@@ -586,7 +600,7 @@ class Renderer {
586
600
  * This will reduce rendering quality though.
587
601
  *
588
602
  * @private
589
- * @type {Number}
603
+ * @type {number}
590
604
  * @default HalfFloatType
591
605
  */
592
606
  this._colorBufferType = colorBufferType;
@@ -595,7 +609,7 @@ class Renderer {
595
609
  * Whether the renderer has been initialized or not.
596
610
  *
597
611
  * @private
598
- * @type {Boolean}
612
+ * @type {boolean}
599
613
  * @default false
600
614
  */
601
615
  this._initialized = false;
@@ -604,7 +618,7 @@ class Renderer {
604
618
  * A reference to the promise which initializes the renderer.
605
619
  *
606
620
  * @private
607
- * @type {Promise?}
621
+ * @type {?Promise<this>}
608
622
  * @default null
609
623
  */
610
624
  this._initPromise = null;
@@ -613,7 +627,7 @@ class Renderer {
613
627
  * An array of compilation promises which are used in `compileAsync()`.
614
628
  *
615
629
  * @private
616
- * @type {Array<Promise>?}
630
+ * @type {?Array<Promise>}
617
631
  * @default null
618
632
  */
619
633
  this._compilationPromises = null;
@@ -621,7 +635,7 @@ class Renderer {
621
635
  /**
622
636
  * Whether the renderer should render transparent render objects or not.
623
637
  *
624
- * @type {Boolean}
638
+ * @type {boolean}
625
639
  * @default true
626
640
  */
627
641
  this.transparent = true;
@@ -629,7 +643,7 @@ class Renderer {
629
643
  /**
630
644
  * Whether the renderer should render opaque render objects or not.
631
645
  *
632
- * @type {Boolean}
646
+ * @type {boolean}
633
647
  * @default true
634
648
  */
635
649
  this.opaque = true;
@@ -637,14 +651,14 @@ class Renderer {
637
651
  /**
638
652
  * Shadow map configuration
639
653
  * @typedef {Object} ShadowMapConfig
640
- * @property {Boolean} enabled - Whether to globally enable shadows or not.
641
- * @property {Number} type - The shadow map type.
654
+ * @property {boolean} enabled - Whether to globally enable shadows or not.
655
+ * @property {number} type - The shadow map type.
642
656
  */
643
657
 
644
658
  /**
645
659
  * The renderer's shadow configuration.
646
660
  *
647
- * @type {module:Renderer~ShadowMapConfig}
661
+ * @type {ShadowMapConfig}
648
662
  */
649
663
  this.shadowMap = {
650
664
  enabled: false,
@@ -654,7 +668,7 @@ class Renderer {
654
668
  /**
655
669
  * XR configuration.
656
670
  * @typedef {Object} XRConfig
657
- * @property {Boolean} enabled - Whether to globally enable XR or not.
671
+ * @property {boolean} enabled - Whether to globally enable XR or not.
658
672
  */
659
673
 
660
674
  /**
@@ -667,15 +681,15 @@ class Renderer {
667
681
  /**
668
682
  * Debug configuration.
669
683
  * @typedef {Object} DebugConfig
670
- * @property {Boolean} checkShaderErrors - Whether shader errors should be checked or not.
671
- * @property {Function} onShaderError - A callback function that is executed when a shader error happens. Only supported with WebGL 2 right now.
684
+ * @property {boolean} checkShaderErrors - Whether shader errors should be checked or not.
685
+ * @property {?Function} onShaderError - A callback function that is executed when a shader error happens. Only supported with WebGL 2 right now.
672
686
  * @property {Function} getShaderAsync - Allows the get the raw shader code for the given scene, camera and 3D object.
673
687
  */
674
688
 
675
689
  /**
676
690
  * The renderer's debug configuration.
677
691
  *
678
- * @type {module:Renderer~DebugConfig}
692
+ * @type {DebugConfig}
679
693
  */
680
694
  this.debug = {
681
695
  checkShaderErrors: true,
@@ -704,7 +718,7 @@ class Renderer {
704
718
  * Initializes the renderer so it is ready for usage.
705
719
  *
706
720
  * @async
707
- * @return {Promise} A Promise that resolves when the renderer has been initialized.
721
+ * @return {Promise<this>} A Promise that resolves when the renderer has been initialized.
708
722
  */
709
723
  async init() {
710
724
 
@@ -773,7 +787,7 @@ class Renderer {
773
787
  this._animation.start();
774
788
  this._initialized = true;
775
789
 
776
- resolve();
790
+ resolve( this );
777
791
 
778
792
  } );
779
793
 
@@ -787,7 +801,7 @@ class Renderer {
787
801
  * `THREE.WebGPUCoordinateSystem`.
788
802
  *
789
803
  * @readonly
790
- * @type {Number}
804
+ * @type {number}
791
805
  */
792
806
  get coordinateSystem() {
793
807
 
@@ -807,8 +821,8 @@ class Renderer {
807
821
  * @async
808
822
  * @param {Object3D} scene - The scene or 3D object to precompile.
809
823
  * @param {Camera} camera - The camera that is used to render the scene.
810
- * @param {Scene} targetScene - If the first argument is a 3D object, this parameter must represent the scene the 3D object is going to be added.
811
- * @return {Promise<Array>} A Promise that resolves when the compile has been finished.
824
+ * @param {?Scene} targetScene - If the first argument is a 3D object, this parameter must represent the scene the 3D object is going to be added.
825
+ * @return {Promise<Array|undefined>} A Promise that resolves when the compile has been finished.
812
826
  */
813
827
  async compileAsync( scene, camera, targetScene = null ) {
814
828
 
@@ -991,7 +1005,7 @@ class Renderer {
991
1005
  /**
992
1006
  * Returns the color buffer type.
993
1007
  *
994
- * @return {Number} The color buffer type.
1008
+ * @return {number} The color buffer type.
995
1009
  */
996
1010
  getColorBufferType() {
997
1011
 
@@ -1027,7 +1041,7 @@ class Renderer {
1027
1041
  * @private
1028
1042
  * @param {Object} bundle - Render bundle data.
1029
1043
  * @param {Scene} sceneRef - The scene the render bundle belongs to.
1030
- * @param {LightsNode} lightsNode - The current lights node.
1044
+ * @param {LightsNode} lightsNode - The lights node.
1031
1045
  */
1032
1046
  _renderBundle( bundle, sceneRef, lightsNode ) {
1033
1047
 
@@ -1061,9 +1075,14 @@ class Renderer {
1061
1075
 
1062
1076
  this._currentRenderBundle = renderBundle;
1063
1077
 
1064
- const opaqueObjects = renderList.opaque;
1078
+ const {
1079
+ transparentDoublePass: transparentDoublePassObjects,
1080
+ transparent: transparentObjects,
1081
+ opaque: opaqueObjects
1082
+ } = renderList;
1065
1083
 
1066
1084
  if ( this.opaque === true && opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
1085
+ if ( this.transparent === true && transparentObjects.length > 0 ) this._renderTransparents( transparentObjects, transparentDoublePassObjects, camera, sceneRef, lightsNode );
1067
1086
 
1068
1087
  this._currentRenderBundle = null;
1069
1088
 
@@ -1109,7 +1128,7 @@ class Renderer {
1109
1128
  *
1110
1129
  * @param {Object3D} scene - The scene or 3D object to render.
1111
1130
  * @param {Camera} camera - The camera to render the scene with.
1112
- * @return {Promise?} A Promise that resolve when the scene has been rendered.
1131
+ * @return {?Promise} A Promise that resolve when the scene has been rendered.
1113
1132
  * Only returned when the renderer has not been initialized.
1114
1133
  */
1115
1134
  render( scene, camera ) {
@@ -1132,7 +1151,7 @@ class Renderer {
1132
1151
  * pass and not inline to achieve more correct results.
1133
1152
  *
1134
1153
  * @private
1135
- * @return {RenderTarget?} The render target. The method returns `null` if no output conversion should be applied.
1154
+ * @return {?RenderTarget} The render target. The method returns `null` if no output conversion should be applied.
1136
1155
  */
1137
1156
  _getFrameBufferTarget() {
1138
1157
 
@@ -1187,7 +1206,7 @@ class Renderer {
1187
1206
  * @private
1188
1207
  * @param {Object3D} scene - The scene or 3D object to render.
1189
1208
  * @param {Camera} camera - The camera to render the scene with.
1190
- * @param {Boolean} [useFrameBufferTarget=true] - Whether to use a framebuffer target or not.
1209
+ * @param {boolean} [useFrameBufferTarget=true] - Whether to use a framebuffer target or not.
1191
1210
  * @return {RenderContext} The current render context.
1192
1211
  */
1193
1212
  _renderScene( scene, camera, useFrameBufferTarget = true ) {
@@ -1208,7 +1227,7 @@ class Renderer {
1208
1227
 
1209
1228
  const sceneRef = ( scene.isScene === true ) ? scene : _scene;
1210
1229
 
1211
- const outputRenderTarget = this._renderTarget;
1230
+ const outputRenderTarget = this._renderTarget || this._outputRenderTarget;
1212
1231
 
1213
1232
  const activeCubeFace = this._activeCubeFace;
1214
1233
  const activeMipmapLevel = this._activeMipmapLevel;
@@ -1410,16 +1429,7 @@ class Renderer {
1410
1429
 
1411
1430
  this.setRenderTarget( outputRenderTarget, activeCubeFace, activeMipmapLevel );
1412
1431
 
1413
- const quad = this._quad;
1414
-
1415
- if ( this._nodes.hasOutputChange( renderTarget.texture ) ) {
1416
-
1417
- quad.material.fragmentNode = this._nodes.getOutputNode( renderTarget.texture );
1418
- quad.material.needsUpdate = true;
1419
-
1420
- }
1421
-
1422
- this._renderScene( quad, quad.camera, false );
1432
+ this._renderOutput( renderTarget );
1423
1433
 
1424
1434
  }
1425
1435
 
@@ -1433,10 +1443,43 @@ class Renderer {
1433
1443
 
1434
1444
  }
1435
1445
 
1446
+ /**
1447
+ * The output pass performs tone mapping and color space conversion.
1448
+ *
1449
+ * @private
1450
+ * @param {RenderTarget} renderTarget - The current render target.
1451
+ */
1452
+ _renderOutput( renderTarget ) {
1453
+
1454
+ const quad = this._quad;
1455
+
1456
+ if ( this._nodes.hasOutputChange( renderTarget.texture ) ) {
1457
+
1458
+ quad.material.fragmentNode = this._nodes.getOutputNode( renderTarget.texture );
1459
+ quad.material.needsUpdate = true;
1460
+
1461
+ }
1462
+
1463
+ // a clear operation clears the intermediate renderTarget texture, but should not update the screen canvas.
1464
+
1465
+ const currentAutoClear = this.autoClear;
1466
+ const currentXR = this.xr.enabled;
1467
+
1468
+ this.autoClear = false;
1469
+ this.xr.enabled = false;
1470
+
1471
+ this._renderScene( quad, quad.camera, false );
1472
+
1473
+ this.autoClear = currentAutoClear;
1474
+ this.xr.enabled = currentXR;
1475
+
1476
+
1477
+ }
1478
+
1436
1479
  /**
1437
1480
  * Returns the maximum available anisotropy for texture filtering.
1438
1481
  *
1439
- * @return {Number} The maximum available anisotropy.
1482
+ * @return {number} The maximum available anisotropy.
1440
1483
  */
1441
1484
  getMaxAnisotropy() {
1442
1485
 
@@ -1447,7 +1490,7 @@ class Renderer {
1447
1490
  /**
1448
1491
  * Returns the active cube face.
1449
1492
  *
1450
- * @return {Number} The active cube face.
1493
+ * @return {number} The active cube face.
1451
1494
  */
1452
1495
  getActiveCubeFace() {
1453
1496
 
@@ -1458,7 +1501,7 @@ class Renderer {
1458
1501
  /**
1459
1502
  * Returns the active mipmap level.
1460
1503
  *
1461
- * @return {Number} The active mipmap level.
1504
+ * @return {number} The active mipmap level.
1462
1505
  */
1463
1506
  getActiveMipmapLevel() {
1464
1507
 
@@ -1472,7 +1515,7 @@ class Renderer {
1472
1515
  * for best compatibility.
1473
1516
  *
1474
1517
  * @async
1475
- * @param {Function} callback - The application's animation loop.
1518
+ * @param {?Function} callback - The application's animation loop.
1476
1519
  * @return {Promise} A Promise that resolves when the set has been executed.
1477
1520
  */
1478
1521
  async setAnimationLoop( callback ) {
@@ -1511,7 +1554,7 @@ class Renderer {
1511
1554
  /**
1512
1555
  * Returns the pixel ratio.
1513
1556
  *
1514
- * @return {Number} The pixel ratio.
1557
+ * @return {number} The pixel ratio.
1515
1558
  */
1516
1559
  getPixelRatio() {
1517
1560
 
@@ -1535,7 +1578,7 @@ class Renderer {
1535
1578
  * Returns the renderer's size in logical pixels. This method does not honor the pixel ratio.
1536
1579
  *
1537
1580
  * @param {Vector2} target - The method writes the result in this target object.
1538
- * @return {Vector2} The drawing buffer size.
1581
+ * @return {Vector2} The renderer's size in logical pixels.
1539
1582
  */
1540
1583
  getSize( target ) {
1541
1584
 
@@ -1544,9 +1587,9 @@ class Renderer {
1544
1587
  }
1545
1588
 
1546
1589
  /**
1547
- * Sets the given pixel ration and resizes the canvas if necessary.
1590
+ * Sets the given pixel ratio and resizes the canvas if necessary.
1548
1591
  *
1549
- * @param {Number} [value=1] - The pixel ratio.
1592
+ * @param {number} [value=1] - The pixel ratio.
1550
1593
  */
1551
1594
  setPixelRatio( value = 1 ) {
1552
1595
 
@@ -1562,17 +1605,20 @@ class Renderer {
1562
1605
  * This method allows to define the drawing buffer size by specifying
1563
1606
  * width, height and pixel ratio all at once. The size of the drawing
1564
1607
  * buffer is computed with this formula:
1565
- * ````
1608
+ * ```js
1566
1609
  * size.x = width * pixelRatio;
1567
1610
  * size.y = height * pixelRatio;
1568
- *```
1611
+ * ```
1569
1612
  *
1570
- * @param {Number} width - The width in logical pixels.
1571
- * @param {Number} height - The height in logical pixels.
1572
- * @param {Number} pixelRatio - The pixel ratio.
1613
+ * @param {number} width - The width in logical pixels.
1614
+ * @param {number} height - The height in logical pixels.
1615
+ * @param {number} pixelRatio - The pixel ratio.
1573
1616
  */
1574
1617
  setDrawingBufferSize( width, height, pixelRatio ) {
1575
1618
 
1619
+ // Renderer can't be resized while presenting in XR.
1620
+ if ( this.xr && this.xr.isPresenting ) return;
1621
+
1576
1622
  this._width = width;
1577
1623
  this._height = height;
1578
1624
 
@@ -1590,12 +1636,15 @@ class Renderer {
1590
1636
  /**
1591
1637
  * Sets the size of the renderer.
1592
1638
  *
1593
- * @param {Number} width - The width in logical pixels.
1594
- * @param {Number} height - The height in logical pixels.
1595
- * @param {Boolean} [updateStyle=true] - Whether to update the `style` attribute of the canvas or not.
1639
+ * @param {number} width - The width in logical pixels.
1640
+ * @param {number} height - The height in logical pixels.
1641
+ * @param {boolean} [updateStyle=true] - Whether to update the `style` attribute of the canvas or not.
1596
1642
  */
1597
1643
  setSize( width, height, updateStyle = true ) {
1598
1644
 
1645
+ // Renderer can't be resized while presenting in XR.
1646
+ if ( this.xr && this.xr.isPresenting ) return;
1647
+
1599
1648
  this._width = width;
1600
1649
  this._height = height;
1601
1650
 
@@ -1661,11 +1710,11 @@ class Renderer {
1661
1710
  /**
1662
1711
  * Defines the scissor rectangle.
1663
1712
  *
1664
- * @param {Number | Vector4} x - The horizontal coordinate for the lower left corner of the box in logical pixel unit.
1713
+ * @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the box in logical pixel unit.
1665
1714
  * Instead of passing four arguments, the method also works with a single four-dimensional vector.
1666
- * @param {Number} y - The vertical coordinate for the lower left corner of the box in logical pixel unit.
1667
- * @param {Number} width - The width of the scissor box in logical pixel unit.
1668
- * @param {Number} height - The height of the scissor box in logical pixel unit.
1715
+ * @param {number} y - The vertical coordinate for the lower left corner of the box in logical pixel unit.
1716
+ * @param {number} width - The width of the scissor box in logical pixel unit.
1717
+ * @param {number} height - The height of the scissor box in logical pixel unit.
1669
1718
  */
1670
1719
  setScissor( x, y, width, height ) {
1671
1720
 
@@ -1686,7 +1735,7 @@ class Renderer {
1686
1735
  /**
1687
1736
  * Returns the scissor test value.
1688
1737
  *
1689
- * @return {Boolean} Whether the scissor test should be enabled or not.
1738
+ * @return {boolean} Whether the scissor test should be enabled or not.
1690
1739
  */
1691
1740
  getScissorTest() {
1692
1741
 
@@ -1697,7 +1746,7 @@ class Renderer {
1697
1746
  /**
1698
1747
  * Defines the scissor test.
1699
1748
  *
1700
- * @param {Boolean} boolean - Whether the scissor test should be enabled or not.
1749
+ * @param {boolean} boolean - Whether the scissor test should be enabled or not.
1701
1750
  */
1702
1751
  setScissorTest( boolean ) {
1703
1752
 
@@ -1722,12 +1771,12 @@ class Renderer {
1722
1771
  /**
1723
1772
  * Defines the viewport.
1724
1773
  *
1725
- * @param {Number | Vector4} x - The horizontal coordinate for the lower left corner of the viewport origin in logical pixel unit.
1726
- * @param {Number} y - The vertical coordinate for the lower left corner of the viewport origin in logical pixel unit.
1727
- * @param {Number} width - The width of the viewport in logical pixel unit.
1728
- * @param {Number} height - The height of the viewport in logical pixel unit.
1729
- * @param {Number} minDepth - The minimum depth value of the viewport. WebGPU only.
1730
- * @param {Number} maxDepth - The maximum depth value of the viewport. WebGPU only.
1774
+ * @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the viewport origin in logical pixel unit.
1775
+ * @param {number} y - The vertical coordinate for the lower left corner of the viewport origin in logical pixel unit.
1776
+ * @param {number} width - The width of the viewport in logical pixel unit.
1777
+ * @param {number} height - The height of the viewport in logical pixel unit.
1778
+ * @param {number} minDepth - The minimum depth value of the viewport. WebGPU only.
1779
+ * @param {number} maxDepth - The maximum depth value of the viewport. WebGPU only.
1731
1780
  */
1732
1781
  setViewport( x, y, width, height, minDepth = 0, maxDepth = 1 ) {
1733
1782
 
@@ -1764,7 +1813,7 @@ class Renderer {
1764
1813
  * Defines the clear color and optionally the clear alpha.
1765
1814
  *
1766
1815
  * @param {Color} color - The clear color.
1767
- * @param {Number} [alpha=1] - The clear alpha.
1816
+ * @param {number} [alpha=1] - The clear alpha.
1768
1817
  */
1769
1818
  setClearColor( color, alpha = 1 ) {
1770
1819
 
@@ -1776,7 +1825,7 @@ class Renderer {
1776
1825
  /**
1777
1826
  * Returns the clear alpha.
1778
1827
  *
1779
- * @return {Number} The clear alpha.
1828
+ * @return {number} The clear alpha.
1780
1829
  */
1781
1830
  getClearAlpha() {
1782
1831
 
@@ -1787,7 +1836,7 @@ class Renderer {
1787
1836
  /**
1788
1837
  * Defines the clear alpha.
1789
1838
  *
1790
- * @param {Number} alpha - The clear alpha.
1839
+ * @param {number} alpha - The clear alpha.
1791
1840
  */
1792
1841
  setClearAlpha( alpha ) {
1793
1842
 
@@ -1798,7 +1847,7 @@ class Renderer {
1798
1847
  /**
1799
1848
  * Returns the clear depth.
1800
1849
  *
1801
- * @return {Number} The clear depth.
1850
+ * @return {number} The clear depth.
1802
1851
  */
1803
1852
  getClearDepth() {
1804
1853
 
@@ -1809,7 +1858,7 @@ class Renderer {
1809
1858
  /**
1810
1859
  * Defines the clear depth.
1811
1860
  *
1812
- * @param {Number} depth - The clear depth.
1861
+ * @param {number} depth - The clear depth.
1813
1862
  */
1814
1863
  setClearDepth( depth ) {
1815
1864
 
@@ -1820,7 +1869,7 @@ class Renderer {
1820
1869
  /**
1821
1870
  * Returns the clear stencil.
1822
1871
  *
1823
- * @return {Number} The clear stencil.
1872
+ * @return {number} The clear stencil.
1824
1873
  */
1825
1874
  getClearStencil() {
1826
1875
 
@@ -1831,7 +1880,7 @@ class Renderer {
1831
1880
  /**
1832
1881
  * Defines the clear stencil.
1833
1882
  *
1834
- * @param {Number} stencil - The clear stencil.
1883
+ * @param {number} stencil - The clear stencil.
1835
1884
  */
1836
1885
  setClearStencil( stencil ) {
1837
1886
 
@@ -1845,7 +1894,7 @@ class Renderer {
1845
1894
  * 3D objects in the scene.
1846
1895
  *
1847
1896
  * @param {Object3D} object - The 3D object to test.
1848
- * @return {Boolean} Whether the 3D object is fully occluded or not.
1897
+ * @return {boolean} Whether the 3D object is fully occluded or not.
1849
1898
  */
1850
1899
  isOccluded( object ) {
1851
1900
 
@@ -1858,9 +1907,9 @@ class Renderer {
1858
1907
  /**
1859
1908
  * Performs a manual clear operation. This method ignores `autoClear` properties.
1860
1909
  *
1861
- * @param {Boolean} [color=true] - Whether the color buffer should be cleared or not.
1862
- * @param {Boolean} [depth=true] - Whether the depth buffer should be cleared or not.
1863
- * @param {Boolean} [stencil=true] - Whether the stencil buffer should be cleared or not.
1910
+ * @param {boolean} [color=true] - Whether the color buffer should be cleared or not.
1911
+ * @param {boolean} [depth=true] - Whether the depth buffer should be cleared or not.
1912
+ * @param {boolean} [stencil=true] - Whether the stencil buffer should be cleared or not.
1864
1913
  * @return {Promise} A Promise that resolves when the clear operation has been executed.
1865
1914
  * Only returned when the renderer has not been initialized.
1866
1915
  */
@@ -1892,29 +1941,18 @@ class Renderer {
1892
1941
  renderContext.renderTarget = renderTarget;
1893
1942
  renderContext.depth = renderTarget.depthBuffer;
1894
1943
  renderContext.stencil = renderTarget.stencilBuffer;
1944
+ // #30329
1945
+ renderContext.clearColorValue = this.backend.getClearColor();
1946
+ renderContext.activeCubeFace = this.getActiveCubeFace();
1947
+ renderContext.activeMipmapLevel = this.getActiveMipmapLevel();
1895
1948
 
1896
1949
  }
1897
1950
 
1898
- // #30329
1899
- renderContext.clearColorValue = this._clearColor;
1900
-
1901
1951
  this.backend.clear( color, depth, stencil, renderContext );
1902
1952
 
1903
1953
  if ( renderTarget !== null && this._renderTarget === null ) {
1904
1954
 
1905
- // If a color space transform or tone mapping is required,
1906
- // the clear operation clears the intermediate renderTarget texture, but does not update the screen canvas.
1907
-
1908
- const quad = this._quad;
1909
-
1910
- if ( this._nodes.hasOutputChange( renderTarget.texture ) ) {
1911
-
1912
- quad.material.fragmentNode = this._nodes.getOutputNode( renderTarget.texture );
1913
- quad.material.needsUpdate = true;
1914
-
1915
- }
1916
-
1917
- this._renderScene( quad, quad.camera, false );
1955
+ this._renderOutput( renderTarget );
1918
1956
 
1919
1957
  }
1920
1958
 
@@ -1957,12 +1995,12 @@ class Renderer {
1957
1995
  }
1958
1996
 
1959
1997
  /**
1960
- * Async version of {@link module:Renderer~Renderer#clear}.
1998
+ * Async version of {@link Renderer#clear}.
1961
1999
  *
1962
2000
  * @async
1963
- * @param {Boolean} [color=true] - Whether the color buffer should be cleared or not.
1964
- * @param {Boolean} [depth=true] - Whether the depth buffer should be cleared or not.
1965
- * @param {Boolean} [stencil=true] - Whether the stencil buffer should be cleared or not.
2001
+ * @param {boolean} [color=true] - Whether the color buffer should be cleared or not.
2002
+ * @param {boolean} [depth=true] - Whether the depth buffer should be cleared or not.
2003
+ * @param {boolean} [stencil=true] - Whether the stencil buffer should be cleared or not.
1966
2004
  * @return {Promise} A Promise that resolves when the clear operation has been executed.
1967
2005
  */
1968
2006
  async clearAsync( color = true, depth = true, stencil = true ) {
@@ -1974,7 +2012,7 @@ class Renderer {
1974
2012
  }
1975
2013
 
1976
2014
  /**
1977
- * Async version of {@link module:Renderer~Renderer#clearColor}.
2015
+ * Async version of {@link Renderer#clearColor}.
1978
2016
  *
1979
2017
  * @async
1980
2018
  * @return {Promise} A Promise that resolves when the clear operation has been executed.
@@ -1986,7 +2024,7 @@ class Renderer {
1986
2024
  }
1987
2025
 
1988
2026
  /**
1989
- * Async version of {@link module:Renderer~Renderer#clearDepth}.
2027
+ * Async version of {@link Renderer#clearDepth}.
1990
2028
  *
1991
2029
  * @async
1992
2030
  * @return {Promise} A Promise that resolves when the clear operation has been executed.
@@ -1998,7 +2036,7 @@ class Renderer {
1998
2036
  }
1999
2037
 
2000
2038
  /**
2001
- * Async version of {@link module:Renderer~Renderer#clearStencil}.
2039
+ * Async version of {@link Renderer#clearStencil}.
2002
2040
  *
2003
2041
  * @async
2004
2042
  * @return {Promise} A Promise that resolves when the clear operation has been executed.
@@ -2013,11 +2051,11 @@ class Renderer {
2013
2051
  * The current output tone mapping of the renderer. When a render target is set,
2014
2052
  * the output tone mapping is always `NoToneMapping`.
2015
2053
  *
2016
- * @type {Number}
2054
+ * @type {number}
2017
2055
  */
2018
2056
  get currentToneMapping() {
2019
2057
 
2020
- return this._renderTarget !== null ? NoToneMapping : this.toneMapping;
2058
+ return this.isOutputTarget ? this.toneMapping : NoToneMapping;
2021
2059
 
2022
2060
  }
2023
2061
 
@@ -2025,11 +2063,22 @@ class Renderer {
2025
2063
  * The current output color space of the renderer. When a render target is set,
2026
2064
  * the output color space is always `LinearSRGBColorSpace`.
2027
2065
  *
2028
- * @type {String}
2066
+ * @type {string}
2029
2067
  */
2030
2068
  get currentColorSpace() {
2031
2069
 
2032
- return this._renderTarget !== null ? LinearSRGBColorSpace : this.outputColorSpace;
2070
+ return this.isOutputTarget ? this.outputColorSpace : LinearSRGBColorSpace;
2071
+
2072
+ }
2073
+
2074
+ /**
2075
+ * Returns `true` if the rendering settings are set to screen output.
2076
+ *
2077
+ * @returns {boolean} True if the current render target is the same of output render target or `null`, otherwise false.
2078
+ */
2079
+ get isOutputTarget() {
2080
+
2081
+ return this._renderTarget === this._outputRenderTarget || this._renderTarget === null;
2033
2082
 
2034
2083
  }
2035
2084
 
@@ -2069,9 +2118,9 @@ class Renderer {
2069
2118
  * target the default framebuffer (meaning the canvas) anymore but a custom framebuffer.
2070
2119
  * Use `null` as the first argument to reset the state.
2071
2120
  *
2072
- * @param {RenderTarget?} renderTarget - The render target to set.
2073
- * @param {Number} [activeCubeFace=0] - The active cube face.
2074
- * @param {Number} [activeMipmapLevel=0] - The active mipmap level.
2121
+ * @param {?RenderTarget} renderTarget - The render target to set.
2122
+ * @param {number} [activeCubeFace=0] - The active cube face.
2123
+ * @param {number} [activeMipmapLevel=0] - The active mipmap level.
2075
2124
  */
2076
2125
  setRenderTarget( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {
2077
2126
 
@@ -2084,7 +2133,7 @@ class Renderer {
2084
2133
  /**
2085
2134
  * Returns the current render target.
2086
2135
  *
2087
- * @return {RenderTarget?} The render target. Returns `null` if no render target is set.
2136
+ * @return {?RenderTarget} The render target. Returns `null` if no render target is set.
2088
2137
  */
2089
2138
  getRenderTarget() {
2090
2139
 
@@ -2093,7 +2142,29 @@ class Renderer {
2093
2142
  }
2094
2143
 
2095
2144
  /**
2096
- * Callback for {@link module:Renderer~Renderer#setRenderObjectFunction}.
2145
+ * Sets the output render target for the renderer.
2146
+ *
2147
+ * @param {Object} renderTarget - The render target to set as the output target.
2148
+ */
2149
+ setOutputRenderTarget( renderTarget ) {
2150
+
2151
+ this._outputRenderTarget = renderTarget;
2152
+
2153
+ }
2154
+
2155
+ /**
2156
+ * Returns the current output target.
2157
+ *
2158
+ * @return {?RenderTarget} The current output render target. Returns `null` if no output target is set.
2159
+ */
2160
+ getOutputRenderTarget() {
2161
+
2162
+ return this._outputRenderTarget;
2163
+
2164
+ }
2165
+
2166
+ /**
2167
+ * Callback for {@link Renderer#setRenderObjectFunction}.
2097
2168
  *
2098
2169
  * @callback renderObjectFunction
2099
2170
  * @param {Object3D} object - The 3D object.
@@ -2101,22 +2172,22 @@ class Renderer {
2101
2172
  * @param {Camera} camera - The camera the object should be rendered with.
2102
2173
  * @param {BufferGeometry} geometry - The object's geometry.
2103
2174
  * @param {Material} material - The object's material.
2104
- * @param {Object?} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.
2175
+ * @param {?Object} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.
2105
2176
  * @param {LightsNode} lightsNode - The current lights node.
2106
2177
  * @param {ClippingContext} clippingContext - The clipping context.
2107
- * @param {String?} [passId=null] - An optional ID for identifying the pass.
2178
+ * @param {?string} [passId=null] - An optional ID for identifying the pass.
2108
2179
  */
2109
2180
 
2110
2181
  /**
2111
2182
  * Sets the given render object function. Calling this method overwrites the default implementation
2112
- * which is {@link module:Renderer~Renderer#renderObject}. Defining a custom function can be useful
2183
+ * which is {@link Renderer#renderObject}. Defining a custom function can be useful
2113
2184
  * if you want to modify the way objects are rendered. For example you can define things like "every
2114
2185
  * object that has material of a certain type should perform a pre-pass with a special overwrite material".
2115
2186
  * The custom function must always call `renderObject()` in its implementation.
2116
2187
  *
2117
2188
  * Use `null` as the first argument to reset the state.
2118
2189
  *
2119
- * @param {module:Renderer~renderObjectFunction?} renderObjectFunction - The render object function.
2190
+ * @param {?renderObjectFunction} renderObjectFunction - The render object function.
2120
2191
  */
2121
2192
  setRenderObjectFunction( renderObjectFunction ) {
2122
2193
 
@@ -2127,7 +2198,7 @@ class Renderer {
2127
2198
  /**
2128
2199
  * Returns the current render object function.
2129
2200
  *
2130
- * @return {Function?} The current render object function. Returns `null` if no function is set.
2201
+ * @return {?Function} The current render object function. Returns `null` if no function is set.
2131
2202
  */
2132
2203
  getRenderObjectFunction() {
2133
2204
 
@@ -2140,7 +2211,7 @@ class Renderer {
2140
2211
  * if the renderer has been initialized.
2141
2212
  *
2142
2213
  * @param {Node|Array<Node>} computeNodes - The compute node(s).
2143
- * @return {Promise?} A Promise that resolve when the compute has finished. Only returned when the renderer has not been initialized.
2214
+ * @return {Promise|undefined} A Promise that resolve when the compute has finished. Only returned when the renderer has not been initialized.
2144
2215
  */
2145
2216
  compute( computeNodes ) {
2146
2217
 
@@ -2252,8 +2323,8 @@ class Renderer {
2252
2323
  * Checks if the given feature is supported by the selected backend.
2253
2324
  *
2254
2325
  * @async
2255
- * @param {String} name - The feature's name.
2256
- * @return {Promise<Boolean>} A Promise that resolves with a bool that indicates whether the feature is supported or not.
2326
+ * @param {string} name - The feature's name.
2327
+ * @return {Promise<boolean>} A Promise that resolves with a bool that indicates whether the feature is supported or not.
2257
2328
  */
2258
2329
  async hasFeatureAsync( name ) {
2259
2330
 
@@ -2275,8 +2346,8 @@ class Renderer {
2275
2346
  * Checks if the given feature is supported by the selected backend. If the
2276
2347
  * renderer has not been initialized, this method always returns `false`.
2277
2348
  *
2278
- * @param {String} name - The feature's name.
2279
- * @return {Boolean} Whether the feature is supported or not.
2349
+ * @param {string} name - The feature's name.
2350
+ * @return {boolean} Whether the feature is supported or not.
2280
2351
  */
2281
2352
  hasFeature( name ) {
2282
2353
 
@@ -2295,7 +2366,7 @@ class Renderer {
2295
2366
  /**
2296
2367
  * Returns `true` when the renderer has been initialized.
2297
2368
  *
2298
- * @return {Boolean} Whether the renderer has been initialized or not.
2369
+ * @return {boolean} Whether the renderer has been initialized or not.
2299
2370
  */
2300
2371
  hasInitialized() {
2301
2372
 
@@ -2320,7 +2391,7 @@ class Renderer {
2320
2391
  }
2321
2392
 
2322
2393
  /**
2323
- * Initializes the given textures. Useful for preloading a texture rather than waiting until first render
2394
+ * Initializes the given texture. Useful for preloading a texture rather than waiting until first render
2324
2395
  * (which can cause noticeable lags due to decode and GPU upload overhead).
2325
2396
  *
2326
2397
  * This method can only be used if the renderer has been initialized.
@@ -2343,7 +2414,7 @@ class Renderer {
2343
2414
  * Copies the current bound framebuffer into the given texture.
2344
2415
  *
2345
2416
  * @param {FramebufferTexture} framebufferTexture - The texture.
2346
- * @param {Vector2|Vector4} rectangle - A two or four dimensional vector that defines the rectangular portion of the framebuffer that should be copied.
2417
+ * @param {?Vector2|Vector4} [rectangle=null] - A two or four dimensional vector that defines the rectangular portion of the framebuffer that should be copied.
2347
2418
  */
2348
2419
  copyFramebufferToTexture( framebufferTexture, rectangle = null ) {
2349
2420
 
@@ -2403,20 +2474,21 @@ class Renderer {
2403
2474
  }
2404
2475
 
2405
2476
  /**
2406
- * Copies data of source texture into a destination texture.
2477
+ * Copies data of the given source texture into a destination texture.
2407
2478
  *
2408
2479
  * @param {Texture} srcTexture - The source texture.
2409
2480
  * @param {Texture} dstTexture - The destination texture.
2410
2481
  * @param {Box2|Box3} [srcRegion=null] - A bounding box which describes the source region. Can be two or three-dimensional.
2411
2482
  * @param {Vector2|Vector3} [dstPosition=null] - A vector that represents the origin of the destination region. Can be two or three-dimensional.
2412
- * @param {Number} level - The mipmap level to copy.
2483
+ * @param {number} [srcLevel=0] - The source mip level to copy from.
2484
+ * @param {number} [dstLevel=0] - The destination mip level to copy to.
2413
2485
  */
2414
- copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {
2486
+ copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {
2415
2487
 
2416
2488
  this._textures.updateTexture( srcTexture );
2417
2489
  this._textures.updateTexture( dstTexture );
2418
2490
 
2419
- this.backend.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, level );
2491
+ this.backend.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, srcLevel, dstLevel );
2420
2492
 
2421
2493
  }
2422
2494
 
@@ -2425,12 +2497,12 @@ class Renderer {
2425
2497
  *
2426
2498
  * @async
2427
2499
  * @param {RenderTarget} renderTarget - The render target to read from.
2428
- * @param {Number} x - The `x` coordinate of the copy region's origin.
2429
- * @param {Number} y - The `y` coordinate of the copy region's origin.
2430
- * @param {Number} width - The width of the copy region.
2431
- * @param {Number} height - The height of the copy region.
2432
- * @param {Number} [textureIndex=0] - The texture index of a MRT render target.
2433
- * @param {Number} [faceIndex=0] - The active cube face index.
2500
+ * @param {number} x - The `x` coordinate of the copy region's origin.
2501
+ * @param {number} y - The `y` coordinate of the copy region's origin.
2502
+ * @param {number} width - The width of the copy region.
2503
+ * @param {number} height - The height of the copy region.
2504
+ * @param {number} [textureIndex=0] - The texture index of a MRT render target.
2505
+ * @param {number} [faceIndex=0] - The active cube face index.
2434
2506
  * @return {Promise<TypedArray>} A Promise that resolves when the read has been finished. The resolve provides the read data as a typed array.
2435
2507
  */
2436
2508
  async readRenderTargetPixelsAsync( renderTarget, x, y, width, height, textureIndex = 0, faceIndex = 0 ) {
@@ -2445,7 +2517,7 @@ class Renderer {
2445
2517
  *
2446
2518
  * @param {Object3D} object - The 3D object to process (usually a scene).
2447
2519
  * @param {Camera} camera - The camera the object is rendered with.
2448
- * @param {Number} groupOrder - The group order is derived from the `renderOrder` of groups and is used to group 3D objects within groups.
2520
+ * @param {number} groupOrder - The group order is derived from the `renderOrder` of groups and is used to group 3D objects within groups.
2449
2521
  * @param {RenderList} renderList - The current render list.
2450
2522
  * @param {ClippingContext} clippingContext - The current clipping context.
2451
2523
  */
@@ -2646,7 +2718,7 @@ class Renderer {
2646
2718
  * @param {Camera} camera - The camera the render list should be rendered with.
2647
2719
  * @param {Scene} scene - The scene the render list belongs to.
2648
2720
  * @param {LightsNode} lightsNode - The current lights node.
2649
- * @param {String?} [passId=null] - An optional ID for identifying the pass.
2721
+ * @param {?string} [passId=null] - An optional ID for identifying the pass.
2650
2722
  */
2651
2723
  _renderObjects( renderList, camera, scene, lightsNode, passId = null ) {
2652
2724
 
@@ -2669,10 +2741,10 @@ class Renderer {
2669
2741
  * @param {Camera} camera - The camera the object should be rendered with.
2670
2742
  * @param {BufferGeometry} geometry - The object's geometry.
2671
2743
  * @param {Material} material - The object's material.
2672
- * @param {Object?} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.
2744
+ * @param {?Object} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.
2673
2745
  * @param {LightsNode} lightsNode - The current lights node.
2674
- * @param {ClippingContext} clippingContext - The clipping context.
2675
- * @param {String?} [passId=null] - An optional ID for identifying the pass.
2746
+ * @param {?ClippingContext} clippingContext - The clipping context.
2747
+ * @param {?string} [passId=null] - An optional ID for identifying the pass.
2676
2748
  */
2677
2749
  renderObject( object, scene, camera, geometry, material, group, lightsNode, clippingContext = null, passId = null ) {
2678
2750
 
@@ -2686,7 +2758,7 @@ class Renderer {
2686
2758
 
2687
2759
  //
2688
2760
 
2689
- if ( scene.overrideMaterial !== null ) {
2761
+ if ( material.allowOverride === true && scene.overrideMaterial !== null ) {
2690
2762
 
2691
2763
  const overrideMaterial = scene.overrideMaterial;
2692
2764
 
@@ -2779,9 +2851,9 @@ class Renderer {
2779
2851
  * @param {Scene} scene - The scene the 3D object belongs to.
2780
2852
  * @param {Camera} camera - The camera the object should be rendered with.
2781
2853
  * @param {LightsNode} lightsNode - The current lights node.
2782
- * @param {{start: Number, count: Number}?} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.
2854
+ * @param {?{start: number, count: number}} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.
2783
2855
  * @param {ClippingContext} clippingContext - The clipping context.
2784
- * @param {String?} [passId=null] - An optional ID for identifying the pass.
2856
+ * @param {?string} [passId=null] - An optional ID for identifying the pass.
2785
2857
  */
2786
2858
  _renderObjectDirect( object, material, scene, camera, lightsNode, group, clippingContext, passId ) {
2787
2859
 
@@ -2834,9 +2906,9 @@ class Renderer {
2834
2906
  * @param {Scene} scene - The scene the 3D object belongs to.
2835
2907
  * @param {Camera} camera - The camera the object should be rendered with.
2836
2908
  * @param {LightsNode} lightsNode - The current lights node.
2837
- * @param {{start: Number, count: Number}?} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.
2909
+ * @param {?{start: number, count: number}} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.
2838
2910
  * @param {ClippingContext} clippingContext - The clipping context.
2839
- * @param {String?} [passId=null] - An optional ID for identifying the pass.
2911
+ * @param {?string} [passId=null] - An optional ID for identifying the pass.
2840
2912
  */
2841
2913
  _createObjectPipeline( object, material, scene, camera, lightsNode, group, clippingContext, passId ) {
2842
2914
 
@@ -2866,7 +2938,7 @@ class Renderer {
2866
2938
  * @param {Object3D} scene - The scene or 3D object to precompile.
2867
2939
  * @param {Camera} camera - The camera that is used to render the scene.
2868
2940
  * @param {Scene} targetScene - If the first argument is a 3D object, this parameter must represent the scene the 3D object is going to be added.
2869
- * @return {Promise} A Promise that resolves when the compile has been finished.
2941
+ * @return {function(Object3D, Camera, ?Scene): Promise|undefined} A Promise that resolves when the compile has been finished.
2870
2942
  */
2871
2943
  get compile() {
2872
2944