@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
@@ -10,41 +10,102 @@ import { Pass, FullScreenQuad } from './Pass.js';
10
10
  import { CopyShader } from '../shaders/CopyShader.js';
11
11
 
12
12
  /**
13
- *
14
- * Supersample Anti-Aliasing Render Pass
15
- *
16
- * This manual approach to SSAA re-renders the scene ones for each sample with camera jitter and accumulates the results.
17
- *
18
- * References: https://en.wikipedia.org/wiki/Supersampling
19
- *
20
- */
21
-
13
+ * Supersample Anti-Aliasing Render Pass.
14
+ *
15
+ * This manual approach to SSAA re-renders the scene ones for each sample with camera jitter and accumulates the results.
16
+ *
17
+ * ```js
18
+ * const ssaaRenderPass = new SSAARenderPass( scene, camera );
19
+ * ssaaRenderPass.sampleLevel = 3;
20
+ * composer.addPass( ssaaRenderPass );
21
+ * ```
22
+ *
23
+ * @augments Pass
24
+ */
22
25
  class SSAARenderPass extends Pass {
23
26
 
24
- constructor( scene, camera, clearColor, clearAlpha ) {
27
+ /**
28
+ * Constructs a new SSAA render pass.
29
+ *
30
+ * @param {Scene} scene - The scene to render.
31
+ * @param {Camera} camera - The camera.
32
+ * @param {?(number|Color|string)} [clearColor=0x000000] - The clear color of the render pass.
33
+ * @param {?number} [clearAlpha=0] - The clear alpha of the render pass.
34
+ */
35
+ constructor( scene, camera, clearColor = 0x000000, clearAlpha = 0 ) {
25
36
 
26
37
  super();
27
38
 
39
+ /**
40
+ * The scene to render.
41
+ *
42
+ * @type {Scene}
43
+ */
28
44
  this.scene = scene;
45
+
46
+ /**
47
+ * The camera.
48
+ *
49
+ * @type {Camera}
50
+ */
29
51
  this.camera = camera;
30
52
 
31
- this.sampleLevel = 4; // specified as n, where the number of samples is 2^n, so sampleLevel = 4, is 2^4 samples, 16.
53
+ /**
54
+ * The sample level. Specified as n, where the number of
55
+ * samples is 2^n, so sampleLevel = 4, is 2^4 samples, 16.
56
+ *
57
+ * @type {number}
58
+ * @default 4
59
+ */
60
+ this.sampleLevel = 4;
61
+
62
+ /**
63
+ * Whether the pass should be unbiased or not. This property has the most
64
+ * visible effect when rendering to a RGBA8 buffer because it mitigates
65
+ * rounding errors. By default RGBA16F is used.
66
+ *
67
+ * @type {boolean}
68
+ * @default true
69
+ */
32
70
  this.unbiased = true;
33
71
 
72
+ /**
73
+ * Whether to use a stencil buffer or not. This property can't
74
+ * be changed after the first render.
75
+ *
76
+ * @type {boolean}
77
+ * @default false
78
+ */
34
79
  this.stencilBuffer = false;
35
80
 
36
- // as we need to clear the buffer in this pass, clearColor must be set to something, defaults to black.
37
- this.clearColor = ( clearColor !== undefined ) ? clearColor : 0x000000;
38
- this.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0;
81
+ /**
82
+ * The clear color of the render pass.
83
+ *
84
+ * @type {?(number|Color|string)}
85
+ * @default 0x000000
86
+ */
87
+ this.clearColor = clearColor;
88
+
89
+ /**
90
+ * The clear alpha of the render pass.
91
+ *
92
+ * @type {?number}
93
+ * @default 0
94
+ */
95
+ this.clearAlpha = clearAlpha;
96
+
97
+ // internals
98
+
99
+ this._sampleRenderTarget = null;
100
+
39
101
  this._oldClearColor = new Color();
40
102
 
41
- const copyShader = CopyShader;
42
- this.copyUniforms = UniformsUtils.clone( copyShader.uniforms );
103
+ this._copyUniforms = UniformsUtils.clone( CopyShader.uniforms );
43
104
 
44
- this.copyMaterial = new ShaderMaterial( {
45
- uniforms: this.copyUniforms,
46
- vertexShader: copyShader.vertexShader,
47
- fragmentShader: copyShader.fragmentShader,
105
+ this._copyMaterial = new ShaderMaterial( {
106
+ uniforms: this._copyUniforms,
107
+ vertexShader: CopyShader.vertexShader,
108
+ fragmentShader: CopyShader.fragmentShader,
48
109
  transparent: true,
49
110
  depthTest: false,
50
111
  depthWrite: false,
@@ -52,37 +113,58 @@ class SSAARenderPass extends Pass {
52
113
  blending: AdditiveBlending
53
114
  } );
54
115
 
55
- this.fsQuad = new FullScreenQuad( this.copyMaterial );
116
+ this._fsQuad = new FullScreenQuad( this._copyMaterial );
56
117
 
57
118
  }
58
119
 
120
+ /**
121
+ * Frees the GPU-related resources allocated by this instance. Call this
122
+ * method whenever the pass is no longer used in your app.
123
+ */
59
124
  dispose() {
60
125
 
61
- if ( this.sampleRenderTarget ) {
126
+ if ( this._sampleRenderTarget ) {
62
127
 
63
- this.sampleRenderTarget.dispose();
64
- this.sampleRenderTarget = null;
128
+ this._sampleRenderTarget.dispose();
129
+ this._sampleRenderTarget = null;
65
130
 
66
131
  }
67
132
 
68
- this.copyMaterial.dispose();
133
+ this._copyMaterial.dispose();
69
134
 
70
- this.fsQuad.dispose();
135
+ this._fsQuad.dispose();
71
136
 
72
137
  }
73
138
 
139
+ /**
140
+ * Sets the size of the pass.
141
+ *
142
+ * @param {number} width - The width to set.
143
+ * @param {number} height - The width to set.
144
+ */
74
145
  setSize( width, height ) {
75
146
 
76
- if ( this.sampleRenderTarget ) this.sampleRenderTarget.setSize( width, height );
147
+ if ( this._sampleRenderTarget ) this._sampleRenderTarget.setSize( width, height );
77
148
 
78
149
  }
79
150
 
80
- render( renderer, writeBuffer, readBuffer ) {
151
+ /**
152
+ * Performs the SSAA render pass.
153
+ *
154
+ * @param {WebGLRenderer} renderer - The renderer.
155
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
156
+ * destination for the pass.
157
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
158
+ * previous pass from this buffer.
159
+ * @param {number} deltaTime - The delta time in seconds.
160
+ * @param {boolean} maskActive - Whether masking is active or not.
161
+ */
162
+ render( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive */ ) {
81
163
 
82
- if ( ! this.sampleRenderTarget ) {
164
+ if ( ! this._sampleRenderTarget ) {
83
165
 
84
- this.sampleRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height, { type: HalfFloatType, stencilBuffer: this.stencilBuffer } );
85
- this.sampleRenderTarget.texture.name = 'SSAARenderPass.sample';
166
+ this._sampleRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height, { type: HalfFloatType, stencilBuffer: this.stencilBuffer } );
167
+ this._sampleRenderTarget.texture.name = 'SSAARenderPass.sample';
86
168
 
87
169
  }
88
170
 
@@ -96,7 +178,7 @@ class SSAARenderPass extends Pass {
96
178
 
97
179
  const baseSampleWeight = 1.0 / jitterOffsets.length;
98
180
  const roundingRange = 1 / 32;
99
- this.copyUniforms[ 'tDiffuse' ].value = this.sampleRenderTarget.texture;
181
+ this._copyUniforms[ 'tDiffuse' ].value = this._sampleRenderTarget.texture;
100
182
 
101
183
  const viewOffset = {
102
184
 
@@ -145,9 +227,9 @@ class SSAARenderPass extends Pass {
145
227
 
146
228
  }
147
229
 
148
- this.copyUniforms[ 'opacity' ].value = sampleWeight;
230
+ this._copyUniforms[ 'opacity' ].value = sampleWeight;
149
231
  renderer.setClearColor( this.clearColor, this.clearAlpha );
150
- renderer.setRenderTarget( this.sampleRenderTarget );
232
+ renderer.setRenderTarget( this._sampleRenderTarget );
151
233
  renderer.clear();
152
234
  renderer.render( this.scene, this.camera );
153
235
 
@@ -160,7 +242,7 @@ class SSAARenderPass extends Pass {
160
242
 
161
243
  }
162
244
 
163
- this.fsQuad.render( renderer );
245
+ this._fsQuad.render( renderer );
164
246
 
165
247
  }
166
248
 
@@ -27,35 +27,123 @@ import { SimplexNoise } from '../math/SimplexNoise.js';
27
27
  import { SSAOBlurShader, SSAODepthShader, SSAOShader } from '../shaders/SSAOShader.js';
28
28
  import { CopyShader } from '../shaders/CopyShader.js';
29
29
 
30
+ /**
31
+ * A pass for a basic SSAO effect.
32
+ *
33
+ * {@link SAOPass} and {@link GTAPass} produce a more advanced AO but are also
34
+ * more expensive.
35
+ *
36
+ * ```js
37
+ * const ssaoPass = new SSAOPass( scene, camera, width, height );
38
+ * composer.addPass( ssaoPass );
39
+ * ```
40
+ *
41
+ * @augments Pass
42
+ */
30
43
  class SSAOPass extends Pass {
31
44
 
32
- constructor( scene, camera, width, height, kernelSize = 32 ) {
45
+ /**
46
+ * Constructs a new SSAO pass.
47
+ *
48
+ * @param {Scene} scene - The scene to compute the AO for.
49
+ * @param {Camera} camera - The camera.
50
+ * @param {number} [width=512] - The width of the effect.
51
+ * @param {number} [height=512] - The height of the effect.
52
+ * @param {number} [kernelSize=32] - The kernel size.
53
+ */
54
+ constructor( scene, camera, width = 512, height = 512, kernelSize = 32 ) {
33
55
 
34
56
  super();
35
57
 
36
- this.width = ( width !== undefined ) ? width : 512;
37
- this.height = ( height !== undefined ) ? height : 512;
58
+ /**
59
+ * The width of the effect.
60
+ *
61
+ * @type {number}
62
+ * @default 512
63
+ */
64
+ this.width = width;
65
+
66
+ /**
67
+ * The height of the effect.
68
+ *
69
+ * @type {number}
70
+ * @default 512
71
+ */
72
+ this.height = height;
38
73
 
74
+ /**
75
+ * Overwritten to perform a clear operation by default.
76
+ *
77
+ * @type {boolean}
78
+ * @default true
79
+ */
39
80
  this.clear = true;
81
+
82
+ /**
83
+ * Overwritten to disable the swap.
84
+ *
85
+ * @type {boolean}
86
+ * @default false
87
+ */
40
88
  this.needsSwap = false;
41
89
 
90
+ /**
91
+ * The camera.
92
+ *
93
+ * @type {Camera}
94
+ */
42
95
  this.camera = camera;
96
+
97
+ /**
98
+ * The scene to render the AO for.
99
+ *
100
+ * @type {Scene}
101
+ */
43
102
  this.scene = scene;
44
103
 
104
+ /**
105
+ * The kernel radius controls how wide the
106
+ * AO spreads.
107
+ *
108
+ * @type {number}
109
+ * @default 8
110
+ */
45
111
  this.kernelRadius = 8;
46
112
  this.kernel = [];
47
113
  this.noiseTexture = null;
114
+
115
+ /**
116
+ * The output configuration.
117
+ *
118
+ * @type {number}
119
+ * @default 0
120
+ */
48
121
  this.output = 0;
49
122
 
123
+ /**
124
+ * Defines the minimum distance that should be
125
+ * affected by the AO.
126
+ *
127
+ * @type {number}
128
+ * @default 0.005
129
+ */
50
130
  this.minDistance = 0.005;
131
+
132
+ /**
133
+ * Defines the maximum distance that should be
134
+ * affected by the AO.
135
+ *
136
+ * @type {number}
137
+ * @default 0.1
138
+ */
51
139
  this.maxDistance = 0.1;
52
140
 
53
141
  this._visibilityCache = new Map();
54
142
 
55
143
  //
56
144
 
57
- this.generateSampleKernel( kernelSize );
58
- this.generateRandomKernelRotations();
145
+ this._generateSampleKernel( kernelSize );
146
+ this._generateRandomKernelRotations();
59
147
 
60
148
  // depth texture
61
149
 
@@ -146,12 +234,18 @@ class SSAOPass extends Pass {
146
234
  blendEquationAlpha: AddEquation
147
235
  } );
148
236
 
149
- this.fsQuad = new FullScreenQuad( null );
237
+ // internals
238
+
239
+ this._fsQuad = new FullScreenQuad( null );
150
240
 
151
- this.originalClearColor = new Color();
241
+ this._originalClearColor = new Color();
152
242
 
153
243
  }
154
244
 
245
+ /**
246
+ * Frees the GPU-related resources allocated by this instance. Call this
247
+ * method whenever the pass is no longer used in your app.
248
+ */
155
249
  dispose() {
156
250
 
157
251
  // dispose render targets
@@ -169,28 +263,39 @@ class SSAOPass extends Pass {
169
263
 
170
264
  // dispose full screen quad
171
265
 
172
- this.fsQuad.dispose();
266
+ this._fsQuad.dispose();
173
267
 
174
268
  }
175
269
 
270
+ /**
271
+ * Performs the SSAO pass.
272
+ *
273
+ * @param {WebGLRenderer} renderer - The renderer.
274
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
275
+ * destination for the pass.
276
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
277
+ * previous pass from this buffer.
278
+ * @param {number} deltaTime - The delta time in seconds.
279
+ * @param {boolean} maskActive - Whether masking is active or not.
280
+ */
176
281
  render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
177
282
 
178
283
  // render normals and depth (honor only meshes, points and lines do not contribute to SSAO)
179
284
 
180
- this.overrideVisibility();
181
- this.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );
182
- this.restoreVisibility();
285
+ this._overrideVisibility();
286
+ this._renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );
287
+ this._restoreVisibility();
183
288
 
184
289
  // render SSAO
185
290
 
186
291
  this.ssaoMaterial.uniforms[ 'kernelRadius' ].value = this.kernelRadius;
187
292
  this.ssaoMaterial.uniforms[ 'minDistance' ].value = this.minDistance;
188
293
  this.ssaoMaterial.uniforms[ 'maxDistance' ].value = this.maxDistance;
189
- this.renderPass( renderer, this.ssaoMaterial, this.ssaoRenderTarget );
294
+ this._renderPass( renderer, this.ssaoMaterial, this.ssaoRenderTarget );
190
295
 
191
296
  // render blur
192
297
 
193
- this.renderPass( renderer, this.blurMaterial, this.blurRenderTarget );
298
+ this._renderPass( renderer, this.blurMaterial, this.blurRenderTarget );
194
299
 
195
300
  // output result to screen
196
301
 
@@ -200,7 +305,7 @@ class SSAOPass extends Pass {
200
305
 
201
306
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssaoRenderTarget.texture;
202
307
  this.copyMaterial.blending = NoBlending;
203
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );
308
+ this._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );
204
309
 
205
310
  break;
206
311
 
@@ -208,13 +313,13 @@ class SSAOPass extends Pass {
208
313
 
209
314
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget.texture;
210
315
  this.copyMaterial.blending = NoBlending;
211
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );
316
+ this._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );
212
317
 
213
318
  break;
214
319
 
215
320
  case SSAOPass.OUTPUT.Depth:
216
321
 
217
- this.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : readBuffer );
322
+ this._renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : readBuffer );
218
323
 
219
324
  break;
220
325
 
@@ -222,7 +327,7 @@ class SSAOPass extends Pass {
222
327
 
223
328
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.normalRenderTarget.texture;
224
329
  this.copyMaterial.blending = NoBlending;
225
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );
330
+ this._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );
226
331
 
227
332
  break;
228
333
 
@@ -230,7 +335,7 @@ class SSAOPass extends Pass {
230
335
 
231
336
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget.texture;
232
337
  this.copyMaterial.blending = CustomBlending;
233
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );
338
+ this._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );
234
339
 
235
340
  break;
236
341
 
@@ -241,10 +346,35 @@ class SSAOPass extends Pass {
241
346
 
242
347
  }
243
348
 
244
- renderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {
349
+ /**
350
+ * Sets the size of the pass.
351
+ *
352
+ * @param {number} width - The width to set.
353
+ * @param {number} height - The width to set.
354
+ */
355
+ setSize( width, height ) {
356
+
357
+ this.width = width;
358
+ this.height = height;
359
+
360
+ this.ssaoRenderTarget.setSize( width, height );
361
+ this.normalRenderTarget.setSize( width, height );
362
+ this.blurRenderTarget.setSize( width, height );
363
+
364
+ this.ssaoMaterial.uniforms[ 'resolution' ].value.set( width, height );
365
+ this.ssaoMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );
366
+ this.ssaoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );
367
+
368
+ this.blurMaterial.uniforms[ 'resolution' ].value.set( width, height );
369
+
370
+ }
371
+
372
+ // internals
373
+
374
+ _renderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {
245
375
 
246
376
  // save original state
247
- renderer.getClearColor( this.originalClearColor );
377
+ renderer.getClearColor( this._originalClearColor );
248
378
  const originalClearAlpha = renderer.getClearAlpha();
249
379
  const originalAutoClear = renderer.autoClear;
250
380
 
@@ -260,19 +390,19 @@ class SSAOPass extends Pass {
260
390
 
261
391
  }
262
392
 
263
- this.fsQuad.material = passMaterial;
264
- this.fsQuad.render( renderer );
393
+ this._fsQuad.material = passMaterial;
394
+ this._fsQuad.render( renderer );
265
395
 
266
396
  // restore original state
267
397
  renderer.autoClear = originalAutoClear;
268
- renderer.setClearColor( this.originalClearColor );
398
+ renderer.setClearColor( this._originalClearColor );
269
399
  renderer.setClearAlpha( originalClearAlpha );
270
400
 
271
401
  }
272
402
 
273
- renderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {
403
+ _renderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {
274
404
 
275
- renderer.getClearColor( this.originalClearColor );
405
+ renderer.getClearColor( this._originalClearColor );
276
406
  const originalClearAlpha = renderer.getClearAlpha();
277
407
  const originalAutoClear = renderer.autoClear;
278
408
 
@@ -297,29 +427,12 @@ class SSAOPass extends Pass {
297
427
  // restore original state
298
428
 
299
429
  renderer.autoClear = originalAutoClear;
300
- renderer.setClearColor( this.originalClearColor );
430
+ renderer.setClearColor( this._originalClearColor );
301
431
  renderer.setClearAlpha( originalClearAlpha );
302
432
 
303
433
  }
304
434
 
305
- setSize( width, height ) {
306
-
307
- this.width = width;
308
- this.height = height;
309
-
310
- this.ssaoRenderTarget.setSize( width, height );
311
- this.normalRenderTarget.setSize( width, height );
312
- this.blurRenderTarget.setSize( width, height );
313
-
314
- this.ssaoMaterial.uniforms[ 'resolution' ].value.set( width, height );
315
- this.ssaoMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );
316
- this.ssaoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );
317
-
318
- this.blurMaterial.uniforms[ 'resolution' ].value.set( width, height );
319
-
320
- }
321
-
322
- generateSampleKernel( kernelSize ) {
435
+ _generateSampleKernel( kernelSize ) {
323
436
 
324
437
  const kernel = this.kernel;
325
438
 
@@ -342,7 +455,7 @@ class SSAOPass extends Pass {
342
455
 
343
456
  }
344
457
 
345
- generateRandomKernelRotations() {
458
+ _generateRandomKernelRotations() {
346
459
 
347
460
  const width = 4, height = 4;
348
461
 
@@ -368,7 +481,7 @@ class SSAOPass extends Pass {
368
481
 
369
482
  }
370
483
 
371
- overrideVisibility() {
484
+ _overrideVisibility() {
372
485
 
373
486
  const scene = this.scene;
374
487
  const cache = this._visibilityCache;
@@ -383,7 +496,7 @@ class SSAOPass extends Pass {
383
496
 
384
497
  }
385
498
 
386
- restoreVisibility() {
499
+ _restoreVisibility() {
387
500
 
388
501
  const scene = this.scene;
389
502
  const cache = this._visibilityCache;