@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
@@ -321,7 +321,7 @@ class WGSLNodeBuilder extends NodeBuilder {
321
321
  */
322
322
  generateWrapFunction( texture ) {
323
323
 
324
- const functionName = `tsl_coord_${ wrapNames[ texture.wrapS ] }S_${ wrapNames[ texture.wrapT ] }_${texture.isData3DTexture ? '3d' : '2d'}T`;
324
+ const functionName = `tsl_coord_${ wrapNames[ texture.wrapS ] }S_${ wrapNames[ texture.wrapT ] }_${ texture.isData3DTexture ? '3d' : '2d' }T`;
325
325
 
326
326
  let nodeCode = wgslCodeCache[ functionName ];
327
327
 
@@ -331,7 +331,7 @@ class WGSLNodeBuilder extends NodeBuilder {
331
331
 
332
332
  // For 3D textures, use vec3f; for texture arrays, keep vec2f since array index is separate
333
333
  const coordType = texture.isData3DTexture ? 'vec3f' : 'vec2f';
334
- let code = `fn ${functionName}( coord : ${coordType} ) -> ${coordType} {\n\n\treturn ${coordType}(\n`;
334
+ let code = `fn ${ functionName }( coord : ${ coordType } ) -> ${ coordType } {\n\n\treturn ${ coordType }(\n`;
335
335
 
336
336
  const addWrapSnippet = ( wrap, axis ) => {
337
337
 
@@ -403,7 +403,7 @@ class WGSLNodeBuilder extends NodeBuilder {
403
403
 
404
404
  /**
405
405
  * Generates a WGSL variable that holds the texture dimension of the given texture.
406
- * It also returns information about the the number of layers (elements) of an arrayed
406
+ * It also returns information about the number of layers (elements) of an arrayed
407
407
  * texture as well as the cube face count of cube textures.
408
408
  *
409
409
  * @param {Texture} texture - The texture to generate the function for.
@@ -516,7 +516,7 @@ class WGSLNodeBuilder extends NodeBuilder {
516
516
  const textureDimension = this.generateTextureDimension( texture, textureProperty, levelSnippet );
517
517
 
518
518
  const vecType = texture.isData3DTexture ? 'vec3' : 'vec2';
519
- const coordSnippet = `${vecType}<u32>(${wrapFunction}(${uvSnippet}) * ${vecType}<f32>(${textureDimension}))`;
519
+ const coordSnippet = `${ vecType }<u32>(${ wrapFunction }(${ uvSnippet }) * ${ vecType }<f32>(${ textureDimension }))`;
520
520
 
521
521
  return this.generateTextureLoad( texture, textureProperty, coordSnippet, depthSnippet, levelSnippet );
522
522
 
@@ -71,11 +71,11 @@ class WebGPUAttributeUtils {
71
71
  // patch for INT16 and UINT16
72
72
  if ( attribute.normalized === false ) {
73
73
 
74
- if ( array.constructor === Int16Array ) {
74
+ if ( array.constructor === Int16Array || array.constructor === Int8Array ) {
75
75
 
76
76
  array = new Int32Array( array );
77
77
 
78
- } else if ( array.constructor === Uint16Array ) {
78
+ } else if ( array.constructor === Uint16Array || array.constructor === Uint8Array ) {
79
79
 
80
80
  array = new Uint32Array( array );
81
81
 
@@ -202,9 +202,11 @@ class WebGPUAttributeUtils {
202
202
 
203
203
  }
204
204
 
205
+ const bufferOffset = dataOffset * ( isTypedArray ? array.BYTES_PER_ELEMENT : 1 ); // bufferOffset is always in bytes
206
+
205
207
  device.queue.writeBuffer(
206
208
  buffer,
207
- 0,
209
+ bufferOffset,
208
210
  array,
209
211
  dataOffset,
210
212
  size
@@ -113,7 +113,7 @@ export const GPUTextureFormat = {
113
113
  // Packed 32-bit formats
114
114
  RGB9E5UFloat: 'rgb9e5ufloat',
115
115
  RGB10A2Unorm: 'rgb10a2unorm',
116
- RG11B10uFloat: 'rgb10a2unorm',
116
+ RG11B10UFloat: 'rgb10a2unorm',
117
117
 
118
118
  // 64-bit formats
119
119
 
@@ -877,7 +877,7 @@ class WebGPUTextureUtils {
877
877
  if ( format === GPUTextureFormat.BC1RGBAUnorm || format === GPUTextureFormat.BC1RGBAUnormSRGB ) return { byteLength: 8, width: 4, height: 4 }; // DXT1
878
878
  if ( format === GPUTextureFormat.BC2RGBAUnorm || format === GPUTextureFormat.BC2RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // DXT3
879
879
  if ( format === GPUTextureFormat.BC3RGBAUnorm || format === GPUTextureFormat.BC3RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // DXT5
880
- if ( format === GPUTextureFormat.BC4RUnorm || format === GPUTextureFormat.BC4RSNorm ) return { byteLength: 8, width: 4, height: 4 }; // RGTC1
880
+ if ( format === GPUTextureFormat.BC4RUnorm || format === GPUTextureFormat.BC4RSnorm ) return { byteLength: 8, width: 4, height: 4 }; // RGTC1
881
881
  if ( format === GPUTextureFormat.BC5RGUnorm || format === GPUTextureFormat.BC5RGSnorm ) return { byteLength: 16, width: 4, height: 4 }; // RGTC2
882
882
  if ( format === GPUTextureFormat.BC6HRGBUFloat || format === GPUTextureFormat.BC6HRGBFloat ) return { byteLength: 16, width: 4, height: 4 }; // BPTC (float)
883
883
  if ( format === GPUTextureFormat.BC7RGBAUnorm || format === GPUTextureFormat.BC7RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // BPTC (unorm)
@@ -3,16 +3,56 @@ import { Group } from '../../objects/Group.js';
3
3
 
4
4
  const _moveEvent = { type: 'move' };
5
5
 
6
+ /**
7
+ * Class for representing a XR controller with its
8
+ * different coordinate systems.
9
+ *
10
+ * @private
11
+ */
6
12
  class WebXRController {
7
13
 
14
+ /**
15
+ * Constructs a new XR controller.
16
+ */
8
17
  constructor() {
9
18
 
19
+ /**
20
+ * A group representing the target ray space
21
+ * of the XR controller.
22
+ *
23
+ * @private
24
+ * @type {?Group}
25
+ * @default null
26
+ */
10
27
  this._targetRay = null;
28
+
29
+ /**
30
+ * A group representing the grip space
31
+ * of the XR controller.
32
+ *
33
+ * @private
34
+ * @type {?Group}
35
+ * @default null
36
+ */
11
37
  this._grip = null;
38
+
39
+ /**
40
+ * A group representing the hand space
41
+ * of the XR controller.
42
+ *
43
+ * @private
44
+ * @type {?Group}
45
+ * @default null
46
+ */
12
47
  this._hand = null;
13
48
 
14
49
  }
15
50
 
51
+ /**
52
+ * Returns a group representing the hand space of the XR controller.
53
+ *
54
+ * @return {Group} A group representing the hand space of the XR controller.
55
+ */
16
56
  getHandSpace() {
17
57
 
18
58
  if ( this._hand === null ) {
@@ -30,6 +70,11 @@ class WebXRController {
30
70
 
31
71
  }
32
72
 
73
+ /**
74
+ * Returns a group representing the target ray space of the XR controller.
75
+ *
76
+ * @return {Group} A group representing the target ray space of the XR controller.
77
+ */
33
78
  getTargetRaySpace() {
34
79
 
35
80
  if ( this._targetRay === null ) {
@@ -48,6 +93,11 @@ class WebXRController {
48
93
 
49
94
  }
50
95
 
96
+ /**
97
+ * Returns a group representing the grip space of the XR controller.
98
+ *
99
+ * @return {Group} A group representing the grip space of the XR controller.
100
+ */
51
101
  getGripSpace() {
52
102
 
53
103
  if ( this._grip === null ) {
@@ -66,6 +116,13 @@ class WebXRController {
66
116
 
67
117
  }
68
118
 
119
+ /**
120
+ * Dispatches the given event to the groups representing
121
+ * the different coordinate spaces of the XR controller.
122
+ *
123
+ * @param {Object} event - The event to dispatch.
124
+ * @return {WebXRController} A reference to this instance.
125
+ */
69
126
  dispatchEvent( event ) {
70
127
 
71
128
  if ( this._targetRay !== null ) {
@@ -90,6 +147,12 @@ class WebXRController {
90
147
 
91
148
  }
92
149
 
150
+ /**
151
+ * Connects the controller with the given XR input source.
152
+ *
153
+ * @param {XRInputSource} inputSource - The input source.
154
+ * @return {WebXRController} A reference to this instance.
155
+ */
93
156
  connect( inputSource ) {
94
157
 
95
158
  if ( inputSource && inputSource.hand ) {
@@ -115,6 +178,12 @@ class WebXRController {
115
178
 
116
179
  }
117
180
 
181
+ /**
182
+ * Disconnects the controller from the given XR input source.
183
+ *
184
+ * @param {XRInputSource} inputSource - The input source.
185
+ * @return {WebXRController} A reference to this instance.
186
+ */
118
187
  disconnect( inputSource ) {
119
188
 
120
189
  this.dispatchEvent( { type: 'disconnected', data: inputSource } );
@@ -141,6 +210,16 @@ class WebXRController {
141
210
 
142
211
  }
143
212
 
213
+ /**
214
+ * Updates the controller with the given input source, XR frame and reference space.
215
+ * This updates the transformations of the groups that represent the different
216
+ * coordinate systems of the controller.
217
+ *
218
+ * @param {XRInputSource} inputSource - The input source.
219
+ * @param {XRFrame} frame - The XR frame.
220
+ * @param {XRReferenceSpace} referenceSpace - The reference space.
221
+ * @return {WebXRController} A reference to this instance.
222
+ */
144
223
  update( inputSource, frame, referenceSpace ) {
145
224
 
146
225
  let inputPose = null;
@@ -318,8 +397,14 @@ class WebXRController {
318
397
 
319
398
  }
320
399
 
321
- // private method
322
-
400
+ /**
401
+ * Returns a group representing the hand joint for the given input joint.
402
+ *
403
+ * @private
404
+ * @param {Group} hand - The group representing the hand space.
405
+ * @param {XRHandJoint} inputjoint - The XR frame.
406
+ * @return {Group} A group representing the hand joint for the given input joint.
407
+ */
323
408
  _getHandJoint( hand, inputjoint ) {
324
409
 
325
410
  if ( hand.joints[ inputjoint.jointName ] === undefined ) {
@@ -31,18 +31,53 @@ void main() {
31
31
 
32
32
  }`;
33
33
 
34
+ /**
35
+ * A XR module that manages the access to the Depth Sensing API.
36
+ */
34
37
  class WebXRDepthSensing {
35
38
 
39
+ /**
40
+ * Constructs a new depth sensing module.
41
+ */
36
42
  constructor() {
37
43
 
44
+ /**
45
+ * A texture representing the depth of the user's environment.
46
+ *
47
+ * @type {?Texture}
48
+ */
38
49
  this.texture = null;
50
+
51
+ /**
52
+ * A plane mesh for visualizing the depth texture.
53
+ *
54
+ * @type {?Mesh}
55
+ */
39
56
  this.mesh = null;
40
57
 
58
+ /**
59
+ * The depth near value.
60
+ *
61
+ * @type {number}
62
+ */
41
63
  this.depthNear = 0;
64
+
65
+ /**
66
+ * The depth near far.
67
+ *
68
+ * @type {number}
69
+ */
42
70
  this.depthFar = 0;
43
71
 
44
72
  }
45
73
 
74
+ /**
75
+ * Inits the depth sensing module
76
+ *
77
+ * @param {WebGLRenderer} renderer - The renderer.
78
+ * @param {XRWebGLDepthInformation} depthData - The XR depth data.
79
+ * @param {XRRenderState} renderState - The XR render state.
80
+ */
46
81
  init( renderer, depthData, renderState ) {
47
82
 
48
83
  if ( this.texture === null ) {
@@ -65,6 +100,12 @@ class WebXRDepthSensing {
65
100
 
66
101
  }
67
102
 
103
+ /**
104
+ * Returns a plane mesh that visualizes the depth texture.
105
+ *
106
+ * @param {ArrayCamera} cameraXR - The XR camera.
107
+ * @return {?Mesh} The plane mesh.
108
+ */
68
109
  getMesh( cameraXR ) {
69
110
 
70
111
  if ( this.texture !== null ) {
@@ -92,6 +133,9 @@ class WebXRDepthSensing {
92
133
 
93
134
  }
94
135
 
136
+ /**
137
+ * Resets the module
138
+ */
95
139
  reset() {
96
140
 
97
141
  this.texture = null;
@@ -99,6 +143,11 @@ class WebXRDepthSensing {
99
143
 
100
144
  }
101
145
 
146
+ /**
147
+ * Returns a texture representing the depth of the user's environment.
148
+ *
149
+ * @return {?Texture} The depth texture.
150
+ */
102
151
  getDepthTexture() {
103
152
 
104
153
  return this.texture;
@@ -12,8 +12,23 @@ import { DepthTexture } from '../../textures/DepthTexture.js';
12
12
  import { DepthFormat, DepthStencilFormat, RGBAFormat, UnsignedByteType, UnsignedIntType, UnsignedInt248Type } from '../../constants.js';
13
13
  import { WebXRDepthSensing } from './WebXRDepthSensing.js';
14
14
 
15
+ /**
16
+ * This class represents an abstraction of the WebXR Device API and is
17
+ * internally used by {@link WebGLRenderer}. `WebXRManager` also provides a public
18
+ * interface that allows users to enable/disable XR and perform XR related
19
+ * tasks like for instance retrieving controllers.
20
+ *
21
+ * @augments EventDispatcher
22
+ * @hideconstructor
23
+ */
15
24
  class WebXRManager extends EventDispatcher {
16
25
 
26
+ /**
27
+ * Constructs a new WebGL renderer.
28
+ *
29
+ * @param {WebGLRenderer} renderer - The renderer.
30
+ * @param {WebGL2RenderingContext} gl - The rendering context.
31
+ */
17
32
  constructor( renderer, gl ) {
18
33
 
19
34
  super();
@@ -65,11 +80,40 @@ class WebXRManager extends EventDispatcher {
65
80
 
66
81
  //
67
82
 
83
+ /**
84
+ * Whether the manager's XR camera should be automatically updated or not.
85
+ *
86
+ * @type {boolean}
87
+ * @default true
88
+ */
68
89
  this.cameraAutoUpdate = true;
90
+
91
+ /**
92
+ * This flag notifies the renderer to be ready for XR rendering. Set it to `true`
93
+ * if you are going to use XR in your app.
94
+ *
95
+ * @type {boolean}
96
+ * @default false
97
+ */
69
98
  this.enabled = false;
70
99
 
100
+ /**
101
+ * Whether XR presentation is active or not.
102
+ *
103
+ * @type {boolean}
104
+ * @readonly
105
+ * @default false
106
+ */
71
107
  this.isPresenting = false;
72
108
 
109
+ /**
110
+ * Returns a group representing the `target ray` space of the XR controller.
111
+ * Use this space for visualizing 3D objects that support the user in pointing
112
+ * tasks like UI interaction.
113
+ *
114
+ * @param {number} index - The index of the controller.
115
+ * @return {Group} A group representing the `target ray` space.
116
+ */
73
117
  this.getController = function ( index ) {
74
118
 
75
119
  let controller = controllers[ index ];
@@ -85,6 +129,21 @@ class WebXRManager extends EventDispatcher {
85
129
 
86
130
  };
87
131
 
132
+ /**
133
+ * Returns a group representing the `grip` space of the XR controller.
134
+ * Use this space for visualizing 3D objects that support the user in pointing
135
+ * tasks like UI interaction.
136
+ *
137
+ * Note: If you want to show something in the user's hand AND offer a
138
+ * pointing ray at the same time, you'll want to attached the handheld object
139
+ * to the group returned by `getControllerGrip()` and the ray to the
140
+ * group returned by `getController()`. The idea is to have two
141
+ * different groups in two different coordinate spaces for the same WebXR
142
+ * controller.
143
+ *
144
+ * @param {number} index - The index of the controller.
145
+ * @return {Group} A group representing the `grip` space.
146
+ */
88
147
  this.getControllerGrip = function ( index ) {
89
148
 
90
149
  let controller = controllers[ index ];
@@ -100,6 +159,14 @@ class WebXRManager extends EventDispatcher {
100
159
 
101
160
  };
102
161
 
162
+ /**
163
+ * Returns a group representing the `hand` space of the XR controller.
164
+ * Use this space for visualizing 3D objects that support the user in pointing
165
+ * tasks like UI interaction.
166
+ *
167
+ * @param {number} index - The index of the controller.
168
+ * @return {Group} A group representing the `hand` space.
169
+ */
103
170
  this.getHand = function ( index ) {
104
171
 
105
172
  let controller = controllers[ index ];
@@ -189,6 +256,13 @@ class WebXRManager extends EventDispatcher {
189
256
 
190
257
  }
191
258
 
259
+ /**
260
+ * Sets the framebuffer scale factor.
261
+ *
262
+ * This method can not be used during a XR session.
263
+ *
264
+ * @param {number} value - The framebuffer scale factor.
265
+ */
192
266
  this.setFramebufferScaleFactor = function ( value ) {
193
267
 
194
268
  framebufferScaleFactor = value;
@@ -201,6 +275,15 @@ class WebXRManager extends EventDispatcher {
201
275
 
202
276
  };
203
277
 
278
+ /**
279
+ * Sets the reference space type. Can be used to configure a spatial relationship with the user's physical
280
+ * environment. Depending on how the user moves in 3D space, setting an appropriate reference space can
281
+ * improve tracking. Default is `local-floor`.
282
+ *
283
+ * This method can not be used during a XR session.
284
+ *
285
+ * @param {string} value - The reference space type.
286
+ */
204
287
  this.setReferenceSpaceType = function ( value ) {
205
288
 
206
289
  referenceSpaceType = value;
@@ -213,42 +296,81 @@ class WebXRManager extends EventDispatcher {
213
296
 
214
297
  };
215
298
 
299
+ /**
300
+ * Returns the XR reference space.
301
+ *
302
+ * @return {XRReferenceSpace} The XR reference space.
303
+ */
216
304
  this.getReferenceSpace = function () {
217
305
 
218
306
  return customReferenceSpace || referenceSpace;
219
307
 
220
308
  };
221
309
 
310
+ /**
311
+ * Sets a custom XR reference space.
312
+ *
313
+ * @param {XRReferenceSpace} space - The XR reference space.
314
+ */
222
315
  this.setReferenceSpace = function ( space ) {
223
316
 
224
317
  customReferenceSpace = space;
225
318
 
226
319
  };
227
320
 
321
+ /**
322
+ * Returns the current base layer.
323
+ *
324
+ * @return {?(XRWebGLLayer|XRProjectionLayer)} The XR base layer.
325
+ */
228
326
  this.getBaseLayer = function () {
229
327
 
230
328
  return glProjLayer !== null ? glProjLayer : glBaseLayer;
231
329
 
232
330
  };
233
331
 
332
+ /**
333
+ * Returns the current XR binding.
334
+ *
335
+ * @return {?XRWebGLBinding} The XR binding.
336
+ */
234
337
  this.getBinding = function () {
235
338
 
236
339
  return glBinding;
237
340
 
238
341
  };
239
342
 
343
+ /**
344
+ * Returns the current XR frame.
345
+ *
346
+ * @return {?XRFrame} The XR frame. Returns `null` when used outside a XR session.
347
+ */
240
348
  this.getFrame = function () {
241
349
 
242
350
  return xrFrame;
243
351
 
244
352
  };
245
353
 
354
+ /**
355
+ * Returns the current XR session.
356
+ *
357
+ * @return {?XRSession} The XR session. Returns `null` when used outside a XR session.
358
+ */
246
359
  this.getSession = function () {
247
360
 
248
361
  return session;
249
362
 
250
363
  };
251
364
 
365
+ /**
366
+ * After a XR session has been requested usually with one of the `*Button` modules, it
367
+ * is injected into the renderer with this method. This method triggers the start of
368
+ * the actual XR rendering.
369
+ *
370
+ * @async
371
+ * @param {XRSession} value - The XR session to set.
372
+ * @return {Promise} A Promise that resolves when the session has been set.
373
+ */
252
374
  this.setSession = async function ( value ) {
253
375
 
254
376
  session = value;
@@ -373,6 +495,11 @@ class WebXRManager extends EventDispatcher {
373
495
 
374
496
  };
375
497
 
498
+ /**
499
+ * Returns the environment blend mode from the current XR session.
500
+ *
501
+ * @return {'opaque'|'additive'|'alpha-blend'|undefined} The environment blend mode. Returns `undefined` when used outside of a XR session.
502
+ */
376
503
  this.getEnvironmentBlendMode = function () {
377
504
 
378
505
  if ( session !== null ) {
@@ -383,6 +510,11 @@ class WebXRManager extends EventDispatcher {
383
510
 
384
511
  };
385
512
 
513
+ /**
514
+ * Returns the current depth texture computed via depth sensing.
515
+ *
516
+ * @return {?Texture} The depth texture.
517
+ */
386
518
  this.getDepthTexture = function () {
387
519
 
388
520
  return depthSensing.getDepthTexture();
@@ -549,6 +681,15 @@ class WebXRManager extends EventDispatcher {
549
681
 
550
682
  }
551
683
 
684
+ /**
685
+ * Updates the state of the XR camera. Use this method on app level if you
686
+ * set cameraAutoUpdate` to `false`. The method requires the non-XR
687
+ * camera of the scene as a parameter. The passed in camera's transformation
688
+ * is automatically adjusted to the position of the XR camera when calling
689
+ * this method.
690
+ *
691
+ * @param {Camera} camera - The camera.
692
+ */
552
693
  this.updateCamera = function ( camera ) {
553
694
 
554
695
  if ( session === null ) return;
@@ -644,12 +785,27 @@ class WebXRManager extends EventDispatcher {
644
785
 
645
786
  }
646
787
 
788
+ /**
789
+ * Returns an instance of {@link ArrayCamera} which represents the XR camera
790
+ * of the active XR session. For each view it holds a separate camera object.
791
+ *
792
+ * The camera's `fov` is currently not used and does not reflect the fov of
793
+ * the XR camera. If you need the fov on app level, you have to compute in
794
+ * manually from the XR camera's projection matrices.
795
+ *
796
+ * @return {ArrayCamera} The XR camera.
797
+ */
647
798
  this.getCamera = function () {
648
799
 
649
800
  return cameraXR;
650
801
 
651
802
  };
652
803
 
804
+ /**
805
+ * Returns the amount of foveation used by the XR compositor for the projection layer.
806
+ *
807
+ * @return {number} The amount of foveation.
808
+ */
653
809
  this.getFoveation = function () {
654
810
 
655
811
  if ( glProjLayer === null && glBaseLayer === null ) {
@@ -662,6 +818,12 @@ class WebXRManager extends EventDispatcher {
662
818
 
663
819
  };
664
820
 
821
+ /**
822
+ * Sets the foveation value.
823
+ *
824
+ * @param {number} value - A number in the range `[0,1]` where `0` means no foveation (full resolution)
825
+ * and `1` means maximum foveation (the edges render at lower resolution).
826
+ */
665
827
  this.setFoveation = function ( value ) {
666
828
 
667
829
  // 0 = no foveation = full resolution
@@ -683,12 +845,22 @@ class WebXRManager extends EventDispatcher {
683
845
 
684
846
  };
685
847
 
848
+ /**
849
+ * Returns `true` if depth sensing is supported.
850
+ *
851
+ * @return {boolean} Whether depth sensing is supported or not.
852
+ */
686
853
  this.hasDepthSensing = function () {
687
854
 
688
855
  return depthSensing.texture !== null;
689
856
 
690
857
  };
691
858
 
859
+ /**
860
+ * Returns the depth sensing mesh.
861
+ *
862
+ * @return {Mesh} The depth sensing mesh.
863
+ */
692
864
  this.getDepthSensingMesh = function () {
693
865
 
694
866
  return depthSensing.getMesh( cameraXR );
@@ -747,7 +919,7 @@ class WebXRManager extends EventDispatcher {
747
919
  renderer.setRenderTargetTextures(
748
920
  newRenderTarget,
749
921
  glSubImage.colorTexture,
750
- glProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture );
922
+ glSubImage.depthStencilTexture );
751
923
 
752
924
  renderer.setRenderTarget( newRenderTarget );
753
925
 
@@ -104,7 +104,8 @@ class Scene extends Object3D {
104
104
  this.environmentRotation = new Euler();
105
105
 
106
106
  /**
107
- * Forces everything in the scene to be rendered with the defined material.
107
+ * Forces everything in the scene to be rendered with the defined material. It is possible
108
+ * to exclude materials from override by setting {@link Material#allowOverride} to `false`.
108
109
  *
109
110
  * @type {?Material}
110
111
  * @default null
@@ -1,11 +1,39 @@
1
1
  import { Texture } from './Texture.js';
2
2
 
3
+ /**
4
+ * Creates a texture from a canvas element.
5
+ *
6
+ * This is almost the same as the base texture class, except that it sets {@link Texture#needsUpdate}
7
+ * to `true` immediately since a canvas can directly be used for rendering.
8
+ *
9
+ * @augments Texture
10
+ */
3
11
  class CanvasTexture extends Texture {
4
12
 
13
+ /**
14
+ * Constructs a new texture.
15
+ *
16
+ * @param {HTMLCanvasElement} [canvas] - The HTML canvas element.
17
+ * @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.
18
+ * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
19
+ * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
20
+ * @param {number} [magFilter=LinearFilter] - The mag filter value.
21
+ * @param {number} [minFilter=LinearMipmapLinearFilter] - The min filter value.
22
+ * @param {number} [format=RGBAFormat] - The texture format.
23
+ * @param {number} [type=UnsignedByteType] - The texture type.
24
+ * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
25
+ */
5
26
  constructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {
6
27
 
7
28
  super( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
8
29
 
30
+ /**
31
+ * This flag can be used for type testing.
32
+ *
33
+ * @type {boolean}
34
+ * @readonly
35
+ * @default true
36
+ */
9
37
  this.isCanvasTexture = true;
10
38
 
11
39
  this.needsUpdate = true;