@plastic-software/three 0.174.0 → 0.175.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (544) hide show
  1. package/build/three.cjs +10655 -1446
  2. package/build/three.core.js +9626 -1094
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +834 -157
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +4 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2658 -1697
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2654 -1709
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +93 -39
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +171 -48
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +71 -29
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +41 -3
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +35 -0
  94. package/examples/jsm/loaders/DDSLoader.js +24 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +42 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +218 -5
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +86 -18
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +38 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +81 -61
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +79 -2
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +108 -72
  162. package/examples/jsm/misc/VolumeSlice.js +88 -45
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +70 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +131 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +266 -133
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/Transpiler.js +31 -0
  273. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  274. package/examples/jsm/tsl/display/BloomNode.js +1 -1
  275. package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
  276. package/examples/jsm/tsl/display/SSRNode.js +1 -1
  277. package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
  278. package/examples/jsm/tsl/math/Bayer.js +14 -1
  279. package/examples/jsm/tsl/utils/Raymarching.js +4 -2
  280. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  281. package/examples/jsm/utils/CameraUtils.js +10 -7
  282. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  283. package/examples/jsm/utils/GeometryUtils.js +12 -13
  284. package/examples/jsm/utils/LDrawUtils.js +11 -4
  285. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  286. package/examples/jsm/utils/SceneUtils.js +50 -3
  287. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  288. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  289. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  290. package/examples/jsm/utils/SortUtils.js +14 -5
  291. package/examples/jsm/utils/UVsDebug.js +9 -4
  292. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  293. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  294. package/examples/jsm/utils/WorkerPool.js +65 -2
  295. package/examples/jsm/webxr/ARButton.js +18 -0
  296. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  297. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  298. package/examples/jsm/webxr/Text2D.js +11 -0
  299. package/examples/jsm/webxr/VRButton.js +30 -0
  300. package/examples/jsm/webxr/XRButton.js +22 -0
  301. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  302. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  303. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  304. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  305. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  306. package/examples/jsm/webxr/XRPlanes.js +17 -0
  307. package/package.json +1 -1
  308. package/src/Three.TSL.js +3 -1
  309. package/src/animation/AnimationAction.js +262 -30
  310. package/src/animation/AnimationClip.js +141 -2
  311. package/src/animation/AnimationMixer.js +99 -15
  312. package/src/animation/AnimationObjectGroup.js +41 -18
  313. package/src/animation/AnimationUtils.js +168 -18
  314. package/src/animation/KeyframeTrack.js +144 -10
  315. package/src/animation/PropertyBinding.js +77 -3
  316. package/src/animation/PropertyMixer.js +72 -5
  317. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  318. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  319. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  320. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  321. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  322. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  323. package/src/audio/AudioAnalyser.js +1 -1
  324. package/src/audio/AudioListener.js +2 -2
  325. package/src/audio/PositionalAudio.js +5 -5
  326. package/src/constants.js +1429 -5
  327. package/src/core/BufferAttribute.js +413 -3
  328. package/src/core/BufferGeometry.js +337 -1
  329. package/src/core/Clock.js +60 -0
  330. package/src/core/GLBufferAttribute.js +99 -0
  331. package/src/core/InstancedBufferAttribute.js +29 -0
  332. package/src/core/InstancedBufferGeometry.js +20 -0
  333. package/src/core/InstancedInterleavedBuffer.js +26 -0
  334. package/src/core/InterleavedBuffer.js +137 -3
  335. package/src/core/InterleavedBufferAttribute.js +197 -0
  336. package/src/core/Layers.js +71 -10
  337. package/src/core/Object3D.js +23 -0
  338. package/src/core/Raycaster.js +134 -1
  339. package/src/core/RenderTarget.js +166 -7
  340. package/src/core/RenderTarget3D.js +25 -0
  341. package/src/core/RenderTargetArray.js +18 -0
  342. package/src/core/Uniform.js +29 -0
  343. package/src/core/UniformsGroup.js +84 -2
  344. package/src/extras/Controls.js +16 -1
  345. package/src/extras/Earcut.js +3 -781
  346. package/src/extras/ImageUtils.js +3 -2
  347. package/src/extras/PMREMGenerator.js +22 -17
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/extras/core/Path.js +1 -1
  350. package/src/extras/lib/earcut.js +685 -0
  351. package/src/geometries/ConeGeometry.js +2 -2
  352. package/src/geometries/CylinderGeometry.js +2 -2
  353. package/src/geometries/ExtrudeGeometry.js +71 -39
  354. package/src/geometries/LatheGeometry.js +1 -1
  355. package/src/lights/LightShadow.js +1 -1
  356. package/src/lights/webgpu/IESSpotLight.js +1 -1
  357. package/src/loaders/AnimationLoader.js +31 -0
  358. package/src/loaders/AudioLoader.js +31 -0
  359. package/src/loaders/BufferGeometryLoader.js +34 -0
  360. package/src/loaders/Cache.js +45 -0
  361. package/src/loaders/CompressedTextureLoader.js +36 -3
  362. package/src/loaders/CubeTextureLoader.js +45 -0
  363. package/src/loaders/DataTextureLoader.js +44 -3
  364. package/src/loaders/FileLoader.js +57 -1
  365. package/src/loaders/ImageBitmapLoader.js +57 -0
  366. package/src/loaders/ImageLoader.js +30 -0
  367. package/src/loaders/Loader.js +4 -6
  368. package/src/loaders/LoaderUtils.js +18 -36
  369. package/src/loaders/LoadingManager.js +142 -0
  370. package/src/loaders/MaterialLoader.js +57 -0
  371. package/src/loaders/ObjectLoader.js +53 -0
  372. package/src/loaders/TextureLoader.js +33 -0
  373. package/src/loaders/nodes/NodeLoader.js +6 -2
  374. package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
  375. package/src/loaders/nodes/NodeObjectLoader.js +3 -3
  376. package/src/materials/LineBasicMaterial.js +74 -1
  377. package/src/materials/LineDashedMaterial.js +52 -0
  378. package/src/materials/Material.js +18 -3
  379. package/src/materials/MeshBasicMaterial.js +165 -0
  380. package/src/materials/MeshDepthMaterial.js +93 -0
  381. package/src/materials/MeshDistanceMaterial.js +76 -0
  382. package/src/materials/MeshLambertMaterial.js +273 -0
  383. package/src/materials/MeshMatcapMaterial.js +142 -0
  384. package/src/materials/MeshNormalMaterial.js +113 -0
  385. package/src/materials/MeshPhongMaterial.js +288 -0
  386. package/src/materials/MeshPhysicalMaterial.js +292 -1
  387. package/src/materials/MeshStandardMaterial.js +297 -0
  388. package/src/materials/MeshToonMaterial.js +218 -0
  389. package/src/materials/PointsMaterial.js +89 -0
  390. package/src/materials/RawShaderMaterial.js +25 -0
  391. package/src/materials/ShaderMaterial.js +215 -6
  392. package/src/materials/ShadowMaterial.js +54 -0
  393. package/src/materials/SpriteMaterial.js +82 -0
  394. package/src/materials/nodes/Line2NodeMaterial.js +1 -1
  395. package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
  396. package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
  397. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  398. package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
  399. package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
  400. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  401. package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
  402. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
  403. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  404. package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
  405. package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
  406. package/src/materials/nodes/NodeMaterial.js +7 -3
  407. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  408. package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
  409. package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
  410. package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
  411. package/src/math/Color.js +1 -1
  412. package/src/math/MathUtils.js +223 -0
  413. package/src/nodes/Nodes.js +1 -0
  414. package/src/nodes/accessors/BatchNode.js +8 -8
  415. package/src/nodes/accessors/BuiltinNode.js +1 -1
  416. package/src/nodes/accessors/CubeTextureNode.js +1 -1
  417. package/src/nodes/accessors/InstanceNode.js +5 -5
  418. package/src/nodes/accessors/InstancedMeshNode.js +1 -1
  419. package/src/nodes/accessors/MorphNode.js +27 -23
  420. package/src/nodes/accessors/Normal.js +1 -1
  421. package/src/nodes/accessors/Object3DNode.js +12 -12
  422. package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
  423. package/src/nodes/accessors/ReferenceNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +46 -37
  425. package/src/nodes/accessors/StorageBufferNode.js +1 -1
  426. package/src/nodes/accessors/StorageTextureNode.js +3 -3
  427. package/src/nodes/accessors/Texture3DNode.js +1 -1
  428. package/src/nodes/accessors/TextureNode.js +25 -5
  429. package/src/nodes/accessors/TextureSizeNode.js +1 -1
  430. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  431. package/src/nodes/code/CodeNode.js +4 -4
  432. package/src/nodes/code/ExpressionNode.js +4 -4
  433. package/src/nodes/code/FunctionCallNode.js +23 -3
  434. package/src/nodes/code/ScriptableNode.js +4 -4
  435. package/src/nodes/code/ScriptableValueNode.js +2 -2
  436. package/src/nodes/core/AssignNode.js +1 -1
  437. package/src/nodes/core/AttributeNode.js +1 -1
  438. package/src/nodes/core/BypassNode.js +1 -1
  439. package/src/nodes/core/CacheNode.js +1 -1
  440. package/src/nodes/core/ContextNode.js +1 -1
  441. package/src/nodes/core/InputNode.js +2 -2
  442. package/src/nodes/core/Node.js +14 -2
  443. package/src/nodes/core/NodeBuilder.js +86 -14
  444. package/src/nodes/core/StackNode.js +5 -5
  445. package/src/nodes/core/StructNode.js +1 -1
  446. package/src/nodes/core/StructTypeNode.js +2 -2
  447. package/src/nodes/core/VarNode.js +2 -8
  448. package/src/nodes/core/VaryingNode.js +3 -3
  449. package/src/nodes/display/BlendModes.js +4 -4
  450. package/src/nodes/display/BumpMapNode.js +1 -1
  451. package/src/nodes/display/NormalMapNode.js +1 -1
  452. package/src/nodes/display/PosterizeNode.js +1 -1
  453. package/src/nodes/display/ScreenNode.js +3 -3
  454. package/src/nodes/display/ViewportDepthNode.js +2 -2
  455. package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
  456. package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
  457. package/src/nodes/display/ViewportTextureNode.js +4 -4
  458. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  459. package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
  460. package/src/nodes/geometry/RangeNode.js +1 -1
  461. package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
  462. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  463. package/src/nodes/gpgpu/ComputeNode.js +30 -2
  464. package/src/nodes/lighting/AnalyticLightNode.js +9 -1
  465. package/src/nodes/lighting/LightsNode.js +3 -3
  466. package/src/nodes/lighting/ShadowNode.js +1 -1
  467. package/src/nodes/math/ConditionalNode.js +20 -3
  468. package/src/nodes/math/MathNode.js +83 -78
  469. package/src/nodes/math/OperatorNode.js +171 -82
  470. package/src/nodes/pmrem/PMREMNode.js +4 -4
  471. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  472. package/src/nodes/tsl/TSLBase.js +2 -1
  473. package/src/nodes/tsl/TSLCore.js +115 -12
  474. package/src/nodes/utils/ArrayElementNode.js +3 -1
  475. package/src/nodes/utils/CubeMapNode.js +3 -3
  476. package/src/nodes/utils/DebugNode.js +70 -0
  477. package/src/nodes/utils/EquirectUVNode.js +2 -2
  478. package/src/nodes/utils/JoinNode.js +27 -2
  479. package/src/nodes/utils/LoopNode.js +58 -28
  480. package/src/nodes/utils/MaxMipLevelNode.js +1 -1
  481. package/src/nodes/utils/ReflectorNode.js +2 -2
  482. package/src/nodes/utils/RemapNode.js +6 -6
  483. package/src/nodes/utils/RotateNode.js +1 -1
  484. package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
  485. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  486. package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
  487. package/src/objects/BatchedMesh.js +4 -4
  488. package/src/objects/InstancedMesh.js +2 -2
  489. package/src/objects/LOD.js +1 -1
  490. package/src/objects/Skeleton.js +1 -1
  491. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  492. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  493. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  494. package/src/renderers/WebGLRenderTarget.js +19 -0
  495. package/src/renderers/WebGLRenderer.js +617 -79
  496. package/src/renderers/common/Animation.js +2 -2
  497. package/src/renderers/common/Attributes.js +2 -2
  498. package/src/renderers/common/Backend.js +12 -3
  499. package/src/renderers/common/Background.js +1 -0
  500. package/src/renderers/common/Color4.js +1 -1
  501. package/src/renderers/common/CubeRenderTarget.js +13 -0
  502. package/src/renderers/common/PostProcessing.js +2 -0
  503. package/src/renderers/common/QuadMesh.js +2 -0
  504. package/src/renderers/common/RenderList.js +2 -2
  505. package/src/renderers/common/RenderObject.js +1 -1
  506. package/src/renderers/common/RenderObjects.js +2 -2
  507. package/src/renderers/common/Renderer.js +52 -31
  508. package/src/renderers/common/XRManager.js +333 -10
  509. package/src/renderers/common/extras/PMREMGenerator.js +6 -0
  510. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  511. package/src/renderers/shaders/UniformsLib.js +1 -4
  512. package/src/renderers/shaders/UniformsUtils.js +1 -3
  513. package/src/renderers/webgl/WebGLBackground.js +4 -2
  514. package/src/renderers/webgl/WebGLState.js +9 -9
  515. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  516. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  517. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  518. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  519. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  520. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  521. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  522. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  523. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  524. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  525. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  526. package/src/renderers/webxr/WebXRController.js +87 -2
  527. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  528. package/src/renderers/webxr/WebXRManager.js +173 -1
  529. package/src/scenes/Scene.js +2 -1
  530. package/src/textures/CanvasTexture.js +28 -0
  531. package/src/textures/CompressedArrayTexture.js +57 -0
  532. package/src/textures/CompressedCubeTexture.js +29 -0
  533. package/src/textures/CompressedTexture.js +64 -6
  534. package/src/textures/CubeTexture.js +52 -4
  535. package/src/textures/Data3DTexture.js +77 -0
  536. package/src/textures/DataArrayTexture.js +93 -0
  537. package/src/textures/DataTexture.js +65 -0
  538. package/src/textures/DepthTexture.js +59 -9
  539. package/src/textures/FramebufferTexture.js +62 -0
  540. package/src/textures/Source.js +69 -0
  541. package/src/textures/Texture.js +5 -5
  542. package/src/textures/VideoFrameTexture.js +43 -6
  543. package/src/textures/VideoTexture.js +49 -4
  544. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -9,26 +9,67 @@ import {
9
9
  zipSync,
10
10
  } from '../libs/fflate.module.js';
11
11
 
12
+ /**
13
+ * An exporter for USDZ.
14
+ *
15
+ * ```js
16
+ * const exporter = new USDZExporter();
17
+ * const arraybuffer = await exporter.parseAsync( scene );
18
+ * ```
19
+ */
12
20
  class USDZExporter {
13
21
 
22
+ /**
23
+ * Constructs a new USDZ exporter.
24
+ */
14
25
  constructor() {
15
26
 
27
+ /**
28
+ * A reference to a texture utils module.
29
+ *
30
+ * @type {?(WebGLTextureUtils|WebGPUTextureUtils)}
31
+ * @default null
32
+ */
16
33
  this.textureUtils = null;
17
34
 
18
35
  }
19
36
 
37
+ /**
38
+ * Sets the texture utils for this exporter. Only relevant when compressed textures have to be exported.
39
+ *
40
+ * Depending on whether you use {@link WebGLRenderer} or {@link WebGPURenderer}, you must inject the
41
+ * corresponding texture utils {@link WebGLTextureUtils} or {@link WebGPUTextureUtils}.
42
+ *
43
+ * @param {WebGLTextureUtils|WebGPUTextureUtils} utils - The texture utils.
44
+ */
20
45
  setTextureUtils( utils ) {
21
46
 
22
47
  this.textureUtils = utils;
23
48
 
24
49
  }
25
50
 
51
+ /**
52
+ * Parse the given 3D object and generates the USDZ output.
53
+ *
54
+ * @param {Object3D} scene - The 3D object to export.
55
+ * @param {USDZExporter~OnDone} onDone - A callback function that is executed when the export has finished.
56
+ * @param {USDZExporter~OnError} onError - A callback function that is executed when an error happens.
57
+ * @param {USDZExporter~Options} options - The export options.
58
+ */
26
59
  parse( scene, onDone, onError, options ) {
27
60
 
28
61
  this.parseAsync( scene, options ).then( onDone ).catch( onError );
29
62
 
30
63
  }
31
64
 
65
+ /**
66
+ * Async version of {@link USDZExporter#parse}.
67
+ *
68
+ * @async
69
+ * @param {Object3D} scene - The 3D object to export.
70
+ * @param {USDZExporter~Options} options - The export options.
71
+ * @return {Promise<ArrayBuffer>} A Promise that resolved with the exported USDZ data.
72
+ */
32
73
  async parseAsync( scene, options = {} ) {
33
74
 
34
75
  options = Object.assign( {
@@ -78,7 +119,7 @@ class USDZExporter {
78
119
 
79
120
  }
80
121
 
81
- output += buildXform( object, geometry, material );
122
+ output += buildXform( object, geometry, materials[ material.uuid ] );
82
123
 
83
124
  } else {
84
125
 
@@ -755,7 +796,7 @@ function buildCamera( camera ) {
755
796
  float verticalAperture = ${ ( ( Math.abs( camera.top ) + Math.abs( camera.bottom ) ) * 10 ).toPrecision( PRECISION ) }
756
797
  token projection = "orthographic"
757
798
  }
758
-
799
+
759
800
  `;
760
801
 
761
802
  } else {
@@ -772,11 +813,37 @@ function buildCamera( camera ) {
772
813
  token projection = "perspective"
773
814
  float verticalAperture = ${ camera.getFilmHeight().toPrecision( PRECISION ) }
774
815
  }
775
-
816
+
776
817
  `;
777
818
 
778
819
  }
779
820
 
780
821
  }
781
822
 
823
+ /**
824
+ * Export options of `USDZExporter`.
825
+ *
826
+ * @typedef {Object} USDZExporter~Options
827
+ * @property {number} [maxTextureSize=1024] - The maximum texture size that is going to be exported.
828
+ * @property {boolean} [includeAnchoringProperties=false] - Whether to include anchoring properties or not.
829
+ * @property {Object} [ar] - If `includeAnchoringProperties` is set to `true`, the anchoring type and alignment
830
+ * can be configured via `ar.anchoring.type` and `ar.planeAnchoring.alignment`.
831
+ * @property {boolean} [quickLookCompatible=false] - Whether to make the exported USDZ compatible to QuickLook
832
+ * which means the asset is modified to accommodate the bugs FB10036297 and FB11442287 (Apple Feedback).
833
+ **/
834
+
835
+ /**
836
+ * onDone callback of `USDZExporter`.
837
+ *
838
+ * @callback USDZExporter~OnDone
839
+ * @param {ArrayBuffer} result - The generated USDZ.
840
+ */
841
+
842
+ /**
843
+ * onError callback of `USDZExporter`.
844
+ *
845
+ * @callback USDZExporter~OnError
846
+ * @param {Error} error - The error object.
847
+ */
848
+
782
849
  export { USDZExporter };
@@ -3,8 +3,30 @@ import {
3
3
  Float32BufferAttribute
4
4
  } from 'three';
5
5
 
6
+ /**
7
+ * A special type of box geometry intended for {@link LineSegments}.
8
+ *
9
+ * ```js
10
+ * const geometry = new THREE.BoxLineGeometry();
11
+ * const material = new THREE.LineBasicMaterial( { color: 0x00ff00 } );
12
+ * const lines = new THREE.LineSegments( geometry, material );
13
+ * scene.add( lines );
14
+ * ```
15
+ *
16
+ * @augments BufferGeometry
17
+ */
6
18
  class BoxLineGeometry extends BufferGeometry {
7
19
 
20
+ /**
21
+ * Constructs a new box line geometry.
22
+ *
23
+ * @param {number} [width=1] - The width. That is, the length of the edges parallel to the X axis.
24
+ * @param {number} [height=1] - The height. That is, the length of the edges parallel to the Y axis.
25
+ * @param {number} [depth=1] - The depth. That is, the length of the edges parallel to the Z axis.
26
+ * @param {number} [widthSegments=1] - Number of segmented rectangular sections along the width of the sides.
27
+ * @param {number} [heightSegments=1] - Number of segmented rectangular sections along the height of the sides.
28
+ * @param {number} [depthSegments=1] - Number of segmented rectangular sections along the depth of the sides.
29
+ */
8
30
  constructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {
9
31
 
10
32
  super();
@@ -4,8 +4,26 @@ import {
4
4
  } from 'three';
5
5
  import { ConvexHull } from '../math/ConvexHull.js';
6
6
 
7
+ /**
8
+ * This class can be used to generate a convex hull for a given array of 3D points.
9
+ * The average time complexity for this task is considered to be O(nlog(n)).
10
+ *
11
+ * ```js
12
+ * const geometry = new ConvexGeometry( points );
13
+ * const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
14
+ * const mesh = new THREE.Mesh( geometry, material );
15
+ * scene.add( mesh );
16
+ * ```
17
+ *
18
+ * @augments BufferGeometry
19
+ */
7
20
  class ConvexGeometry extends BufferGeometry {
8
21
 
22
+ /**
23
+ * Constructs a new convex geometry.
24
+ *
25
+ * @param {Array<Vector3>} points - An array of points in 3D space which should be enclosed by the convex hull.
26
+ */
9
27
  constructor( points = [] ) {
10
28
 
11
29
  super();
@@ -9,22 +9,33 @@ import {
9
9
  } from 'three';
10
10
 
11
11
  /**
12
- * You can use this geometry to create a decal mesh, that serves different kinds of purposes.
13
- * e.g. adding unique details to models, performing dynamic visual environmental changes or covering seams.
12
+ * This class can be used to create a decal mesh that serves different kinds of purposes e.g.
13
+ * adding unique details to models, performing dynamic visual environmental changes or covering seams.
14
14
  *
15
- * Constructor parameter:
15
+ * Please not that decal projections can be distorted when used around corners. More information at
16
+ * this GitHub issue: [Decal projections without distortions]{@link https://github.com/mrdoob/three.js/issues/21187}.
16
17
  *
17
- * mesh Any mesh object
18
- * position — Position of the decal projector
19
- * orientation — Orientation of the decal projector
20
- * size — Size of the decal projector
18
+ * Reference: [How to project decals]{@link http://blog.wolfire.com/2009/06/how-to-project-decals/}
21
19
  *
22
- * reference: http://blog.wolfire.com/2009/06/how-to-project-decals/
20
+ * ```js
21
+ * const geometry = new DecalGeometry( mesh, position, orientation, size );
22
+ * const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
23
+ * const mesh = new THREE.Mesh( geometry, material );
24
+ * scene.add( mesh );
25
+ * ```
23
26
  *
27
+ * @augments BufferGeometry
24
28
  */
25
-
26
29
  class DecalGeometry extends BufferGeometry {
27
30
 
31
+ /**
32
+ * Constructs a new decal geometry.
33
+ *
34
+ * @param {Mesh} [mesh] - The base mesh the decal should be projected on.
35
+ * @param {Vector3} [position] - The position of the decal projector.
36
+ * @param {Euler} [orientation] - The orientation of the decal projector.
37
+ * @param {Vector3} [size] - Tje scale of the decal projector.
38
+ */
28
39
  constructor( mesh = new Mesh(), position = new Vector3(), orientation = new Euler(), size = new Vector3( 1, 1, 1 ) ) {
29
40
 
30
41
  super();
@@ -0,0 +1,97 @@
1
+
2
+ /** @module ParametricFunctions */
3
+
4
+ /**
5
+ * A parametric function representing the Klein bottle.
6
+ *
7
+ * @param {number} v - The `v` coordinate on the surface in the range `[0,1]`.
8
+ * @param {number} u - The `u` coordinate on the surface in the range `[0,1]`.
9
+ * @param {Vector3} target - The target vector that is used to store the method's result.
10
+ */
11
+ function klein( v, u, target ) {
12
+
13
+ u *= Math.PI;
14
+ v *= 2 * Math.PI;
15
+
16
+ u = u * 2;
17
+ let x, z;
18
+ if ( u < Math.PI ) {
19
+
20
+ x = 3 * Math.cos( u ) * ( 1 + Math.sin( u ) ) + ( 2 * ( 1 - Math.cos( u ) / 2 ) ) * Math.cos( u ) * Math.cos( v );
21
+ z = - 8 * Math.sin( u ) - 2 * ( 1 - Math.cos( u ) / 2 ) * Math.sin( u ) * Math.cos( v );
22
+
23
+ } else {
24
+
25
+ x = 3 * Math.cos( u ) * ( 1 + Math.sin( u ) ) + ( 2 * ( 1 - Math.cos( u ) / 2 ) ) * Math.cos( v + Math.PI );
26
+ z = - 8 * Math.sin( u );
27
+
28
+ }
29
+
30
+ const y = - 2 * ( 1 - Math.cos( u ) / 2 ) * Math.sin( v );
31
+
32
+ target.set( x, y, z );
33
+
34
+ }
35
+
36
+ /**
37
+ * A parametric function representing a flat plane.
38
+ *
39
+ * @param {number} u - The `u` coordinate on the surface in the range `[0,1]`.
40
+ * @param {number} v - The `v` coordinate on the surface in the range `[0,1]`.
41
+ * @param {Vector3} target - The target vector that is used to store the method's result.
42
+ */
43
+ function plane( u, v, target ) {
44
+
45
+ target.set( u, 0, v );
46
+
47
+ }
48
+
49
+ /**
50
+ * A parametric function representing a flat mobius strip.
51
+ *
52
+ * @param {number} u - The `u` coordinate on the surface in the range `[0,1]`.
53
+ * @param {number} t - The `v` coordinate on the surface in the range `[0,1]`.
54
+ * @param {Vector3} target - The target vector that is used to store the method's result.
55
+ */
56
+ function mobius( u, t, target ) {
57
+
58
+ // http://www.wolframalpha.com/input/?i=M%C3%B6bius+strip+parametric+equations&lk=1&a=ClashPrefs_*Surface.MoebiusStrip.SurfaceProperty.ParametricEquations-
59
+ u = u - 0.5;
60
+ const v = 2 * Math.PI * t;
61
+
62
+ const a = 2;
63
+
64
+ const x = Math.cos( v ) * ( a + u * Math.cos( v / 2 ) );
65
+ const y = Math.sin( v ) * ( a + u * Math.cos( v / 2 ) );
66
+ const z = u * Math.sin( v / 2 );
67
+
68
+ target.set( x, y, z );
69
+
70
+ }
71
+
72
+ /**
73
+ * A parametric function representing a volumetric mobius strip.
74
+ *
75
+ * @param {number} u - The `u` coordinate on the surface in the range `[0,1]`.
76
+ * @param {number} t - The `v` coordinate on the surface in the range `[0,1]`.
77
+ * @param {Vector3} target - The target vector that is used to store the method's result.
78
+ */
79
+ function mobius3d( u, t, target ) {
80
+
81
+ u *= Math.PI;
82
+ t *= 2 * Math.PI;
83
+
84
+ u = u * 2;
85
+ const phi = u / 2;
86
+ const major = 2.25, a = 0.125, b = 0.65;
87
+
88
+ let x = a * Math.cos( t ) * Math.cos( phi ) - b * Math.sin( t ) * Math.sin( phi );
89
+ const z = a * Math.cos( t ) * Math.sin( phi ) + b * Math.sin( t ) * Math.cos( phi );
90
+ const y = ( major + x ) * Math.sin( u );
91
+ x = ( major + x ) * Math.cos( u );
92
+
93
+ target.set( x, y, z );
94
+
95
+ }
96
+
97
+ export { klein, plane, mobius, mobius3d };
@@ -1,22 +1,45 @@
1
- /**
2
- * Parametric Surfaces Geometry
3
- * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html
4
- */
5
-
6
1
  import {
7
2
  BufferGeometry,
8
3
  Float32BufferAttribute,
9
4
  Vector3
10
5
  } from 'three';
11
6
 
7
+ /**
8
+ * This class can be used to generate a geometry based on a parametric surface.
9
+ *
10
+ * Reference: [Mesh Generation with Python]{@link https://prideout.net/blog/old/blog/index.html@p=44.html}
11
+ *
12
+ * ```js
13
+ * const geometry = new THREE.ParametricGeometry( klein, 25, 25 );
14
+ * const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
15
+ * const klein = new THREE.Mesh( geometry, material );
16
+ * scene.add( klein );
17
+ * ```
18
+ *
19
+ * @augments BufferGeometry
20
+ */
12
21
  class ParametricGeometry extends BufferGeometry {
13
22
 
23
+ /**
24
+ * Constructs a new parametric geometry.
25
+ *
26
+ * @param {ParametricGeometry~Func} func - The parametric function. Default is a function that generates a curved plane surface.
27
+ * @param {number} [slices=8] - The number of slices to use for the parametric function.
28
+ * @param {number} [stacks=8] - The stacks of slices to use for the parametric function.
29
+ */
14
30
  constructor( func = ( u, v, target ) => target.set( u, v, Math.cos( u ) * Math.sin( v ) ), slices = 8, stacks = 8 ) {
15
31
 
16
32
  super();
17
33
 
18
34
  this.type = 'ParametricGeometry';
19
35
 
36
+ /**
37
+ * Holds the constructor parameters that have been
38
+ * used to generate the geometry. Any modification
39
+ * after instantiation does not change the geometry.
40
+ *
41
+ * @type {Object}
42
+ */
20
43
  this.parameters = {
21
44
  func: func,
22
45
  slices: slices,
@@ -136,4 +159,13 @@ class ParametricGeometry extends BufferGeometry {
136
159
 
137
160
  }
138
161
 
162
+ /**
163
+ * Parametric function definition of `ParametricGeometry`.
164
+ *
165
+ * @callback ParametricGeometry~Func
166
+ * @param {number} u - The `u` coordinate on the surface in the range `[0,1]`.
167
+ * @param {number} v - The `v` coordinate on the surface in the range `[0,1]`.
168
+ * @param {Vector3} target - The target vector that is used to store the method's result.
169
+ */
170
+
139
171
  export { ParametricGeometry };
@@ -38,8 +38,29 @@ function getUv( faceDirVector, normal, uvAxis, projectionAxis, radius, sideLengt
38
38
 
39
39
  }
40
40
 
41
+ /**
42
+ * A special type of box geometry with rounded corners and edges.
43
+ *
44
+ * ```js
45
+ * const geometry = new THREE.RoundedBoxGeometry();
46
+ * const material = new THREE.MeshStandardMaterial( { color: 0x00ff00 } );
47
+ * const cube = new THREE.Mesh( geometry, material );
48
+ * scene.add( cube );
49
+ * ```
50
+ *
51
+ * @augments BoxGeometry
52
+ */
41
53
  class RoundedBoxGeometry extends BoxGeometry {
42
54
 
55
+ /**
56
+ * Constructs a new rounded box geometry.
57
+ *
58
+ * @param {number} [width=1] - The width. That is, the length of the edges parallel to the X axis.
59
+ * @param {number} [height=1] - The height. That is, the length of the edges parallel to the Y axis.
60
+ * @param {number} [depth=1] - The depth. That is, the length of the edges parallel to the Z axis.
61
+ * @param {number} [segments=2] - Number of segmented that form the rounded corners.
62
+ * @param {number} [radius=0.1] - The radius of the rounded corners.
63
+ */
43
64
  constructor( width = 1, height = 1, depth = 1, segments = 2, radius = 0.1 ) {
44
65
 
45
66
  // ensure segments is odd so we have a plane connecting the rounded corners
@@ -9,53 +9,37 @@ import {
9
9
  /**
10
10
  * Tessellates the famous Utah teapot database by Martin Newell into triangles.
11
11
  *
12
- * Parameters: size = 50, segments = 10, bottom = true, lid = true, body = true,
13
- * fitLid = true, blinn = true
14
- *
15
- * size is a relative scale: I've scaled the teapot to fit vertically between -1 and 1.
16
- * Think of it as a "radius".
17
- * segments - number of line segments to subdivide each patch edge;
18
- * 1 is possible but gives degenerates, so two is the real minimum.
19
- * bottom - boolean, if true (default) then the bottom patches are added. Some consider
20
- * adding the bottom heresy, so set this to "false" to adhere to the One True Way.
21
- * lid - to remove the lid and look inside, set to true.
22
- * body - to remove the body and leave the lid, set this and "bottom" to false.
23
- * fitLid - the lid is a tad small in the original. This stretches it a bit so you can't
24
- * see the teapot's insides through the gap.
25
- * blinn - Jim Blinn scaled the original data vertically by dividing by about 1.3 to look
26
- * nicer. If you want to see the original teapot, similar to the real-world model, set
27
- * this to false. True by default.
28
- * See http://en.wikipedia.org/wiki/File:Original_Utah_Teapot.jpg for the original
29
- * real-world teapot (from http://en.wikipedia.org/wiki/Utah_teapot).
30
- *
31
- * Note that the bottom (the last four patches) is not flat - blame Frank Crow, not me.
32
- *
33
12
  * The teapot should normally be rendered as a double sided object, since for some
34
13
  * patches both sides can be seen, e.g., the gap around the lid and inside the spout.
35
14
  *
36
- * Segments 'n' determines the number of triangles output.
37
- * Total triangles = 32*2*n*n - 8*n [degenerates at the top and bottom cusps are deleted]
15
+ * Segments 'n' determines the number of triangles output. Total triangles = 32*2*n*n - 8*n
16
+ * (degenerates at the top and bottom cusps are deleted).
38
17
  *
39
- * size_factor # triangles
40
- * 1 56
41
- * 2 240
42
- * 3 552
43
- * 4 992
18
+ * Code based on [SPD software]{@link http://tog.acm.org/resources/SPD/}
19
+ * Created for the Udacity course [Interactive Rendering]{@link http://bit.ly/ericity}
44
20
  *
45
- * 10 6320
46
- * 20 25440
47
- * 30 57360
48
- *
49
- * Code converted from my ancient SPD software, http://tog.acm.org/resources/SPD/
50
- * Created for the Udacity course "Interactive Rendering", http://bit.ly/ericity
51
- * YouTube video on teapot history: https://www.youtube.com/watch?v=DxMfblPzFNc
52
- *
53
- * See https://en.wikipedia.org/wiki/Utah_teapot for the history of the teapot
21
+ * ```js
22
+ * const geometry = new TeapotGeometry( 50, 18 );
23
+ * const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
24
+ * const teapot = new THREE.Mesh( geometry, material );
25
+ * scene.add( teapot );
26
+ * ```
54
27
  *
28
+ * @augments BufferGeometry
55
29
  */
56
-
57
30
  class TeapotGeometry extends BufferGeometry {
58
31
 
32
+ /**
33
+ * Constructs a new teapot geometry.
34
+ *
35
+ * @param {number} [size=50] - Relative scale of the teapot.
36
+ * @param {number} [segments=10] - Number of line segments to subdivide each patch edge.
37
+ * @param {boolean} [bottom=true] - Whether the bottom of the teapot is generated or not.
38
+ * @param {boolean} [lid=true] - Whether the lid is generated or not.
39
+ * @param {boolean} [body=true] - Whether the body is generated or not.
40
+ * @param {boolean} [fitLid=true] - Whether the lid is slightly stretched to prevent gaps between the body and lid or not.
41
+ * @param {boolean} [blinn=true] - Whether the teapot is scaled vertically for better aesthetics or not.
42
+ */
59
43
  constructor( size = 50, segments = 10, bottom = true, lid = true, body = true, fitLid = true, blinn = true ) {
60
44
 
61
45
  // 32 * 4 * 4 Bezier spline patches
@@ -1,26 +1,37 @@
1
+ import {
2
+ ExtrudeGeometry
3
+ } from 'three';
4
+
1
5
  /**
2
- * Text = 3D Text
6
+ * A class for generating text as a single geometry. It is constructed by providing a string of text, and a set of
7
+ * parameters consisting of a loaded font and extrude settings.
8
+ *
9
+ * See the {@link FontLoader} page for additional details.
3
10
  *
4
- * parameters = {
5
- * font: <THREE.Font>, // font
11
+ * `TextGeometry` uses [typeface.json]{@link http://gero3.github.io/facetype.js/} generated fonts.
12
+ * Some existing fonts can be found located in `/examples/fonts`.
6
13
  *
7
- * size: <float>, // size of the text
8
- * depth: <float>, // thickness to extrude text
9
- * curveSegments: <int>, // number of points on the curves
14
+ * ```js
15
+ * const loader = new FontLoader();
16
+ * const font = await loader.loadAsync( 'fonts/helvetiker_regular.typeface.json' );
17
+ * const geometry = new TextGeometry( 'Hello three.js!', {
18
+ * font: font,
19
+ * size: 80,
20
+ * depth: 5,
21
+ * curveSegments: 12
22
+ * } );
23
+ * ```
10
24
  *
11
- * bevelEnabled: <bool>, // turn on bevel
12
- * bevelThickness: <float>, // how deep into text bevel goes
13
- * bevelSize: <float>, // how far from text outline (including bevelOffset) is bevel
14
- * bevelOffset: <float> // how far from text outline does bevel start
15
- * }
25
+ * @augments ExtrudeGeometry
16
26
  */
17
-
18
- import {
19
- ExtrudeGeometry
20
- } from 'three';
21
-
22
27
  class TextGeometry extends ExtrudeGeometry {
23
28
 
29
+ /**
30
+ * Constructs a new text geometry.
31
+ *
32
+ * @param {string} text - The text that should be transformed into a geometry.
33
+ * @param {TextGeometry~Options} [parameters] - The text settings.
34
+ */
24
35
  constructor( text, parameters = {} ) {
25
36
 
26
37
  const font = parameters.font;
@@ -50,5 +61,22 @@ class TextGeometry extends ExtrudeGeometry {
50
61
 
51
62
  }
52
63
 
64
+ /**
65
+ * Represents the `options` type of the geometry's constructor.
66
+ *
67
+ * @typedef {Object} TextGeometry~Options
68
+ * @property {Font} [font] - The font.
69
+ * @property {number} [size=100] - The text size.
70
+ * @property {number} [depth=50] - Depth to extrude the shape.
71
+ * @property {number} [curveSegments=12] - Number of points on the curves.
72
+ * @property {number} [steps=1] - Number of points used for subdividing segments along the depth of the extruded spline.
73
+ * @property {boolean} [bevelEnabled=false] - Whether to beveling to the shape or not.
74
+ * @property {number} [bevelThickness=10] - How deep into the original shape the bevel goes.
75
+ * @property {number} [bevelSize=8] - Distance from the shape outline that the bevel extends.
76
+ * @property {number} [bevelOffset=0] - Distance from the shape outline that the bevel starts.
77
+ * @property {number} [bevelSegments=3] - Number of bevel layers.
78
+ * @property {?Curve} [extrudePath=null] - A 3D spline path along which the shape should be extruded. Bevels not supported for path extrusion.
79
+ * @property {Object} [UVGenerator] - An object that provides UV generator functions for custom UV generation.
80
+ **/
53
81
 
54
82
  export { TextGeometry };
@@ -4,8 +4,27 @@ import {
4
4
  SphereGeometry
5
5
  } from 'three';
6
6
 
7
+ /**
8
+ * Renders a sphere to visualize a light probe in the scene.
9
+ *
10
+ * This helper can only be used with {@link WebGLRenderer}.
11
+ * When using {@link WebGPURenderer}, import from `LightProbeHelperGPU.js`.
12
+ *
13
+ * ```js
14
+ * const helper = new LightProbeHelper( lightProbe );
15
+ * scene.add( helper );
16
+ * ```
17
+ *
18
+ * @augments Mesh
19
+ */
7
20
  class LightProbeHelper extends Mesh {
8
21
 
22
+ /**
23
+ * Constructs a new light probe helper.
24
+ *
25
+ * @param {LightProbe} lightProbe - The light probe to visualize.
26
+ * @param {number} [size=1] - The size of the helper.
27
+ */
9
28
  constructor( lightProbe, size = 1 ) {
10
29
 
11
30
  const material = new ShaderMaterial( {
@@ -99,7 +118,19 @@ class LightProbeHelper extends Mesh {
99
118
 
100
119
  super( geometry, material );
101
120
 
121
+ /**
122
+ * The light probe to visualize.
123
+ *
124
+ * @type {LightProbe}
125
+ */
102
126
  this.lightProbe = lightProbe;
127
+
128
+ /**
129
+ * The size of the helper.
130
+ *
131
+ * @type {number}
132
+ * @default 1
133
+ */
103
134
  this.size = size;
104
135
  this.type = 'LightProbeHelper';
105
136
 
@@ -107,6 +138,10 @@ class LightProbeHelper extends Mesh {
107
138
 
108
139
  }
109
140
 
141
+ /**
142
+ * Frees the GPU-related resources allocated by this instance. Call this
143
+ * method whenever this instance is no longer used in your app.
144
+ */
110
145
  dispose() {
111
146
 
112
147
  this.geometry.dispose();
@@ -5,8 +5,28 @@ import {
5
5
  } from 'three';
6
6
  import { float, Fn, getShIrradianceAt, normalWorld, uniformArray, uniform, vec4 } from 'three/tsl';
7
7
 
8
+ /**
9
+ * Renders a sphere to visualize a light probe in the scene.
10
+ *
11
+ * This helper can only be used with {@link WebGPURenderer}.
12
+ * When using {@link WebGLRenderer}, import from `LightProbeHelper.js`.
13
+ *
14
+ * ```js
15
+ * const helper = new LightProbeHelper( lightProbe );
16
+ * scene.add( helper );
17
+ * ```
18
+ *
19
+ * @private
20
+ * @augments Mesh
21
+ */
8
22
  class LightProbeHelper extends Mesh {
9
23
 
24
+ /**
25
+ * Constructs a new light probe helper.
26
+ *
27
+ * @param {LightProbe} lightProbe - The light probe to visualize.
28
+ * @param {number} [size=1] - The size of the helper.
29
+ */
10
30
  constructor( lightProbe, size = 1 ) {
11
31
 
12
32
  const sh = uniformArray( lightProbe.sh.coefficients );
@@ -31,7 +51,19 @@ class LightProbeHelper extends Mesh {
31
51
 
32
52
  super( geometry, material );
33
53
 
54
+ /**
55
+ * The light probe to visualize.
56
+ *
57
+ * @type {LightProbe}
58
+ */
34
59
  this.lightProbe = lightProbe;
60
+
61
+ /**
62
+ * The size of the helper.
63
+ *
64
+ * @type {number}
65
+ * @default 1
66
+ */
35
67
  this.size = size;
36
68
  this.type = 'LightProbeHelper';
37
69
 
@@ -42,6 +74,10 @@ class LightProbeHelper extends Mesh {
42
74
 
43
75
  }
44
76
 
77
+ /**
78
+ * Frees the GPU-related resources allocated by this instance. Call this
79
+ * method whenever this instance is no longer used in your app.
80
+ */
45
81
  dispose() {
46
82
 
47
83
  this.geometry.dispose();