@plastic-software/three 0.174.0 → 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 (544) hide show
  1. package/build/three.cjs +10655 -1446
  2. package/build/three.core.js +9626 -1094
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +834 -157
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +4 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2658 -1697
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2654 -1709
  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 +93 -39
  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 +171 -48
  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 +71 -29
  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 +41 -3
  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 +35 -0
  94. package/examples/jsm/loaders/DDSLoader.js +24 -0
  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 +42 -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 +218 -5
  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 +86 -18
  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 +38 -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 +81 -61
  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 +79 -2
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +108 -72
  162. package/examples/jsm/misc/VolumeSlice.js +88 -45
  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 +70 -0
  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 +131 -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 +266 -133
  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/Transpiler.js +31 -0
  273. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  274. package/examples/jsm/tsl/display/BloomNode.js +1 -1
  275. package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
  276. package/examples/jsm/tsl/display/SSRNode.js +1 -1
  277. package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
  278. package/examples/jsm/tsl/math/Bayer.js +14 -1
  279. package/examples/jsm/tsl/utils/Raymarching.js +4 -2
  280. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  281. package/examples/jsm/utils/CameraUtils.js +10 -7
  282. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  283. package/examples/jsm/utils/GeometryUtils.js +12 -13
  284. package/examples/jsm/utils/LDrawUtils.js +11 -4
  285. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  286. package/examples/jsm/utils/SceneUtils.js +50 -3
  287. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  288. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  289. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  290. package/examples/jsm/utils/SortUtils.js +14 -5
  291. package/examples/jsm/utils/UVsDebug.js +9 -4
  292. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  293. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  294. package/examples/jsm/utils/WorkerPool.js +65 -2
  295. package/examples/jsm/webxr/ARButton.js +18 -0
  296. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  297. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  298. package/examples/jsm/webxr/Text2D.js +11 -0
  299. package/examples/jsm/webxr/VRButton.js +30 -0
  300. package/examples/jsm/webxr/XRButton.js +22 -0
  301. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  302. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  303. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  304. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  305. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  306. package/examples/jsm/webxr/XRPlanes.js +17 -0
  307. package/package.json +1 -1
  308. package/src/Three.TSL.js +3 -1
  309. package/src/animation/AnimationAction.js +262 -30
  310. package/src/animation/AnimationClip.js +141 -2
  311. package/src/animation/AnimationMixer.js +99 -15
  312. package/src/animation/AnimationObjectGroup.js +41 -18
  313. package/src/animation/AnimationUtils.js +168 -18
  314. package/src/animation/KeyframeTrack.js +144 -10
  315. package/src/animation/PropertyBinding.js +77 -3
  316. package/src/animation/PropertyMixer.js +72 -5
  317. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  318. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  319. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  320. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  321. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  322. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  323. package/src/audio/AudioAnalyser.js +1 -1
  324. package/src/audio/AudioListener.js +2 -2
  325. package/src/audio/PositionalAudio.js +5 -5
  326. package/src/constants.js +1429 -5
  327. package/src/core/BufferAttribute.js +413 -3
  328. package/src/core/BufferGeometry.js +337 -1
  329. package/src/core/Clock.js +60 -0
  330. package/src/core/GLBufferAttribute.js +99 -0
  331. package/src/core/InstancedBufferAttribute.js +29 -0
  332. package/src/core/InstancedBufferGeometry.js +20 -0
  333. package/src/core/InstancedInterleavedBuffer.js +26 -0
  334. package/src/core/InterleavedBuffer.js +137 -3
  335. package/src/core/InterleavedBufferAttribute.js +197 -0
  336. package/src/core/Layers.js +71 -10
  337. package/src/core/Object3D.js +23 -0
  338. package/src/core/Raycaster.js +134 -1
  339. package/src/core/RenderTarget.js +166 -7
  340. package/src/core/RenderTarget3D.js +25 -0
  341. package/src/core/RenderTargetArray.js +18 -0
  342. package/src/core/Uniform.js +29 -0
  343. package/src/core/UniformsGroup.js +84 -2
  344. package/src/extras/Controls.js +16 -1
  345. package/src/extras/Earcut.js +3 -781
  346. package/src/extras/ImageUtils.js +3 -2
  347. package/src/extras/PMREMGenerator.js +22 -17
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/extras/core/Path.js +1 -1
  350. package/src/extras/lib/earcut.js +685 -0
  351. package/src/geometries/ConeGeometry.js +2 -2
  352. package/src/geometries/CylinderGeometry.js +2 -2
  353. package/src/geometries/ExtrudeGeometry.js +71 -39
  354. package/src/geometries/LatheGeometry.js +1 -1
  355. package/src/lights/LightShadow.js +1 -1
  356. package/src/lights/webgpu/IESSpotLight.js +1 -1
  357. package/src/loaders/AnimationLoader.js +31 -0
  358. package/src/loaders/AudioLoader.js +31 -0
  359. package/src/loaders/BufferGeometryLoader.js +34 -0
  360. package/src/loaders/Cache.js +45 -0
  361. package/src/loaders/CompressedTextureLoader.js +36 -3
  362. package/src/loaders/CubeTextureLoader.js +45 -0
  363. package/src/loaders/DataTextureLoader.js +44 -3
  364. package/src/loaders/FileLoader.js +57 -1
  365. package/src/loaders/ImageBitmapLoader.js +57 -0
  366. package/src/loaders/ImageLoader.js +30 -0
  367. package/src/loaders/Loader.js +4 -6
  368. package/src/loaders/LoaderUtils.js +18 -36
  369. package/src/loaders/LoadingManager.js +142 -0
  370. package/src/loaders/MaterialLoader.js +57 -0
  371. package/src/loaders/ObjectLoader.js +53 -0
  372. package/src/loaders/TextureLoader.js +33 -0
  373. package/src/loaders/nodes/NodeLoader.js +6 -2
  374. package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
  375. package/src/loaders/nodes/NodeObjectLoader.js +3 -3
  376. package/src/materials/LineBasicMaterial.js +74 -1
  377. package/src/materials/LineDashedMaterial.js +52 -0
  378. package/src/materials/Material.js +18 -3
  379. package/src/materials/MeshBasicMaterial.js +165 -0
  380. package/src/materials/MeshDepthMaterial.js +93 -0
  381. package/src/materials/MeshDistanceMaterial.js +76 -0
  382. package/src/materials/MeshLambertMaterial.js +273 -0
  383. package/src/materials/MeshMatcapMaterial.js +142 -0
  384. package/src/materials/MeshNormalMaterial.js +113 -0
  385. package/src/materials/MeshPhongMaterial.js +288 -0
  386. package/src/materials/MeshPhysicalMaterial.js +292 -1
  387. package/src/materials/MeshStandardMaterial.js +297 -0
  388. package/src/materials/MeshToonMaterial.js +218 -0
  389. package/src/materials/PointsMaterial.js +89 -0
  390. package/src/materials/RawShaderMaterial.js +25 -0
  391. package/src/materials/ShaderMaterial.js +215 -6
  392. package/src/materials/ShadowMaterial.js +54 -0
  393. package/src/materials/SpriteMaterial.js +82 -0
  394. package/src/materials/nodes/Line2NodeMaterial.js +1 -1
  395. package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
  396. package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
  397. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  398. package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
  399. package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
  400. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  401. package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
  402. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
  403. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  404. package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
  405. package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
  406. package/src/materials/nodes/NodeMaterial.js +7 -3
  407. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  408. package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
  409. package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
  410. package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
  411. package/src/math/Color.js +1 -1
  412. package/src/math/MathUtils.js +223 -0
  413. package/src/nodes/Nodes.js +1 -0
  414. package/src/nodes/accessors/BatchNode.js +8 -8
  415. package/src/nodes/accessors/BuiltinNode.js +1 -1
  416. package/src/nodes/accessors/CubeTextureNode.js +1 -1
  417. package/src/nodes/accessors/InstanceNode.js +5 -5
  418. package/src/nodes/accessors/InstancedMeshNode.js +1 -1
  419. package/src/nodes/accessors/MorphNode.js +27 -23
  420. package/src/nodes/accessors/Normal.js +1 -1
  421. package/src/nodes/accessors/Object3DNode.js +12 -12
  422. package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
  423. package/src/nodes/accessors/ReferenceNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +46 -37
  425. package/src/nodes/accessors/StorageBufferNode.js +1 -1
  426. package/src/nodes/accessors/StorageTextureNode.js +3 -3
  427. package/src/nodes/accessors/Texture3DNode.js +1 -1
  428. package/src/nodes/accessors/TextureNode.js +25 -5
  429. package/src/nodes/accessors/TextureSizeNode.js +1 -1
  430. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  431. package/src/nodes/code/CodeNode.js +4 -4
  432. package/src/nodes/code/ExpressionNode.js +4 -4
  433. package/src/nodes/code/FunctionCallNode.js +23 -3
  434. package/src/nodes/code/ScriptableNode.js +4 -4
  435. package/src/nodes/code/ScriptableValueNode.js +2 -2
  436. package/src/nodes/core/AssignNode.js +1 -1
  437. package/src/nodes/core/AttributeNode.js +1 -1
  438. package/src/nodes/core/BypassNode.js +1 -1
  439. package/src/nodes/core/CacheNode.js +1 -1
  440. package/src/nodes/core/ContextNode.js +1 -1
  441. package/src/nodes/core/InputNode.js +2 -2
  442. package/src/nodes/core/Node.js +14 -2
  443. package/src/nodes/core/NodeBuilder.js +86 -14
  444. package/src/nodes/core/StackNode.js +5 -5
  445. package/src/nodes/core/StructNode.js +1 -1
  446. package/src/nodes/core/StructTypeNode.js +2 -2
  447. package/src/nodes/core/VarNode.js +2 -8
  448. package/src/nodes/core/VaryingNode.js +3 -3
  449. package/src/nodes/display/BlendModes.js +4 -4
  450. package/src/nodes/display/BumpMapNode.js +1 -1
  451. package/src/nodes/display/NormalMapNode.js +1 -1
  452. package/src/nodes/display/PosterizeNode.js +1 -1
  453. package/src/nodes/display/ScreenNode.js +3 -3
  454. package/src/nodes/display/ViewportDepthNode.js +2 -2
  455. package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
  456. package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
  457. package/src/nodes/display/ViewportTextureNode.js +4 -4
  458. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  459. package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
  460. package/src/nodes/geometry/RangeNode.js +1 -1
  461. package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
  462. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  463. package/src/nodes/gpgpu/ComputeNode.js +30 -2
  464. package/src/nodes/lighting/AnalyticLightNode.js +9 -1
  465. package/src/nodes/lighting/LightsNode.js +3 -3
  466. package/src/nodes/lighting/ShadowNode.js +1 -1
  467. package/src/nodes/math/ConditionalNode.js +20 -3
  468. package/src/nodes/math/MathNode.js +83 -78
  469. package/src/nodes/math/OperatorNode.js +171 -82
  470. package/src/nodes/pmrem/PMREMNode.js +4 -4
  471. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  472. package/src/nodes/tsl/TSLBase.js +2 -1
  473. package/src/nodes/tsl/TSLCore.js +115 -12
  474. package/src/nodes/utils/ArrayElementNode.js +3 -1
  475. package/src/nodes/utils/CubeMapNode.js +3 -3
  476. package/src/nodes/utils/DebugNode.js +70 -0
  477. package/src/nodes/utils/EquirectUVNode.js +2 -2
  478. package/src/nodes/utils/JoinNode.js +27 -2
  479. package/src/nodes/utils/LoopNode.js +58 -28
  480. package/src/nodes/utils/MaxMipLevelNode.js +1 -1
  481. package/src/nodes/utils/ReflectorNode.js +2 -2
  482. package/src/nodes/utils/RemapNode.js +6 -6
  483. package/src/nodes/utils/RotateNode.js +1 -1
  484. package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
  485. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  486. package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
  487. package/src/objects/BatchedMesh.js +4 -4
  488. package/src/objects/InstancedMesh.js +2 -2
  489. package/src/objects/LOD.js +1 -1
  490. package/src/objects/Skeleton.js +1 -1
  491. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  492. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  493. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  494. package/src/renderers/WebGLRenderTarget.js +19 -0
  495. package/src/renderers/WebGLRenderer.js +617 -79
  496. package/src/renderers/common/Animation.js +2 -2
  497. package/src/renderers/common/Attributes.js +2 -2
  498. package/src/renderers/common/Backend.js +12 -3
  499. package/src/renderers/common/Background.js +1 -0
  500. package/src/renderers/common/Color4.js +1 -1
  501. package/src/renderers/common/CubeRenderTarget.js +13 -0
  502. package/src/renderers/common/PostProcessing.js +2 -0
  503. package/src/renderers/common/QuadMesh.js +2 -0
  504. package/src/renderers/common/RenderList.js +2 -2
  505. package/src/renderers/common/RenderObject.js +1 -1
  506. package/src/renderers/common/RenderObjects.js +2 -2
  507. package/src/renderers/common/Renderer.js +52 -31
  508. package/src/renderers/common/XRManager.js +333 -10
  509. package/src/renderers/common/extras/PMREMGenerator.js +6 -0
  510. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  511. package/src/renderers/shaders/UniformsLib.js +1 -4
  512. package/src/renderers/shaders/UniformsUtils.js +1 -3
  513. package/src/renderers/webgl/WebGLBackground.js +4 -2
  514. package/src/renderers/webgl/WebGLState.js +9 -9
  515. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  516. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  517. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  518. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  519. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  520. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  521. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  522. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  523. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  524. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  525. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  526. package/src/renderers/webxr/WebXRController.js +87 -2
  527. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  528. package/src/renderers/webxr/WebXRManager.js +173 -1
  529. package/src/scenes/Scene.js +2 -1
  530. package/src/textures/CanvasTexture.js +28 -0
  531. package/src/textures/CompressedArrayTexture.js +57 -0
  532. package/src/textures/CompressedCubeTexture.js +29 -0
  533. package/src/textures/CompressedTexture.js +64 -6
  534. package/src/textures/CubeTexture.js +52 -4
  535. package/src/textures/Data3DTexture.js +77 -0
  536. package/src/textures/DataArrayTexture.js +93 -0
  537. package/src/textures/DataTexture.js +65 -0
  538. package/src/textures/DepthTexture.js +59 -9
  539. package/src/textures/FramebufferTexture.js +62 -0
  540. package/src/textures/Source.js +69 -0
  541. package/src/textures/Texture.js +5 -5
  542. package/src/textures/VideoFrameTexture.js +43 -6
  543. package/src/textures/VideoTexture.js +49 -4
  544. 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();
@@ -146,6 +151,40 @@ class XRManager extends EventDispatcher {
146
151
  */
147
152
  this._xrRenderTarget = null;
148
153
 
154
+ /**
155
+ * An array holding all the non-projection layers
156
+ *
157
+ * @private
158
+ * @type {Array<Object>}
159
+ * @default []
160
+ */
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;
187
+
149
188
  /**
150
189
  * The current animation context.
151
190
  *
@@ -229,7 +268,7 @@ class XRManager extends EventDispatcher {
229
268
  * The current XR reference space type.
230
269
  *
231
270
  * @private
232
- * @type {string}
271
+ * @type {XRReferenceSpaceType}
233
272
  * @default 'local-floor'
234
273
  */
235
274
  this._referenceSpaceType = 'local-floor';
@@ -439,7 +478,7 @@ class XRManager extends EventDispatcher {
439
478
  /**
440
479
  * Returns the reference space type.
441
480
  *
442
- * @return {string} The reference space type.
481
+ * @return {XRReferenceSpaceType} The reference space type.
443
482
  */
444
483
  getReferenceSpaceType() {
445
484
 
@@ -452,7 +491,7 @@ class XRManager extends EventDispatcher {
452
491
  *
453
492
  * This method can not be used during a XR session.
454
493
  *
455
- * @param {string} type - The reference space type.
494
+ * @param {XRReferenceSpaceType} type - The reference space type.
456
495
  */
457
496
  setReferenceSpaceType( type ) {
458
497
 
@@ -502,7 +541,7 @@ class XRManager extends EventDispatcher {
502
541
  /**
503
542
  * Returns the environment blend mode from the current XR session.
504
543
  *
505
- * @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.
506
545
  */
507
546
  getEnvironmentBlendMode() {
508
547
 
@@ -525,6 +564,190 @@ class XRManager extends EventDispatcher {
525
564
 
526
565
  }
527
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
+
528
751
  /**
529
752
  * Returns the current XR session.
530
753
  *
@@ -550,7 +773,9 @@ class XRManager extends EventDispatcher {
550
773
  const renderer = this._renderer;
551
774
  const backend = renderer.backend;
552
775
 
553
- const gl = renderer.getContext();
776
+ this._gl = renderer.getContext();
777
+ const gl = this._gl;
778
+ const attributes = gl.getContextAttributes();
554
779
 
555
780
  this._session = session;
556
781
 
@@ -602,12 +827,11 @@ class XRManager extends EventDispatcher {
602
827
 
603
828
  const glBinding = new XRWebGLBinding( session, gl );
604
829
  const glProjLayer = glBinding.createProjectionLayer( projectionlayerInit );
830
+ const layersArray = [ glProjLayer ];
605
831
 
606
832
  this._glBinding = glBinding;
607
833
  this._glProjLayer = glProjLayer;
608
834
 
609
- session.updateRenderState( { layers: [ glProjLayer ] } );
610
-
611
835
  renderer.setPixelRatio( 1 );
612
836
  renderer.setSize( glProjLayer.textureWidth, glProjLayer.textureHeight, false );
613
837
 
@@ -620,12 +844,39 @@ class XRManager extends EventDispatcher {
620
844
  colorSpace: renderer.outputColorSpace,
621
845
  depthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),
622
846
  stencilBuffer: renderer.stencil,
847
+ samples: attributes.antialias ? 4 : 0,
623
848
  resolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false ),
624
849
  resolveStencilBuffer: ( glProjLayer.ignoreDepthValues === false ),
625
850
  } );
626
851
 
627
852
  this._xrRenderTarget.hasExternalTextures = true;
628
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
+
629
880
  } else {
630
881
 
631
882
  // fallback to XRWebGLLayer
@@ -665,8 +916,6 @@ class XRManager extends EventDispatcher {
665
916
 
666
917
  this.setFoveation( this.getFoveation() );
667
918
 
668
- this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
669
-
670
919
  renderer._animation.setAnimationLoop( this._onAnimationFrame );
671
920
  renderer._animation.setContext( session );
672
921
  renderer._animation.start();
@@ -965,10 +1214,50 @@ function onSessionEnd() {
965
1214
 
966
1215
  renderer.backend.setXRTarget( null );
967
1216
  renderer.setOutputRenderTarget( null );
1217
+ renderer.setRenderTarget( null );
968
1218
 
969
1219
  this._session = null;
970
1220
  this._xrRenderTarget = null;
971
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
+
972
1261
  //
973
1262
 
974
1263
  this.isPresenting = false;
@@ -1055,6 +1344,40 @@ function onInputSourcesChange( event ) {
1055
1344
 
1056
1345
  }
1057
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
+
1058
1381
  function onAnimationFrame( time, frame ) {
1059
1382
 
1060
1383
  if ( frame === undefined ) return;
@@ -100,6 +100,11 @@ const _outputDirection = /*@__PURE__*/ vec3( _direction.x, _direction.y, _direct
100
100
  */
101
101
  class PMREMGenerator {
102
102
 
103
+ /**
104
+ * Constructs a new PMREM generator.
105
+ *
106
+ * @param {Renderer} renderer - The renderer.
107
+ */
103
108
  constructor( renderer ) {
104
109
 
105
110
  this._renderer = renderer;
@@ -641,6 +646,7 @@ class PMREMGenerator {
641
646
  * the poles) to approximate the orthogonally-separable blur. It is least
642
647
  * accurate at the poles, but still does a decent job.
643
648
  *
649
+ * @private
644
650
  * @param {RenderTarget} cubeUVRenderTarget - The cubemap render target.
645
651
  * @param {number} lodIn - The input level-of-detail.
646
652
  * @param {number} lodOut - The output level-of-detail.
@@ -14,9 +14,9 @@ class NodeBuilderState {
14
14
  /**
15
15
  * Constructs a new node builder state.
16
16
  *
17
- * @param {?string} vertexShader - The native vertex shader code.
18
- * @param {?string} fragmentShader - The native fragment shader code.
19
- * @param {?string} computeShader - The native compute shader code.
17
+ * @param {string} vertexShader - The native vertex shader code.
18
+ * @param {string} fragmentShader - The native fragment shader code.
19
+ * @param {string} computeShader - The native compute shader code.
20
20
  * @param {Array<NodeAttribute>} nodeAttributes - An array of node attributes.
21
21
  * @param {Array<BindGroup>} bindings - An array of bind groups.
22
22
  * @param {Array<Node>} updateNodes - An array of nodes that implement their `update()` method.
@@ -2,10 +2,7 @@ import { Color } from '../../math/Color.js';
2
2
  import { Vector2 } from '../../math/Vector2.js';
3
3
  import { Matrix3 } from '../../math/Matrix3.js';
4
4
 
5
- /**
6
- * Uniforms library for shared webgl shaders
7
- */
8
-
5
+ // Uniforms library for shared webgl shaders
9
6
  const UniformsLib = {
10
7
 
11
8
  common: {
@@ -1,8 +1,6 @@
1
1
  import { ColorManagement } from '../../math/ColorManagement.js';
2
2
 
3
- /**
4
- * Uniform Utilities
5
- */
3
+ // Uniform Utilities
6
4
 
7
5
  export function cloneUniforms( src ) {
8
6
 
@@ -101,7 +101,8 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
101
101
  side: BackSide,
102
102
  depthTest: false,
103
103
  depthWrite: false,
104
- fog: false
104
+ fog: false,
105
+ allowOverride: false
105
106
  } )
106
107
  );
107
108
 
@@ -180,7 +181,8 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
180
181
  side: FrontSide,
181
182
  depthTest: false,
182
183
  depthWrite: false,
183
- fog: false
184
+ fog: false,
185
+ allowOverride: false
184
186
  } )
185
187
  );
186
188
 
@@ -78,17 +78,17 @@ function WebGLState( gl, extensions ) {
78
78
  function DepthBuffer() {
79
79
 
80
80
  let locked = false;
81
- let reversed = false;
82
81
 
82
+ let currentReversed = false;
83
83
  let currentDepthMask = null;
84
84
  let currentDepthFunc = null;
85
85
  let currentDepthClear = null;
86
86
 
87
87
  return {
88
88
 
89
- setReversed: function ( value ) {
89
+ setReversed: function ( reversed ) {
90
90
 
91
- if ( reversed !== value ) {
91
+ if ( currentReversed !== reversed ) {
92
92
 
93
93
  const ext = extensions.get( 'EXT_clip_control' );
94
94
 
@@ -102,19 +102,19 @@ function WebGLState( gl, extensions ) {
102
102
 
103
103
  }
104
104
 
105
+ currentReversed = reversed;
106
+
105
107
  const oldDepth = currentDepthClear;
106
108
  currentDepthClear = null;
107
109
  this.setClear( oldDepth );
108
110
 
109
111
  }
110
112
 
111
- reversed = value;
112
-
113
113
  },
114
114
 
115
115
  getReversed: function () {
116
116
 
117
- return reversed;
117
+ return currentReversed;
118
118
 
119
119
  },
120
120
 
@@ -145,7 +145,7 @@ function WebGLState( gl, extensions ) {
145
145
 
146
146
  setFunc: function ( depthFunc ) {
147
147
 
148
- if ( reversed ) depthFunc = reversedFuncs[ depthFunc ];
148
+ if ( currentReversed ) depthFunc = reversedFuncs[ depthFunc ];
149
149
 
150
150
  if ( currentDepthFunc !== depthFunc ) {
151
151
 
@@ -213,7 +213,7 @@ function WebGLState( gl, extensions ) {
213
213
 
214
214
  if ( currentDepthClear !== depth ) {
215
215
 
216
- if ( reversed ) {
216
+ if ( currentReversed ) {
217
217
 
218
218
  depth = 1 - depth;
219
219
 
@@ -233,7 +233,7 @@ function WebGLState( gl, extensions ) {
233
233
  currentDepthMask = null;
234
234
  currentDepthFunc = null;
235
235
  currentDepthClear = null;
236
- reversed = false;
236
+ currentReversed = false;
237
237
 
238
238
  }
239
239
 
@@ -23,18 +23,24 @@ import WebGLTimestampQueryPool from './utils/WebGLTimestampQueryPool.js';
23
23
  */
24
24
  class WebGLBackend extends Backend {
25
25
 
26
+ /**
27
+ * WebGLBackend options.
28
+ *
29
+ * @typedef {Object} WebGLBackend~Options
30
+ * @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
31
+ * @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
32
+ * @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
33
+ * @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
34
+ * @property {boolean} [antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
35
+ * @property {number} [samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.
36
+ * @property {boolean} [forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
37
+ * @property {WebGL2RenderingContext} [context=undefined] - A WebGL 2 rendering context.
38
+ */
39
+
26
40
  /**
27
41
  * Constructs a new WebGPU backend.
28
42
  *
29
- * @param {Object} parameters - The configuration parameter.
30
- * @param {boolean} [parameters.logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
31
- * @param {boolean} [parameters.alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
32
- * @param {boolean} [parameters.depth=true] - Whether the default framebuffer should have a depth buffer or not.
33
- * @param {boolean} [parameters.stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
34
- * @param {boolean} [parameters.antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
35
- * @param {number} [parameters.samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.
36
- * @param {boolean} [parameters.forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
37
- * @param {WebGL2RenderingContext} [parameters.context=undefined] - A WebGL 2 rendering context.
43
+ * @param {WebGLBackend~Options} [parameters] - The configuration parameter.
38
44
  */
39
45
  constructor( parameters = {} ) {
40
46
 
@@ -161,14 +167,6 @@ class WebGLBackend extends Backend {
161
167
  */
162
168
  this.parallel = null;
163
169
 
164
- /**
165
- * Whether to track timestamps with a Timestamp Query API or not.
166
- *
167
- * @type {boolean}
168
- * @default false
169
- */
170
- this.trackTimestamp = ( parameters.trackTimestamp === true );
171
-
172
170
  /**
173
171
  * A reference to the current render context.
174
172
  *
@@ -360,16 +358,16 @@ class WebGLBackend extends Backend {
360
358
 
361
359
  this.set( renderTarget.depthTexture, { textureGPU: depthTexture, glInternalFormat: glInternalFormat } );
362
360
 
363
- renderTarget.autoAllocateDepthBuffer = false;
364
-
365
361
  // The multisample_render_to_texture extension doesn't work properly if there
366
362
  // are midframe flushes and an external depth texture.
367
- if ( this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) {
363
+ if ( ( this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) && renderTarget.autoAllocateDepthBuffer ) {
368
364
 
369
365
  console.warn( 'THREE.WebGLBackend: Render-to-texture extension was disabled because an external texture was provided' );
370
366
 
371
367
  }
372
368
 
369
+ renderTarget.autoAllocateDepthBuffer = false;
370
+
373
371
  }
374
372
 
375
373
  }
@@ -1886,13 +1884,14 @@ class WebGLBackend extends Backend {
1886
1884
  *
1887
1885
  * @param {Texture} srcTexture - The source texture.
1888
1886
  * @param {Texture} dstTexture - The destination texture.
1889
- * @param {?Vector4} [srcRegion=null] - The region of the source texture to copy.
1887
+ * @param {?(Box3|Box2)} [srcRegion=null] - The region of the source texture to copy.
1890
1888
  * @param {?(Vector2|Vector3)} [dstPosition=null] - The destination position of the copy.
1891
- * @param {number} [level=0] - The mip level to copy.
1889
+ * @param {number} [srcLevel=0] - The source mip level to copy from.
1890
+ * @param {number} [dstLevel=0] - The destination mip level to copy to.
1892
1891
  */
1893
- copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {
1892
+ copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {
1894
1893
 
1895
- this.textureUtils.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, level );
1894
+ this.textureUtils.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, srcLevel, dstLevel );
1896
1895
 
1897
1896
  }
1898
1897
 
@@ -1999,7 +1998,7 @@ class WebGLBackend extends Backend {
1999
1998
 
2000
1999
  } else {
2001
2000
 
2002
- if ( useMultisampledRTT ) {
2001
+ if ( hasExternalTextures && useMultisampledRTT ) {
2003
2002
 
2004
2003
  multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
2005
2004
 
@@ -2032,7 +2031,7 @@ class WebGLBackend extends Backend {
2032
2031
  textureData.renderTarget = descriptor.renderTarget;
2033
2032
  textureData.cacheKey = cacheKey; // required for copyTextureToTexture()
2034
2033
 
2035
- if ( useMultisampledRTT ) {
2034
+ if ( hasExternalTextures && useMultisampledRTT ) {
2036
2035
 
2037
2036
  multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
2038
2037