@plastic-software/three 0.175.14 → 0.178.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 (528) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +7746 -6791
  3. package/build/three.core.js +7371 -6576
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +189 -29
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +19 -11
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +4989 -2235
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +5082 -2469
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -1
  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 +1 -0
  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 +18 -4
  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 +49 -35
  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 +12 -10
  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 +2 -1
  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 +7 -0
  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/lighting/TiledLighting.js +1 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +1 -0
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  79. package/examples/jsm/lines/Line2.js +1 -0
  80. package/examples/jsm/lines/LineGeometry.js +1 -0
  81. package/examples/jsm/lines/LineMaterial.js +4 -4
  82. package/examples/jsm/lines/LineSegments2.js +1 -0
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  84. package/examples/jsm/lines/Wireframe.js +1 -0
  85. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  88. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  89. package/examples/jsm/loaders/3DMLoader.js +1 -0
  90. package/examples/jsm/loaders/3MFLoader.js +1 -0
  91. package/examples/jsm/loaders/AMFLoader.js +1 -0
  92. package/examples/jsm/loaders/BVHLoader.js +1 -0
  93. package/examples/jsm/loaders/ColladaLoader.js +6 -5
  94. package/examples/jsm/loaders/DDSLoader.js +1 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  96. package/examples/jsm/loaders/EXRLoader.js +1 -0
  97. package/examples/jsm/loaders/FBXLoader.js +25 -23
  98. package/examples/jsm/loaders/FontLoader.js +1 -0
  99. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  100. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  102. package/examples/jsm/loaders/IESLoader.js +1 -0
  103. package/examples/jsm/loaders/KMZLoader.js +1 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  105. package/examples/jsm/loaders/KTXLoader.js +1 -0
  106. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  107. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  108. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  110. package/examples/jsm/loaders/LWOLoader.js +1 -13
  111. package/examples/jsm/loaders/LottieLoader.js +15 -0
  112. package/examples/jsm/loaders/MD2Loader.js +1 -0
  113. package/examples/jsm/loaders/MDDLoader.js +1 -0
  114. package/examples/jsm/loaders/MTLLoader.js +4 -3
  115. package/examples/jsm/loaders/MaterialXLoader.js +1 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  117. package/examples/jsm/loaders/OBJLoader.js +1 -0
  118. package/examples/jsm/loaders/PCDLoader.js +122 -19
  119. package/examples/jsm/loaders/PDBLoader.js +1 -0
  120. package/examples/jsm/loaders/PLYLoader.js +1 -0
  121. package/examples/jsm/loaders/PVRLoader.js +1 -0
  122. package/examples/jsm/loaders/RGBELoader.js +1 -0
  123. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  124. package/examples/jsm/loaders/STLLoader.js +1 -0
  125. package/examples/jsm/loaders/SVGLoader.js +1 -0
  126. package/examples/jsm/loaders/TDSLoader.js +1 -0
  127. package/examples/jsm/loaders/TGALoader.js +1 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  129. package/examples/jsm/loaders/TTFLoader.js +1 -0
  130. package/examples/jsm/loaders/USDZLoader.js +1 -0
  131. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  132. package/examples/jsm/loaders/VOXLoader.js +1 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  134. package/examples/jsm/loaders/VTKLoader.js +1 -0
  135. package/examples/jsm/loaders/XYZLoader.js +1 -0
  136. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  137. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  138. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  139. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  140. package/examples/jsm/math/Capsule.js +2 -0
  141. package/examples/jsm/math/ColorConverter.js +1 -0
  142. package/examples/jsm/math/ConvexHull.js +2 -0
  143. package/examples/jsm/math/ImprovedNoise.js +19 -14
  144. package/examples/jsm/math/Lut.js +2 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  146. package/examples/jsm/math/OBB.js +2 -0
  147. package/examples/jsm/math/Octree.js +20 -1
  148. package/examples/jsm/math/SimplexNoise.js +2 -0
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  150. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  151. package/examples/jsm/misc/Gyroscope.js +1 -0
  152. package/examples/jsm/misc/MD2Character.js +2 -0
  153. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  154. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  158. package/examples/jsm/misc/RollerCoaster.js +5 -0
  159. package/examples/jsm/misc/Timer.js +2 -0
  160. package/examples/jsm/misc/TubePainter.js +1 -0
  161. package/examples/jsm/misc/Volume.js +2 -0
  162. package/examples/jsm/misc/VolumeSlice.js +1 -0
  163. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  167. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  168. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  169. package/examples/jsm/objects/Lensflare.js +3 -0
  170. package/examples/jsm/objects/LensflareMesh.js +1 -0
  171. package/examples/jsm/objects/MarchingCubes.js +2 -0
  172. package/examples/jsm/objects/Reflector.js +1 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  174. package/examples/jsm/objects/Refractor.js +1 -0
  175. package/examples/jsm/objects/ShadowMesh.js +1 -0
  176. package/examples/jsm/objects/Sky.js +2 -1
  177. package/examples/jsm/objects/SkyMesh.js +20 -17
  178. package/examples/jsm/objects/Water.js +1 -0
  179. package/examples/jsm/objects/Water2.js +1 -0
  180. package/examples/jsm/objects/Water2Mesh.js +3 -1
  181. package/examples/jsm/objects/WaterMesh.js +2 -1
  182. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  183. package/examples/jsm/physics/JoltPhysics.js +1 -0
  184. package/examples/jsm/physics/RapierPhysics.js +139 -12
  185. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  186. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  187. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  188. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  190. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  191. package/examples/jsm/postprocessing/EffectComposer.js +4 -2
  192. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  193. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  194. package/examples/jsm/postprocessing/GTAOPass.js +4 -3
  195. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  196. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  197. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  198. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  199. package/examples/jsm/postprocessing/OutlinePass.js +5 -2
  200. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  201. package/examples/jsm/postprocessing/Pass.js +3 -1
  202. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  203. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  204. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  205. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  206. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  207. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  208. package/examples/jsm/postprocessing/SSAOPass.js +2 -1
  209. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  210. package/examples/jsm/postprocessing/SavePass.js +2 -1
  211. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  212. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  213. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  214. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  215. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  216. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  217. package/examples/jsm/renderers/Projector.js +2 -0
  218. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  219. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  220. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  221. package/examples/jsm/shaders/BasicShader.js +4 -1
  222. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  223. package/examples/jsm/shaders/BlendShader.js +4 -1
  224. package/examples/jsm/shaders/BokehShader.js +4 -1
  225. package/examples/jsm/shaders/BokehShader2.js +4 -1
  226. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  227. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  228. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  229. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  230. package/examples/jsm/shaders/CopyShader.js +4 -1
  231. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  232. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  233. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  234. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  235. package/examples/jsm/shaders/ExposureShader.js +4 -1
  236. package/examples/jsm/shaders/FXAAShader.js +4 -1
  237. package/examples/jsm/shaders/FilmShader.js +4 -1
  238. package/examples/jsm/shaders/FocusShader.js +4 -1
  239. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  240. package/examples/jsm/shaders/GTAOShader.js +4 -1
  241. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  242. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  243. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  244. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  245. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  246. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  247. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  248. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  249. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  250. package/examples/jsm/shaders/MirrorShader.js +4 -1
  251. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  252. package/examples/jsm/shaders/OutputShader.js +4 -1
  253. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  254. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  255. package/examples/jsm/shaders/SAOShader.js +4 -1
  256. package/examples/jsm/shaders/SMAAShader.js +1 -0
  257. package/examples/jsm/shaders/SSAOShader.js +4 -1
  258. package/examples/jsm/shaders/SSRShader.js +1 -0
  259. package/examples/jsm/shaders/SepiaShader.js +4 -1
  260. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  261. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  262. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  263. package/examples/jsm/shaders/ToonShader.js +2 -1
  264. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  265. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +4 -1
  266. package/examples/jsm/shaders/VelocityShader.js +4 -1
  267. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  268. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  269. package/examples/jsm/shaders/VignetteShader.js +4 -1
  270. package/examples/jsm/shaders/VolumeShader.js +5 -2
  271. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  272. package/examples/jsm/textures/FlakesTexture.js +2 -0
  273. package/examples/jsm/transpiler/AST.js +381 -30
  274. package/examples/jsm/transpiler/GLSLDecoder.js +226 -87
  275. package/examples/jsm/transpiler/Linker.js +327 -0
  276. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  277. package/examples/jsm/transpiler/Transpiler.js +19 -1
  278. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  279. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  280. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  281. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  282. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  283. package/examples/jsm/tsl/display/BloomNode.js +1 -0
  284. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  285. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  286. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  287. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  288. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  289. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  290. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  291. package/examples/jsm/tsl/display/GaussianBlurNode.js +4 -29
  292. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  293. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  294. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  295. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  296. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  297. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  298. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  299. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  300. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  301. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  302. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  303. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  304. package/examples/jsm/tsl/display/TRAAPassNode.js +5 -4
  305. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  306. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  307. package/examples/jsm/tsl/lighting/TiledLightsNode.js +4 -3
  308. package/examples/jsm/tsl/math/Bayer.js +4 -1
  309. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  310. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  311. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  312. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  313. package/examples/jsm/utils/CameraUtils.js +4 -1
  314. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  315. package/examples/jsm/utils/GeometryUtils.js +4 -1
  316. package/examples/jsm/utils/LDrawUtils.js +2 -0
  317. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  318. package/examples/jsm/utils/SceneUtils.js +4 -1
  319. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  320. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  321. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  322. package/examples/jsm/utils/SortUtils.js +4 -1
  323. package/examples/jsm/utils/UVsDebug.js +4 -1
  324. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  325. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  326. package/examples/jsm/utils/WorkerPool.js +2 -0
  327. package/examples/jsm/webxr/ARButton.js +1 -0
  328. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  329. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  330. package/examples/jsm/webxr/Text2D.js +4 -1
  331. package/examples/jsm/webxr/VRButton.js +1 -0
  332. package/examples/jsm/webxr/XRButton.js +1 -0
  333. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  334. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  335. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  336. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  338. package/examples/jsm/webxr/XRPlanes.js +1 -0
  339. package/package.json +6 -4
  340. package/src/Three.Core.js +1 -1
  341. package/src/Three.TSL.js +18 -10
  342. package/src/Three.WebGPU.Nodes.js +1 -0
  343. package/src/Three.WebGPU.js +3 -0
  344. package/src/audio/AudioListener.js +13 -10
  345. package/src/cameras/ArrayCamera.js +9 -1
  346. package/src/constants.js +47 -20
  347. package/src/core/BufferAttribute.js +3 -3
  348. package/src/core/BufferGeometry.js +2 -5
  349. package/src/core/Clock.js +2 -8
  350. package/src/core/GLBufferAttribute.js +13 -1
  351. package/src/core/Object3D.js +23 -22
  352. package/src/core/RenderTarget.js +65 -21
  353. package/src/core/RenderTarget3D.js +1 -0
  354. package/src/extras/TextureUtils.js +1 -5
  355. package/src/extras/core/Curve.js +1 -1
  356. package/src/extras/core/Path.js +22 -22
  357. package/src/geometries/CapsuleGeometry.js +167 -17
  358. package/src/geometries/ExtrudeGeometry.js +39 -29
  359. package/src/helpers/ArrowHelper.js +2 -2
  360. package/src/helpers/SkeletonHelper.js +1 -1
  361. package/src/lights/LightShadow.js +14 -0
  362. package/src/lights/SpotLightShadow.js +9 -1
  363. package/src/lights/webgpu/ProjectorLight.js +46 -0
  364. package/src/loaders/BufferGeometryLoader.js +1 -10
  365. package/src/loaders/FileLoader.js +2 -2
  366. package/src/loaders/ImageBitmapLoader.js +25 -9
  367. package/src/loaders/ImageLoader.js +55 -8
  368. package/src/loaders/ObjectLoader.js +44 -16
  369. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  370. package/src/materials/Material.js +1 -7
  371. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  372. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  373. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  374. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  375. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  376. package/src/materials/nodes/NodeMaterial.js +105 -19
  377. package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
  378. package/src/math/Box3.js +28 -0
  379. package/src/math/Color.js +7 -7
  380. package/src/math/ColorManagement.js +22 -3
  381. package/src/math/Frustum.js +6 -1
  382. package/src/math/FrustumArray.js +253 -0
  383. package/src/math/Quaternion.js +1 -1
  384. package/src/math/Ray.js +2 -0
  385. package/src/math/Sphere.js +28 -0
  386. package/src/nodes/Nodes.js +2 -3
  387. package/src/nodes/TSL.js +5 -3
  388. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  389. package/src/nodes/accessors/Bitangent.js +54 -26
  390. package/src/nodes/accessors/Camera.js +31 -4
  391. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  392. package/src/nodes/accessors/InstanceNode.js +5 -4
  393. package/src/nodes/accessors/Lights.js +2 -2
  394. package/src/nodes/accessors/MaterialNode.js +4 -0
  395. package/src/nodes/accessors/ModelNode.js +1 -1
  396. package/src/nodes/accessors/Normal.js +102 -16
  397. package/src/nodes/accessors/Object3DNode.js +7 -8
  398. package/src/nodes/accessors/Position.js +14 -4
  399. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  400. package/src/nodes/accessors/ReferenceNode.js +1 -1
  401. package/src/nodes/accessors/ReflectVector.js +3 -3
  402. package/src/nodes/accessors/SkinningNode.js +3 -2
  403. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  404. package/src/nodes/accessors/StorageTextureNode.js +14 -3
  405. package/src/nodes/accessors/Tangent.js +25 -17
  406. package/src/nodes/accessors/TangentUtils.js +46 -0
  407. package/src/nodes/accessors/TextureBicubic.js +21 -3
  408. package/src/nodes/accessors/TextureNode.js +59 -8
  409. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  410. package/src/nodes/accessors/VelocityNode.js +1 -0
  411. package/src/nodes/accessors/VertexColorNode.js +4 -4
  412. package/src/nodes/code/CodeNode.js +8 -11
  413. package/src/nodes/core/AssignNode.js +27 -5
  414. package/src/nodes/core/AttributeNode.js +2 -2
  415. package/src/nodes/core/ContextNode.js +7 -3
  416. package/src/nodes/core/Node.js +69 -20
  417. package/src/nodes/core/NodeBuilder.js +248 -29
  418. package/src/nodes/core/NodeUtils.js +42 -0
  419. package/src/nodes/core/NodeVarying.js +19 -1
  420. package/src/nodes/core/PropertyNode.js +8 -12
  421. package/src/nodes/core/StackNode.js +129 -26
  422. package/src/nodes/core/StructTypeNode.js +26 -4
  423. package/src/nodes/core/SubBuildNode.js +89 -0
  424. package/src/nodes/core/VarNode.js +11 -2
  425. package/src/nodes/core/VaryingNode.js +45 -24
  426. package/src/nodes/display/BlendModes.js +42 -1
  427. package/src/nodes/display/ColorSpaceNode.js +4 -27
  428. package/src/nodes/display/FrontFacingNode.js +34 -2
  429. package/src/nodes/display/NormalMapNode.js +19 -50
  430. package/src/nodes/display/PassNode.js +18 -19
  431. package/src/nodes/display/ScreenNode.js +0 -26
  432. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  433. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  434. package/src/nodes/functions/PhongLightingModel.js +3 -3
  435. package/src/nodes/functions/PhysicalLightingModel.js +14 -14
  436. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  437. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  438. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  439. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  440. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  441. package/src/nodes/gpgpu/ComputeNode.js +1 -1
  442. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  443. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  444. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  445. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  446. package/src/nodes/lighting/LightsNode.js +29 -11
  447. package/src/nodes/lighting/ProjectorLightNode.js +78 -0
  448. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  449. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  450. package/src/nodes/lighting/ShadowNode.js +174 -242
  451. package/src/nodes/lighting/SpotLightNode.js +44 -7
  452. package/src/nodes/materialx/lib/mx_noise.js +1 -1
  453. package/src/nodes/math/ConditionalNode.js +0 -19
  454. package/src/nodes/math/MathNode.js +68 -21
  455. package/src/nodes/math/OperatorNode.js +108 -98
  456. package/src/nodes/shapes/Shapes.js +5 -4
  457. package/src/nodes/tsl/TSLBase.js +1 -0
  458. package/src/nodes/tsl/TSLCore.js +160 -65
  459. package/src/nodes/utils/DebugNode.js +15 -3
  460. package/src/nodes/utils/Discard.js +2 -2
  461. package/src/nodes/utils/EquirectUV.js +27 -0
  462. package/src/nodes/utils/LoopNode.js +64 -34
  463. package/src/nodes/utils/MatcapUV.js +22 -0
  464. package/src/nodes/utils/RTTNode.js +13 -5
  465. package/src/nodes/utils/ReflectorNode.js +77 -7
  466. package/src/nodes/utils/SampleNode.js +81 -0
  467. package/src/nodes/utils/TriplanarTextures.js +65 -0
  468. package/src/objects/BatchedMesh.js +16 -4
  469. package/src/objects/Mesh.js +9 -0
  470. package/src/objects/Skeleton.js +1 -1
  471. package/src/objects/Sprite.js +9 -0
  472. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  473. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  474. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  475. package/src/renderers/WebGLRenderer.js +25 -11
  476. package/src/renderers/common/Animation.js +2 -2
  477. package/src/renderers/common/Background.js +13 -2
  478. package/src/renderers/common/CubeRenderTarget.js +1 -1
  479. package/src/renderers/common/RenderList.js +0 -4
  480. package/src/renderers/common/RenderObject.js +80 -4
  481. package/src/renderers/common/Renderer.js +116 -8
  482. package/src/renderers/common/Storage3DTexture.js +79 -0
  483. package/src/renderers/common/StorageArrayTexture.js +63 -0
  484. package/src/renderers/common/Textures.js +15 -21
  485. package/src/renderers/common/TimestampQueryPool.js +1 -0
  486. package/src/renderers/common/Uniform.js +1 -1
  487. package/src/renderers/common/UniformsGroup.js +14 -18
  488. package/src/renderers/common/XRManager.js +157 -27
  489. package/src/renderers/common/XRRenderTarget.js +21 -4
  490. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  491. package/src/renderers/common/nodes/Nodes.js +13 -3
  492. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  493. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  494. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  495. package/src/renderers/webgl/WebGLPrograms.js +4 -2
  496. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  497. package/src/renderers/webgl/WebGLState.js +4 -4
  498. package/src/renderers/webgl/WebGLTextures.js +144 -4
  499. package/src/renderers/webgl/WebGLUtils.js +1 -3
  500. package/src/renderers/webgl-fallback/WebGLBackend.js +244 -87
  501. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +73 -7
  502. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  503. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  504. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  505. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  506. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  507. package/src/renderers/webgpu/WebGPUBackend.js +451 -128
  508. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  509. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  510. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  511. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +86 -33
  512. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  513. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  514. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +28 -5
  515. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  516. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -8
  517. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +45 -50
  518. package/src/renderers/webxr/WebXRController.js +1 -1
  519. package/src/renderers/webxr/WebXRManager.js +2 -1
  520. package/src/textures/DepthTexture.js +6 -10
  521. package/src/textures/Source.js +22 -0
  522. package/src/textures/Texture.js +118 -1
  523. package/src/textures/VideoTexture.js +1 -1
  524. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  525. package/src/core/RenderTargetArray.js +0 -40
  526. package/src/nodes/utils/EquirectUVNode.js +0 -65
  527. package/src/nodes/utils/MatcapUVNode.js +0 -49
  528. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -154,10 +154,28 @@ class ReflectorNode extends TextureNode {
154
154
 
155
155
  clone() {
156
156
 
157
- const texture = new this.constructor( this.reflectorNode );
158
- texture._reflectorBaseNode = this._reflectorBaseNode;
157
+ const newNode = new this.constructor( this.reflectorNode );
158
+ newNode.uvNode = this.uvNode;
159
+ newNode.levelNode = this.levelNode;
160
+ newNode.biasNode = this.biasNode;
161
+ newNode.sampler = this.sampler;
162
+ newNode.depthNode = this.depthNode;
163
+ newNode.compareNode = this.compareNode;
164
+ newNode.gradNode = this.gradNode;
165
+ newNode._reflectorBaseNode = this._reflectorBaseNode;
166
+
167
+ return newNode;
159
168
 
160
- return texture;
169
+ }
170
+
171
+ /**
172
+ * Frees internal resources. Should be called when the node is no longer in use.
173
+ */
174
+ dispose() {
175
+
176
+ super.dispose();
177
+
178
+ this._reflectorBaseNode.dispose();
161
179
 
162
180
  }
163
181
 
@@ -269,9 +287,9 @@ class ReflectorBaseNode extends Node {
269
287
  /**
270
288
  * Weak map for managing render targets.
271
289
  *
272
- * @type {WeakMap<Camera, RenderTarget>}
290
+ * @type {Map<Camera, RenderTarget>}
273
291
  */
274
- this.renderTargets = new WeakMap();
292
+ this.renderTargets = new Map();
275
293
 
276
294
  /**
277
295
  * Force render even if reflector is facing away from camera.
@@ -281,6 +299,17 @@ class ReflectorBaseNode extends Node {
281
299
  */
282
300
  this.forceUpdate = false;
283
301
 
302
+ /**
303
+ * Whether the reflector has been rendered or not.
304
+ *
305
+ * When the reflector is facing away from the camera,
306
+ * this flag is set to `false` and the texture will be empty(black).
307
+ *
308
+ * @type {boolean}
309
+ * @default {false}
310
+ */
311
+ this.hasOutput = false;
312
+
284
313
  }
285
314
 
286
315
  /**
@@ -308,6 +337,21 @@ class ReflectorBaseNode extends Node {
308
337
 
309
338
  }
310
339
 
340
+ /**
341
+ * Frees internal resources. Should be called when the node is no longer in use.
342
+ */
343
+ dispose() {
344
+
345
+ super.dispose();
346
+
347
+ for ( const renderTarget of this.renderTargets.values() ) {
348
+
349
+ renderTarget.dispose();
350
+
351
+ }
352
+
353
+ }
354
+
311
355
  /**
312
356
  * Returns a virtual camera for the given camera. The virtual camera is used to
313
357
  * render the scene from the reflector's view so correct reflections can be produced.
@@ -398,7 +442,21 @@ class ReflectorBaseNode extends Node {
398
442
  // Avoid rendering when reflector is facing away unless forcing an update
399
443
  const isFacingAway = _view.dot( _normal ) > 0;
400
444
 
401
- if ( isFacingAway === true && this.forceUpdate === false ) return;
445
+ let needsClear = false;
446
+
447
+ if ( isFacingAway === true && this.forceUpdate === false ) {
448
+
449
+ if ( this.hasOutput === false ) {
450
+
451
+ _inReflector = false;
452
+
453
+ return;
454
+
455
+ }
456
+
457
+ needsClear = true;
458
+
459
+ }
402
460
 
403
461
  _view.reflect( _normal ).negate();
404
462
  _view.add( _reflectorWorldPosition );
@@ -473,7 +531,19 @@ class ReflectorBaseNode extends Node {
473
531
  renderer.setRenderTarget( renderTarget );
474
532
  renderer.autoClear = true;
475
533
 
476
- renderer.render( scene, virtualCamera );
534
+ if ( needsClear ) {
535
+
536
+ renderer.clear();
537
+
538
+ this.hasOutput = false;
539
+
540
+ } else {
541
+
542
+ renderer.render( scene, virtualCamera );
543
+
544
+ this.hasOutput = true;
545
+
546
+ }
477
547
 
478
548
  renderer.setMRT( currentMRT );
479
549
  renderer.setRenderTarget( currentRenderTarget );
@@ -0,0 +1,81 @@
1
+ import Node from '../core/Node.js';
2
+ import { uv } from '../accessors/UV.js';
3
+ import { nodeObject } from '../tsl/TSLCore.js';
4
+
5
+ /**
6
+ * Class representing a node that samples a value using a provided callback function.
7
+ *
8
+ * @extends Node
9
+ */
10
+ class SampleNode extends Node {
11
+
12
+ /**
13
+ * Returns the type of the node.
14
+ *
15
+ * @type {string}
16
+ * @readonly
17
+ * @static
18
+ */
19
+ static get type() {
20
+
21
+ return 'SampleNode';
22
+
23
+ }
24
+
25
+ /**
26
+ * Creates an instance of SampleNode.
27
+ *
28
+ * @param {Function} callback - The function to be called when sampling. Should accept a UV node and return a value.
29
+ */
30
+ constructor( callback ) {
31
+
32
+ super();
33
+
34
+ this.callback = callback;
35
+
36
+ /**
37
+ * This flag can be used for type testing.
38
+ *
39
+ * @type {boolean}
40
+ * @readonly
41
+ * @default true
42
+ */
43
+ this.isSampleNode = true;
44
+
45
+ }
46
+
47
+ /**
48
+ * Sets up the node by sampling with the default UV accessor.
49
+ *
50
+ * @returns {Node} The result of the callback function when called with the UV node.
51
+ */
52
+ setup() {
53
+
54
+ return this.sample( uv() );
55
+
56
+ }
57
+
58
+ /**
59
+ * Calls the callback function with the provided UV node.
60
+ *
61
+ * @param {Node<vec2>} uv - The UV node or value to be passed to the callback.
62
+ * @returns {Node} The result of the callback function.
63
+ */
64
+ sample( uv ) {
65
+
66
+ return this.callback( uv );
67
+
68
+ }
69
+
70
+ }
71
+
72
+ export default SampleNode;
73
+
74
+ /**
75
+ * Helper function to create a SampleNode wrapped as a node object.
76
+ *
77
+ * @function
78
+ * @param {Function} callback - The function to be called when sampling. Should accept a UV node and return a value.
79
+ * @returns {SampleNode} The created SampleNode instance wrapped as a node object.
80
+ */
81
+ export const sample = ( callback ) => nodeObject( new SampleNode( callback ) );
@@ -0,0 +1,65 @@
1
+ import { add } from '../math/OperatorNode.js';
2
+ import { normalLocal } from '../accessors/Normal.js';
3
+ import { positionLocal } from '../accessors/Position.js';
4
+ import { texture } from '../accessors/TextureNode.js';
5
+ import { float, vec3, Fn } from '../tsl/TSLBase.js';
6
+
7
+ /**
8
+ * TSL function for creating a triplanar textures node.
9
+ *
10
+ * Can be used for triplanar texture mapping.
11
+ *
12
+ * ```js
13
+ * material.colorNode = triplanarTexture( texture( diffuseMap ) );
14
+ * ```
15
+ *
16
+ * @tsl
17
+ * @function
18
+ * @param {Node} textureXNode - First texture node.
19
+ * @param {?Node} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
20
+ * @param {?Node} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
21
+ * @param {?Node<float>} [scaleNode=float(1)] - The scale node.
22
+ * @param {?Node<vec3>} [positionNode=positionLocal] - Vertex positions in local space.
23
+ * @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.
24
+ * @returns {Node<vec4>}
25
+ */
26
+ export const triplanarTextures = /*@__PURE__*/ Fn( ( [ textureXNode, textureYNode = null, textureZNode = null, scaleNode = float( 1 ), positionNode = positionLocal, normalNode = normalLocal ] ) => {
27
+
28
+ // Reference: https://github.com/keijiro/StandardTriplanar
29
+
30
+ // Blending factor of triplanar mapping
31
+ let bf = normalNode.abs().normalize();
32
+ bf = bf.div( bf.dot( vec3( 1.0 ) ) );
33
+
34
+ // Triplanar mapping
35
+ const tx = positionNode.yz.mul( scaleNode );
36
+ const ty = positionNode.zx.mul( scaleNode );
37
+ const tz = positionNode.xy.mul( scaleNode );
38
+
39
+ // Base color
40
+ const textureX = textureXNode.value;
41
+ const textureY = textureYNode !== null ? textureYNode.value : textureX;
42
+ const textureZ = textureZNode !== null ? textureZNode.value : textureX;
43
+
44
+ const cx = texture( textureX, tx ).mul( bf.x );
45
+ const cy = texture( textureY, ty ).mul( bf.y );
46
+ const cz = texture( textureZ, tz ).mul( bf.z );
47
+
48
+ return add( cx, cy, cz );
49
+
50
+ } );
51
+
52
+ /**
53
+ * TSL function for creating a triplanar textures node.
54
+ *
55
+ * @tsl
56
+ * @function
57
+ * @param {Node} textureXNode - First texture node.
58
+ * @param {?Node} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
59
+ * @param {?Node} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
60
+ * @param {?Node<float>} [scaleNode=float(1)] - The scale node.
61
+ * @param {?Node<vec3>} [positionNode=positionLocal] - Vertex positions in local space.
62
+ * @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.
63
+ * @returns {Node<vec4>}
64
+ */
65
+ export const triplanarTexture = ( ...params ) => triplanarTextures( ...params );
@@ -10,6 +10,7 @@ import { Sphere } from '../math/Sphere.js';
10
10
  import { Frustum } from '../math/Frustum.js';
11
11
  import { Vector3 } from '../math/Vector3.js';
12
12
  import { Color } from '../math/Color.js';
13
+ import { FrustumArray } from '../math/FrustumArray.js';
13
14
 
14
15
  function ascIdSort( a, b ) {
15
16
 
@@ -79,6 +80,7 @@ class MultiDrawRenderList {
79
80
  const _matrix = /*@__PURE__*/ new Matrix4();
80
81
  const _whiteColor = /*@__PURE__*/ new Color( 1, 1, 1 );
81
82
  const _frustum = /*@__PURE__*/ new Frustum();
83
+ const _frustumArray = /*@__PURE__*/ new FrustumArray();
82
84
  const _box = /*@__PURE__*/ new Box3();
83
85
  const _sphere = /*@__PURE__*/ new Sphere();
84
86
  const _vector = /*@__PURE__*/ new Vector3();
@@ -1441,15 +1443,24 @@ class BatchedMesh extends Mesh {
1441
1443
  } ) );
1442
1444
  this._instanceInfo = source._instanceInfo.map( info => ( { ...info } ) );
1443
1445
 
1446
+ this._availableInstanceIds = source._availableInstanceIds.slice();
1447
+ this._availableGeometryIds = source._availableGeometryIds.slice();
1448
+
1449
+ this._nextIndexStart = source._nextIndexStart;
1450
+ this._nextVertexStart = source._nextVertexStart;
1451
+ this._geometryCount = source._geometryCount;
1452
+
1444
1453
  this._maxInstanceCount = source._maxInstanceCount;
1445
1454
  this._maxVertexCount = source._maxVertexCount;
1446
1455
  this._maxIndexCount = source._maxIndexCount;
1447
1456
 
1448
1457
  this._geometryInitialized = source._geometryInitialized;
1449
- this._geometryCount = source._geometryCount;
1450
1458
  this._multiDrawCounts = source._multiDrawCounts.slice();
1451
1459
  this._multiDrawStarts = source._multiDrawStarts.slice();
1452
1460
 
1461
+ this._indirectTexture = source._indirectTexture.clone();
1462
+ this._indirectTexture.image.data = this._indirectTexture.image.data.slice();
1463
+
1453
1464
  this._matricesTexture = source._matricesTexture.clone();
1454
1465
  this._matricesTexture.image.data = this._matricesTexture.image.data.slice();
1455
1466
 
@@ -1511,8 +1522,9 @@ class BatchedMesh extends Mesh {
1511
1522
  const indirectTexture = this._indirectTexture;
1512
1523
  const indirectArray = indirectTexture.image.data;
1513
1524
 
1525
+ const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
1514
1526
  // prepare the frustum in the local frame
1515
- if ( perObjectFrustumCulled ) {
1527
+ if ( perObjectFrustumCulled && ! camera.isArrayCamera ) {
1516
1528
 
1517
1529
  _matrix
1518
1530
  .multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse )
@@ -1546,7 +1558,7 @@ class BatchedMesh extends Mesh {
1546
1558
  let culled = false;
1547
1559
  if ( perObjectFrustumCulled ) {
1548
1560
 
1549
- culled = ! _frustum.intersectsSphere( _sphere );
1561
+ culled = ! frustum.intersectsSphere( _sphere, camera );
1550
1562
 
1551
1563
  }
1552
1564
 
@@ -1603,7 +1615,7 @@ class BatchedMesh extends Mesh {
1603
1615
  // get the bounds in world space
1604
1616
  this.getMatrixAt( i, _matrix );
1605
1617
  this.getBoundingSphereAt( geometryId, _sphere ).applyMatrix4( _matrix );
1606
- culled = ! _frustum.intersectsSphere( _sphere );
1618
+ culled = ! frustum.intersectsSphere( _sphere, camera );
1607
1619
 
1608
1620
  }
1609
1621
 
@@ -94,6 +94,15 @@ class Mesh extends Object3D {
94
94
  */
95
95
  this.morphTargetInfluences = undefined;
96
96
 
97
+ /**
98
+ * The number of instances of this mesh.
99
+ * Can only be used with {@link WebGPURenderer}.
100
+ *
101
+ * @type {number}
102
+ * @default 1
103
+ */
104
+ this.count = 1;
105
+
97
106
  this.updateMorphTargets();
98
107
 
99
108
  }
@@ -350,7 +350,7 @@ class Skeleton {
350
350
 
351
351
  const data = {
352
352
  metadata: {
353
- version: 4.6,
353
+ version: 4.7,
354
354
  type: 'Skeleton',
355
355
  generator: 'Skeleton.toJSON'
356
356
  },
@@ -108,6 +108,15 @@ class Sprite extends Object3D {
108
108
  */
109
109
  this.center = new Vector2( 0.5, 0.5 );
110
110
 
111
+ /**
112
+ * The number of instances of this sprite.
113
+ * Can only be used with {@link WebGPURenderer}.
114
+ *
115
+ * @type {number}
116
+ * @default 1
117
+ */
118
+ this.count = 1;
119
+
111
120
  }
112
121
 
113
122
  /**
@@ -37,6 +37,7 @@ class WebGL3DRenderTarget extends WebGLRenderTarget {
37
37
  * @type {Data3DTexture}
38
38
  */
39
39
  this.texture = new Data3DTexture( null, width, height, depth );
40
+ this._setTextureOptions( options );
40
41
 
41
42
  this.texture.isRenderTargetTexture = true;
42
43
 
@@ -37,6 +37,7 @@ class WebGLArrayRenderTarget extends WebGLRenderTarget {
37
37
  * @type {DataArrayTexture}
38
38
  */
39
39
  this.texture = new DataArrayTexture( null, width, height, depth );
40
+ this._setTextureOptions( options );
40
41
 
41
42
  this.texture.isRenderTargetTexture = true;
42
43
 
@@ -41,7 +41,8 @@ class WebGLCubeRenderTarget extends WebGLRenderTarget {
41
41
  *
42
42
  * @type {DataArrayTexture}
43
43
  */
44
- this.texture = new CubeTexture( images, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace );
44
+ this.texture = new CubeTexture( images );
45
+ this._setTextureOptions( options );
45
46
 
46
47
  // By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)
47
48
  // in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,
@@ -53,9 +54,6 @@ class WebGLCubeRenderTarget extends WebGLRenderTarget {
53
54
 
54
55
  this.texture.isRenderTargetTexture = true;
55
56
 
56
- this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;
57
- this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;
58
-
59
57
  }
60
58
 
61
59
  /**
@@ -1297,7 +1297,7 @@ class WebGLRenderer {
1297
1297
  * @param {Object3D} scene - The scene or another type of 3D object to precompile.
1298
1298
  * @param {Camera} camera - The camera.
1299
1299
  * @param {?Scene} [targetScene=null] - The target scene.
1300
- * @return {?Set} The precompiled materials.
1300
+ * @return {Set<Material>} The precompiled materials.
1301
1301
  */
1302
1302
  this.compile = function ( scene, camera, targetScene = null ) {
1303
1303
 
@@ -1890,6 +1890,9 @@ class WebGLRenderer {
1890
1890
  //
1891
1891
 
1892
1892
  const currentRenderTarget = _this.getRenderTarget();
1893
+ const currentActiveCubeFace = _this.getActiveCubeFace();
1894
+ const currentActiveMipmapLevel = _this.getActiveMipmapLevel();
1895
+
1893
1896
  _this.setRenderTarget( transmissionRenderTarget );
1894
1897
 
1895
1898
  _this.getClearColor( _currentClearColor );
@@ -1959,7 +1962,7 @@ class WebGLRenderer {
1959
1962
 
1960
1963
  }
1961
1964
 
1962
- _this.setRenderTarget( currentRenderTarget );
1965
+ _this.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel );
1963
1966
 
1964
1967
  _this.setClearColor( _currentClearColor, _currentClearAlpha );
1965
1968
 
@@ -2858,8 +2861,9 @@ class WebGLRenderer {
2858
2861
  * @param {number} height - The height of the copy region.
2859
2862
  * @param {TypedArray} buffer - The result buffer.
2860
2863
  * @param {number} [activeCubeFaceIndex] - The active cube face index.
2864
+ * @param {number} [textureIndex=0] - The texture index of an MRT render target.
2861
2865
  */
2862
- this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {
2866
+ this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex, textureIndex = 0 ) {
2863
2867
 
2864
2868
  if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
2865
2869
 
@@ -2882,7 +2886,7 @@ class WebGLRenderer {
2882
2886
 
2883
2887
  try {
2884
2888
 
2885
- const texture = renderTarget.texture;
2889
+ const texture = renderTarget.textures[ textureIndex ];
2886
2890
  const textureFormat = texture.format;
2887
2891
  const textureType = texture.type;
2888
2892
 
@@ -2904,6 +2908,10 @@ class WebGLRenderer {
2904
2908
 
2905
2909
  if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {
2906
2910
 
2911
+ // when using MRT, select the correct color buffer for the subsequent read command
2912
+
2913
+ if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
2914
+
2907
2915
  _gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );
2908
2916
 
2909
2917
  }
@@ -2934,9 +2942,10 @@ class WebGLRenderer {
2934
2942
  * @param {number} height - The height of the copy region.
2935
2943
  * @param {TypedArray} buffer - The result buffer.
2936
2944
  * @param {number} [activeCubeFaceIndex] - The active cube face index.
2945
+ * @param {number} [textureIndex=0] - The texture index of an MRT render target.
2937
2946
  * @return {Promise<TypedArray>} A Promise that resolves when the read has been finished. The resolve provides the read data as a typed array.
2938
2947
  */
2939
- this.readRenderTargetPixelsAsync = async function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {
2948
+ this.readRenderTargetPixelsAsync = async function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex, textureIndex = 0 ) {
2940
2949
 
2941
2950
  if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
2942
2951
 
@@ -2959,7 +2968,7 @@ class WebGLRenderer {
2959
2968
  // set the active frame buffer to the one we want to read
2960
2969
  state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
2961
2970
 
2962
- const texture = renderTarget.texture;
2971
+ const texture = renderTarget.textures[ textureIndex ];
2963
2972
  const textureFormat = texture.format;
2964
2973
  const textureType = texture.type;
2965
2974
 
@@ -2978,6 +2987,11 @@ class WebGLRenderer {
2978
2987
  const glBuffer = _gl.createBuffer();
2979
2988
  _gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );
2980
2989
  _gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );
2990
+
2991
+ // when using MRT, select the corect color buffer for the subsequent read command
2992
+
2993
+ if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
2994
+
2981
2995
  _gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), 0 );
2982
2996
 
2983
2997
  // reset the frame buffer to the currently set buffer before waiting
@@ -3013,7 +3027,7 @@ class WebGLRenderer {
3013
3027
  * Copies pixels from the current bound framebuffer into the given texture.
3014
3028
  *
3015
3029
  * @param {FramebufferTexture} texture - The texture.
3016
- * @param {Vector2} position - The start position of the copy operation.
3030
+ * @param {?Vector2} [position=null] - The start position of the copy operation.
3017
3031
  * @param {number} [level=0] - The mip level. The default represents the base mip.
3018
3032
  */
3019
3033
  this.copyFramebufferToTexture = function ( texture, position = null, level = 0 ) {
@@ -3044,10 +3058,10 @@ class WebGLRenderer {
3044
3058
  *
3045
3059
  * @param {Texture} srcTexture - The source texture.
3046
3060
  * @param {Texture} dstTexture - The destination texture.
3047
- * @param {Box2|Box3} [srcRegion=null] - A bounding box which describes the source region. Can be two or three-dimensional.
3048
- * @param {Vector2|Vector3} [dstPosition=null] - A vector that represents the origin of the destination region. Can be two or three-dimensional.
3049
- * @param {number} srcLevel - The source mipmap level to copy.
3050
- * @param {number} dstLevel - The destination mipmap level.
3061
+ * @param {?(Box2|Box3)} [srcRegion=null] - A bounding box which describes the source region. Can be two or three-dimensional.
3062
+ * @param {?(Vector2|Vector3)} [dstPosition=null] - A vector that represents the origin of the destination region. Can be two or three-dimensional.
3063
+ * @param {number} [srcLevel=0] - The source mipmap level to copy.
3064
+ * @param {?number} [dstLevel=null] - The destination mipmap level.
3051
3065
  */
3052
3066
  this.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = null ) {
3053
3067
 
@@ -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();
@@ -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';
@@ -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;