@needle-tools/three 0.145.4 → 0.146.2

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 (393) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +32586 -35951
  3. package/build/three.js +32600 -35965
  4. package/build/three.min.js +6 -7
  5. package/build/three.module.js +1547 -1154
  6. package/examples/js/animation/AnimationClipCreator.js +0 -8
  7. package/examples/js/animation/CCDIKSolver.js +49 -66
  8. package/examples/js/animation/MMDAnimationHelper.js +66 -137
  9. package/examples/js/animation/MMDPhysics.js +70 -134
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +138 -405
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -54
  14. package/examples/js/controls/FlyControls.js +29 -55
  15. package/examples/js/controls/OrbitControls.js +85 -95
  16. package/examples/js/controls/PointerLockControls.js +5 -14
  17. package/examples/js/controls/TrackballControls.js +33 -86
  18. package/examples/js/controls/TransformControls.js +84 -169
  19. package/examples/js/csm/CSM.js +4 -39
  20. package/examples/js/csm/CSMFrustum.js +3 -9
  21. package/examples/js/csm/CSMHelper.js +24 -4
  22. package/examples/js/csm/CSMShader.js +2 -6
  23. package/examples/js/curves/CurveExtras.js +27 -27
  24. package/examples/js/curves/NURBSCurve.js +4 -16
  25. package/examples/js/curves/NURBSSurface.js +3 -9
  26. package/examples/js/curves/NURBSUtils.js +8 -45
  27. package/examples/js/effects/AnaglyphEffect.js +4 -18
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +26 -30
  30. package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
  31. package/examples/js/effects/PeppersGhostEffect.js +12 -39
  32. package/examples/js/effects/StereoEffect.js +0 -4
  33. package/examples/js/environments/RoomEnvironment.js +12 -10
  34. package/examples/js/exporters/ColladaExporter.js +48 -65
  35. package/examples/js/exporters/DRACOExporter.js +22 -22
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +143 -261
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +42 -33
  40. package/examples/js/exporters/PLYExporter.js +38 -33
  41. package/examples/js/exporters/STLExporter.js +5 -7
  42. package/examples/js/exporters/USDZExporter.js +110 -25
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +11 -6
  45. package/examples/js/geometries/DecalGeometry.js +53 -20
  46. package/examples/js/geometries/LightningStrike.js +54 -67
  47. package/examples/js/geometries/ParametricGeometries.js +8 -7
  48. package/examples/js/geometries/ParametricGeometry.js +25 -12
  49. package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
  50. package/examples/js/geometries/TeapotGeometry.js +54 -50
  51. package/examples/js/geometries/TextGeometry.js +6 -4
  52. package/examples/js/helpers/LightProbeHelper.js +1 -2
  53. package/examples/js/helpers/OctreeHelper.js +22 -20
  54. package/examples/js/helpers/PositionalAudioHelper.js +8 -6
  55. package/examples/js/helpers/RectAreaLightHelper.js +6 -7
  56. package/examples/js/helpers/VertexNormalsHelper.js +15 -13
  57. package/examples/js/helpers/VertexTangentsHelper.js +15 -9
  58. package/examples/js/helpers/ViewHelper.js +31 -16
  59. package/examples/js/interactive/HTMLMesh.js +22 -33
  60. package/examples/js/interactive/InteractiveGroup.js +6 -12
  61. package/examples/js/interactive/SelectionBox.js +3 -70
  62. package/examples/js/interactive/SelectionHelper.js +0 -8
  63. package/examples/js/lights/LightProbeGenerator.js +32 -39
  64. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  65. package/examples/js/lines/LineGeometry.js +3 -5
  66. package/examples/js/lines/LineMaterial.js +4 -11
  67. package/examples/js/lines/LineSegments2.js +38 -89
  68. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  69. package/examples/js/lines/Wireframe.js +2 -7
  70. package/examples/js/lines/WireframeGeometry2.js +3 -1
  71. package/examples/js/loaders/3DMLoader.js +58 -155
  72. package/examples/js/loaders/3MFLoader.js +72 -106
  73. package/examples/js/loaders/AMFLoader.js +0 -25
  74. package/examples/js/loaders/BVHLoader.js +44 -43
  75. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  76. package/examples/js/loaders/ColladaLoader.js +201 -359
  77. package/examples/js/loaders/DDSLoader.js +24 -25
  78. package/examples/js/loaders/DRACOLoader.js +29 -66
  79. package/examples/js/loaders/EXRLoader.js +67 -164
  80. package/examples/js/loaders/FBXLoader.js +286 -441
  81. package/examples/js/loaders/FontLoader.js +6 -15
  82. package/examples/js/loaders/GCodeLoader.js +15 -16
  83. package/examples/js/loaders/GLTFLoader.js +354 -405
  84. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
  85. package/examples/js/loaders/KMZLoader.js +3 -7
  86. package/examples/js/loaders/KTXLoader.js +12 -30
  87. package/examples/js/loaders/LDrawLoader.js +178 -289
  88. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  89. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  90. package/examples/js/loaders/LWOLoader.js +59 -124
  91. package/examples/js/loaders/LogLuvLoader.js +27 -77
  92. package/examples/js/loaders/LottieLoader.js +4 -4
  93. package/examples/js/loaders/MD2Loader.js +26 -27
  94. package/examples/js/loaders/MDDLoader.js +6 -10
  95. package/examples/js/loaders/MMDLoader.js +180 -189
  96. package/examples/js/loaders/MTLLoader.js +18 -47
  97. package/examples/js/loaders/MaterialXLoader.js +392 -0
  98. package/examples/js/loaders/NRRDLoader.js +44 -84
  99. package/examples/js/loaders/OBJLoader.js +50 -65
  100. package/examples/js/loaders/PCDLoader.js +34 -29
  101. package/examples/js/loaders/PDBLoader.js +17 -13
  102. package/examples/js/loaders/PLYLoader.js +9 -39
  103. package/examples/js/loaders/PRWMLoader.js +11 -22
  104. package/examples/js/loaders/PVRLoader.js +7 -16
  105. package/examples/js/loaders/RGBELoader.js +36 -61
  106. package/examples/js/loaders/RGBMLoader.js +26 -87
  107. package/examples/js/loaders/STLLoader.js +20 -27
  108. package/examples/js/loaders/SVGLoader.js +361 -233
  109. package/examples/js/loaders/TDSLoader.js +81 -118
  110. package/examples/js/loaders/TGALoader.js +39 -41
  111. package/examples/js/loaders/TIFFLoader.js +0 -1
  112. package/examples/js/loaders/TTFLoader.js +0 -8
  113. package/examples/js/loaders/TiltLoader.js +14 -15
  114. package/examples/js/loaders/VOXLoader.js +8 -16
  115. package/examples/js/loaders/VRMLLoader.js +243 -340
  116. package/examples/js/loaders/VTKLoader.js +101 -118
  117. package/examples/js/loaders/XYZLoader.js +2 -4
  118. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  119. package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
  120. package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
  121. package/examples/js/materials/MeshGouraudMaterial.js +15 -13
  122. package/examples/js/math/Capsule.js +0 -17
  123. package/examples/js/math/ColorConverter.js +3 -3
  124. package/examples/js/math/ConvexHull.js +183 -139
  125. package/examples/js/math/ImprovedNoise.js +1 -1
  126. package/examples/js/math/Lut.js +8 -15
  127. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  128. package/examples/js/math/OBB.js +90 -49
  129. package/examples/js/math/Octree.js +2 -57
  130. package/examples/js/math/SimplexNoise.js +74 -88
  131. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  132. package/examples/js/misc/GPUComputationRenderer.js +14 -18
  133. package/examples/js/misc/Gyroscope.js +5 -9
  134. package/examples/js/misc/MD2Character.js +14 -23
  135. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  136. package/examples/js/misc/MorphAnimMesh.js +0 -6
  137. package/examples/js/misc/MorphBlendMesh.js +3 -30
  138. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  139. package/examples/js/misc/RollerCoaster.js +17 -24
  140. package/examples/js/misc/TubePainter.js +18 -12
  141. package/examples/js/misc/Volume.js +16 -45
  142. package/examples/js/misc/VolumeSlice.js +14 -24
  143. package/examples/js/modifiers/CurveModifier.js +19 -21
  144. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  145. package/examples/js/modifiers/SimplifyModifier.js +56 -59
  146. package/examples/js/modifiers/TessellateModifier.js +2 -9
  147. package/examples/js/objects/GroundProjectedEnv.js +2 -14
  148. package/examples/js/objects/Lensflare.js +47 -38
  149. package/examples/js/objects/LightningStorm.js +10 -13
  150. package/examples/js/objects/MarchingCubes.js +80 -59
  151. package/examples/js/objects/Reflector.js +22 -20
  152. package/examples/js/objects/ReflectorForSSRPass.js +19 -23
  153. package/examples/js/objects/Refractor.js +52 -30
  154. package/examples/js/objects/ShadowMesh.js +1 -2
  155. package/examples/js/objects/Sky.js +2 -7
  156. package/examples/js/objects/Water.js +23 -18
  157. package/examples/js/objects/Water2.js +20 -19
  158. package/examples/js/physics/AmmoPhysics.js +23 -20
  159. package/examples/js/physics/OimoPhysics.js +19 -17
  160. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  161. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  162. package/examples/js/postprocessing/BloomPass.js +38 -17
  163. package/examples/js/postprocessing/BokehPass.js +29 -12
  164. package/examples/js/postprocessing/ClearPass.js +1 -6
  165. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  166. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  167. package/examples/js/postprocessing/EffectComposer.js +25 -32
  168. package/examples/js/postprocessing/FilmPass.js +7 -5
  169. package/examples/js/postprocessing/GlitchPass.js +10 -11
  170. package/examples/js/postprocessing/HalftonePass.js +9 -9
  171. package/examples/js/postprocessing/LUTPass.js +2 -15
  172. package/examples/js/postprocessing/MaskPass.js +20 -17
  173. package/examples/js/postprocessing/OutlinePass.js +45 -36
  174. package/examples/js/postprocessing/Pass.js +11 -14
  175. package/examples/js/postprocessing/RenderPass.js +3 -7
  176. package/examples/js/postprocessing/SAOPass.js +40 -32
  177. package/examples/js/postprocessing/SMAAPass.js +34 -17
  178. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  179. package/examples/js/postprocessing/SSAOPass.js +56 -42
  180. package/examples/js/postprocessing/SSRPass.js +78 -61
  181. package/examples/js/postprocessing/SavePass.js +14 -6
  182. package/examples/js/postprocessing/ShaderPass.js +9 -8
  183. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  184. package/examples/js/postprocessing/TexturePass.js +7 -4
  185. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  186. package/examples/js/renderers/CSS2DRenderer.js +2 -21
  187. package/examples/js/renderers/CSS3DRenderer.js +3 -24
  188. package/examples/js/renderers/Projector.js +29 -85
  189. package/examples/js/renderers/SVGRenderer.js +4 -50
  190. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  191. package/examples/js/shaders/AfterimageShader.js +3 -6
  192. package/examples/js/shaders/BasicShader.js +3 -6
  193. package/examples/js/shaders/BleachBypassShader.js +3 -6
  194. package/examples/js/shaders/BlendShader.js +3 -6
  195. package/examples/js/shaders/BokehShader.js +3 -6
  196. package/examples/js/shaders/BokehShader2.js +4 -13
  197. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  198. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  199. package/examples/js/shaders/ColorifyShader.js +2 -6
  200. package/examples/js/shaders/ConvolutionShader.js +5 -10
  201. package/examples/js/shaders/CopyShader.js +3 -6
  202. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  203. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  204. package/examples/js/shaders/DigitalGlitch.js +3 -6
  205. package/examples/js/shaders/DotScreenShader.js +2 -6
  206. package/examples/js/shaders/FXAAShader.js +1 -3
  207. package/examples/js/shaders/FilmShader.js +3 -6
  208. package/examples/js/shaders/FocusShader.js +3 -6
  209. package/examples/js/shaders/FreiChenShader.js +2 -6
  210. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  211. package/examples/js/shaders/GodRaysShader.js +11 -24
  212. package/examples/js/shaders/HalftoneShader.js +3 -6
  213. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  214. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  215. package/examples/js/shaders/HueSaturationShader.js +3 -6
  216. package/examples/js/shaders/KaleidoShader.js +3 -6
  217. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  218. package/examples/js/shaders/LuminosityShader.js +3 -6
  219. package/examples/js/shaders/MMDToonShader.js +2 -6
  220. package/examples/js/shaders/MirrorShader.js +3 -6
  221. package/examples/js/shaders/NormalMapShader.js +2 -6
  222. package/examples/js/shaders/RGBShiftShader.js +3 -6
  223. package/examples/js/shaders/SAOShader.js +2 -6
  224. package/examples/js/shaders/SMAAShader.js +6 -18
  225. package/examples/js/shaders/SSAOShader.js +2 -6
  226. package/examples/js/shaders/SSRShader.js +6 -18
  227. package/examples/js/shaders/SepiaShader.js +3 -6
  228. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  229. package/examples/js/shaders/TechnicolorShader.js +3 -6
  230. package/examples/js/shaders/ToneMapShader.js +3 -6
  231. package/examples/js/shaders/ToonShader.js +8 -24
  232. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  233. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  234. package/examples/js/shaders/VelocityShader.js +126 -0
  235. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  236. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  237. package/examples/js/shaders/VignetteShader.js +3 -6
  238. package/examples/js/shaders/VolumeShader.js +2 -6
  239. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  240. package/examples/js/textures/FlakesTexture.js +0 -1
  241. package/examples/js/utils/BufferGeometryUtils.js +234 -168
  242. package/examples/js/utils/CameraUtils.js +5 -20
  243. package/examples/js/utils/GPUStatsPanel.js +3 -12
  244. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  245. package/examples/js/utils/GeometryUtils.js +13 -18
  246. package/examples/js/utils/LDrawUtils.js +8 -11
  247. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  248. package/examples/js/utils/SceneUtils.js +117 -6
  249. package/examples/js/utils/ShadowMapViewer.js +17 -14
  250. package/examples/js/utils/SkeletonUtils.js +13 -27
  251. package/examples/js/utils/UVsDebug.js +20 -12
  252. package/examples/js/utils/WorkerPool.js +1 -11
  253. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  254. package/examples/jsm/capabilities/WebGPU.js +3 -1
  255. package/examples/jsm/controls/OrbitControls.js +44 -4
  256. package/examples/jsm/exporters/GLTFExporter.js +17 -131
  257. package/examples/jsm/exporters/USDZExporter.js +75 -19
  258. package/examples/jsm/interactive/HTMLMesh.js +2 -0
  259. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  260. package/examples/jsm/loaders/3DMLoader.js +1 -2
  261. package/examples/jsm/loaders/ColladaLoader.js +28 -0
  262. package/examples/jsm/loaders/FBXLoader.js +16 -2
  263. package/examples/jsm/loaders/GLTFLoader.js +204 -377
  264. package/examples/jsm/loaders/KTX2Loader.js +68 -29
  265. package/examples/jsm/loaders/LDrawLoader.js +14 -13
  266. package/examples/jsm/loaders/LottieLoader.js +4 -2
  267. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  268. package/examples/jsm/loaders/PCDLoader.js +1 -1
  269. package/examples/jsm/loaders/PLYLoader.js +68 -16
  270. package/examples/jsm/loaders/SVGLoader.js +227 -14
  271. package/examples/jsm/loaders/USDZLoader.js +31 -16
  272. package/examples/jsm/nodes/Nodes.js +14 -2
  273. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  274. package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
  275. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  276. package/examples/jsm/nodes/accessors/SkinningNode.js +1 -1
  277. package/examples/jsm/nodes/core/Node.js +1 -1
  278. package/examples/jsm/nodes/core/NodeBuilder.js +36 -4
  279. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  280. package/examples/jsm/nodes/core/NodeVarying.js +7 -4
  281. package/examples/jsm/nodes/core/VaryingNode.js +6 -4
  282. package/examples/jsm/nodes/core/constants.js +13 -13
  283. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  284. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  285. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  286. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  287. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
  288. package/examples/jsm/nodes/materials/Materials.js +9 -7
  289. package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
  290. package/examples/jsm/nodes/materialx/MaterialXNodes.js +6 -2
  291. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  292. package/examples/jsm/nodes/math/MathNode.js +5 -0
  293. package/examples/jsm/nodes/math/OperatorNode.js +6 -1
  294. package/examples/jsm/nodes/shadernode/ShaderNode.js +26 -13
  295. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +2 -0
  296. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +18 -0
  297. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  298. package/examples/jsm/nodes/utils/JoinNode.js +8 -2
  299. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  300. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  301. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  302. package/examples/jsm/nodes/utils/TimerNode.js +1 -1
  303. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  304. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  305. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  306. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  307. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  308. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  309. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  310. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  311. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  312. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  313. package/examples/jsm/postprocessing/OutlinePass.js +10 -0
  314. package/examples/jsm/postprocessing/Pass.js +2 -0
  315. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  316. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  317. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  318. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  319. package/examples/jsm/postprocessing/SavePass.js +17 -1
  320. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  321. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  322. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  323. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  324. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +39 -16
  325. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  326. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  327. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
  328. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
  329. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +35 -5
  330. package/examples/jsm/shaders/MMDToonShader.js +0 -2
  331. package/examples/jsm/shaders/VelocityShader.js +128 -0
  332. package/examples/jsm/utils/BufferGeometryUtils.js +130 -6
  333. package/examples/jsm/utils/SceneUtils.js +129 -4
  334. package/examples/jsm/utils/TextureUtils.js +85 -0
  335. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  336. package/examples/jsm/webxr/XRHandMeshModel.js +6 -3
  337. package/package.json +11 -12
  338. package/src/Three.js +1 -0
  339. package/src/audio/AudioContext.js +5 -5
  340. package/src/cameras/CubeCamera.js +14 -14
  341. package/src/constants.js +1 -1
  342. package/src/core/InstancedBufferGeometry.js +1 -7
  343. package/src/extras/Earcut.js +67 -67
  344. package/src/helpers/DirectionalLightHelper.js +5 -1
  345. package/src/helpers/HemisphereLightHelper.js +4 -1
  346. package/src/helpers/PointLightHelper.js +2 -1
  347. package/src/helpers/SpotLightHelper.js +4 -2
  348. package/src/lights/PointLight.js +2 -2
  349. package/src/lights/SpotLight.js +2 -2
  350. package/src/loaders/FileLoader.js +4 -1
  351. package/src/loaders/ObjectLoader.js +5 -1
  352. package/src/materials/Material.js +1 -1
  353. package/src/math/Color.js +5 -5
  354. package/src/math/Matrix3.js +53 -18
  355. package/src/math/Ray.js +2 -5
  356. package/src/math/Sphere.js +19 -26
  357. package/src/objects/InstancedMesh.js +7 -0
  358. package/src/objects/LOD.js +25 -6
  359. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  360. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  361. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  362. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  363. package/src/renderers/WebGLRenderTarget.js +1 -1
  364. package/src/renderers/WebGLRenderer.js +36 -62
  365. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  366. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
  367. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  369. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  370. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  371. package/src/renderers/shaders/ShaderChunk.js +3 -0
  372. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  373. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  374. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  375. package/src/renderers/shaders/ShaderLib.js +20 -6
  376. package/src/renderers/shaders/UniformsLib.js +1 -1
  377. package/src/renderers/shaders/UniformsUtils.js +15 -0
  378. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  379. package/src/renderers/webgl/WebGLBackground.js +15 -7
  380. package/src/renderers/webgl/WebGLLights.js +0 -4
  381. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  382. package/src/renderers/webgl/WebGLShadowMap.js +3 -1
  383. package/src/renderers/webgl/WebGLState.js +31 -1
  384. package/src/renderers/webgl/WebGLTextures.js +71 -18
  385. package/src/renderers/webgl/WebGLUniforms.js +116 -20
  386. package/src/renderers/webgl/WebGLUtils.js +1 -1
  387. package/src/renderers/webxr/WebXRController.js +46 -13
  388. package/src/renderers/webxr/WebXRManager.js +85 -3
  389. package/src/scenes/Scene.js +8 -0
  390. package/src/textures/CompressedArrayTexture.js +18 -0
  391. package/examples/js/libs/lottie_canvas.js +0 -12751
  392. package/examples/js/shaders/PixelShader.js +0 -51
  393. package/examples/jsm/shaders/PixelShader.js +0 -44
@@ -56,10 +56,12 @@
56
56
  this.separableBlurMaterial1.uniforms[ 'kernelRadius' ].value = 1;
57
57
  this.separableBlurMaterial2 = this.getSeperableBlurMaterial( MAX_EDGE_GLOW );
58
58
  this.separableBlurMaterial2.uniforms[ 'texSize' ].value.set( Math.round( resx / 2 ), Math.round( resy / 2 ) );
59
- this.separableBlurMaterial2.uniforms[ 'kernelRadius' ].value = MAX_EDGE_GLOW; // Overlay material
59
+ this.separableBlurMaterial2.uniforms[ 'kernelRadius' ].value = MAX_EDGE_GLOW;
60
60
 
61
- this.overlayMaterial = this.getOverlayMaterial(); // copy material
61
+ // Overlay material
62
+ this.overlayMaterial = this.getOverlayMaterial();
62
63
 
64
+ // copy material
63
65
  if ( THREE.CopyShader === undefined ) console.error( 'THREE.OutlinePass relies on THREE.CopyShader' );
64
66
  const copyShader = THREE.CopyShader;
65
67
  this.copyUniforms = THREE.UniformsUtils.clone( copyShader.uniforms );
@@ -81,7 +83,6 @@
81
83
  this.tempPulseColor1 = new THREE.Color();
82
84
  this.tempPulseColor2 = new THREE.Color();
83
85
  this.textureMatrix = new THREE.Matrix4();
84
-
85
86
  function replaceDepthToViewZ( string, camera ) {
86
87
 
87
88
  const type = camera.isPerspectiveCamera ? 'perspective' : 'orthographic';
@@ -90,7 +91,6 @@
90
91
  }
91
92
 
92
93
  }
93
-
94
94
  dispose() {
95
95
 
96
96
  this.renderTargetMaskBuffer.dispose();
@@ -100,9 +100,16 @@
100
100
  this.renderTargetBlurBuffer2.dispose();
101
101
  this.renderTargetEdgeBuffer1.dispose();
102
102
  this.renderTargetEdgeBuffer2.dispose();
103
+ this.depthMaterial.dispose();
104
+ this.prepareMaskMaterial.dispose();
105
+ this.edgeDetectionMaterial.dispose();
106
+ this.separableBlurMaterial1.dispose();
107
+ this.separableBlurMaterial2.dispose();
108
+ this.overlayMaterial.dispose();
109
+ this.materialCopy.dispose();
110
+ this.fsQuad.dispose();
103
111
 
104
112
  }
105
-
106
113
  setSize( width, height ) {
107
114
 
108
115
  this.renderTargetMaskBuffer.setSize( width, height );
@@ -120,11 +127,9 @@
120
127
  this.separableBlurMaterial2.uniforms[ 'texSize' ].value.set( resx, resy );
121
128
 
122
129
  }
123
-
124
130
  changeVisibilityOfSelectedObjects( bVisible ) {
125
131
 
126
132
  const cache = this._visibilityCache;
127
-
128
133
  function gatherSelectedMeshesCallBack( object ) {
129
134
 
130
135
  if ( object.isMesh ) {
@@ -152,12 +157,10 @@
152
157
  }
153
158
 
154
159
  }
155
-
156
160
  changeVisibilityOfNonSelectedObjects( bVisible ) {
157
161
 
158
162
  const cache = this._visibilityCache;
159
163
  const selectedMeshes = [];
160
-
161
164
  function gatherSelectedMeshesCallBack( object ) {
162
165
 
163
166
  if ( object.isMesh ) selectedMeshes.push( object );
@@ -176,12 +179,11 @@
176
179
  if ( object.isMesh || object.isSprite ) {
177
180
 
178
181
  // only meshes and sprites are supported by OutlinePass
179
- let bFound = false;
180
182
 
183
+ let bFound = false;
181
184
  for ( let i = 0; i < selectedMeshes.length; i ++ ) {
182
185
 
183
186
  const selectedObjectId = selectedMeshes[ i ].id;
184
-
185
187
  if ( selectedObjectId === object.id ) {
186
188
 
187
189
  bFound = true;
@@ -194,7 +196,6 @@
194
196
  if ( bFound === false ) {
195
197
 
196
198
  const visibility = object.visible;
197
-
198
199
  if ( bVisible === false || cache.get( object ) === true ) {
199
200
 
200
201
  object.visible = bVisible;
@@ -209,6 +210,7 @@
209
210
 
210
211
  // the visibilty of points and lines is always set to false in order to
211
212
  // not affect the outline computation
213
+
212
214
  if ( bVisible === true ) {
213
215
 
214
216
  object.visible = cache.get( object ); // restore
@@ -227,7 +229,6 @@
227
229
  this.renderScene.traverse( VisibilityChangeCallBack );
228
230
 
229
231
  }
230
-
231
232
  updateTextureMatrix() {
232
233
 
233
234
  this.textureMatrix.set( 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0 );
@@ -235,7 +236,6 @@
235
236
  this.textureMatrix.multiply( this.renderCamera.matrixWorldInverse );
236
237
 
237
238
  }
238
-
239
239
  render( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {
240
240
 
241
241
  if ( this.selectedObjects.length > 0 ) {
@@ -245,24 +245,27 @@
245
245
  const oldAutoClear = renderer.autoClear;
246
246
  renderer.autoClear = false;
247
247
  if ( maskActive ) renderer.state.buffers.stencil.setTest( false );
248
- renderer.setClearColor( 0xffffff, 1 ); // Make selected objects invisible
248
+ renderer.setClearColor( 0xffffff, 1 );
249
249
 
250
+ // Make selected objects invisible
250
251
  this.changeVisibilityOfSelectedObjects( false );
251
252
  const currentBackground = this.renderScene.background;
252
- this.renderScene.background = null; // 1. Draw Non Selected objects in the depth buffer
253
+ this.renderScene.background = null;
253
254
 
255
+ // 1. Draw Non Selected objects in the depth buffer
254
256
  this.renderScene.overrideMaterial = this.depthMaterial;
255
257
  renderer.setRenderTarget( this.renderTargetDepthBuffer );
256
258
  renderer.clear();
257
- renderer.render( this.renderScene, this.renderCamera ); // Make selected objects visible
259
+ renderer.render( this.renderScene, this.renderCamera );
258
260
 
261
+ // Make selected objects visible
259
262
  this.changeVisibilityOfSelectedObjects( true );
263
+ this._visibilityCache.clear();
260
264
 
261
- this._visibilityCache.clear(); // Update Texture Matrix for Depth compare
262
-
263
-
264
- this.updateTextureMatrix(); // Make non selected objects invisible, and draw only the selected objects, by comparing the depth buffer of non selected objects
265
+ // Update Texture Matrix for Depth compare
266
+ this.updateTextureMatrix();
265
267
 
268
+ // Make non selected objects invisible, and draw only the selected objects, by comparing the depth buffer of non selected objects
266
269
  this.changeVisibilityOfNonSelectedObjects( false );
267
270
  this.renderScene.overrideMaterial = this.prepareMaskMaterial;
268
271
  this.prepareMaskMaterial.uniforms[ 'cameraNearFar' ].value.set( this.renderCamera.near, this.renderCamera.far );
@@ -273,11 +276,10 @@
273
276
  renderer.render( this.renderScene, this.renderCamera );
274
277
  this.renderScene.overrideMaterial = null;
275
278
  this.changeVisibilityOfNonSelectedObjects( true );
276
-
277
279
  this._visibilityCache.clear();
280
+ this.renderScene.background = currentBackground;
278
281
 
279
- this.renderScene.background = currentBackground; // 2. Downsample to Half resolution
280
-
282
+ // 2. Downsample to Half resolution
281
283
  this.fsQuad.material = this.materialCopy;
282
284
  this.copyUniforms[ 'tDiffuse' ].value = this.renderTargetMaskBuffer.texture;
283
285
  renderer.setRenderTarget( this.renderTargetMaskDownSampleBuffer );
@@ -285,16 +287,15 @@
285
287
  this.fsQuad.render( renderer );
286
288
  this.tempPulseColor1.copy( this.visibleEdgeColor );
287
289
  this.tempPulseColor2.copy( this.hiddenEdgeColor );
288
-
289
290
  if ( this.pulsePeriod > 0 ) {
290
291
 
291
292
  const scalar = ( 1 + 0.25 ) / 2 + Math.cos( performance.now() * 0.01 / this.pulsePeriod ) * ( 1.0 - 0.25 ) / 2;
292
293
  this.tempPulseColor1.multiplyScalar( scalar );
293
294
  this.tempPulseColor2.multiplyScalar( scalar );
294
295
 
295
- } // 3. Apply Edge Detection THREE.Pass
296
-
296
+ }
297
297
 
298
+ // 3. Apply Edge Detection THREE.Pass
298
299
  this.fsQuad.material = this.edgeDetectionMaterial;
299
300
  this.edgeDetectionMaterial.uniforms[ 'maskTexture' ].value = this.renderTargetMaskDownSampleBuffer.texture;
300
301
  this.edgeDetectionMaterial.uniforms[ 'texSize' ].value.set( this.renderTargetMaskDownSampleBuffer.width, this.renderTargetMaskDownSampleBuffer.height );
@@ -302,8 +303,9 @@
302
303
  this.edgeDetectionMaterial.uniforms[ 'hiddenEdgeColor' ].value = this.tempPulseColor2;
303
304
  renderer.setRenderTarget( this.renderTargetEdgeBuffer1 );
304
305
  renderer.clear();
305
- this.fsQuad.render( renderer ); // 4. Apply Blur on Half res
306
+ this.fsQuad.render( renderer );
306
307
 
308
+ // 4. Apply Blur on Half res
307
309
  this.fsQuad.material = this.separableBlurMaterial1;
308
310
  this.separableBlurMaterial1.uniforms[ 'colorTexture' ].value = this.renderTargetEdgeBuffer1.texture;
309
311
  this.separableBlurMaterial1.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionX;
@@ -315,8 +317,9 @@
315
317
  this.separableBlurMaterial1.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionY;
316
318
  renderer.setRenderTarget( this.renderTargetEdgeBuffer1 );
317
319
  renderer.clear();
318
- this.fsQuad.render( renderer ); // Apply Blur on quarter res
320
+ this.fsQuad.render( renderer );
319
321
 
322
+ // Apply Blur on quarter res
320
323
  this.fsQuad.material = this.separableBlurMaterial2;
321
324
  this.separableBlurMaterial2.uniforms[ 'colorTexture' ].value = this.renderTargetEdgeBuffer1.texture;
322
325
  this.separableBlurMaterial2.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionX;
@@ -327,8 +330,9 @@
327
330
  this.separableBlurMaterial2.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionY;
328
331
  renderer.setRenderTarget( this.renderTargetEdgeBuffer2 );
329
332
  renderer.clear();
330
- this.fsQuad.render( renderer ); // Blend it additively over the input texture
333
+ this.fsQuad.render( renderer );
331
334
 
335
+ // Blend it additively over the input texture
332
336
  this.fsQuad.material = this.overlayMaterial;
333
337
  this.overlayMaterial.uniforms[ 'maskTexture' ].value = this.renderTargetMaskBuffer.texture;
334
338
  this.overlayMaterial.uniforms[ 'edgeTexture1' ].value = this.renderTargetEdgeBuffer1.texture;
@@ -355,7 +359,6 @@
355
359
  }
356
360
 
357
361
  }
358
-
359
362
  getPrepareMaskMaterial() {
360
363
 
361
364
  return new THREE.ShaderMaterial( {
@@ -384,9 +387,19 @@
384
387
  #include <morphtarget_vertex>
385
388
  #include <skinning_vertex>
386
389
  #include <project_vertex>
387
- #include <worldpos_vertex>
388
390
 
389
391
  vPosition = mvPosition;
392
+
393
+ vec4 worldPosition = vec4( transformed, 1.0 );
394
+
395
+ #ifdef USE_INSTANCING
396
+
397
+ worldPosition = instanceMatrix * worldPosition;
398
+
399
+ #endif
400
+
401
+ worldPosition = modelMatrix * worldPosition;
402
+
390
403
  projTexCoord = textureMatrix * worldPosition;
391
404
 
392
405
  }`,
@@ -407,7 +420,6 @@
407
420
  } );
408
421
 
409
422
  }
410
-
411
423
  getEdgeDetectionMaterial() {
412
424
 
413
425
  return new THREE.ShaderMaterial( {
@@ -457,7 +469,6 @@
457
469
  } );
458
470
 
459
471
  }
460
-
461
472
  getSeperableBlurMaterial( maxRadius ) {
462
473
 
463
474
  return new THREE.ShaderMaterial( {
@@ -516,7 +527,6 @@
516
527
  } );
517
528
 
518
529
  }
519
-
520
530
  getOverlayMaterial() {
521
531
 
522
532
  return new THREE.ShaderMaterial( {
@@ -580,7 +590,6 @@
580
590
  }
581
591
 
582
592
  }
583
-
584
593
  OutlinePass.BlurDirectionX = new THREE.Vector2( 1.0, 0.0 );
585
594
  OutlinePass.BlurDirectionY = new THREE.Vector2( 0.0, 1.0 );
586
595
 
@@ -5,36 +5,37 @@
5
5
  constructor() {
6
6
 
7
7
  // if set to true, the pass is processed by the composer
8
- this.enabled = true; // if set to true, the pass indicates to swap read and write buffer after rendering
8
+ this.enabled = true;
9
9
 
10
- this.needsSwap = true; // if set to true, the pass clears its buffer before rendering
10
+ // if set to true, the pass indicates to swap read and write buffer after rendering
11
+ this.needsSwap = true;
11
12
 
12
- this.clear = false; // if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.
13
+ // if set to true, the pass clears its buffer before rendering
14
+ this.clear = false;
13
15
 
16
+ // if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.
14
17
  this.renderToScreen = false;
15
18
 
16
19
  }
17
-
18
20
  setSize() {}
19
-
20
21
  render() {
21
22
 
22
23
  console.error( 'THREE.Pass: .render() must be implemented in derived pass.' );
23
24
 
24
25
  }
26
+ dispose() {}
25
27
 
26
- } // Helper for passes that need to fill the viewport with a single quad.
28
+ }
27
29
 
30
+ // Helper for passes that need to fill the viewport with a single quad.
28
31
 
29
- const _camera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 ); // https://github.com/mrdoob/three.js/pull/21358
32
+ const _camera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
30
33
 
34
+ // https://github.com/mrdoob/three.js/pull/21358
31
35
 
32
36
  const _geometry = new THREE.BufferGeometry();
33
-
34
37
  _geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );
35
-
36
38
  _geometry.setAttribute( 'uv', new THREE.Float32BufferAttribute( [ 0, 2, 0, 0, 2, 0 ], 2 ) );
37
-
38
39
  class FullScreenQuad {
39
40
 
40
41
  constructor( material ) {
@@ -42,25 +43,21 @@
42
43
  this._mesh = new THREE.Mesh( _geometry, material );
43
44
 
44
45
  }
45
-
46
46
  dispose() {
47
47
 
48
48
  this._mesh.geometry.dispose();
49
49
 
50
50
  }
51
-
52
51
  render( renderer ) {
53
52
 
54
53
  renderer.render( this._mesh, _camera );
55
54
 
56
55
  }
57
-
58
56
  get material() {
59
57
 
60
58
  return this._mesh.material;
61
59
 
62
60
  }
63
-
64
61
  set material( value ) {
65
62
 
66
63
  this._mesh.material = value;
@@ -16,15 +16,11 @@
16
16
  this._oldClearColor = new THREE.Color();
17
17
 
18
18
  }
19
-
20
- render( renderer, writeBuffer, readBuffer
21
- /*, deltaTime, maskActive */
22
- ) {
19
+ render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
23
20
 
24
21
  const oldAutoClear = renderer.autoClear;
25
22
  renderer.autoClear = false;
26
23
  let oldClearAlpha, oldOverrideMaterial;
27
-
28
24
  if ( this.overrideMaterial !== undefined ) {
29
25
 
30
26
  oldOverrideMaterial = this.scene.overrideMaterial;
@@ -46,11 +42,11 @@
46
42
 
47
43
  }
48
44
 
49
- renderer.setRenderTarget( this.renderToScreen ? null : readBuffer ); // TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600
45
+ renderer.setRenderTarget( this.renderToScreen ? null : readBuffer );
50
46
 
47
+ // TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600
51
48
  if ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );
52
49
  renderer.render( this.scene, this.camera );
53
-
54
50
  if ( this.clearColor ) {
55
51
 
56
52
  renderer.setClearColor( this._oldClearColor, oldClearAlpha );
@@ -40,7 +40,6 @@
40
40
  } );
41
41
  this.depthRenderTarget = this.normalRenderTarget.clone();
42
42
  let depthTexture;
43
-
44
43
  if ( this.supportsDepthTextureExtension ) {
45
44
 
46
45
  depthTexture = new THREE.DepthTexture();
@@ -55,7 +54,6 @@
55
54
  this.depthMaterial.blending = THREE.NoBlending;
56
55
  this.normalMaterial = new THREE.MeshNormalMaterial();
57
56
  this.normalMaterial.blending = THREE.NoBlending;
58
-
59
57
  if ( THREE.SAOShader === undefined ) {
60
58
 
61
59
  console.error( 'THREE.SAOPass relies on THREE.SAOShader' );
@@ -78,7 +76,6 @@
78
76
  this.saoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );
79
77
  this.saoMaterial.uniforms[ 'cameraProjectionMatrix' ].value = this.camera.projectionMatrix;
80
78
  this.saoMaterial.blending = THREE.NoBlending;
81
-
82
79
  if ( THREE.DepthLimitedBlurShader === undefined ) {
83
80
 
84
81
  console.error( 'THREE.SAOPass relies on THREE.DepthLimitedBlurShader' );
@@ -109,7 +106,6 @@
109
106
  this.hBlurMaterial.uniforms[ 'tDepth' ].value = this.supportsDepthTextureExtension ? depthTexture : this.depthRenderTarget.texture;
110
107
  this.hBlurMaterial.uniforms[ 'size' ].value.set( this.resolution.x, this.resolution.y );
111
108
  this.hBlurMaterial.blending = THREE.NoBlending;
112
-
113
109
  if ( THREE.CopyShader === undefined ) {
114
110
 
115
111
  console.error( 'THREE.SAOPass relies on THREE.CopyShader' );
@@ -132,7 +128,6 @@
132
128
  this.materialCopy.blendSrcAlpha = THREE.DstAlphaFactor;
133
129
  this.materialCopy.blendDstAlpha = THREE.ZeroFactor;
134
130
  this.materialCopy.blendEquationAlpha = THREE.AddEquation;
135
-
136
131
  if ( THREE.UnpackDepthRGBAShader === undefined ) {
137
132
 
138
133
  console.error( 'THREE.SAOPass relies on THREE.UnpackDepthRGBAShader' );
@@ -148,10 +143,7 @@
148
143
  this.fsQuad = new THREE.FullScreenQuad( null );
149
144
 
150
145
  }
151
-
152
- render( renderer, writeBuffer, readBuffer
153
- /*, deltaTime, maskActive*/
154
- ) {
146
+ render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive*/ ) {
155
147
 
156
148
  // Rendering readBuffer first when rendering to screen
157
149
  if ( this.renderToScreen ) {
@@ -181,7 +173,8 @@
181
173
  this.saoMaterial.uniforms[ 'kernelRadius' ].value = this.params.saoKernelRadius;
182
174
  this.saoMaterial.uniforms[ 'minResolution' ].value = this.params.saoMinResolution;
183
175
  this.saoMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;
184
- this.saoMaterial.uniforms[ 'cameraFar' ].value = this.camera.far; // this.saoMaterial.uniforms['randomSeed'].value = Math.random();
176
+ this.saoMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;
177
+ // this.saoMaterial.uniforms['randomSeed'].value = Math.random();
185
178
 
186
179
  const depthCutoff = this.params.saoBlurDepthCutoff * ( this.camera.far - this.camera.near );
187
180
  this.vBlurMaterial.uniforms[ 'depthCutoff' ].value = depthCutoff;
@@ -191,7 +184,6 @@
191
184
  this.hBlurMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;
192
185
  this.hBlurMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;
193
186
  this.params.saoBlurRadius = Math.floor( this.params.saoBlurRadius );
194
-
195
187
  if ( this.prevStdDev !== this.params.saoBlurStdDev || this.prevNumSamples !== this.params.saoBlurRadius ) {
196
188
 
197
189
  THREE.BlurShaderUtils.configure( this.vBlurMaterial, this.params.saoBlurRadius, this.params.saoBlurStdDev, new THREE.Vector2( 0, 1 ) );
@@ -199,14 +191,15 @@
199
191
  this.prevStdDev = this.params.saoBlurStdDev;
200
192
  this.prevNumSamples = this.params.saoBlurRadius;
201
193
 
202
- } // Rendering scene to depth texture
203
-
194
+ }
204
195
 
196
+ // Rendering scene to depth texture
205
197
  renderer.setClearColor( 0x000000 );
206
198
  renderer.setRenderTarget( this.beautyRenderTarget );
207
199
  renderer.clear();
208
- renderer.render( this.scene, this.camera ); // Re-render scene if depth texture extension is not supported
200
+ renderer.render( this.scene, this.camera );
209
201
 
202
+ // Re-render scene if depth texture extension is not supported
210
203
  if ( ! this.supportsDepthTextureExtension ) {
211
204
 
212
205
  // Clear rule : far clipping plane in both RGBA and Basic encoding
@@ -219,11 +212,12 @@
219
212
  // Clear rule : default normal is facing the camera
220
213
  this.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );
221
214
 
222
- } // Rendering SAO texture
223
-
215
+ }
224
216
 
225
- this.renderPass( renderer, this.saoMaterial, this.saoRenderTarget, 0xffffff, 1.0 ); // Blurring SAO texture
217
+ // Rendering SAO texture
218
+ this.renderPass( renderer, this.saoMaterial, this.saoRenderTarget, 0xffffff, 1.0 );
226
219
 
220
+ // Blurring SAO texture
227
221
  if ( this.params.saoBlur ) {
228
222
 
229
223
  this.renderPass( renderer, this.vBlurMaterial, this.blurIntermediateRenderTarget, 0xffffff, 1.0 );
@@ -231,8 +225,8 @@
231
225
 
232
226
  }
233
227
 
234
- let outputMaterial = this.materialCopy; // Setting up SAO rendering
235
-
228
+ let outputMaterial = this.materialCopy;
229
+ // Setting up SAO rendering
236
230
  if ( this.params.output === 3 ) {
237
231
 
238
232
  if ( this.supportsDepthTextureExtension ) {
@@ -258,9 +252,9 @@
258
252
  this.materialCopy.uniforms[ 'tDiffuse' ].value = this.saoRenderTarget.texture;
259
253
  this.materialCopy.needsUpdate = true;
260
254
 
261
- } // Blending depends on output, only want a THREE.CustomBlending when showing SAO
262
-
255
+ }
263
256
 
257
+ // Blending depends on output, only want a THREE.CustomBlending when showing SAO
264
258
  if ( this.params.output === 0 ) {
265
259
 
266
260
  outputMaterial.blending = THREE.CustomBlending;
@@ -269,25 +263,24 @@
269
263
 
270
264
  outputMaterial.blending = THREE.NoBlending;
271
265
 
272
- } // Rendering SAOPass result on top of previous pass
273
-
266
+ }
274
267
 
268
+ // Rendering SAOPass result on top of previous pass
275
269
  this.renderPass( renderer, outputMaterial, this.renderToScreen ? null : readBuffer );
276
270
  renderer.setClearColor( this._oldClearColor, this.oldClearAlpha );
277
271
  renderer.autoClear = oldAutoClear;
278
272
 
279
273
  }
280
-
281
274
  renderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {
282
275
 
283
276
  // save original state
284
277
  renderer.getClearColor( this.originalClearColor );
285
278
  const originalClearAlpha = renderer.getClearAlpha();
286
279
  const originalAutoClear = renderer.autoClear;
287
- renderer.setRenderTarget( renderTarget ); // setup pass state
280
+ renderer.setRenderTarget( renderTarget );
288
281
 
282
+ // setup pass state
289
283
  renderer.autoClear = false;
290
-
291
284
  if ( clearColor !== undefined && clearColor !== null ) {
292
285
 
293
286
  renderer.setClearColor( clearColor );
@@ -297,14 +290,14 @@
297
290
  }
298
291
 
299
292
  this.fsQuad.material = passMaterial;
300
- this.fsQuad.render( renderer ); // restore original state
293
+ this.fsQuad.render( renderer );
301
294
 
295
+ // restore original state
302
296
  renderer.autoClear = originalAutoClear;
303
297
  renderer.setClearColor( this.originalClearColor );
304
298
  renderer.setClearAlpha( originalClearAlpha );
305
299
 
306
300
  }
307
-
308
301
  renderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {
309
302
 
310
303
  renderer.getClearColor( this.originalClearColor );
@@ -314,7 +307,6 @@
314
307
  renderer.autoClear = false;
315
308
  clearColor = overrideMaterial.clearColor || clearColor;
316
309
  clearAlpha = overrideMaterial.clearAlpha || clearAlpha;
317
-
318
310
  if ( clearColor !== undefined && clearColor !== null ) {
319
311
 
320
312
  renderer.setClearColor( clearColor );
@@ -325,14 +317,14 @@
325
317
 
326
318
  this.scene.overrideMaterial = overrideMaterial;
327
319
  renderer.render( this.scene, this.camera );
328
- this.scene.overrideMaterial = null; // restore original state
320
+ this.scene.overrideMaterial = null;
329
321
 
322
+ // restore original state
330
323
  renderer.autoClear = originalAutoClear;
331
324
  renderer.setClearColor( this.originalClearColor );
332
325
  renderer.setClearAlpha( originalClearAlpha );
333
326
 
334
327
  }
335
-
336
328
  setSize( width, height ) {
337
329
 
338
330
  this.beautyRenderTarget.setSize( width, height );
@@ -350,9 +342,25 @@
350
342
  this.hBlurMaterial.needsUpdate = true;
351
343
 
352
344
  }
345
+ dispose() {
346
+
347
+ this.saoRenderTarget.dispose();
348
+ this.blurIntermediateRenderTarget.dispose();
349
+ this.beautyRenderTarget.dispose();
350
+ this.normalRenderTarget.dispose();
351
+ this.depthRenderTarget.dispose();
352
+ this.depthMaterial.dispose();
353
+ this.normalMaterial.dispose();
354
+ this.saoMaterial.dispose();
355
+ this.vBlurMaterial.dispose();
356
+ this.hBlurMaterial.dispose();
357
+ this.materialCopy.dispose();
358
+ this.depthCopy.dispose();
359
+ this.fsQuad.dispose();
353
360
 
354
- }
361
+ }
355
362
 
363
+ }
356
364
  SAOPass.OUTPUT = {
357
365
  'Beauty': 1,
358
366
  'Default': 0,