@plastic-software/three 0.174.0 → 0.175.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (567) hide show
  1. package/build/three.cjs +10744 -1476
  2. package/build/three.core.js +9633 -1096
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +918 -189
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +4 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2658 -1697
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2654 -1709
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +93 -39
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +171 -48
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +71 -29
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +41 -3
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +35 -0
  94. package/examples/jsm/loaders/DDSLoader.js +24 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +42 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +218 -5
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +86 -18
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +38 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +81 -61
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +79 -2
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +108 -72
  162. package/examples/jsm/misc/VolumeSlice.js +88 -45
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +70 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +131 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +266 -133
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/Transpiler.js +31 -0
  273. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  274. package/examples/jsm/tsl/display/BloomNode.js +1 -1
  275. package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
  276. package/examples/jsm/tsl/display/SSRNode.js +1 -1
  277. package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
  278. package/examples/jsm/tsl/math/Bayer.js +14 -1
  279. package/examples/jsm/tsl/utils/Raymarching.js +4 -2
  280. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  281. package/examples/jsm/utils/CameraUtils.js +10 -7
  282. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  283. package/examples/jsm/utils/GeometryUtils.js +12 -13
  284. package/examples/jsm/utils/LDrawUtils.js +11 -4
  285. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  286. package/examples/jsm/utils/SceneUtils.js +50 -3
  287. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  288. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  289. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  290. package/examples/jsm/utils/SortUtils.js +14 -5
  291. package/examples/jsm/utils/UVsDebug.js +9 -4
  292. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  293. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  294. package/examples/jsm/utils/WorkerPool.js +65 -2
  295. package/examples/jsm/webxr/ARButton.js +18 -0
  296. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  297. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  298. package/examples/jsm/webxr/Text2D.js +11 -0
  299. package/examples/jsm/webxr/VRButton.js +30 -0
  300. package/examples/jsm/webxr/XRButton.js +22 -0
  301. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  302. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  303. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  304. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  305. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  306. package/examples/jsm/webxr/XRPlanes.js +17 -0
  307. package/package.json +1 -1
  308. package/src/Three.TSL.js +3 -1
  309. package/src/animation/AnimationAction.js +262 -30
  310. package/src/animation/AnimationClip.js +141 -2
  311. package/src/animation/AnimationMixer.js +99 -15
  312. package/src/animation/AnimationObjectGroup.js +41 -18
  313. package/src/animation/AnimationUtils.js +168 -18
  314. package/src/animation/KeyframeTrack.js +144 -10
  315. package/src/animation/PropertyBinding.js +77 -3
  316. package/src/animation/PropertyMixer.js +72 -5
  317. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  318. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  319. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  320. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  321. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  322. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  323. package/src/audio/AudioAnalyser.js +1 -1
  324. package/src/audio/AudioListener.js +2 -2
  325. package/src/audio/PositionalAudio.js +5 -5
  326. package/src/constants.js +1432 -5
  327. package/src/core/BufferAttribute.js +413 -3
  328. package/src/core/BufferGeometry.js +337 -1
  329. package/src/core/Clock.js +60 -0
  330. package/src/core/GLBufferAttribute.js +99 -0
  331. package/src/core/InstancedBufferAttribute.js +29 -0
  332. package/src/core/InstancedBufferGeometry.js +20 -0
  333. package/src/core/InstancedInterleavedBuffer.js +26 -0
  334. package/src/core/InterleavedBuffer.js +137 -3
  335. package/src/core/InterleavedBufferAttribute.js +197 -0
  336. package/src/core/Layers.js +71 -10
  337. package/src/core/Object3D.js +23 -0
  338. package/src/core/Raycaster.js +134 -1
  339. package/src/core/RenderTarget.js +166 -7
  340. package/src/core/RenderTarget3D.js +25 -0
  341. package/src/core/RenderTargetArray.js +18 -0
  342. package/src/core/Uniform.js +29 -0
  343. package/src/core/UniformsGroup.js +84 -2
  344. package/src/extras/Controls.js +16 -1
  345. package/src/extras/Earcut.js +3 -781
  346. package/src/extras/ImageUtils.js +3 -2
  347. package/src/extras/PMREMGenerator.js +22 -17
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/extras/core/Path.js +1 -1
  350. package/src/extras/lib/earcut.js +685 -0
  351. package/src/geometries/ConeGeometry.js +2 -2
  352. package/src/geometries/CylinderGeometry.js +2 -2
  353. package/src/geometries/ExtrudeGeometry.js +71 -39
  354. package/src/geometries/LatheGeometry.js +1 -1
  355. package/src/lights/LightShadow.js +1 -1
  356. package/src/lights/webgpu/IESSpotLight.js +1 -1
  357. package/src/loaders/AnimationLoader.js +31 -0
  358. package/src/loaders/AudioLoader.js +31 -0
  359. package/src/loaders/BufferGeometryLoader.js +34 -0
  360. package/src/loaders/Cache.js +45 -0
  361. package/src/loaders/CompressedTextureLoader.js +36 -3
  362. package/src/loaders/CubeTextureLoader.js +45 -0
  363. package/src/loaders/DataTextureLoader.js +44 -3
  364. package/src/loaders/FileLoader.js +57 -1
  365. package/src/loaders/ImageBitmapLoader.js +57 -0
  366. package/src/loaders/ImageLoader.js +30 -0
  367. package/src/loaders/Loader.js +4 -6
  368. package/src/loaders/LoaderUtils.js +18 -36
  369. package/src/loaders/LoadingManager.js +142 -0
  370. package/src/loaders/MaterialLoader.js +57 -0
  371. package/src/loaders/ObjectLoader.js +58 -1
  372. package/src/loaders/TextureLoader.js +33 -0
  373. package/src/loaders/nodes/NodeLoader.js +6 -2
  374. package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
  375. package/src/loaders/nodes/NodeObjectLoader.js +3 -3
  376. package/src/materials/LineBasicMaterial.js +74 -1
  377. package/src/materials/LineDashedMaterial.js +52 -0
  378. package/src/materials/Material.js +18 -3
  379. package/src/materials/MeshBasicMaterial.js +165 -0
  380. package/src/materials/MeshDepthMaterial.js +93 -0
  381. package/src/materials/MeshDistanceMaterial.js +76 -0
  382. package/src/materials/MeshLambertMaterial.js +273 -0
  383. package/src/materials/MeshMatcapMaterial.js +142 -0
  384. package/src/materials/MeshNormalMaterial.js +113 -0
  385. package/src/materials/MeshPhongMaterial.js +288 -0
  386. package/src/materials/MeshPhysicalMaterial.js +292 -1
  387. package/src/materials/MeshStandardMaterial.js +297 -0
  388. package/src/materials/MeshToonMaterial.js +218 -0
  389. package/src/materials/PointsMaterial.js +89 -0
  390. package/src/materials/RawShaderMaterial.js +25 -0
  391. package/src/materials/ShaderMaterial.js +215 -6
  392. package/src/materials/ShadowMaterial.js +54 -0
  393. package/src/materials/SpriteMaterial.js +82 -0
  394. package/src/materials/nodes/Line2NodeMaterial.js +1 -1
  395. package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
  396. package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
  397. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  398. package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
  399. package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
  400. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  401. package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
  402. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
  403. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  404. package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
  405. package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
  406. package/src/materials/nodes/NodeMaterial.js +7 -3
  407. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  408. package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
  409. package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
  410. package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
  411. package/src/math/Color.js +1 -1
  412. package/src/math/MathUtils.js +223 -0
  413. package/src/nodes/Nodes.js +1 -0
  414. package/src/nodes/accessors/BatchNode.js +8 -8
  415. package/src/nodes/accessors/BuiltinNode.js +1 -1
  416. package/src/nodes/accessors/CubeTextureNode.js +1 -1
  417. package/src/nodes/accessors/InstanceNode.js +5 -5
  418. package/src/nodes/accessors/InstancedMeshNode.js +1 -1
  419. package/src/nodes/accessors/MorphNode.js +27 -23
  420. package/src/nodes/accessors/Normal.js +1 -1
  421. package/src/nodes/accessors/Object3DNode.js +12 -12
  422. package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
  423. package/src/nodes/accessors/ReferenceNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +46 -37
  425. package/src/nodes/accessors/StorageBufferNode.js +1 -1
  426. package/src/nodes/accessors/StorageTextureNode.js +3 -3
  427. package/src/nodes/accessors/Texture3DNode.js +1 -1
  428. package/src/nodes/accessors/TextureNode.js +25 -5
  429. package/src/nodes/accessors/TextureSizeNode.js +1 -1
  430. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  431. package/src/nodes/code/CodeNode.js +4 -4
  432. package/src/nodes/code/ExpressionNode.js +4 -4
  433. package/src/nodes/code/FunctionCallNode.js +23 -3
  434. package/src/nodes/code/ScriptableNode.js +4 -4
  435. package/src/nodes/code/ScriptableValueNode.js +2 -2
  436. package/src/nodes/core/AssignNode.js +1 -1
  437. package/src/nodes/core/AttributeNode.js +1 -1
  438. package/src/nodes/core/BypassNode.js +1 -1
  439. package/src/nodes/core/CacheNode.js +1 -1
  440. package/src/nodes/core/ContextNode.js +1 -1
  441. package/src/nodes/core/InputNode.js +2 -2
  442. package/src/nodes/core/Node.js +14 -2
  443. package/src/nodes/core/NodeBuilder.js +86 -14
  444. package/src/nodes/core/StackNode.js +5 -5
  445. package/src/nodes/core/StructNode.js +1 -1
  446. package/src/nodes/core/StructTypeNode.js +2 -2
  447. package/src/nodes/core/VarNode.js +2 -8
  448. package/src/nodes/core/VaryingNode.js +3 -3
  449. package/src/nodes/display/BlendModes.js +4 -4
  450. package/src/nodes/display/BumpMapNode.js +1 -1
  451. package/src/nodes/display/NormalMapNode.js +1 -1
  452. package/src/nodes/display/PosterizeNode.js +1 -1
  453. package/src/nodes/display/ScreenNode.js +3 -3
  454. package/src/nodes/display/ViewportDepthNode.js +2 -2
  455. package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
  456. package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
  457. package/src/nodes/display/ViewportTextureNode.js +4 -4
  458. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  459. package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
  460. package/src/nodes/geometry/RangeNode.js +1 -1
  461. package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
  462. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  463. package/src/nodes/gpgpu/ComputeNode.js +30 -2
  464. package/src/nodes/lighting/AnalyticLightNode.js +9 -1
  465. package/src/nodes/lighting/LightsNode.js +3 -3
  466. package/src/nodes/lighting/ShadowNode.js +1 -1
  467. package/src/nodes/math/ConditionalNode.js +20 -3
  468. package/src/nodes/math/MathNode.js +83 -78
  469. package/src/nodes/math/OperatorNode.js +171 -82
  470. package/src/nodes/pmrem/PMREMNode.js +4 -4
  471. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  472. package/src/nodes/tsl/TSLBase.js +2 -1
  473. package/src/nodes/tsl/TSLCore.js +115 -12
  474. package/src/nodes/utils/ArrayElementNode.js +3 -1
  475. package/src/nodes/utils/CubeMapNode.js +3 -3
  476. package/src/nodes/utils/DebugNode.js +70 -0
  477. package/src/nodes/utils/EquirectUVNode.js +2 -2
  478. package/src/nodes/utils/JoinNode.js +27 -2
  479. package/src/nodes/utils/LoopNode.js +58 -28
  480. package/src/nodes/utils/MaxMipLevelNode.js +1 -1
  481. package/src/nodes/utils/ReflectorNode.js +2 -2
  482. package/src/nodes/utils/RemapNode.js +6 -6
  483. package/src/nodes/utils/RotateNode.js +1 -1
  484. package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
  485. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  486. package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
  487. package/src/objects/BatchedMesh.js +4 -4
  488. package/src/objects/InstancedMesh.js +2 -2
  489. package/src/objects/LOD.js +1 -1
  490. package/src/objects/Skeleton.js +1 -1
  491. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  492. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  493. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  494. package/src/renderers/WebGLRenderTarget.js +19 -0
  495. package/src/renderers/WebGLRenderer.js +617 -79
  496. package/src/renderers/common/Animation.js +2 -2
  497. package/src/renderers/common/Attributes.js +2 -2
  498. package/src/renderers/common/Backend.js +12 -3
  499. package/src/renderers/common/Background.js +1 -0
  500. package/src/renderers/common/Color4.js +1 -1
  501. package/src/renderers/common/CubeRenderTarget.js +13 -0
  502. package/src/renderers/common/PostProcessing.js +2 -0
  503. package/src/renderers/common/QuadMesh.js +2 -0
  504. package/src/renderers/common/RenderList.js +2 -2
  505. package/src/renderers/common/RenderObject.js +1 -1
  506. package/src/renderers/common/RenderObjects.js +2 -2
  507. package/src/renderers/common/Renderer.js +52 -31
  508. package/src/renderers/common/XRManager.js +333 -10
  509. package/src/renderers/common/extras/PMREMGenerator.js +6 -0
  510. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  511. package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +10 -1
  512. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
  513. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
  514. package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
  515. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
  516. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
  517. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
  518. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
  519. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
  520. package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
  521. package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
  522. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
  523. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
  524. package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
  525. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
  526. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
  527. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
  528. package/src/renderers/shaders/ShaderChunk.js +2 -0
  529. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
  530. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
  531. package/src/renderers/shaders/UniformsLib.js +6 -5
  532. package/src/renderers/shaders/UniformsUtils.js +1 -3
  533. package/src/renderers/webgl/WebGLBackground.js +4 -2
  534. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  535. package/src/renderers/webgl/WebGLProgram.js +25 -5
  536. package/src/renderers/webgl/WebGLPrograms.js +21 -7
  537. package/src/renderers/webgl/WebGLState.js +9 -9
  538. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  539. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  540. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  541. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  542. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  543. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  544. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  545. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  546. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  547. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  548. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  549. package/src/renderers/webxr/WebXRController.js +87 -2
  550. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  551. package/src/renderers/webxr/WebXRManager.js +173 -1
  552. package/src/scenes/Scene.js +2 -1
  553. package/src/textures/CanvasTexture.js +28 -0
  554. package/src/textures/CompressedArrayTexture.js +57 -0
  555. package/src/textures/CompressedCubeTexture.js +29 -0
  556. package/src/textures/CompressedTexture.js +64 -6
  557. package/src/textures/CubeTexture.js +52 -4
  558. package/src/textures/Data3DTexture.js +77 -0
  559. package/src/textures/DataArrayTexture.js +93 -0
  560. package/src/textures/DataTexture.js +65 -0
  561. package/src/textures/DepthTexture.js +59 -9
  562. package/src/textures/FramebufferTexture.js +62 -0
  563. package/src/textures/Source.js +69 -0
  564. package/src/textures/Texture.js +5 -5
  565. package/src/textures/VideoFrameTexture.js +43 -6
  566. package/src/textures/VideoTexture.js +49 -4
  567. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -16,27 +16,137 @@ import {
16
16
  import { Pass, FullScreenQuad } from './Pass.js';
17
17
  import { CopyShader } from '../shaders/CopyShader.js';
18
18
 
19
+ /**
20
+ * A pass for rendering outlines around selected objects.
21
+ *
22
+ * ```js
23
+ * const resolution = new THREE.Vector2( window.innerWidth, window.innerHeight );
24
+ * const outlinePass = new OutlinePass( resolution, scene, camera );
25
+ * composer.addPass( outlinePass );
26
+ * ```
27
+ *
28
+ * @augments Pass
29
+ */
19
30
  class OutlinePass extends Pass {
20
31
 
32
+ /**
33
+ * Constructs a new outline pass.
34
+ *
35
+ * @param {Vector2} [resolution] - The effect's resolution.
36
+ * @param {Scene} scene - The scene to render.
37
+ * @param {Camera} camera - The camera.
38
+ * @param {Array<Object3D>} [selectedObjects] - The selected 3D objects that should receive an outline.
39
+ *
40
+ */
21
41
  constructor( resolution, scene, camera, selectedObjects ) {
22
42
 
23
43
  super();
24
44
 
45
+ /**
46
+ * The scene to render.
47
+ *
48
+ * @type {Object}
49
+ */
25
50
  this.renderScene = scene;
51
+
52
+ /**
53
+ * The camera.
54
+ *
55
+ * @type {Object}
56
+ */
26
57
  this.renderCamera = camera;
58
+
59
+ /**
60
+ * The selected 3D objects that should receive an outline.
61
+ *
62
+ * @type {Array<Object3D>}
63
+ */
27
64
  this.selectedObjects = selectedObjects !== undefined ? selectedObjects : [];
65
+
66
+ /**
67
+ * The visible edge color.
68
+ *
69
+ * @type {Color}
70
+ * @default (1,1,1)
71
+ */
28
72
  this.visibleEdgeColor = new Color( 1, 1, 1 );
73
+
74
+ /**
75
+ * The hidden edge color.
76
+ *
77
+ * @type {Color}
78
+ * @default (0.1,0.04,0.02)
79
+ */
29
80
  this.hiddenEdgeColor = new Color( 0.1, 0.04, 0.02 );
81
+
82
+ /**
83
+ * Can be used for an animated glow/pulse effect.
84
+ *
85
+ * @type {number}
86
+ * @default 0
87
+ */
30
88
  this.edgeGlow = 0.0;
89
+
90
+ /**
91
+ * Whether to use a pattern texture for to highlight selected
92
+ * 3D objects or not.
93
+ *
94
+ * @type {boolean}
95
+ * @default false
96
+ */
31
97
  this.usePatternTexture = false;
98
+
99
+ /**
100
+ * Can be used to highlight selected 3D objects. Requires to set
101
+ * {@link OutlinePass#usePatternTexture} to `true`.
102
+ *
103
+ * @type {?Texture}
104
+ * @default null
105
+ */
106
+ this.patternTexture = null;
107
+
108
+ /**
109
+ * The edge thickness.
110
+ *
111
+ * @type {number}
112
+ * @default 1
113
+ */
32
114
  this.edgeThickness = 1.0;
115
+
116
+ /**
117
+ * The edge strength.
118
+ *
119
+ * @type {number}
120
+ * @default 3
121
+ */
33
122
  this.edgeStrength = 3.0;
123
+
124
+ /**
125
+ * The downsample ratio. The effect can be rendered in a much
126
+ * lower resolution than the beauty pass.
127
+ *
128
+ * @type {number}
129
+ * @default 2
130
+ */
34
131
  this.downSampleRatio = 2;
132
+
133
+ /**
134
+ * The pulse period.
135
+ *
136
+ * @type {number}
137
+ * @default 0
138
+ */
35
139
  this.pulsePeriod = 0;
36
140
 
37
141
  this._visibilityCache = new Map();
38
142
  this._selectionCache = new Set();
39
143
 
144
+ /**
145
+ * The effect's resolution.
146
+ *
147
+ * @type {Vector2}
148
+ * @default (256,256)
149
+ */
40
150
  this.resolution = ( resolution !== undefined ) ? new Vector2( resolution.x, resolution.y ) : new Vector2( 256, 256 );
41
151
 
42
152
  const resx = Math.round( this.resolution.x / this.downSampleRatio );
@@ -51,7 +161,7 @@ class OutlinePass extends Pass {
51
161
  this.depthMaterial.depthPacking = RGBADepthPacking;
52
162
  this.depthMaterial.blending = NoBlending;
53
163
 
54
- this.prepareMaskMaterial = this.getPrepareMaskMaterial();
164
+ this.prepareMaskMaterial = this._getPrepareMaskMaterial();
55
165
  this.prepareMaskMaterial.side = DoubleSide;
56
166
  this.prepareMaskMaterial.fragmentShader = replaceDepthToViewZ( this.prepareMaskMaterial.fragmentShader, this.renderCamera );
57
167
 
@@ -70,7 +180,7 @@ class OutlinePass extends Pass {
70
180
  this.renderTargetBlurBuffer2.texture.name = 'OutlinePass.blur2';
71
181
  this.renderTargetBlurBuffer2.texture.generateMipmaps = false;
72
182
 
73
- this.edgeDetectionMaterial = this.getEdgeDetectionMaterial();
183
+ this.edgeDetectionMaterial = this._getEdgeDetectionMaterial();
74
184
  this.renderTargetEdgeBuffer1 = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );
75
185
  this.renderTargetEdgeBuffer1.texture.name = 'OutlinePass.edge1';
76
186
  this.renderTargetEdgeBuffer1.texture.generateMipmaps = false;
@@ -81,15 +191,15 @@ class OutlinePass extends Pass {
81
191
  const MAX_EDGE_THICKNESS = 4;
82
192
  const MAX_EDGE_GLOW = 4;
83
193
 
84
- this.separableBlurMaterial1 = this.getSeparableBlurMaterial( MAX_EDGE_THICKNESS );
194
+ this.separableBlurMaterial1 = this._getSeparableBlurMaterial( MAX_EDGE_THICKNESS );
85
195
  this.separableBlurMaterial1.uniforms[ 'texSize' ].value.set( resx, resy );
86
196
  this.separableBlurMaterial1.uniforms[ 'kernelRadius' ].value = 1;
87
- this.separableBlurMaterial2 = this.getSeparableBlurMaterial( MAX_EDGE_GLOW );
197
+ this.separableBlurMaterial2 = this._getSeparableBlurMaterial( MAX_EDGE_GLOW );
88
198
  this.separableBlurMaterial2.uniforms[ 'texSize' ].value.set( Math.round( resx / 2 ), Math.round( resy / 2 ) );
89
199
  this.separableBlurMaterial2.uniforms[ 'kernelRadius' ].value = MAX_EDGE_GLOW;
90
200
 
91
201
  // Overlay material
92
- this.overlayMaterial = this.getOverlayMaterial();
202
+ this.overlayMaterial = this._getOverlayMaterial();
93
203
 
94
204
  // copy material
95
205
 
@@ -112,7 +222,7 @@ class OutlinePass extends Pass {
112
222
  this._oldClearColor = new Color();
113
223
  this.oldClearAlpha = 1;
114
224
 
115
- this.fsQuad = new FullScreenQuad( null );
225
+ this._fsQuad = new FullScreenQuad( null );
116
226
 
117
227
  this.tempPulseColor1 = new Color();
118
228
  this.tempPulseColor2 = new Color();
@@ -128,6 +238,10 @@ class OutlinePass extends Pass {
128
238
 
129
239
  }
130
240
 
241
+ /**
242
+ * Frees the GPU-related resources allocated by this instance. Call this
243
+ * method whenever the pass is no longer used in your app.
244
+ */
131
245
  dispose() {
132
246
 
133
247
  this.renderTargetMaskBuffer.dispose();
@@ -146,10 +260,16 @@ class OutlinePass extends Pass {
146
260
  this.overlayMaterial.dispose();
147
261
  this.materialCopy.dispose();
148
262
 
149
- this.fsQuad.dispose();
263
+ this._fsQuad.dispose();
150
264
 
151
265
  }
152
266
 
267
+ /**
268
+ * Sets the size of the pass.
269
+ *
270
+ * @param {number} width - The width to set.
271
+ * @param {number} height - The width to set.
272
+ */
153
273
  setSize( width, height ) {
154
274
 
155
275
  this.renderTargetMaskBuffer.setSize( width, height );
@@ -172,108 +292,17 @@ class OutlinePass extends Pass {
172
292
 
173
293
  }
174
294
 
175
- updateSelectionCache() {
176
-
177
- const cache = this._selectionCache;
178
-
179
- function gatherSelectedMeshesCallBack( object ) {
180
-
181
- if ( object.isMesh ) cache.add( object );
182
-
183
- }
184
-
185
- cache.clear();
186
-
187
- for ( let i = 0; i < this.selectedObjects.length; i ++ ) {
188
-
189
- const selectedObject = this.selectedObjects[ i ];
190
- selectedObject.traverse( gatherSelectedMeshesCallBack );
191
-
192
- }
193
-
194
- }
195
-
196
- changeVisibilityOfSelectedObjects( bVisible ) {
197
-
198
- const cache = this._visibilityCache;
199
-
200
- for ( const mesh of this._selectionCache ) {
201
-
202
- if ( bVisible === true ) {
203
-
204
- mesh.visible = cache.get( mesh );
205
-
206
- } else {
207
-
208
- cache.set( mesh, mesh.visible );
209
- mesh.visible = bVisible;
210
-
211
- }
212
-
213
- }
214
-
215
- }
216
-
217
- changeVisibilityOfNonSelectedObjects( bVisible ) {
218
-
219
- const visibilityCache = this._visibilityCache;
220
- const selectionCache = this._selectionCache;
221
-
222
- function VisibilityChangeCallBack( object ) {
223
-
224
- if ( object.isMesh || object.isSprite ) {
225
-
226
- // only meshes and sprites are supported by OutlinePass
227
-
228
- if ( ! selectionCache.has( object ) ) {
229
-
230
- const visibility = object.visible;
231
-
232
- if ( bVisible === false || visibilityCache.get( object ) === true ) {
233
-
234
- object.visible = bVisible;
235
-
236
- }
237
-
238
- visibilityCache.set( object, visibility );
239
-
240
- }
241
-
242
- } else if ( object.isPoints || object.isLine ) {
243
-
244
- // the visibility of points and lines is always set to false in order to
245
- // not affect the outline computation
246
-
247
- if ( bVisible === true ) {
248
-
249
- object.visible = visibilityCache.get( object ); // restore
250
-
251
- } else {
252
-
253
- visibilityCache.set( object, object.visible );
254
- object.visible = bVisible;
255
-
256
- }
257
-
258
- }
259
-
260
- }
261
-
262
- this.renderScene.traverse( VisibilityChangeCallBack );
263
-
264
- }
265
-
266
- updateTextureMatrix() {
267
-
268
- this.textureMatrix.set( 0.5, 0.0, 0.0, 0.5,
269
- 0.0, 0.5, 0.0, 0.5,
270
- 0.0, 0.0, 0.5, 0.5,
271
- 0.0, 0.0, 0.0, 1.0 );
272
- this.textureMatrix.multiply( this.renderCamera.projectionMatrix );
273
- this.textureMatrix.multiply( this.renderCamera.matrixWorldInverse );
274
-
275
- }
276
-
295
+ /**
296
+ * Performs the Outline pass.
297
+ *
298
+ * @param {WebGLRenderer} renderer - The renderer.
299
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
300
+ * destination for the pass.
301
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
302
+ * previous pass from this buffer.
303
+ * @param {number} deltaTime - The delta time in seconds.
304
+ * @param {boolean} maskActive - Whether masking is active or not.
305
+ */
277
306
  render( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {
278
307
 
279
308
  if ( this.selectedObjects.length > 0 ) {
@@ -288,10 +317,10 @@ class OutlinePass extends Pass {
288
317
 
289
318
  renderer.setClearColor( 0xffffff, 1 );
290
319
 
291
- this.updateSelectionCache();
320
+ this._updateSelectionCache();
292
321
 
293
322
  // Make selected objects invisible
294
- this.changeVisibilityOfSelectedObjects( false );
323
+ this._changeVisibilityOfSelectedObjects( false );
295
324
 
296
325
  const currentBackground = this.renderScene.background;
297
326
  const currentOverrideMaterial = this.renderScene.overrideMaterial;
@@ -304,14 +333,14 @@ class OutlinePass extends Pass {
304
333
  renderer.render( this.renderScene, this.renderCamera );
305
334
 
306
335
  // Make selected objects visible
307
- this.changeVisibilityOfSelectedObjects( true );
336
+ this._changeVisibilityOfSelectedObjects( true );
308
337
  this._visibilityCache.clear();
309
338
 
310
339
  // Update Texture Matrix for Depth compare
311
- this.updateTextureMatrix();
340
+ this._updateTextureMatrix();
312
341
 
313
342
  // Make non selected objects invisible, and draw only the selected objects, by comparing the depth buffer of non selected objects
314
- this.changeVisibilityOfNonSelectedObjects( false );
343
+ this._changeVisibilityOfNonSelectedObjects( false );
315
344
  this.renderScene.overrideMaterial = this.prepareMaskMaterial;
316
345
  this.prepareMaskMaterial.uniforms[ 'cameraNearFar' ].value.set( this.renderCamera.near, this.renderCamera.far );
317
346
  this.prepareMaskMaterial.uniforms[ 'depthTexture' ].value = this.renderTargetDepthBuffer.texture;
@@ -319,7 +348,7 @@ class OutlinePass extends Pass {
319
348
  renderer.setRenderTarget( this.renderTargetMaskBuffer );
320
349
  renderer.clear();
321
350
  renderer.render( this.renderScene, this.renderCamera );
322
- this.changeVisibilityOfNonSelectedObjects( true );
351
+ this._changeVisibilityOfNonSelectedObjects( true );
323
352
  this._visibilityCache.clear();
324
353
  this._selectionCache.clear();
325
354
 
@@ -327,11 +356,11 @@ class OutlinePass extends Pass {
327
356
  this.renderScene.overrideMaterial = currentOverrideMaterial;
328
357
 
329
358
  // 2. Downsample to Half resolution
330
- this.fsQuad.material = this.materialCopy;
359
+ this._fsQuad.material = this.materialCopy;
331
360
  this.copyUniforms[ 'tDiffuse' ].value = this.renderTargetMaskBuffer.texture;
332
361
  renderer.setRenderTarget( this.renderTargetMaskDownSampleBuffer );
333
362
  renderer.clear();
334
- this.fsQuad.render( renderer );
363
+ this._fsQuad.render( renderer );
335
364
 
336
365
  this.tempPulseColor1.copy( this.visibleEdgeColor );
337
366
  this.tempPulseColor2.copy( this.hiddenEdgeColor );
@@ -345,44 +374,44 @@ class OutlinePass extends Pass {
345
374
  }
346
375
 
347
376
  // 3. Apply Edge Detection Pass
348
- this.fsQuad.material = this.edgeDetectionMaterial;
377
+ this._fsQuad.material = this.edgeDetectionMaterial;
349
378
  this.edgeDetectionMaterial.uniforms[ 'maskTexture' ].value = this.renderTargetMaskDownSampleBuffer.texture;
350
379
  this.edgeDetectionMaterial.uniforms[ 'texSize' ].value.set( this.renderTargetMaskDownSampleBuffer.width, this.renderTargetMaskDownSampleBuffer.height );
351
380
  this.edgeDetectionMaterial.uniforms[ 'visibleEdgeColor' ].value = this.tempPulseColor1;
352
381
  this.edgeDetectionMaterial.uniforms[ 'hiddenEdgeColor' ].value = this.tempPulseColor2;
353
382
  renderer.setRenderTarget( this.renderTargetEdgeBuffer1 );
354
383
  renderer.clear();
355
- this.fsQuad.render( renderer );
384
+ this._fsQuad.render( renderer );
356
385
 
357
386
  // 4. Apply Blur on Half res
358
- this.fsQuad.material = this.separableBlurMaterial1;
387
+ this._fsQuad.material = this.separableBlurMaterial1;
359
388
  this.separableBlurMaterial1.uniforms[ 'colorTexture' ].value = this.renderTargetEdgeBuffer1.texture;
360
389
  this.separableBlurMaterial1.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionX;
361
390
  this.separableBlurMaterial1.uniforms[ 'kernelRadius' ].value = this.edgeThickness;
362
391
  renderer.setRenderTarget( this.renderTargetBlurBuffer1 );
363
392
  renderer.clear();
364
- this.fsQuad.render( renderer );
393
+ this._fsQuad.render( renderer );
365
394
  this.separableBlurMaterial1.uniforms[ 'colorTexture' ].value = this.renderTargetBlurBuffer1.texture;
366
395
  this.separableBlurMaterial1.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionY;
367
396
  renderer.setRenderTarget( this.renderTargetEdgeBuffer1 );
368
397
  renderer.clear();
369
- this.fsQuad.render( renderer );
398
+ this._fsQuad.render( renderer );
370
399
 
371
400
  // Apply Blur on quarter res
372
- this.fsQuad.material = this.separableBlurMaterial2;
401
+ this._fsQuad.material = this.separableBlurMaterial2;
373
402
  this.separableBlurMaterial2.uniforms[ 'colorTexture' ].value = this.renderTargetEdgeBuffer1.texture;
374
403
  this.separableBlurMaterial2.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionX;
375
404
  renderer.setRenderTarget( this.renderTargetBlurBuffer2 );
376
405
  renderer.clear();
377
- this.fsQuad.render( renderer );
406
+ this._fsQuad.render( renderer );
378
407
  this.separableBlurMaterial2.uniforms[ 'colorTexture' ].value = this.renderTargetBlurBuffer2.texture;
379
408
  this.separableBlurMaterial2.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionY;
380
409
  renderer.setRenderTarget( this.renderTargetEdgeBuffer2 );
381
410
  renderer.clear();
382
- this.fsQuad.render( renderer );
411
+ this._fsQuad.render( renderer );
383
412
 
384
413
  // Blend it additively over the input texture
385
- this.fsQuad.material = this.overlayMaterial;
414
+ this._fsQuad.material = this.overlayMaterial;
386
415
  this.overlayMaterial.uniforms[ 'maskTexture' ].value = this.renderTargetMaskBuffer.texture;
387
416
  this.overlayMaterial.uniforms[ 'edgeTexture1' ].value = this.renderTargetEdgeBuffer1.texture;
388
417
  this.overlayMaterial.uniforms[ 'edgeTexture2' ].value = this.renderTargetEdgeBuffer2.texture;
@@ -395,7 +424,7 @@ class OutlinePass extends Pass {
395
424
  if ( maskActive ) renderer.state.buffers.stencil.setTest( true );
396
425
 
397
426
  renderer.setRenderTarget( readBuffer );
398
- this.fsQuad.render( renderer );
427
+ this._fsQuad.render( renderer );
399
428
 
400
429
  renderer.setClearColor( this._oldClearColor, this.oldClearAlpha );
401
430
  renderer.autoClear = oldAutoClear;
@@ -404,16 +433,120 @@ class OutlinePass extends Pass {
404
433
 
405
434
  if ( this.renderToScreen ) {
406
435
 
407
- this.fsQuad.material = this.materialCopy;
436
+ this._fsQuad.material = this.materialCopy;
408
437
  this.copyUniforms[ 'tDiffuse' ].value = readBuffer.texture;
409
438
  renderer.setRenderTarget( null );
410
- this.fsQuad.render( renderer );
439
+ this._fsQuad.render( renderer );
440
+
441
+ }
442
+
443
+ }
444
+
445
+ // internals
446
+
447
+ _updateSelectionCache() {
448
+
449
+ const cache = this._selectionCache;
450
+
451
+ function gatherSelectedMeshesCallBack( object ) {
452
+
453
+ if ( object.isMesh ) cache.add( object );
454
+
455
+ }
456
+
457
+ cache.clear();
458
+
459
+ for ( let i = 0; i < this.selectedObjects.length; i ++ ) {
460
+
461
+ const selectedObject = this.selectedObjects[ i ];
462
+ selectedObject.traverse( gatherSelectedMeshesCallBack );
463
+
464
+ }
465
+
466
+ }
467
+
468
+ _changeVisibilityOfSelectedObjects( bVisible ) {
469
+
470
+ const cache = this._visibilityCache;
471
+
472
+ for ( const mesh of this._selectionCache ) {
473
+
474
+ if ( bVisible === true ) {
475
+
476
+ mesh.visible = cache.get( mesh );
477
+
478
+ } else {
479
+
480
+ cache.set( mesh, mesh.visible );
481
+ mesh.visible = bVisible;
482
+
483
+ }
411
484
 
412
485
  }
413
486
 
414
487
  }
415
488
 
416
- getPrepareMaskMaterial() {
489
+ _changeVisibilityOfNonSelectedObjects( bVisible ) {
490
+
491
+ const visibilityCache = this._visibilityCache;
492
+ const selectionCache = this._selectionCache;
493
+
494
+ function VisibilityChangeCallBack( object ) {
495
+
496
+ if ( object.isMesh || object.isSprite ) {
497
+
498
+ // only meshes and sprites are supported by OutlinePass
499
+
500
+ if ( ! selectionCache.has( object ) ) {
501
+
502
+ const visibility = object.visible;
503
+
504
+ if ( bVisible === false || visibilityCache.get( object ) === true ) {
505
+
506
+ object.visible = bVisible;
507
+
508
+ }
509
+
510
+ visibilityCache.set( object, visibility );
511
+
512
+ }
513
+
514
+ } else if ( object.isPoints || object.isLine ) {
515
+
516
+ // the visibility of points and lines is always set to false in order to
517
+ // not affect the outline computation
518
+
519
+ if ( bVisible === true ) {
520
+
521
+ object.visible = visibilityCache.get( object ); // restore
522
+
523
+ } else {
524
+
525
+ visibilityCache.set( object, object.visible );
526
+ object.visible = bVisible;
527
+
528
+ }
529
+
530
+ }
531
+
532
+ }
533
+
534
+ this.renderScene.traverse( VisibilityChangeCallBack );
535
+
536
+ }
537
+
538
+ _updateTextureMatrix() {
539
+
540
+ this.textureMatrix.set( 0.5, 0.0, 0.0, 0.5,
541
+ 0.0, 0.5, 0.0, 0.5,
542
+ 0.0, 0.0, 0.5, 0.5,
543
+ 0.0, 0.0, 0.0, 1.0 );
544
+ this.textureMatrix.multiply( this.renderCamera.projectionMatrix );
545
+ this.textureMatrix.multiply( this.renderCamera.matrixWorldInverse );
546
+
547
+ }
548
+
549
+ _getPrepareMaskMaterial() {
417
550
 
418
551
  return new ShaderMaterial( {
419
552
 
@@ -475,7 +608,7 @@ class OutlinePass extends Pass {
475
608
 
476
609
  }
477
610
 
478
- getEdgeDetectionMaterial() {
611
+ _getEdgeDetectionMaterial() {
479
612
 
480
613
  return new ShaderMaterial( {
481
614
 
@@ -522,7 +655,7 @@ class OutlinePass extends Pass {
522
655
 
523
656
  }
524
657
 
525
- getSeparableBlurMaterial( maxRadius ) {
658
+ _getSeparableBlurMaterial( maxRadius ) {
526
659
 
527
660
  return new ShaderMaterial( {
528
661
 
@@ -579,7 +712,7 @@ class OutlinePass extends Pass {
579
712
 
580
713
  }
581
714
 
582
- getOverlayMaterial() {
715
+ _getOverlayMaterial() {
583
716
 
584
717
  return new ShaderMaterial( {
585
718
 
@@ -14,34 +14,69 @@ import {
14
14
  import { Pass, FullScreenQuad } from './Pass.js';
15
15
  import { OutputShader } from '../shaders/OutputShader.js';
16
16
 
17
+ /**
18
+ * This pass is responsible for including tone mapping and color space conversion
19
+ * into your pass chain. In most cases, this pass should be included at the end
20
+ * of each pass chain. If a pass requires sRGB input (e.g. like FXAA), the pass
21
+ * must follow `OutputPass` in the pass chain.
22
+ *
23
+ * The tone mapping and color space settings are extracted from the renderer.
24
+ *
25
+ * ```js
26
+ * const outputPass = new OutputPass();
27
+ * composer.addPass( outputPass );
28
+ * ```
29
+ *
30
+ * @augments Pass
31
+ */
17
32
  class OutputPass extends Pass {
18
33
 
34
+ /**
35
+ * Constructs a new output pass.
36
+ */
19
37
  constructor() {
20
38
 
21
39
  super();
22
40
 
23
- //
24
-
25
- const shader = OutputShader;
26
-
27
- this.uniforms = UniformsUtils.clone( shader.uniforms );
28
-
41
+ /**
42
+ * The pass uniforms.
43
+ *
44
+ * @type {Object}
45
+ */
46
+ this.uniforms = UniformsUtils.clone( OutputShader.uniforms );
47
+
48
+ /**
49
+ * The pass material.
50
+ *
51
+ * @type {RawShaderMaterial}
52
+ */
29
53
  this.material = new RawShaderMaterial( {
30
- name: shader.name,
54
+ name: OutputShader.name,
31
55
  uniforms: this.uniforms,
32
- vertexShader: shader.vertexShader,
33
- fragmentShader: shader.fragmentShader
56
+ vertexShader: OutputShader.vertexShader,
57
+ fragmentShader: OutputShader.fragmentShader
34
58
  } );
35
59
 
36
- this.fsQuad = new FullScreenQuad( this.material );
60
+ // internals
37
61
 
38
- // internal cache
62
+ this._fsQuad = new FullScreenQuad( this.material );
39
63
 
40
64
  this._outputColorSpace = null;
41
65
  this._toneMapping = null;
42
66
 
43
67
  }
44
68
 
69
+ /**
70
+ * Performs the output pass.
71
+ *
72
+ * @param {WebGLRenderer} renderer - The renderer.
73
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
74
+ * destination for the pass.
75
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
76
+ * previous pass from this buffer.
77
+ * @param {number} deltaTime - The delta time in seconds.
78
+ * @param {boolean} maskActive - Whether masking is active or not.
79
+ */
45
80
  render( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive */ ) {
46
81
 
47
82
  this.uniforms[ 'tDiffuse' ].value = readBuffer.texture;
@@ -75,22 +110,26 @@ class OutputPass extends Pass {
75
110
  if ( this.renderToScreen === true ) {
76
111
 
77
112
  renderer.setRenderTarget( null );
78
- this.fsQuad.render( renderer );
113
+ this._fsQuad.render( renderer );
79
114
 
80
115
  } else {
81
116
 
82
117
  renderer.setRenderTarget( writeBuffer );
83
118
  if ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );
84
- this.fsQuad.render( renderer );
119
+ this._fsQuad.render( renderer );
85
120
 
86
121
  }
87
122
 
88
123
  }
89
124
 
125
+ /**
126
+ * Frees the GPU-related resources allocated by this instance. Call this
127
+ * method whenever the pass is no longer used in your app.
128
+ */
90
129
  dispose() {
91
130
 
92
131
  this.material.dispose();
93
- this.fsQuad.dispose();
132
+ this._fsQuad.dispose();
94
133
 
95
134
  }
96
135