@plastic-software/three 0.174.0 → 0.175.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (544) hide show
  1. package/build/three.cjs +10655 -1446
  2. package/build/three.core.js +9626 -1094
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +834 -157
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +4 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2658 -1697
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2654 -1709
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +93 -39
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +171 -48
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +71 -29
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +41 -3
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +35 -0
  94. package/examples/jsm/loaders/DDSLoader.js +24 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +42 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +218 -5
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +86 -18
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +38 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +81 -61
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +79 -2
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +108 -72
  162. package/examples/jsm/misc/VolumeSlice.js +88 -45
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +70 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +131 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +266 -133
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/Transpiler.js +31 -0
  273. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  274. package/examples/jsm/tsl/display/BloomNode.js +1 -1
  275. package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
  276. package/examples/jsm/tsl/display/SSRNode.js +1 -1
  277. package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
  278. package/examples/jsm/tsl/math/Bayer.js +14 -1
  279. package/examples/jsm/tsl/utils/Raymarching.js +4 -2
  280. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  281. package/examples/jsm/utils/CameraUtils.js +10 -7
  282. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  283. package/examples/jsm/utils/GeometryUtils.js +12 -13
  284. package/examples/jsm/utils/LDrawUtils.js +11 -4
  285. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  286. package/examples/jsm/utils/SceneUtils.js +50 -3
  287. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  288. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  289. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  290. package/examples/jsm/utils/SortUtils.js +14 -5
  291. package/examples/jsm/utils/UVsDebug.js +9 -4
  292. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  293. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  294. package/examples/jsm/utils/WorkerPool.js +65 -2
  295. package/examples/jsm/webxr/ARButton.js +18 -0
  296. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  297. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  298. package/examples/jsm/webxr/Text2D.js +11 -0
  299. package/examples/jsm/webxr/VRButton.js +30 -0
  300. package/examples/jsm/webxr/XRButton.js +22 -0
  301. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  302. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  303. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  304. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  305. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  306. package/examples/jsm/webxr/XRPlanes.js +17 -0
  307. package/package.json +1 -1
  308. package/src/Three.TSL.js +3 -1
  309. package/src/animation/AnimationAction.js +262 -30
  310. package/src/animation/AnimationClip.js +141 -2
  311. package/src/animation/AnimationMixer.js +99 -15
  312. package/src/animation/AnimationObjectGroup.js +41 -18
  313. package/src/animation/AnimationUtils.js +168 -18
  314. package/src/animation/KeyframeTrack.js +144 -10
  315. package/src/animation/PropertyBinding.js +77 -3
  316. package/src/animation/PropertyMixer.js +72 -5
  317. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  318. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  319. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  320. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  321. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  322. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  323. package/src/audio/AudioAnalyser.js +1 -1
  324. package/src/audio/AudioListener.js +2 -2
  325. package/src/audio/PositionalAudio.js +5 -5
  326. package/src/constants.js +1429 -5
  327. package/src/core/BufferAttribute.js +413 -3
  328. package/src/core/BufferGeometry.js +337 -1
  329. package/src/core/Clock.js +60 -0
  330. package/src/core/GLBufferAttribute.js +99 -0
  331. package/src/core/InstancedBufferAttribute.js +29 -0
  332. package/src/core/InstancedBufferGeometry.js +20 -0
  333. package/src/core/InstancedInterleavedBuffer.js +26 -0
  334. package/src/core/InterleavedBuffer.js +137 -3
  335. package/src/core/InterleavedBufferAttribute.js +197 -0
  336. package/src/core/Layers.js +71 -10
  337. package/src/core/Object3D.js +23 -0
  338. package/src/core/Raycaster.js +134 -1
  339. package/src/core/RenderTarget.js +166 -7
  340. package/src/core/RenderTarget3D.js +25 -0
  341. package/src/core/RenderTargetArray.js +18 -0
  342. package/src/core/Uniform.js +29 -0
  343. package/src/core/UniformsGroup.js +84 -2
  344. package/src/extras/Controls.js +16 -1
  345. package/src/extras/Earcut.js +3 -781
  346. package/src/extras/ImageUtils.js +3 -2
  347. package/src/extras/PMREMGenerator.js +22 -17
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/extras/core/Path.js +1 -1
  350. package/src/extras/lib/earcut.js +685 -0
  351. package/src/geometries/ConeGeometry.js +2 -2
  352. package/src/geometries/CylinderGeometry.js +2 -2
  353. package/src/geometries/ExtrudeGeometry.js +71 -39
  354. package/src/geometries/LatheGeometry.js +1 -1
  355. package/src/lights/LightShadow.js +1 -1
  356. package/src/lights/webgpu/IESSpotLight.js +1 -1
  357. package/src/loaders/AnimationLoader.js +31 -0
  358. package/src/loaders/AudioLoader.js +31 -0
  359. package/src/loaders/BufferGeometryLoader.js +34 -0
  360. package/src/loaders/Cache.js +45 -0
  361. package/src/loaders/CompressedTextureLoader.js +36 -3
  362. package/src/loaders/CubeTextureLoader.js +45 -0
  363. package/src/loaders/DataTextureLoader.js +44 -3
  364. package/src/loaders/FileLoader.js +57 -1
  365. package/src/loaders/ImageBitmapLoader.js +57 -0
  366. package/src/loaders/ImageLoader.js +30 -0
  367. package/src/loaders/Loader.js +4 -6
  368. package/src/loaders/LoaderUtils.js +18 -36
  369. package/src/loaders/LoadingManager.js +142 -0
  370. package/src/loaders/MaterialLoader.js +57 -0
  371. package/src/loaders/ObjectLoader.js +53 -0
  372. package/src/loaders/TextureLoader.js +33 -0
  373. package/src/loaders/nodes/NodeLoader.js +6 -2
  374. package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
  375. package/src/loaders/nodes/NodeObjectLoader.js +3 -3
  376. package/src/materials/LineBasicMaterial.js +74 -1
  377. package/src/materials/LineDashedMaterial.js +52 -0
  378. package/src/materials/Material.js +18 -3
  379. package/src/materials/MeshBasicMaterial.js +165 -0
  380. package/src/materials/MeshDepthMaterial.js +93 -0
  381. package/src/materials/MeshDistanceMaterial.js +76 -0
  382. package/src/materials/MeshLambertMaterial.js +273 -0
  383. package/src/materials/MeshMatcapMaterial.js +142 -0
  384. package/src/materials/MeshNormalMaterial.js +113 -0
  385. package/src/materials/MeshPhongMaterial.js +288 -0
  386. package/src/materials/MeshPhysicalMaterial.js +292 -1
  387. package/src/materials/MeshStandardMaterial.js +297 -0
  388. package/src/materials/MeshToonMaterial.js +218 -0
  389. package/src/materials/PointsMaterial.js +89 -0
  390. package/src/materials/RawShaderMaterial.js +25 -0
  391. package/src/materials/ShaderMaterial.js +215 -6
  392. package/src/materials/ShadowMaterial.js +54 -0
  393. package/src/materials/SpriteMaterial.js +82 -0
  394. package/src/materials/nodes/Line2NodeMaterial.js +1 -1
  395. package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
  396. package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
  397. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  398. package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
  399. package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
  400. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  401. package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
  402. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
  403. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  404. package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
  405. package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
  406. package/src/materials/nodes/NodeMaterial.js +7 -3
  407. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  408. package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
  409. package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
  410. package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
  411. package/src/math/Color.js +1 -1
  412. package/src/math/MathUtils.js +223 -0
  413. package/src/nodes/Nodes.js +1 -0
  414. package/src/nodes/accessors/BatchNode.js +8 -8
  415. package/src/nodes/accessors/BuiltinNode.js +1 -1
  416. package/src/nodes/accessors/CubeTextureNode.js +1 -1
  417. package/src/nodes/accessors/InstanceNode.js +5 -5
  418. package/src/nodes/accessors/InstancedMeshNode.js +1 -1
  419. package/src/nodes/accessors/MorphNode.js +27 -23
  420. package/src/nodes/accessors/Normal.js +1 -1
  421. package/src/nodes/accessors/Object3DNode.js +12 -12
  422. package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
  423. package/src/nodes/accessors/ReferenceNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +46 -37
  425. package/src/nodes/accessors/StorageBufferNode.js +1 -1
  426. package/src/nodes/accessors/StorageTextureNode.js +3 -3
  427. package/src/nodes/accessors/Texture3DNode.js +1 -1
  428. package/src/nodes/accessors/TextureNode.js +25 -5
  429. package/src/nodes/accessors/TextureSizeNode.js +1 -1
  430. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  431. package/src/nodes/code/CodeNode.js +4 -4
  432. package/src/nodes/code/ExpressionNode.js +4 -4
  433. package/src/nodes/code/FunctionCallNode.js +23 -3
  434. package/src/nodes/code/ScriptableNode.js +4 -4
  435. package/src/nodes/code/ScriptableValueNode.js +2 -2
  436. package/src/nodes/core/AssignNode.js +1 -1
  437. package/src/nodes/core/AttributeNode.js +1 -1
  438. package/src/nodes/core/BypassNode.js +1 -1
  439. package/src/nodes/core/CacheNode.js +1 -1
  440. package/src/nodes/core/ContextNode.js +1 -1
  441. package/src/nodes/core/InputNode.js +2 -2
  442. package/src/nodes/core/Node.js +14 -2
  443. package/src/nodes/core/NodeBuilder.js +86 -14
  444. package/src/nodes/core/StackNode.js +5 -5
  445. package/src/nodes/core/StructNode.js +1 -1
  446. package/src/nodes/core/StructTypeNode.js +2 -2
  447. package/src/nodes/core/VarNode.js +2 -8
  448. package/src/nodes/core/VaryingNode.js +3 -3
  449. package/src/nodes/display/BlendModes.js +4 -4
  450. package/src/nodes/display/BumpMapNode.js +1 -1
  451. package/src/nodes/display/NormalMapNode.js +1 -1
  452. package/src/nodes/display/PosterizeNode.js +1 -1
  453. package/src/nodes/display/ScreenNode.js +3 -3
  454. package/src/nodes/display/ViewportDepthNode.js +2 -2
  455. package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
  456. package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
  457. package/src/nodes/display/ViewportTextureNode.js +4 -4
  458. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  459. package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
  460. package/src/nodes/geometry/RangeNode.js +1 -1
  461. package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
  462. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  463. package/src/nodes/gpgpu/ComputeNode.js +30 -2
  464. package/src/nodes/lighting/AnalyticLightNode.js +9 -1
  465. package/src/nodes/lighting/LightsNode.js +3 -3
  466. package/src/nodes/lighting/ShadowNode.js +1 -1
  467. package/src/nodes/math/ConditionalNode.js +20 -3
  468. package/src/nodes/math/MathNode.js +83 -78
  469. package/src/nodes/math/OperatorNode.js +171 -82
  470. package/src/nodes/pmrem/PMREMNode.js +4 -4
  471. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  472. package/src/nodes/tsl/TSLBase.js +2 -1
  473. package/src/nodes/tsl/TSLCore.js +115 -12
  474. package/src/nodes/utils/ArrayElementNode.js +3 -1
  475. package/src/nodes/utils/CubeMapNode.js +3 -3
  476. package/src/nodes/utils/DebugNode.js +70 -0
  477. package/src/nodes/utils/EquirectUVNode.js +2 -2
  478. package/src/nodes/utils/JoinNode.js +27 -2
  479. package/src/nodes/utils/LoopNode.js +58 -28
  480. package/src/nodes/utils/MaxMipLevelNode.js +1 -1
  481. package/src/nodes/utils/ReflectorNode.js +2 -2
  482. package/src/nodes/utils/RemapNode.js +6 -6
  483. package/src/nodes/utils/RotateNode.js +1 -1
  484. package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
  485. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  486. package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
  487. package/src/objects/BatchedMesh.js +4 -4
  488. package/src/objects/InstancedMesh.js +2 -2
  489. package/src/objects/LOD.js +1 -1
  490. package/src/objects/Skeleton.js +1 -1
  491. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  492. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  493. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  494. package/src/renderers/WebGLRenderTarget.js +19 -0
  495. package/src/renderers/WebGLRenderer.js +617 -79
  496. package/src/renderers/common/Animation.js +2 -2
  497. package/src/renderers/common/Attributes.js +2 -2
  498. package/src/renderers/common/Backend.js +12 -3
  499. package/src/renderers/common/Background.js +1 -0
  500. package/src/renderers/common/Color4.js +1 -1
  501. package/src/renderers/common/CubeRenderTarget.js +13 -0
  502. package/src/renderers/common/PostProcessing.js +2 -0
  503. package/src/renderers/common/QuadMesh.js +2 -0
  504. package/src/renderers/common/RenderList.js +2 -2
  505. package/src/renderers/common/RenderObject.js +1 -1
  506. package/src/renderers/common/RenderObjects.js +2 -2
  507. package/src/renderers/common/Renderer.js +52 -31
  508. package/src/renderers/common/XRManager.js +333 -10
  509. package/src/renderers/common/extras/PMREMGenerator.js +6 -0
  510. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  511. package/src/renderers/shaders/UniformsLib.js +1 -4
  512. package/src/renderers/shaders/UniformsUtils.js +1 -3
  513. package/src/renderers/webgl/WebGLBackground.js +4 -2
  514. package/src/renderers/webgl/WebGLState.js +9 -9
  515. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  516. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  517. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  518. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  519. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  520. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  521. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  522. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  523. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  524. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  525. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  526. package/src/renderers/webxr/WebXRController.js +87 -2
  527. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  528. package/src/renderers/webxr/WebXRManager.js +173 -1
  529. package/src/scenes/Scene.js +2 -1
  530. package/src/textures/CanvasTexture.js +28 -0
  531. package/src/textures/CompressedArrayTexture.js +57 -0
  532. package/src/textures/CompressedCubeTexture.js +29 -0
  533. package/src/textures/CompressedTexture.js +64 -6
  534. package/src/textures/CubeTexture.js +52 -4
  535. package/src/textures/Data3DTexture.js +77 -0
  536. package/src/textures/DataArrayTexture.js +93 -0
  537. package/src/textures/DataTexture.js +65 -0
  538. package/src/textures/DepthTexture.js +59 -9
  539. package/src/textures/FramebufferTexture.js +62 -0
  540. package/src/textures/Source.js +69 -0
  541. package/src/textures/Texture.js +5 -5
  542. package/src/textures/VideoFrameTexture.js +43 -6
  543. package/src/textures/VideoTexture.js +49 -4
  544. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -10,67 +10,109 @@ import { Pass, FullScreenQuad } from './Pass.js';
10
10
  import { CopyShader } from '../shaders/CopyShader.js';
11
11
  import { AfterimageShader } from '../shaders/AfterimageShader.js';
12
12
 
13
+ /**
14
+ * Pass for a basic after image effect.
15
+ *
16
+ * ```js
17
+ * const afterimagePass = new AfterimagePass( 0.9 );
18
+ * composer.addPass( afterimagePass );
19
+ * ```
20
+ *
21
+ * @augments Pass
22
+ */
13
23
  class AfterimagePass extends Pass {
14
24
 
25
+ /**
26
+ * Constructs a new after image pass.
27
+ *
28
+ * @param {number} [damp=0.96] - The damping intensity. A higher value means a stronger after image effect.
29
+ */
15
30
  constructor( damp = 0.96 ) {
16
31
 
17
32
  super();
18
33
 
19
- this.shader = AfterimageShader;
20
-
21
- this.uniforms = UniformsUtils.clone( this.shader.uniforms );
34
+ /**
35
+ * The pass uniforms. Use this object if you want to update the
36
+ * `damp` value at runtime.
37
+ * ```js
38
+ * pass.uniforms.damp.value = 0.9;
39
+ * ```
40
+ *
41
+ * @type {Object}
42
+ */
43
+ this.uniforms = UniformsUtils.clone( AfterimageShader.uniforms );
22
44
 
23
45
  this.uniforms[ 'damp' ].value = damp;
24
46
 
25
- this.textureComp = new WebGLRenderTarget( window.innerWidth, window.innerHeight, {
26
- magFilter: NearestFilter,
27
- type: HalfFloatType
28
- } );
29
-
30
- this.textureOld = new WebGLRenderTarget( window.innerWidth, window.innerHeight, {
31
- magFilter: NearestFilter,
32
- type: HalfFloatType
33
- } );
34
-
47
+ /**
48
+ * The composition material.
49
+ *
50
+ * @type {ShaderMaterial}
51
+ */
35
52
  this.compFsMaterial = new ShaderMaterial( {
36
53
 
37
54
  uniforms: this.uniforms,
38
- vertexShader: this.shader.vertexShader,
39
- fragmentShader: this.shader.fragmentShader
55
+ vertexShader: AfterimageShader.vertexShader,
56
+ fragmentShader: AfterimageShader.fragmentShader
40
57
 
41
58
  } );
42
59
 
43
- this.compFsQuad = new FullScreenQuad( this.compFsMaterial );
44
-
45
- const copyShader = CopyShader;
46
-
60
+ /**
61
+ * The copy material.
62
+ *
63
+ * @type {ShaderMaterial}
64
+ */
47
65
  this.copyFsMaterial = new ShaderMaterial( {
48
- uniforms: UniformsUtils.clone( copyShader.uniforms ),
49
- vertexShader: copyShader.vertexShader,
50
- fragmentShader: copyShader.fragmentShader,
66
+ uniforms: UniformsUtils.clone( CopyShader.uniforms ),
67
+ vertexShader: CopyShader.vertexShader,
68
+ fragmentShader: CopyShader.fragmentShader,
51
69
  blending: NoBlending,
52
70
  depthTest: false,
53
71
  depthWrite: false
54
72
  } );
55
73
 
56
- this.copyFsQuad = new FullScreenQuad( this.copyFsMaterial );
74
+ // internals
75
+
76
+ this._textureComp = new WebGLRenderTarget( window.innerWidth, window.innerHeight, {
77
+ magFilter: NearestFilter,
78
+ type: HalfFloatType
79
+ } );
80
+
81
+ this._textureOld = new WebGLRenderTarget( window.innerWidth, window.innerHeight, {
82
+ magFilter: NearestFilter,
83
+ type: HalfFloatType
84
+ } );
85
+
86
+ this._compFsQuad = new FullScreenQuad( this.compFsMaterial );
87
+ this._copyFsQuad = new FullScreenQuad( this.copyFsMaterial );
57
88
 
58
89
  }
59
90
 
91
+ /**
92
+ * Performs the after image pass.
93
+ *
94
+ * @param {WebGLRenderer} renderer - The renderer.
95
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
96
+ * destination for the pass.
97
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
98
+ * previous pass from this buffer.
99
+ * @param {number} deltaTime - The delta time in seconds.
100
+ * @param {boolean} maskActive - Whether masking is active or not.
101
+ */
60
102
  render( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {
61
103
 
62
- this.uniforms[ 'tOld' ].value = this.textureOld.texture;
104
+ this.uniforms[ 'tOld' ].value = this._textureOld.texture;
63
105
  this.uniforms[ 'tNew' ].value = readBuffer.texture;
64
106
 
65
- renderer.setRenderTarget( this.textureComp );
66
- this.compFsQuad.render( renderer );
107
+ renderer.setRenderTarget( this._textureComp );
108
+ this._compFsQuad.render( renderer );
67
109
 
68
- this.copyFsQuad.material.uniforms.tDiffuse.value = this.textureComp.texture;
110
+ this._copyFsQuad.material.uniforms.tDiffuse.value = this._textureComp.texture;
69
111
 
70
112
  if ( this.renderToScreen ) {
71
113
 
72
114
  renderer.setRenderTarget( null );
73
- this.copyFsQuad.render( renderer );
115
+ this._copyFsQuad.render( renderer );
74
116
 
75
117
  } else {
76
118
 
@@ -78,35 +120,45 @@ class AfterimagePass extends Pass {
78
120
 
79
121
  if ( this.clear ) renderer.clear();
80
122
 
81
- this.copyFsQuad.render( renderer );
123
+ this._copyFsQuad.render( renderer );
82
124
 
83
125
  }
84
126
 
85
127
  // Swap buffers.
86
- const temp = this.textureOld;
87
- this.textureOld = this.textureComp;
88
- this.textureComp = temp;
128
+ const temp = this._textureOld;
129
+ this._textureOld = this._textureComp;
130
+ this._textureComp = temp;
89
131
  // Now textureOld contains the latest image, ready for the next frame.
90
132
 
91
133
  }
92
134
 
135
+ /**
136
+ * Sets the size of the pass.
137
+ *
138
+ * @param {number} width - The width to set.
139
+ * @param {number} height - The width to set.
140
+ */
93
141
  setSize( width, height ) {
94
142
 
95
- this.textureComp.setSize( width, height );
96
- this.textureOld.setSize( width, height );
143
+ this._textureComp.setSize( width, height );
144
+ this._textureOld.setSize( width, height );
97
145
 
98
146
  }
99
147
 
148
+ /**
149
+ * Frees the GPU-related resources allocated by this instance. Call this
150
+ * method whenever the pass is no longer used in your app.
151
+ */
100
152
  dispose() {
101
153
 
102
- this.textureComp.dispose();
103
- this.textureOld.dispose();
154
+ this._textureComp.dispose();
155
+ this._textureOld.dispose();
104
156
 
105
157
  this.compFsMaterial.dispose();
106
158
  this.copyFsMaterial.dispose();
107
159
 
108
- this.compFsQuad.dispose();
109
- this.copyFsQuad.dispose();
160
+ this._compFsQuad.dispose();
161
+ this._copyFsQuad.dispose();
110
162
 
111
163
  }
112
164
 
@@ -9,25 +9,47 @@ import {
9
9
  import { Pass, FullScreenQuad } from './Pass.js';
10
10
  import { ConvolutionShader } from '../shaders/ConvolutionShader.js';
11
11
 
12
+ /**
13
+ * A pass for a basic Bloom effect.
14
+ *
15
+ * {@link UnrealBloomPass} produces a more advanced Bloom but is also
16
+ * more expensive.
17
+ *
18
+ * ```js
19
+ * const effectBloom = new BloomPass( 0.75 );
20
+ * composer.addPass( effectBloom );
21
+ * ```
22
+ *
23
+ * @augments Pass
24
+ */
12
25
  class BloomPass extends Pass {
13
26
 
27
+ /**
28
+ * Constructs a new Bloom pass.
29
+ *
30
+ * @param {number} [strength=1] - The Bloom strength.
31
+ * @param {number} [kernelSize=25] - The kernel size.
32
+ * @param {number} [sigma=4] - The sigma.
33
+ */
14
34
  constructor( strength = 1, kernelSize = 25, sigma = 4 ) {
15
35
 
16
36
  super();
17
37
 
18
- // render targets
19
-
20
- this.renderTargetX = new WebGLRenderTarget( 1, 1, { type: HalfFloatType } ); // will be resized later
21
- this.renderTargetX.texture.name = 'BloomPass.x';
22
- this.renderTargetY = new WebGLRenderTarget( 1, 1, { type: HalfFloatType } ); // will be resized later
23
- this.renderTargetY.texture.name = 'BloomPass.y';
24
-
25
38
  // combine material
26
39
 
40
+ /**
41
+ * The combine pass uniforms.
42
+ *
43
+ * @type {Object}
44
+ */
27
45
  this.combineUniforms = UniformsUtils.clone( CombineShader.uniforms );
28
-
29
46
  this.combineUniforms[ 'strength' ].value = strength;
30
47
 
48
+ /**
49
+ * The combine pass material.
50
+ *
51
+ * @type {ShaderMaterial}
52
+ */
31
53
  this.materialCombine = new ShaderMaterial( {
32
54
 
33
55
  name: CombineShader.name,
@@ -43,11 +65,21 @@ class BloomPass extends Pass {
43
65
 
44
66
  const convolutionShader = ConvolutionShader;
45
67
 
68
+ /**
69
+ * The convolution pass uniforms.
70
+ *
71
+ * @type {Object}
72
+ */
46
73
  this.convolutionUniforms = UniformsUtils.clone( convolutionShader.uniforms );
47
74
 
48
75
  this.convolutionUniforms[ 'uImageIncrement' ].value = BloomPass.blurX;
49
- this.convolutionUniforms[ 'cKernel' ].value = ConvolutionShader.buildKernel( sigma );
76
+ this.convolutionUniforms[ 'cKernel' ].value = buildKernel( sigma );
50
77
 
78
+ /**
79
+ * The convolution pass material.
80
+ *
81
+ * @type {ShaderMaterial}
82
+ */
51
83
  this.materialConvolution = new ShaderMaterial( {
52
84
 
53
85
  name: convolutionShader.name,
@@ -61,67 +93,101 @@ class BloomPass extends Pass {
61
93
 
62
94
  } );
63
95
 
96
+ /**
97
+ * Overwritten to disable the swap.
98
+ *
99
+ * @type {boolean}
100
+ * @default false
101
+ */
64
102
  this.needsSwap = false;
65
103
 
66
- this.fsQuad = new FullScreenQuad( null );
104
+ // internals
105
+
106
+ this._renderTargetX = new WebGLRenderTarget( 1, 1, { type: HalfFloatType } ); // will be resized later
107
+ this._renderTargetX.texture.name = 'BloomPass.x';
108
+ this._renderTargetY = new WebGLRenderTarget( 1, 1, { type: HalfFloatType } ); // will be resized later
109
+ this._renderTargetY.texture.name = 'BloomPass.y';
110
+
111
+ this._fsQuad = new FullScreenQuad( null );
67
112
 
68
113
  }
69
114
 
115
+ /**
116
+ * Performs the Bloom pass.
117
+ *
118
+ * @param {WebGLRenderer} renderer - The renderer.
119
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
120
+ * destination for the pass.
121
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
122
+ * previous pass from this buffer.
123
+ * @param {number} deltaTime - The delta time in seconds.
124
+ * @param {boolean} maskActive - Whether masking is active or not.
125
+ */
70
126
  render( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {
71
127
 
72
128
  if ( maskActive ) renderer.state.buffers.stencil.setTest( false );
73
129
 
74
130
  // Render quad with blurred scene into texture (convolution pass 1)
75
131
 
76
- this.fsQuad.material = this.materialConvolution;
132
+ this._fsQuad.material = this.materialConvolution;
77
133
 
78
134
  this.convolutionUniforms[ 'tDiffuse' ].value = readBuffer.texture;
79
135
  this.convolutionUniforms[ 'uImageIncrement' ].value = BloomPass.blurX;
80
136
 
81
- renderer.setRenderTarget( this.renderTargetX );
137
+ renderer.setRenderTarget( this._renderTargetX );
82
138
  renderer.clear();
83
- this.fsQuad.render( renderer );
139
+ this._fsQuad.render( renderer );
84
140
 
85
141
 
86
142
  // Render quad with blurred scene into texture (convolution pass 2)
87
143
 
88
- this.convolutionUniforms[ 'tDiffuse' ].value = this.renderTargetX.texture;
144
+ this.convolutionUniforms[ 'tDiffuse' ].value = this._renderTargetX.texture;
89
145
  this.convolutionUniforms[ 'uImageIncrement' ].value = BloomPass.blurY;
90
146
 
91
- renderer.setRenderTarget( this.renderTargetY );
147
+ renderer.setRenderTarget( this._renderTargetY );
92
148
  renderer.clear();
93
- this.fsQuad.render( renderer );
149
+ this._fsQuad.render( renderer );
94
150
 
95
151
  // Render original scene with superimposed blur to texture
96
152
 
97
- this.fsQuad.material = this.materialCombine;
153
+ this._fsQuad.material = this.materialCombine;
98
154
 
99
- this.combineUniforms[ 'tDiffuse' ].value = this.renderTargetY.texture;
155
+ this.combineUniforms[ 'tDiffuse' ].value = this._renderTargetY.texture;
100
156
 
101
157
  if ( maskActive ) renderer.state.buffers.stencil.setTest( true );
102
158
 
103
159
  renderer.setRenderTarget( readBuffer );
104
160
  if ( this.clear ) renderer.clear();
105
- this.fsQuad.render( renderer );
161
+ this._fsQuad.render( renderer );
106
162
 
107
163
  }
108
164
 
165
+ /**
166
+ * Sets the size of the pass.
167
+ *
168
+ * @param {number} width - The width to set.
169
+ * @param {number} height - The width to set.
170
+ */
109
171
  setSize( width, height ) {
110
172
 
111
- this.renderTargetX.setSize( width, height );
112
- this.renderTargetY.setSize( width, height );
173
+ this._renderTargetX.setSize( width, height );
174
+ this._renderTargetY.setSize( width, height );
113
175
 
114
176
  }
115
177
 
178
+ /**
179
+ * Frees the GPU-related resources allocated by this instance. Call this
180
+ * method whenever the pass is no longer used in your app.
181
+ */
116
182
  dispose() {
117
183
 
118
- this.renderTargetX.dispose();
119
- this.renderTargetY.dispose();
184
+ this._renderTargetX.dispose();
185
+ this._renderTargetY.dispose();
120
186
 
121
187
  this.materialCombine.dispose();
122
188
  this.materialConvolution.dispose();
123
189
 
124
- this.fsQuad.dispose();
190
+ this._fsQuad.dispose();
125
191
 
126
192
  }
127
193
 
@@ -169,4 +235,39 @@ const CombineShader = {
169
235
  BloomPass.blurX = new Vector2( 0.001953125, 0.0 );
170
236
  BloomPass.blurY = new Vector2( 0.0, 0.001953125 );
171
237
 
238
+
239
+ function gauss( x, sigma ) {
240
+
241
+ return Math.exp( - ( x * x ) / ( 2.0 * sigma * sigma ) );
242
+
243
+ }
244
+
245
+ function buildKernel( sigma ) {
246
+
247
+ // We loop off the sqrt(2 * pi) * sigma term, since we're going to normalize anyway.
248
+
249
+ const kMaxKernelSize = 25;
250
+ let kernelSize = 2 * Math.ceil( sigma * 3.0 ) + 1;
251
+
252
+ if ( kernelSize > kMaxKernelSize ) kernelSize = kMaxKernelSize;
253
+
254
+ const halfWidth = ( kernelSize - 1 ) * 0.5;
255
+
256
+ const values = new Array( kernelSize );
257
+ let sum = 0.0;
258
+ for ( let i = 0; i < kernelSize; ++ i ) {
259
+
260
+ values[ i ] = gauss( i - halfWidth, sigma );
261
+ sum += values[ i ];
262
+
263
+ }
264
+
265
+ // normalize the kernel
266
+
267
+ for ( let i = 0; i < kernelSize; ++ i ) values[ i ] /= sum;
268
+
269
+ return values;
270
+
271
+ }
272
+
172
273
  export { BloomPass };
@@ -13,16 +13,44 @@ import { Pass, FullScreenQuad } from './Pass.js';
13
13
  import { BokehShader } from '../shaders/BokehShader.js';
14
14
 
15
15
  /**
16
- * Depth-of-field post-process with bokeh shader
16
+ * Pass for creating depth of field (DOF) effect.
17
+ *
18
+ * ```js
19
+ * const bokehPass = new BokehPass( scene, camera, {
20
+ * focus: 500
21
+ * aperture: 5,
22
+ * maxblur: 0.01
23
+ * } );
24
+ * composer.addPass( bokehPass );
25
+ * ```
26
+ *
27
+ * @augments Pass
17
28
  */
18
-
19
29
  class BokehPass extends Pass {
20
30
 
31
+ /**
32
+ * Constructs a new Bokeh pass.
33
+ *
34
+ * @param {Scene} scene - The scene to render the DOF for.
35
+ * @param {Camera} camera - The camera.
36
+ * @param {BokehPass~Options} params - The pass options.
37
+ */
21
38
  constructor( scene, camera, params ) {
22
39
 
23
40
  super();
24
41
 
42
+ /**
43
+ * The scene to render the DOF for.
44
+ *
45
+ * @type {Scene}
46
+ */
25
47
  this.scene = scene;
48
+
49
+ /**
50
+ * The camera.
51
+ *
52
+ * @type {Camera}
53
+ */
26
54
  this.camera = camera;
27
55
 
28
56
  const focus = ( params.focus !== undefined ) ? params.focus : 1.0;
@@ -31,26 +59,25 @@ class BokehPass extends Pass {
31
59
 
32
60
  // render targets
33
61
 
34
- this.renderTargetDepth = new WebGLRenderTarget( 1, 1, { // will be resized later
62
+ this._renderTargetDepth = new WebGLRenderTarget( 1, 1, { // will be resized later
35
63
  minFilter: NearestFilter,
36
64
  magFilter: NearestFilter,
37
65
  type: HalfFloatType
38
66
  } );
39
67
 
40
- this.renderTargetDepth.texture.name = 'BokehPass.depth';
68
+ this._renderTargetDepth.texture.name = 'BokehPass.depth';
41
69
 
42
70
  // depth material
43
71
 
44
- this.materialDepth = new MeshDepthMaterial();
45
- this.materialDepth.depthPacking = RGBADepthPacking;
46
- this.materialDepth.blending = NoBlending;
72
+ this._materialDepth = new MeshDepthMaterial();
73
+ this._materialDepth.depthPacking = RGBADepthPacking;
74
+ this._materialDepth.blending = NoBlending;
47
75
 
48
76
  // bokeh material
49
77
 
50
- const bokehShader = BokehShader;
51
- const bokehUniforms = UniformsUtils.clone( bokehShader.uniforms );
78
+ const bokehUniforms = UniformsUtils.clone( BokehShader.uniforms );
52
79
 
53
- bokehUniforms[ 'tDepth' ].value = this.renderTargetDepth.texture;
80
+ bokehUniforms[ 'tDepth' ].value = this._renderTargetDepth.texture;
54
81
 
55
82
  bokehUniforms[ 'focus' ].value = focus;
56
83
  bokehUniforms[ 'aspect' ].value = camera.aspect;
@@ -59,26 +86,56 @@ class BokehPass extends Pass {
59
86
  bokehUniforms[ 'nearClip' ].value = camera.near;
60
87
  bokehUniforms[ 'farClip' ].value = camera.far;
61
88
 
89
+ /**
90
+ * The pass bokeh material.
91
+ *
92
+ * @type {ShaderMaterial}
93
+ */
62
94
  this.materialBokeh = new ShaderMaterial( {
63
- defines: Object.assign( {}, bokehShader.defines ),
95
+ defines: Object.assign( {}, BokehShader.defines ),
64
96
  uniforms: bokehUniforms,
65
- vertexShader: bokehShader.vertexShader,
66
- fragmentShader: bokehShader.fragmentShader
97
+ vertexShader: BokehShader.vertexShader,
98
+ fragmentShader: BokehShader.fragmentShader
67
99
  } );
68
100
 
101
+ /**
102
+ * The pass uniforms. Use this object if you want to update the
103
+ * `focus`, `aperture` or `maxblur` values at runtime.
104
+ *
105
+ * ```js
106
+ * pass.uniforms.focus.value = focus;
107
+ * pass.uniforms.aperture.value = aperture;
108
+ * pass.uniforms.maxblur.value = maxblur;
109
+ * ```
110
+ *
111
+ * @type {Object}
112
+ */
69
113
  this.uniforms = bokehUniforms;
70
114
 
71
- this.fsQuad = new FullScreenQuad( this.materialBokeh );
115
+ // internals
116
+
117
+ this._fsQuad = new FullScreenQuad( this.materialBokeh );
72
118
 
73
119
  this._oldClearColor = new Color();
74
120
 
75
121
  }
76
122
 
123
+ /**
124
+ * Performs the Bokeh pass.
125
+ *
126
+ * @param {WebGLRenderer} renderer - The renderer.
127
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
128
+ * destination for the pass.
129
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
130
+ * previous pass from this buffer.
131
+ * @param {number} deltaTime - The delta time in seconds.
132
+ * @param {boolean} maskActive - Whether masking is active or not.
133
+ */
77
134
  render( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {
78
135
 
79
136
  // Render depth into texture
80
137
 
81
- this.scene.overrideMaterial = this.materialDepth;
138
+ this.scene.overrideMaterial = this._materialDepth;
82
139
 
83
140
  renderer.getClearColor( this._oldClearColor );
84
141
  const oldClearAlpha = renderer.getClearAlpha();
@@ -87,7 +144,7 @@ class BokehPass extends Pass {
87
144
 
88
145
  renderer.setClearColor( 0xffffff );
89
146
  renderer.setClearAlpha( 1.0 );
90
- renderer.setRenderTarget( this.renderTargetDepth );
147
+ renderer.setRenderTarget( this._renderTargetDepth );
91
148
  renderer.clear();
92
149
  renderer.render( this.scene, this.camera );
93
150
 
@@ -100,13 +157,13 @@ class BokehPass extends Pass {
100
157
  if ( this.renderToScreen ) {
101
158
 
102
159
  renderer.setRenderTarget( null );
103
- this.fsQuad.render( renderer );
160
+ this._fsQuad.render( renderer );
104
161
 
105
162
  } else {
106
163
 
107
164
  renderer.setRenderTarget( writeBuffer );
108
165
  renderer.clear();
109
- this.fsQuad.render( renderer );
166
+ this._fsQuad.render( renderer );
110
167
 
111
168
  }
112
169
 
@@ -117,25 +174,44 @@ class BokehPass extends Pass {
117
174
 
118
175
  }
119
176
 
177
+ /**
178
+ * Sets the size of the pass.
179
+ *
180
+ * @param {number} width - The width to set.
181
+ * @param {number} height - The width to set.
182
+ */
120
183
  setSize( width, height ) {
121
184
 
122
185
  this.materialBokeh.uniforms[ 'aspect' ].value = width / height;
123
186
 
124
- this.renderTargetDepth.setSize( width, height );
187
+ this._renderTargetDepth.setSize( width, height );
125
188
 
126
189
  }
127
190
 
191
+ /**
192
+ * Frees the GPU-related resources allocated by this instance. Call this
193
+ * method whenever the pass is no longer used in your app.
194
+ */
128
195
  dispose() {
129
196
 
130
- this.renderTargetDepth.dispose();
197
+ this._renderTargetDepth.dispose();
131
198
 
132
- this.materialDepth.dispose();
199
+ this._materialDepth.dispose();
133
200
  this.materialBokeh.dispose();
134
201
 
135
- this.fsQuad.dispose();
202
+ this._fsQuad.dispose();
136
203
 
137
204
  }
138
205
 
139
206
  }
140
207
 
208
+ /**
209
+ * Constructor options of `BokehPass`.
210
+ *
211
+ * @typedef {Object} BokehPass~Options
212
+ * @property {number} [focus=1] - Defines the effect's focus which is the distance along the camera's look direction in world units.
213
+ * @property {number} [aperture=0.025] - Defines the effect's aperture.
214
+ * @property {number} [maxblur=1] - Defines the effect's maximum blur.
215
+ **/
216
+
141
217
  export { BokehPass };