super-three 0.176.0 → 0.179.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 (571) hide show
  1. package/README.md +4 -4
  2. package/build/three.cjs +8377 -6761
  3. package/build/three.core.js +8001 -6682
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +378 -82
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +84 -27
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +6829 -2835
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +6646 -2835
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +1 -3
  14. package/examples/jsm/animation/AnimationClipCreator.js +1 -0
  15. package/examples/jsm/animation/CCDIKSolver.js +6 -3
  16. package/examples/jsm/capabilities/WebGL.js +1 -27
  17. package/examples/jsm/capabilities/WebGPU.js +2 -1
  18. package/examples/jsm/controls/ArcballControls.js +15 -4
  19. package/examples/jsm/controls/DragControls.js +1 -0
  20. package/examples/jsm/controls/FirstPersonControls.js +1 -0
  21. package/examples/jsm/controls/FlyControls.js +1 -0
  22. package/examples/jsm/controls/MapControls.js +1 -0
  23. package/examples/jsm/controls/OrbitControls.js +1 -0
  24. package/examples/jsm/controls/PointerLockControls.js +5 -3
  25. package/examples/jsm/controls/TrackballControls.js +1 -0
  26. package/examples/jsm/controls/TransformControls.js +62 -14
  27. package/examples/jsm/csm/CSM.js +2 -0
  28. package/examples/jsm/csm/CSMFrustum.js +2 -0
  29. package/examples/jsm/csm/CSMHelper.js +1 -0
  30. package/examples/jsm/csm/CSMShader.js +4 -1
  31. package/examples/jsm/csm/CSMShadowNode.js +22 -8
  32. package/examples/jsm/curves/CurveExtras.js +14 -0
  33. package/examples/jsm/curves/NURBSCurve.js +1 -0
  34. package/examples/jsm/curves/NURBSSurface.js +2 -0
  35. package/examples/jsm/curves/NURBSUtils.js +4 -1
  36. package/examples/jsm/curves/NURBSVolume.js +2 -0
  37. package/examples/jsm/effects/AnaglyphEffect.js +2 -0
  38. package/examples/jsm/effects/AsciiEffect.js +2 -0
  39. package/examples/jsm/effects/OutlineEffect.js +2 -0
  40. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
  41. package/examples/jsm/effects/StereoEffect.js +2 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +1 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +57 -38
  44. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  45. package/examples/jsm/exporters/EXRExporter.js +2 -0
  46. package/examples/jsm/exporters/GLTFExporter.js +7 -4
  47. package/examples/jsm/exporters/KTX2Exporter.js +2 -0
  48. package/examples/jsm/exporters/OBJExporter.js +3 -1
  49. package/examples/jsm/exporters/PLYExporter.js +4 -2
  50. package/examples/jsm/exporters/STLExporter.js +2 -0
  51. package/examples/jsm/exporters/USDZExporter.js +679 -300
  52. package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +1 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +1 -0
  55. package/examples/jsm/geometries/ParametricFunctions.js +4 -1
  56. package/examples/jsm/geometries/ParametricGeometry.js +1 -0
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
  58. package/examples/jsm/geometries/TeapotGeometry.js +1 -0
  59. package/examples/jsm/geometries/TextGeometry.js +1 -0
  60. package/examples/jsm/helpers/LightProbeHelper.js +1 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
  64. package/examples/jsm/helpers/RapierHelper.js +59 -0
  65. package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
  66. package/examples/jsm/helpers/TextureHelper.js +1 -0
  67. package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
  68. package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
  69. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
  70. package/examples/jsm/helpers/ViewHelper.js +1 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +11 -2
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -0
  73. package/examples/jsm/interactive/SelectionBox.js +2 -0
  74. package/examples/jsm/interactive/SelectionHelper.js +2 -0
  75. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  76. package/examples/jsm/lighting/TiledLighting.js +1 -0
  77. package/examples/jsm/lights/LightProbeGenerator.js +15 -3
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  79. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  80. package/examples/jsm/lines/Line2.js +1 -0
  81. package/examples/jsm/lines/LineGeometry.js +1 -0
  82. package/examples/jsm/lines/LineMaterial.js +4 -4
  83. package/examples/jsm/lines/LineSegments2.js +1 -0
  84. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  85. package/examples/jsm/lines/Wireframe.js +1 -0
  86. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  87. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  88. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  89. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  90. package/examples/jsm/loaders/3DMLoader.js +1 -0
  91. package/examples/jsm/loaders/3MFLoader.js +1 -0
  92. package/examples/jsm/loaders/AMFLoader.js +1 -0
  93. package/examples/jsm/loaders/BVHLoader.js +1 -0
  94. package/examples/jsm/loaders/ColladaLoader.js +6 -5
  95. package/examples/jsm/loaders/DDSLoader.js +1 -0
  96. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  97. package/examples/jsm/loaders/EXRLoader.js +211 -22
  98. package/examples/jsm/loaders/FBXLoader.js +25 -23
  99. package/examples/jsm/loaders/FontLoader.js +1 -0
  100. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  101. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  102. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  103. package/examples/jsm/loaders/IESLoader.js +1 -0
  104. package/examples/jsm/loaders/KMZLoader.js +1 -0
  105. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  106. package/examples/jsm/loaders/KTXLoader.js +1 -0
  107. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  108. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  110. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  111. package/examples/jsm/loaders/LWOLoader.js +1 -13
  112. package/examples/jsm/loaders/LottieLoader.js +15 -0
  113. package/examples/jsm/loaders/MD2Loader.js +1 -0
  114. package/examples/jsm/loaders/MDDLoader.js +1 -0
  115. package/examples/jsm/loaders/MTLLoader.js +4 -3
  116. package/examples/jsm/loaders/MaterialXLoader.js +213 -30
  117. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  118. package/examples/jsm/loaders/OBJLoader.js +1 -0
  119. package/examples/jsm/loaders/PCDLoader.js +122 -19
  120. package/examples/jsm/loaders/PDBLoader.js +1 -0
  121. package/examples/jsm/loaders/PLYLoader.js +1 -0
  122. package/examples/jsm/loaders/PVRLoader.js +1 -0
  123. package/examples/jsm/loaders/RGBELoader.js +1 -0
  124. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  125. package/examples/jsm/loaders/STLLoader.js +1 -0
  126. package/examples/jsm/loaders/SVGLoader.js +1 -0
  127. package/examples/jsm/loaders/TDSLoader.js +1 -0
  128. package/examples/jsm/loaders/TGALoader.js +1 -0
  129. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  130. package/examples/jsm/loaders/TTFLoader.js +14 -1
  131. package/examples/jsm/loaders/USDLoader.js +219 -0
  132. package/examples/jsm/loaders/USDZLoader.js +4 -891
  133. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  134. package/examples/jsm/loaders/VOXLoader.js +1 -0
  135. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  136. package/examples/jsm/loaders/VTKLoader.js +1 -0
  137. package/examples/jsm/loaders/XYZLoader.js +1 -0
  138. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  139. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  140. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  141. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  142. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  143. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  144. package/examples/jsm/math/Capsule.js +2 -0
  145. package/examples/jsm/math/ColorConverter.js +1 -0
  146. package/examples/jsm/math/ConvexHull.js +2 -0
  147. package/examples/jsm/math/ImprovedNoise.js +19 -14
  148. package/examples/jsm/math/Lut.js +2 -0
  149. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  150. package/examples/jsm/math/OBB.js +2 -0
  151. package/examples/jsm/math/Octree.js +20 -1
  152. package/examples/jsm/math/SimplexNoise.js +2 -0
  153. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  155. package/examples/jsm/misc/Gyroscope.js +1 -0
  156. package/examples/jsm/misc/MD2Character.js +2 -0
  157. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  158. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  159. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  160. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  161. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  162. package/examples/jsm/misc/RollerCoaster.js +5 -0
  163. package/examples/jsm/misc/TubePainter.js +1 -0
  164. package/examples/jsm/misc/Volume.js +2 -0
  165. package/examples/jsm/misc/VolumeSlice.js +1 -0
  166. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  167. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  168. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  169. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  170. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  171. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  172. package/examples/jsm/objects/Lensflare.js +3 -0
  173. package/examples/jsm/objects/LensflareMesh.js +4 -3
  174. package/examples/jsm/objects/MarchingCubes.js +2 -0
  175. package/examples/jsm/objects/Reflector.js +1 -0
  176. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  177. package/examples/jsm/objects/Refractor.js +1 -0
  178. package/examples/jsm/objects/ShadowMesh.js +1 -0
  179. package/examples/jsm/objects/Sky.js +2 -1
  180. package/examples/jsm/objects/SkyMesh.js +22 -19
  181. package/examples/jsm/objects/Water.js +1 -0
  182. package/examples/jsm/objects/Water2.js +1 -0
  183. package/examples/jsm/objects/Water2Mesh.js +3 -1
  184. package/examples/jsm/objects/WaterMesh.js +2 -1
  185. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  186. package/examples/jsm/physics/JoltPhysics.js +1 -0
  187. package/examples/jsm/physics/RapierPhysics.js +149 -13
  188. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  189. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  190. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  191. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  192. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  193. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  194. package/examples/jsm/postprocessing/EffectComposer.js +5 -6
  195. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  196. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  197. package/examples/jsm/postprocessing/GTAOPass.js +14 -12
  198. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  199. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  200. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  201. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  202. package/examples/jsm/postprocessing/OutlinePass.js +22 -19
  203. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  204. package/examples/jsm/postprocessing/Pass.js +3 -1
  205. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  206. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  207. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  208. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  209. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  210. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  211. package/examples/jsm/postprocessing/SSAOPass.js +12 -10
  212. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  213. package/examples/jsm/postprocessing/SavePass.js +2 -1
  214. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  215. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  216. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  217. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  218. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  219. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  220. package/examples/jsm/renderers/Projector.js +2 -0
  221. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  222. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  223. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  224. package/examples/jsm/shaders/BasicShader.js +4 -1
  225. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  226. package/examples/jsm/shaders/BlendShader.js +4 -1
  227. package/examples/jsm/shaders/BokehShader.js +4 -1
  228. package/examples/jsm/shaders/BokehShader2.js +4 -1
  229. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  230. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  231. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  232. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  233. package/examples/jsm/shaders/CopyShader.js +4 -1
  234. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  235. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  236. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  237. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  238. package/examples/jsm/shaders/ExposureShader.js +4 -1
  239. package/examples/jsm/shaders/FXAAShader.js +4 -1
  240. package/examples/jsm/shaders/FilmShader.js +4 -1
  241. package/examples/jsm/shaders/FocusShader.js +4 -1
  242. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  243. package/examples/jsm/shaders/GTAOShader.js +4 -1
  244. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  245. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  246. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  247. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  248. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  249. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  250. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  251. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  252. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  253. package/examples/jsm/shaders/MirrorShader.js +4 -1
  254. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  255. package/examples/jsm/shaders/OutputShader.js +4 -1
  256. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  257. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  258. package/examples/jsm/shaders/SAOShader.js +4 -1
  259. package/examples/jsm/shaders/SMAAShader.js +1 -0
  260. package/examples/jsm/shaders/SSAOShader.js +4 -1
  261. package/examples/jsm/shaders/SSRShader.js +1 -0
  262. package/examples/jsm/shaders/SepiaShader.js +4 -1
  263. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  264. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  265. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  266. package/examples/jsm/shaders/ToonShader.js +2 -1
  267. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  268. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
  269. package/examples/jsm/shaders/VelocityShader.js +4 -1
  270. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  271. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  272. package/examples/jsm/shaders/VignetteShader.js +4 -1
  273. package/examples/jsm/shaders/VolumeShader.js +5 -2
  274. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  275. package/examples/jsm/textures/FlakesTexture.js +2 -0
  276. package/examples/jsm/transpiler/AST.js +381 -30
  277. package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
  278. package/examples/jsm/transpiler/Linker.js +327 -0
  279. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  280. package/examples/jsm/transpiler/Transpiler.js +19 -1
  281. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  282. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  283. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  284. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  285. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  286. package/examples/jsm/tsl/display/BloomNode.js +9 -7
  287. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  288. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  289. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  290. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  291. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  292. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  293. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  294. package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
  295. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  296. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  297. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  298. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  299. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  300. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  301. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  302. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  303. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  304. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  305. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  306. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  307. package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
  308. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  309. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  310. package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
  311. package/examples/jsm/tsl/math/Bayer.js +4 -1
  312. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  313. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  314. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  315. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  316. package/examples/jsm/utils/CameraUtils.js +4 -1
  317. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  318. package/examples/jsm/utils/GeometryUtils.js +4 -1
  319. package/examples/jsm/utils/LDrawUtils.js +2 -0
  320. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  321. package/examples/jsm/utils/SceneUtils.js +4 -1
  322. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  323. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  324. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  325. package/examples/jsm/utils/SortUtils.js +4 -1
  326. package/examples/jsm/utils/UVsDebug.js +4 -1
  327. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  328. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  329. package/examples/jsm/utils/WorkerPool.js +2 -0
  330. package/examples/jsm/webxr/ARButton.js +1 -0
  331. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  332. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  333. package/examples/jsm/webxr/Text2D.js +4 -1
  334. package/examples/jsm/webxr/VRButton.js +1 -0
  335. package/examples/jsm/webxr/XRButton.js +1 -0
  336. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  338. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  339. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  340. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  341. package/examples/jsm/webxr/XRPlanes.js +1 -0
  342. package/package.json +6 -4
  343. package/src/Three.Core.js +2 -1
  344. package/src/Three.TSL.js +83 -26
  345. package/src/Three.WebGPU.Nodes.js +1 -0
  346. package/src/Three.WebGPU.js +3 -0
  347. package/src/animation/KeyframeTrack.js +1 -1
  348. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  350. package/src/audio/AudioListener.js +13 -10
  351. package/src/cameras/ArrayCamera.js +9 -1
  352. package/src/cameras/Camera.js +14 -0
  353. package/src/cameras/OrthographicCamera.js +1 -1
  354. package/src/cameras/PerspectiveCamera.js +1 -1
  355. package/src/constants.js +47 -20
  356. package/src/core/BufferAttribute.js +3 -3
  357. package/src/core/BufferGeometry.js +2 -5
  358. package/src/core/Clock.js +2 -8
  359. package/src/core/GLBufferAttribute.js +13 -1
  360. package/src/core/Object3D.js +23 -22
  361. package/src/core/RenderTarget.js +65 -21
  362. package/src/core/RenderTarget3D.js +1 -0
  363. package/{examples/jsm/misc → src/core}/Timer.js +4 -40
  364. package/src/extras/PMREMGenerator.js +11 -0
  365. package/src/extras/TextureUtils.js +1 -5
  366. package/src/extras/core/Curve.js +1 -1
  367. package/src/extras/core/Path.js +22 -22
  368. package/src/geometries/CapsuleGeometry.js +167 -17
  369. package/src/geometries/ExtrudeGeometry.js +39 -29
  370. package/src/helpers/ArrowHelper.js +2 -2
  371. package/src/helpers/CameraHelper.js +41 -11
  372. package/src/helpers/SkeletonHelper.js +36 -7
  373. package/src/lights/LightShadow.js +34 -7
  374. package/src/lights/PointLightShadow.js +1 -1
  375. package/src/lights/SpotLightShadow.js +9 -1
  376. package/src/lights/webgpu/ProjectorLight.js +46 -0
  377. package/src/loaders/BufferGeometryLoader.js +1 -10
  378. package/src/loaders/FileLoader.js +27 -4
  379. package/src/loaders/ImageBitmapLoader.js +48 -9
  380. package/src/loaders/ImageLoader.js +55 -8
  381. package/src/loaders/Loader.js +14 -0
  382. package/src/loaders/LoadingManager.js +23 -0
  383. package/src/loaders/ObjectLoader.js +44 -16
  384. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  385. package/src/materials/Material.js +1 -7
  386. package/src/materials/MeshBasicMaterial.js +1 -1
  387. package/src/materials/nodes/Line2NodeMaterial.js +0 -8
  388. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  389. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  390. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  391. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  392. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  393. package/src/materials/nodes/NodeMaterial.js +106 -20
  394. package/src/materials/nodes/PointsNodeMaterial.js +5 -0
  395. package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
  396. package/src/math/Box3.js +28 -0
  397. package/src/math/Color.js +7 -7
  398. package/src/math/ColorManagement.js +22 -3
  399. package/src/math/Frustum.js +25 -9
  400. package/src/math/FrustumArray.js +258 -0
  401. package/src/math/Line3.js +129 -2
  402. package/src/math/Matrix4.js +48 -27
  403. package/src/math/Quaternion.js +1 -1
  404. package/src/math/Ray.js +2 -0
  405. package/src/math/Sphere.js +28 -0
  406. package/src/math/Spherical.js +2 -2
  407. package/src/nodes/Nodes.js +3 -3
  408. package/src/nodes/TSL.js +6 -3
  409. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  410. package/src/nodes/accessors/Bitangent.js +54 -26
  411. package/src/nodes/accessors/Camera.js +40 -13
  412. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  413. package/src/nodes/accessors/InstanceNode.js +5 -4
  414. package/src/nodes/accessors/Lights.js +2 -2
  415. package/src/nodes/accessors/MaterialNode.js +4 -0
  416. package/src/nodes/accessors/ModelNode.js +1 -1
  417. package/src/nodes/accessors/Normal.js +110 -24
  418. package/src/nodes/accessors/Object3DNode.js +7 -8
  419. package/src/nodes/accessors/Position.js +14 -4
  420. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  421. package/src/nodes/accessors/ReferenceNode.js +19 -4
  422. package/src/nodes/accessors/ReflectVector.js +3 -3
  423. package/src/nodes/accessors/SceneNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +3 -2
  425. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  426. package/src/nodes/accessors/StorageTextureNode.js +15 -4
  427. package/src/nodes/accessors/Tangent.js +25 -17
  428. package/src/nodes/accessors/TangentUtils.js +46 -0
  429. package/src/nodes/accessors/TextureBicubic.js +21 -3
  430. package/src/nodes/accessors/TextureNode.js +71 -8
  431. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  432. package/src/nodes/accessors/VelocityNode.js +1 -0
  433. package/src/nodes/accessors/VertexColorNode.js +4 -4
  434. package/src/nodes/code/CodeNode.js +8 -11
  435. package/src/nodes/core/ArrayNode.js +12 -0
  436. package/src/nodes/core/AssignNode.js +30 -5
  437. package/src/nodes/core/AttributeNode.js +2 -2
  438. package/src/nodes/core/ContextNode.js +27 -4
  439. package/src/nodes/core/Node.js +83 -22
  440. package/src/nodes/core/NodeBuilder.js +273 -49
  441. package/src/nodes/core/NodeUtils.js +46 -1
  442. package/src/nodes/core/NodeVarying.js +19 -1
  443. package/src/nodes/core/PropertyNode.js +8 -12
  444. package/src/nodes/core/StackNode.js +171 -26
  445. package/src/nodes/core/StructTypeNode.js +26 -4
  446. package/src/nodes/core/SubBuildNode.js +89 -0
  447. package/src/nodes/core/UniformNode.js +63 -5
  448. package/src/nodes/core/VarNode.js +102 -4
  449. package/src/nodes/core/VaryingNode.js +45 -24
  450. package/src/nodes/display/BlendModes.js +42 -1
  451. package/src/nodes/display/ColorSpaceNode.js +4 -27
  452. package/src/nodes/display/FrontFacingNode.js +34 -2
  453. package/src/nodes/display/NormalMapNode.js +19 -50
  454. package/src/nodes/display/PassNode.js +165 -20
  455. package/src/nodes/display/ScreenNode.js +0 -26
  456. package/src/nodes/display/ViewportTextureNode.js +67 -7
  457. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  458. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  459. package/src/nodes/functions/PhongLightingModel.js +3 -3
  460. package/src/nodes/functions/PhysicalLightingModel.js +16 -16
  461. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  462. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  463. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  464. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  465. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  466. package/src/nodes/gpgpu/ComputeNode.js +68 -24
  467. package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
  468. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  469. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  470. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  471. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  472. package/src/nodes/lighting/LightsNode.js +29 -11
  473. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  474. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  475. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  476. package/src/nodes/lighting/ShadowNode.js +174 -242
  477. package/src/nodes/lighting/SpotLightNode.js +44 -7
  478. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  479. package/src/nodes/materialx/lib/mx_noise.js +166 -2
  480. package/src/nodes/math/ConditionalNode.js +1 -20
  481. package/src/nodes/math/MathNode.js +146 -75
  482. package/src/nodes/math/OperatorNode.js +129 -119
  483. package/src/nodes/shapes/Shapes.js +5 -4
  484. package/src/nodes/tsl/TSLBase.js +1 -0
  485. package/src/nodes/tsl/TSLCore.js +222 -72
  486. package/src/nodes/utils/DebugNode.js +16 -4
  487. package/src/nodes/utils/Discard.js +2 -2
  488. package/src/nodes/utils/EquirectUV.js +27 -0
  489. package/src/nodes/utils/EventNode.js +83 -0
  490. package/src/nodes/utils/LoopNode.js +64 -34
  491. package/src/nodes/utils/MatcapUV.js +22 -0
  492. package/src/nodes/utils/RTTNode.js +22 -5
  493. package/src/nodes/utils/ReflectorNode.js +77 -7
  494. package/src/nodes/utils/SampleNode.js +81 -0
  495. package/src/nodes/utils/TriplanarTextures.js +65 -0
  496. package/src/objects/BatchedMesh.js +20 -6
  497. package/src/objects/Mesh.js +9 -0
  498. package/src/objects/Skeleton.js +1 -1
  499. package/src/objects/Sprite.js +9 -0
  500. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  501. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  502. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  503. package/src/renderers/WebGLRenderer.js +45 -32
  504. package/src/renderers/common/Animation.js +2 -2
  505. package/src/renderers/common/Background.js +13 -2
  506. package/src/renderers/common/Bindings.js +19 -18
  507. package/src/renderers/common/Color4.js +2 -2
  508. package/src/renderers/common/CubeRenderTarget.js +1 -1
  509. package/src/renderers/common/PostProcessing.js +60 -5
  510. package/src/renderers/common/RenderList.js +0 -4
  511. package/src/renderers/common/RenderObject.js +80 -4
  512. package/src/renderers/common/Renderer.js +133 -22
  513. package/src/renderers/common/SampledTexture.js +3 -71
  514. package/src/renderers/common/Sampler.js +79 -0
  515. package/src/renderers/common/Storage3DTexture.js +100 -0
  516. package/src/renderers/common/StorageArrayTexture.js +84 -0
  517. package/src/renderers/common/StorageTexture.js +19 -0
  518. package/src/renderers/common/Textures.js +34 -24
  519. package/src/renderers/common/TimestampQueryPool.js +1 -0
  520. package/src/renderers/common/Uniform.js +1 -1
  521. package/src/renderers/common/UniformsGroup.js +14 -18
  522. package/src/renderers/common/XRManager.js +183 -35
  523. package/src/renderers/common/XRRenderTarget.js +21 -4
  524. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  525. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  526. package/src/renderers/common/nodes/Nodes.js +13 -3
  527. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  528. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
  529. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  530. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  531. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  532. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  533. package/src/renderers/webgl/WebGLProgram.js +12 -6
  534. package/src/renderers/webgl/WebGLPrograms.js +6 -4
  535. package/src/renderers/webgl/WebGLShadowMap.js +14 -3
  536. package/src/renderers/webgl/WebGLState.js +4 -4
  537. package/src/renderers/webgl/WebGLTextures.js +162 -11
  538. package/src/renderers/webgl/WebGLUtils.js +1 -3
  539. package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
  540. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
  541. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  542. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  543. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  544. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  545. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  546. package/src/renderers/webgpu/WebGPUBackend.js +505 -143
  547. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  548. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  549. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  550. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
  551. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  552. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  553. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
  554. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  555. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
  556. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
  557. package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
  558. package/src/renderers/webxr/WebXRController.js +1 -1
  559. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  560. package/src/renderers/webxr/WebXRManager.js +70 -7
  561. package/src/textures/DepthTexture.js +6 -10
  562. package/src/textures/ExternalTexture.js +45 -0
  563. package/src/textures/FramebufferTexture.js +2 -2
  564. package/src/textures/Source.js +32 -0
  565. package/src/textures/Texture.js +118 -1
  566. package/src/textures/VideoTexture.js +31 -3
  567. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  568. package/src/core/RenderTargetArray.js +0 -40
  569. package/src/nodes/utils/EquirectUVNode.js +0 -65
  570. package/src/nodes/utils/MatcapUVNode.js +0 -49
  571. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -53,7 +53,7 @@ import { WebGLUtils } from './webgl/WebGLUtils.js';
53
53
  import { WebXRManager } from './webxr/WebXRManager.js';
54
54
  import { WebGLMaterials } from './webgl/WebGLMaterials.js';
55
55
  import { WebGLUniformsGroups } from './webgl/WebGLUniformsGroups.js';
56
- import { createCanvasElement, probeAsync, toNormalizedProjectionMatrix, toReversedProjectionMatrix, warnOnce } from '../utils.js';
56
+ import { createCanvasElement, probeAsync, warnOnce } from '../utils.js';
57
57
  import { ColorManagement } from '../math/ColorManagement.js';
58
58
 
59
59
  /**
@@ -81,7 +81,7 @@ class WebGLRenderer {
81
81
  preserveDrawingBuffer = false,
82
82
  powerPreference = 'default',
83
83
  failIfMajorPerformanceCaveat = false,
84
- reverseDepthBuffer = false,
84
+ reversedDepthBuffer = false,
85
85
  multiviewStereo = false,
86
86
  } = parameters;
87
87
 
@@ -315,7 +315,6 @@ class WebGLRenderer {
315
315
 
316
316
  // camera matrices cache
317
317
 
318
- const _currentProjectionMatrix = new Matrix4();
319
318
  const _projScreenMatrix = new Matrix4();
320
319
 
321
320
  const _vector3 = new Vector3();
@@ -412,7 +411,7 @@ class WebGLRenderer {
412
411
 
413
412
  state = new WebGLState( _gl, extensions );
414
413
 
415
- if ( capabilities.reverseDepthBuffer && reverseDepthBuffer ) {
414
+ if ( capabilities.reversedDepthBuffer && reversedDepthBuffer ) {
416
415
 
417
416
  state.buffers.depth.setReversed( true );
418
417
 
@@ -1301,7 +1300,7 @@ class WebGLRenderer {
1301
1300
  * @param {Object3D} scene - The scene or another type of 3D object to precompile.
1302
1301
  * @param {Camera} camera - The camera.
1303
1302
  * @param {?Scene} [targetScene=null] - The target scene.
1304
- * @return {?Set} The precompiled materials.
1303
+ * @return {Set<Material>} The precompiled materials.
1305
1304
  */
1306
1305
  this.compile = function ( scene, camera, targetScene = null ) {
1307
1306
 
@@ -1561,7 +1560,7 @@ class WebGLRenderer {
1561
1560
  renderStateStack.push( currentRenderState );
1562
1561
 
1563
1562
  _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
1564
- _frustum.setFromProjectionMatrix( _projScreenMatrix );
1563
+ _frustum.setFromProjectionMatrix( _projScreenMatrix, WebGLCoordinateSystem, camera.reversedDepth );
1565
1564
 
1566
1565
  _localClippingEnabled = this.localClippingEnabled;
1567
1566
  _clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled );
@@ -1904,6 +1903,9 @@ class WebGLRenderer {
1904
1903
  //
1905
1904
 
1906
1905
  const currentRenderTarget = _this.getRenderTarget();
1906
+ const currentActiveCubeFace = _this.getActiveCubeFace();
1907
+ const currentActiveMipmapLevel = _this.getActiveMipmapLevel();
1908
+
1907
1909
  _this.setRenderTarget( transmissionRenderTarget );
1908
1910
 
1909
1911
  _this.getClearColor( _currentClearColor );
@@ -1973,7 +1975,7 @@ class WebGLRenderer {
1973
1975
 
1974
1976
  }
1975
1977
 
1976
- _this.setRenderTarget( currentRenderTarget );
1978
+ _this.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel );
1977
1979
 
1978
1980
  _this.setClearColor( _currentClearColor, _currentClearAlpha );
1979
1981
 
@@ -2405,23 +2407,17 @@ class WebGLRenderer {
2405
2407
 
2406
2408
  } else {
2407
2409
 
2408
- const reverseDepthBuffer = state.buffers.depth.getReversed();
2409
-
2410
- if ( reverseDepthBuffer ) {
2411
-
2412
- _currentProjectionMatrix.copy( camera.projectionMatrix );
2410
+ const reversedDepthBuffer = state.buffers.depth.getReversed();
2413
2411
 
2414
- toNormalizedProjectionMatrix( _currentProjectionMatrix );
2415
- toReversedProjectionMatrix( _currentProjectionMatrix );
2412
+ if ( reversedDepthBuffer && camera.reversedDepth !== true ) {
2416
2413
 
2417
- p_uniforms.setValue( _gl, 'projectionMatrix', _currentProjectionMatrix );
2418
-
2419
- } else {
2420
-
2421
- p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );
2414
+ camera._reversedDepth = true;
2415
+ camera.updateProjectionMatrix();
2422
2416
 
2423
2417
  }
2424
2418
 
2419
+ p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );
2420
+
2425
2421
  p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );
2426
2422
 
2427
2423
  }
@@ -2887,9 +2883,15 @@ class WebGLRenderer {
2887
2883
 
2888
2884
  } else if ( isRenderTarget3D ) {
2889
2885
 
2890
- const textureProperties = properties.get( renderTarget.texture );
2891
2886
  const layer = activeCubeFace;
2892
- _gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel, layer );
2887
+
2888
+ for ( let i = 0; i < renderTarget.textures.length; i ++ ) {
2889
+
2890
+ const textureProperties = properties.get( renderTarget.textures[ i ] );
2891
+
2892
+ _gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, textureProperties.__webglTexture, activeMipmapLevel, layer );
2893
+
2894
+ }
2893
2895
 
2894
2896
  } else if ( renderTarget !== null && activeMipmapLevel !== 0 ) {
2895
2897
 
@@ -2914,8 +2916,9 @@ class WebGLRenderer {
2914
2916
  * @param {number} height - The height of the copy region.
2915
2917
  * @param {TypedArray} buffer - The result buffer.
2916
2918
  * @param {number} [activeCubeFaceIndex] - The active cube face index.
2919
+ * @param {number} [textureIndex=0] - The texture index of an MRT render target.
2917
2920
  */
2918
- this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {
2921
+ this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex, textureIndex = 0 ) {
2919
2922
 
2920
2923
  if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
2921
2924
 
@@ -2938,7 +2941,7 @@ class WebGLRenderer {
2938
2941
 
2939
2942
  try {
2940
2943
 
2941
- const texture = renderTarget.texture;
2944
+ const texture = renderTarget.textures[ textureIndex ];
2942
2945
  const textureFormat = texture.format;
2943
2946
  const textureType = texture.type;
2944
2947
 
@@ -2960,6 +2963,10 @@ class WebGLRenderer {
2960
2963
 
2961
2964
  if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {
2962
2965
 
2966
+ // when using MRT, select the correct color buffer for the subsequent read command
2967
+
2968
+ if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
2969
+
2963
2970
  _gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );
2964
2971
 
2965
2972
  }
@@ -2990,9 +2997,10 @@ class WebGLRenderer {
2990
2997
  * @param {number} height - The height of the copy region.
2991
2998
  * @param {TypedArray} buffer - The result buffer.
2992
2999
  * @param {number} [activeCubeFaceIndex] - The active cube face index.
3000
+ * @param {number} [textureIndex=0] - The texture index of an MRT render target.
2993
3001
  * @return {Promise<TypedArray>} A Promise that resolves when the read has been finished. The resolve provides the read data as a typed array.
2994
3002
  */
2995
- this.readRenderTargetPixelsAsync = async function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {
3003
+ this.readRenderTargetPixelsAsync = async function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex, textureIndex = 0 ) {
2996
3004
 
2997
3005
  if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
2998
3006
 
@@ -3015,7 +3023,7 @@ class WebGLRenderer {
3015
3023
  // set the active frame buffer to the one we want to read
3016
3024
  state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
3017
3025
 
3018
- const texture = renderTarget.texture;
3026
+ const texture = renderTarget.textures[ textureIndex ];
3019
3027
  const textureFormat = texture.format;
3020
3028
  const textureType = texture.type;
3021
3029
 
@@ -3034,6 +3042,11 @@ class WebGLRenderer {
3034
3042
  const glBuffer = _gl.createBuffer();
3035
3043
  _gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );
3036
3044
  _gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );
3045
+
3046
+ // when using MRT, select the correct color buffer for the subsequent read command
3047
+
3048
+ if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
3049
+
3037
3050
  _gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), 0 );
3038
3051
 
3039
3052
  // reset the frame buffer to the currently set buffer before waiting
@@ -3069,7 +3082,7 @@ class WebGLRenderer {
3069
3082
  * Copies pixels from the current bound framebuffer into the given texture.
3070
3083
  *
3071
3084
  * @param {FramebufferTexture} texture - The texture.
3072
- * @param {Vector2} position - The start position of the copy operation.
3085
+ * @param {?Vector2} [position=null] - The start position of the copy operation.
3073
3086
  * @param {number} [level=0] - The mip level. The default represents the base mip.
3074
3087
  */
3075
3088
  this.copyFramebufferToTexture = function ( texture, position = null, level = 0 ) {
@@ -3100,10 +3113,10 @@ class WebGLRenderer {
3100
3113
  *
3101
3114
  * @param {Texture} srcTexture - The source texture.
3102
3115
  * @param {Texture} dstTexture - The destination texture.
3103
- * @param {Box2|Box3} [srcRegion=null] - A bounding box which describes the source region. Can be two or three-dimensional.
3104
- * @param {Vector2|Vector3} [dstPosition=null] - A vector that represents the origin of the destination region. Can be two or three-dimensional.
3105
- * @param {number} srcLevel - The source mipmap level to copy.
3106
- * @param {number} dstLevel - The destination mipmap level.
3116
+ * @param {?(Box2|Box3)} [srcRegion=null] - A bounding box which describes the source region. Can be two or three-dimensional.
3117
+ * @param {?(Vector2|Vector3)} [dstPosition=null] - A vector that represents the origin of the destination region. Can be two or three-dimensional.
3118
+ * @param {number} [srcLevel=0] - The source mipmap level to copy.
3119
+ * @param {?number} [dstLevel=null] - The destination mipmap level.
3107
3120
  */
3108
3121
  this.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = null ) {
3109
3122
 
@@ -3495,7 +3508,7 @@ class WebGLRenderer {
3495
3508
  * @property {boolean} [depth=true] Whether the drawing buffer has a depth buffer of at least 16 bits.
3496
3509
  * @property {boolean} [logarithmicDepthBuffer=false] Whether to use a logarithmic depth buffer. It may be necessary to use this if dealing with huge differences in scale in a single scene.
3497
3510
  * Note that this setting uses `gl_FragDepth` if available which disables the Early Fragment Test optimization and can cause a decrease in performance.
3498
- * @property {boolean} [reverseDepthBuffer=false] Whether to use a reverse depth buffer. Requires the `EXT_clip_control` extension.
3511
+ * @property {boolean} [reversedDepthBuffer=false] Whether to use a reverse depth buffer. Requires the `EXT_clip_control` extension.
3499
3512
  * This is a more faster and accurate version than logarithmic depth buffer.
3500
3513
  **/
3501
3514
 
@@ -3516,7 +3529,7 @@ class WebGLRenderer {
3516
3529
  * @property {number} maxVertexTextures - The number of textures that can be used in a vertex shader.
3517
3530
  * @property {number} maxVertexUniforms - The maximum number of uniforms that can be used in a vertex shader.
3518
3531
  * @property {string} precision - The shader precision currently being used by the renderer.
3519
- * @property {boolean} reverseDepthBuffer - `true` if `reverseDepthBuffer` was set to `true` in the constructor
3532
+ * @property {boolean} reversedDepthBuffer - `true` if `reversedDepthBuffer` was set to `true` in the constructor
3520
3533
  * and the rendering context supports `EXT_clip_control`.
3521
3534
  * @property {boolean} vertexTextures - `true` if vertex textures can be used.
3522
3535
  **/
@@ -32,9 +32,9 @@ class Animation {
32
32
  * A reference to the context from `requestAnimationFrame()` can
33
33
  * be called (usually `window`).
34
34
  *
35
- * @type {Window|XRSession}
35
+ * @type {?(Window|XRSession)}
36
36
  */
37
- this._context = self;
37
+ this._context = typeof self !== 'undefined' ? self : null;
38
38
 
39
39
  /**
40
40
  * The user-defined animation loop.
@@ -1,6 +1,6 @@
1
1
  import DataMap from './DataMap.js';
2
2
  import Color4 from './Color4.js';
3
- import { vec4, context, normalWorld, backgroundBlurriness, backgroundIntensity, backgroundRotation, modelViewProjection } from '../../nodes/TSL.js';
3
+ import { vec4, context, normalWorldGeometry, backgroundBlurriness, backgroundIntensity, backgroundRotation, modelViewProjection } from '../../nodes/TSL.js';
4
4
  import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
5
5
 
6
6
  import { Mesh } from '../../objects/Mesh.js';
@@ -89,7 +89,7 @@ class Background extends DataMap {
89
89
 
90
90
  const backgroundMeshNode = context( vec4( backgroundNode ).mul( backgroundIntensity ), {
91
91
  // @TODO: Add Texture2D support using node context
92
- getUV: () => backgroundRotation.mul( normalWorld ),
92
+ getUV: () => backgroundRotation.mul( normalWorldGeometry ),
93
93
  getTextureLevel: () => backgroundBlurriness
94
94
  } );
95
95
 
@@ -118,6 +118,17 @@ class Background extends DataMap {
118
118
 
119
119
  };
120
120
 
121
+ function onBackgroundDispose() {
122
+
123
+ background.removeEventListener( 'dispose', onBackgroundDispose );
124
+
125
+ backgroundMesh.material.dispose();
126
+ backgroundMesh.geometry.dispose();
127
+
128
+ }
129
+
130
+ background.addEventListener( 'dispose', onBackgroundDispose );
131
+
121
132
  }
122
133
 
123
134
  const backgroundCacheKey = backgroundNode.getCacheKey();
@@ -244,24 +244,31 @@ class Bindings extends DataMap {
244
244
 
245
245
  }
246
246
 
247
- } else if ( binding.isSampler ) {
248
-
249
- binding.update();
250
-
251
247
  } else if ( binding.isSampledTexture ) {
252
248
 
253
- const texturesTextureData = this.textures.get( binding.texture );
254
-
255
- if ( binding.needsBindingsUpdate( texturesTextureData.generation ) ) needsBindingsUpdate = true;
256
-
257
249
  const updated = binding.update();
258
250
 
251
+ // get the texture data after the update, to sync the texture reference from node
252
+
259
253
  const texture = binding.texture;
254
+ const texturesTextureData = this.textures.get( texture );
260
255
 
261
256
  if ( updated ) {
262
257
 
258
+ // version: update the texture data or create a new one
259
+
263
260
  this.textures.updateTexture( texture );
264
261
 
262
+ // generation: update the bindings if a new texture has been created
263
+
264
+ if ( binding.generation !== texturesTextureData.generation ) {
265
+
266
+ binding.generation = texturesTextureData.generation;
267
+
268
+ needsBindingsUpdate = true;
269
+
270
+ }
271
+
265
272
  }
266
273
 
267
274
  const textureData = backend.get( texture );
@@ -277,16 +284,6 @@ class Bindings extends DataMap {
277
284
 
278
285
  }
279
286
 
280
- if ( backend.isWebGPUBackend === true && textureData.texture === undefined && textureData.externalTexture === undefined ) {
281
-
282
- // TODO: Remove this once we found why updated === false isn't bound to a texture in the WebGPU backend
283
- console.error( 'Bindings._update: binding should be available:', binding, updated, texture, binding.textureNode.value, needsBindingsUpdate );
284
-
285
- this.textures.updateTexture( texture );
286
- needsBindingsUpdate = true;
287
-
288
- }
289
-
290
287
  if ( texture.isStorageTexture === true ) {
291
288
 
292
289
  const textureData = this.get( texture );
@@ -305,6 +302,10 @@ class Bindings extends DataMap {
305
302
 
306
303
  }
307
304
 
305
+ } else if ( binding.isSampler ) {
306
+
307
+ binding.update();
308
+
308
309
  }
309
310
 
310
311
  }
@@ -34,8 +34,8 @@ class Color4 extends Color {
34
34
  * string argument to this method.
35
35
  *
36
36
  * @param {number|string|Color} r - The red value.
37
- * @param {number} g - The green value.
38
- * @param {number} b - The blue value.
37
+ * @param {number} [g] - The green value.
38
+ * @param {number} [b] - The blue value.
39
39
  * @param {number} [a=1] - The alpha value.
40
40
  * @return {Color4} A reference to this object.
41
41
  */
@@ -1,4 +1,4 @@
1
- import { equirectUV } from '../../nodes/utils/EquirectUVNode.js';
1
+ import { equirectUV } from '../../nodes/utils/EquirectUV.js';
2
2
  import { texture as TSL_Texture } from '../../nodes/accessors/TextureNode.js';
3
3
  import { positionWorldDirection } from '../../nodes/accessors/Position.js';
4
4
  import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
@@ -1,6 +1,7 @@
1
1
  import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
2
+ import { ColorManagement } from '../../math/ColorManagement.js';
2
3
  import { vec4, renderOutput } from '../../nodes/TSL.js';
3
- import { LinearSRGBColorSpace, NoToneMapping } from '../../constants.js';
4
+ import { NoToneMapping } from '../../constants.js';
4
5
  import QuadMesh from '../../renderers/common/QuadMesh.js';
5
6
 
6
7
  /**
@@ -82,6 +83,15 @@ class PostProcessing {
82
83
  */
83
84
  this._quadMesh = new QuadMesh( material );
84
85
 
86
+ /**
87
+ * The context of the post processing stack.
88
+ *
89
+ * @private
90
+ * @type {?Object}
91
+ * @default null
92
+ */
93
+ this._context = null;
94
+
85
95
  }
86
96
 
87
97
  /**
@@ -91,15 +101,17 @@ class PostProcessing {
91
101
  */
92
102
  render() {
93
103
 
104
+ const renderer = this.renderer;
105
+
94
106
  this._update();
95
107
 
96
- const renderer = this.renderer;
108
+ if ( this._context.onBeforePostProcessing !== null ) this._context.onBeforePostProcessing();
97
109
 
98
110
  const toneMapping = renderer.toneMapping;
99
111
  const outputColorSpace = renderer.outputColorSpace;
100
112
 
101
113
  renderer.toneMapping = NoToneMapping;
102
- renderer.outputColorSpace = LinearSRGBColorSpace;
114
+ renderer.outputColorSpace = ColorManagement.workingColorSpace;
103
115
 
104
116
  //
105
117
 
@@ -115,6 +127,20 @@ class PostProcessing {
115
127
  renderer.toneMapping = toneMapping;
116
128
  renderer.outputColorSpace = outputColorSpace;
117
129
 
130
+ if ( this._context.onAfterPostProcessing !== null ) this._context.onAfterPostProcessing();
131
+
132
+ }
133
+
134
+ /**
135
+ * Returns the current context of the post processing stack.
136
+ *
137
+ * @readonly
138
+ * @type {?Object}
139
+ */
140
+ get context() {
141
+
142
+ return this._context;
143
+
118
144
  }
119
145
 
120
146
  /**
@@ -140,7 +166,32 @@ class PostProcessing {
140
166
  const toneMapping = renderer.toneMapping;
141
167
  const outputColorSpace = renderer.outputColorSpace;
142
168
 
143
- this._quadMesh.material.fragmentNode = this.outputColorTransform === true ? renderOutput( this.outputNode, toneMapping, outputColorSpace ) : this.outputNode.context( { toneMapping, outputColorSpace } );
169
+ const context = {
170
+ postProcessing: this,
171
+ onBeforePostProcessing: null,
172
+ onAfterPostProcessing: null
173
+ };
174
+
175
+ let outputNode = this.outputNode;
176
+
177
+ if ( this.outputColorTransform === true ) {
178
+
179
+ outputNode = outputNode.context( context );
180
+
181
+ outputNode = renderOutput( outputNode, toneMapping, outputColorSpace );
182
+
183
+ } else {
184
+
185
+ context.toneMapping = toneMapping;
186
+ context.outputColorSpace = outputColorSpace;
187
+
188
+ outputNode = outputNode.context( context );
189
+
190
+ }
191
+
192
+ this._context = context;
193
+
194
+ this._quadMesh.material.fragmentNode = outputNode;
144
195
  this._quadMesh.material.needsUpdate = true;
145
196
 
146
197
  this.needsUpdate = false;
@@ -161,13 +212,15 @@ class PostProcessing {
161
212
 
162
213
  this._update();
163
214
 
215
+ if ( this._context.onBeforePostProcessing !== null ) this._context.onBeforePostProcessing();
216
+
164
217
  const renderer = this.renderer;
165
218
 
166
219
  const toneMapping = renderer.toneMapping;
167
220
  const outputColorSpace = renderer.outputColorSpace;
168
221
 
169
222
  renderer.toneMapping = NoToneMapping;
170
- renderer.outputColorSpace = LinearSRGBColorSpace;
223
+ renderer.outputColorSpace = ColorManagement.workingColorSpace;
171
224
 
172
225
  //
173
226
 
@@ -183,6 +236,8 @@ class PostProcessing {
183
236
  renderer.toneMapping = toneMapping;
184
237
  renderer.outputColorSpace = outputColorSpace;
185
238
 
239
+ if ( this._context.onAfterPostProcessing !== null ) this._context.onAfterPostProcessing();
240
+
186
241
  }
187
242
 
188
243
  }
@@ -19,10 +19,6 @@ function painterSortStable( a, b ) {
19
19
 
20
20
  return a.renderOrder - b.renderOrder;
21
21
 
22
- } else if ( a.material.id !== b.material.id ) {
23
-
24
- return a.material.id - b.material.id;
25
-
26
22
  } else if ( a.z !== b.z ) {
27
23
 
28
24
  return a.z - b.z;
@@ -171,6 +171,16 @@ class RenderObject {
171
171
  */
172
172
  this.attributes = null;
173
173
 
174
+ /**
175
+ * An object holding the version of the
176
+ * attributes. The keys are the attribute names
177
+ * and the values are the attribute versions.
178
+ *
179
+ * @type {?Object<string, number>}
180
+ * @default null
181
+ */
182
+ this.attributesId = null;
183
+
174
184
  /**
175
185
  * A reference to a render pipeline the render
176
186
  * object is processed with.
@@ -290,7 +300,7 @@ class RenderObject {
290
300
 
291
301
  /**
292
302
  * An event listener which is executed when `dispose()` is called on
293
- * the render object's material.
303
+ * the material of this render object.
294
304
  *
295
305
  * @method
296
306
  */
@@ -300,7 +310,23 @@ class RenderObject {
300
310
 
301
311
  };
302
312
 
313
+ /**
314
+ * An event listener which is executed when `dispose()` is called on
315
+ * the geometry of this render object.
316
+ *
317
+ * @method
318
+ */
319
+ this.onGeometryDispose = () => {
320
+
321
+ // clear geometry cache attributes
322
+
323
+ this.attributes = null;
324
+ this.attributesId = null;
325
+
326
+ };
327
+
303
328
  this.material.addEventListener( 'dispose', this.onMaterialDispose );
329
+ this.geometry.addEventListener( 'dispose', this.onGeometryDispose );
304
330
 
305
331
  }
306
332
 
@@ -439,6 +465,7 @@ class RenderObject {
439
465
 
440
466
  this.geometry = geometry;
441
467
  this.attributes = null;
468
+ this.attributesId = null;
442
469
 
443
470
  }
444
471
 
@@ -458,9 +485,25 @@ class RenderObject {
458
485
  const attributes = [];
459
486
  const vertexBuffers = new Set();
460
487
 
488
+ const attributesId = {};
489
+
461
490
  for ( const nodeAttribute of nodeAttributes ) {
462
491
 
463
- const attribute = nodeAttribute.node && nodeAttribute.node.attribute ? nodeAttribute.node.attribute : geometry.getAttribute( nodeAttribute.name );
492
+ let attribute;
493
+
494
+ if ( nodeAttribute.node && nodeAttribute.node.attribute ) {
495
+
496
+ // node attribute
497
+ attribute = nodeAttribute.node.attribute;
498
+
499
+ } else {
500
+
501
+ // geometry attribute
502
+ attribute = geometry.getAttribute( nodeAttribute.name );
503
+
504
+ attributesId[ nodeAttribute.name ] = attribute.version;
505
+
506
+ }
464
507
 
465
508
  if ( attribute === undefined ) continue;
466
509
 
@@ -472,6 +515,7 @@ class RenderObject {
472
515
  }
473
516
 
474
517
  this.attributes = attributes;
518
+ this.attributesId = attributesId;
475
519
  this.vertexBuffers = Array.from( vertexBuffers.values() );
476
520
 
477
521
  return attributes;
@@ -509,7 +553,18 @@ class RenderObject {
509
553
 
510
554
  const index = this.getIndex();
511
555
  const hasIndex = ( index !== null );
512
- const instanceCount = geometry.isInstancedBufferGeometry ? geometry.instanceCount : ( object.count > 1 ? object.count : 1 );
556
+
557
+ let instanceCount = 1;
558
+
559
+ if ( geometry.isInstancedBufferGeometry === true ) {
560
+
561
+ instanceCount = geometry.instanceCount;
562
+
563
+ } else if ( object.count !== undefined ) {
564
+
565
+ instanceCount = Math.max( 0, object.count );
566
+
567
+ }
513
568
 
514
569
  if ( instanceCount === 0 ) return null;
515
570
 
@@ -725,7 +780,27 @@ class RenderObject {
725
780
  */
726
781
  get needsGeometryUpdate() {
727
782
 
728
- return this.geometry.id !== this.object.geometry.id;
783
+ if ( this.geometry.id !== this.object.geometry.id ) return true;
784
+
785
+ if ( this.attributes !== null ) {
786
+
787
+ const attributesId = this.attributesId;
788
+
789
+ for ( const name in attributesId ) {
790
+
791
+ const attribute = this.geometry.getAttribute( name );
792
+
793
+ if ( attribute === undefined || attributesId[ name ] !== attribute.id ) {
794
+
795
+ return true;
796
+
797
+ }
798
+
799
+ }
800
+
801
+ }
802
+
803
+ return false;
729
804
 
730
805
  }
731
806
 
@@ -803,6 +878,7 @@ class RenderObject {
803
878
  dispose() {
804
879
 
805
880
  this.material.removeEventListener( 'dispose', this.onMaterialDispose );
881
+ this.geometry.removeEventListener( 'dispose', this.onGeometryDispose );
806
882
 
807
883
  this.onDispose();
808
884