super-three 0.173.4 → 0.175.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (832) hide show
  1. package/build/three.cjs +22198 -1564
  2. package/build/three.core.js +21287 -1346
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +882 -189
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +8 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +19358 -17482
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +19342 -17482
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +144 -42
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +194 -71
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +74 -30
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +51 -5
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +36 -1
  94. package/examples/jsm/loaders/DDSLoader.js +25 -1
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +71 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +222 -9
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +87 -19
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +56 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +90 -70
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +105 -13
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +109 -73
  162. package/examples/jsm/misc/VolumeSlice.js +91 -48
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +75 -2
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +134 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +268 -134
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/AST.js +10 -0
  273. package/examples/jsm/transpiler/GLSLDecoder.js +17 -3
  274. package/examples/jsm/transpiler/TSLEncoder.js +83 -15
  275. package/examples/jsm/transpiler/Transpiler.js +31 -0
  276. package/examples/jsm/tsl/display/AfterImageNode.js +24 -25
  277. package/examples/jsm/tsl/display/AnaglyphPassNode.js +2 -3
  278. package/examples/jsm/tsl/display/AnamorphicNode.js +8 -9
  279. package/examples/jsm/tsl/display/BleachBypass.js +1 -2
  280. package/examples/jsm/tsl/display/BloomNode.js +15 -16
  281. package/examples/jsm/tsl/display/DenoiseNode.js +9 -10
  282. package/examples/jsm/tsl/display/DepthOfFieldNode.js +5 -6
  283. package/examples/jsm/tsl/display/DotScreenNode.js +5 -6
  284. package/examples/jsm/tsl/display/FXAANode.js +2 -3
  285. package/examples/jsm/tsl/display/FilmNode.js +9 -8
  286. package/examples/jsm/tsl/display/GTAONode.js +11 -12
  287. package/examples/jsm/tsl/display/GaussianBlurNode.js +14 -14
  288. package/examples/jsm/tsl/display/LensflareNode.js +15 -16
  289. package/examples/jsm/tsl/display/Lut3DNode.js +4 -5
  290. package/examples/jsm/tsl/display/MotionBlur.js +1 -2
  291. package/examples/jsm/tsl/display/OutlineNode.js +7 -8
  292. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -3
  293. package/examples/jsm/tsl/display/PixelationPassNode.js +14 -15
  294. package/examples/jsm/tsl/display/RGBShiftNode.js +5 -6
  295. package/examples/jsm/tsl/display/SMAANode.js +13 -7
  296. package/examples/jsm/tsl/display/SSAAPassNode.js +7 -7
  297. package/examples/jsm/tsl/display/SSRNode.js +6 -7
  298. package/examples/jsm/tsl/display/Sepia.js +1 -2
  299. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -3
  300. package/examples/jsm/tsl/display/StereoCompositePassNode.js +4 -4
  301. package/examples/jsm/tsl/display/StereoPassNode.js +2 -3
  302. package/examples/jsm/tsl/display/TRAAPassNode.js +11 -10
  303. package/examples/jsm/tsl/display/TransitionNode.js +4 -5
  304. package/examples/jsm/tsl/display/hashBlur.js +1 -2
  305. package/examples/jsm/tsl/lighting/TiledLightsNode.js +33 -7
  306. package/examples/jsm/tsl/math/Bayer.js +31 -0
  307. package/examples/jsm/tsl/utils/Raymarching.js +67 -0
  308. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  309. package/examples/jsm/utils/CameraUtils.js +10 -7
  310. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  311. package/examples/jsm/utils/GeometryUtils.js +12 -13
  312. package/examples/jsm/utils/LDrawUtils.js +11 -4
  313. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  314. package/examples/jsm/utils/SceneUtils.js +50 -3
  315. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  316. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  317. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  318. package/examples/jsm/utils/SortUtils.js +14 -5
  319. package/examples/jsm/utils/UVsDebug.js +9 -4
  320. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  321. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  322. package/examples/jsm/utils/WorkerPool.js +65 -2
  323. package/examples/jsm/webxr/ARButton.js +18 -0
  324. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  325. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  326. package/examples/jsm/webxr/Text2D.js +11 -0
  327. package/examples/jsm/webxr/VRButton.js +30 -0
  328. package/examples/jsm/webxr/XRButton.js +22 -0
  329. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  330. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  331. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  332. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  333. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  334. package/examples/jsm/webxr/XRPlanes.js +17 -0
  335. package/package.json +3 -4
  336. package/src/Three.TSL.js +7 -1
  337. package/src/animation/AnimationAction.js +262 -30
  338. package/src/animation/AnimationClip.js +141 -2
  339. package/src/animation/AnimationMixer.js +99 -15
  340. package/src/animation/AnimationObjectGroup.js +41 -18
  341. package/src/animation/AnimationUtils.js +169 -19
  342. package/src/animation/KeyframeTrack.js +144 -10
  343. package/src/animation/PropertyBinding.js +77 -3
  344. package/src/animation/PropertyMixer.js +72 -5
  345. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  346. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  347. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  348. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  350. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  351. package/src/audio/Audio.js +339 -0
  352. package/src/audio/AudioAnalyser.js +58 -1
  353. package/src/audio/AudioContext.js +15 -0
  354. package/src/audio/AudioListener.js +76 -0
  355. package/src/audio/PositionalAudio.js +107 -0
  356. package/src/cameras/ArrayCamera.js +28 -0
  357. package/src/cameras/Camera.js +47 -0
  358. package/src/cameras/CubeCamera.js +66 -0
  359. package/src/cameras/OrthographicCamera.js +109 -0
  360. package/src/cameras/PerspectiveCamera.js +163 -40
  361. package/src/cameras/StereoCamera.js +46 -0
  362. package/src/constants.js +1429 -5
  363. package/src/core/BufferAttribute.js +413 -3
  364. package/src/core/BufferGeometry.js +337 -1
  365. package/src/core/Clock.js +60 -0
  366. package/src/core/EventDispatcher.js +44 -2
  367. package/src/core/GLBufferAttribute.js +99 -0
  368. package/src/core/InstancedBufferAttribute.js +29 -0
  369. package/src/core/InstancedBufferGeometry.js +20 -0
  370. package/src/core/InstancedInterleavedBuffer.js +26 -0
  371. package/src/core/InterleavedBuffer.js +137 -3
  372. package/src/core/InterleavedBufferAttribute.js +197 -0
  373. package/src/core/Layers.js +71 -10
  374. package/src/core/Object3D.js +593 -0
  375. package/src/core/Raycaster.js +134 -1
  376. package/src/core/RenderTarget.js +170 -11
  377. package/src/core/RenderTarget3D.js +25 -0
  378. package/src/core/RenderTargetArray.js +18 -0
  379. package/src/core/Uniform.js +29 -0
  380. package/src/core/UniformsGroup.js +84 -2
  381. package/src/extras/Controls.js +88 -1
  382. package/src/extras/DataUtils.js +48 -8
  383. package/src/extras/Earcut.js +13 -780
  384. package/src/extras/ImageUtils.js +20 -2
  385. package/src/extras/PMREMGenerator.js +41 -25
  386. package/src/extras/ShapeUtils.js +24 -2
  387. package/src/extras/TextureUtils.js +95 -15
  388. package/src/extras/core/Curve.js +150 -50
  389. package/src/extras/core/CurvePath.js +63 -22
  390. package/src/extras/core/Interpolations.js +29 -3
  391. package/src/extras/core/Path.js +134 -1
  392. package/src/extras/core/Shape.js +63 -0
  393. package/src/extras/core/ShapePath.js +76 -0
  394. package/src/extras/curves/ArcCurve.js +22 -0
  395. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  396. package/src/extras/curves/CubicBezierCurve.js +67 -0
  397. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  398. package/src/extras/curves/EllipseCurve.js +102 -0
  399. package/src/extras/curves/LineCurve.js +36 -0
  400. package/src/extras/curves/LineCurve3.js +36 -0
  401. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  402. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  403. package/src/extras/curves/SplineCurve.js +48 -0
  404. package/src/extras/lib/earcut.js +685 -0
  405. package/src/geometries/BoxGeometry.js +38 -0
  406. package/src/geometries/CapsuleGeometry.js +34 -0
  407. package/src/geometries/CircleGeometry.js +40 -0
  408. package/src/geometries/ConeGeometry.js +38 -0
  409. package/src/geometries/CylinderGeometry.js +39 -0
  410. package/src/geometries/DodecahedronGeometry.js +32 -0
  411. package/src/geometries/EdgesGeometry.js +28 -0
  412. package/src/geometries/ExtrudeGeometry.js +112 -28
  413. package/src/geometries/IcosahedronGeometry.js +32 -0
  414. package/src/geometries/LatheGeometry.js +40 -0
  415. package/src/geometries/OctahedronGeometry.js +32 -0
  416. package/src/geometries/PlaneGeometry.js +34 -0
  417. package/src/geometries/PolyhedronGeometry.js +29 -0
  418. package/src/geometries/RingGeometry.js +36 -0
  419. package/src/geometries/ShapeGeometry.js +37 -0
  420. package/src/geometries/SphereGeometry.js +37 -0
  421. package/src/geometries/TetrahedronGeometry.js +32 -0
  422. package/src/geometries/TorusGeometry.js +35 -0
  423. package/src/geometries/TorusKnotGeometry.js +38 -0
  424. package/src/geometries/TubeGeometry.js +49 -0
  425. package/src/geometries/WireframeGeometry.js +32 -0
  426. package/src/helpers/ArrowHelper.js +60 -3
  427. package/src/helpers/AxesHelper.js +28 -0
  428. package/src/helpers/Box3Helper.js +28 -0
  429. package/src/helpers/BoxHelper.js +43 -7
  430. package/src/helpers/CameraHelper.js +45 -5
  431. package/src/helpers/DirectionalLightHelper.js +52 -0
  432. package/src/helpers/GridHelper.js +26 -0
  433. package/src/helpers/HemisphereLightHelper.js +39 -0
  434. package/src/helpers/PlaneHelper.js +33 -0
  435. package/src/helpers/PointLightHelper.js +43 -0
  436. package/src/helpers/PolarGridHelper.js +30 -0
  437. package/src/helpers/SkeletonHelper.js +39 -2
  438. package/src/helpers/SpotLightHelper.js +40 -0
  439. package/src/lights/AmbientLight.js +25 -0
  440. package/src/lights/DirectionalLight.js +57 -0
  441. package/src/lights/DirectionalLightShadow.js +15 -0
  442. package/src/lights/HemisphereLight.js +32 -0
  443. package/src/lights/Light.js +36 -0
  444. package/src/lights/LightProbe.js +43 -0
  445. package/src/lights/LightShadow.js +159 -0
  446. package/src/lights/PointLight.js +59 -0
  447. package/src/lights/PointLightShadow.js +21 -0
  448. package/src/lights/RectAreaLight.js +59 -0
  449. package/src/lights/SpotLight.js +102 -0
  450. package/src/lights/SpotLightShadow.js +22 -0
  451. package/src/lights/webgpu/IESSpotLight.js +21 -0
  452. package/src/loaders/AnimationLoader.js +31 -0
  453. package/src/loaders/AudioLoader.js +31 -0
  454. package/src/loaders/BufferGeometryLoader.js +34 -0
  455. package/src/loaders/Cache.js +45 -0
  456. package/src/loaders/CompressedTextureLoader.js +36 -3
  457. package/src/loaders/CubeTextureLoader.js +45 -0
  458. package/src/loaders/DataTextureLoader.js +44 -3
  459. package/src/loaders/FileLoader.js +57 -1
  460. package/src/loaders/ImageBitmapLoader.js +57 -0
  461. package/src/loaders/ImageLoader.js +30 -0
  462. package/src/loaders/Loader.js +130 -0
  463. package/src/loaders/LoaderUtils.js +18 -36
  464. package/src/loaders/LoadingManager.js +142 -0
  465. package/src/loaders/MaterialLoader.js +57 -0
  466. package/src/loaders/ObjectLoader.js +53 -0
  467. package/src/loaders/TextureLoader.js +33 -0
  468. package/src/loaders/nodes/NodeLoader.js +13 -9
  469. package/src/loaders/nodes/NodeMaterialLoader.js +6 -6
  470. package/src/loaders/nodes/NodeObjectLoader.js +12 -12
  471. package/src/materials/LineBasicMaterial.js +74 -1
  472. package/src/materials/LineDashedMaterial.js +52 -0
  473. package/src/materials/Material.js +481 -4
  474. package/src/materials/MeshBasicMaterial.js +165 -0
  475. package/src/materials/MeshDepthMaterial.js +93 -0
  476. package/src/materials/MeshDistanceMaterial.js +76 -0
  477. package/src/materials/MeshLambertMaterial.js +273 -0
  478. package/src/materials/MeshMatcapMaterial.js +142 -0
  479. package/src/materials/MeshNormalMaterial.js +113 -0
  480. package/src/materials/MeshPhongMaterial.js +288 -0
  481. package/src/materials/MeshPhysicalMaterial.js +292 -1
  482. package/src/materials/MeshStandardMaterial.js +297 -0
  483. package/src/materials/MeshToonMaterial.js +218 -0
  484. package/src/materials/PointsMaterial.js +89 -0
  485. package/src/materials/RawShaderMaterial.js +25 -0
  486. package/src/materials/ShaderMaterial.js +215 -6
  487. package/src/materials/ShadowMaterial.js +54 -0
  488. package/src/materials/SpriteMaterial.js +82 -0
  489. package/src/materials/nodes/Line2NodeMaterial.js +14 -14
  490. package/src/materials/nodes/LineBasicNodeMaterial.js +3 -3
  491. package/src/materials/nodes/LineDashedNodeMaterial.js +12 -12
  492. package/src/materials/nodes/MeshBasicNodeMaterial.js +7 -7
  493. package/src/materials/nodes/MeshLambertNodeMaterial.js +5 -5
  494. package/src/materials/nodes/MeshMatcapNodeMaterial.js +3 -3
  495. package/src/materials/nodes/MeshNormalNodeMaterial.js +8 -4
  496. package/src/materials/nodes/MeshPhongNodeMaterial.js +9 -9
  497. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +43 -43
  498. package/src/materials/nodes/MeshSSSNodeMaterial.js +18 -21
  499. package/src/materials/nodes/MeshStandardNodeMaterial.js +11 -11
  500. package/src/materials/nodes/MeshToonNodeMaterial.js +4 -4
  501. package/src/materials/nodes/NodeMaterial.js +66 -47
  502. package/src/materials/nodes/PointsNodeMaterial.js +6 -6
  503. package/src/materials/nodes/ShadowNodeMaterial.js +13 -4
  504. package/src/materials/nodes/SpriteNodeMaterial.js +17 -9
  505. package/src/materials/nodes/VolumeNodeMaterial.js +25 -128
  506. package/src/materials/nodes/manager/NodeMaterialObserver.js +8 -8
  507. package/src/math/Box2.js +177 -0
  508. package/src/math/Box3.js +243 -0
  509. package/src/math/Color.js +343 -0
  510. package/src/math/Cylindrical.js +65 -6
  511. package/src/math/Euler.js +137 -4
  512. package/src/math/Frustum.js +83 -0
  513. package/src/math/Interpolant.js +87 -8
  514. package/src/math/Line3.js +94 -0
  515. package/src/math/MathUtils.js +405 -19
  516. package/src/math/Matrix2.js +70 -0
  517. package/src/math/Matrix3.js +229 -4
  518. package/src/math/Matrix4.js +368 -3
  519. package/src/math/Plane.js +164 -2
  520. package/src/math/Quaternion.js +262 -6
  521. package/src/math/Ray.js +160 -0
  522. package/src/math/Sphere.js +147 -0
  523. package/src/math/Spherical.js +70 -8
  524. package/src/math/SphericalHarmonics3.js +112 -14
  525. package/src/math/Triangle.js +206 -2
  526. package/src/math/Vector2.js +388 -2
  527. package/src/math/Vector3.js +541 -4
  528. package/src/math/Vector4.js +393 -0
  529. package/src/math/interpolants/CubicInterpolant.js +10 -1
  530. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  531. package/src/math/interpolants/LinearInterpolant.js +13 -0
  532. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  533. package/src/nodes/Nodes.js +1 -0
  534. package/src/nodes/TSL.js +1 -0
  535. package/src/nodes/accessors/AccessorsUtils.js +4 -2
  536. package/src/nodes/accessors/Arrays.js +6 -6
  537. package/src/nodes/accessors/BatchNode.js +10 -11
  538. package/src/nodes/accessors/Bitangent.js +6 -2
  539. package/src/nodes/accessors/BufferAttributeNode.js +33 -31
  540. package/src/nodes/accessors/BufferNode.js +12 -13
  541. package/src/nodes/accessors/BuiltinNode.js +7 -8
  542. package/src/nodes/accessors/Camera.js +9 -2
  543. package/src/nodes/accessors/ClippingNode.js +4 -4
  544. package/src/nodes/accessors/CubeTextureNode.js +17 -19
  545. package/src/nodes/accessors/InstanceNode.js +10 -11
  546. package/src/nodes/accessors/InstancedMeshNode.js +3 -4
  547. package/src/nodes/accessors/Lights.js +12 -15
  548. package/src/nodes/accessors/MaterialNode.js +45 -9
  549. package/src/nodes/accessors/MaterialProperties.js +51 -2
  550. package/src/nodes/accessors/MaterialReferenceNode.js +11 -12
  551. package/src/nodes/accessors/ModelNode.js +20 -3
  552. package/src/nodes/accessors/ModelViewProjectionNode.js +1 -2
  553. package/src/nodes/accessors/MorphNode.js +29 -26
  554. package/src/nodes/accessors/Normal.js +11 -3
  555. package/src/nodes/accessors/Object3DNode.js +51 -16
  556. package/src/nodes/accessors/PointUVNode.js +2 -3
  557. package/src/nodes/accessors/Position.js +8 -3
  558. package/src/nodes/accessors/ReferenceBaseNode.js +29 -29
  559. package/src/nodes/accessors/ReferenceNode.js +31 -31
  560. package/src/nodes/accessors/ReflectVector.js +4 -2
  561. package/src/nodes/accessors/RendererReferenceNode.js +9 -10
  562. package/src/nodes/accessors/SceneNode.js +5 -4
  563. package/src/nodes/accessors/SkinningNode.js +53 -44
  564. package/src/nodes/accessors/StorageBufferNode.js +24 -24
  565. package/src/nodes/accessors/StorageTextureNode.js +17 -17
  566. package/src/nodes/accessors/Tangent.js +6 -2
  567. package/src/nodes/accessors/Texture3DNode.js +11 -12
  568. package/src/nodes/accessors/TextureBicubic.js +2 -3
  569. package/src/nodes/accessors/TextureNode.js +68 -47
  570. package/src/nodes/accessors/TextureSizeNode.js +5 -6
  571. package/src/nodes/accessors/UV.js +2 -3
  572. package/src/nodes/accessors/UniformArrayNode.js +24 -24
  573. package/src/nodes/accessors/UserDataNode.js +11 -12
  574. package/src/nodes/accessors/VelocityNode.js +4 -5
  575. package/src/nodes/accessors/VertexColorNode.js +7 -8
  576. package/src/nodes/code/CodeNode.js +15 -13
  577. package/src/nodes/code/ExpressionNode.js +8 -9
  578. package/src/nodes/code/FunctionCallNode.js +29 -9
  579. package/src/nodes/code/FunctionNode.js +1 -1
  580. package/src/nodes/code/ScriptableNode.js +27 -28
  581. package/src/nodes/code/ScriptableValueNode.js +11 -12
  582. package/src/nodes/core/ArrayNode.js +29 -12
  583. package/src/nodes/core/AssignNode.js +4 -5
  584. package/src/nodes/core/AttributeNode.js +8 -9
  585. package/src/nodes/core/BypassNode.js +3 -4
  586. package/src/nodes/core/CacheNode.js +5 -6
  587. package/src/nodes/core/ConstNode.js +4 -4
  588. package/src/nodes/core/ContextNode.js +9 -9
  589. package/src/nodes/core/IndexNode.js +8 -4
  590. package/src/nodes/core/InputNode.js +7 -7
  591. package/src/nodes/core/LightingModel.js +17 -17
  592. package/src/nodes/core/MRTNode.js +9 -10
  593. package/src/nodes/core/Node.js +49 -37
  594. package/src/nodes/core/NodeAttribute.js +7 -7
  595. package/src/nodes/core/NodeBuilder.js +248 -175
  596. package/src/nodes/core/NodeCache.js +4 -4
  597. package/src/nodes/core/NodeCode.js +6 -6
  598. package/src/nodes/core/NodeFrame.js +10 -10
  599. package/src/nodes/core/NodeFunction.js +8 -8
  600. package/src/nodes/core/NodeFunctionInput.js +8 -8
  601. package/src/nodes/core/NodeParser.js +1 -1
  602. package/src/nodes/core/NodeUniform.js +7 -7
  603. package/src/nodes/core/NodeUtils.js +22 -24
  604. package/src/nodes/core/NodeVar.js +9 -9
  605. package/src/nodes/core/NodeVarying.js +4 -4
  606. package/src/nodes/core/OutputStructNode.js +2 -3
  607. package/src/nodes/core/ParameterNode.js +6 -7
  608. package/src/nodes/core/PropertyNode.js +41 -13
  609. package/src/nodes/core/StackNode.js +11 -12
  610. package/src/nodes/core/StructNode.js +2 -3
  611. package/src/nodes/core/StructTypeNode.js +10 -6
  612. package/src/nodes/core/TempNode.js +3 -3
  613. package/src/nodes/core/UniformGroupNode.js +15 -12
  614. package/src/nodes/core/UniformNode.js +9 -10
  615. package/src/nodes/core/VarNode.js +14 -18
  616. package/src/nodes/core/VaryingNode.js +10 -10
  617. package/src/nodes/core/constants.js +0 -2
  618. package/src/nodes/display/BlendModes.js +21 -14
  619. package/src/nodes/display/BumpMapNode.js +5 -6
  620. package/src/nodes/display/ColorAdjustment.js +13 -9
  621. package/src/nodes/display/ColorSpaceFunctions.js +4 -4
  622. package/src/nodes/display/ColorSpaceNode.js +15 -12
  623. package/src/nodes/display/FrontFacingNode.js +3 -3
  624. package/src/nodes/display/NormalMapNode.js +5 -6
  625. package/src/nodes/display/PassNode.js +122 -35
  626. package/src/nodes/display/PosterizeNode.js +2 -3
  627. package/src/nodes/display/RenderOutputNode.js +8 -9
  628. package/src/nodes/display/ScreenNode.js +16 -7
  629. package/src/nodes/display/ToneMappingFunctions.js +12 -8
  630. package/src/nodes/display/ToneMappingNode.js +8 -8
  631. package/src/nodes/display/ToonOutlinePassNode.js +3 -4
  632. package/src/nodes/display/ViewportDepthNode.js +15 -7
  633. package/src/nodes/display/ViewportDepthTextureNode.js +6 -7
  634. package/src/nodes/display/ViewportSharedTextureNode.js +6 -7
  635. package/src/nodes/display/ViewportTextureNode.js +16 -16
  636. package/src/nodes/fog/Fog.js +5 -2
  637. package/src/nodes/functions/BSDF/LTC.js +45 -1
  638. package/src/nodes/functions/BasicLightingModel.js +5 -8
  639. package/src/nodes/functions/PhongLightingModel.js +6 -8
  640. package/src/nodes/functions/PhysicalLightingModel.js +40 -42
  641. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  642. package/src/nodes/functions/ToonLightingModel.js +5 -6
  643. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  644. package/src/nodes/functions/material/getParallaxCorrectNormal.js +8 -8
  645. package/src/nodes/geometry/RangeNode.js +4 -5
  646. package/src/nodes/gpgpu/AtomicFunctionNode.js +33 -48
  647. package/src/nodes/gpgpu/BarrierNode.js +6 -4
  648. package/src/nodes/gpgpu/ComputeBuiltinNode.js +26 -31
  649. package/src/nodes/gpgpu/ComputeNode.js +43 -16
  650. package/src/nodes/gpgpu/WorkgroupInfoNode.js +16 -17
  651. package/src/nodes/lighting/AONode.js +2 -2
  652. package/src/nodes/lighting/AmbientLightNode.js +1 -1
  653. package/src/nodes/lighting/AnalyticLightNode.js +50 -9
  654. package/src/nodes/lighting/BasicLightMapNode.js +2 -2
  655. package/src/nodes/lighting/DirectionalLightNode.js +3 -12
  656. package/src/nodes/lighting/EnvironmentNode.js +5 -8
  657. package/src/nodes/lighting/HemisphereLightNode.js +1 -1
  658. package/src/nodes/lighting/LightProbeNode.js +1 -1
  659. package/src/nodes/lighting/LightUtils.js +1 -5
  660. package/src/nodes/lighting/LightingContextNode.js +10 -10
  661. package/src/nodes/lighting/LightingNode.js +1 -1
  662. package/src/nodes/lighting/LightsNode.js +68 -25
  663. package/src/nodes/lighting/PointLightNode.js +12 -27
  664. package/src/nodes/lighting/PointShadowNode.js +5 -6
  665. package/src/nodes/lighting/RectAreaLightNode.js +5 -10
  666. package/src/nodes/lighting/ShadowBaseNode.js +8 -9
  667. package/src/nodes/lighting/ShadowNode.js +28 -15
  668. package/src/nodes/lighting/SpotLightNode.js +8 -19
  669. package/src/nodes/math/ConditionalNode.js +26 -9
  670. package/src/nodes/math/Hash.js +2 -3
  671. package/src/nodes/math/MathNode.js +217 -150
  672. package/src/nodes/math/MathUtils.js +8 -6
  673. package/src/nodes/math/OperatorNode.js +198 -89
  674. package/src/nodes/math/TriNoise3D.js +2 -3
  675. package/src/nodes/parsers/GLSLNodeFunction.js +3 -3
  676. package/src/nodes/parsers/GLSLNodeParser.js +1 -1
  677. package/src/nodes/pmrem/PMREMNode.js +61 -37
  678. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  679. package/src/nodes/procedural/Checker.js +2 -3
  680. package/src/nodes/shapes/Shapes.js +2 -3
  681. package/src/nodes/tsl/TSLBase.js +2 -1
  682. package/src/nodes/tsl/TSLCore.js +117 -19
  683. package/src/nodes/utils/ArrayElementNode.js +5 -3
  684. package/src/nodes/utils/ConvertNode.js +3 -3
  685. package/src/nodes/utils/CubeMapNode.js +7 -8
  686. package/src/nodes/utils/DebugNode.js +70 -0
  687. package/src/nodes/utils/Discard.js +5 -5
  688. package/src/nodes/utils/EquirectUVNode.js +3 -4
  689. package/src/nodes/utils/FlipNode.js +3 -3
  690. package/src/nodes/utils/FunctionOverloadingNode.js +3 -4
  691. package/src/nodes/utils/JoinNode.js +29 -4
  692. package/src/nodes/utils/LoopNode.js +67 -35
  693. package/src/nodes/utils/MatcapUVNode.js +1 -2
  694. package/src/nodes/utils/MaxMipLevelNode.js +4 -5
  695. package/src/nodes/utils/MemberNode.js +2 -2
  696. package/src/nodes/utils/Oscillators.js +8 -6
  697. package/src/nodes/utils/Packing.js +4 -4
  698. package/src/nodes/utils/PostProcessingUtils.js +6 -5
  699. package/src/nodes/utils/RTTNode.js +19 -19
  700. package/src/nodes/utils/ReflectorNode.js +35 -25
  701. package/src/nodes/utils/RemapNode.js +9 -9
  702. package/src/nodes/utils/RotateNode.js +3 -4
  703. package/src/nodes/utils/SetNode.js +3 -3
  704. package/src/nodes/utils/SplitNode.js +5 -5
  705. package/src/nodes/utils/SpriteSheetUVNode.js +4 -5
  706. package/src/nodes/utils/SpriteUtils.js +5 -6
  707. package/src/nodes/utils/StorageArrayElementNode.js +3 -4
  708. package/src/nodes/utils/Timer.js +9 -5
  709. package/src/nodes/utils/TriplanarTexturesNode.js +20 -20
  710. package/src/nodes/utils/UVUtils.js +4 -4
  711. package/src/nodes/utils/ViewportUtils.js +3 -4
  712. package/src/objects/BatchedMesh.js +319 -32
  713. package/src/objects/Bone.js +24 -0
  714. package/src/objects/ClippingGroup.js +4 -4
  715. package/src/objects/Group.js +24 -0
  716. package/src/objects/InstancedMesh.js +120 -2
  717. package/src/objects/LOD.js +99 -5
  718. package/src/objects/Line.js +82 -0
  719. package/src/objects/LineLoop.js +20 -0
  720. package/src/objects/LineSegments.js +18 -0
  721. package/src/objects/Mesh.js +75 -0
  722. package/src/objects/Points.js +60 -0
  723. package/src/objects/Skeleton.js +105 -0
  724. package/src/objects/SkinnedMesh.js +99 -5
  725. package/src/objects/Sprite.js +54 -0
  726. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  727. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  728. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  729. package/src/renderers/WebGLRenderTarget.js +19 -0
  730. package/src/renderers/WebGLRenderer.js +622 -83
  731. package/src/renderers/common/Animation.js +6 -6
  732. package/src/renderers/common/Attributes.js +3 -3
  733. package/src/renderers/common/Backend.js +40 -31
  734. package/src/renderers/common/Background.js +4 -3
  735. package/src/renderers/common/BindGroup.js +5 -5
  736. package/src/renderers/common/Binding.js +4 -4
  737. package/src/renderers/common/Bindings.js +10 -0
  738. package/src/renderers/common/Buffer.js +5 -5
  739. package/src/renderers/common/BufferUtils.js +7 -9
  740. package/src/renderers/common/BundleGroup.js +6 -6
  741. package/src/renderers/common/ChainMap.js +3 -3
  742. package/src/renderers/common/ClippingContext.js +8 -8
  743. package/src/renderers/common/Color4.js +8 -8
  744. package/src/renderers/common/ComputePipeline.js +2 -2
  745. package/src/renderers/common/CubeRenderTarget.js +13 -0
  746. package/src/renderers/common/DataMap.js +2 -2
  747. package/src/renderers/common/Geometries.js +6 -6
  748. package/src/renderers/common/IndirectStorageBufferAttribute.js +3 -3
  749. package/src/renderers/common/Info.js +17 -17
  750. package/src/renderers/common/Pipeline.js +3 -3
  751. package/src/renderers/common/Pipelines.js +12 -12
  752. package/src/renderers/common/PostProcessing.js +13 -1
  753. package/src/renderers/common/ProgrammableStage.js +11 -11
  754. package/src/renderers/common/QuadMesh.js +5 -3
  755. package/src/renderers/common/RenderContext.js +24 -24
  756. package/src/renderers/common/RenderContexts.js +4 -4
  757. package/src/renderers/common/RenderList.js +16 -16
  758. package/src/renderers/common/RenderObject.js +27 -27
  759. package/src/renderers/common/RenderObjects.js +4 -4
  760. package/src/renderers/common/RenderPipeline.js +1 -1
  761. package/src/renderers/common/Renderer.js +272 -200
  762. package/src/renderers/common/RendererUtils.js +0 -2
  763. package/src/renderers/common/SampledTexture.js +20 -20
  764. package/src/renderers/common/Sampler.js +5 -5
  765. package/src/renderers/common/StorageBuffer.js +2 -2
  766. package/src/renderers/common/StorageBufferAttribute.js +4 -4
  767. package/src/renderers/common/StorageInstancedBufferAttribute.js +4 -4
  768. package/src/renderers/common/StorageTexture.js +6 -6
  769. package/src/renderers/common/Textures.js +6 -6
  770. package/src/renderers/common/TimestampQueryPool.js +66 -7
  771. package/src/renderers/common/Uniform.js +26 -26
  772. package/src/renderers/common/UniformBuffer.js +2 -2
  773. package/src/renderers/common/UniformsGroup.js +18 -18
  774. package/src/renderers/common/XRManager.js +369 -54
  775. package/src/renderers/common/XRRenderTarget.js +5 -5
  776. package/src/renderers/common/extras/PMREMGenerator.js +62 -37
  777. package/src/renderers/common/nodes/NodeBuilderState.js +7 -7
  778. package/src/renderers/common/nodes/NodeLibrary.js +13 -13
  779. package/src/renderers/common/nodes/NodeSampledTexture.js +12 -12
  780. package/src/renderers/common/nodes/NodeSampler.js +1 -1
  781. package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
  782. package/src/renderers/common/nodes/NodeUniform.js +9 -9
  783. package/src/renderers/common/nodes/NodeUniformsGroup.js +3 -3
  784. package/src/renderers/common/nodes/Nodes.js +13 -13
  785. package/src/renderers/shaders/UniformsLib.js +1 -4
  786. package/src/renderers/shaders/UniformsUtils.js +1 -3
  787. package/src/renderers/webgl/WebGLBackground.js +4 -2
  788. package/src/renderers/webgl/WebGLState.js +19 -19
  789. package/src/renderers/webgl-fallback/WebGLBackend.js +163 -146
  790. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +4 -4
  791. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +89 -99
  792. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +2 -2
  793. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +5 -5
  794. package/src/renderers/webgl-fallback/utils/WebGLState.js +97 -47
  795. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +79 -31
  796. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +37 -29
  797. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -3
  798. package/src/renderers/webgpu/WebGPUBackend.js +200 -119
  799. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +3 -13
  800. package/src/renderers/webgpu/WebGPURenderer.js +19 -13
  801. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +171 -178
  802. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -3
  803. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +1 -1
  804. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +43 -9
  805. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +2 -2
  806. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  807. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +18 -10
  808. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +9 -9
  809. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +37 -37
  810. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +31 -18
  811. package/src/renderers/webgpu/utils/WebGPUUtils.js +9 -9
  812. package/src/renderers/webxr/WebXRController.js +87 -2
  813. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  814. package/src/renderers/webxr/WebXRManager.js +187 -11
  815. package/src/scenes/Fog.js +60 -0
  816. package/src/scenes/FogExp2.js +51 -0
  817. package/src/scenes/Scene.js +88 -0
  818. package/src/textures/CanvasTexture.js +28 -0
  819. package/src/textures/CompressedArrayTexture.js +57 -0
  820. package/src/textures/CompressedCubeTexture.js +29 -0
  821. package/src/textures/CompressedTexture.js +64 -6
  822. package/src/textures/CubeTexture.js +52 -4
  823. package/src/textures/Data3DTexture.js +77 -0
  824. package/src/textures/DataArrayTexture.js +93 -0
  825. package/src/textures/DataTexture.js +65 -0
  826. package/src/textures/DepthTexture.js +61 -9
  827. package/src/textures/FramebufferTexture.js +62 -0
  828. package/src/textures/Source.js +69 -0
  829. package/src/textures/Texture.js +362 -3
  830. package/src/textures/VideoFrameTexture.js +43 -6
  831. package/src/textures/VideoTexture.js +49 -4
  832. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -1,14 +1,19 @@
1
1
  import { ArrayCamera } from '../../cameras/ArrayCamera.js';
2
2
  import { EventDispatcher } from '../../core/EventDispatcher.js';
3
3
  import { PerspectiveCamera } from '../../cameras/PerspectiveCamera.js';
4
+ import { Quaternion } from '../../math/Quaternion.js';
4
5
  import { RAD2DEG } from '../../math/MathUtils.js';
5
6
  import { Vector2 } from '../../math/Vector2.js';
6
7
  import { Vector3 } from '../../math/Vector3.js';
7
8
  import { Vector4 } from '../../math/Vector4.js';
8
9
  import { WebXRController } from '../webxr/WebXRController.js';
9
- import { DepthFormat, DepthStencilFormat, RGBAFormat, UnsignedByteType, UnsignedInt248Type, UnsignedIntType } from '../../constants.js';
10
+ import { AddEquation, BackSide, CustomBlending, DepthFormat, DepthStencilFormat, FrontSide, RGBAFormat, UnsignedByteType, UnsignedInt248Type, UnsignedIntType, ZeroFactor } from '../../constants.js';
10
11
  import { DepthTexture } from '../../textures/DepthTexture.js';
11
12
  import { XRRenderTarget } from './XRRenderTarget.js';
13
+ import { CylinderGeometry } from '../../geometries/CylinderGeometry.js';
14
+ import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
15
+ import { MeshBasicMaterial } from '../../materials/MeshBasicMaterial.js';
16
+ import { Mesh } from '../../objects/Mesh.js';
12
17
 
13
18
  const _cameraLPos = /*@__PURE__*/ new Vector3();
14
19
  const _cameraRPos = /*@__PURE__*/ new Vector3();
@@ -35,7 +40,7 @@ class XRManager extends EventDispatcher {
35
40
  /**
36
41
  * This flag globally enables XR rendering.
37
42
  *
38
- * @type {Boolean}
43
+ * @type {boolean}
39
44
  * @default false
40
45
  */
41
46
  this.enabled = false;
@@ -43,7 +48,7 @@ class XRManager extends EventDispatcher {
43
48
  /**
44
49
  * Whether the XR device is currently presenting or not.
45
50
  *
46
- * @type {Boolean}
51
+ * @type {boolean}
47
52
  * @default false
48
53
  * @readonly
49
54
  */
@@ -52,7 +57,7 @@ class XRManager extends EventDispatcher {
52
57
  /**
53
58
  * Whether the XR camera should automatically be updated or not.
54
59
  *
55
- * @type {Boolean}
60
+ * @type {boolean}
56
61
  * @default true
57
62
  */
58
63
  this.cameraAutoUpdate = true;
@@ -105,7 +110,7 @@ class XRManager extends EventDispatcher {
105
110
  * The current near value of the XR camera.
106
111
  *
107
112
  * @private
108
- * @type {Number?}
113
+ * @type {?number}
109
114
  * @default null
110
115
  */
111
116
  this._currentDepthNear = null;
@@ -114,7 +119,7 @@ class XRManager extends EventDispatcher {
114
119
  * The current far value of the XR camera.
115
120
  *
116
121
  * @private
117
- * @type {Number?}
122
+ * @type {?number}
118
123
  * @default null
119
124
  */
120
125
  this._currentDepthFar = null;
@@ -137,29 +142,54 @@ class XRManager extends EventDispatcher {
137
142
  this._controllerInputSources = [];
138
143
 
139
144
  /**
140
- * The current render target of the renderer.
145
+ * The XR render target that represents the rendering destination
146
+ * during an active XR session.
141
147
  *
142
148
  * @private
143
- * @type {RenderTarget?}
149
+ * @type {?RenderTarget}
144
150
  * @default null
145
151
  */
146
- this._currentRenderTarget = null;
152
+ this._xrRenderTarget = null;
147
153
 
148
154
  /**
149
- * The XR render target that represents the rendering destination
150
- * during an active XR session.
155
+ * An array holding all the non-projection layers
151
156
  *
152
157
  * @private
153
- * @type {RenderTarget?}
154
- * @default null
158
+ * @type {Array<Object>}
159
+ * @default []
155
160
  */
156
- this._xrRenderTarget = null;
161
+ this._layers = [];
162
+
163
+ /**
164
+ * Whether the device has support for all layer types.
165
+ *
166
+ * @type {boolean}
167
+ * @default false
168
+ */
169
+ this._supportsLayers = false;
170
+
171
+ /**
172
+ * Helper function to create native WebXR Layer.
173
+ *
174
+ * @private
175
+ * @type {Function}
176
+ */
177
+ this._createXRLayer = createXRLayer.bind( this );
178
+
179
+ /**
180
+ * The current WebGL context.
181
+ *
182
+ * @private
183
+ * @type {?WebGL2RenderingContext}
184
+ * @default null
185
+ */
186
+ this._gl = null;
157
187
 
158
188
  /**
159
189
  * The current animation context.
160
190
  *
161
191
  * @private
162
- * @type {Window?}
192
+ * @type {?Window}
163
193
  * @default null
164
194
  */
165
195
  this._currentAnimationContext = null;
@@ -168,7 +198,7 @@ class XRManager extends EventDispatcher {
168
198
  * The current animation loop.
169
199
  *
170
200
  * @private
171
- * @type {Function?}
201
+ * @type {?Function}
172
202
  * @default null
173
203
  */
174
204
  this._currentAnimationLoop = null;
@@ -177,7 +207,7 @@ class XRManager extends EventDispatcher {
177
207
  * The current pixel ratio.
178
208
  *
179
209
  * @private
180
- * @type {Number?}
210
+ * @type {?number}
181
211
  * @default null
182
212
  */
183
213
  this._currentPixelRatio = null;
@@ -217,7 +247,7 @@ class XRManager extends EventDispatcher {
217
247
 
218
248
  /**
219
249
  * The animation loop which is used as a replacement for the default
220
- * animation loop of the applicatio. It is only used when a XR session
250
+ * animation loop of the application. It is only used when a XR session
221
251
  * is active.
222
252
  *
223
253
  * @private
@@ -229,7 +259,7 @@ class XRManager extends EventDispatcher {
229
259
  * The current XR reference space.
230
260
  *
231
261
  * @private
232
- * @type {XRReferenceSpace?}
262
+ * @type {?XRReferenceSpace}
233
263
  * @default null
234
264
  */
235
265
  this._referenceSpace = null;
@@ -238,7 +268,7 @@ class XRManager extends EventDispatcher {
238
268
  * The current XR reference space type.
239
269
  *
240
270
  * @private
241
- * @type {String}
271
+ * @type {XRReferenceSpaceType}
242
272
  * @default 'local-floor'
243
273
  */
244
274
  this._referenceSpaceType = 'local-floor';
@@ -247,7 +277,7 @@ class XRManager extends EventDispatcher {
247
277
  * A custom reference space defined by the application.
248
278
  *
249
279
  * @private
250
- * @type {XRReferenceSpace?}
280
+ * @type {?XRReferenceSpace}
251
281
  * @default null
252
282
  */
253
283
  this._customReferenceSpace = null;
@@ -256,7 +286,7 @@ class XRManager extends EventDispatcher {
256
286
  * The framebuffer scale factor.
257
287
  *
258
288
  * @private
259
- * @type {Number}
289
+ * @type {number}
260
290
  * @default 1
261
291
  */
262
292
  this._framebufferScaleFactor = 1;
@@ -265,7 +295,7 @@ class XRManager extends EventDispatcher {
265
295
  * The foveation factor.
266
296
  *
267
297
  * @private
268
- * @type {Number}
298
+ * @type {number}
269
299
  * @default 1
270
300
  */
271
301
  this._foveation = 1.0;
@@ -274,7 +304,7 @@ class XRManager extends EventDispatcher {
274
304
  * A reference to the current XR session.
275
305
  *
276
306
  * @private
277
- * @type {XRSession?}
307
+ * @type {?XRSession}
278
308
  * @default null
279
309
  */
280
310
  this._session = null;
@@ -283,7 +313,7 @@ class XRManager extends EventDispatcher {
283
313
  * A reference to the current XR base layer.
284
314
  *
285
315
  * @private
286
- * @type {XRWebGLLayer?}
316
+ * @type {?XRWebGLLayer}
287
317
  * @default null
288
318
  */
289
319
  this._glBaseLayer = null;
@@ -292,7 +322,7 @@ class XRManager extends EventDispatcher {
292
322
  * A reference to the current XR binding.
293
323
  *
294
324
  * @private
295
- * @type {XRWebGLBinding?}
325
+ * @type {?XRWebGLBinding}
296
326
  * @default null
297
327
  */
298
328
  this._glBinding = null;
@@ -301,7 +331,7 @@ class XRManager extends EventDispatcher {
301
331
  * A reference to the current XR projection layer.
302
332
  *
303
333
  * @private
304
- * @type {XRProjectionLayer?}
334
+ * @type {?XRProjectionLayer}
305
335
  * @default null
306
336
  */
307
337
  this._glProjLayer = null;
@@ -310,7 +340,7 @@ class XRManager extends EventDispatcher {
310
340
  * A reference to the current XR frame.
311
341
  *
312
342
  * @private
313
- * @type {XRFrame?}
343
+ * @type {?XRFrame}
314
344
  * @default null
315
345
  */
316
346
  this._xrFrame = null;
@@ -319,7 +349,7 @@ class XRManager extends EventDispatcher {
319
349
  * Whether to use the WebXR Layers API or not.
320
350
  *
321
351
  * @private
322
- * @type {Boolean}
352
+ * @type {boolean}
323
353
  * @readonly
324
354
  */
325
355
  this._useLayers = ( typeof XRWebGLBinding !== 'undefined' && 'createProjectionLayer' in XRWebGLBinding.prototype ); // eslint-disable-line compat/compat
@@ -331,7 +361,7 @@ class XRManager extends EventDispatcher {
331
361
  * of a XR controller in target ray space. The requested controller is defined
332
362
  * by the given index.
333
363
  *
334
- * @param {Number} index - The index of the XR controller.
364
+ * @param {number} index - The index of the XR controller.
335
365
  * @return {Group} A group that represents the controller's transformation.
336
366
  */
337
367
  getController( index ) {
@@ -347,7 +377,7 @@ class XRManager extends EventDispatcher {
347
377
  * of a XR controller in grip space. The requested controller is defined
348
378
  * by the given index.
349
379
  *
350
- * @param {Number} index - The index of the XR controller.
380
+ * @param {number} index - The index of the XR controller.
351
381
  * @return {Group} A group that represents the controller's transformation.
352
382
  */
353
383
  getControllerGrip( index ) {
@@ -363,7 +393,7 @@ class XRManager extends EventDispatcher {
363
393
  * of a XR controller in hand space. The requested controller is defined
364
394
  * by the given index.
365
395
  *
366
- * @param {Number} index - The index of the XR controller.
396
+ * @param {number} index - The index of the XR controller.
367
397
  * @return {Group} A group that represents the controller's transformation.
368
398
  */
369
399
  getHand( index ) {
@@ -377,7 +407,7 @@ class XRManager extends EventDispatcher {
377
407
  /**
378
408
  * Returns the foveation value.
379
409
  *
380
- * @return {Number|undefined} The foveation value. Returns `undefined` if no base or projection layer is defined.
410
+ * @return {number|undefined} The foveation value. Returns `undefined` if no base or projection layer is defined.
381
411
  */
382
412
  getFoveation() {
383
413
 
@@ -394,7 +424,7 @@ class XRManager extends EventDispatcher {
394
424
  /**
395
425
  * Sets the foveation value.
396
426
  *
397
- * @param {Number} foveation - A number in the range `[0,1]` where `0` means no foveation (full resolution)
427
+ * @param {number} foveation - A number in the range `[0,1]` where `0` means no foveation (full resolution)
398
428
  * and `1` means maximum foveation (the edges render at lower resolution).
399
429
  */
400
430
  setFoveation( foveation ) {
@@ -418,7 +448,7 @@ class XRManager extends EventDispatcher {
418
448
  /**
419
449
  * Returns the framebuffer scale factor.
420
450
  *
421
- * @return {Number} The framebuffer scale factor.
451
+ * @return {number} The framebuffer scale factor.
422
452
  */
423
453
  getFramebufferScaleFactor() {
424
454
 
@@ -431,7 +461,7 @@ class XRManager extends EventDispatcher {
431
461
  *
432
462
  * This method can not be used during a XR session.
433
463
  *
434
- * @param {Number} factor - The framebuffer scale factor.
464
+ * @param {number} factor - The framebuffer scale factor.
435
465
  */
436
466
  setFramebufferScaleFactor( factor ) {
437
467
 
@@ -448,7 +478,7 @@ class XRManager extends EventDispatcher {
448
478
  /**
449
479
  * Returns the reference space type.
450
480
  *
451
- * @return {String} The reference space type.
481
+ * @return {XRReferenceSpaceType} The reference space type.
452
482
  */
453
483
  getReferenceSpaceType() {
454
484
 
@@ -461,7 +491,7 @@ class XRManager extends EventDispatcher {
461
491
  *
462
492
  * This method can not be used during a XR session.
463
493
  *
464
- * @param {String} type - The reference space type.
494
+ * @param {XRReferenceSpaceType} type - The reference space type.
465
495
  */
466
496
  setReferenceSpaceType( type ) {
467
497
 
@@ -511,7 +541,7 @@ class XRManager extends EventDispatcher {
511
541
  /**
512
542
  * Returns the environment blend mode from the current XR session.
513
543
  *
514
- * @return {('opaque'|'additive'|'alpha-blend')?} The environment blend mode. Returns `null` when used outside of a XR session.
544
+ * @return {'opaque'|'additive'|'alpha-blend'|undefined} The environment blend mode. Returns `undefined` when used outside of a XR session.
515
545
  */
516
546
  getEnvironmentBlendMode() {
517
547
 
@@ -526,7 +556,7 @@ class XRManager extends EventDispatcher {
526
556
  /**
527
557
  * Returns the current XR frame.
528
558
  *
529
- * @return {XRFrame?} The XR frame. Returns `null` when used outside a XR session.
559
+ * @return {?XRFrame} The XR frame. Returns `null` when used outside a XR session.
530
560
  */
531
561
  getFrame() {
532
562
 
@@ -534,10 +564,194 @@ class XRManager extends EventDispatcher {
534
564
 
535
565
  }
536
566
 
567
+ createQuadLayer( width, height, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = [] ) {
568
+
569
+ const geometry = new PlaneGeometry( width, height );
570
+ const renderTarget = new XRRenderTarget(
571
+ pixelwidth,
572
+ pixelheight,
573
+ {
574
+ format: RGBAFormat,
575
+ type: UnsignedByteType,
576
+ depthTexture: new DepthTexture(
577
+ pixelwidth,
578
+ pixelheight,
579
+ attributes.stencil ? UnsignedInt248Type : UnsignedIntType,
580
+ undefined,
581
+ undefined,
582
+ undefined,
583
+ undefined,
584
+ undefined,
585
+ undefined,
586
+ attributes.stencil ? DepthStencilFormat : DepthFormat
587
+ ),
588
+ stencilBuffer: attributes.stencil,
589
+ resolveDepthBuffer: false,
590
+ resolveStencilBuffer: false
591
+ } );
592
+
593
+ const material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } );
594
+ material.map = renderTarget.texture;
595
+ material.map.offset.y = 1;
596
+ material.map.repeat.y = - 1;
597
+ const plane = new Mesh( geometry, material );
598
+ plane.position.copy( translation );
599
+ plane.quaternion.copy( quaternion );
600
+
601
+ const layer = {
602
+ type: 'quad',
603
+ width: width,
604
+ height: height,
605
+ translation: translation,
606
+ quaternion: quaternion,
607
+ pixelwidth: pixelwidth,
608
+ pixelheight: pixelheight,
609
+ plane: plane,
610
+ material: material,
611
+ rendercall: rendercall,
612
+ renderTarget: renderTarget };
613
+
614
+ this._layers.push( layer );
615
+
616
+ if ( this._session !== null ) {
617
+
618
+ layer.plane.material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } );
619
+ layer.plane.material.blending = CustomBlending;
620
+ layer.plane.material.blendEquation = AddEquation;
621
+ layer.plane.material.blendSrc = ZeroFactor;
622
+ layer.plane.material.blendDst = ZeroFactor;
623
+
624
+ layer.xrlayer = this._createXRLayer( layer );
625
+
626
+ const xrlayers = this._session.renderState.layers;
627
+ xrlayers.unshift( layer.xrlayer );
628
+ this._session.updateRenderState( { layers: xrlayers } );
629
+
630
+ } else {
631
+
632
+ renderTarget.isXRRenderTarget = false;
633
+
634
+ }
635
+
636
+ return plane;
637
+
638
+ }
639
+
640
+ createCylinderLayer( radius, centralAngle, aspectratio, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = [] ) {
641
+
642
+ const geometry = new CylinderGeometry( radius, radius, radius * centralAngle / aspectratio, 64, 64, true, Math.PI - centralAngle / 2, centralAngle );
643
+ const renderTarget = new XRRenderTarget(
644
+ pixelwidth,
645
+ pixelheight,
646
+ {
647
+ format: RGBAFormat,
648
+ type: UnsignedByteType,
649
+ depthTexture: new DepthTexture(
650
+ pixelwidth,
651
+ pixelheight,
652
+ attributes.stencil ? UnsignedInt248Type : UnsignedIntType,
653
+ undefined,
654
+ undefined,
655
+ undefined,
656
+ undefined,
657
+ undefined,
658
+ undefined,
659
+ attributes.stencil ? DepthStencilFormat : DepthFormat
660
+ ),
661
+ stencilBuffer: attributes.stencil,
662
+ resolveDepthBuffer: false,
663
+ resolveStencilBuffer: false
664
+ } );
665
+
666
+ const material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } );
667
+ material.map = renderTarget.texture;
668
+ material.map.offset.y = 1;
669
+ material.map.repeat.y = - 1;
670
+ const plane = new Mesh( geometry, material );
671
+ plane.position.copy( translation );
672
+ plane.quaternion.copy( quaternion );
673
+
674
+ const layer = {
675
+ type: 'cylinder',
676
+ radius: radius,
677
+ centralAngle: centralAngle,
678
+ aspectratio: aspectratio,
679
+ translation: translation,
680
+ quaternion: quaternion,
681
+ pixelwidth: pixelwidth,
682
+ pixelheight: pixelheight,
683
+ plane: plane,
684
+ material: material,
685
+ rendercall: rendercall,
686
+ renderTarget: renderTarget };
687
+
688
+ this._layers.push( layer );
689
+
690
+ if ( this._session !== null ) {
691
+
692
+ layer.plane.material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } );
693
+ layer.plane.material.blending = CustomBlending;
694
+ layer.plane.material.blendEquation = AddEquation;
695
+ layer.plane.material.blendSrc = ZeroFactor;
696
+ layer.plane.material.blendDst = ZeroFactor;
697
+
698
+ layer.xrlayer = this._createXRLayer( layer );
699
+
700
+ const xrlayers = this._session.renderState.layers;
701
+ xrlayers.unshift( layer.xrlayer );
702
+ this._session.updateRenderState( { layers: xrlayers } );
703
+
704
+ } else {
705
+
706
+ renderTarget.isXRRenderTarget = false;
707
+
708
+ }
709
+
710
+ return plane;
711
+
712
+ }
713
+
714
+ renderLayers( ) {
715
+
716
+ const translationObject = new Vector3();
717
+ const quaternionObject = new Quaternion();
718
+
719
+ const wasPresenting = this.isPresenting;
720
+ this.isPresenting = false;
721
+
722
+ for ( const layer of this._layers ) {
723
+
724
+ layer.renderTarget.isXRRenderTarget = this._session !== null;
725
+ layer.renderTarget.hasExternalTextures = layer.renderTarget.isXRRenderTarget;
726
+ layer.renderTarget.autoAllocateDepthBuffer = ! layer.renderTarget.isXRRenderTarget;
727
+
728
+ if ( layer.renderTarget.isXRRenderTarget && this._supportsLayers ) {
729
+
730
+ layer.xrlayer.transform = new XRRigidTransform( layer.plane.getWorldPosition( translationObject ), layer.plane.getWorldQuaternion( quaternionObject ) );
731
+
732
+ const glSubImage = this._glBinding.getSubImage( layer.xrlayer, this._xrFrame );
733
+ this._renderer.backend.setXRRenderTargetTextures(
734
+ layer.renderTarget,
735
+ glSubImage.colorTexture,
736
+ glSubImage.depthStencilTexture );
737
+
738
+ }
739
+
740
+ this._renderer.setRenderTarget( layer.renderTarget );
741
+ layer.rendercall();
742
+
743
+ }
744
+
745
+ this.isPresenting = wasPresenting;
746
+ this._renderer.setRenderTarget( null );
747
+
748
+ }
749
+
750
+
537
751
  /**
538
752
  * Returns the current XR session.
539
753
  *
540
- * @return {XRSession?} The XR session. Returns `null` when used outside a XR session.
754
+ * @return {?XRSession} The XR session. Returns `null` when used outside a XR session.
541
755
  */
542
756
  getSession() {
543
757
 
@@ -559,7 +773,9 @@ class XRManager extends EventDispatcher {
559
773
  const renderer = this._renderer;
560
774
  const backend = renderer.backend;
561
775
 
562
- const gl = renderer.getContext();
776
+ this._gl = renderer.getContext();
777
+ const gl = this._gl;
778
+ const attributes = gl.getContextAttributes();
563
779
 
564
780
  this._session = session;
565
781
 
@@ -567,8 +783,6 @@ class XRManager extends EventDispatcher {
567
783
 
568
784
  if ( backend.isWebGPUBackend === true ) throw new Error( 'THREE.XRManager: XR is currently not supported with a WebGPU backend. Use WebGL by passing "{ forceWebGL: true }" to the constructor of the renderer.' );
569
785
 
570
- this._currentRenderTarget = renderer.getRenderTarget();
571
-
572
786
  session.addEventListener( 'select', this._onSessionEvent );
573
787
  session.addEventListener( 'selectstart', this._onSessionEvent );
574
788
  session.addEventListener( 'selectend', this._onSessionEvent );
@@ -613,12 +827,11 @@ class XRManager extends EventDispatcher {
613
827
 
614
828
  const glBinding = new XRWebGLBinding( session, gl );
615
829
  const glProjLayer = glBinding.createProjectionLayer( projectionlayerInit );
830
+ const layersArray = [ glProjLayer ];
616
831
 
617
832
  this._glBinding = glBinding;
618
833
  this._glProjLayer = glProjLayer;
619
834
 
620
- session.updateRenderState( { layers: [ glProjLayer ] } );
621
-
622
835
  renderer.setPixelRatio( 1 );
623
836
  renderer.setSize( glProjLayer.textureWidth, glProjLayer.textureHeight, false );
624
837
 
@@ -631,11 +844,39 @@ class XRManager extends EventDispatcher {
631
844
  colorSpace: renderer.outputColorSpace,
632
845
  depthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),
633
846
  stencilBuffer: renderer.stencil,
634
- samples: renderer.samples
847
+ samples: attributes.antialias ? 4 : 0,
848
+ resolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false ),
849
+ resolveStencilBuffer: ( glProjLayer.ignoreDepthValues === false ),
635
850
  } );
636
851
 
637
852
  this._xrRenderTarget.hasExternalTextures = true;
638
853
 
854
+ this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
855
+
856
+ this._supportsLayers = session.enabledFeatures.includes( 'layers' );
857
+
858
+ if ( this._supportsLayers ) {
859
+
860
+ // switch layers to native
861
+ for ( const layer of this._layers ) {
862
+
863
+ // change material so it "punches" out a hole to show the XR Layer.
864
+ layer.plane.material = new MeshBasicMaterial( { color: 0xffffff, side: layer.type === 'cylinder' ? BackSide : FrontSide } );
865
+ layer.plane.material.blending = CustomBlending;
866
+ layer.plane.material.blendEquation = AddEquation;
867
+ layer.plane.material.blendSrc = ZeroFactor;
868
+ layer.plane.material.blendDst = ZeroFactor;
869
+
870
+ layer.xrlayer = this._createXRLayer( layer );
871
+
872
+ layersArray.unshift( layer.xrlayer );
873
+
874
+ }
875
+
876
+ }
877
+
878
+ session.updateRenderState( { layers: layersArray } );
879
+
639
880
  } else {
640
881
 
641
882
  // fallback to XRWebGLLayer
@@ -663,7 +904,9 @@ class XRManager extends EventDispatcher {
663
904
  format: RGBAFormat,
664
905
  type: UnsignedByteType,
665
906
  colorSpace: renderer.outputColorSpace,
666
- stencilBuffer: renderer.stencil
907
+ stencilBuffer: renderer.stencil,
908
+ resolveDepthBuffer: ( glBaseLayer.ignoreDepthValues === false ),
909
+ resolveStencilBuffer: ( glBaseLayer.ignoreDepthValues === false ),
667
910
  }
668
911
  );
669
912
 
@@ -673,8 +916,6 @@ class XRManager extends EventDispatcher {
673
916
 
674
917
  this.setFoveation( this.getFoveation() );
675
918
 
676
- this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
677
-
678
919
  renderer._animation.setAnimationLoop( this._onAnimationFrame );
679
920
  renderer._animation.setContext( session );
680
921
  renderer._animation.start();
@@ -764,7 +1005,7 @@ class XRManager extends EventDispatcher {
764
1005
  * Returns a WebXR controller for the given controller index.
765
1006
  *
766
1007
  * @private
767
- * @param {Number} index - The controller index.
1008
+ * @param {number} index - The controller index.
768
1009
  * @return {WebXRController} The XR controller.
769
1010
  */
770
1011
  _getController( index ) {
@@ -881,7 +1122,7 @@ function updateCamera( camera, parent ) {
881
1122
  }
882
1123
 
883
1124
  /**
884
- * Updates the given camera with the transfomration of the XR camera and parent object.
1125
+ * Updates the given camera with the transformation of the XR camera and parent object.
885
1126
  *
886
1127
  * @inner
887
1128
  * @param {Camera} camera - The camera to update.
@@ -972,11 +1213,51 @@ function onSessionEnd() {
972
1213
  // restore framebuffer/rendering state
973
1214
 
974
1215
  renderer.backend.setXRTarget( null );
975
- renderer.setRenderTarget( this._currentRenderTarget );
1216
+ renderer.setOutputRenderTarget( null );
1217
+ renderer.setRenderTarget( null );
976
1218
 
977
1219
  this._session = null;
978
1220
  this._xrRenderTarget = null;
979
1221
 
1222
+ // switch layers back to emulated
1223
+ if ( this._supportsLayers === true ) {
1224
+
1225
+ for ( const layer of this._layers ) {
1226
+
1227
+ // Recreate layer render target to reset state
1228
+ layer.renderTarget = new XRRenderTarget(
1229
+ layer.pixelwidth,
1230
+ layer.pixelheight,
1231
+ {
1232
+ format: RGBAFormat,
1233
+ type: UnsignedByteType,
1234
+ depthTexture: new DepthTexture(
1235
+ layer.pixelwidth,
1236
+ layer.pixelheight,
1237
+ layer.stencilBuffer ? UnsignedInt248Type : UnsignedIntType,
1238
+ undefined,
1239
+ undefined,
1240
+ undefined,
1241
+ undefined,
1242
+ undefined,
1243
+ undefined,
1244
+ layer.stencilBuffer ? DepthStencilFormat : DepthFormat
1245
+ ),
1246
+ stencilBuffer: layer.stencilBuffer,
1247
+ resolveDepthBuffer: false,
1248
+ resolveStencilBuffer: false
1249
+ } );
1250
+
1251
+ layer.renderTarget.isXRRenderTarget = false;
1252
+
1253
+ layer.plane.material = layer.material;
1254
+ layer.material.map = layer.renderTarget.texture;
1255
+ delete layer.xrlayer;
1256
+
1257
+ }
1258
+
1259
+ }
1260
+
980
1261
  //
981
1262
 
982
1263
  this.isPresenting = false;
@@ -1063,6 +1344,40 @@ function onInputSourcesChange( event ) {
1063
1344
 
1064
1345
  }
1065
1346
 
1347
+ // Creation method for native WebXR layers
1348
+ function createXRLayer( layer ) {
1349
+
1350
+ if ( layer.type === 'quad' ) {
1351
+
1352
+ return this._glBinding.createQuadLayer( {
1353
+ transform: new XRRigidTransform( layer.translation, layer.quaternion ),
1354
+ depthFormat: this._gl.DEPTH_COMPONENT,
1355
+ width: layer.width / 2,
1356
+ height: layer.height / 2,
1357
+ space: this._referenceSpace,
1358
+ viewPixelWidth: layer.pixelwidth,
1359
+ viewPixelHeight: layer.pixelheight
1360
+ } );
1361
+
1362
+ } else {
1363
+
1364
+ return this._glBinding.createCylinderLayer( {
1365
+ transform: new XRRigidTransform( layer.translation, layer.quaternion ),
1366
+ depthFormat: this._gl.DEPTH_COMPONENT,
1367
+ radius: layer.radius,
1368
+ centralAngle: layer.centralAngle,
1369
+ aspectRatio: layer.aspectRatio,
1370
+ space: this._referenceSpace,
1371
+ viewPixelWidth: layer.pixelwidth,
1372
+ viewPixelHeight: layer.pixelheight
1373
+ } );
1374
+
1375
+ }
1376
+
1377
+ }
1378
+
1379
+ // Animation Loop
1380
+
1066
1381
  function onAnimationFrame( time, frame ) {
1067
1382
 
1068
1383
  if ( frame === undefined ) return;
@@ -1159,7 +1474,7 @@ function onAnimationFrame( time, frame ) {
1159
1474
 
1160
1475
  }
1161
1476
 
1162
- renderer.setRenderTarget( this._xrRenderTarget );
1477
+ renderer.setOutputRenderTarget( this._xrRenderTarget );
1163
1478
 
1164
1479
  }
1165
1480