@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
@@ -7,12 +7,12 @@ import {
7
7
  } from 'three';
8
8
 
9
9
  /**
10
- * Reference: https://en.wikipedia.org/wiki/Cel_shading
10
+ * An outline effect for toon shaders.
11
11
  *
12
- * API
13
- *
14
- * 1. Traditional
12
+ * Note that this class can only be used with {@link WebGLRenderer}.
13
+ * When using {@link WebGPURenderer}, use {@link ToonOutlinePassNode}.
15
14
  *
15
+ * ```js
16
16
  * const effect = new OutlineEffect( renderer );
17
17
  *
18
18
  * function render() {
@@ -20,50 +20,16 @@ import {
20
20
  * effect.render( scene, camera );
21
21
  *
22
22
  * }
23
- *
24
- * 2. VR compatible
25
- *
26
- * const effect = new OutlineEffect( renderer );
27
- * let renderingOutline = false;
28
- *
29
- * scene.onAfterRender = function () {
30
- *
31
- * if ( renderingOutline ) return;
32
- *
33
- * renderingOutline = true;
34
- *
35
- * effect.renderOutline( scene, camera );
36
- *
37
- * renderingOutline = false;
38
- *
39
- * };
40
- *
41
- * function render() {
42
- *
43
- * renderer.render( scene, camera );
44
- *
45
- * }
46
- *
47
- * // How to set default outline parameters
48
- * new OutlineEffect( renderer, {
49
- * defaultThickness: 0.01,
50
- * defaultColor: [ 0, 0, 0 ],
51
- * defaultAlpha: 0.8,
52
- * defaultKeepAlive: true // keeps outline material in cache even if material is removed from scene
53
- * } );
54
- *
55
- * // How to set outline parameters for each material
56
- * material.userData.outlineParameters = {
57
- * thickness: 0.01,
58
- * color: [ 0, 0, 0 ],
59
- * alpha: 0.8,
60
- * visible: true,
61
- * keepAlive: true
62
- * };
23
+ * ```
63
24
  */
64
-
65
25
  class OutlineEffect {
66
26
 
27
+ /**
28
+ * Constructs a new outline effect.
29
+ *
30
+ * @param {WebGLRenderer} renderer - The renderer.
31
+ * @param {OutlineEffect~Options} [parameters] - The configuration parameter.
32
+ */
67
33
  constructor( renderer, parameters = {} ) {
68
34
 
69
35
  this.enabled = true;
@@ -413,6 +379,13 @@ class OutlineEffect {
413
379
 
414
380
  }
415
381
 
382
+ /**
383
+ * When using this effect, this method should be called instead of the
384
+ * default {@link WebGLRenderer#render}.
385
+ *
386
+ * @param {Object3D} scene - The scene to render.
387
+ * @param {Camera} camera - The camera.
388
+ */
416
389
  this.render = function ( scene, camera ) {
417
390
 
418
391
  if ( this.enabled === false ) {
@@ -433,6 +406,30 @@ class OutlineEffect {
433
406
 
434
407
  };
435
408
 
409
+ /**
410
+ * This method can be used to render outlines in VR.
411
+ *
412
+ * ```js
413
+ * const effect = new OutlineEffect( renderer );
414
+ * let renderingOutline = false;
415
+ *
416
+ * scene.onAfterRender = function () {
417
+ *
418
+ * if ( renderingOutline ) return;
419
+ *
420
+ * renderingOutline = true;
421
+ * effect.renderOutline( scene, camera );
422
+ * renderingOutline = false;
423
+ * };
424
+ *
425
+ * function render() {
426
+ * renderer.render( scene, camera );
427
+ * }
428
+ * ```
429
+ *
430
+ * @param {Object3D} scene - The scene to render.
431
+ * @param {Camera} camera - The camera.
432
+ */
436
433
  this.renderOutline = function ( scene, camera ) {
437
434
 
438
435
  const currentAutoClear = renderer.autoClear;
@@ -460,75 +457,15 @@ class OutlineEffect {
460
457
 
461
458
  };
462
459
 
463
- /*
464
- * See #9918
465
- *
466
- * The following property copies and wrapper methods enable
467
- * OutlineEffect to be called from other *Effect, like
468
- *
469
- * effect = new StereoEffect( new OutlineEffect( renderer ) );
470
- *
471
- * function render () {
460
+ /**
461
+ * Resizes the effect.
472
462
  *
473
- * effect.render( scene, camera );
474
- *
475
- * }
463
+ * @param {number} width - The width of the effect in logical pixels.
464
+ * @param {number} height - The height of the effect in logical pixels.
476
465
  */
477
- this.autoClear = renderer.autoClear;
478
- this.domElement = renderer.domElement;
479
- this.shadowMap = renderer.shadowMap;
480
-
481
- this.clear = function ( color, depth, stencil ) {
482
-
483
- renderer.clear( color, depth, stencil );
466
+ this.setSize = function ( width, height ) {
484
467
 
485
- };
486
-
487
- this.getPixelRatio = function () {
488
-
489
- return renderer.getPixelRatio();
490
-
491
- };
492
-
493
- this.setPixelRatio = function ( value ) {
494
-
495
- renderer.setPixelRatio( value );
496
-
497
- };
498
-
499
- this.getSize = function ( target ) {
500
-
501
- return renderer.getSize( target );
502
-
503
- };
504
-
505
- this.setSize = function ( width, height, updateStyle ) {
506
-
507
- renderer.setSize( width, height, updateStyle );
508
-
509
- };
510
-
511
- this.setViewport = function ( x, y, width, height ) {
512
-
513
- renderer.setViewport( x, y, width, height );
514
-
515
- };
516
-
517
- this.setScissor = function ( x, y, width, height ) {
518
-
519
- renderer.setScissor( x, y, width, height );
520
-
521
- };
522
-
523
- this.setScissorTest = function ( boolean ) {
524
-
525
- renderer.setScissorTest( boolean );
526
-
527
- };
528
-
529
- this.setRenderTarget = function ( renderTarget ) {
530
-
531
- renderer.setRenderTarget( renderTarget );
468
+ renderer.setSize( width, height );
532
469
 
533
470
  };
534
471
 
@@ -536,4 +473,15 @@ class OutlineEffect {
536
473
 
537
474
  }
538
475
 
476
+ /**
477
+ * This type represents configuration settings of `OutlineEffect`.
478
+ *
479
+ * @typedef {Object} OutlineEffect~Options
480
+ * @property {number} [defaultThickness=0.003] - The outline thickness.
481
+ * @property {Array<number>} [defaultColor=[0,0,0]] - The outline color.
482
+ * @property {number} [defaultAlpha=1] - The outline alpha value.
483
+ * @property {boolean} [defaultKeepAlive=false] - Whether to keep alive cached internal materials or not.
484
+ **/
485
+
486
+
539
487
  export { OutlineEffect };
@@ -8,8 +8,19 @@ import {
8
8
  } from 'three';
9
9
  import { FullScreenQuad } from '../postprocessing/Pass.js';
10
10
 
11
+ /**
12
+ * A class that creates an parallax barrier effect.
13
+ *
14
+ * Note that this class can only be used with {@link WebGLRenderer}.
15
+ * When using {@link WebGPURenderer}, use {@link ParallaxBarrierPassNode}.
16
+ */
11
17
  class ParallaxBarrierEffect {
12
18
 
19
+ /**
20
+ * Constructs a new parallax barrier effect.
21
+ *
22
+ * @param {WebGLRenderer} renderer - The renderer.
23
+ */
13
24
  constructor( renderer ) {
14
25
 
15
26
  const _stereo = new StereoCamera();
@@ -72,6 +83,12 @@ class ParallaxBarrierEffect {
72
83
 
73
84
  const _quad = new FullScreenQuad( _material );
74
85
 
86
+ /**
87
+ * Resizes the effect.
88
+ *
89
+ * @param {number} width - The width of the effect in logical pixels.
90
+ * @param {number} height - The height of the effect in logical pixels.
91
+ */
75
92
  this.setSize = function ( width, height ) {
76
93
 
77
94
  renderer.setSize( width, height );
@@ -83,6 +100,13 @@ class ParallaxBarrierEffect {
83
100
 
84
101
  };
85
102
 
103
+ /**
104
+ * When using this effect, this method should be called instead of the
105
+ * default {@link WebGLRenderer#render}.
106
+ *
107
+ * @param {Object3D} scene - The scene to render.
108
+ * @param {Camera} camera - The camera.
109
+ */
86
110
  this.render = function ( scene, camera ) {
87
111
 
88
112
  const currentRenderTarget = renderer.getRenderTarget();
@@ -108,6 +132,10 @@ class ParallaxBarrierEffect {
108
132
 
109
133
  };
110
134
 
135
+ /**
136
+ * Frees internal resources. This method should be called
137
+ * when the effect is no longer required.
138
+ */
111
139
  this.dispose = function () {
112
140
 
113
141
  _renderTargetL.dispose();
@@ -5,11 +5,17 @@ import {
5
5
  } from 'three';
6
6
 
7
7
  /**
8
- * peppers ghost effect based on http://www.instructables.com/id/Reflective-Prism/?ALLSTEPS
8
+ * A class that implements a peppers ghost effect.
9
+ *
10
+ * Reference: [Reflective Prism]{@link http://www.instructables.com/id/Reflective-Prism/?ALLSTEPS}
9
11
  */
10
-
11
12
  class PeppersGhostEffect {
12
13
 
14
+ /**
15
+ * Constructs a new peppers ghost effect.
16
+ *
17
+ * @param {(WebGPURenderer|WebGLRenderer)} renderer - The renderer.
18
+ */
13
19
  constructor( renderer ) {
14
20
 
15
21
  const scope = this;
@@ -32,6 +38,12 @@ class PeppersGhostEffect {
32
38
  // Initialization
33
39
  renderer.autoClear = false;
34
40
 
41
+ /**
42
+ * Resizes the effect.
43
+ *
44
+ * @param {number} width - The width of the effect in logical pixels.
45
+ * @param {number} height - The height of the effect in logical pixels.
46
+ */
35
47
  this.setSize = function ( width, height ) {
36
48
 
37
49
  _halfWidth = width / 2;
@@ -51,6 +63,13 @@ class PeppersGhostEffect {
51
63
 
52
64
  };
53
65
 
66
+ /**
67
+ * When using this effect, this method should be called instead of the
68
+ * default {@link WebGLRenderer#render}.
69
+ *
70
+ * @param {Object3D} scene - The scene to render.
71
+ * @param {Camera} camera - The camera.
72
+ */
54
73
  this.render = function ( scene, camera ) {
55
74
 
56
75
  if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
@@ -3,26 +3,55 @@ import {
3
3
  Vector2
4
4
  } from 'three';
5
5
 
6
+ /**
7
+ * A class that creates an stereo effect.
8
+ *
9
+ * Note that this class can only be used with {@link WebGLRenderer}.
10
+ * When using {@link WebGPURenderer}, use {@link StereoPassNode}.
11
+ */
6
12
  class StereoEffect {
7
13
 
14
+ /**
15
+ * Constructs a new stereo effect.
16
+ *
17
+ * @param {WebGLRenderer} renderer - The renderer.
18
+ */
8
19
  constructor( renderer ) {
9
20
 
10
21
  const _stereo = new StereoCamera();
11
22
  _stereo.aspect = 0.5;
12
23
  const size = new Vector2();
13
24
 
25
+ /**
26
+ * Sets the given eye separation.
27
+ *
28
+ * @param {number} eyeSep - The eye separation to set.
29
+ */
14
30
  this.setEyeSeparation = function ( eyeSep ) {
15
31
 
16
32
  _stereo.eyeSep = eyeSep;
17
33
 
18
34
  };
19
35
 
36
+ /**
37
+ * Resizes the effect.
38
+ *
39
+ * @param {number} width - The width of the effect in logical pixels.
40
+ * @param {number} height - The height of the effect in logical pixels.
41
+ */
20
42
  this.setSize = function ( width, height ) {
21
43
 
22
44
  renderer.setSize( width, height );
23
45
 
24
46
  };
25
47
 
48
+ /**
49
+ * When using this effect, this method should be called instead of the
50
+ * default {@link WebGLRenderer#render}.
51
+ *
52
+ * @param {Object3D} scene - The scene to render.
53
+ * @param {Camera} camera - The camera.
54
+ */
26
55
  this.render = function ( scene, camera ) {
27
56
 
28
57
  if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
@@ -8,8 +8,30 @@ import {
8
8
  Scene,
9
9
  } from 'three';
10
10
 
11
+ /**
12
+ * This class represents a scene with a very basic room setup that can be used as
13
+ * input for {@link PMREMGenerator#fromScene}. The resulting PMREM represents the room's
14
+ * lighting and can be used for Image Based Lighting by assigning it to {@link Scene#environment}
15
+ * or directly as an environment map to PBR materials.
16
+ *
17
+ * This class uses a simple room setup and should only be used for development purposes.
18
+ * A more appropriate setup for production is {@link RoomEnvironment}.
19
+ *
20
+ * ```js
21
+ * const environment = new DebugEnvironment();
22
+ * const pmremGenerator = new THREE.PMREMGenerator( renderer );
23
+ *
24
+ * const envMap = pmremGenerator.fromScene( environment ).texture;
25
+ * scene.environment = envMap;
26
+ * ```
27
+ *
28
+ * @augments Scene
29
+ */
11
30
  class DebugEnvironment extends Scene {
12
31
 
32
+ /**
33
+ * Constructs a new debug environment.
34
+ */
13
35
  constructor() {
14
36
 
15
37
  super();
@@ -47,6 +69,33 @@ class DebugEnvironment extends Scene {
47
69
 
48
70
  }
49
71
 
72
+ /**
73
+ * Frees internal resources. This method should be called
74
+ * when the environment is no longer required.
75
+ */
76
+ dispose() {
77
+
78
+ const resources = new Set();
79
+
80
+ this.traverse( ( object ) => {
81
+
82
+ if ( object.isMesh ) {
83
+
84
+ resources.add( object.geometry );
85
+ resources.add( object.material );
86
+
87
+ }
88
+
89
+ } );
90
+
91
+ for ( const resource of resources ) {
92
+
93
+ resource.dispose();
94
+
95
+ }
96
+
97
+ }
98
+
50
99
  }
51
100
 
52
101
  export { DebugEnvironment };
@@ -1,7 +1,3 @@
1
- /**
2
- * https://github.com/google/model-viewer/blob/master/packages/model-viewer/src/three-components/EnvironmentScene.ts
3
- */
4
-
5
1
  import {
6
2
  BackSide,
7
3
  BoxGeometry,
@@ -12,6 +8,25 @@ import {
12
8
  Scene,
13
9
  } from 'three';
14
10
 
11
+ /**
12
+ * This class represents a scene with a basic room setup that can be used as
13
+ * input for {@link PMREMGenerator#fromScene}. The resulting PMREM represents the room's
14
+ * lighting and can be used for Image Based Lighting by assigning it to {@link Scene#environment}
15
+ * or directly as an environment map to PBR materials.
16
+ *
17
+ * The implementation is based on the [EnvironmentScene](https://github.com/google/model-viewer/blob/master/packages/model-viewer/src/three-components/EnvironmentScene.ts)
18
+ * component from the `model-viewer` project.
19
+ *
20
+ * ```js
21
+ * const environment = new RoomEnvironment();
22
+ * const pmremGenerator = new THREE.PMREMGenerator( renderer );
23
+ *
24
+ * const envMap = pmremGenerator.fromScene( environment ).texture;
25
+ * scene.environment = envMap;
26
+ * ```
27
+ *
28
+ * @augments Scene
29
+ */
15
30
  class RoomEnvironment extends Scene {
16
31
 
17
32
  constructor() {
@@ -108,6 +123,10 @@ class RoomEnvironment extends Scene {
108
123
 
109
124
  }
110
125
 
126
+ /**
127
+ * Frees internal resources. This method should be called
128
+ * when the environment is no longer required.
129
+ */
111
130
  dispose() {
112
131
 
113
132
  const resources = new Set();
@@ -1,24 +1,34 @@
1
1
  import { Color, ColorManagement, SRGBColorSpace } from 'three';
2
2
 
3
+ /* global DracoEncoderModule */
4
+
3
5
  /**
4
- * Export draco compressed files from threejs geometry objects.
6
+ * An exporter to compress geometry with the Draco library.
5
7
  *
6
- * Draco files are compressed and usually are smaller than conventional 3D file formats.
8
+ * [Draco]{@link https://google.github.io/draco/} is an open source library for compressing and
9
+ * decompressing 3D meshes and point clouds. Compressed geometry can be significantly smaller,
10
+ * at the cost of additional decoding time on the client device.
7
11
  *
8
- * The exporter receives a options object containing
9
- * - decodeSpeed, indicates how to tune the encoder regarding decode speed (0 gives better speed but worst quality)
10
- * - encodeSpeed, indicates how to tune the encoder parameters (0 gives better speed but worst quality)
11
- * - encoderMethod
12
- * - quantization, indicates the presision of each type of data stored in the draco file in the order (POSITION, NORMAL, COLOR, TEX_COORD, GENERIC)
13
- * - exportUvs
14
- * - exportNormals
15
- * - exportColor
12
+ * Standalone Draco files have a `.drc` extension, and contain vertex positions,
13
+ * normals, colors, and other attributes. Draco files *do not* contain materials,
14
+ * textures, animation, or node hierarchies to use these features, embed Draco geometry
15
+ * inside of a glTF file. A normal glTF file can be converted to a Draco-compressed glTF file
16
+ * using [glTF-Pipeline]{@link https://github.com/AnalyticalGraphicsInc/gltf-pipeline}.
17
+ *
18
+ * ```js
19
+ * const exporter = new DRACOExporter();
20
+ * const data = exporter.parse( mesh, options );
21
+ * ```
16
22
  */
17
-
18
- /* global DracoEncoderModule */
19
-
20
23
  class DRACOExporter {
21
24
 
25
+ /**
26
+ * Parses the given mesh or point cloud and generates the Draco output.
27
+ *
28
+ * @param {(Mesh|Points)} object - The mesh or point cloud to export.
29
+ * @param {DRACOExporter~Options} options - The export options.
30
+ * @return {ArrayBuffer} The exported Draco.
31
+ */
22
32
  parse( object, options = {} ) {
23
33
 
24
34
  options = Object.assign( {
@@ -249,7 +259,24 @@ function createVertexColorSRGBArray( attribute ) {
249
259
 
250
260
  // Encoder methods
251
261
 
262
+ /**
263
+ * Edgebreaker encoding.
264
+ *
265
+ * @static
266
+ * @constant
267
+ * @type {number}
268
+ * @default 1
269
+ */
252
270
  DRACOExporter.MESH_EDGEBREAKER_ENCODING = 1;
271
+
272
+ /**
273
+ * Sequential encoding.
274
+ *
275
+ * @static
276
+ * @constant
277
+ * @type {number}
278
+ * @default 0
279
+ */
253
280
  DRACOExporter.MESH_SEQUENTIAL_ENCODING = 0;
254
281
 
255
282
  // Geometry type
@@ -266,4 +293,17 @@ DRACOExporter.COLOR = 2;
266
293
  DRACOExporter.TEX_COORD = 3;
267
294
  DRACOExporter.GENERIC = 4;
268
295
 
296
+ /**
297
+ * Export options of `DRACOExporter`.
298
+ *
299
+ * @typedef {Object} DRACOExporter~Options
300
+ * @property {number} [decodeSpeed=5] - Indicates how to tune the encoder regarding decode speed (0 gives better speed but worst quality).
301
+ * @property {number} [encodeSpeed=5] - Indicates how to tune the encoder parameters (0 gives better speed but worst quality).
302
+ * @property {number} [encoderMethod=1] - Either sequential (very little compression) or Edgebreaker. Edgebreaker traverses the triangles of the mesh in a deterministic, spiral-like way which provides most of the benefits of this data format.
303
+ * @property {Array<number>} [quantization=[ 16, 8, 8, 8, 8 ]] - Indicates the precision of each type of data stored in the draco file in the order (POSITION, NORMAL, COLOR, TEX_COORD, GENERIC).
304
+ * @property {boolean} [exportUvs=true] - Whether to export UVs or not.
305
+ * @property {boolean} [exportNormals=true] - Whether to export normals or not.
306
+ * @property {boolean} [exportColor=false] - Whether to export colors or not.
307
+ **/
308
+
269
309
  export { DRACOExporter };
@@ -1,10 +1,3 @@
1
- /**
2
- * @author sciecode / https://github.com/sciecode
3
- *
4
- * EXR format references:
5
- * https://www.openexr.com/documentation/openexrfilelayout.pdf
6
- */
7
-
8
1
  import {
9
2
  FloatType,
10
3
  HalfFloatType,
@@ -19,13 +12,41 @@ const NO_COMPRESSION = 0;
19
12
  const ZIPS_COMPRESSION = 2;
20
13
  const ZIP_COMPRESSION = 3;
21
14
 
15
+ /**
16
+ * An exporter for EXR.
17
+ *
18
+ * EXR ( Extended Dynamic Range) is an [open format specification]{@link https://github.com/AcademySoftwareFoundation/openexr}
19
+ * for professional-grade image storage format of the motion picture industry. The purpose of
20
+ * format is to accurately and efficiently represent high-dynamic-range scene-linear image data
21
+ * and associated metadata. The library is widely used in host application software where accuracy
22
+ * is critical, such as photorealistic rendering, texture access, image compositing, deep compositing,
23
+ * and DI.
24
+ *
25
+ * ```js
26
+ * const exporter = new EXRExporter();
27
+ * const result = await exporter.parse( renderer, options );
28
+ * ```
29
+ */
22
30
  class EXRExporter {
23
31
 
32
+ /**
33
+ * This method has two variants.
34
+ *
35
+ * - When exporting a data texture, it receives two parameters. The texture and the exporter options.
36
+ * - When exporting a render target (e.g. a PMREM), it receives three parameters. The renderer, the
37
+ * render target and the exporter options.
38
+ *
39
+ * @async
40
+ * @param {(DataTexture|WebGPURenderer|WebGLRenderer)} arg1 - The data texture to export or a renderer.
41
+ * @param {(EXRExporter~Options|RenderTarget)} arg2 - The exporter options or a render target.
42
+ * @param {EXRExporter~Options} [arg3] - The exporter options.
43
+ * @return {Promise<Uint8Array>} A Promise that resolves with the exported EXR.
44
+ */
24
45
  async parse( arg1, arg2, arg3 ) {
25
46
 
26
47
  if ( ! arg1 || ! ( arg1.isWebGLRenderer || arg1.isWebGPURenderer || arg1.isDataTexture ) ) {
27
48
 
28
- throw Error( 'EXRExporter.parse: Unsupported first parameter, expected instance of WebGLRenderer or DataTexture.' );
49
+ throw Error( 'EXRExporter.parse: Unsupported first parameter, expected instance of WebGLRenderer, WebGPURenderer or DataTexture.' );
29
50
 
30
51
  } else if ( arg1.isWebGLRenderer || arg1.isWebGPURenderer ) {
31
52
 
@@ -584,4 +605,12 @@ function getFloat32( arr, i ) {
584
605
 
585
606
  }
586
607
 
608
+ /**
609
+ * Export options of `EXRExporter`.
610
+ *
611
+ * @typedef {Object} EXRExporter~Options
612
+ * @property {(HalfFloatType|FloatType)} [type=HalfFloatType] - Output data type.
613
+ * @property {(NO_COMPRESSION|ZIP_COMPRESSION|ZIPS_COMPRESSION)} [type=ZIP_COMPRESSION] - The compression algorithm.
614
+ **/
615
+
587
616
  export { EXRExporter, NO_COMPRESSION, ZIP_COMPRESSION, ZIPS_COMPRESSION };