@plastic-software/three 0.174.0 → 0.175.1

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 (567) hide show
  1. package/build/three.cjs +10744 -1476
  2. package/build/three.core.js +9633 -1096
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +918 -189
  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 +1432 -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 +58 -1
  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/ShaderChunk/alphamap_fragment.glsl.js +10 -1
  512. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
  513. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
  514. package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
  515. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
  516. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
  517. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
  518. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
  519. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
  520. package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
  521. package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
  522. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
  523. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
  524. package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
  525. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
  526. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
  527. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
  528. package/src/renderers/shaders/ShaderChunk.js +2 -0
  529. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
  530. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
  531. package/src/renderers/shaders/UniformsLib.js +6 -5
  532. package/src/renderers/shaders/UniformsUtils.js +1 -3
  533. package/src/renderers/webgl/WebGLBackground.js +4 -2
  534. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  535. package/src/renderers/webgl/WebGLProgram.js +25 -5
  536. package/src/renderers/webgl/WebGLPrograms.js +21 -7
  537. package/src/renderers/webgl/WebGLState.js +9 -9
  538. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  539. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  540. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  541. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  542. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  543. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  544. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  545. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  546. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  547. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  548. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  549. package/src/renderers/webxr/WebXRController.js +87 -2
  550. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  551. package/src/renderers/webxr/WebXRManager.js +173 -1
  552. package/src/scenes/Scene.js +2 -1
  553. package/src/textures/CanvasTexture.js +28 -0
  554. package/src/textures/CompressedArrayTexture.js +57 -0
  555. package/src/textures/CompressedCubeTexture.js +29 -0
  556. package/src/textures/CompressedTexture.js +64 -6
  557. package/src/textures/CubeTexture.js +52 -4
  558. package/src/textures/Data3DTexture.js +77 -0
  559. package/src/textures/DataArrayTexture.js +93 -0
  560. package/src/textures/DataTexture.js +65 -0
  561. package/src/textures/DepthTexture.js +59 -9
  562. package/src/textures/FramebufferTexture.js +62 -0
  563. package/src/textures/Source.js +69 -0
  564. package/src/textures/Texture.js +5 -5
  565. package/src/textures/VideoFrameTexture.js +43 -6
  566. package/src/textures/VideoTexture.js +49 -4
  567. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -26,28 +26,118 @@ import { generatePdSamplePointInitializer, PoissonDenoiseShader } from '../shade
26
26
  import { CopyShader } from '../shaders/CopyShader.js';
27
27
  import { SimplexNoise } from '../math/SimplexNoise.js';
28
28
 
29
+ /**
30
+ * A pass for an GTAO effect.
31
+ *
32
+ * `GTAOPass` provides better quality than {@link SSAOPass} but is also more expensive.
33
+ *
34
+ * ```js
35
+ * const gtaoPass = new GTAOPass( scene, camera, width, height );
36
+ * gtaoPass.output = GTAOPass.OUTPUT.Denoise;
37
+ * composer.addPass( gtaoPass );
38
+ * ```
39
+ *
40
+ * @augments Pass
41
+ */
29
42
  class GTAOPass extends Pass {
30
43
 
31
- constructor( scene, camera, width, height, parameters, aoParameters, pdParameters ) {
44
+ /**
45
+ * Constructs a new GTAO pass.
46
+ *
47
+ * @param {Scene} scene - The scene to compute the AO for.
48
+ * @param {Camera} camera - The camera.
49
+ * @param {number} [width=512] - The width of the effect.
50
+ * @param {number} [height=512] - The height of the effect.
51
+ * @param {Object} [parameters] - The pass parameters.
52
+ * @param {Object} [aoParameters] - The AO parameters.
53
+ * @param {Object} [pdParameters] - The denoise parameters.
54
+ */
55
+ constructor( scene, camera, width = 512, height = 512, parameters, aoParameters, pdParameters ) {
32
56
 
33
57
  super();
34
58
 
35
- this.width = ( width !== undefined ) ? width : 512;
36
- this.height = ( height !== undefined ) ? height : 512;
59
+ /**
60
+ * The width of the effect.
61
+ *
62
+ * @type {number}
63
+ * @default 512
64
+ */
65
+ this.width = width;
66
+
67
+ /**
68
+ * The height of the effect.
69
+ *
70
+ * @type {number}
71
+ * @default 512
72
+ */
73
+ this.height = height;
74
+
75
+ /**
76
+ * Overwritten to perform a clear operation by default.
77
+ *
78
+ * @type {boolean}
79
+ * @default true
80
+ */
37
81
  this.clear = true;
82
+
83
+ /**
84
+ * The camera.
85
+ *
86
+ * @type {Camera}
87
+ */
38
88
  this.camera = camera;
89
+
90
+ /**
91
+ * The scene to render the AO for.
92
+ *
93
+ * @type {Scene}
94
+ */
39
95
  this.scene = scene;
96
+
97
+ /**
98
+ * The output configuration.
99
+ *
100
+ * @type {number}
101
+ * @default 0
102
+ */
40
103
  this.output = 0;
41
104
  this._renderGBuffer = true;
42
105
  this._visibilityCache = new Map();
106
+
107
+ /**
108
+ * The AO blend intensity.
109
+ *
110
+ * @type {number}
111
+ * @default 1
112
+ */
43
113
  this.blendIntensity = 1.;
44
114
 
115
+ /**
116
+ * The number of Poisson Denoise rings.
117
+ *
118
+ * @type {number}
119
+ * @default 2
120
+ */
45
121
  this.pdRings = 2.;
122
+
123
+ /**
124
+ * The Poisson Denoise radius exponent.
125
+ *
126
+ * @type {number}
127
+ * @default 2
128
+ */
46
129
  this.pdRadiusExponent = 2.;
130
+
131
+ /**
132
+ * The Poisson Denoise sample count.
133
+ *
134
+ * @type {number}
135
+ * @default 16
136
+ */
47
137
  this.pdSamples = 16;
48
138
 
49
139
  this.gtaoNoiseTexture = generateMagicSquareNoise();
50
- this.pdNoiseTexture = this.generateNoise();
140
+ this.pdNoiseTexture = this._generateNoise();
51
141
 
52
142
  this.gtaoRenderTarget = new WebGLRenderTarget( this.width, this.height, { type: HalfFloatType } );
53
143
  this.pdRenderTarget = this.gtaoRenderTarget.clone();
@@ -127,9 +217,9 @@ class GTAOPass extends Pass {
127
217
  blendEquationAlpha: AddEquation
128
218
  } );
129
219
 
130
- this.fsQuad = new FullScreenQuad( null );
220
+ this._fsQuad = new FullScreenQuad( null );
131
221
 
132
- this.originalClearColor = new Color();
222
+ this._originalClearColor = new Color();
133
223
 
134
224
  this.setGBuffer( parameters ? parameters.depthTexture : undefined, parameters ? parameters.normalTexture : undefined );
135
225
 
@@ -147,6 +237,34 @@ class GTAOPass extends Pass {
147
237
 
148
238
  }
149
239
 
240
+ /**
241
+ * Sets the size of the pass.
242
+ *
243
+ * @param {number} width - The width to set.
244
+ * @param {number} height - The width to set.
245
+ */
246
+ setSize( width, height ) {
247
+
248
+ this.width = width;
249
+ this.height = height;
250
+
251
+ this.gtaoRenderTarget.setSize( width, height );
252
+ this.normalRenderTarget.setSize( width, height );
253
+ this.pdRenderTarget.setSize( width, height );
254
+
255
+ this.gtaoMaterial.uniforms.resolution.value.set( width, height );
256
+ this.gtaoMaterial.uniforms.cameraProjectionMatrix.value.copy( this.camera.projectionMatrix );
257
+ this.gtaoMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );
258
+
259
+ this.pdMaterial.uniforms.resolution.value.set( width, height );
260
+ this.pdMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );
261
+
262
+ }
263
+
264
+ /**
265
+ * Frees the GPU-related resources allocated by this instance. Call this
266
+ * method whenever the pass is no longer used in your app.
267
+ */
150
268
  dispose() {
151
269
 
152
270
  this.gtaoNoiseTexture.dispose();
@@ -158,16 +276,30 @@ class GTAOPass extends Pass {
158
276
  this.pdMaterial.dispose();
159
277
  this.copyMaterial.dispose();
160
278
  this.depthRenderMaterial.dispose();
161
- this.fsQuad.dispose();
279
+ this._fsQuad.dispose();
162
280
 
163
281
  }
164
282
 
283
+ /**
284
+ * A texture holding the computed AO.
285
+ *
286
+ * @type {Texture}
287
+ * @readonly
288
+ */
165
289
  get gtaoMap() {
166
290
 
167
291
  return this.pdRenderTarget.texture;
168
292
 
169
293
  }
170
294
 
295
+ /**
296
+ * Configures the GBuffer of this pass. If no arguments are passed,
297
+ * the pass creates an internal render target for holding depth
298
+ * and normal data.
299
+ *
300
+ * @param {DepthTexture} [depthTexture] - The depth texture.
301
+ * @param {DepthTexture} [normalTexture] - The normal texture.
302
+ */
171
303
  setGBuffer( depthTexture, normalTexture ) {
172
304
 
173
305
  if ( depthTexture !== undefined ) {
@@ -209,6 +341,12 @@ class GTAOPass extends Pass {
209
341
 
210
342
  }
211
343
 
344
+ /**
345
+ * Configures the clip box of the GTAO shader with the given AABB.
346
+ *
347
+ * @param {?Box3} box - The AABB enclosing the scene that should receive AO. When passing
348
+ * `null`, to clip box is used.
349
+ */
212
350
  setSceneClipBox( box ) {
213
351
 
214
352
  if ( box ) {
@@ -227,6 +365,11 @@ class GTAOPass extends Pass {
227
365
 
228
366
  }
229
367
 
368
+ /**
369
+ * Updates the GTAO material from the given paramter object.
370
+ *
371
+ * @param {Object} parameters - The GTAO material parameters.
372
+ */
230
373
  updateGtaoMaterial( parameters ) {
231
374
 
232
375
  if ( parameters.radius !== undefined ) {
@@ -276,6 +419,11 @@ class GTAOPass extends Pass {
276
419
 
277
420
  }
278
421
 
422
+ /**
423
+ * Updates the Denoise material from the given paramter object.
424
+ *
425
+ * @param {Object} parameters - The denoise parameters.
426
+ */
279
427
  updatePdMaterial( parameters ) {
280
428
 
281
429
  let updateShader = false;
@@ -335,15 +483,26 @@ class GTAOPass extends Pass {
335
483
 
336
484
  }
337
485
 
486
+ /**
487
+ * Performs the GTAO pass.
488
+ *
489
+ * @param {WebGLRenderer} renderer - The renderer.
490
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
491
+ * destination for the pass.
492
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
493
+ * previous pass from this buffer.
494
+ * @param {number} deltaTime - The delta time in seconds.
495
+ * @param {boolean} maskActive - Whether masking is active or not.
496
+ */
338
497
  render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
339
498
 
340
499
  // render normals and depth (honor only meshes, points and lines do not contribute to AO)
341
500
 
342
501
  if ( this._renderGBuffer ) {
343
502
 
344
- this.overrideVisibility();
345
- this.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );
346
- this.restoreVisibility();
503
+ this._overrideVisibility();
504
+ this._renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );
505
+ this._restoreVisibility();
347
506
 
348
507
  }
349
508
 
@@ -354,12 +513,12 @@ class GTAOPass extends Pass {
354
513
  this.gtaoMaterial.uniforms.cameraProjectionMatrix.value.copy( this.camera.projectionMatrix );
355
514
  this.gtaoMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );
356
515
  this.gtaoMaterial.uniforms.cameraWorldMatrix.value.copy( this.camera.matrixWorld );
357
- this.renderPass( renderer, this.gtaoMaterial, this.gtaoRenderTarget, 0xffffff, 1.0 );
516
+ this._renderPass( renderer, this.gtaoMaterial, this.gtaoRenderTarget, 0xffffff, 1.0 );
358
517
 
359
518
  // render poisson denoise
360
519
 
361
520
  this.pdMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );
362
- this.renderPass( renderer, this.pdMaterial, this.pdRenderTarget, 0xffffff, 1.0 );
521
+ this._renderPass( renderer, this.pdMaterial, this.pdRenderTarget, 0xffffff, 1.0 );
363
522
 
364
523
  // output result to screen
365
524
 
@@ -372,7 +531,7 @@ class GTAOPass extends Pass {
372
531
 
373
532
  this.copyMaterial.uniforms.tDiffuse.value = readBuffer.texture;
374
533
  this.copyMaterial.blending = NoBlending;
375
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
534
+ this._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
376
535
 
377
536
  break;
378
537
 
@@ -380,7 +539,7 @@ class GTAOPass extends Pass {
380
539
 
381
540
  this.copyMaterial.uniforms.tDiffuse.value = this.gtaoRenderTarget.texture;
382
541
  this.copyMaterial.blending = NoBlending;
383
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
542
+ this._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
384
543
 
385
544
  break;
386
545
 
@@ -388,7 +547,7 @@ class GTAOPass extends Pass {
388
547
 
389
548
  this.copyMaterial.uniforms.tDiffuse.value = this.pdRenderTarget.texture;
390
549
  this.copyMaterial.blending = NoBlending;
391
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
550
+ this._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
392
551
 
393
552
  break;
394
553
 
@@ -396,7 +555,7 @@ class GTAOPass extends Pass {
396
555
 
397
556
  this.depthRenderMaterial.uniforms.cameraNear.value = this.camera.near;
398
557
  this.depthRenderMaterial.uniforms.cameraFar.value = this.camera.far;
399
- this.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer );
558
+ this._renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer );
400
559
 
401
560
  break;
402
561
 
@@ -404,7 +563,7 @@ class GTAOPass extends Pass {
404
563
 
405
564
  this.copyMaterial.uniforms.tDiffuse.value = this.normalRenderTarget.texture;
406
565
  this.copyMaterial.blending = NoBlending;
407
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
566
+ this._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
408
567
 
409
568
  break;
410
569
 
@@ -412,11 +571,11 @@ class GTAOPass extends Pass {
412
571
 
413
572
  this.copyMaterial.uniforms.tDiffuse.value = readBuffer.texture;
414
573
  this.copyMaterial.blending = NoBlending;
415
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
574
+ this._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
416
575
 
417
576
  this.blendMaterial.uniforms.intensity.value = this.blendIntensity;
418
577
  this.blendMaterial.uniforms.tDiffuse.value = this.pdRenderTarget.texture;
419
- this.renderPass( renderer, this.blendMaterial, this.renderToScreen ? null : writeBuffer );
578
+ this._renderPass( renderer, this.blendMaterial, this.renderToScreen ? null : writeBuffer );
420
579
 
421
580
  break;
422
581
 
@@ -427,10 +586,12 @@ class GTAOPass extends Pass {
427
586
 
428
587
  }
429
588
 
430
- renderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {
589
+ // internals
590
+
591
+ _renderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {
431
592
 
432
593
  // save original state
433
- renderer.getClearColor( this.originalClearColor );
594
+ renderer.getClearColor( this._originalClearColor );
434
595
  const originalClearAlpha = renderer.getClearAlpha();
435
596
  const originalAutoClear = renderer.autoClear;
436
597
 
@@ -446,19 +607,19 @@ class GTAOPass extends Pass {
446
607
 
447
608
  }
448
609
 
449
- this.fsQuad.material = passMaterial;
450
- this.fsQuad.render( renderer );
610
+ this._fsQuad.material = passMaterial;
611
+ this._fsQuad.render( renderer );
451
612
 
452
613
  // restore original state
453
614
  renderer.autoClear = originalAutoClear;
454
- renderer.setClearColor( this.originalClearColor );
615
+ renderer.setClearColor( this._originalClearColor );
455
616
  renderer.setClearAlpha( originalClearAlpha );
456
617
 
457
618
  }
458
619
 
459
- renderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {
620
+ _renderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {
460
621
 
461
- renderer.getClearColor( this.originalClearColor );
622
+ renderer.getClearColor( this._originalClearColor );
462
623
  const originalClearAlpha = renderer.getClearAlpha();
463
624
  const originalAutoClear = renderer.autoClear;
464
625
 
@@ -481,30 +642,12 @@ class GTAOPass extends Pass {
481
642
  this.scene.overrideMaterial = null;
482
643
 
483
644
  renderer.autoClear = originalAutoClear;
484
- renderer.setClearColor( this.originalClearColor );
645
+ renderer.setClearColor( this._originalClearColor );
485
646
  renderer.setClearAlpha( originalClearAlpha );
486
647
 
487
648
  }
488
649
 
489
- setSize( width, height ) {
490
-
491
- this.width = width;
492
- this.height = height;
493
-
494
- this.gtaoRenderTarget.setSize( width, height );
495
- this.normalRenderTarget.setSize( width, height );
496
- this.pdRenderTarget.setSize( width, height );
497
-
498
- this.gtaoMaterial.uniforms.resolution.value.set( width, height );
499
- this.gtaoMaterial.uniforms.cameraProjectionMatrix.value.copy( this.camera.projectionMatrix );
500
- this.gtaoMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );
501
-
502
- this.pdMaterial.uniforms.resolution.value.set( width, height );
503
- this.pdMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );
504
-
505
- }
506
-
507
- overrideVisibility() {
650
+ _overrideVisibility() {
508
651
 
509
652
  const scene = this.scene;
510
653
  const cache = this._visibilityCache;
@@ -519,7 +662,7 @@ class GTAOPass extends Pass {
519
662
 
520
663
  }
521
664
 
522
- restoreVisibility() {
665
+ _restoreVisibility() {
523
666
 
524
667
  const scene = this.scene;
525
668
  const cache = this._visibilityCache;
@@ -535,7 +678,7 @@ class GTAOPass extends Pass {
535
678
 
536
679
  }
537
680
 
538
- generateNoise( size = 64 ) {
681
+ _generateNoise( size = 64 ) {
539
682
 
540
683
  const simplex = new SimplexNoise();
541
684
 
@@ -9,41 +9,86 @@ import {
9
9
  import { Pass, FullScreenQuad } from './Pass.js';
10
10
  import { DigitalGlitch } from '../shaders/DigitalGlitch.js';
11
11
 
12
+ /**
13
+ * Pass for creating a glitch effect.
14
+ *
15
+ * ```js
16
+ * const glitchPass = new GlitchPass();
17
+ * composer.addPass( glitchPass );
18
+ * ```
19
+ *
20
+ * @augments Pass
21
+ */
12
22
  class GlitchPass extends Pass {
13
23
 
24
+ /**
25
+ * Constructs a new glitch pass.
26
+ *
27
+ * @param {number} [dt_size=64] - The size of the displacement texture
28
+ * for digital glitch squares.
29
+ */
14
30
  constructor( dt_size = 64 ) {
15
31
 
16
32
  super();
17
33
 
18
- const shader = DigitalGlitch;
34
+ /**
35
+ * The pass uniforms.
36
+ *
37
+ * @type {Object}
38
+ */
39
+ this.uniforms = UniformsUtils.clone( DigitalGlitch.uniforms );
40
+
41
+ /**
42
+ * The pass material.
43
+ *
44
+ * @type {ShaderMaterial}
45
+ */
46
+ this.material = new ShaderMaterial( {
47
+ uniforms: this.uniforms,
48
+ vertexShader: DigitalGlitch.vertexShader,
49
+ fragmentShader: DigitalGlitch.fragmentShader
50
+ } );
19
51
 
20
- this.uniforms = UniformsUtils.clone( shader.uniforms );
52
+ /**
53
+ * Whether to noticeably increase the effect instensity or not.
54
+ *
55
+ * @type {boolean}
56
+ * @default false
57
+ */
58
+ this.goWild = false;
21
59
 
22
- this.heightMap = this.generateHeightmap( dt_size );
60
+ // internals
23
61
 
62
+ this._heightMap = this._generateHeightmap( dt_size );
24
63
  this.uniforms[ 'tDisp' ].value = this.heightMap;
25
64
 
26
- this.material = new ShaderMaterial( {
27
- uniforms: this.uniforms,
28
- vertexShader: shader.vertexShader,
29
- fragmentShader: shader.fragmentShader
30
- } );
65
+ this._fsQuad = new FullScreenQuad( this.material );
31
66
 
32
- this.fsQuad = new FullScreenQuad( this.material );
67
+ this._curF = 0;
68
+ this._randX = 0;
33
69
 
34
- this.goWild = false;
35
- this.curF = 0;
36
- this.generateTrigger();
70
+ this._generateTrigger();
37
71
 
38
72
  }
39
73
 
74
+ /**
75
+ * Performs the glitch pass.
76
+ *
77
+ * @param {WebGLRenderer} renderer - The renderer.
78
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
79
+ * destination for the pass.
80
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
81
+ * previous pass from this buffer.
82
+ * @param {number} deltaTime - The delta time in seconds.
83
+ * @param {boolean} maskActive - Whether masking is active or not.
84
+ */
40
85
  render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
41
86
 
42
87
  this.uniforms[ 'tDiffuse' ].value = readBuffer.texture;
43
- this.uniforms[ 'seed' ].value = Math.random();//default seeding
88
+ this.uniforms[ 'seed' ].value = Math.random(); // default seeding
44
89
  this.uniforms[ 'byp' ].value = 0;
45
90
 
46
- if ( this.curF % this.randX == 0 || this.goWild == true ) {
91
+ if ( this._curF % this._randX == 0 || this.goWild == true ) {
47
92
 
48
93
  this.uniforms[ 'amount' ].value = Math.random() / 30;
49
94
  this.uniforms[ 'angle' ].value = MathUtils.randFloat( - Math.PI, Math.PI );
@@ -51,10 +96,10 @@ class GlitchPass extends Pass {
51
96
  this.uniforms[ 'seed_y' ].value = MathUtils.randFloat( - 1, 1 );
52
97
  this.uniforms[ 'distortion_x' ].value = MathUtils.randFloat( 0, 1 );
53
98
  this.uniforms[ 'distortion_y' ].value = MathUtils.randFloat( 0, 1 );
54
- this.curF = 0;
55
- this.generateTrigger();
99
+ this._curF = 0;
100
+ this._generateTrigger();
56
101
 
57
- } else if ( this.curF % this.randX < this.randX / 5 ) {
102
+ } else if ( this._curF % this._randX < this._randX / 5 ) {
58
103
 
59
104
  this.uniforms[ 'amount' ].value = Math.random() / 90;
60
105
  this.uniforms[ 'angle' ].value = MathUtils.randFloat( - Math.PI, Math.PI );
@@ -69,30 +114,46 @@ class GlitchPass extends Pass {
69
114
 
70
115
  }
71
116
 
72
- this.curF ++;
117
+ this._curF ++;
73
118
 
74
119
  if ( this.renderToScreen ) {
75
120
 
76
121
  renderer.setRenderTarget( null );
77
- this.fsQuad.render( renderer );
122
+ this._fsQuad.render( renderer );
78
123
 
79
124
  } else {
80
125
 
81
126
  renderer.setRenderTarget( writeBuffer );
82
127
  if ( this.clear ) renderer.clear();
83
- this.fsQuad.render( renderer );
128
+ this._fsQuad.render( renderer );
84
129
 
85
130
  }
86
131
 
87
132
  }
88
133
 
89
- generateTrigger() {
134
+ /**
135
+ * Frees the GPU-related resources allocated by this instance. Call this
136
+ * method whenever the pass is no longer used in your app.
137
+ */
138
+ dispose() {
90
139
 
91
- this.randX = MathUtils.randInt( 120, 240 );
140
+ this.material.dispose();
141
+
142
+ this.heightMap.dispose();
143
+
144
+ this._fsQuad.dispose();
92
145
 
93
146
  }
94
147
 
95
- generateHeightmap( dt_size ) {
148
+ // internals
149
+
150
+ _generateTrigger() {
151
+
152
+ this._randX = MathUtils.randInt( 120, 240 );
153
+
154
+ }
155
+
156
+ _generateHeightmap( dt_size ) {
96
157
 
97
158
  const data_arr = new Float32Array( dt_size * dt_size );
98
159
  const length = dt_size * dt_size;
@@ -110,16 +171,6 @@ class GlitchPass extends Pass {
110
171
 
111
172
  }
112
173
 
113
- dispose() {
114
-
115
- this.material.dispose();
116
-
117
- this.heightMap.dispose();
118
-
119
- this.fsQuad.dispose();
120
-
121
- }
122
-
123
174
  }
124
175
 
125
176
  export { GlitchPass };