@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
@@ -3,20 +3,70 @@ import {
3
3
  } from 'three';
4
4
  import { Pass } from './Pass.js';
5
5
 
6
+ /**
7
+ * This class can be used to force a clear operation for the current read or
8
+ * default framebuffer (when rendering to screen).
9
+ *
10
+ * ```js
11
+ * const clearPass = new ClearPass();
12
+ * composer.addPass( clearPass );
13
+ * ```
14
+ *
15
+ * @augments Pass
16
+ */
6
17
  class ClearPass extends Pass {
7
18
 
8
- constructor( clearColor, clearAlpha ) {
19
+ /**
20
+ * Constructs a new clear pass.
21
+ *
22
+ * @param {(number|Color|string)} [clearColor=0x000000] - The clear color.
23
+ * @param {number} [clearAlpha=0] - The clear alpha.
24
+ */
25
+ constructor( clearColor = 0x000000, clearAlpha = 0 ) {
9
26
 
10
27
  super();
11
28
 
29
+ /**
30
+ * Overwritten to disable the swap.
31
+ *
32
+ * @type {boolean}
33
+ * @default false
34
+ */
12
35
  this.needsSwap = false;
13
36
 
14
- this.clearColor = ( clearColor !== undefined ) ? clearColor : 0x000000;
15
- this.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0;
37
+ /**
38
+ * The clear color.
39
+ *
40
+ * @type {(number|Color|string)}
41
+ * @default 0x000000
42
+ */
43
+ this.clearColor = clearColor;
44
+
45
+ /**
46
+ * The clear alpha.
47
+ *
48
+ * @type {number}
49
+ * @default 0
50
+ */
51
+ this.clearAlpha = clearAlpha;
52
+
53
+ // internals
54
+
16
55
  this._oldClearColor = new Color();
17
56
 
18
57
  }
19
58
 
59
+ /**
60
+ * Performs the clear operation. This affects the current read or the default framebuffer.
61
+ *
62
+ * @param {WebGLRenderer} renderer - The renderer.
63
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
64
+ * destination for the pass.
65
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
66
+ * previous pass from this buffer.
67
+ * @param {number} deltaTime - The delta time in seconds.
68
+ * @param {boolean} maskActive - Whether masking is active or not.
69
+ */
20
70
  render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
21
71
 
22
72
  let oldClearAlpha;
@@ -10,30 +10,78 @@ import {
10
10
  } from 'three';
11
11
  import { Pass } from './Pass.js';
12
12
 
13
+ /**
14
+ * This pass can be used to render a cube texture over the entire screen.
15
+ *
16
+ * ```js
17
+ * const cubeMap = new THREE.CubeTextureLoader().load( urls );
18
+ *
19
+ * const cubeTexturePass = new CubeTexturePass( camera, cubemap );
20
+ * composer.addPass( cubeTexturePass );
21
+ * ```
22
+ *
23
+ * @augments Pass
24
+ */
13
25
  class CubeTexturePass extends Pass {
14
26
 
27
+ /**
28
+ * Constructs a new cube texture pass.
29
+ *
30
+ * @param {PerspectiveCamera} camera - The camera.
31
+ * @param {CubeTexture} tCube - The cube texture to render.
32
+ * @param {number} [opacity=1] - The opacity.
33
+ */
15
34
  constructor( camera, tCube, opacity = 1 ) {
16
35
 
17
36
  super();
18
37
 
38
+ /**
39
+ * The camera.
40
+ *
41
+ * @type {PerspectiveCamera}
42
+ */
19
43
  this.camera = camera;
20
44
 
45
+ /**
46
+ * The cube texture to render.
47
+ *
48
+ * @type {CubeTexture}
49
+ */
50
+ this.tCube = tCube;
51
+
52
+ /**
53
+ * The opacity.
54
+ *
55
+ * @type {number}
56
+ * @default 1
57
+ */
58
+ this.opacity = opacity;
59
+
60
+ /**
61
+ * Overwritten to disable the swap.
62
+ *
63
+ * @type {boolean}
64
+ * @default false
65
+ */
21
66
  this.needsSwap = false;
22
67
 
23
- this.cubeShader = ShaderLib[ 'cube' ];
24
- this.cubeMesh = new Mesh(
68
+ // internals
69
+
70
+ const cubeShader = ShaderLib[ 'cube' ];
71
+
72
+ this._cubeMesh = new Mesh(
25
73
  new BoxGeometry( 10, 10, 10 ),
26
74
  new ShaderMaterial( {
27
- uniforms: UniformsUtils.clone( this.cubeShader.uniforms ),
28
- vertexShader: this.cubeShader.vertexShader,
29
- fragmentShader: this.cubeShader.fragmentShader,
75
+ uniforms: UniformsUtils.clone( cubeShader.uniforms ),
76
+ vertexShader: cubeShader.vertexShader,
77
+ fragmentShader: cubeShader.fragmentShader,
30
78
  depthTest: false,
31
79
  depthWrite: false,
32
80
  side: BackSide
33
81
  } )
34
82
  );
35
83
 
36
- Object.defineProperty( this.cubeMesh.material, 'envMap', {
84
+ Object.defineProperty( this._cubeMesh.material, 'envMap', {
37
85
 
38
86
  get: function () {
39
87
 
@@ -43,40 +91,52 @@ class CubeTexturePass extends Pass {
43
91
 
44
92
  } );
45
93
 
46
- this.tCube = tCube;
47
- this.opacity = opacity;
48
-
49
- this.cubeScene = new Scene();
50
- this.cubeCamera = new PerspectiveCamera();
51
- this.cubeScene.add( this.cubeMesh );
94
+ this._cubeScene = new Scene();
95
+ this._cubeCamera = new PerspectiveCamera();
96
+ this._cubeScene.add( this._cubeMesh );
52
97
 
53
98
  }
54
99
 
100
+ /**
101
+ * Performs the cube texture pass.
102
+ *
103
+ * @param {WebGLRenderer} renderer - The renderer.
104
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
105
+ * destination for the pass.
106
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
107
+ * previous pass from this buffer.
108
+ * @param {number} deltaTime - The delta time in seconds.
109
+ * @param {boolean} maskActive - Whether masking is active or not.
110
+ */
55
111
  render( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {
56
112
 
57
113
  const oldAutoClear = renderer.autoClear;
58
114
  renderer.autoClear = false;
59
115
 
60
- this.cubeCamera.projectionMatrix.copy( this.camera.projectionMatrix );
61
- this.cubeCamera.quaternion.setFromRotationMatrix( this.camera.matrixWorld );
116
+ this._cubeCamera.projectionMatrix.copy( this.camera.projectionMatrix );
117
+ this._cubeCamera.quaternion.setFromRotationMatrix( this.camera.matrixWorld );
62
118
 
63
- this.cubeMesh.material.uniforms.tCube.value = this.tCube;
64
- this.cubeMesh.material.uniforms.tFlip.value = ( this.tCube.isCubeTexture && this.tCube.isRenderTargetTexture === false ) ? - 1 : 1;
65
- this.cubeMesh.material.uniforms.opacity.value = this.opacity;
66
- this.cubeMesh.material.transparent = ( this.opacity < 1.0 );
119
+ this._cubeMesh.material.uniforms.tCube.value = this.tCube;
120
+ this._cubeMesh.material.uniforms.tFlip.value = ( this.tCube.isCubeTexture && this.tCube.isRenderTargetTexture === false ) ? - 1 : 1;
121
+ this._cubeMesh.material.uniforms.opacity.value = this.opacity;
122
+ this._cubeMesh.material.transparent = ( this.opacity < 1.0 );
67
123
 
68
124
  renderer.setRenderTarget( this.renderToScreen ? null : readBuffer );
69
125
  if ( this.clear ) renderer.clear();
70
- renderer.render( this.cubeScene, this.cubeCamera );
126
+ renderer.render( this._cubeScene, this._cubeCamera );
71
127
 
72
128
  renderer.autoClear = oldAutoClear;
73
129
 
74
130
  }
75
131
 
132
+ /**
133
+ * Frees the GPU-related resources allocated by this instance. Call this
134
+ * method whenever the pass is no longer used in your app.
135
+ */
76
136
  dispose() {
77
137
 
78
- this.cubeMesh.geometry.dispose();
79
- this.cubeMesh.material.dispose();
138
+ this._cubeMesh.geometry.dispose();
139
+ this._cubeMesh.material.dispose();
80
140
 
81
141
  }
82
142
 
@@ -5,33 +5,77 @@ import {
5
5
  import { Pass, FullScreenQuad } from './Pass.js';
6
6
  import { DotScreenShader } from '../shaders/DotScreenShader.js';
7
7
 
8
+ /**
9
+ * Pass for creating a dot-screen effect.
10
+ *
11
+ * ```js
12
+ * const pass = new DotScreenPass( new THREE.Vector2( 0, 0 ), 0.5, 0.8 );
13
+ * composer.addPass( pass );
14
+ * ```
15
+ *
16
+ * @augments Pass
17
+ */
8
18
  class DotScreenPass extends Pass {
9
19
 
20
+ /**
21
+ * Constructs a new dot screen pass.
22
+ *
23
+ * @param {Vector2} center - The center point.
24
+ * @param {number} angle - The rotation of the effect in radians.
25
+ * @param {number} scale - The scale of the effect. A higher value means smaller dots.
26
+ */
10
27
  constructor( center, angle, scale ) {
11
28
 
12
29
  super();
13
30
 
14
- const shader = DotScreenShader;
15
-
16
- this.uniforms = UniformsUtils.clone( shader.uniforms );
31
+ /**
32
+ * The pass uniforms. Use this object if you want to update the
33
+ * `center`, `angle` or `scale` values at runtime.
34
+ * ```js
35
+ * pass.uniforms.center.value.copy( center );
36
+ * pass.uniforms.angle.value = 0;
37
+ * pass.uniforms.scale.value = 0.5;
38
+ * ```
39
+ *
40
+ * @type {Object}
41
+ */
42
+ this.uniforms = UniformsUtils.clone( DotScreenShader.uniforms );
17
43
 
18
44
  if ( center !== undefined ) this.uniforms[ 'center' ].value.copy( center );
19
45
  if ( angle !== undefined ) this.uniforms[ 'angle' ].value = angle;
20
46
  if ( scale !== undefined ) this.uniforms[ 'scale' ].value = scale;
21
47
 
48
+ /**
49
+ * The pass material.
50
+ *
51
+ * @type {ShaderMaterial}
52
+ */
22
53
  this.material = new ShaderMaterial( {
23
54
 
24
- name: shader.name,
55
+ name: DotScreenShader.name,
25
56
  uniforms: this.uniforms,
26
- vertexShader: shader.vertexShader,
27
- fragmentShader: shader.fragmentShader
57
+ vertexShader: DotScreenShader.vertexShader,
58
+ fragmentShader: DotScreenShader.fragmentShader
28
59
 
29
60
  } );
30
61
 
31
- this.fsQuad = new FullScreenQuad( this.material );
62
+ // internals
63
+
64
+ this._fsQuad = new FullScreenQuad( this.material );
32
65
 
33
66
  }
34
67
 
68
+ /**
69
+ * Performs the dot screen pass.
70
+ *
71
+ * @param {WebGLRenderer} renderer - The renderer.
72
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
73
+ * destination for the pass.
74
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
75
+ * previous pass from this buffer.
76
+ * @param {number} deltaTime - The delta time in seconds.
77
+ * @param {boolean} maskActive - Whether masking is active or not.
78
+ */
35
79
  render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
36
80
 
37
81
  this.uniforms[ 'tDiffuse' ].value = readBuffer.texture;
@@ -40,23 +84,27 @@ class DotScreenPass extends Pass {
40
84
  if ( this.renderToScreen ) {
41
85
 
42
86
  renderer.setRenderTarget( null );
43
- this.fsQuad.render( renderer );
87
+ this._fsQuad.render( renderer );
44
88
 
45
89
  } else {
46
90
 
47
91
  renderer.setRenderTarget( writeBuffer );
48
92
  if ( this.clear ) renderer.clear();
49
- this.fsQuad.render( renderer );
93
+ this._fsQuad.render( renderer );
50
94
 
51
95
  }
52
96
 
53
97
  }
54
98
 
99
+ /**
100
+ * Frees the GPU-related resources allocated by this instance. Call this
101
+ * method whenever the pass is no longer used in your app.
102
+ */
55
103
  dispose() {
56
104
 
57
105
  this.material.dispose();
58
106
 
59
- this.fsQuad.dispose();
107
+ this._fsQuad.dispose();
60
108
 
61
109
  }
62
110
 
@@ -9,10 +9,51 @@ import { CopyShader } from '../shaders/CopyShader.js';
9
9
  import { ShaderPass } from './ShaderPass.js';
10
10
  import { ClearMaskPass, MaskPass } from './MaskPass.js';
11
11
 
12
+ /**
13
+ * Used to implement post-processing effects in three.js.
14
+ * The class manages a chain of post-processing passes to produce the final visual result.
15
+ * Post-processing passes are executed in order of their addition/insertion.
16
+ * The last pass is automatically rendered to screen.
17
+ *
18
+ * This module can only be used with {@link WebGLRenderer}.
19
+ *
20
+ * ```js
21
+ * const composer = new EffectComposer( renderer );
22
+ *
23
+ * // adding some passes
24
+ * const renderPass = new RenderPass( scene, camera );
25
+ * composer.addPass( renderPass );
26
+ *
27
+ * const glitchPass = new GlitchPass();
28
+ * composer.addPass( glitchPass );
29
+ *
30
+ * const outputPass = new OutputPass()
31
+ * composer.addPass( outputPass );
32
+ *
33
+ * function animate() {
34
+ *
35
+ * composer.render(); // instead of renderer.render()
36
+ *
37
+ * }
38
+ * ```
39
+ */
12
40
  class EffectComposer {
13
41
 
42
+ /**
43
+ * Constructs a new effect composer.
44
+ *
45
+ * @param {WebGLRenderer} renderer - The renderer.
46
+ * @param {WebGLRenderTarget} [renderTarget] - This render target and a clone will
47
+ * be used as the internal read and write buffers. If not given, the composer creates
48
+ * the buffers automatically.
49
+ */
14
50
  constructor( renderer, renderTarget ) {
15
51
 
52
+ /**
53
+ * The renderer.
54
+ *
55
+ * @type {WebGLRenderer}
56
+ */
16
57
  this.renderer = renderer;
17
58
 
18
59
  this._pixelRatio = renderer.getPixelRatio();
@@ -37,20 +78,59 @@ class EffectComposer {
37
78
  this.renderTarget2 = renderTarget.clone();
38
79
  this.renderTarget2.texture.name = 'EffectComposer.rt2';
39
80
 
81
+ /**
82
+ * A reference to the internal write buffer. Passes usually write
83
+ * their result into this buffer.
84
+ *
85
+ * @type {WebGLRenderTarget}
86
+ */
40
87
  this.writeBuffer = this.renderTarget1;
88
+
89
+ /**
90
+ * A reference to the internal read buffer. Passes usually read
91
+ * the previous render result from this buffer.
92
+ *
93
+ * @type {WebGLRenderTarget}
94
+ */
41
95
  this.readBuffer = this.renderTarget2;
42
96
 
97
+ /**
98
+ * Whether the final pass is rendered to the screen (default framebuffer) or not.
99
+ *
100
+ * @type {boolean}
101
+ * @default true
102
+ */
43
103
  this.renderToScreen = true;
44
104
 
105
+ /**
106
+ * An array representing the (ordered) chain of post-processing passes.
107
+ *
108
+ * @type {Array<Pass>}
109
+ */
45
110
  this.passes = [];
46
111
 
112
+ /**
113
+ * A copy pass used for internal swap operations.
114
+ *
115
+ * @private
116
+ * @type {ShaderPass}
117
+ */
47
118
  this.copyPass = new ShaderPass( CopyShader );
48
119
  this.copyPass.material.blending = NoBlending;
49
120
 
121
+ /**
122
+ * The intenral clock for managing time data.
123
+ *
124
+ * @private
125
+ * @type {Clock}
126
+ */
50
127
  this.clock = new Clock();
51
128
 
52
129
  }
53
130
 
131
+ /**
132
+ * Swaps the internal read/write buffers.
133
+ */
54
134
  swapBuffers() {
55
135
 
56
136
  const tmp = this.readBuffer;
@@ -59,6 +139,11 @@ class EffectComposer {
59
139
 
60
140
  }
61
141
 
142
+ /**
143
+ * Adds the given pass to the pass chain.
144
+ *
145
+ * @param {Pass} pass - The pass to add.
146
+ */
62
147
  addPass( pass ) {
63
148
 
64
149
  this.passes.push( pass );
@@ -66,6 +151,12 @@ class EffectComposer {
66
151
 
67
152
  }
68
153
 
154
+ /**
155
+ * Inserts the given pass at a given index.
156
+ *
157
+ * @param {Pass} pass - The pass to insert.
158
+ * @param {number} index - The index into the pass chain.
159
+ */
69
160
  insertPass( pass, index ) {
70
161
 
71
162
  this.passes.splice( index, 0, pass );
@@ -73,6 +164,11 @@ class EffectComposer {
73
164
 
74
165
  }
75
166
 
167
+ /**
168
+ * Removes the given pass from the pass chain.
169
+ *
170
+ * @param {Pass} pass - The pass to remove.
171
+ */
76
172
  removePass( pass ) {
77
173
 
78
174
  const index = this.passes.indexOf( pass );
@@ -85,6 +181,12 @@ class EffectComposer {
85
181
 
86
182
  }
87
183
 
184
+ /**
185
+ * Returns `true` if the pass for the given index is the last enabled pass in the pass chain.
186
+ *
187
+ * @param {number} passIndex - The pass index.
188
+ * @return {boolean} Whether the the pass for the given index is the last pass in the pass chain.
189
+ */
88
190
  isLastEnabledPass( passIndex ) {
89
191
 
90
192
  for ( let i = passIndex + 1; i < this.passes.length; i ++ ) {
@@ -101,6 +203,12 @@ class EffectComposer {
101
203
 
102
204
  }
103
205
 
206
+ /**
207
+ * Executes all enabled post-processing passes in order to produce the final frame.
208
+ *
209
+ * @param {number} deltaTime - The delta time in seconds. If not given, the composer computes
210
+ * its own time delta value.
211
+ */
104
212
  render( deltaTime ) {
105
213
 
106
214
  // deltaTime value is in seconds
@@ -165,6 +273,12 @@ class EffectComposer {
165
273
 
166
274
  }
167
275
 
276
+ /**
277
+ * Resets the internal state of the EffectComposer.
278
+ *
279
+ * @param {WebGLRenderTarget} [renderTarget] - This render target has the same purpose like
280
+ * the one from the constructor. If set, it is used to setup the read and write buffers.
281
+ */
168
282
  reset( renderTarget ) {
169
283
 
170
284
  if ( renderTarget === undefined ) {
@@ -189,6 +303,13 @@ class EffectComposer {
189
303
 
190
304
  }
191
305
 
306
+ /**
307
+ * Resizes the internal read and write buffers as well as all passes. Similar to {@link WebGLRenderer#setSize},
308
+ * this method honors the current pixel ration.
309
+ *
310
+ * @param {number} width - The width in logical pixels.
311
+ * @param {number} height - The height in logical pixels.
312
+ */
192
313
  setSize( width, height ) {
193
314
 
194
315
  this._width = width;
@@ -208,6 +329,12 @@ class EffectComposer {
208
329
 
209
330
  }
210
331
 
332
+ /**
333
+ * Sets device pixel ratio. This is usually used for HiDPI device to prevent blurring output.
334
+ * Setting the pixel ratio will automatically resize the composer.
335
+ *
336
+ * @param {number} pixelRatio - The pixel ratio to set.
337
+ */
211
338
  setPixelRatio( pixelRatio ) {
212
339
 
213
340
  this._pixelRatio = pixelRatio;
@@ -216,6 +343,10 @@ class EffectComposer {
216
343
 
217
344
  }
218
345
 
346
+ /**
347
+ * Frees the GPU-related resources allocated by this instance. Call this
348
+ * method whenever the composer is no longer used in your app.
349
+ */
219
350
  dispose() {
220
351
 
221
352
  this.renderTarget1.dispose();
@@ -5,16 +5,47 @@ import {
5
5
  import { Pass, FullScreenQuad } from './Pass.js';
6
6
  import { FilmShader } from '../shaders/FilmShader.js';
7
7
 
8
+ /**
9
+ * This pass can be used to create a film grain effect.
10
+ *
11
+ * ```js
12
+ * const filmPass = new FilmPass();
13
+ * composer.addPass( filmPass );
14
+ * ```
15
+ *
16
+ * @augments Pass
17
+ */
8
18
  class FilmPass extends Pass {
9
19
 
20
+ /**
21
+ * Constructs a new film pass.
22
+ *
23
+ * @param {number} [intensity=0.5] - The grain intensity in the range `[0,1]` (0 = no effect, 1 = full effect).
24
+ * @param {boolean} [grayscale=false] - Whether to apply a grayscale effect or not.
25
+ */
10
26
  constructor( intensity = 0.5, grayscale = false ) {
11
27
 
12
28
  super();
13
29
 
14
30
  const shader = FilmShader;
15
31
 
32
+ /**
33
+ * The pass uniforms. Use this object if you want to update the
34
+ * `intensity` or `grayscale` values at runtime.
35
+ * ```js
36
+ * pass.uniforms.intensity.value = 1;
37
+ * pass.uniforms.grayscale.value = true;
38
+ * ```
39
+ *
40
+ * @type {Object}
41
+ */
16
42
  this.uniforms = UniformsUtils.clone( shader.uniforms );
17
43
 
44
+ /**
45
+ * The pass material.
46
+ *
47
+ * @type {ShaderMaterial}
48
+ */
18
49
  this.material = new ShaderMaterial( {
19
50
 
20
51
  name: shader.name,
@@ -24,13 +55,26 @@ class FilmPass extends Pass {
24
55
 
25
56
  } );
26
57
 
27
- this.uniforms.intensity.value = intensity; // (0 = no effect, 1 = full effect)
58
+ this.uniforms.intensity.value = intensity;
28
59
  this.uniforms.grayscale.value = grayscale;
29
60
 
30
- this.fsQuad = new FullScreenQuad( this.material );
61
+ // internals
62
+
63
+ this._fsQuad = new FullScreenQuad( this.material );
31
64
 
32
65
  }
33
66
 
67
+ /**
68
+ * Performs the film pass.
69
+ *
70
+ * @param {WebGLRenderer} renderer - The renderer.
71
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
72
+ * destination for the pass.
73
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
74
+ * previous pass from this buffer.
75
+ * @param {number} deltaTime - The delta time in seconds.
76
+ * @param {boolean} maskActive - Whether masking is active or not.
77
+ */
34
78
  render( renderer, writeBuffer, readBuffer, deltaTime /*, maskActive */ ) {
35
79
 
36
80
  this.uniforms[ 'tDiffuse' ].value = readBuffer.texture;
@@ -39,23 +83,27 @@ class FilmPass extends Pass {
39
83
  if ( this.renderToScreen ) {
40
84
 
41
85
  renderer.setRenderTarget( null );
42
- this.fsQuad.render( renderer );
86
+ this._fsQuad.render( renderer );
43
87
 
44
88
  } else {
45
89
 
46
90
  renderer.setRenderTarget( writeBuffer );
47
91
  if ( this.clear ) renderer.clear();
48
- this.fsQuad.render( renderer );
92
+ this._fsQuad.render( renderer );
49
93
 
50
94
  }
51
95
 
52
96
  }
53
97
 
98
+ /**
99
+ * Frees the GPU-related resources allocated by this instance. Call this
100
+ * method whenever the pass is no longer used in your app.
101
+ */
54
102
  dispose() {
55
103
 
56
104
  this.material.dispose();
57
105
 
58
- this.fsQuad.dispose();
106
+ this._fsQuad.dispose();
59
107
 
60
108
  }
61
109