@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
@@ -4,18 +4,77 @@ import { XRHandMeshModel } from './XRHandMeshModel.js';
4
4
  const TOUCH_RADIUS = 0.01;
5
5
  const POINTING_JOINT = 'index-finger-tip';
6
6
 
7
+ /**
8
+ * Represents an Oculus hand model.
9
+ *
10
+ * @augments Object3D
11
+ */
7
12
  class OculusHandModel extends Object3D {
8
13
 
14
+ /**
15
+ * Constructs a new Oculus hand model.
16
+ *
17
+ * @param {Group} controller - The hand controller.
18
+ * @param {?Loader} [loader=null] - A loader that is used to load hand models.
19
+ * @param {?Function} [onLoad=null] - A callback that is executed when a hand model has been loaded.
20
+ */
9
21
  constructor( controller, loader = null, onLoad = null ) {
10
22
 
11
23
  super();
12
24
 
25
+ /**
26
+ * The hand controller.
27
+ *
28
+ * @type {Group}
29
+ */
13
30
  this.controller = controller;
31
+
32
+ /**
33
+ * The motion controller.
34
+ *
35
+ * @type {?MotionController}
36
+ * @default null
37
+ */
14
38
  this.motionController = null;
39
+
40
+ /**
41
+ * The model's environment map.
42
+ *
43
+ * @type {?Texture}
44
+ * @default null
45
+ */
15
46
  this.envMap = null;
47
+
48
+ /**
49
+ * A loader that is used to load hand models.
50
+ *
51
+ * @type {?Loader}
52
+ * @default null
53
+ */
16
54
  this.loader = loader;
55
+
56
+ /**
57
+ * A callback that is executed when a hand model has been loaded.
58
+ *
59
+ * @type {?Function}
60
+ * @default null
61
+ */
17
62
  this.onLoad = onLoad;
18
63
 
64
+ /**
65
+ * The path to the model repository.
66
+ *
67
+ * @type {?string}
68
+ * @default null
69
+ */
70
+ this.path = null;
71
+
72
+ /**
73
+ * The model mesh.
74
+ *
75
+ * @type {Mesh}
76
+ * @default null
77
+ */
19
78
  this.mesh = null;
20
79
 
21
80
  controller.addEventListener( 'connected', ( event ) => {
@@ -41,6 +100,12 @@ class OculusHandModel extends Object3D {
41
100
 
42
101
  }
43
102
 
103
+ /**
104
+ * Overwritten with a custom implementation. Makes sure the motion controller updates the mesh.
105
+ *
106
+ * @param {boolean} [force=false] - When set to `true`, a recomputation of world matrices is forced even
107
+ * when {@link Object3D#matrixWorldAutoUpdate} is set to `false`.
108
+ */
44
109
  updateMatrixWorld( force ) {
45
110
 
46
111
  super.updateMatrixWorld( force );
@@ -53,6 +118,11 @@ class OculusHandModel extends Object3D {
53
118
 
54
119
  }
55
120
 
121
+ /**
122
+ * Returns the pointer position which is the position of the index finger tip.
123
+ *
124
+ * @return {Vector3|null} The pointer position. Returns `null` if not index finger tip joint was found.
125
+ */
56
126
  getPointerPosition() {
57
127
 
58
128
  const indexFingerTip = this.controller.joints[ POINTING_JOINT ];
@@ -68,6 +138,13 @@ class OculusHandModel extends Object3D {
68
138
 
69
139
  }
70
140
 
141
+ /**
142
+ * Returns `true` if the current pointer position (the index finger tip) intersections
143
+ * with the given box object.
144
+ *
145
+ * @param {Mesh} boxObject - The box object.
146
+ * @return {boolean} Whether an intersection was found or not.
147
+ */
71
148
  intersectBoxObject( boxObject ) {
72
149
 
73
150
  const pointerPosition = this.getPointerPosition();
@@ -85,6 +162,12 @@ class OculusHandModel extends Object3D {
85
162
 
86
163
  }
87
164
 
165
+ /**
166
+ * Executed actions depending on the interaction state with
167
+ * the given button.
168
+ *
169
+ * @param {Object} button - The button.
170
+ */
88
171
  checkButton( button ) {
89
172
 
90
173
  if ( this.intersectBoxObject( button ) ) {
@@ -19,13 +19,35 @@ const ZAXIS = /* @__PURE__ */ new Vector3( 0, 0, 1 );
19
19
  const CURSOR_RADIUS = 0.02;
20
20
  const CURSOR_MAX_DISTANCE = 1.5;
21
21
 
22
+ /**
23
+ * Represents an Oculus hand pointer model.
24
+ *
25
+ * @augments Object3D
26
+ */
22
27
  class OculusHandPointerModel extends Object3D {
23
28
 
29
+ /**
30
+ * Constructs a new Oculus hand model.
31
+ *
32
+ * @param {Group} hand - The hand controller.
33
+ * @param {Group} controller - The WebXR controller in target ray space.
34
+ */
24
35
  constructor( hand, controller ) {
25
36
 
26
37
  super();
27
38
 
39
+ /**
40
+ * The hand controller.
41
+ *
42
+ * @type {Group}
43
+ */
28
44
  this.hand = hand;
45
+
46
+ /**
47
+ * The WebXR controller in target ray space.
48
+ *
49
+ * @type {Group}
50
+ */
29
51
  this.controller = controller;
30
52
 
31
53
  // Unused
@@ -33,15 +55,61 @@ class OculusHandPointerModel extends Object3D {
33
55
  this.envMap = null;
34
56
  this.mesh = null;
35
57
 
58
+ /**
59
+ * The pointer geometry.
60
+ *
61
+ * @type {?BufferGeometry}
62
+ * @default null
63
+ */
36
64
  this.pointerGeometry = null;
65
+
66
+ /**
67
+ * The pointer mesh.
68
+ *
69
+ * @type {?Mesh}
70
+ * @default null
71
+ */
37
72
  this.pointerMesh = null;
73
+
74
+ /**
75
+ * The pointer object that holds the pointer mesh.
76
+ *
77
+ * @type {?Object3D}
78
+ * @default null
79
+ */
38
80
  this.pointerObject = null;
39
81
 
82
+ /**
83
+ * Whether the model is pinched or not.
84
+ *
85
+ * @type {?boolean}
86
+ * @default false
87
+ */
40
88
  this.pinched = false;
89
+
90
+ /**
91
+ * Whether the model is attached or not.
92
+ *
93
+ * @type {boolean}
94
+ * @default false
95
+ */
41
96
  this.attached = false;
42
97
 
98
+ /**
99
+ * The cursor object.
100
+ *
101
+ * @type {?Mesh}
102
+ * @default null
103
+ */
43
104
  this.cursorObject = null;
44
105
 
106
+ /**
107
+ * The internal raycaster used for detecting
108
+ * intersections.
109
+ *
110
+ * @type {?Raycaster}
111
+ * @default null
112
+ */
45
113
  this.raycaster = null;
46
114
 
47
115
  this._onConnected = this._onConnected.bind( this );
@@ -143,6 +211,9 @@ class OculusHandPointerModel extends Object3D {
143
211
 
144
212
  }
145
213
 
214
+ /**
215
+ * Creates a pointer mesh and adds it to this model.
216
+ */
146
217
  createPointer() {
147
218
 
148
219
  let i, j;
@@ -317,6 +388,12 @@ class OculusHandPointerModel extends Object3D {
317
388
 
318
389
  }
319
390
 
391
+ /**
392
+ * Overwritten with a custom implementation. Makes sure the internal pointer and raycaster are updated.
393
+ *
394
+ * @param {boolean} [force=false] - When set to `true`, a recomputation of world matrices is forced even
395
+ * when {@link Object3D#matrixWorldAutoUpdate} is set to `false`.
396
+ */
320
397
  updateMatrixWorld( force ) {
321
398
 
322
399
  super.updateMatrixWorld( force );
@@ -329,24 +406,47 @@ class OculusHandPointerModel extends Object3D {
329
406
 
330
407
  }
331
408
 
409
+ /**
410
+ * Returns `true` is the model is pinched.
411
+ *
412
+ * @return {boolean} Whether the model is pinched or not.
413
+ */
332
414
  isPinched() {
333
415
 
334
416
  return this.pinched;
335
417
 
336
418
  }
337
419
 
420
+ /**
421
+ * Sets the attached state.
422
+ *
423
+ * @param {boolean} attached - Whether the model is attached or not.
424
+ */
338
425
  setAttached( attached ) {
339
426
 
340
427
  this.attached = attached;
341
428
 
342
429
  }
343
430
 
431
+ /**
432
+ * Returns `true` is the model is attached.
433
+ *
434
+ * @return {boolean} Whether the model is attached or not.
435
+ */
344
436
  isAttached() {
345
437
 
346
438
  return this.attached;
347
439
 
348
440
  }
349
441
 
442
+ /**
443
+ * Performs an intersection test with the model's raycaster and the given object.
444
+ *
445
+ * @param {Object3D} object - The 3D object to check for intersection with the ray.
446
+ * @param {boolean} [recursive=true] - If set to `true`, it also checks all descendants.
447
+ * Otherwise it only checks intersection with the object.
448
+ * @return {Array<Raycaster~Intersection>} An array holding the intersection points.
449
+ */
350
450
  intersectObject( object, recursive = true ) {
351
451
 
352
452
  if ( this.raycaster ) {
@@ -357,6 +457,14 @@ class OculusHandPointerModel extends Object3D {
357
457
 
358
458
  }
359
459
 
460
+ /**
461
+ * Performs an intersection test with the model's raycaster and the given objects.
462
+ *
463
+ * @param {Array<Object3D>} objects - The 3D objects to check for intersection with the ray.
464
+ * @param {boolean} [recursive=true] - If set to `true`, it also checks all descendants.
465
+ * Otherwise it only checks intersection with the object.
466
+ * @return {Array<Raycaster~Intersection>} An array holding the intersection points.
467
+ */
360
468
  intersectObjects( objects, recursive = true ) {
361
469
 
362
470
  if ( this.raycaster ) {
@@ -367,6 +475,14 @@ class OculusHandPointerModel extends Object3D {
367
475
 
368
476
  }
369
477
 
478
+ /**
479
+ * Checks for intersections between the model's raycaster and the given objects. The method
480
+ * updates the cursor object to the intersection point.
481
+ *
482
+ * @param {Array<Object3D>} objects - The 3D objects to check for intersection with the ray.
483
+ * @param {boolean} [recursive=false] - If set to `true`, it also checks all descendants.
484
+ * Otherwise it only checks intersection with the object.
485
+ */
370
486
  checkIntersections( objects, recursive = false ) {
371
487
 
372
488
  if ( this.raycaster && ! this.attached ) {
@@ -389,6 +505,11 @@ class OculusHandPointerModel extends Object3D {
389
505
 
390
506
  }
391
507
 
508
+ /**
509
+ * Sets the cursor to the given distance.
510
+ *
511
+ * @param {number} distance - The distance to set the cursor to.
512
+ */
392
513
  setCursor( distance ) {
393
514
 
394
515
  const direction = new Vector3( 0, 0, - 1 );
@@ -400,6 +521,10 @@ class OculusHandPointerModel extends Object3D {
400
521
 
401
522
  }
402
523
 
524
+ /**
525
+ * Frees the GPU-related resources allocated by this instance. Call this
526
+ * method whenever this instance is no longer used in your app.
527
+ */
403
528
  dispose() {
404
529
 
405
530
  this._onDisconnected();
@@ -1,5 +1,16 @@
1
1
  import { DoubleSide, Mesh, MeshBasicMaterial, PlaneGeometry, Texture } from 'three';
2
2
 
3
+ /** @module Text2D */
4
+
5
+ /**
6
+ * A helper function for creating a simple plane mesh
7
+ * that can be used as a text label. The mesh's material
8
+ * holds a canvas texture that displays the given message.
9
+ *
10
+ * @param {string} message - The message to display.
11
+ * @param {number} height - The labels height.
12
+ * @return {Mesh} The plane mesh representing a text label.
13
+ */
3
14
  function createText( message, height ) {
4
15
 
5
16
  const canvas = document.createElement( 'canvas' );
@@ -1,5 +1,23 @@
1
+ /**
2
+ * A utility class for creating a button that allows to initiate
3
+ * immersive VR sessions based on WebXR. The button can be created
4
+ * with a factory method and then appended ot the website's DOM.
5
+ *
6
+ * ```js
7
+ * document.body.appendChild( VRButton.createButton( renderer ) );
8
+ * ```
9
+ *
10
+ * @hideconstructor
11
+ */
1
12
  class VRButton {
2
13
 
14
+ /**
15
+ * Constructs a new VR button.
16
+ *
17
+ * @param {WebGLRenderer|WebGPURenderer} renderer - The renderer.
18
+ * @param {XRSessionInit} [sessionInit] - The a configuration object for the AR session.
19
+ * @return {HTMLElement} The button or an error message if `immersive-ar` isn't supported.
20
+ */
3
21
  static createButton( renderer, sessionInit = {} ) {
4
22
 
5
23
  const button = document.createElement( 'button' );
@@ -207,6 +225,11 @@ class VRButton {
207
225
 
208
226
  }
209
227
 
228
+ /**
229
+ * Registers a `sessiongranted` event listener. When a session is granted, the {@link VRButton#xrSessionIsGranted}
230
+ * flag will evaluate to `true`. This method is automatically called by the module itself so there
231
+ * should be no need to use it on app level.
232
+ */
210
233
  static registerSessionGrantedListener() {
211
234
 
212
235
  if ( typeof navigator !== 'undefined' && 'xr' in navigator ) {
@@ -227,6 +250,13 @@ class VRButton {
227
250
 
228
251
  }
229
252
 
253
+ /**
254
+ * Whether a XR session has been granted or not.
255
+ *
256
+ * @static
257
+ * @type {boolean}
258
+ * @default false
259
+ */
230
260
  VRButton.xrSessionIsGranted = false;
231
261
  VRButton.registerSessionGrantedListener();
232
262
 
@@ -1,5 +1,27 @@
1
+ /**
2
+ * A utility class for creating a button that allows to initiate
3
+ * immersive XR sessions based on WebXR. The button can be created
4
+ * with a factory method and then appended ot the website's DOM.
5
+ *
6
+ * ```js
7
+ * document.body.appendChild( XRButton.createButton( renderer ) );
8
+ * ```
9
+ *
10
+ * Compared to {@link ARButton} and {@link VRButton}, this class will
11
+ * try to offer an immersive AR session first. If the device does not
12
+ * support this type of session, it uses an immersive VR session.
13
+ *
14
+ * @hideconstructor
15
+ */
1
16
  class XRButton {
2
17
 
18
+ /**
19
+ * Constructs a new XR button.
20
+ *
21
+ * @param {WebGLRenderer|WebGPURenderer} renderer - The renderer.
22
+ * @param {XRSessionInit} [sessionInit] - The a configuration object for the AR session.
23
+ * @return {HTMLElement} The button or an error message if WebXR isn't supported.
24
+ */
3
25
  static createButton( renderer, sessionInit = {} ) {
4
26
 
5
27
  const button = document.createElement( 'button' );
@@ -16,17 +16,44 @@ import {
16
16
  const DEFAULT_PROFILES_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles';
17
17
  const DEFAULT_PROFILE = 'generic-trigger';
18
18
 
19
+ /**
20
+ * Represents a XR controller model.
21
+ *
22
+ * @augments Object3D
23
+ */
19
24
  class XRControllerModel extends Object3D {
20
25
 
26
+ /**
27
+ * Constructs a new XR controller model.
28
+ */
21
29
  constructor() {
22
30
 
23
31
  super();
24
32
 
33
+ /**
34
+ * The motion controller.
35
+ *
36
+ * @type {?MotionController}
37
+ * @default null
38
+ */
25
39
  this.motionController = null;
40
+
41
+ /**
42
+ * The controller's environment map.
43
+ *
44
+ * @type {?Texture}
45
+ * @default null
46
+ */
26
47
  this.envMap = null;
27
48
 
28
49
  }
29
50
 
51
+ /**
52
+ * Sets an environment map that is applied to the controller model.
53
+ *
54
+ * @param {?Texture} envMap - The environment map to apply.
55
+ * @return {XRControllerModel} A reference to this instance.
56
+ */
30
57
  setEnvironmentMap( envMap ) {
31
58
 
32
59
  if ( this.envMap == envMap ) {
@@ -52,10 +79,11 @@ class XRControllerModel extends Object3D {
52
79
  }
53
80
 
54
81
  /**
55
- * Polls data from the XRInputSource and updates the model's components to match
56
- * the real world data
82
+ * Overwritten with a custom implementation. Polls data from the XRInputSource and updates the
83
+ * model's components to match the real world data.
57
84
  *
58
- * @param {boolean} force
85
+ * @param {boolean} [force=false] - When set to `true`, a recomputation of world matrices is forced even
86
+ * when {@link Object3D#matrixWorldAutoUpdate} is set to `false`.
59
87
  */
60
88
  updateMatrixWorld( force ) {
61
89
 
@@ -112,6 +140,7 @@ class XRControllerModel extends Object3D {
112
140
  * saves them to the motionController components for use in the frame loop. When
113
141
  * touchpads are found, attaches a touch dot to them.
114
142
  *
143
+ * @private
115
144
  * @param {MotionController} motionController
116
145
  * @param {Object3D} scene
117
146
  */
@@ -209,13 +238,56 @@ function addAssetSceneToControllerModel( controllerModel, scene ) {
209
238
 
210
239
  }
211
240
 
241
+ /**
242
+ * Allows to create controller models for WebXR controllers that can be added as a visual
243
+ * representation to your scene. `XRControllerModelFactory` will automatically fetch controller
244
+ * models that match what the user is holding as closely as possible. The models should be
245
+ * attached to the object returned from getControllerGrip in order to match the orientation of
246
+ * the held device.
247
+ *
248
+ * This module depends on the [motion-controllers]{@link https://github.com/immersive-web/webxr-input-profiles/blob/main/packages/motion-controllers/README.md}
249
+ * third-part library.
250
+ *
251
+ * ```js
252
+ * const controllerModelFactory = new XRControllerModelFactory();
253
+ *
254
+ * const controllerGrip = renderer.xr.getControllerGrip( 0 );
255
+ * controllerGrip.add( controllerModelFactory.createControllerModel( controllerGrip ) );
256
+ * scene.add( controllerGrip );
257
+ * ```
258
+ */
212
259
  class XRControllerModelFactory {
213
260
 
261
+ /**
262
+ * Constructs a new XR controller model factory.
263
+ *
264
+ * @param {?GLTFLoader} [gltfLoader=null] - A glTF loader that is used to load controller models.
265
+ * @param {?Function} [onLoad=null] - A callback that is executed when a controller model has been loaded.
266
+ */
214
267
  constructor( gltfLoader = null, onLoad = null ) {
215
268
 
269
+ /**
270
+ * A glTF loader that is used to load controller models.
271
+ *
272
+ * @type {?GLTFLoader}
273
+ * @default null
274
+ */
216
275
  this.gltfLoader = gltfLoader;
276
+
277
+ /**
278
+ * The path to the model repository.
279
+ *
280
+ * @type {string}
281
+ */
217
282
  this.path = DEFAULT_PROFILES_PATH;
218
283
  this._assetCache = {};
284
+
285
+ /**
286
+ * A callback that is executed when a controller model has been loaded.
287
+ *
288
+ * @type {?Function}
289
+ * @default null
290
+ */
219
291
  this.onLoad = onLoad;
220
292
 
221
293
  // If a GLTFLoader wasn't supplied to the constructor create a new one.
@@ -227,6 +299,12 @@ class XRControllerModelFactory {
227
299
 
228
300
  }
229
301
 
302
+ /**
303
+ * Sets the path to the model repository.
304
+ *
305
+ * @param {string} path - The path to set.
306
+ * @return {XRControllerModelFactory} A reference to this instance.
307
+ */
230
308
  setPath( path ) {
231
309
 
232
310
  this.path = path;
@@ -235,6 +313,12 @@ class XRControllerModelFactory {
235
313
 
236
314
  }
237
315
 
316
+ /**
317
+ * Creates a controller model for the given WebXR controller.
318
+ *
319
+ * @param {Group} controller - The controller.
320
+ * @return {XRControllerModel} The XR controller model.
321
+ */
238
322
  createControllerModel( controller ) {
239
323
 
240
324
  const controllerModel = new XRControllerModel();
@@ -133,22 +133,49 @@ class SessionLightProbe {
133
133
 
134
134
  }
135
135
 
136
+ /**
137
+ * This class can be used to represent the environmental light of
138
+ * a XR session. It relies on the WebXR Lighting Estimation API.
139
+ *
140
+ * @augments Group
141
+ */
136
142
  export class XREstimatedLight extends Group {
137
143
 
144
+ /**
145
+ * Constructs a new light.
146
+ *
147
+ * @param {WebGLRenderer} renderer - The renderer.
148
+ * @param {boolean} [environmentEstimation=true] - Whether to use environment estimation or not.
149
+ */
138
150
  constructor( renderer, environmentEstimation = true ) {
139
151
 
140
152
  super();
141
153
 
154
+ /**
155
+ * The light probe that represents the estimated light.
156
+ *
157
+ * @type {LightProbe}
158
+ */
142
159
  this.lightProbe = new LightProbe();
143
160
  this.lightProbe.intensity = 0;
144
161
  this.add( this.lightProbe );
145
162
 
163
+ /**
164
+ * Represents the primary light from the XR environment.
165
+ *
166
+ * @type {DirectionalLight}
167
+ */
146
168
  this.directionalLight = new DirectionalLight();
147
169
  this.directionalLight.intensity = 0;
148
170
  this.add( this.directionalLight );
149
171
 
150
- // Will be set to a cube map in the SessionLightProbe if environment estimation is
151
- // available and requested.
172
+ /**
173
+ * Will be set to a cube map in the SessionLightProbe if environment estimation is
174
+ * available and requested.
175
+ *
176
+ * @type {?Texture}
177
+ * @default null
178
+ */
152
179
  this.environment = null;
153
180
 
154
181
  let sessionLightProbe = null;
@@ -198,7 +225,10 @@ export class XREstimatedLight extends Group {
198
225
 
199
226
  } );
200
227
 
201
- // Done inline to provide access to sessionLightProbe.
228
+ /**
229
+ * Frees the GPU-related resources allocated by this instance. Call this
230
+ * method whenever this instance is no longer used in your app.
231
+ */
202
232
  this.dispose = () => {
203
233
 
204
234
  if ( sessionLightProbe ) {
@@ -2,13 +2,45 @@ import { GLTFLoader } from '../loaders/GLTFLoader.js';
2
2
 
3
3
  const DEFAULT_HAND_PROFILE_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/';
4
4
 
5
+ /**
6
+ * Represents one of the hand model types {@link XRHandModelFactory} might produce
7
+ * depending on the selected profile. `XRHandMeshModel` represents a hand with a
8
+ * custom asset.
9
+ */
5
10
  class XRHandMeshModel {
6
11
 
12
+ /**
13
+ * Constructs a new XR hand mesh model.
14
+ *
15
+ * @param {XRHandModel} handModel - The hand model.
16
+ * @param {Group} controller - The WebXR controller.
17
+ * @param {?string} path - The model path.
18
+ * @param {XRHandedness} handedness - The handedness of the XR input source.
19
+ * @param {?Loader} [loader=null] - The loader. If not provided, an instance of `GLTFLoader` will be used to load models.
20
+ * @param {?Function} [onLoad=null] - A callback that is executed when a controller model has been loaded.
21
+ */
7
22
  constructor( handModel, controller, path, handedness, loader = null, onLoad = null ) {
8
23
 
24
+ /**
25
+ * The WebXR controller.
26
+ *
27
+ * @type {Group}
28
+ */
9
29
  this.controller = controller;
30
+
31
+ /**
32
+ * The hand model.
33
+ *
34
+ * @type {XRHandModel}
35
+ */
10
36
  this.handModel = handModel;
11
37
 
38
+ /**
39
+ * An array of bones representing the bones
40
+ * of the hand skeleton.
41
+ *
42
+ * @type {Array<Bone>}
43
+ */
12
44
  this.bones = [];
13
45
 
14
46
  if ( loader === null ) {
@@ -80,6 +112,9 @@ class XRHandMeshModel {
80
112
 
81
113
  }
82
114
 
115
+ /**
116
+ * Updates the mesh based on the tracked XR joints data.
117
+ */
83
118
  updateMesh() {
84
119
 
85
120
  // XR Joints