@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
@@ -14,18 +14,38 @@ import {
14
14
  } from 'three';
15
15
 
16
16
  /**
17
- * Work based on :
18
- * https://github.com/Slayvin: Flat mirror for three.js
19
- * https://home.adelphi.edu/~stemkoski/ : An implementation of water shader based on the flat mirror
20
- * http://29a.ch/ && http://29a.ch/slides/2012/webglwater/ : Water shader explanations in WebGL
17
+ * A basic flat, reflective water effect.
18
+ *
19
+ * Note that this class can only be used with {@link WebGLRenderer}.
20
+ * When using {@link WebGPURenderer}, use {@link WaterMesh}.
21
+ *
22
+ * References:
23
+ *
24
+ * - [Flat mirror for three.js]{@link https://github.com/Slayvin}
25
+ * - [An implementation of water shader based on the flat mirror]{@link https://home.adelphi.edu/~stemkoski/}
26
+ * - [Water shader explanations in WebGL]{@link http://29a.ch/slides/2012/webglwater/ }
27
+ *
28
+ * @augments Mesh
21
29
  */
22
-
23
30
  class Water extends Mesh {
24
31
 
32
+ /**
33
+ * Constructs a new water instance.
34
+ *
35
+ * @param {BufferGeometry} geometry - The water's geometry.
36
+ * @param {Water~Options} [options] - The configuration options.
37
+ */
25
38
  constructor( geometry, options = {} ) {
26
39
 
27
40
  super( geometry );
28
41
 
42
+ /**
43
+ * This flag can be used for type testing.
44
+ *
45
+ * @type {boolean}
46
+ * @readonly
47
+ * @default true
48
+ */
29
49
  this.isWater = true;
30
50
 
31
51
  const scope = this;
@@ -330,4 +350,23 @@ class Water extends Mesh {
330
350
 
331
351
  }
332
352
 
353
+ /**
354
+ * Constructor options of `Water`.
355
+ *
356
+ * @typedef {Object} Water~Options
357
+ * @property {number} [textureWidth=512] - The texture width. A higher value results in more clear reflections but is also more expensive.
358
+ * @property {number} [textureHeight=512] - The texture height. A higher value results in more clear reflections but is also more expensive.
359
+ * @property {number} [clipBias=0] - The clip bias.
360
+ * @property {number} [alpha=1] - The alpha value.
361
+ * @property {number} [time=0] - The time value.
362
+ * @property {?Texture} [waterNormals=null] - The water's normal map.
363
+ * @property {Vector3} [sunDirection=(0.70707,0.70707,0.0)] - The sun direction.
364
+ * @property {number|Color|string} [sunColor=0xffffff] - The sun color.
365
+ * @property {number|Color|string} [waterColor=0x7F7F7F] - The water color.
366
+ * @property {Vector3} [eye] - The eye vector.
367
+ * @property {number} [distortionScale=20] - The distortion scale.
368
+ * @property {(FrontSide|BackSide|DoubleSide)} [side=FrontSide] - The water material's `side` property.
369
+ * @property {boolean} [fog=false] - Whether the water should be affected by fog or not.
370
+ **/
371
+
333
372
  export { Water };
@@ -14,19 +14,40 @@ import {
14
14
  import { Reflector } from '../objects/Reflector.js';
15
15
  import { Refractor } from '../objects/Refractor.js';
16
16
 
17
+ /** @module Water2 */
18
+
17
19
  /**
20
+ * An advanced water effect that supports reflections, refractions and flow maps.
21
+ *
22
+ * Note that this class can only be used with {@link WebGLRenderer}.
23
+ * When using {@link WebGPURenderer}, use {@link module:Water2Mesh}.
24
+ *
18
25
  * References:
19
- * https://alex.vlachos.com/graphics/Vlachos-SIGGRAPH10-WaterFlow.pdf
20
- * http://graphicsrunner.blogspot.de/2010/08/water-using-flow-maps.html
21
26
  *
27
+ * - {@link https://alex.vlachos.com/graphics/Vlachos-SIGGRAPH10-WaterFlow.pdf}
28
+ * - {@link http://graphicsrunner.blogspot.de/2010/08/water-using-flow-maps.html}
29
+ *
30
+ * @augments Mesh
22
31
  */
23
-
24
32
  class Water extends Mesh {
25
33
 
34
+ /**
35
+ * Constructs a new water instance.
36
+ *
37
+ * @param {BufferGeometry} geometry - The water's geometry.
38
+ * @param {module:Water2~Options} [options] - The configuration options.
39
+ */
26
40
  constructor( geometry, options = {} ) {
27
41
 
28
42
  super( geometry );
29
43
 
44
+ /**
45
+ * This flag can be used for type testing.
46
+ *
47
+ * @type {boolean}
48
+ * @readonly
49
+ * @default true
50
+ */
30
51
  this.isWater = true;
31
52
 
32
53
  this.type = 'Water';
@@ -358,4 +379,22 @@ Water.WaterShader = {
358
379
 
359
380
  };
360
381
 
382
+ /**
383
+ * Constructor options of `Water`.
384
+ *
385
+ * @typedef {Object} module:Water2~Options
386
+ * @property {number|Color|string} [color=0xFFFFFF] - The water color.
387
+ * @property {number} [textureWidth=512] - The texture width. A higher value results in better quality but is also more expensive.
388
+ * @property {number} [textureHeight=512] - The texture height. A higher value results in better quality but is also more expensive.
389
+ * @property {number} [clipBias=0] - The clip bias.
390
+ * @property {Vector2} [flowDirection=(1,0)] - The water's flow direction.
391
+ * @property {number} [flowSpeed=0.03] - The water's flow speed.
392
+ * @property {number} [reflectivity=0.02] - The water's reflectivity.
393
+ * @property {number} [scale=1] - The water's scale.
394
+ * @property {Object} [shader] - A custom water shader.
395
+ * @property {?Texture} [flowMap=null] - The flow map. If no flow map is assigned, the water flow is defined by `flowDirection`.
396
+ * @property {?Texture} [normalMap0] - The first water normal map.
397
+ * @property {?Texture} [normalMap1] - The second water normal map.
398
+ **/
399
+
361
400
  export { Water };
@@ -10,21 +10,42 @@ import {
10
10
 
11
11
  import { Fn, vec2, viewportSafeUV, viewportSharedTexture, reflector, pow, float, abs, texture, uniform, vec4, cameraPosition, positionWorld, uv, mix, vec3, normalize, max, dot, screenUV } from 'three/tsl';
12
12
 
13
+ /** @module Water2Mesh */
14
+
13
15
  /**
16
+ * An advanced water effect that supports reflections, refractions and flow maps.
17
+ *
18
+ * Note that this class can only be used with {@link WebGPURenderer}.
19
+ * When using {@link WebGLRenderer}, use {@link module:Water2}.
20
+ *
14
21
  * References:
15
- * https://alex.vlachos.com/graphics/Vlachos-SIGGRAPH10-WaterFlow.pdf
16
- * http://graphicsrunner.blogspot.de/2010/08/water-using-flow-maps.html
17
22
  *
23
+ * - {@link https://alex.vlachos.com/graphics/Vlachos-SIGGRAPH10-WaterFlow.pdf}
24
+ * - {@link http://graphicsrunner.blogspot.de/2010/08/water-using-flow-maps.html}
25
+ *
26
+ * @augments Mesh
18
27
  */
19
-
20
28
  class WaterMesh extends Mesh {
21
29
 
30
+ /**
31
+ * Constructs a new water mesh.
32
+ *
33
+ * @param {BufferGeometry} geometry - The water's geometry.
34
+ * @param {module:Water2~Options} [options] - The configuration options.
35
+ */
22
36
  constructor( geometry, options = {} ) {
23
37
 
24
38
  const material = new NodeMaterial();
25
39
 
26
40
  super( geometry, material );
27
41
 
42
+ /**
43
+ * This flag can be used for type testing.
44
+ *
45
+ * @type {boolean}
46
+ * @readonly
47
+ * @default true
48
+ */
28
49
  this.isWater = true;
29
50
 
30
51
  material.fragmentNode = new WaterNode( options, this );
@@ -159,4 +180,18 @@ class WaterNode extends TempNode {
159
180
 
160
181
  }
161
182
 
183
+ /**
184
+ * Constructor options of `WaterMesh`.
185
+ *
186
+ * @typedef {Object} module:Water2Mesh~Options
187
+ * @property {number|Color|string} [color=0xFFFFFF] - The water color.
188
+ * @property {Vector2} [flowDirection=(1,0)] - The water's flow direction.
189
+ * @property {number} [flowSpeed=0.03] - The water's flow speed.
190
+ * @property {number} [reflectivity=0.02] - The water's reflectivity.
191
+ * @property {number} [scale=1] - The water's scale.
192
+ * @property {?Texture} [flowMap=null] - The flow map. If no flow map is assigned, the water flow is defined by `flowDirection`.
193
+ * @property {Texture} normalMap0 - The first water normal map.
194
+ * @property {Texture} normalMap1 - The second water normal map.
195
+ **/
196
+
162
197
  export { WaterMesh };
@@ -8,32 +8,105 @@ import {
8
8
  import { Fn, add, cameraPosition, div, normalize, positionWorld, sub, time, texture, vec2, vec3, max, dot, reflect, pow, length, float, uniform, reflector, mul, mix, diffuseColor } from 'three/tsl';
9
9
 
10
10
  /**
11
- * Work based on :
12
- * https://github.com/Slayvin: Flat mirror for three.js
13
- * https://home.adelphi.edu/~stemkoski/ : An implementation of water shader based on the flat mirror
14
- * http://29a.ch/ && http://29a.ch/slides/2012/webglwater/ : Water shader explanations in WebGL
11
+ * A basic flat, reflective water effect.
12
+ *
13
+ * Note that this class can only be used with {@link WebGPURenderer}.
14
+ * When using {@link WebGLRenderer}, use {@link Water}.
15
+ *
16
+ * References:
17
+ *
18
+ * - [Flat mirror for three.js]{@link https://github.com/Slayvin}
19
+ * - [An implementation of water shader based on the flat mirror]{@link https://home.adelphi.edu/~stemkoski/}
20
+ * - [Water shader explanations in WebGL]{@link http://29a.ch/slides/2012/webglwater/ }
21
+ *
22
+ * @augments Mesh
15
23
  */
16
-
17
24
  class WaterMesh extends Mesh {
18
25
 
26
+ /**
27
+ * Constructs a new water mesh.
28
+ *
29
+ * @param {BufferGeometry} geometry - The water mesh's geometry.
30
+ * @param {WaterMesh~Options} [options] - The configuration options.
31
+ */
19
32
  constructor( geometry, options ) {
20
33
 
21
34
  const material = new MeshLambertNodeMaterial();
22
35
 
23
36
  super( geometry, material );
24
37
 
25
- this.isWater = true;
26
-
38
+ /**
39
+ * This flag can be used for type testing.
40
+ *
41
+ * @type {boolean}
42
+ * @readonly
43
+ * @default true
44
+ */
45
+ this.isWaterMesh = true;
46
+
47
+ /**
48
+ * The effect's resolution scale.
49
+ *
50
+ * @type {number}
51
+ * @default 0.5
52
+ */
27
53
  this.resolution = options.resolution !== undefined ? options.resolution : 0.5;
28
54
 
29
55
  // Uniforms
30
56
 
57
+ /**
58
+ * The water's normal map.
59
+ *
60
+ * @type {TextureNode}
61
+ */
31
62
  this.waterNormals = texture( options.waterNormals );
63
+
64
+ /**
65
+ * The alpha value.
66
+ *
67
+ * @type {UniformNode<float>}
68
+ * @default 1
69
+ */
32
70
  this.alpha = uniform( options.alpha !== undefined ? options.alpha : 1.0 );
71
+
72
+ /**
73
+ * The size value.
74
+ *
75
+ * @type {UniformNode<float>}
76
+ * @default 1
77
+ */
33
78
  this.size = uniform( options.size !== undefined ? options.size : 1.0 );
79
+
80
+ /**
81
+ * The sun color.
82
+ *
83
+ * @type {UniformNode<color>}
84
+ * @default 0xffffff
85
+ */
34
86
  this.sunColor = uniform( new Color( options.sunColor !== undefined ? options.sunColor : 0xffffff ) );
87
+
88
+ /**
89
+ * The sun direction.
90
+ *
91
+ * @type {UniformNode<vec3>}
92
+ * @default (0.70707,0.70707,0.0)
93
+ */
35
94
  this.sunDirection = uniform( options.sunDirection !== undefined ? options.sunDirection : new Vector3( 0.70707, 0.70707, 0.0 ) );
95
+
96
+ /**
97
+ * The water color.
98
+ *
99
+ * @type {UniformNode<color>}
100
+ * @default 0x7f7f7f
101
+ */
36
102
  this.waterColor = uniform( new Color( options.waterColor !== undefined ? options.waterColor : 0x7f7f7f ) );
103
+
104
+ /**
105
+ * The distortion scale.
106
+ *
107
+ * @type {UniformNode<float>}
108
+ * @default 20
109
+ */
37
110
  this.distortionScale = uniform( options.distortionScale !== undefined ? options.distortionScale : 20.0 );
38
111
 
39
112
  // TSL
@@ -105,4 +178,18 @@ class WaterMesh extends Mesh {
105
178
 
106
179
  }
107
180
 
181
+ /**
182
+ * Constructor options of `WaterMesh`.
183
+ *
184
+ * @typedef {Object} WaterMesh~Options
185
+ * @property {number} [resolution=0.5] - The resolution scale.
186
+ * @property {?Texture} [waterNormals=null] - The water's normal map.
187
+ * @property {number} [alpha=1] - The alpha value.
188
+ * @property {number} [size=1] - The size value.
189
+ * @property {number|Color|string} [sunColor=0xffffff] - The sun color.
190
+ * @property {Vector3} [sunDirection=(0.70707,0.70707,0.0)] - The sun direction.
191
+ * @property {number|Color|string} [waterColor=0x7F7F7F] - The water color.
192
+ * @property {number} [distortionScale=20] - The distortion scale.
193
+ **/
194
+
108
195
  export { WaterMesh };
@@ -1,3 +1,18 @@
1
+ /**
2
+ * @classdesc Can be used to include Ammo.js as a Physics engine into
3
+ * `three.js` apps. Make sure to include `ammo.wasm.js` first:
4
+ * ```
5
+ * <script src="jsm/libs/ammo.wasm.js"></script>
6
+ * ```
7
+ * It is then possible to initialize the API via:
8
+ * ```js
9
+ * const physics = await AmmoPhysics();
10
+ * ```
11
+ *
12
+ * @name AmmoPhysics
13
+ * @class
14
+ * @hideconstructor
15
+ */
1
16
  async function AmmoPhysics() {
2
17
 
3
18
  if ( 'Ammo' in window === false ) {
@@ -265,8 +280,40 @@ async function AmmoPhysics() {
265
280
  setInterval( step, 1000 / frameRate );
266
281
 
267
282
  return {
283
+ /**
284
+ * Adds the given scene to this physics simulation. Only meshes with a
285
+ * `physics` object in their {@link Object3D#userData} field will be honored.
286
+ * The object can be used to store the mass of the mesh. E.g.:
287
+ * ```js
288
+ * box.userData.physics = { mass: 1 };
289
+ * ```
290
+ *
291
+ * @method
292
+ * @name AmmoPhysics#addScene
293
+ * @param {Object3D} scene The scene or any type of 3D object to add.
294
+ */
268
295
  addScene: addScene,
296
+
297
+ /**
298
+ * Adds the given mesh to this physics simulation.
299
+ *
300
+ * @method
301
+ * @name AmmoPhysics#addMesh
302
+ * @param {Mesh} mesh The mesh to add.
303
+ * @param {number} [mass=0] The mass in kg of the mesh.
304
+ */
269
305
  addMesh: addMesh,
306
+
307
+ /**
308
+ * Set the position of the given mesh which is part of the physics simulation. Calling this
309
+ * method will reset the current simulated velocity of the mesh.
310
+ *
311
+ * @method
312
+ * @name AmmoPhysics#setMeshPosition
313
+ * @param {Mesh} mesh The mesh to update the position for.
314
+ * @param {Vector3} position - The new position.
315
+ * @param {number} [index=0] - If the mesh is instanced, the index represents the instanced ID.
316
+ */
270
317
  setMeshPosition: setMeshPosition
271
318
  // addCompoundMesh
272
319
  };
@@ -57,6 +57,19 @@ function setupCollisionFiltering( settings ) {
57
57
 
58
58
  }
59
59
 
60
+ /**
61
+ * @classdesc Can be used to include Jolt as a Physics engine into
62
+ * `three.js` apps. The API can be initialized via:
63
+ * ```js
64
+ * const physics = await JoltPhysics();
65
+ * ```
66
+ * The component automatically imports Jolt from a CDN so make sure
67
+ * to use the component with an active Internet connection.
68
+ *
69
+ * @name JoltPhysics
70
+ * @class
71
+ * @hideconstructor
72
+ */
60
73
  async function JoltPhysics() {
61
74
 
62
75
  if ( Jolt === null ) {
@@ -270,9 +283,44 @@ async function JoltPhysics() {
270
283
  setInterval( step, 1000 / frameRate );
271
284
 
272
285
  return {
286
+ /**
287
+ * Adds the given scene to this physics simulation. Only meshes with a
288
+ * `physics` object in their {@link Object3D#userData} field will be honored.
289
+ * The object can be used to store the mass and restitution of the mesh. E.g.:
290
+ * ```js
291
+ * box.userData.physics = { mass: 1, restitution: 0 };
292
+ * ```
293
+ *
294
+ * @method
295
+ * @name JoltPhysics#addScene
296
+ * @param {Object3D} scene The scene or any type of 3D object to add.
297
+ */
273
298
  addScene: addScene,
299
+
300
+ /**
301
+ * Adds the given mesh to this physics simulation.
302
+ *
303
+ * @method
304
+ * @name JoltPhysics#addMesh
305
+ * @param {Mesh} mesh The mesh to add.
306
+ * @param {number} [mass=0] The mass in kg of the mesh.
307
+ * @param {number} [restitution=0] The restitution/friction of the mesh.
308
+ */
274
309
  addMesh: addMesh,
310
+
311
+ /**
312
+ * Set the position of the given mesh which is part of the physics simulation. Calling this
313
+ * method will reset the current simulated velocity of the mesh.
314
+ *
315
+ * @method
316
+ * @name JoltPhysics#setMeshPosition
317
+ * @param {Mesh} mesh The mesh to update the position for.
318
+ * @param {Vector3} position - The new position.
319
+ * @param {number} [index=0] - If the mesh is instanced, the index represents the instanced ID.
320
+ */
275
321
  setMeshPosition: setMeshPosition,
322
+
323
+ // NOOP
276
324
  setMeshVelocity: setMeshVelocity
277
325
  };
278
326
 
@@ -54,6 +54,19 @@ function getShape( geometry ) {
54
54
 
55
55
  }
56
56
 
57
+ /**
58
+ * @classdesc Can be used to include Rapier as a Physics engine into
59
+ * `three.js` apps. The API can be initialized via:
60
+ * ```js
61
+ * const physics = await RapierPhysics();
62
+ * ```
63
+ * The component automatically imports Rapier from a CDN so make sure
64
+ * to use the component with an active Internet connection.
65
+ *
66
+ * @name RapierPhysics
67
+ * @class
68
+ * @hideconstructor
69
+ */
57
70
  async function RapierPhysics() {
58
71
 
59
72
  if ( RAPIER === null ) {
@@ -229,9 +242,52 @@ async function RapierPhysics() {
229
242
  setInterval( step, 1000 / frameRate );
230
243
 
231
244
  return {
245
+ /**
246
+ * Adds the given scene to this physics simulation. Only meshes with a
247
+ * `physics` object in their {@link Object3D#userData} field will be honored.
248
+ * The object can be used to store the mass and restitution of the mesh. E.g.:
249
+ * ```js
250
+ * box.userData.physics = { mass: 1, restitution: 0 };
251
+ * ```
252
+ *
253
+ * @method
254
+ * @name RapierPhysics#addScene
255
+ * @param {Object3D} scene The scene or any type of 3D object to add.
256
+ */
232
257
  addScene: addScene,
258
+
259
+ /**
260
+ * Adds the given mesh to this physics simulation.
261
+ *
262
+ * @method
263
+ * @name RapierPhysics#addMesh
264
+ * @param {Mesh} mesh The mesh to add.
265
+ * @param {number} [mass=0] The mass in kg of the mesh.
266
+ * @param {number} [restitution=0] The restitution/friction of the mesh.
267
+ */
233
268
  addMesh: addMesh,
269
+
270
+ /**
271
+ * Set the position of the given mesh which is part of the physics simulation. Calling this
272
+ * method will reset the current simulated velocity of the mesh.
273
+ *
274
+ * @method
275
+ * @name RapierPhysics#setMeshPosition
276
+ * @param {Mesh} mesh The mesh to update the position for.
277
+ * @param {Vector3} position - The new position.
278
+ * @param {number} [index=0] - If the mesh is instanced, the index represents the instanced ID.
279
+ */
234
280
  setMeshPosition: setMeshPosition,
281
+
282
+ /**
283
+ * Set the velocity of the given mesh which is part of the physics simulation.
284
+ *
285
+ * @method
286
+ * @name RapierPhysics#setMeshVelocity
287
+ * @param {Mesh} mesh The mesh to update the velocity for.
288
+ * @param {Vector3} velocity - The new velocity.
289
+ * @param {number} [index=0] - If the mesh is instanced, the index represents the instanced ID.
290
+ */
235
291
  setMeshVelocity: setMeshVelocity
236
292
  };
237
293