@plastic-software/three 0.174.0 → 0.175.1

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 (567) hide show
  1. package/build/three.cjs +10744 -1476
  2. package/build/three.core.js +9633 -1096
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +918 -189
  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 +1432 -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 +58 -1
  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/ShaderChunk/alphamap_fragment.glsl.js +10 -1
  512. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
  513. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
  514. package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
  515. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
  516. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
  517. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
  518. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
  519. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
  520. package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
  521. package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
  522. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
  523. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
  524. package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
  525. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
  526. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
  527. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
  528. package/src/renderers/shaders/ShaderChunk.js +2 -0
  529. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
  530. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
  531. package/src/renderers/shaders/UniformsLib.js +6 -5
  532. package/src/renderers/shaders/UniformsUtils.js +1 -3
  533. package/src/renderers/webgl/WebGLBackground.js +4 -2
  534. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  535. package/src/renderers/webgl/WebGLProgram.js +25 -5
  536. package/src/renderers/webgl/WebGLPrograms.js +21 -7
  537. package/src/renderers/webgl/WebGLState.js +9 -9
  538. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  539. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  540. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  541. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  542. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  543. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  544. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  545. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  546. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  547. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  548. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  549. package/src/renderers/webxr/WebXRController.js +87 -2
  550. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  551. package/src/renderers/webxr/WebXRManager.js +173 -1
  552. package/src/scenes/Scene.js +2 -1
  553. package/src/textures/CanvasTexture.js +28 -0
  554. package/src/textures/CompressedArrayTexture.js +57 -0
  555. package/src/textures/CompressedCubeTexture.js +29 -0
  556. package/src/textures/CompressedTexture.js +64 -6
  557. package/src/textures/CubeTexture.js +52 -4
  558. package/src/textures/Data3DTexture.js +77 -0
  559. package/src/textures/DataArrayTexture.js +93 -0
  560. package/src/textures/DataTexture.js +65 -0
  561. package/src/textures/DepthTexture.js +59 -9
  562. package/src/textures/FramebufferTexture.js +62 -0
  563. package/src/textures/Source.js +69 -0
  564. package/src/textures/Texture.js +5 -5
  565. package/src/textures/VideoFrameTexture.js +43 -6
  566. package/src/textures/VideoTexture.js +49 -4
  567. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -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;
@@ -1,26 +1,83 @@
1
1
  import { ClampToEdgeWrapping } from '../constants.js';
2
2
  import { CompressedTexture } from './CompressedTexture.js';
3
3
 
4
+ /**
5
+ * Creates a texture 2D array based on data in compressed form.
6
+ *
7
+ * These texture are usually loaded with {@link CompressedTextureLoader}.
8
+ *
9
+ * @augments CompressedTexture
10
+ */
4
11
  class CompressedArrayTexture extends CompressedTexture {
5
12
 
13
+ /**
14
+ * Constructs a new compressed array texture.
15
+ *
16
+ * @param {Array<Object>} mipmaps - This array holds for all mipmaps (including the bases mip)
17
+ * the data and dimensions.
18
+ * @param {number} width - The width of the texture.
19
+ * @param {number} height - The height of the texture.
20
+ * @param {number} depth - The depth of the texture.
21
+ * @param {number} [format=RGBAFormat] - The min filter value.
22
+ * @param {number} [type=UnsignedByteType] - The min filter value.
23
+ */
6
24
  constructor( mipmaps, width, height, depth, format, type ) {
7
25
 
8
26
  super( mipmaps, width, height, format, type );
9
27
 
28
+ /**
29
+ * This flag can be used for type testing.
30
+ *
31
+ * @type {boolean}
32
+ * @readonly
33
+ * @default true
34
+ */
10
35
  this.isCompressedArrayTexture = true;
36
+
37
+ /**
38
+ * The image property of a compressed texture just defines its dimensions.
39
+ *
40
+ * @name CompressedArrayTexture#image
41
+ * @type {{width:number,height:number,depth:number}}
42
+ */
11
43
  this.image.depth = depth;
44
+
45
+ /**
46
+ * This defines how the texture is wrapped in the depth and corresponds to
47
+ * *W* in UVW mapping.
48
+ *
49
+ * @type {(RepeatWrapping|ClampToEdgeWrapping|MirroredRepeatWrapping)}
50
+ * @default ClampToEdgeWrapping
51
+ */
12
52
  this.wrapR = ClampToEdgeWrapping;
13
53
 
54
+ /**
55
+ * A set of all layers which need to be updated in the texture.
56
+ *
57
+ * @type {Set<number>}
58
+ */
14
59
  this.layerUpdates = new Set();
15
60
 
16
61
  }
17
62
 
63
+ /**
64
+ * Describes that a specific layer of the texture needs to be updated.
65
+ * Normally when {@link Texture#needsUpdate} is set to `true`, the
66
+ * entire compressed texture array is sent to the GPU. Marking specific
67
+ * layers will only transmit subsets of all mipmaps associated with a
68
+ * specific depth in the array which is often much more performant.
69
+ *
70
+ * @param {number} layerIndex - The layer index that should be updated.
71
+ */
18
72
  addLayerUpdate( layerIndex ) {
19
73
 
20
74
  this.layerUpdates.add( layerIndex );
21
75
 
22
76
  }
23
77
 
78
+ /**
79
+ * Resets the layer updates registry.
80
+ */
24
81
  clearLayerUpdates() {
25
82
 
26
83
  this.layerUpdates.clear();
@@ -1,13 +1,42 @@
1
1
  import { CubeReflectionMapping } from '../constants.js';
2
2
  import { CompressedTexture } from './CompressedTexture.js';
3
3
 
4
+ /**
5
+ * Creates a cube texture based on data in compressed form.
6
+ *
7
+ * These texture are usually loaded with {@link CompressedTextureLoader}.
8
+ *
9
+ * @augments CompressedTexture
10
+ */
4
11
  class CompressedCubeTexture extends CompressedTexture {
5
12
 
13
+ /**
14
+ * Constructs a new compressed texture.
15
+ *
16
+ * @param {Array<CompressedTexture>} images - An array of compressed textures.
17
+ * @param {number} [format=RGBAFormat] - The texture format.
18
+ * @param {number} [type=UnsignedByteType] - The texture type.
19
+ */
6
20
  constructor( images, format, type ) {
7
21
 
8
22
  super( undefined, images[ 0 ].width, images[ 0 ].height, format, type, CubeReflectionMapping );
9
23
 
24
+ /**
25
+ * This flag can be used for type testing.
26
+ *
27
+ * @type {boolean}
28
+ * @readonly
29
+ * @default true
30
+ */
10
31
  this.isCompressedCubeTexture = true;
32
+
33
+ /**
34
+ * This flag can be used for type testing.
35
+ *
36
+ * @type {boolean}
37
+ * @readonly
38
+ * @default true
39
+ */
11
40
  this.isCubeTexture = true;
12
41
 
13
42
  this.image = images;
@@ -1,24 +1,82 @@
1
1
  import { Texture } from './Texture.js';
2
2
 
3
+ /**
4
+ * Creates a texture based on data in compressed form.
5
+ *
6
+ * These texture are usually loaded with {@link CompressedTextureLoader}.
7
+ *
8
+ * @augments Texture
9
+ */
3
10
  class CompressedTexture extends Texture {
4
11
 
12
+ /**
13
+ * Constructs a new compressed texture.
14
+ *
15
+ * @param {Array<Object>} mipmaps - This array holds for all mipmaps (including the bases mip)
16
+ * the data and dimensions.
17
+ * @param {number} width - The width of the texture.
18
+ * @param {number} height - The height of the texture.
19
+ * @param {number} [format=RGBAFormat] - The texture format.
20
+ * @param {number} [type=UnsignedByteType] - The texture type.
21
+ * @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.
22
+ * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
23
+ * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
24
+ * @param {number} [magFilter=LinearFilter] - The mag filter value.
25
+ * @param {number} [minFilter=LinearMipmapLinearFilter] - The min filter value.
26
+ * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
27
+ * @param {string} [colorSpace=NoColorSpace] - The color space.
28
+ */
5
29
  constructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, colorSpace ) {
6
30
 
7
31
  super( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );
8
32
 
33
+ /**
34
+ * This flag can be used for type testing.
35
+ *
36
+ * @type {boolean}
37
+ * @readonly
38
+ * @default true
39
+ */
9
40
  this.isCompressedTexture = true;
10
41
 
42
+ /**
43
+ * The image property of a compressed texture just defines its dimensions.
44
+ *
45
+ * @type {{width:number,height:number}}
46
+ */
11
47
  this.image = { width: width, height: height };
12
- this.mipmaps = mipmaps;
13
48
 
14
- // no flipping for cube textures
15
- // (also flipping doesn't work for compressed textures )
49
+ /**
50
+ * This array holds for all mipmaps (including the bases mip) the data and dimensions.
51
+ *
52
+ * @type {Array<Object>}
53
+ */
54
+ this.mipmaps = mipmaps;
16
55
 
56
+ /**
57
+ * If set to `true`, the texture is flipped along the vertical axis when
58
+ * uploaded to the GPU.
59
+ *
60
+ * Overwritten and set to `false` by default since it is not possible to
61
+ * flip compressed textures.
62
+ *
63
+ * @type {boolean}
64
+ * @default false
65
+ * @readonly
66
+ */
17
67
  this.flipY = false;
18
68
 
19
- // can't generate mipmaps for compressed textures
20
- // mips must be embedded in DDS files
21
-
69
+ /**
70
+ * Whether to generate mipmaps (if possible) for a texture.
71
+ *
72
+ * Overwritten and set to `false` by default since it is not
73
+ * possible to generate mipmaps for compressed data. Mipmaps
74
+ * must be embedded in the compressed texture file.
75
+ *
76
+ * @type {boolean}
77
+ * @default false
78
+ * @readonly
79
+ */
22
80
  this.generateMipmaps = false;
23
81
 
24
82
  }