@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
@@ -5,34 +5,97 @@ import {
5
5
  Mesh
6
6
  } from 'three';
7
7
 
8
+ /**
9
+ * Abstract base class for all post processing passes.
10
+ *
11
+ * This module is only relevant for post processing with {@link WebGLRenderer}.
12
+ *
13
+ * @abstract
14
+ */
8
15
  class Pass {
9
16
 
17
+ /**
18
+ * Constructs a new pass.
19
+ */
10
20
  constructor() {
11
21
 
22
+ /**
23
+ * This flag can be used for type testing.
24
+ *
25
+ * @type {boolean}
26
+ * @readonly
27
+ * @default true
28
+ */
12
29
  this.isPass = true;
13
30
 
14
- // if set to true, the pass is processed by the composer
31
+ /**
32
+ * If set to `true`, the pass is processed by the composer.
33
+ *
34
+ * @type {boolean}
35
+ * @default true
36
+ */
15
37
  this.enabled = true;
16
38
 
17
- // if set to true, the pass indicates to swap read and write buffer after rendering
39
+ /**
40
+ * If set to `true`, the pass indicates to swap read and write buffer after rendering.
41
+ *
42
+ * @type {boolean}
43
+ * @default true
44
+ */
18
45
  this.needsSwap = true;
19
46
 
20
- // if set to true, the pass clears its buffer before rendering
47
+ /**
48
+ * If set to `true`, the pass clears its buffer before rendering
49
+ *
50
+ * @type {boolean}
51
+ * @default false
52
+ */
21
53
  this.clear = false;
22
54
 
23
- // if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.
55
+ /**
56
+ * If set to `true`, the result of the pass is rendered to screen. The last pass in the composers
57
+ * pass chain gets automatically rendered to screen, no matter how this property is configured.
58
+ *
59
+ * @type {boolean}
60
+ * @default false
61
+ */
24
62
  this.renderToScreen = false;
25
63
 
26
64
  }
27
65
 
66
+ /**
67
+ * Sets the size of the pass.
68
+ *
69
+ * @abstract
70
+ * @param {number} width - The width to set.
71
+ * @param {number} height - The width to set.
72
+ */
28
73
  setSize( /* width, height */ ) {}
29
74
 
75
+ /**
76
+ * This method holds the render logic of a pass. It must be implemented in all derived classes.
77
+ *
78
+ * @abstract
79
+ * @param {WebGLRenderer} renderer - The renderer.
80
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
81
+ * destination for the pass.
82
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
83
+ * previous pass from this buffer.
84
+ * @param {number} deltaTime - The delta time in seconds.
85
+ * @param {boolean} maskActive - Whether masking is active or not.
86
+ */
30
87
  render( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) {
31
88
 
32
89
  console.error( 'THREE.Pass: .render() must be implemented in derived pass.' );
33
90
 
34
91
  }
35
92
 
93
+ /**
94
+ * Frees the GPU-related resources allocated by this instance. Call this
95
+ * method whenever the pass is no longer used in your app.
96
+ *
97
+ * @abstract
98
+ */
36
99
  dispose() {}
37
100
 
38
101
  }
@@ -58,26 +121,57 @@ class FullscreenTriangleGeometry extends BufferGeometry {
58
121
 
59
122
  const _geometry = new FullscreenTriangleGeometry();
60
123
 
124
+
125
+ /**
126
+ * This module is a helper for passes which need to render a full
127
+ * screen effect which is quite common in context of post processing.
128
+ *
129
+ * The intended usage is to reuse a single full screen quad for rendering
130
+ * subsequent passes by just reassigning the `material` reference.
131
+ *
132
+ * This module can only be used with {@link WebGLRenderer}.
133
+ *
134
+ * @augments Mesh
135
+ */
61
136
  class FullScreenQuad {
62
137
 
138
+ /**
139
+ * Constructs a new full screen quad.
140
+ *
141
+ * @param {?Material} material - The material to render te full screen quad with.
142
+ */
63
143
  constructor( material ) {
64
144
 
65
145
  this._mesh = new Mesh( _geometry, material );
66
146
 
67
147
  }
68
148
 
149
+ /**
150
+ * Frees the GPU-related resources allocated by this instance. Call this
151
+ * method whenever the instance is no longer used in your app.
152
+ */
69
153
  dispose() {
70
154
 
71
155
  this._mesh.geometry.dispose();
72
156
 
73
157
  }
74
158
 
159
+ /**
160
+ * Renders the full screen quad.
161
+ *
162
+ * @param {WebGLRenderer} renderer - The renderer.
163
+ */
75
164
  render( renderer ) {
76
165
 
77
166
  renderer.render( this._mesh, _camera );
78
167
 
79
168
  }
80
169
 
170
+ /**
171
+ * The quad's material.
172
+ *
173
+ * @type {?Material}
174
+ */
81
175
  get material() {
82
176
 
83
177
  return this._mesh.material;
@@ -3,27 +3,110 @@ import {
3
3
  } from 'three';
4
4
  import { Pass } from './Pass.js';
5
5
 
6
+ /**
7
+ * This class represents a render pass. It takes a camera and a scene and produces
8
+ * a beauty pass for subsequent post processing effects.
9
+ *
10
+ * ```js
11
+ * const renderPass = new RenderPass( scene, camera );
12
+ * composer.addPass( renderPass );
13
+ * ```
14
+ *
15
+ * @augments Pass
16
+ */
6
17
  class RenderPass extends Pass {
7
18
 
19
+ /**
20
+ * Constructs a new render pass.
21
+ *
22
+ * @param {Scene} scene - The scene to render.
23
+ * @param {Camera} camera - The camera.
24
+ * @param {?Material} [overrideMaterial=null] - The override material. If set, this material is used
25
+ * for all objects in the scene.
26
+ * @param {?(number|Color|string)} [clearColor=null] - The clear color of the render pass.
27
+ * @param {?number} [clearAlpha=null] - The clear alpha of the render pass.
28
+ */
8
29
  constructor( scene, camera, overrideMaterial = null, clearColor = null, clearAlpha = null ) {
9
30
 
10
31
  super();
11
32
 
33
+ /**
34
+ * The scene to render.
35
+ *
36
+ * @type {Scene}
37
+ */
12
38
  this.scene = scene;
39
+
40
+ /**
41
+ * The camera.
42
+ *
43
+ * @type {Camera}
44
+ */
13
45
  this.camera = camera;
14
46
 
47
+ /**
48
+ * The override material. If set, this material is used
49
+ * for all objects in the scene.
50
+ *
51
+ * @type {?Material}
52
+ * @default null
53
+ */
15
54
  this.overrideMaterial = overrideMaterial;
16
55
 
56
+ /**
57
+ * The clear color of the render pass.
58
+ *
59
+ * @type {?(number|Color|string)}
60
+ * @default null
61
+ */
17
62
  this.clearColor = clearColor;
63
+
64
+ /**
65
+ * The clear alpha of the render pass.
66
+ *
67
+ * @type {?number}
68
+ * @default null
69
+ */
18
70
  this.clearAlpha = clearAlpha;
19
71
 
72
+ /**
73
+ * Overwritten to perform a clear operation by default.
74
+ *
75
+ * @type {boolean}
76
+ * @default true
77
+ */
20
78
  this.clear = true;
79
+
80
+ /**
81
+ * If set to `true`, only the depth can be cleared when `clear` is to `false`.
82
+ *
83
+ * @type {boolean}
84
+ * @default false
85
+ */
21
86
  this.clearDepth = false;
87
+
88
+ /**
89
+ * Overwritten to disable the swap.
90
+ *
91
+ * @type {boolean}
92
+ * @default false
93
+ */
22
94
  this.needsSwap = false;
23
95
  this._oldClearColor = new Color();
24
96
 
25
97
  }
26
98
 
99
+ /**
100
+ * Performs a beauty pass with the configured scene and camera.
101
+ *
102
+ * @param {WebGLRenderer} renderer - The renderer.
103
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
104
+ * destination for the pass.
105
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
106
+ * previous pass from this buffer.
107
+ * @param {number} deltaTime - The delta time in seconds.
108
+ * @param {boolean} maskActive - Whether masking is active or not.
109
+ */
27
110
  render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
28
111
 
29
112
  const oldAutoClear = renderer.autoClear;
@@ -10,87 +10,170 @@ import {
10
10
  } from 'three';
11
11
  import { Pass, FullScreenQuad } from './Pass.js';
12
12
 
13
+ /**
14
+ * A special type of render pass that produces a pixelated beauty pass.
15
+ *
16
+ * ```js
17
+ * const renderPixelatedPass = new RenderPixelatedPass( 6, scene, camera );
18
+ * composer.addPass( renderPixelatedPass );
19
+ * ```
20
+ *
21
+ * @augments Pass
22
+ */
13
23
  class RenderPixelatedPass extends Pass {
14
24
 
25
+ /**
26
+ * Constructs a new render pixelated pass.
27
+ *
28
+ * @param {number} pixelSize - The effect's pixel size.
29
+ * @param {Scene} scene - The scene to render.
30
+ * @param {Camera} camera - The camera.
31
+ * @param {{normalEdgeStrength:number,depthEdgeStrength:number}} options - The pass options.
32
+ */
15
33
  constructor( pixelSize, scene, camera, options = {} ) {
16
34
 
17
35
  super();
18
36
 
37
+ /**
38
+ * The effect's pixel size.
39
+ *
40
+ * @type {number}
41
+ */
19
42
  this.pixelSize = pixelSize;
20
- this.resolution = new Vector2();
21
- this.renderResolution = new Vector2();
22
43
 
23
- this.pixelatedMaterial = this.createPixelatedMaterial();
24
- this.normalMaterial = new MeshNormalMaterial();
25
-
26
- this.fsQuad = new FullScreenQuad( this.pixelatedMaterial );
44
+ /**
45
+ * The scene to render.
46
+ *
47
+ * @type {Scene}
48
+ */
27
49
  this.scene = scene;
50
+
51
+ /**
52
+ * The camera.
53
+ *
54
+ * @type {Camera}
55
+ */
28
56
  this.camera = camera;
29
57
 
58
+ /**
59
+ * The normal edge strength.
60
+ *
61
+ * @type {number}
62
+ * @default 0.3
63
+ */
30
64
  this.normalEdgeStrength = options.normalEdgeStrength || 0.3;
65
+
66
+ /**
67
+ * The normal edge strength.
68
+ *
69
+ * @type {number}
70
+ * @default 0.4
71
+ */
31
72
  this.depthEdgeStrength = options.depthEdgeStrength || 0.4;
32
73
 
33
- this.beautyRenderTarget = new WebGLRenderTarget();
34
- this.beautyRenderTarget.texture.minFilter = NearestFilter;
35
- this.beautyRenderTarget.texture.magFilter = NearestFilter;
36
- this.beautyRenderTarget.texture.type = HalfFloatType;
37
- this.beautyRenderTarget.depthTexture = new DepthTexture();
74
+ /**
75
+ * The pixelated material.
76
+ *
77
+ * @type {ShaderMaterial}
78
+ */
79
+ this.pixelatedMaterial = this._createPixelatedMaterial();
80
+
81
+ // internals
82
+
83
+ this._resolution = new Vector2();
84
+ this._renderResolution = new Vector2();
38
85
 
39
- this.normalRenderTarget = new WebGLRenderTarget();
40
- this.normalRenderTarget.texture.minFilter = NearestFilter;
41
- this.normalRenderTarget.texture.magFilter = NearestFilter;
42
- this.normalRenderTarget.texture.type = HalfFloatType;
86
+ this._normalMaterial = new MeshNormalMaterial();
87
+
88
+ this._beautyRenderTarget = new WebGLRenderTarget();
89
+ this._beautyRenderTarget.texture.minFilter = NearestFilter;
90
+ this._beautyRenderTarget.texture.magFilter = NearestFilter;
91
+ this._beautyRenderTarget.texture.type = HalfFloatType;
92
+ this._beautyRenderTarget.depthTexture = new DepthTexture();
93
+
94
+ this._normalRenderTarget = new WebGLRenderTarget();
95
+ this._normalRenderTarget.texture.minFilter = NearestFilter;
96
+ this._normalRenderTarget.texture.magFilter = NearestFilter;
97
+ this._normalRenderTarget.texture.type = HalfFloatType;
98
+
99
+ this._fsQuad = new FullScreenQuad( this.pixelatedMaterial );
43
100
 
44
101
  }
45
102
 
103
+ /**
104
+ * Frees the GPU-related resources allocated by this instance. Call this
105
+ * method whenever the pass is no longer used in your app.
106
+ */
46
107
  dispose() {
47
108
 
48
- this.beautyRenderTarget.dispose();
49
- this.normalRenderTarget.dispose();
109
+ this._beautyRenderTarget.dispose();
110
+ this._normalRenderTarget.dispose();
50
111
 
51
112
  this.pixelatedMaterial.dispose();
52
- this.normalMaterial.dispose();
113
+ this._normalMaterial.dispose();
53
114
 
54
- this.fsQuad.dispose();
115
+ this._fsQuad.dispose();
55
116
 
56
117
  }
57
118
 
119
+ /**
120
+ * Sets the size of the pass.
121
+ *
122
+ * @param {number} width - The width to set.
123
+ * @param {number} height - The width to set.
124
+ */
58
125
  setSize( width, height ) {
59
126
 
60
- this.resolution.set( width, height );
61
- this.renderResolution.set( ( width / this.pixelSize ) | 0, ( height / this.pixelSize ) | 0 );
62
- const { x, y } = this.renderResolution;
63
- this.beautyRenderTarget.setSize( x, y );
64
- this.normalRenderTarget.setSize( x, y );
65
- this.fsQuad.material.uniforms.resolution.value.set( x, y, 1 / x, 1 / y );
127
+ this._resolution.set( width, height );
128
+ this._renderResolution.set( ( width / this.pixelSize ) | 0, ( height / this.pixelSize ) | 0 );
129
+ const { x, y } = this._renderResolution;
130
+ this._beautyRenderTarget.setSize( x, y );
131
+ this._normalRenderTarget.setSize( x, y );
132
+ this._fsQuad.material.uniforms.resolution.value.set( x, y, 1 / x, 1 / y );
66
133
 
67
134
  }
68
135
 
136
+ /**
137
+ * Sets the effect's pixel size.
138
+ *
139
+ * @param {number} pixelSize - The pixel size to set.
140
+ */
69
141
  setPixelSize( pixelSize ) {
70
142
 
71
143
  this.pixelSize = pixelSize;
72
- this.setSize( this.resolution.x, this.resolution.y );
144
+ this.setSize( this._resolution.x, this._resolution.y );
73
145
 
74
146
  }
75
147
 
76
- render( renderer, writeBuffer ) {
77
-
78
- const uniforms = this.fsQuad.material.uniforms;
148
+ /**
149
+ * Performs the pixelation pass.
150
+ *
151
+ * @param {WebGLRenderer} renderer - The renderer.
152
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
153
+ * destination for the pass.
154
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
155
+ * previous pass from this buffer.
156
+ * @param {number} deltaTime - The delta time in seconds.
157
+ * @param {boolean} maskActive - Whether masking is active or not.
158
+ */
159
+ render( renderer, writeBuffer/*, readBuffer , deltaTime, maskActive */ ) {
160
+
161
+ const uniforms = this._fsQuad.material.uniforms;
79
162
  uniforms.normalEdgeStrength.value = this.normalEdgeStrength;
80
163
  uniforms.depthEdgeStrength.value = this.depthEdgeStrength;
81
164
 
82
- renderer.setRenderTarget( this.beautyRenderTarget );
165
+ renderer.setRenderTarget( this._beautyRenderTarget );
83
166
  renderer.render( this.scene, this.camera );
84
167
 
85
168
  const overrideMaterial_old = this.scene.overrideMaterial;
86
- renderer.setRenderTarget( this.normalRenderTarget );
87
- this.scene.overrideMaterial = this.normalMaterial;
169
+ renderer.setRenderTarget( this._normalRenderTarget );
170
+ this.scene.overrideMaterial = this._normalMaterial;
88
171
  renderer.render( this.scene, this.camera );
89
172
  this.scene.overrideMaterial = overrideMaterial_old;
90
173
 
91
- uniforms.tDiffuse.value = this.beautyRenderTarget.texture;
92
- uniforms.tDepth.value = this.beautyRenderTarget.depthTexture;
93
- uniforms.tNormal.value = this.normalRenderTarget.texture;
174
+ uniforms.tDiffuse.value = this._beautyRenderTarget.texture;
175
+ uniforms.tDepth.value = this._beautyRenderTarget.depthTexture;
176
+ uniforms.tNormal.value = this._normalRenderTarget.texture;
94
177
 
95
178
  if ( this.renderToScreen ) {
96
179
 
@@ -104,25 +187,20 @@ class RenderPixelatedPass extends Pass {
104
187
 
105
188
  }
106
189
 
107
- this.fsQuad.render( renderer );
190
+ this._fsQuad.render( renderer );
108
191
 
109
192
  }
110
193
 
111
- createPixelatedMaterial() {
194
+ // internals
195
+
196
+ _createPixelatedMaterial() {
112
197
 
113
198
  return new ShaderMaterial( {
114
199
  uniforms: {
115
200
  tDiffuse: { value: null },
116
201
  tDepth: { value: null },
117
202
  tNormal: { value: null },
118
- resolution: {
119
- value: new Vector4(
120
- this.renderResolution.x,
121
- this.renderResolution.y,
122
- 1 / this.renderResolution.x,
123
- 1 / this.renderResolution.y,
124
- )
125
- },
203
+ resolution: { value: new Vector4() },
126
204
  normalEdgeStrength: { value: 0 },
127
205
  depthEdgeStrength: { value: 0 }
128
206
  },