@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
@@ -18,11 +18,15 @@
18
18
  const solver = new AmmoLib.btSequentialImpulseConstraintSolver();
19
19
  const world = new AmmoLib.btDiscreteDynamicsWorld( dispatcher, broadphase, solver, collisionConfiguration );
20
20
  world.setGravity( new AmmoLib.btVector3( 0, - 9.8, 0 ) );
21
- const worldTransform = new AmmoLib.btTransform(); //
21
+ const worldTransform = new AmmoLib.btTransform();
22
+
23
+ //
22
24
 
23
25
  function getShape( geometry ) {
24
26
 
25
- const parameters = geometry.parameters; // TODO change type to is*
27
+ const parameters = geometry.parameters;
28
+
29
+ // TODO change type to is*
26
30
 
27
31
  if ( geometry.type === 'BoxGeometry' ) {
28
32
 
@@ -48,11 +52,9 @@
48
52
 
49
53
  const meshes = [];
50
54
  const meshMap = new WeakMap();
51
-
52
55
  function addMesh( mesh, mass = 0 ) {
53
56
 
54
57
  const shape = getShape( mesh.geometry );
55
-
56
58
  if ( shape !== null ) {
57
59
 
58
60
  if ( mesh.isInstancedMesh ) {
@@ -81,10 +83,9 @@
81
83
  const localInertia = new AmmoLib.btVector3( 0, 0, 0 );
82
84
  shape.calculateLocalInertia( mass, localInertia );
83
85
  const rbInfo = new AmmoLib.btRigidBodyConstructionInfo( mass, motionState, shape, localInertia );
84
- const body = new AmmoLib.btRigidBody( rbInfo ); // body.setFriction( 4 );
85
-
86
+ const body = new AmmoLib.btRigidBody( rbInfo );
87
+ // body.setFriction( 4 );
86
88
  world.addRigidBody( body );
87
-
88
89
  if ( mass > 0 ) {
89
90
 
90
91
  meshes.push( mesh );
@@ -98,7 +99,6 @@
98
99
 
99
100
  const array = mesh.instanceMatrix.array;
100
101
  const bodies = [];
101
-
102
102
  for ( let i = 0; i < mesh.count; i ++ ) {
103
103
 
104
104
  const index = i * 16;
@@ -121,8 +121,9 @@
121
121
 
122
122
  }
123
123
 
124
- } //
124
+ }
125
125
 
126
+ //
126
127
 
127
128
  function setMeshPosition( mesh, position, index = 0 ) {
128
129
 
@@ -147,34 +148,35 @@
147
148
 
148
149
  }
149
150
 
150
- } //
151
+ }
151
152
 
153
+ //
152
154
 
153
155
  let lastTime = 0;
154
-
155
156
  function step() {
156
157
 
157
158
  const time = performance.now();
158
-
159
159
  if ( lastTime > 0 ) {
160
160
 
161
- const delta = ( time - lastTime ) / 1000; // console.time( 'world.step' );
161
+ const delta = ( time - lastTime ) / 1000;
162
162
 
163
- world.stepSimulation( delta, 10 ); // console.timeEnd( 'world.step' );
163
+ // console.time( 'world.step' );
164
+ world.stepSimulation( delta, 10 );
165
+ // console.timeEnd( 'world.step' );
164
166
 
165
167
  }
166
168
 
167
- lastTime = time; //
169
+ lastTime = time;
170
+
171
+ //
168
172
 
169
173
  for ( let i = 0, l = meshes.length; i < l; i ++ ) {
170
174
 
171
175
  const mesh = meshes[ i ];
172
-
173
176
  if ( mesh.isInstancedMesh ) {
174
177
 
175
178
  const array = mesh.instanceMatrix.array;
176
179
  const bodies = meshMap.get( mesh );
177
-
178
180
  for ( let j = 0; j < bodies.length; j ++ ) {
179
181
 
180
182
  const body = bodies[ j ];
@@ -202,14 +204,15 @@
202
204
 
203
205
  }
204
206
 
205
- } // animate
207
+ }
206
208
 
209
+ // animate
207
210
 
208
211
  setInterval( step, 1000 / frameRate );
209
212
  return {
210
213
  addMesh: addMesh,
211
- setMeshPosition: setMeshPosition // addCompoundMesh
212
-
214
+ setMeshPosition: setMeshPosition
215
+ // addCompoundMesh
213
216
  };
214
217
 
215
218
  }
@@ -3,11 +3,15 @@
3
3
  async function OimoPhysics() {
4
4
 
5
5
  const frameRate = 60;
6
- const world = new OIMO.World( 2, new OIMO.Vec3( 0, - 9.8, 0 ) ); //
6
+ const world = new OIMO.World( 2, new OIMO.Vec3( 0, - 9.8, 0 ) );
7
+
8
+ //
7
9
 
8
10
  function getShape( geometry ) {
9
11
 
10
- const parameters = geometry.parameters; // TODO change type to is*
12
+ const parameters = geometry.parameters;
13
+
14
+ // TODO change type to is*
11
15
 
12
16
  if ( geometry.type === 'BoxGeometry' ) {
13
17
 
@@ -29,11 +33,9 @@
29
33
 
30
34
  const meshes = [];
31
35
  const meshMap = new WeakMap();
32
-
33
36
  function addMesh( mesh, mass = 0 ) {
34
37
 
35
38
  const shape = getShape( mesh.geometry );
36
-
37
39
  if ( shape !== null ) {
38
40
 
39
41
  if ( mesh.isInstancedMesh ) {
@@ -60,7 +62,6 @@
60
62
  const body = new OIMO.RigidBody( bodyConfig );
61
63
  body.addShape( new OIMO.Shape( shapeConfig ) );
62
64
  world.addRigidBody( body );
63
-
64
65
  if ( mass > 0 ) {
65
66
 
66
67
  meshes.push( mesh );
@@ -74,7 +75,6 @@
74
75
 
75
76
  const array = mesh.instanceMatrix.array;
76
77
  const bodies = [];
77
-
78
78
  for ( let i = 0; i < mesh.count; i ++ ) {
79
79
 
80
80
  const index = i * 16;
@@ -97,8 +97,9 @@
97
97
 
98
98
  }
99
99
 
100
- } //
100
+ }
101
101
 
102
+ //
102
103
 
103
104
  function setMeshPosition( mesh, position, index = 0 ) {
104
105
 
@@ -115,33 +116,33 @@
115
116
 
116
117
  }
117
118
 
118
- } //
119
+ }
119
120
 
121
+ //
120
122
 
121
123
  let lastTime = 0;
122
-
123
124
  function step() {
124
125
 
125
126
  const time = performance.now();
126
-
127
127
  if ( lastTime > 0 ) {
128
128
 
129
129
  // console.time( 'world.step' );
130
- world.step( 1 / frameRate ); // console.timeEnd( 'world.step' );
130
+ world.step( 1 / frameRate );
131
+ // console.timeEnd( 'world.step' );
131
132
 
132
133
  }
133
134
 
134
- lastTime = time; //
135
+ lastTime = time;
136
+
137
+ //
135
138
 
136
139
  for ( let i = 0, l = meshes.length; i < l; i ++ ) {
137
140
 
138
141
  const mesh = meshes[ i ];
139
-
140
142
  if ( mesh.isInstancedMesh ) {
141
143
 
142
144
  const array = mesh.instanceMatrix.array;
143
145
  const bodies = meshMap.get( mesh );
144
-
145
146
  for ( let j = 0; j < bodies.length; j ++ ) {
146
147
 
147
148
  const body = bodies[ j ];
@@ -161,14 +162,15 @@
161
162
 
162
163
  }
163
164
 
164
- } // animate
165
+ }
165
166
 
167
+ // animate
166
168
 
167
169
  setInterval( step, 1000 / frameRate );
168
170
  return {
169
171
  addMesh: addMesh,
170
- setMeshPosition: setMeshPosition // addCompoundMesh
171
-
172
+ setMeshPosition: setMeshPosition
173
+ // addCompoundMesh
172
174
  };
173
175
 
174
176
  }
@@ -108,10 +108,7 @@
108
108
  this.fsQuad = new THREE.FullScreenQuad( null );
109
109
 
110
110
  }
111
-
112
- render( renderer, writeBuffer, readBuffer, deltaTime
113
- /*, maskActive*/
114
- ) {
111
+ render( renderer, writeBuffer, readBuffer, deltaTime /*, maskActive*/ ) {
115
112
 
116
113
  if ( this.needsInit ) {
117
114
 
@@ -129,16 +126,18 @@
129
126
  this.fsQuad.material = this.materialLuminance;
130
127
  this.materialLuminance.uniforms.tDiffuse.value = readBuffer.texture;
131
128
  renderer.setRenderTarget( this.currentLuminanceRT );
132
- this.fsQuad.render( renderer ); //Use the new luminance values, the previous luminance and the frame delta to
133
- //adapt the luminance over time.
129
+ this.fsQuad.render( renderer );
134
130
 
131
+ //Use the new luminance values, the previous luminance and the frame delta to
132
+ //adapt the luminance over time.
135
133
  this.fsQuad.material = this.materialAdaptiveLum;
136
134
  this.materialAdaptiveLum.uniforms.delta.value = deltaTime;
137
135
  this.materialAdaptiveLum.uniforms.lastLum.value = this.previousLuminanceRT.texture;
138
136
  this.materialAdaptiveLum.uniforms.currentLum.value = this.currentLuminanceRT.texture;
139
137
  renderer.setRenderTarget( this.luminanceRT );
140
- this.fsQuad.render( renderer ); //Copy the new adapted luminance value so that it can be used by the next frame.
138
+ this.fsQuad.render( renderer );
141
139
 
140
+ //Copy the new adapted luminance value so that it can be used by the next frame.
142
141
  this.fsQuad.material = this.materialCopy;
143
142
  this.copyUniforms.tDiffuse.value = this.luminanceRT.texture;
144
143
  renderer.setRenderTarget( this.previousLuminanceRT );
@@ -148,7 +147,6 @@
148
147
 
149
148
  this.fsQuad.material = this.materialToneMap;
150
149
  this.materialToneMap.uniforms.tDiffuse.value = readBuffer.texture;
151
-
152
150
  if ( this.renderToScreen ) {
153
151
 
154
152
  renderer.setRenderTarget( null );
@@ -163,7 +161,6 @@
163
161
  }
164
162
 
165
163
  }
166
-
167
164
  reset() {
168
165
 
169
166
  // render targets
@@ -190,7 +187,9 @@
190
187
  this.luminanceRT.texture.generateMipmaps = false;
191
188
  this.previousLuminanceRT = new THREE.WebGLRenderTarget( this.resolution, this.resolution );
192
189
  this.previousLuminanceRT.texture.name = 'AdaptiveToneMappingPass.pl';
193
- this.previousLuminanceRT.texture.generateMipmaps = false; // We only need mipmapping for the current luminosity because we want a down-sampled version to sample in our adaptive shader
190
+ this.previousLuminanceRT.texture.generateMipmaps = false;
191
+
192
+ // We only need mipmapping for the current luminosity because we want a down-sampled version to sample in our adaptive shader
194
193
 
195
194
  const pars = {
196
195
  minFilter: THREE.LinearMipmapLinearFilter,
@@ -198,21 +197,21 @@
198
197
  };
199
198
  this.currentLuminanceRT = new THREE.WebGLRenderTarget( this.resolution, this.resolution, pars );
200
199
  this.currentLuminanceRT.texture.name = 'AdaptiveToneMappingPass.cl';
201
-
202
200
  if ( this.adaptive ) {
203
201
 
204
202
  this.materialToneMap.defines[ 'ADAPTED_LUMINANCE' ] = '';
205
203
  this.materialToneMap.uniforms.luminanceMap.value = this.luminanceRT.texture;
206
204
 
207
- } //Put something in the adaptive luminance texture so that the scene can render initially
208
-
205
+ }
209
206
 
207
+ //Put something in the adaptive luminance texture so that the scene can render initially
210
208
  this.fsQuad.material = new THREE.MeshBasicMaterial( {
211
209
  color: 0x777777
212
210
  } );
213
211
  this.materialLuminance.needsUpdate = true;
214
212
  this.materialAdaptiveLum.needsUpdate = true;
215
- this.materialToneMap.needsUpdate = true; // renderer.render( this.scene, this.camera, this.luminanceRT );
213
+ this.materialToneMap.needsUpdate = true;
214
+ // renderer.render( this.scene, this.camera, this.luminanceRT );
216
215
  // renderer.render( this.scene, this.camera, this.previousLuminanceRT );
217
216
  // renderer.render( this.scene, this.camera, this.currentLuminanceRT );
218
217
 
@@ -237,7 +236,6 @@
237
236
  this.materialToneMap.needsUpdate = true;
238
237
 
239
238
  }
240
-
241
239
  setAdaptionRate( rate ) {
242
240
 
243
241
  if ( rate ) {
@@ -247,7 +245,6 @@
247
245
  }
248
246
 
249
247
  }
250
-
251
248
  setMinLuminance( minLum ) {
252
249
 
253
250
  if ( minLum ) {
@@ -258,7 +255,6 @@
258
255
  }
259
256
 
260
257
  }
261
-
262
258
  setMaxLuminance( maxLum ) {
263
259
 
264
260
  if ( maxLum ) {
@@ -268,7 +264,6 @@
268
264
  }
269
265
 
270
266
  }
271
-
272
267
  setAverageLuminance( avgLum ) {
273
268
 
274
269
  if ( avgLum ) {
@@ -278,7 +273,6 @@
278
273
  }
279
274
 
280
275
  }
281
-
282
276
  setMiddleGrey( middleGrey ) {
283
277
 
284
278
  if ( middleGrey ) {
@@ -288,7 +282,6 @@
288
282
  }
289
283
 
290
284
  }
291
-
292
285
  dispose() {
293
286
 
294
287
  if ( this.luminanceRT ) {
@@ -15,27 +15,23 @@
15
15
  this.textureOld = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, {
16
16
  magFilter: THREE.NearestFilter
17
17
  } );
18
- this.shaderMaterial = new THREE.ShaderMaterial( {
18
+ this.compFsMaterial = new THREE.ShaderMaterial( {
19
19
  uniforms: this.uniforms,
20
20
  vertexShader: this.shader.vertexShader,
21
21
  fragmentShader: this.shader.fragmentShader
22
22
  } );
23
- this.compFsQuad = new THREE.FullScreenQuad( this.shaderMaterial );
24
- const material = new THREE.MeshBasicMaterial();
25
- this.copyFsQuad = new THREE.FullScreenQuad( material );
23
+ this.compFsQuad = new THREE.FullScreenQuad( this.compFsMaterial );
24
+ this.copyFsMaterial = new THREE.MeshBasicMaterial();
25
+ this.copyFsQuad = new THREE.FullScreenQuad( this.copyFsMaterial );
26
26
 
27
27
  }
28
-
29
- render( renderer, writeBuffer, readBuffer
30
- /*, deltaTime, maskActive*/
31
- ) {
28
+ render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive*/ ) {
32
29
 
33
30
  this.uniforms[ 'tOld' ].value = this.textureOld.texture;
34
31
  this.uniforms[ 'tNew' ].value = readBuffer.texture;
35
32
  renderer.setRenderTarget( this.textureComp );
36
33
  this.compFsQuad.render( renderer );
37
34
  this.copyFsQuad.material.map = this.textureComp.texture;
38
-
39
35
  if ( this.renderToScreen ) {
40
36
 
41
37
  renderer.setRenderTarget( null );
@@ -47,12 +43,13 @@
47
43
  if ( this.clear ) renderer.clear();
48
44
  this.copyFsQuad.render( renderer );
49
45
 
50
- } // Swap buffers.
51
-
46
+ }
52
47
 
48
+ // Swap buffers.
53
49
  const temp = this.textureOld;
54
50
  this.textureOld = this.textureComp;
55
- this.textureComp = temp; // Now textureOld contains the latest image, ready for the next frame.
51
+ this.textureComp = temp;
52
+ // Now textureOld contains the latest image, ready for the next frame.
56
53
 
57
54
  }
58
55
 
@@ -62,6 +59,16 @@
62
59
  this.textureOld.setSize( width, height );
63
60
 
64
61
  }
62
+ dispose() {
63
+
64
+ this.textureComp.dispose();
65
+ this.textureOld.dispose();
66
+ this.compFsMaterial.dispose();
67
+ this.copyFsMaterial.dispose();
68
+ this.compFsQuad.dispose();
69
+ this.copyFsQuad.dispose();
70
+
71
+ }
65
72
 
66
73
  }
67
74
 
@@ -2,14 +2,18 @@
2
2
 
3
3
  class BloomPass extends THREE.Pass {
4
4
 
5
- constructor( strength = 1, kernelSize = 25, sigma = 4, resolution = 256 ) {
5
+ constructor( strength = 1, kernelSize = 25, sigma = 4 ) {
6
6
 
7
- super(); // render targets
7
+ super();
8
8
 
9
- this.renderTargetX = new THREE.WebGLRenderTarget( resolution, resolution );
9
+ // render targets
10
+
11
+ this.renderTargetX = new THREE.WebGLRenderTarget(); // will be resized later
10
12
  this.renderTargetX.texture.name = 'BloomPass.x';
11
- this.renderTargetY = new THREE.WebGLRenderTarget( resolution, resolution );
12
- this.renderTargetY.texture.name = 'BloomPass.y'; // combine material
13
+ this.renderTargetY = new THREE.WebGLRenderTarget(); // will be resized later
14
+ this.renderTargetY.texture.name = 'BloomPass.y';
15
+
16
+ // combine material
13
17
 
14
18
  this.combineUniforms = THREE.UniformsUtils.clone( CombineShader.uniforms );
15
19
  this.combineUniforms[ 'strength' ].value = strength;
@@ -19,7 +23,9 @@
19
23
  fragmentShader: CombineShader.fragmentShader,
20
24
  blending: THREE.AdditiveBlending,
21
25
  transparent: true
22
- } ); // convolution material
26
+ } );
27
+
28
+ // convolution material
23
29
 
24
30
  if ( THREE.ConvolutionShader === undefined ) console.error( 'THREE.BloomPass relies on THREE.ConvolutionShader' );
25
31
  const convolutionShader = THREE.ConvolutionShader;
@@ -39,23 +45,28 @@
39
45
  this.fsQuad = new THREE.FullScreenQuad( null );
40
46
 
41
47
  }
42
-
43
48
  render( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {
44
49
 
45
- if ( maskActive ) renderer.state.buffers.stencil.setTest( false ); // Render quad with blured scene into texture (convolution pass 1)
50
+ if ( maskActive ) renderer.state.buffers.stencil.setTest( false );
51
+
52
+ // Render quad with blured scene into texture (convolution pass 1)
46
53
 
47
54
  this.fsQuad.material = this.materialConvolution;
48
55
  this.convolutionUniforms[ 'tDiffuse' ].value = readBuffer.texture;
49
56
  this.convolutionUniforms[ 'uImageIncrement' ].value = BloomPass.blurX;
50
57
  renderer.setRenderTarget( this.renderTargetX );
51
58
  renderer.clear();
52
- this.fsQuad.render( renderer ); // Render quad with blured scene into texture (convolution pass 2)
59
+ this.fsQuad.render( renderer );
60
+
61
+ // Render quad with blured scene into texture (convolution pass 2)
53
62
 
54
63
  this.convolutionUniforms[ 'tDiffuse' ].value = this.renderTargetX.texture;
55
64
  this.convolutionUniforms[ 'uImageIncrement' ].value = BloomPass.blurY;
56
65
  renderer.setRenderTarget( this.renderTargetY );
57
66
  renderer.clear();
58
- this.fsQuad.render( renderer ); // Render original scene with superimposed blur to texture
67
+ this.fsQuad.render( renderer );
68
+
69
+ // Render original scene with superimposed blur to texture
59
70
 
60
71
  this.fsQuad.material = this.materialCombine;
61
72
  this.combineUniforms[ 'tDiffuse' ].value = this.renderTargetY.texture;
@@ -65,9 +76,23 @@
65
76
  this.fsQuad.render( renderer );
66
77
 
67
78
  }
79
+ setSize( width, height ) {
68
80
 
69
- }
81
+ this.renderTargetX.setSize( width, height );
82
+ this.renderTargetY.setSize( width, height );
83
+
84
+ }
85
+ dispose() {
70
86
 
87
+ this.renderTargetX.dispose();
88
+ this.renderTargetY.dispose();
89
+ this.materialCombine.dispose();
90
+ this.materialConvolution.dispose();
91
+ this.fsQuad.dispose();
92
+
93
+ }
94
+
95
+ }
71
96
  const CombineShader = {
72
97
  uniforms: {
73
98
  'tDiffuse': {
@@ -77,9 +102,7 @@
77
102
  value: 1.0
78
103
  }
79
104
  },
80
- vertexShader:
81
- /* glsl */
82
- `
105
+ vertexShader: /* glsl */`
83
106
 
84
107
  varying vec2 vUv;
85
108
 
@@ -89,9 +112,7 @@
89
112
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
90
113
 
91
114
  }`,
92
- fragmentShader:
93
- /* glsl */
94
- `
115
+ fragmentShader: /* glsl */`
95
116
 
96
117
  uniform float strength;
97
118
 
@@ -14,19 +14,24 @@
14
14
  const focus = params.focus !== undefined ? params.focus : 1.0;
15
15
  const aspect = params.aspect !== undefined ? params.aspect : camera.aspect;
16
16
  const aperture = params.aperture !== undefined ? params.aperture : 0.025;
17
- const maxblur = params.maxblur !== undefined ? params.maxblur : 1.0; // render targets
17
+ const maxblur = params.maxblur !== undefined ? params.maxblur : 1.0;
18
18
 
19
- const width = params.width || window.innerWidth || 1;
20
- const height = params.height || window.innerHeight || 1;
21
- this.renderTargetDepth = new THREE.WebGLRenderTarget( width, height, {
19
+ // render targets
20
+
21
+ this.renderTargetDepth = new THREE.WebGLRenderTarget( 1, 1, {
22
+ // will be resized later
22
23
  minFilter: THREE.NearestFilter,
23
24
  magFilter: THREE.NearestFilter
24
25
  } );
25
- this.renderTargetDepth.texture.name = 'BokehPass.depth'; // depth material
26
+ this.renderTargetDepth.texture.name = 'BokehPass.depth';
27
+
28
+ // depth material
26
29
 
27
30
  this.materialDepth = new THREE.MeshDepthMaterial();
28
31
  this.materialDepth.depthPacking = THREE.RGBADepthPacking;
29
- this.materialDepth.blending = THREE.NoBlending; // bokeh material
32
+ this.materialDepth.blending = THREE.NoBlending;
33
+
34
+ // bokeh material
30
35
 
31
36
  if ( THREE.BokehShader === undefined ) {
32
37
 
@@ -55,12 +60,10 @@
55
60
  this._oldClearColor = new THREE.Color();
56
61
 
57
62
  }
58
-
59
- render( renderer, writeBuffer, readBuffer
60
- /*, deltaTime, maskActive*/
61
- ) {
63
+ render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive*/ ) {
62
64
 
63
65
  // Render depth into texture
66
+
64
67
  this.scene.overrideMaterial = this.materialDepth;
65
68
  renderer.getClearColor( this._oldClearColor );
66
69
  const oldClearAlpha = renderer.getClearAlpha();
@@ -70,12 +73,13 @@
70
73
  renderer.setClearAlpha( 1.0 );
71
74
  renderer.setRenderTarget( this.renderTargetDepth );
72
75
  renderer.clear();
73
- renderer.render( this.scene, this.camera ); // Render bokeh composite
76
+ renderer.render( this.scene, this.camera );
77
+
78
+ // Render bokeh composite
74
79
 
75
80
  this.uniforms[ 'tColor' ].value = readBuffer.texture;
76
81
  this.uniforms[ 'nearClip' ].value = this.camera.near;
77
82
  this.uniforms[ 'farClip' ].value = this.camera.far;
78
-
79
83
  if ( this.renderToScreen ) {
80
84
 
81
85
  renderer.setRenderTarget( null );
@@ -95,6 +99,19 @@
95
99
  renderer.autoClear = oldAutoClear;
96
100
 
97
101
  }
102
+ setSize( width, height ) {
103
+
104
+ this.renderTargetDepth.setSize( width, height );
105
+
106
+ }
107
+ dispose() {
108
+
109
+ this.renderTargetDepth.dispose();
110
+ this.materialDepth.dispose();
111
+ this.materialBokeh.dispose();
112
+ this.fsQuad.dispose();
113
+
114
+ }
98
115
 
99
116
  }
100
117
 
@@ -11,13 +11,9 @@
11
11
  this._oldClearColor = new THREE.Color();
12
12
 
13
13
  }
14
-
15
- render( renderer, writeBuffer, readBuffer
16
- /*, deltaTime, maskActive */
17
- ) {
14
+ render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
18
15
 
19
16
  let oldClearAlpha;
20
-
21
17
  if ( this.clearColor ) {
22
18
 
23
19
  renderer.getClearColor( this._oldClearColor );
@@ -28,7 +24,6 @@
28
24
 
29
25
  renderer.setRenderTarget( this.renderToScreen ? null : readBuffer );
30
26
  renderer.clear();
31
-
32
27
  if ( this.clearColor ) {
33
28
 
34
29
  renderer.setClearColor( this._oldClearColor, oldClearAlpha );