@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
@@ -14,28 +14,86 @@ import { CopyShader } from '../shaders/CopyShader.js';
14
14
  import { LuminosityHighPassShader } from '../shaders/LuminosityHighPassShader.js';
15
15
 
16
16
  /**
17
- * UnrealBloomPass is inspired by the bloom pass of Unreal Engine. It creates a
17
+ * This pass is inspired by the bloom pass of Unreal Engine. It creates a
18
18
  * mip map chain of bloom textures and blurs them with different radii. Because
19
19
  * of the weighted combination of mips, and because larger blurs are done on
20
20
  * higher mips, this effect provides good quality and performance.
21
21
  *
22
+ * When using this pass, tone mapping must be enabled in the renderer settings.
23
+ *
22
24
  * Reference:
23
- * - https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/Bloom/
25
+ * - [Bloom in Unreal Engine]{@link https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/Bloom/}
26
+ *
27
+ * ```js
28
+ * const resolution = new THREE.Vector2( window.innerWidth, window.innerHeight );
29
+ * const bloomPass = new UnrealBloomPass( resolution, 1.5, 0.4, 0.85 );
30
+ * composer.addPass( bloomPass );
31
+ * ```
32
+ *
33
+ * @augments Pass
24
34
  */
25
35
  class UnrealBloomPass extends Pass {
26
36
 
27
- constructor( resolution, strength, radius, threshold ) {
37
+ /**
38
+ * Constructs a new Unreal Bloom pass.
39
+ *
40
+ * @param {Vector2} [resolution] - The effect's resolution.
41
+ * @param {number} [strength=1] - The Bloom strength.
42
+ * @param {number} radius - The Bloom radius.
43
+ * @param {number} threshold - The luminance threshold limits which bright areas contribute to the Bloom effect.
44
+ */
45
+ constructor( resolution, strength = 1, radius, threshold ) {
28
46
 
29
47
  super();
30
48
 
31
- this.strength = ( strength !== undefined ) ? strength : 1;
49
+ /**
50
+ * The Bloom strength.
51
+ *
52
+ * @type {number}
53
+ * @default 1
54
+ */
55
+ this.strength = strength;
56
+
57
+ /**
58
+ * The Bloom radius.
59
+ *
60
+ * @type {number}
61
+ */
32
62
  this.radius = radius;
63
+
64
+ /**
65
+ * The luminance threshold limits which bright areas contribute to the Bloom effect.
66
+ *
67
+ * @type {number}
68
+ */
33
69
  this.threshold = threshold;
70
+
71
+ /**
72
+ * The effect's resolution.
73
+ *
74
+ * @type {Vector2}
75
+ * @default (256,256)
76
+ */
34
77
  this.resolution = ( resolution !== undefined ) ? new Vector2( resolution.x, resolution.y ) : new Vector2( 256, 256 );
35
78
 
36
- // create color only once here, reuse it later inside the render function
79
+ /**
80
+ * The effect's clear color
81
+ *
82
+ * @type {Color}
83
+ * @default (0,0,0)
84
+ */
37
85
  this.clearColor = new Color( 0, 0, 0 );
38
86
 
87
+ /**
88
+ * Overwritten to disable the swap.
89
+ *
90
+ * @type {boolean}
91
+ * @default false
92
+ */
93
+ this.needsSwap = false;
94
+
95
+ // internals
96
+
39
97
  // render targets
40
98
  this.renderTargetsHorizontal = [];
41
99
  this.renderTargetsVertical = [];
@@ -92,7 +150,7 @@ class UnrealBloomPass extends Pass {
92
150
 
93
151
  for ( let i = 0; i < this.nMips; i ++ ) {
94
152
 
95
- this.separableBlurMaterials.push( this.getSeparableBlurMaterial( kernelSizeArray[ i ] ) );
153
+ this.separableBlurMaterials.push( this._getSeparableBlurMaterial( kernelSizeArray[ i ] ) );
96
154
 
97
155
  this.separableBlurMaterials[ i ].uniforms[ 'invSize' ].value = new Vector2( 1 / resx, 1 / resy );
98
156
 
@@ -104,7 +162,7 @@ class UnrealBloomPass extends Pass {
104
162
 
105
163
  // composite material
106
164
 
107
- this.compositeMaterial = this.getCompositeMaterial( this.nMips );
165
+ this.compositeMaterial = this._getCompositeMaterial( this.nMips );
108
166
  this.compositeMaterial.uniforms[ 'blurTexture1' ].value = this.renderTargetsVertical[ 0 ].texture;
109
167
  this.compositeMaterial.uniforms[ 'blurTexture2' ].value = this.renderTargetsVertical[ 1 ].texture;
110
168
  this.compositeMaterial.uniforms[ 'blurTexture3' ].value = this.renderTargetsVertical[ 2 ].texture;
@@ -120,32 +178,31 @@ class UnrealBloomPass extends Pass {
120
178
 
121
179
  // blend material
122
180
 
123
- const copyShader = CopyShader;
124
-
125
- this.copyUniforms = UniformsUtils.clone( copyShader.uniforms );
181
+ this.copyUniforms = UniformsUtils.clone( CopyShader.uniforms );
126
182
 
127
183
  this.blendMaterial = new ShaderMaterial( {
128
184
  uniforms: this.copyUniforms,
129
- vertexShader: copyShader.vertexShader,
130
- fragmentShader: copyShader.fragmentShader,
185
+ vertexShader: CopyShader.vertexShader,
186
+ fragmentShader: CopyShader.fragmentShader,
131
187
  blending: AdditiveBlending,
132
188
  depthTest: false,
133
189
  depthWrite: false,
134
190
  transparent: true
135
191
  } );
136
192
 
137
- this.enabled = true;
138
- this.needsSwap = false;
139
-
140
193
  this._oldClearColor = new Color();
141
- this.oldClearAlpha = 1;
194
+ this._oldClearAlpha = 1;
142
195
 
143
- this.basic = new MeshBasicMaterial();
196
+ this._basic = new MeshBasicMaterial();
144
197
 
145
- this.fsQuad = new FullScreenQuad( null );
198
+ this._fsQuad = new FullScreenQuad( null );
146
199
 
147
200
  }
148
201
 
202
+ /**
203
+ * Frees the GPU-related resources allocated by this instance. Call this
204
+ * method whenever the pass is no longer used in your app.
205
+ */
149
206
  dispose() {
150
207
 
151
208
  for ( let i = 0; i < this.renderTargetsHorizontal.length; i ++ ) {
@@ -172,14 +229,20 @@ class UnrealBloomPass extends Pass {
172
229
 
173
230
  this.compositeMaterial.dispose();
174
231
  this.blendMaterial.dispose();
175
- this.basic.dispose();
232
+ this._basic.dispose();
176
233
 
177
234
  //
178
235
 
179
- this.fsQuad.dispose();
236
+ this._fsQuad.dispose();
180
237
 
181
238
  }
182
239
 
240
+ /**
241
+ * Sets the size of the pass.
242
+ *
243
+ * @param {number} width - The width to set.
244
+ * @param {number} height - The width to set.
245
+ */
183
246
  setSize( width, height ) {
184
247
 
185
248
  let resx = Math.round( width / 2 );
@@ -201,10 +264,21 @@ class UnrealBloomPass extends Pass {
201
264
 
202
265
  }
203
266
 
267
+ /**
268
+ * Performs the Bloom pass.
269
+ *
270
+ * @param {WebGLRenderer} renderer - The renderer.
271
+ * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
272
+ * destination for the pass.
273
+ * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
274
+ * previous pass from this buffer.
275
+ * @param {number} deltaTime - The delta time in seconds.
276
+ * @param {boolean} maskActive - Whether masking is active or not.
277
+ */
204
278
  render( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {
205
279
 
206
280
  renderer.getClearColor( this._oldClearColor );
207
- this.oldClearAlpha = renderer.getClearAlpha();
281
+ this._oldClearAlpha = renderer.getClearAlpha();
208
282
  const oldAutoClear = renderer.autoClear;
209
283
  renderer.autoClear = false;
210
284
 
@@ -216,12 +290,12 @@ class UnrealBloomPass extends Pass {
216
290
 
217
291
  if ( this.renderToScreen ) {
218
292
 
219
- this.fsQuad.material = this.basic;
220
- this.basic.map = readBuffer.texture;
293
+ this._fsQuad.material = this._basic;
294
+ this._basic.map = readBuffer.texture;
221
295
 
222
296
  renderer.setRenderTarget( null );
223
297
  renderer.clear();
224
- this.fsQuad.render( renderer );
298
+ this._fsQuad.render( renderer );
225
299
 
226
300
  }
227
301
 
@@ -229,11 +303,11 @@ class UnrealBloomPass extends Pass {
229
303
 
230
304
  this.highPassUniforms[ 'tDiffuse' ].value = readBuffer.texture;
231
305
  this.highPassUniforms[ 'luminosityThreshold' ].value = this.threshold;
232
- this.fsQuad.material = this.materialHighPassFilter;
306
+ this._fsQuad.material = this.materialHighPassFilter;
233
307
 
234
308
  renderer.setRenderTarget( this.renderTargetBright );
235
309
  renderer.clear();
236
- this.fsQuad.render( renderer );
310
+ this._fsQuad.render( renderer );
237
311
 
238
312
  // 2. Blur All the mips progressively
239
313
 
@@ -241,19 +315,19 @@ class UnrealBloomPass extends Pass {
241
315
 
242
316
  for ( let i = 0; i < this.nMips; i ++ ) {
243
317
 
244
- this.fsQuad.material = this.separableBlurMaterials[ i ];
318
+ this._fsQuad.material = this.separableBlurMaterials[ i ];
245
319
 
246
320
  this.separableBlurMaterials[ i ].uniforms[ 'colorTexture' ].value = inputRenderTarget.texture;
247
321
  this.separableBlurMaterials[ i ].uniforms[ 'direction' ].value = UnrealBloomPass.BlurDirectionX;
248
322
  renderer.setRenderTarget( this.renderTargetsHorizontal[ i ] );
249
323
  renderer.clear();
250
- this.fsQuad.render( renderer );
324
+ this._fsQuad.render( renderer );
251
325
 
252
326
  this.separableBlurMaterials[ i ].uniforms[ 'colorTexture' ].value = this.renderTargetsHorizontal[ i ].texture;
253
327
  this.separableBlurMaterials[ i ].uniforms[ 'direction' ].value = UnrealBloomPass.BlurDirectionY;
254
328
  renderer.setRenderTarget( this.renderTargetsVertical[ i ] );
255
329
  renderer.clear();
256
- this.fsQuad.render( renderer );
330
+ this._fsQuad.render( renderer );
257
331
 
258
332
  inputRenderTarget = this.renderTargetsVertical[ i ];
259
333
 
@@ -261,18 +335,18 @@ class UnrealBloomPass extends Pass {
261
335
 
262
336
  // Composite All the mips
263
337
 
264
- this.fsQuad.material = this.compositeMaterial;
338
+ this._fsQuad.material = this.compositeMaterial;
265
339
  this.compositeMaterial.uniforms[ 'bloomStrength' ].value = this.strength;
266
340
  this.compositeMaterial.uniforms[ 'bloomRadius' ].value = this.radius;
267
341
  this.compositeMaterial.uniforms[ 'bloomTintColors' ].value = this.bloomTintColors;
268
342
 
269
343
  renderer.setRenderTarget( this.renderTargetsHorizontal[ 0 ] );
270
344
  renderer.clear();
271
- this.fsQuad.render( renderer );
345
+ this._fsQuad.render( renderer );
272
346
 
273
347
  // Blend it additively over the input texture
274
348
 
275
- this.fsQuad.material = this.blendMaterial;
349
+ this._fsQuad.material = this.blendMaterial;
276
350
  this.copyUniforms[ 'tDiffuse' ].value = this.renderTargetsHorizontal[ 0 ].texture;
277
351
 
278
352
  if ( maskActive ) renderer.state.buffers.stencil.setTest( true );
@@ -280,23 +354,25 @@ class UnrealBloomPass extends Pass {
280
354
  if ( this.renderToScreen ) {
281
355
 
282
356
  renderer.setRenderTarget( null );
283
- this.fsQuad.render( renderer );
357
+ this._fsQuad.render( renderer );
284
358
 
285
359
  } else {
286
360
 
287
361
  renderer.setRenderTarget( readBuffer );
288
- this.fsQuad.render( renderer );
362
+ this._fsQuad.render( renderer );
289
363
 
290
364
  }
291
365
 
292
366
  // Restore renderer settings
293
367
 
294
- renderer.setClearColor( this._oldClearColor, this.oldClearAlpha );
368
+ renderer.setClearColor( this._oldClearColor, this._oldClearAlpha );
295
369
  renderer.autoClear = oldAutoClear;
296
370
 
297
371
  }
298
372
 
299
- getSeparableBlurMaterial( kernelRadius ) {
373
+ // internals
374
+
375
+ _getSeparableBlurMaterial( kernelRadius ) {
300
376
 
301
377
  const coefficients = [];
302
378
 
@@ -352,7 +428,7 @@ class UnrealBloomPass extends Pass {
352
428
 
353
429
  }
354
430
 
355
- getCompositeMaterial( nMips ) {
431
+ _getCompositeMaterial( nMips ) {
356
432
 
357
433
  return new ShaderMaterial( {
358
434
 
@@ -5,14 +5,38 @@ import {
5
5
  Vector3
6
6
  } from 'three';
7
7
 
8
+ /**
9
+ * The only type of 3D object that is supported by {@link CSS2DRenderer}.
10
+ *
11
+ * @augments Object3D
12
+ */
8
13
  class CSS2DObject extends Object3D {
9
14
 
15
+ /**
16
+ * Constructs a new CSS2D object.
17
+ *
18
+ * @param {DOMElement} [element] - The DOM element.
19
+ */
10
20
  constructor( element = document.createElement( 'div' ) ) {
11
21
 
12
22
  super();
13
23
 
24
+ /**
25
+ * This flag can be used for type testing.
26
+ *
27
+ * @type {boolean}
28
+ * @readonly
29
+ * @default true
30
+ */
14
31
  this.isCSS2DObject = true;
15
32
 
33
+ /**
34
+ * The DOM element which defines the appearance of this 3D object.
35
+ *
36
+ * @type {DOMElement}
37
+ * @readonly
38
+ * @default true
39
+ */
16
40
  this.element = element;
17
41
 
18
42
  this.element.style.position = 'absolute';
@@ -20,7 +44,14 @@ class CSS2DObject extends Object3D {
20
44
 
21
45
  this.element.setAttribute( 'draggable', false );
22
46
 
23
- this.center = new Vector2( 0.5, 0.5 ); // ( 0, 0 ) is the lower left; ( 1, 1 ) is the top right
47
+ /**
48
+ * The 3D objects center point.
49
+ * `( 0, 0 )` is the lower left, `( 1, 1 )` is the top right.
50
+ *
51
+ * @type {Vector2}
52
+ * @default (0.5,0.5)
53
+ */
54
+ this.center = new Vector2( 0.5, 0.5 );
24
55
 
25
56
  this.addEventListener( 'removed', function () {
26
57
 
@@ -63,8 +94,23 @@ const _viewProjectionMatrix = new Matrix4();
63
94
  const _a = new Vector3();
64
95
  const _b = new Vector3();
65
96
 
97
+ /**
98
+ * This renderer is a simplified version of {@link CSS3DRenderer}. The only transformation that is
99
+ * supported is translation.
100
+ *
101
+ * The renderer is very useful if you want to combine HTML based labels with 3D objects. Here too,
102
+ * the respective DOM elements are wrapped into an instance of {@link CSS2DObject} and added to the
103
+ * scene graph. All other types of renderable 3D objects (like meshes or point clouds) are ignored.
104
+ *
105
+ * `CSS2DRenderer` only supports 100% browser and display zoom.
106
+ */
66
107
  class CSS2DRenderer {
67
108
 
109
+ /**
110
+ * Constructs a new CSS2D renderer.
111
+ *
112
+ * @param {CSS2DRenderer~Parameters} [parameters] - The parameters.
113
+ */
68
114
  constructor( parameters = {} ) {
69
115
 
70
116
  const _this = this;
@@ -80,8 +126,18 @@ class CSS2DRenderer {
80
126
 
81
127
  domElement.style.overflow = 'hidden';
82
128
 
129
+ /**
130
+ * The DOM where the renderer appends its child-elements.
131
+ *
132
+ * @type {DOMElement}
133
+ */
83
134
  this.domElement = domElement;
84
135
 
136
+ /**
137
+ * Returns an object containing the width and height of the renderer.
138
+ *
139
+ * @return {{width:number,height:number}} The size of the renderer.
140
+ */
85
141
  this.getSize = function () {
86
142
 
87
143
  return {
@@ -91,6 +147,12 @@ class CSS2DRenderer {
91
147
 
92
148
  };
93
149
 
150
+ /**
151
+ * Renders the given scene using the given camera.
152
+ *
153
+ * @param {Object3D} scene - A scene or any other type of 3D object.
154
+ * @param {Camera} camera - The camera.
155
+ */
94
156
  this.render = function ( scene, camera ) {
95
157
 
96
158
  if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
@@ -104,6 +166,12 @@ class CSS2DRenderer {
104
166
 
105
167
  };
106
168
 
169
+ /**
170
+ * Resizes the renderer to the given width and height.
171
+ *
172
+ * @param {number} width - The width of the renderer.
173
+ * @param {number} height - The height of the renderer.
174
+ */
107
175
  this.setSize = function ( width, height ) {
108
176
 
109
177
  _width = width;
@@ -235,4 +303,12 @@ class CSS2DRenderer {
235
303
 
236
304
  }
237
305
 
306
+ /**
307
+ * Constructor parameters of `CSS2DRenderer`.
308
+ *
309
+ * @typedef {Object} CSS2DRenderer~Parameters
310
+ * @property {DOMElement} [element] - A DOM element where the renderer appends its child-elements.
311
+ * If not passed in here, a new div element will be created.
312
+ **/
313
+
238
314
  export { CSS2DObject, CSS2DRenderer };
@@ -5,22 +5,44 @@ import {
5
5
  Vector3
6
6
  } from 'three';
7
7
 
8
- /**
9
- * Based on http://www.emagix.net/academic/mscs-project/item/camera-sync-with-css3-and-webgl-threejs
10
- */
8
+ // Based on http://www.emagix.net/academic/mscs-project/item/camera-sync-with-css3-and-webgl-threejs
11
9
 
12
10
  const _position = new Vector3();
13
11
  const _quaternion = new Quaternion();
14
12
  const _scale = new Vector3();
15
13
 
14
+ /**
15
+ * The base 3D object that is supported by {@link CSS3DRenderer}.
16
+ *
17
+ * @augments Object3D
18
+ */
16
19
  class CSS3DObject extends Object3D {
17
20
 
21
+ /**
22
+ * Constructs a new CSS3D object.
23
+ *
24
+ * @param {DOMElement} [element] - The DOM element.
25
+ */
18
26
  constructor( element = document.createElement( 'div' ) ) {
19
27
 
20
28
  super();
21
29
 
30
+ /**
31
+ * This flag can be used for type testing.
32
+ *
33
+ * @type {boolean}
34
+ * @readonly
35
+ * @default true
36
+ */
22
37
  this.isCSS3DObject = true;
23
38
 
39
+ /**
40
+ * The DOM element which defines the appearance of this 3D object.
41
+ *
42
+ * @type {DOMElement}
43
+ * @readonly
44
+ * @default true
45
+ */
24
46
  this.element = element;
25
47
  this.element.style.position = 'absolute';
26
48
  this.element.style.pointerEvents = 'auto';
@@ -59,14 +81,38 @@ class CSS3DObject extends Object3D {
59
81
 
60
82
  }
61
83
 
84
+ /**
85
+ * A specialized version of {@link CSS3DObject} that represents
86
+ * DOM elements as sprites.
87
+ *
88
+ * @augments CSS3DObject
89
+ */
62
90
  class CSS3DSprite extends CSS3DObject {
63
91
 
92
+ /**
93
+ * Constructs a new CSS3D sprite object.
94
+ *
95
+ * @param {DOMElement} [element] - The DOM element.
96
+ */
64
97
  constructor( element ) {
65
98
 
66
99
  super( element );
67
100
 
101
+ /**
102
+ * This flag can be used for type testing.
103
+ *
104
+ * @type {boolean}
105
+ * @readonly
106
+ * @default true
107
+ */
68
108
  this.isCSS3DSprite = true;
69
109
 
110
+ /**
111
+ * The sprite's rotation in radians.
112
+ *
113
+ * @type {number}
114
+ * @default 0
115
+ */
70
116
  this.rotation2D = 0;
71
117
 
72
118
  }
@@ -88,8 +134,28 @@ class CSS3DSprite extends CSS3DObject {
88
134
  const _matrix = new Matrix4();
89
135
  const _matrix2 = new Matrix4();
90
136
 
137
+ /**
138
+ * This renderer can be used to apply hierarchical 3D transformations to DOM elements
139
+ * via the CSS3 [transform]{@link https://www.w3schools.com/cssref/css3_pr_transform.asp} property.
140
+ * `CSS3DRenderer` is particularly interesting if you want to apply 3D effects to a website without
141
+ * canvas based rendering. It can also be used in order to combine DOM elements with WebGLcontent.
142
+ *
143
+ * There are, however, some important limitations:
144
+ *
145
+ * - It's not possible to use the material system of *three.js*.
146
+ * - It's also not possible to use geometries.
147
+ * - The renderer only supports 100% browser and display zoom.
148
+ *
149
+ * So `CSS3DRenderer` is just focused on ordinary DOM elements. These elements are wrapped into special
150
+ * 3D objects ({@link CSS3DObject} or {@link CSS3DSprite}) and then added to the scene graph.
151
+ */
91
152
  class CSS3DRenderer {
92
153
 
154
+ /**
155
+ * Constructs a new CSS3D renderer.
156
+ *
157
+ * @param {CSS3DRenderer~Parameters} [parameters] - The parameters.
158
+ */
93
159
  constructor( parameters = {} ) {
94
160
 
95
161
  const _this = this;
@@ -106,6 +172,11 @@ class CSS3DRenderer {
106
172
 
107
173
  domElement.style.overflow = 'hidden';
108
174
 
175
+ /**
176
+ * The DOM where the renderer appends its child-elements.
177
+ *
178
+ * @type {DOMElement}
179
+ */
109
180
  this.domElement = domElement;
110
181
 
111
182
  const viewElement = document.createElement( 'div' );
@@ -119,6 +190,11 @@ class CSS3DRenderer {
119
190
 
120
191
  viewElement.appendChild( cameraElement );
121
192
 
193
+ /**
194
+ * Returns an object containing the width and height of the renderer.
195
+ *
196
+ * @return {{width:number,height:number}} The size of the renderer.
197
+ */
122
198
  this.getSize = function () {
123
199
 
124
200
  return {
@@ -128,6 +204,12 @@ class CSS3DRenderer {
128
204
 
129
205
  };
130
206
 
207
+ /**
208
+ * Renders the given scene using the given camera.
209
+ *
210
+ * @param {Object3D} scene - A scene or any other type of 3D object.
211
+ * @param {Camera} camera - The camera.
212
+ */
131
213
  this.render = function ( scene, camera ) {
132
214
 
133
215
  const fov = camera.projectionMatrix.elements[ 5 ] * _heightHalf;
@@ -179,6 +261,12 @@ class CSS3DRenderer {
179
261
 
180
262
  };
181
263
 
264
+ /**
265
+ * Resizes the renderer to the given width and height.
266
+ *
267
+ * @param {number} width - The width of the renderer.
268
+ * @param {number} height - The height of the renderer.
269
+ */
182
270
  this.setSize = function ( width, height ) {
183
271
 
184
272
  _width = width;
@@ -350,4 +438,12 @@ class CSS3DRenderer {
350
438
 
351
439
  }
352
440
 
441
+ /**
442
+ * Constructor parameters of `CSS3DRenderer`.
443
+ *
444
+ * @typedef {Object} CSS3DRenderer~Parameters
445
+ * @property {DOMElement} [element] - A DOM element where the renderer appends its child-elements.
446
+ * If not passed in here, a new div element will be created.
447
+ **/
448
+
353
449
  export { CSS3DObject, CSS3DSprite, CSS3DRenderer };
@@ -120,10 +120,16 @@ class RenderableSprite {
120
120
 
121
121
  }
122
122
 
123
- //
124
-
123
+ /**
124
+ * This class can project a given scene in 3D space into a 2D representation
125
+ * used for rendering with a 2D API. `Projector` is currently used by {@link SVGRenderer}
126
+ * and was previously used by the legacy `CanvasRenderer`.
127
+ */
125
128
  class Projector {
126
129
 
130
+ /**
131
+ * Constructs a new projector.
132
+ */
127
133
  constructor() {
128
134
 
129
135
  let _object, _objectCount, _objectPoolLength = 0,
@@ -403,6 +409,16 @@ class Projector {
403
409
 
404
410
  }
405
411
 
412
+ /**
413
+ * Projects the given scene in 3D space into a 2D representation. The result
414
+ * is an object with renderable items.
415
+ *
416
+ * @param {Object3D} scene - A scene or any other type of 3D object.
417
+ * @param {Camera} camera - The camera.
418
+ * @param {boolean} sortObjects - Whether to sort objects or not.
419
+ * @param {boolean} sortElements - Whether to sort elements (faces, lines and sprites) or not.
420
+ * @return {{objects:Array<Objects>,lights:Array<Objects>,elements:Array<Objects>}} The projected scene as renderable objects.
421
+ */
406
422
  this.projectScene = function ( scene, camera, sortObjects, sortElements ) {
407
423
 
408
424
  _faceCount = 0;