@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
@@ -19,32 +19,138 @@ import { Pass, FullScreenQuad } from './Pass.js';
19
19
  import { SSRBlurShader, SSRDepthShader, SSRShader } from '../shaders/SSRShader.js';
20
20
  import { CopyShader } from '../shaders/CopyShader.js';
21
21
 
22
+ /**
23
+ * A pass for a basic SSR effect.
24
+ *
25
+ * ```js
26
+ * const ssrPass = new SSRPass( {
27
+ * renderer,
28
+ * scene,
29
+ * camera,
30
+ * width: innerWidth,
31
+ * height: innerHeight
32
+ * } );
33
+ * composer.addPass( ssrPass );
34
+ * ```
35
+ *
36
+ * @augments Pass
37
+ */
22
38
  class SSRPass extends Pass {
23
39
 
24
- constructor( { renderer, scene, camera, width, height, selects, bouncing = false, groundReflector } ) {
40
+ /**
41
+ * Constructs a new SSR pass.
42
+ *
43
+ * @param {SSRPass~Options} options - The pass options.
44
+ */
45
+ constructor( { renderer, scene, camera, width = 512, height = 512, selects = null, bouncing = false, groundReflector = null } ) {
25
46
 
26
47
  super();
27
48
 
28
- this.width = ( width !== undefined ) ? width : 512;
29
- this.height = ( height !== undefined ) ? height : 512;
49
+ /**
50
+ * The width of the effect.
51
+ *
52
+ * @type {number}
53
+ * @default 512
54
+ */
55
+ this.width = width;
56
+
57
+ /**
58
+ * The height of the effect.
59
+ *
60
+ * @type {number}
61
+ * @default 512
62
+ */
63
+ this.height = height;
30
64
 
65
+ /**
66
+ * Overwritten to perform a clear operation by default.
67
+ *
68
+ * @type {boolean}
69
+ * @default true
70
+ */
31
71
  this.clear = true;
32
72
 
73
+ /**
74
+ * The renderer.
75
+ *
76
+ * @type {WebGLRenderer}
77
+ */
33
78
  this.renderer = renderer;
79
+
80
+ /**
81
+ * The scene to render.
82
+ *
83
+ * @type {Scene}
84
+ */
34
85
  this.scene = scene;
86
+
87
+ /**
88
+ * The camera.
89
+ *
90
+ * @type {Camera}
91
+ */
35
92
  this.camera = camera;
93
+
94
+ /**
95
+ * The ground reflector.
96
+ *
97
+ * @type {?ReflectorForSSRPass}
98
+ * @default 0
99
+ */
36
100
  this.groundReflector = groundReflector;
37
101
 
102
+ /**
103
+ * The opactiy.
104
+ *
105
+ * @type {number}
106
+ * @default 0.5
107
+ */
38
108
  this.opacity = SSRShader.uniforms.opacity.value;
109
+
110
+ /**
111
+ * The output configuration.
112
+ *
113
+ * @type {number}
114
+ * @default 0
115
+ */
39
116
  this.output = 0;
40
117
 
118
+ /**
119
+ * Controls how far a fragment can reflect.
120
+ *
121
+ * @type {number}
122
+ * @default 180
123
+ */
41
124
  this.maxDistance = SSRShader.uniforms.maxDistance.value;
125
+
126
+ /**
127
+ * Controls the cutoff between what counts as a
128
+ * possible reflection hit and what does not.
129
+ *
130
+ * @type {number}
131
+ * @default .018
132
+ */
42
133
  this.thickness = SSRShader.uniforms.thickness.value;
43
134
 
44
135
  this.tempColor = new Color();
45
136
 
46
137
  this._selects = selects;
138
+
139
+ /**
140
+ * Whether the pass is selective or not.
141
+ *
142
+ * @type {boolean}
143
+ * @default false
144
+ */
47
145
  this.selective = Array.isArray( this._selects );
146
+
147
+ /**
148
+ * Which 3D objects should be affected by SSR. If not set, the entire scene is affected.
149
+ *
150
+ * @name SSRPass#selects
151
+ * @type {?Array<Object3D>}
152
+ * @default null
153
+ */
48
154
  Object.defineProperty( this, 'selects', {
49
155
  get() {
50
156
 
@@ -73,6 +179,14 @@ class SSRPass extends Pass {
73
179
  } );
74
180
 
75
181
  this._bouncing = bouncing;
182
+
183
+ /**
184
+ * Whether bouncing is enabled or not.
185
+ *
186
+ * @name SSRPass#bouncing
187
+ * @type {boolean}
188
+ * @default false
189
+ */
76
190
  Object.defineProperty( this, 'bouncing', {
77
191
  get() {
78
192
 
@@ -96,9 +210,23 @@ class SSRPass extends Pass {
96
210
  }
97
211
  } );
98
212
 
213
+ /**
214
+ * Whether to blur reflections or not.
215
+ *
216
+ * @type {boolean}
217
+ * @default true
218
+ */
99
219
  this.blur = true;
100
220
 
101
221
  this._distanceAttenuation = SSRShader.defines.DISTANCE_ATTENUATION;
222
+
223
+ /**
224
+ * Whether to use distance attenutation or not.
225
+ *
226
+ * @name SSRPass#distanceAttenuation
227
+ * @type {boolean}
228
+ * @default true
229
+ */
102
230
  Object.defineProperty( this, 'distanceAttenuation', {
103
231
  get() {
104
232
 
@@ -117,6 +245,14 @@ class SSRPass extends Pass {
117
245
 
118
246
 
119
247
  this._fresnel = SSRShader.defines.FRESNEL;
248
+
249
+ /**
250
+ * Whether to use fresnel or not.
251
+ *
252
+ * @name SSRPass#fresnel
253
+ * @type {boolean}
254
+ * @default true
255
+ */
120
256
  Object.defineProperty( this, 'fresnel', {
121
257
  get() {
122
258
 
@@ -134,6 +270,14 @@ class SSRPass extends Pass {
134
270
  } );
135
271
 
136
272
  this._infiniteThick = SSRShader.defines.INFINITE_THICK;
273
+
274
+ /**
275
+ * Whether to use infinite thickness or not.
276
+ *
277
+ * @name SSRPass#infiniteThick
278
+ * @type {boolean}
279
+ * @default false
280
+ */
137
281
  Object.defineProperty( this, 'infiniteThick', {
138
282
  get() {
139
283
 
@@ -312,6 +456,10 @@ class SSRPass extends Pass {
312
456
 
313
457
  }
314
458
 
459
+ /**
460
+ * Frees the GPU-related resources allocated by this instance. Call this
461
+ * method whenever the pass is no longer used in your app.
462
+ */
315
463
  dispose() {
316
464
 
317
465
  // dispose render targets
@@ -341,6 +489,17 @@ class SSRPass extends Pass {
341
489
 
342
490
  }
343
491
 
492
+ /**
493
+ * Performs the SSR pass.
494
+ *
495
+ * @param {WebGLRenderer} renderer - The renderer.
496
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
497
+ * destination for the pass.
498
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
499
+ * previous pass from this buffer.
500
+ * @param {number} deltaTime - The delta time in seconds.
501
+ * @param {boolean} maskActive - Whether masking is active or not.
502
+ */
344
503
  render( renderer, writeBuffer /*, readBuffer, deltaTime, maskActive */ ) {
345
504
 
346
505
  // render beauty and depth
@@ -360,13 +519,13 @@ class SSRPass extends Pass {
360
519
 
361
520
  // render normals
362
521
 
363
- this.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0, 0 );
522
+ this._renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0, 0 );
364
523
 
365
524
  // render metalnesses
366
525
 
367
526
  if ( this.selective ) {
368
527
 
369
- this.renderMetalness( renderer, this.metalnessOnMaterial, this.metalnessRenderTarget, 0, 0 );
528
+ this._renderMetalness( renderer, this.metalnessOnMaterial, this.metalnessRenderTarget, 0, 0 );
370
529
 
371
530
  }
372
531
 
@@ -375,16 +534,16 @@ class SSRPass extends Pass {
375
534
  this.ssrMaterial.uniforms[ 'opacity' ].value = this.opacity;
376
535
  this.ssrMaterial.uniforms[ 'maxDistance' ].value = this.maxDistance;
377
536
  this.ssrMaterial.uniforms[ 'thickness' ].value = this.thickness;
378
- this.renderPass( renderer, this.ssrMaterial, this.ssrRenderTarget );
537
+ this._renderPass( renderer, this.ssrMaterial, this.ssrRenderTarget );
379
538
 
380
539
 
381
540
  // render blur
382
541
 
383
542
  if ( this.blur ) {
384
543
 
385
- this.renderPass( renderer, this.blurMaterial, this.blurRenderTarget );
386
- this.renderPass( renderer, this.blurMaterial2, this.blurRenderTarget2 );
387
- // this.renderPass(renderer, this.blurMaterial3, this.blurRenderTarget3);
544
+ this._renderPass( renderer, this.blurMaterial, this.blurRenderTarget );
545
+ this._renderPass( renderer, this.blurMaterial2, this.blurRenderTarget2 );
546
+ // this._renderPass(renderer, this.blurMaterial3, this.blurRenderTarget3);
388
547
 
389
548
  }
390
549
 
@@ -398,31 +557,31 @@ class SSRPass extends Pass {
398
557
 
399
558
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;
400
559
  this.copyMaterial.blending = NoBlending;
401
- this.renderPass( renderer, this.copyMaterial, this.prevRenderTarget );
560
+ this._renderPass( renderer, this.copyMaterial, this.prevRenderTarget );
402
561
 
403
562
  if ( this.blur )
404
563
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget2.texture;
405
564
  else
406
565
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;
407
566
  this.copyMaterial.blending = NormalBlending;
408
- this.renderPass( renderer, this.copyMaterial, this.prevRenderTarget );
567
+ this._renderPass( renderer, this.copyMaterial, this.prevRenderTarget );
409
568
 
410
569
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.prevRenderTarget.texture;
411
570
  this.copyMaterial.blending = NoBlending;
412
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
571
+ this._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
413
572
 
414
573
  } else {
415
574
 
416
575
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;
417
576
  this.copyMaterial.blending = NoBlending;
418
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
577
+ this._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
419
578
 
420
579
  if ( this.blur )
421
580
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget2.texture;
422
581
  else
423
582
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;
424
583
  this.copyMaterial.blending = NormalBlending;
425
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
584
+ this._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
426
585
 
427
586
  }
428
587
 
@@ -434,7 +593,7 @@ class SSRPass extends Pass {
434
593
  else
435
594
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;
436
595
  this.copyMaterial.blending = NoBlending;
437
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
596
+ this._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
438
597
 
439
598
  if ( this.bouncing ) {
440
599
 
@@ -443,11 +602,11 @@ class SSRPass extends Pass {
443
602
  else
444
603
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;
445
604
  this.copyMaterial.blending = NoBlending;
446
- this.renderPass( renderer, this.copyMaterial, this.prevRenderTarget );
605
+ this._renderPass( renderer, this.copyMaterial, this.prevRenderTarget );
447
606
 
448
607
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;
449
608
  this.copyMaterial.blending = NormalBlending;
450
- this.renderPass( renderer, this.copyMaterial, this.prevRenderTarget );
609
+ this._renderPass( renderer, this.copyMaterial, this.prevRenderTarget );
451
610
 
452
611
  }
453
612
 
@@ -457,13 +616,13 @@ class SSRPass extends Pass {
457
616
 
458
617
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;
459
618
  this.copyMaterial.blending = NoBlending;
460
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
619
+ this._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
461
620
 
462
621
  break;
463
622
 
464
623
  case SSRPass.OUTPUT.Depth:
465
624
 
466
- this.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer );
625
+ this._renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer );
467
626
 
468
627
  break;
469
628
 
@@ -471,7 +630,7 @@ class SSRPass extends Pass {
471
630
 
472
631
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.normalRenderTarget.texture;
473
632
  this.copyMaterial.blending = NoBlending;
474
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
633
+ this._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
475
634
 
476
635
  break;
477
636
 
@@ -479,7 +638,7 @@ class SSRPass extends Pass {
479
638
 
480
639
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.metalnessRenderTarget.texture;
481
640
  this.copyMaterial.blending = NoBlending;
482
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
641
+ this._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
483
642
 
484
643
  break;
485
644
 
@@ -490,7 +649,40 @@ class SSRPass extends Pass {
490
649
 
491
650
  }
492
651
 
493
- renderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {
652
+ /**
653
+ * Sets the size of the pass.
654
+ *
655
+ * @param {number} width - The width to set.
656
+ * @param {number} height - The width to set.
657
+ */
658
+ setSize( width, height ) {
659
+
660
+ this.width = width;
661
+ this.height = height;
662
+
663
+ this.ssrMaterial.defines.MAX_STEP = Math.sqrt( width * width + height * height );
664
+ this.ssrMaterial.needsUpdate = true;
665
+ this.beautyRenderTarget.setSize( width, height );
666
+ this.prevRenderTarget.setSize( width, height );
667
+ this.ssrRenderTarget.setSize( width, height );
668
+ this.normalRenderTarget.setSize( width, height );
669
+ this.metalnessRenderTarget.setSize( width, height );
670
+ this.blurRenderTarget.setSize( width, height );
671
+ this.blurRenderTarget2.setSize( width, height );
672
+ // this.blurRenderTarget3.setSize(width, height);
673
+
674
+ this.ssrMaterial.uniforms[ 'resolution' ].value.set( width, height );
675
+ this.ssrMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );
676
+ this.ssrMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );
677
+
678
+ this.blurMaterial.uniforms[ 'resolution' ].value.set( width, height );
679
+ this.blurMaterial2.uniforms[ 'resolution' ].value.set( width, height );
680
+
681
+ }
682
+
683
+ // internals
684
+
685
+ _renderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {
494
686
 
495
687
  // save original state
496
688
  this.originalClearColor.copy( renderer.getClearColor( this.tempColor ) );
@@ -519,7 +711,7 @@ class SSRPass extends Pass {
519
711
 
520
712
  }
521
713
 
522
- renderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {
714
+ _renderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {
523
715
 
524
716
  this.originalClearColor.copy( renderer.getClearColor( this.tempColor ) );
525
717
  const originalClearAlpha = renderer.getClearAlpha( this.tempColor );
@@ -551,7 +743,7 @@ class SSRPass extends Pass {
551
743
 
552
744
  }
553
745
 
554
- renderMetalness( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {
746
+ _renderMetalness( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {
555
747
 
556
748
  this.originalClearColor.copy( renderer.getClearColor( this.tempColor ) );
557
749
  const originalClearAlpha = renderer.getClearAlpha( this.tempColor );
@@ -606,33 +798,22 @@ class SSRPass extends Pass {
606
798
 
607
799
  }
608
800
 
609
- setSize( width, height ) {
610
-
611
- this.width = width;
612
- this.height = height;
613
-
614
- this.ssrMaterial.defines.MAX_STEP = Math.sqrt( width * width + height * height );
615
- this.ssrMaterial.needsUpdate = true;
616
- this.beautyRenderTarget.setSize( width, height );
617
- this.prevRenderTarget.setSize( width, height );
618
- this.ssrRenderTarget.setSize( width, height );
619
- this.normalRenderTarget.setSize( width, height );
620
- this.metalnessRenderTarget.setSize( width, height );
621
- this.blurRenderTarget.setSize( width, height );
622
- this.blurRenderTarget2.setSize( width, height );
623
- // this.blurRenderTarget3.setSize(width, height);
624
-
625
- this.ssrMaterial.uniforms[ 'resolution' ].value.set( width, height );
626
- this.ssrMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );
627
- this.ssrMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );
628
-
629
- this.blurMaterial.uniforms[ 'resolution' ].value.set( width, height );
630
- this.blurMaterial2.uniforms[ 'resolution' ].value.set( width, height );
631
-
632
- }
633
-
634
801
  }
635
802
 
803
+ /**
804
+ * Constructor options of `SSRPass`.
805
+ *
806
+ * @typedef {Object} SSRPass~Options
807
+ * @property {WebGLRenderer} renderer - The renderer.
808
+ * @property {Scene} scene - The scene to render.
809
+ * @property {Camera} camera - The camera.
810
+ * @property {number} [width=512] - The width of the effect.
811
+ * @property {number} [height=512] - The width of the effect.
812
+ * @property {?Array<Object3D>} [selects=null] - Which 3D objects should be affected by SSR. If not set, the entire scene is affected.
813
+ * @property {boolean} [bouncing=false] - Whether bouncing is enabled or not.
814
+ * @property {?ReflectorForSSRPass} [groundReflector=null] - A ground reflector.
815
+ **/
816
+
636
817
  SSRPass.OUTPUT = {
637
818
  'Default': 0,
638
819
  'SSR': 1,
@@ -8,27 +8,54 @@ import {
8
8
  import { Pass, FullScreenQuad } from './Pass.js';
9
9
  import { CopyShader } from '../shaders/CopyShader.js';
10
10
 
11
+ /**
12
+ * A pass that saves the contents of the current read buffer in a render target.
13
+ *
14
+ * ```js
15
+ * const savePass = new SavePass( customRenderTarget );
16
+ * composer.addPass( savePass );
17
+ * ```
18
+ *
19
+ * @augments Pass
20
+ */
11
21
  class SavePass extends Pass {
12
22
 
23
+ /**
24
+ * Constructs a new save pass.
25
+ *
26
+ * @param {WebGLRenderTarget} [renderTarget] - The render target for saving the read buffer.
27
+ * If not provided, the pass automatically creates a render target.
28
+ */
13
29
  constructor( renderTarget ) {
14
30
 
15
31
  super();
16
32
 
17
- const shader = CopyShader;
18
-
19
- this.textureID = 'tDiffuse';
20
-
21
- this.uniforms = UniformsUtils.clone( shader.uniforms );
22
-
33
+ /**
34
+ * The pass uniforms.
35
+ *
36
+ * @type {Object}
37
+ */
38
+ this.uniforms = UniformsUtils.clone( CopyShader.uniforms );
39
+
40
+ /**
41
+ * The pass material.
42
+ *
43
+ * @type {ShaderMaterial}
44
+ */
23
45
  this.material = new ShaderMaterial( {
24
46
 
25
47
  uniforms: this.uniforms,
26
- vertexShader: shader.vertexShader,
27
- fragmentShader: shader.fragmentShader,
48
+ vertexShader: CopyShader.vertexShader,
49
+ fragmentShader: CopyShader.fragmentShader,
28
50
  blending: NoBlending
29
51
 
30
52
  } );
31
53
 
54
+ /**
55
+ * The render target which is used to save the read buffer.
56
+ *
57
+ * @type {WebGLRenderTarget}
58
+ */
32
59
  this.renderTarget = renderTarget;
33
60
 
34
61
  if ( this.renderTarget === undefined ) {
@@ -38,39 +65,64 @@ class SavePass extends Pass {
38
65
 
39
66
  }
40
67
 
68
+ /**
69
+ * Overwritten to disable the swap.
70
+ *
71
+ * @type {boolean}
72
+ * @default false
73
+ */
41
74
  this.needsSwap = false;
42
75
 
43
- this.fsQuad = new FullScreenQuad( this.material );
76
+ // internals
77
+
78
+ this._fsQuad = new FullScreenQuad( this.material );
44
79
 
45
80
  }
46
81
 
82
+ /**
83
+ * Performs the save pass.
84
+ *
85
+ * @param {WebGLRenderer} renderer - The renderer.
86
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
87
+ * destination for the pass.
88
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
89
+ * previous pass from this buffer.
90
+ * @param {number} deltaTime - The delta time in seconds.
91
+ * @param {boolean} maskActive - Whether masking is active or not.
92
+ */
47
93
  render( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive */ ) {
48
94
 
49
- if ( this.uniforms[ this.textureID ] ) {
50
-
51
- this.uniforms[ this.textureID ].value = readBuffer.texture;
52
-
53
- }
95
+ this.uniforms[ 'tDiffuse' ].value = readBuffer.texture;
54
96
 
55
97
  renderer.setRenderTarget( this.renderTarget );
56
98
  if ( this.clear ) renderer.clear();
57
- this.fsQuad.render( renderer );
99
+ this._fsQuad.render( renderer );
58
100
 
59
101
  }
60
102
 
103
+ /**
104
+ * Sets the size of the pass.
105
+ *
106
+ * @param {number} width - The width to set.
107
+ * @param {number} height - The width to set.
108
+ */
61
109
  setSize( width, height ) {
62
110
 
63
111
  this.renderTarget.setSize( width, height );
64
112
 
65
113
  }
66
114
 
115
+ /**
116
+ * Frees the GPU-related resources allocated by this instance. Call this
117
+ * method whenever the pass is no longer used in your app.
118
+ */
67
119
  dispose() {
68
120
 
69
121
  this.renderTarget.dispose();
70
122
 
71
123
  this.material.dispose();
72
124
 
73
- this.fsQuad.dispose();
125
+ this._fsQuad.dispose();
74
126
 
75
127
  }
76
128