@plastic-software/three 0.167.4 → 0.174.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (747) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +36217 -23964
  4. package/build/three.core.js +48830 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +10175 -46744
  7. package/build/three.module.min.js +2 -3
  8. package/build/three.tsl.js +550 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +44348 -50671
  11. package/build/three.webgpu.min.js +2 -3
  12. package/build/three.webgpu.nodes.js +70301 -0
  13. package/build/three.webgpu.nodes.min.js +6 -0
  14. package/examples/jsm/Addons.js +3 -15
  15. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  16. package/examples/jsm/animation/CCDIKSolver.js +61 -11
  17. package/examples/jsm/capabilities/WebGL.js +27 -21
  18. package/examples/jsm/capabilities/WebGPU.js +1 -10
  19. package/examples/jsm/controls/ArcballControls.js +262 -231
  20. package/examples/jsm/controls/DragControls.js +1 -1
  21. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  22. package/examples/jsm/controls/FlyControls.js +194 -188
  23. package/examples/jsm/controls/OrbitControls.js +801 -777
  24. package/examples/jsm/controls/PointerLockControls.js +26 -20
  25. package/examples/jsm/controls/TrackballControls.js +469 -448
  26. package/examples/jsm/controls/TransformControls.js +119 -68
  27. package/examples/jsm/csm/CSM.js +2 -2
  28. package/examples/jsm/csm/CSMFrustum.js +7 -4
  29. package/examples/jsm/csm/CSMHelper.js +2 -0
  30. package/examples/jsm/csm/CSMShadowNode.js +442 -0
  31. package/examples/jsm/curves/NURBSCurve.js +33 -2
  32. package/examples/jsm/curves/NURBSUtils.js +3 -0
  33. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  34. package/examples/jsm/effects/OutlineEffect.js +1 -1
  35. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  36. package/examples/jsm/effects/StereoEffect.js +6 -1
  37. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  38. package/examples/jsm/exporters/EXRExporter.js +19 -11
  39. package/examples/jsm/exporters/GLTFExporter.js +181 -109
  40. package/examples/jsm/exporters/KTX2Exporter.js +54 -23
  41. package/examples/jsm/exporters/OBJExporter.js +5 -1
  42. package/examples/jsm/exporters/PLYExporter.js +11 -9
  43. package/examples/jsm/exporters/USDZExporter.js +50 -11
  44. package/examples/jsm/geometries/DecalGeometry.js +73 -21
  45. package/examples/jsm/geometries/TextGeometry.js +1 -12
  46. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  47. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  48. package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
  49. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  50. package/examples/jsm/interactive/HTMLMesh.js +1 -0
  51. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  52. package/examples/jsm/interactive/SelectionHelper.js +3 -1
  53. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  54. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  55. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  56. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  57. package/examples/jsm/lighting/TiledLighting.js +18 -0
  58. package/examples/jsm/lights/LightProbeGenerator.js +26 -12
  59. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  60. package/examples/jsm/lines/LineGeometry.js +25 -0
  61. package/examples/jsm/lines/LineMaterial.js +0 -1
  62. package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
  63. package/examples/jsm/lines/webgpu/Line2.js +2 -1
  64. package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
  65. package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
  66. package/examples/jsm/loaders/3DMLoader.js +1 -0
  67. package/examples/jsm/loaders/3MFLoader.js +104 -2
  68. package/examples/jsm/loaders/BVHLoader.js +1 -1
  69. package/examples/jsm/loaders/ColladaLoader.js +15 -12
  70. package/examples/jsm/loaders/DDSLoader.js +42 -0
  71. package/examples/jsm/loaders/DRACOLoader.js +3 -1
  72. package/examples/jsm/loaders/FBXLoader.js +71 -22
  73. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  74. package/examples/jsm/loaders/GLTFLoader.js +29 -14
  75. package/examples/jsm/loaders/KTX2Loader.js +160 -58
  76. package/examples/jsm/loaders/KTXLoader.js +4 -4
  77. package/examples/jsm/loaders/LDrawLoader.js +22 -136
  78. package/examples/jsm/loaders/LottieLoader.js +2 -1
  79. package/examples/jsm/loaders/MTLLoader.js +27 -7
  80. package/examples/jsm/loaders/MaterialXLoader.js +40 -14
  81. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  82. package/examples/jsm/loaders/OBJLoader.js +5 -3
  83. package/examples/jsm/loaders/PCDLoader.js +14 -13
  84. package/examples/jsm/loaders/PDBLoader.js +3 -2
  85. package/examples/jsm/loaders/PLYLoader.js +15 -12
  86. package/examples/jsm/loaders/PVRLoader.js +1 -1
  87. package/examples/jsm/loaders/STLLoader.js +3 -2
  88. package/examples/jsm/loaders/SVGLoader.js +2 -2
  89. package/examples/jsm/loaders/TDSLoader.js +17 -18
  90. package/examples/jsm/loaders/VRMLLoader.js +17 -17
  91. package/examples/jsm/loaders/VTKLoader.js +4 -3
  92. package/examples/jsm/loaders/XYZLoader.js +3 -2
  93. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  94. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
  95. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
  96. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  97. package/examples/jsm/math/ColorSpaces.js +76 -0
  98. package/examples/jsm/math/ConvexHull.js +1 -1
  99. package/examples/jsm/math/OBB.js +17 -0
  100. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  101. package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
  102. package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
  103. package/examples/jsm/misc/Timer.js +27 -12
  104. package/examples/jsm/misc/Volume.js +28 -18
  105. package/examples/jsm/misc/VolumeSlice.js +19 -16
  106. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  107. package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
  108. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  109. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  110. package/examples/jsm/objects/LensflareMesh.js +324 -0
  111. package/examples/jsm/objects/Reflector.js +5 -2
  112. package/examples/jsm/objects/Sky.js +2 -2
  113. package/examples/jsm/objects/SkyMesh.js +14 -14
  114. package/examples/jsm/objects/Water2.js +1 -1
  115. package/examples/jsm/objects/Water2Mesh.js +11 -9
  116. package/examples/jsm/objects/WaterMesh.js +38 -33
  117. package/examples/jsm/physics/JoltPhysics.js +8 -8
  118. package/examples/jsm/physics/RapierPhysics.js +5 -5
  119. package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
  120. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  121. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  122. package/examples/jsm/postprocessing/OutlinePass.js +37 -51
  123. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  124. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  125. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  126. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  127. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  128. package/examples/jsm/postprocessing/SSRPass.js +8 -4
  129. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  130. package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
  131. package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
  132. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  133. package/examples/jsm/shaders/BokehShader2.js +1 -1
  134. package/examples/jsm/shaders/FXAAShader.js +225 -224
  135. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  136. package/examples/jsm/shaders/OutputShader.js +6 -2
  137. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  138. package/examples/jsm/transpiler/AST.js +12 -2
  139. package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
  140. package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
  141. package/examples/jsm/transpiler/TSLEncoder.js +96 -21
  142. package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
  143. package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
  144. package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
  145. package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
  146. package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
  147. package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
  148. package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
  149. package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
  150. package/examples/jsm/tsl/display/FXAANode.js +364 -0
  151. package/examples/jsm/tsl/display/FilmNode.js +100 -0
  152. package/examples/jsm/tsl/display/GTAONode.js +521 -0
  153. package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
  154. package/examples/jsm/tsl/display/LensflareNode.js +278 -0
  155. package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
  156. package/examples/jsm/tsl/display/MotionBlur.js +33 -0
  157. package/examples/jsm/tsl/display/OutlineNode.js +750 -0
  158. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
  159. package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
  160. package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
  161. package/examples/jsm/tsl/display/SMAANode.js +767 -0
  162. package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
  163. package/examples/jsm/tsl/display/SSRNode.js +538 -0
  164. package/examples/jsm/tsl/display/Sepia.js +24 -0
  165. package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
  166. package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
  167. package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
  168. package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
  169. package/examples/jsm/tsl/display/TransitionNode.js +140 -0
  170. package/examples/jsm/tsl/display/hashBlur.js +34 -0
  171. package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
  172. package/examples/jsm/tsl/math/Bayer.js +18 -0
  173. package/examples/jsm/tsl/utils/Raymarching.js +65 -0
  174. package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
  175. package/examples/jsm/utils/CameraUtils.js +4 -1
  176. package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
  177. package/examples/jsm/utils/GeometryUtils.js +22 -19
  178. package/examples/jsm/utils/SceneOptimizer.js +410 -0
  179. package/examples/jsm/utils/SceneUtils.js +2 -2
  180. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  181. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  182. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  183. package/examples/jsm/utils/UVsDebug.js +1 -1
  184. package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
  185. package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
  186. package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
  187. package/examples/jsm/webxr/Text2D.js +6 -6
  188. package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
  189. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  190. package/package.json +14 -9
  191. package/src/Three.Core.js +182 -0
  192. package/src/Three.Legacy.js +0 -21
  193. package/src/Three.TSL.js +543 -0
  194. package/src/Three.WebGPU.Nodes.js +23 -0
  195. package/src/Three.WebGPU.js +13 -184
  196. package/src/Three.js +1 -176
  197. package/src/animation/AnimationClip.js +2 -2
  198. package/src/animation/AnimationObjectGroup.js +2 -2
  199. package/src/animation/AnimationUtils.js +1 -1
  200. package/src/animation/PropertyBinding.js +2 -2
  201. package/src/audio/Audio.js +379 -2
  202. package/src/audio/AudioAnalyser.js +58 -1
  203. package/src/audio/AudioContext.js +15 -0
  204. package/src/audio/AudioListener.js +76 -0
  205. package/src/audio/PositionalAudio.js +107 -0
  206. package/src/cameras/ArrayCamera.js +29 -0
  207. package/src/cameras/Camera.js +47 -0
  208. package/src/cameras/CubeCamera.js +66 -0
  209. package/src/cameras/OrthographicCamera.js +109 -0
  210. package/src/cameras/PerspectiveCamera.js +173 -34
  211. package/src/cameras/StereoCamera.js +48 -2
  212. package/src/constants.js +6 -6
  213. package/src/core/BufferAttribute.js +4 -9
  214. package/src/core/BufferGeometry.js +48 -8
  215. package/src/core/Clock.js +1 -1
  216. package/src/core/EventDispatcher.js +52 -8
  217. package/src/core/InterleavedBuffer.js +4 -13
  218. package/src/core/Object3D.js +573 -3
  219. package/src/core/RenderTarget.js +22 -4
  220. package/src/core/RenderTarget3D.js +22 -0
  221. package/src/core/RenderTargetArray.js +22 -0
  222. package/src/extras/Controls.js +104 -0
  223. package/src/extras/DataUtils.js +48 -8
  224. package/src/extras/Earcut.js +18 -7
  225. package/src/extras/ImageUtils.js +18 -11
  226. package/src/extras/PMREMGenerator.js +40 -9
  227. package/src/extras/ShapeUtils.js +24 -2
  228. package/src/extras/TextureUtils.js +96 -10
  229. package/src/extras/core/Curve.js +153 -53
  230. package/src/extras/core/CurvePath.js +63 -22
  231. package/src/extras/core/Interpolations.js +29 -3
  232. package/src/extras/core/Path.js +134 -1
  233. package/src/extras/core/Shape.js +66 -3
  234. package/src/extras/core/ShapePath.js +76 -0
  235. package/src/extras/curves/ArcCurve.js +22 -0
  236. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  237. package/src/extras/curves/CubicBezierCurve.js +67 -0
  238. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  239. package/src/extras/curves/EllipseCurve.js +102 -0
  240. package/src/extras/curves/LineCurve.js +36 -0
  241. package/src/extras/curves/LineCurve3.js +36 -0
  242. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  243. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  244. package/src/extras/curves/SplineCurve.js +48 -0
  245. package/src/geometries/BoxGeometry.js +38 -0
  246. package/src/geometries/CapsuleGeometry.js +34 -0
  247. package/src/geometries/CircleGeometry.js +40 -0
  248. package/src/geometries/ConeGeometry.js +38 -0
  249. package/src/geometries/CylinderGeometry.js +50 -4
  250. package/src/geometries/DodecahedronGeometry.js +32 -0
  251. package/src/geometries/EdgesGeometry.js +30 -2
  252. package/src/geometries/ExtrudeGeometry.js +52 -0
  253. package/src/geometries/IcosahedronGeometry.js +32 -0
  254. package/src/geometries/LatheGeometry.js +43 -3
  255. package/src/geometries/OctahedronGeometry.js +32 -0
  256. package/src/geometries/PlaneGeometry.js +34 -0
  257. package/src/geometries/PolyhedronGeometry.js +29 -0
  258. package/src/geometries/RingGeometry.js +36 -0
  259. package/src/geometries/ShapeGeometry.js +37 -0
  260. package/src/geometries/SphereGeometry.js +37 -0
  261. package/src/geometries/TetrahedronGeometry.js +32 -0
  262. package/src/geometries/TorusGeometry.js +35 -0
  263. package/src/geometries/TorusKnotGeometry.js +38 -0
  264. package/src/geometries/TubeGeometry.js +49 -0
  265. package/src/geometries/WireframeGeometry.js +32 -0
  266. package/src/helpers/ArrowHelper.js +60 -3
  267. package/src/helpers/AxesHelper.js +28 -0
  268. package/src/helpers/Box3Helper.js +28 -0
  269. package/src/helpers/BoxHelper.js +43 -7
  270. package/src/helpers/CameraHelper.js +61 -18
  271. package/src/helpers/DirectionalLightHelper.js +52 -0
  272. package/src/helpers/GridHelper.js +26 -0
  273. package/src/helpers/HemisphereLightHelper.js +39 -0
  274. package/src/helpers/PlaneHelper.js +33 -0
  275. package/src/helpers/PointLightHelper.js +43 -0
  276. package/src/helpers/PolarGridHelper.js +30 -0
  277. package/src/helpers/SkeletonHelper.js +39 -2
  278. package/src/helpers/SpotLightHelper.js +40 -0
  279. package/src/lights/AmbientLight.js +25 -0
  280. package/src/lights/DirectionalLight.js +57 -0
  281. package/src/lights/DirectionalLightShadow.js +15 -0
  282. package/src/lights/HemisphereLight.js +32 -0
  283. package/src/lights/Light.js +36 -0
  284. package/src/lights/LightProbe.js +43 -0
  285. package/src/lights/LightShadow.js +159 -0
  286. package/src/lights/PointLight.js +59 -0
  287. package/src/lights/PointLightShadow.js +21 -0
  288. package/src/lights/RectAreaLight.js +59 -0
  289. package/src/lights/SpotLight.js +102 -0
  290. package/src/lights/SpotLightShadow.js +24 -2
  291. package/src/lights/webgpu/IESSpotLight.js +21 -0
  292. package/src/loaders/Loader.js +132 -0
  293. package/src/loaders/MaterialLoader.js +7 -1
  294. package/src/loaders/nodes/NodeLoader.js +189 -0
  295. package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
  296. package/src/loaders/nodes/NodeObjectLoader.js +151 -0
  297. package/src/materials/LineDashedMaterial.js +0 -1
  298. package/src/materials/Material.js +469 -7
  299. package/src/materials/MeshPhongMaterial.js +1 -1
  300. package/src/materials/MeshPhysicalMaterial.js +2 -2
  301. package/src/materials/MeshStandardMaterial.js +2 -2
  302. package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
  303. package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
  304. package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
  305. package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
  306. package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
  307. package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
  308. package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
  309. package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
  310. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
  311. package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
  312. package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
  313. package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
  314. package/src/materials/nodes/NodeMaterial.js +1180 -0
  315. package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
  316. package/src/materials/nodes/PointsNodeMaterial.js +153 -0
  317. package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
  318. package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
  319. package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
  320. package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
  321. package/src/math/Box2.js +177 -0
  322. package/src/math/Box3.js +243 -0
  323. package/src/math/Color.js +343 -0
  324. package/src/math/ColorManagement.js +143 -102
  325. package/src/math/Cylindrical.js +65 -6
  326. package/src/math/Euler.js +137 -4
  327. package/src/math/Frustum.js +83 -0
  328. package/src/math/Interpolant.js +87 -8
  329. package/src/math/Line3.js +96 -2
  330. package/src/math/MathUtils.js +182 -19
  331. package/src/math/Matrix2.js +70 -0
  332. package/src/math/Matrix3.js +229 -4
  333. package/src/math/Matrix4.js +368 -3
  334. package/src/math/Plane.js +164 -2
  335. package/src/math/Quaternion.js +265 -9
  336. package/src/math/Ray.js +160 -0
  337. package/src/math/Sphere.js +147 -0
  338. package/src/math/Spherical.js +73 -11
  339. package/src/math/SphericalHarmonics3.js +112 -14
  340. package/src/math/Triangle.js +230 -2
  341. package/src/math/Vector2.js +396 -10
  342. package/src/math/Vector3.js +550 -13
  343. package/src/math/Vector4.js +415 -9
  344. package/src/math/interpolants/CubicInterpolant.js +10 -1
  345. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  346. package/src/math/interpolants/LinearInterpolant.js +13 -0
  347. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  348. package/src/nodes/Nodes.js +84 -166
  349. package/src/nodes/TSL.js +167 -0
  350. package/src/nodes/accessors/AccessorsUtils.js +39 -10
  351. package/src/nodes/accessors/Arrays.js +68 -0
  352. package/src/nodes/accessors/BatchNode.js +93 -26
  353. package/src/nodes/accessors/Bitangent.js +54 -0
  354. package/src/nodes/accessors/BufferAttributeNode.js +189 -11
  355. package/src/nodes/accessors/BufferNode.js +70 -5
  356. package/src/nodes/accessors/BuiltinNode.js +63 -0
  357. package/src/nodes/accessors/Camera.js +129 -0
  358. package/src/nodes/accessors/ClippingNode.js +152 -43
  359. package/src/nodes/accessors/CubeTextureNode.js +76 -13
  360. package/src/nodes/accessors/InstanceNode.js +118 -35
  361. package/src/nodes/accessors/InstancedMeshNode.js +50 -0
  362. package/src/nodes/accessors/Lights.js +129 -0
  363. package/src/nodes/accessors/MaterialNode.js +394 -58
  364. package/src/nodes/accessors/MaterialProperties.js +57 -1
  365. package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
  366. package/src/nodes/accessors/ModelNode.js +159 -12
  367. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
  368. package/src/nodes/accessors/MorphNode.js +60 -13
  369. package/src/nodes/accessors/Normal.js +156 -0
  370. package/src/nodes/accessors/Object3DNode.js +154 -35
  371. package/src/nodes/accessors/PointUVNode.js +35 -6
  372. package/src/nodes/accessors/Position.js +64 -0
  373. package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
  374. package/src/nodes/accessors/ReferenceNode.js +243 -6
  375. package/src/nodes/accessors/ReflectVector.js +36 -0
  376. package/src/nodes/accessors/RendererReferenceNode.js +57 -7
  377. package/src/nodes/accessors/SceneNode.js +98 -6
  378. package/src/nodes/accessors/SkinningNode.js +214 -21
  379. package/src/nodes/accessors/StorageBufferNode.js +288 -28
  380. package/src/nodes/accessors/StorageTextureNode.js +139 -12
  381. package/src/nodes/accessors/Tangent.js +62 -0
  382. package/src/nodes/accessors/Texture3DNode.js +98 -12
  383. package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
  384. package/src/nodes/accessors/TextureNode.js +347 -34
  385. package/src/nodes/accessors/TextureSizeNode.js +51 -9
  386. package/src/nodes/accessors/UV.js +11 -0
  387. package/src/nodes/accessors/UniformArrayNode.js +241 -32
  388. package/src/nodes/accessors/UserDataNode.js +55 -7
  389. package/src/nodes/accessors/VelocityNode.js +223 -0
  390. package/src/nodes/accessors/VertexColorNode.js +45 -6
  391. package/src/nodes/code/CodeNode.js +108 -8
  392. package/src/nodes/code/ExpressionNode.js +38 -7
  393. package/src/nodes/code/FunctionCallNode.js +62 -11
  394. package/src/nodes/code/FunctionNode.js +54 -24
  395. package/src/nodes/code/ScriptableNode.js +241 -17
  396. package/src/nodes/code/ScriptableValueNode.js +93 -8
  397. package/src/nodes/core/ArrayNode.js +142 -0
  398. package/src/nodes/core/AssignNode.js +60 -12
  399. package/src/nodes/core/AttributeNode.js +55 -22
  400. package/src/nodes/core/BypassNode.js +59 -11
  401. package/src/nodes/core/CacheNode.js +64 -10
  402. package/src/nodes/core/ConstNode.js +38 -3
  403. package/src/nodes/core/ContextNode.js +87 -12
  404. package/src/nodes/core/IndexNode.js +102 -10
  405. package/src/nodes/core/InputNode.js +55 -3
  406. package/src/nodes/core/LightingModel.js +65 -5
  407. package/src/nodes/core/MRTNode.js +81 -7
  408. package/src/nodes/core/Node.js +368 -50
  409. package/src/nodes/core/NodeAttribute.js +38 -0
  410. package/src/nodes/core/NodeBuilder.js +1317 -83
  411. package/src/nodes/core/NodeCache.js +41 -2
  412. package/src/nodes/core/NodeCode.js +31 -0
  413. package/src/nodes/core/NodeFrame.js +123 -2
  414. package/src/nodes/core/NodeFunction.js +46 -0
  415. package/src/nodes/core/NodeFunctionInput.js +44 -0
  416. package/src/nodes/core/NodeParser.js +11 -0
  417. package/src/nodes/core/NodeUniform.js +52 -0
  418. package/src/nodes/core/NodeUtils.js +226 -6
  419. package/src/nodes/core/NodeVar.js +47 -1
  420. package/src/nodes/core/NodeVarying.js +28 -0
  421. package/src/nodes/core/OutputStructNode.js +61 -17
  422. package/src/nodes/core/ParameterNode.js +34 -4
  423. package/src/nodes/core/PropertyNode.js +296 -32
  424. package/src/nodes/core/StackNode.js +108 -8
  425. package/src/nodes/core/StructNode.js +120 -0
  426. package/src/nodes/core/StructType.js +13 -0
  427. package/src/nodes/core/StructTypeNode.js +116 -9
  428. package/src/nodes/core/TempNode.js +37 -7
  429. package/src/nodes/core/UniformGroupNode.js +98 -17
  430. package/src/nodes/core/UniformNode.js +72 -4
  431. package/src/nodes/core/VarNode.js +170 -13
  432. package/src/nodes/core/VaryingNode.js +109 -8
  433. package/src/nodes/core/constants.js +40 -0
  434. package/src/nodes/display/BlendModes.js +193 -0
  435. package/src/nodes/display/BumpMapNode.js +47 -10
  436. package/src/nodes/display/ColorAdjustment.js +141 -0
  437. package/src/nodes/display/ColorSpaceFunctions.js +54 -0
  438. package/src/nodes/display/ColorSpaceNode.js +147 -68
  439. package/src/nodes/display/FrontFacingNode.js +39 -6
  440. package/src/nodes/display/NormalMapNode.js +55 -13
  441. package/src/nodes/display/PassNode.js +420 -19
  442. package/src/nodes/display/PosterizeNode.js +40 -7
  443. package/src/nodes/display/RenderOutputNode.js +81 -13
  444. package/src/nodes/display/ScreenNode.js +286 -0
  445. package/src/nodes/display/ToneMappingFunctions.js +242 -0
  446. package/src/nodes/display/ToneMappingNode.js +68 -175
  447. package/src/nodes/display/ToonOutlinePassNode.js +183 -0
  448. package/src/nodes/display/ViewportDepthNode.js +210 -36
  449. package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
  450. package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
  451. package/src/nodes/display/ViewportTextureNode.js +68 -11
  452. package/src/nodes/fog/Fog.js +113 -0
  453. package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  454. package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  455. package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  456. package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
  457. package/src/nodes/functions/BSDF/D_GGX.js +2 -2
  458. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  459. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  460. package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
  461. package/src/nodes/functions/BSDF/LTC.js +50 -6
  462. package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  463. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  464. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  465. package/src/nodes/functions/BasicLightingModel.js +27 -6
  466. package/src/nodes/functions/PhongLightingModel.js +38 -8
  467. package/src/nodes/functions/PhysicalLightingModel.js +215 -51
  468. package/src/nodes/functions/ShadowMaskModel.js +24 -1
  469. package/src/nodes/functions/ToonLightingModel.js +24 -5
  470. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  471. package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  472. package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
  473. package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  474. package/src/nodes/functions/material/getRoughness.js +2 -2
  475. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  476. package/src/nodes/geometry/RangeNode.js +62 -7
  477. package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
  478. package/src/nodes/gpgpu/BarrierNode.js +89 -0
  479. package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
  480. package/src/nodes/gpgpu/ComputeNode.js +124 -9
  481. package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
  482. package/src/nodes/lighting/AONode.js +24 -3
  483. package/src/nodes/lighting/AmbientLightNode.js +16 -8
  484. package/src/nodes/lighting/AnalyticLightNode.js +151 -231
  485. package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
  486. package/src/nodes/lighting/BasicLightMapNode.js +25 -5
  487. package/src/nodes/lighting/DirectionalLightNode.js +19 -20
  488. package/src/nodes/lighting/EnvironmentNode.js +34 -17
  489. package/src/nodes/lighting/HemisphereLightNode.js +42 -11
  490. package/src/nodes/lighting/IESSpotLightNode.js +18 -9
  491. package/src/nodes/lighting/IrradianceNode.js +23 -3
  492. package/src/nodes/lighting/LightProbeNode.js +29 -36
  493. package/src/nodes/lighting/LightUtils.js +12 -4
  494. package/src/nodes/lighting/LightingContextNode.js +70 -21
  495. package/src/nodes/lighting/LightingNode.js +22 -9
  496. package/src/nodes/lighting/LightsNode.js +309 -86
  497. package/src/nodes/lighting/PointLightNode.js +66 -32
  498. package/src/nodes/lighting/PointShadowNode.js +306 -0
  499. package/src/nodes/lighting/RectAreaLightNode.js +61 -25
  500. package/src/nodes/lighting/ShadowBaseNode.js +92 -0
  501. package/src/nodes/lighting/ShadowNode.js +812 -0
  502. package/src/nodes/lighting/SpotLightNode.js +73 -31
  503. package/src/nodes/materialx/MaterialXNodes.js +2 -2
  504. package/src/nodes/materialx/lib/mx_hsv.js +27 -22
  505. package/src/nodes/materialx/lib/mx_noise.js +70 -70
  506. package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
  507. package/src/nodes/math/ConditionalNode.js +230 -0
  508. package/src/nodes/math/Hash.js +21 -0
  509. package/src/nodes/math/MathNode.js +812 -131
  510. package/src/nodes/math/MathUtils.js +47 -8
  511. package/src/nodes/math/OperatorNode.js +410 -66
  512. package/src/nodes/math/TriNoise3D.js +32 -32
  513. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  514. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  515. package/src/nodes/pmrem/PMREMNode.js +188 -28
  516. package/src/nodes/pmrem/PMREMUtils.js +24 -24
  517. package/src/nodes/procedural/Checker.js +22 -0
  518. package/src/nodes/shapes/Shapes.js +32 -0
  519. package/src/nodes/tsl/TSLBase.js +31 -0
  520. package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
  521. package/src/nodes/utils/ArrayElementNode.js +45 -5
  522. package/src/nodes/utils/ConvertNode.js +39 -4
  523. package/src/nodes/utils/CubeMapNode.js +88 -8
  524. package/src/nodes/utils/Discard.js +24 -0
  525. package/src/nodes/utils/EquirectUVNode.js +39 -7
  526. package/src/nodes/utils/FlipNode.js +106 -0
  527. package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
  528. package/src/nodes/utils/JoinNode.js +31 -3
  529. package/src/nodes/utils/LoopNode.js +95 -9
  530. package/src/nodes/utils/MatcapUVNode.js +27 -8
  531. package/src/nodes/utils/MaxMipLevelNode.js +57 -6
  532. package/src/nodes/utils/MemberNode.js +68 -0
  533. package/src/nodes/utils/Oscillators.js +41 -0
  534. package/src/nodes/utils/Packing.js +21 -0
  535. package/src/nodes/utils/PostProcessingUtils.js +95 -0
  536. package/src/nodes/utils/RTTNode.js +141 -9
  537. package/src/nodes/utils/ReflectorNode.js +295 -21
  538. package/src/nodes/utils/RemapNode.js +93 -10
  539. package/src/nodes/utils/RotateNode.js +48 -13
  540. package/src/nodes/utils/SetNode.js +50 -4
  541. package/src/nodes/utils/SplitNode.js +62 -6
  542. package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
  543. package/src/nodes/utils/SpriteUtils.js +21 -5
  544. package/src/nodes/utils/StorageArrayElementNode.js +64 -12
  545. package/src/nodes/utils/Timer.js +73 -0
  546. package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
  547. package/src/nodes/utils/UVUtils.js +27 -9
  548. package/src/nodes/utils/ViewportUtils.js +16 -4
  549. package/src/objects/BatchedMesh.js +808 -281
  550. package/src/objects/Bone.js +24 -0
  551. package/src/objects/ClippingGroup.js +68 -0
  552. package/src/objects/Group.js +24 -0
  553. package/src/objects/InstancedMesh.js +120 -2
  554. package/src/objects/LOD.js +120 -5
  555. package/src/objects/Line.js +89 -6
  556. package/src/objects/LineLoop.js +20 -0
  557. package/src/objects/LineSegments.js +18 -0
  558. package/src/objects/Mesh.js +82 -23
  559. package/src/objects/Points.js +62 -0
  560. package/src/objects/Skeleton.js +107 -2
  561. package/src/objects/SkinnedMesh.js +99 -5
  562. package/src/objects/Sprite.js +54 -0
  563. package/src/renderers/WebGLRenderer.js +274 -157
  564. package/src/renderers/common/Animation.js +109 -12
  565. package/src/renderers/common/Attributes.js +40 -0
  566. package/src/renderers/common/Backend.js +504 -44
  567. package/src/renderers/common/Background.js +67 -9
  568. package/src/renderers/common/BindGroup.js +45 -1
  569. package/src/renderers/common/Binding.js +35 -0
  570. package/src/renderers/common/Bindings.js +136 -19
  571. package/src/renderers/common/Buffer.js +49 -0
  572. package/src/renderers/common/BufferUtils.js +25 -0
  573. package/src/renderers/common/BundleGroup.js +83 -0
  574. package/src/renderers/common/ChainMap.js +45 -6
  575. package/src/renderers/common/ClippingContext.js +175 -80
  576. package/src/renderers/common/Color4.js +40 -0
  577. package/src/renderers/common/ComputePipeline.js +24 -0
  578. package/src/renderers/common/Constants.js +2 -1
  579. package/src/renderers/common/CubeRenderTarget.js +22 -3
  580. package/src/renderers/common/DataMap.js +37 -1
  581. package/src/renderers/common/Geometries.js +111 -14
  582. package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  583. package/src/renderers/common/Info.js +78 -35
  584. package/src/renderers/common/Lighting.js +73 -0
  585. package/src/renderers/common/Pipeline.js +22 -0
  586. package/src/renderers/common/Pipelines.js +148 -5
  587. package/src/renderers/common/PostProcessing.js +112 -11
  588. package/src/renderers/common/ProgrammableStage.js +60 -2
  589. package/src/renderers/common/QuadMesh.js +56 -5
  590. package/src/renderers/common/RenderBundle.js +14 -8
  591. package/src/renderers/common/RenderBundles.js +39 -10
  592. package/src/renderers/common/RenderContext.js +205 -7
  593. package/src/renderers/common/RenderContexts.js +59 -6
  594. package/src/renderers/common/RenderList.js +230 -21
  595. package/src/renderers/common/RenderLists.js +45 -6
  596. package/src/renderers/common/RenderObject.js +552 -41
  597. package/src/renderers/common/RenderObjects.js +118 -9
  598. package/src/renderers/common/RenderPipeline.js +24 -0
  599. package/src/renderers/common/Renderer.js +1537 -239
  600. package/src/renderers/common/RendererUtils.js +191 -0
  601. package/src/renderers/common/SampledTexture.js +132 -3
  602. package/src/renderers/common/Sampler.js +30 -0
  603. package/src/renderers/common/StorageBuffer.js +24 -0
  604. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  605. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  606. package/src/renderers/common/StorageTexture.js +38 -0
  607. package/src/renderers/common/Textures.js +142 -32
  608. package/src/renderers/common/TimestampQueryPool.js +98 -0
  609. package/src/renderers/common/Uniform.js +225 -3
  610. package/src/renderers/common/UniformBuffer.js +19 -0
  611. package/src/renderers/common/UniformsGroup.js +157 -6
  612. package/src/renderers/common/XRManager.js +1185 -0
  613. package/src/renderers/common/XRRenderTarget.js +74 -0
  614. package/src/renderers/common/extras/PMREMGenerator.js +211 -53
  615. package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
  616. package/src/renderers/common/nodes/NodeLibrary.js +194 -0
  617. package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
  618. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  619. package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
  620. package/src/renderers/common/nodes/NodeUniform.js +285 -2
  621. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  622. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  623. package/src/renderers/common/nodes/Nodes.js +390 -70
  624. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
  625. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  626. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  627. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
  628. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  629. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  630. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  631. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  632. package/src/renderers/webgl/WebGLBackground.js +24 -1
  633. package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
  634. package/src/renderers/webgl/WebGLCapabilities.js +2 -0
  635. package/src/renderers/webgl/WebGLGeometries.js +0 -28
  636. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
  637. package/src/renderers/webgl/WebGLProgram.js +27 -29
  638. package/src/renderers/webgl/WebGLPrograms.js +24 -16
  639. package/src/renderers/webgl/WebGLState.js +68 -11
  640. package/src/renderers/webgl/WebGLTextures.js +49 -10
  641. package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
  642. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
  643. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
  644. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
  645. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  646. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  647. package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
  648. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
  649. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
  650. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  651. package/src/renderers/webgpu/WebGPUBackend.js +816 -236
  652. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
  653. package/src/renderers/webgpu/WebGPURenderer.js +45 -6
  654. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
  655. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
  656. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
  657. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
  658. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  659. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
  660. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
  661. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
  662. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
  663. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
  664. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
  665. package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
  666. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  667. package/src/renderers/webxr/WebXRManager.js +54 -32
  668. package/src/scenes/Fog.js +60 -0
  669. package/src/scenes/FogExp2.js +51 -0
  670. package/src/scenes/Scene.js +87 -0
  671. package/src/textures/Data3DTexture.js +2 -2
  672. package/src/textures/DepthTexture.js +2 -0
  673. package/src/textures/Source.js +2 -2
  674. package/src/textures/Texture.js +368 -5
  675. package/src/textures/VideoFrameTexture.js +35 -0
  676. package/src/utils.js +33 -1
  677. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  678. package/examples/jsm/animation/MMDPhysics.js +0 -1406
  679. package/examples/jsm/cameras/CinematicCamera.js +0 -208
  680. package/examples/jsm/controls/Controls.js +0 -32
  681. package/examples/jsm/exporters/MMDExporter.js +0 -217
  682. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  683. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  684. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  685. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  686. package/examples/jsm/loaders/MMDLoader.js +0 -2295
  687. package/examples/jsm/loaders/TiltLoader.js +0 -520
  688. package/examples/jsm/objects/InstancedPoints.js +0 -21
  689. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  690. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  691. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  692. package/src/nodes/accessors/BitangentNode.js +0 -13
  693. package/src/nodes/accessors/CameraNode.js +0 -19
  694. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  695. package/src/nodes/accessors/NormalNode.js +0 -14
  696. package/src/nodes/accessors/PositionNode.js +0 -10
  697. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  698. package/src/nodes/accessors/TangentNode.js +0 -23
  699. package/src/nodes/accessors/UVNode.js +0 -3
  700. package/src/nodes/core/NodeKeywords.js +0 -80
  701. package/src/nodes/core/UniformGroup.js +0 -13
  702. package/src/nodes/display/AfterImageNode.js +0 -152
  703. package/src/nodes/display/AnamorphicNode.js +0 -145
  704. package/src/nodes/display/BlendModeNode.js +0 -128
  705. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  706. package/src/nodes/display/DenoiseNode.js +0 -198
  707. package/src/nodes/display/DotScreenNode.js +0 -75
  708. package/src/nodes/display/FXAANode.js +0 -327
  709. package/src/nodes/display/FilmNode.js +0 -52
  710. package/src/nodes/display/GTAONode.js +0 -324
  711. package/src/nodes/display/GaussianBlurNode.js +0 -207
  712. package/src/nodes/display/Lut3DNode.js +0 -53
  713. package/src/nodes/display/RGBShiftNode.js +0 -49
  714. package/src/nodes/display/SepiaNode.js +0 -18
  715. package/src/nodes/display/TransitionNode.js +0 -76
  716. package/src/nodes/display/ViewportNode.js +0 -137
  717. package/src/nodes/fog/FogExp2Node.js +0 -34
  718. package/src/nodes/fog/FogNode.js +0 -48
  719. package/src/nodes/fog/FogRangeNode.js +0 -35
  720. package/src/nodes/lighting/LightNode.js +0 -57
  721. package/src/nodes/loaders/NodeLoader.js +0 -110
  722. package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
  723. package/src/nodes/loaders/NodeObjectLoader.js +0 -71
  724. package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  725. package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
  726. package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
  727. package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
  728. package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
  729. package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
  730. package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  731. package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
  732. package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
  733. package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
  734. package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
  735. package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
  736. package/src/nodes/materials/NodeMaterial.js +0 -680
  737. package/src/nodes/materials/PointsNodeMaterial.js +0 -39
  738. package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
  739. package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
  740. package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
  741. package/src/nodes/math/CondNode.js +0 -139
  742. package/src/nodes/math/HashNode.js +0 -34
  743. package/src/nodes/procedural/CheckerNode.js +0 -42
  744. package/src/nodes/utils/DiscardNode.js +0 -28
  745. package/src/nodes/utils/OscNode.js +0 -81
  746. package/src/nodes/utils/PackingNode.js +0 -55
  747. package/src/nodes/utils/TimerNode.js +0 -94
@@ -698,7 +698,7 @@ class ConvexHull {
698
698
 
699
699
  let eyeVertex, maxDistance = 0;
700
700
 
701
- // grap the first available face and start with the first visible vertex of that face
701
+ // grab the first available face and start with the first visible vertex of that face
702
702
 
703
703
  const eyeFace = this.assigned.first().face;
704
704
  let vertex = eyeFace.outside;
@@ -84,6 +84,10 @@ class OBB {
84
84
  /**
85
85
  * Reference: Closest Point on OBB to Point in Real-Time Collision Detection
86
86
  * by Christer Ericson (chapter 5.1.4)
87
+ *
88
+ * @param {Vector3} point
89
+ * @param {Vector3} result
90
+ * @returns {Vector3}
87
91
  */
88
92
  clampPoint( point, result ) {
89
93
 
@@ -146,6 +150,9 @@ class OBB {
146
150
  * Reference: OBB-OBB Intersection in Real-Time Collision Detection
147
151
  * by Christer Ericson (chapter 4.4.1)
148
152
  *
153
+ * @param {OBB} obb
154
+ * @param {number} [epsilon=Number.EPSILON] - A small value to prevent arithmetic errors
155
+ * @returns {boolean}
149
156
  */
150
157
  intersectsOBB( obb, epsilon = Number.EPSILON ) {
151
158
 
@@ -285,6 +292,9 @@ class OBB {
285
292
  /**
286
293
  * Reference: Testing Box Against Plane in Real-Time Collision Detection
287
294
  * by Christer Ericson (chapter 5.2.3)
295
+ *
296
+ * @param {Plane} plane
297
+ * @returns {boolean}
288
298
  */
289
299
  intersectsPlane( plane ) {
290
300
 
@@ -309,6 +319,10 @@ class OBB {
309
319
  /**
310
320
  * Performs a ray/OBB intersection test and stores the intersection point
311
321
  * to the given 3D vector. If no intersection is detected, *null* is returned.
322
+ *
323
+ * @param {Ray} ray
324
+ * @param {Vector3} result
325
+ * @return {?Vector3}
312
326
  */
313
327
  intersectRay( ray, result ) {
314
328
 
@@ -347,6 +361,9 @@ class OBB {
347
361
  /**
348
362
  * Performs a ray/OBB intersection test. Returns either true or false if
349
363
  * there is a intersection or not.
364
+ *
365
+ * @param {Ray} ray
366
+ * @returns {boolean}
350
367
  */
351
368
  intersectsRay( ray ) {
352
369
 
@@ -99,16 +99,15 @@ import { FullScreenQuad } from '../postprocessing/Pass.js';
99
99
  * // And compute each frame, before rendering to screen:
100
100
  * gpuCompute.doRenderTarget( myFilter1, myRenderTarget );
101
101
  * gpuCompute.doRenderTarget( myFilter2, outputRenderTarget );
102
- *
103
- *
104
- *
105
- * @param {int} sizeX Computation problem size is always 2d: sizeX * sizeY elements.
106
- * @param {int} sizeY Computation problem size is always 2d: sizeX * sizeY elements.
107
- * @param {WebGLRenderer} renderer The renderer
108
- */
102
+ */
109
103
 
110
104
  class GPUComputationRenderer {
111
105
 
106
+ /**
107
+ * @param {number} sizeX Computation problem size is always 2d: sizeX * sizeY elements.
108
+ * @param {number} sizeY Computation problem size is always 2d: sizeX * sizeY elements.
109
+ * @param {WebGLRenderer} renderer The renderer
110
+ */
112
111
  constructor( sizeX, sizeY, renderer ) {
113
112
 
114
113
  this.variables = [];
@@ -1,4 +1,4 @@
1
- import * as THREE from 'three';
1
+ import { DoubleSide, FloatType, HalfFloatType, Mesh, MeshBasicMaterial, MeshPhongMaterial, PlaneGeometry, Scene, WebGLRenderTarget } from 'three';
2
2
  import { potpack } from '../libs/potpack.module.js';
3
3
 
4
4
  /**
@@ -13,33 +13,32 @@ import { potpack } from '../libs/potpack.module.js';
13
13
  * This should begin accumulating lightmaps which apply to
14
14
  * your objects, so you can start jittering lighting to achieve
15
15
  * the texture-space effect you're looking for.
16
- *
17
- * @param {WebGLRenderer} renderer A WebGL Rendering Context
18
- * @param {number} res The side-long dimension of you total lightmap
19
16
  */
20
17
  class ProgressiveLightMap {
21
18
 
19
+ /**
20
+ * @param {WebGLRenderer} renderer An instance of WebGLRenderer.
21
+ * @param {number} [res=1024] The side-long dimension of you total lightmap.
22
+ */
22
23
  constructor( renderer, res = 1024 ) {
23
24
 
24
25
  this.renderer = renderer;
25
26
  this.res = res;
26
27
  this.lightMapContainers = [];
27
- this.compiled = false;
28
- this.scene = new THREE.Scene();
29
- this.scene.background = null;
30
- this.tinyTarget = new THREE.WebGLRenderTarget( 1, 1 );
28
+ this.scene = new Scene();
31
29
  this.buffer1Active = false;
32
30
  this.firstUpdate = true;
33
- this.warned = false;
31
+ this.labelMesh = null;
32
+ this.blurringPlane = null;
34
33
 
35
34
  // Create the Progressive LightMap Texture
36
- const format = /(Android|iPad|iPhone|iPod)/g.test( navigator.userAgent ) ? THREE.HalfFloatType : THREE.FloatType;
37
- this.progressiveLightMap1 = new THREE.WebGLRenderTarget( this.res, this.res, { type: format } );
38
- this.progressiveLightMap2 = new THREE.WebGLRenderTarget( this.res, this.res, { type: format } );
35
+ const format = /(Android|iPad|iPhone|iPod)/g.test( navigator.userAgent ) ? HalfFloatType : FloatType;
36
+ this.progressiveLightMap1 = new WebGLRenderTarget( this.res, this.res, { type: format } );
37
+ this.progressiveLightMap2 = new WebGLRenderTarget( this.res, this.res, { type: format } );
39
38
  this.progressiveLightMap2.texture.channel = 1;
40
39
 
41
40
  // Inject some spicy new logic into a standard phong material
42
- this.uvMat = new THREE.MeshPhongMaterial();
41
+ this.uvMat = new MeshPhongMaterial();
43
42
  this.uvMat.uniforms = {};
44
43
  this.uvMat.onBeforeCompile = ( shader ) => {
45
44
 
@@ -71,8 +70,6 @@ class ProgressiveLightMap {
71
70
  // Set the new Shader to this
72
71
  this.uvMat.userData.shader = shader;
73
72
 
74
- this.compiled = true;
75
-
76
73
  };
77
74
 
78
75
  }
@@ -97,13 +94,13 @@ class ProgressiveLightMap {
97
94
 
98
95
  }
99
96
 
100
- if ( ! object.geometry.hasAttribute( 'uv' ) ) {
97
+ if ( object.geometry.hasAttribute( 'uv' ) === false ) {
101
98
 
102
- console.warn( 'All lightmap objects need UVs!' ); continue;
99
+ console.warn( 'THREE.ProgressiveLightMap: All lightmap objects need uvs.' ); continue;
103
100
 
104
101
  }
105
102
 
106
- if ( this.blurringPlane == null ) {
103
+ if ( this.blurringPlane === null ) {
107
104
 
108
105
  this._initializeBlurPlane( this.res, this.progressiveLightMap1 );
109
106
 
@@ -123,8 +120,6 @@ class ProgressiveLightMap {
123
120
 
124
121
  this.lightMapContainers.push( { basicMat: object.material, object: object } );
125
122
 
126
- this.compiled = false;
127
-
128
123
  }
129
124
 
130
125
  // Pack the objects' lightmap UVs into the same global space
@@ -154,7 +149,7 @@ class ProgressiveLightMap {
154
149
  */
155
150
  update( camera, blendWindow = 100, blurEdges = true ) {
156
151
 
157
- if ( this.blurringPlane == null ) {
152
+ if ( this.blurringPlane === null ) {
158
153
 
159
154
  return;
160
155
 
@@ -175,11 +170,10 @@ class ProgressiveLightMap {
175
170
 
176
171
  }
177
172
 
178
- // Render once normally to initialize everything
179
- if ( this.firstUpdate ) {
173
+ // Initialize everything
174
+ if ( this.firstUpdate === true ) {
180
175
 
181
- this.renderer.setRenderTarget( this.tinyTarget ); // Tiny for Speed
182
- this.renderer.render( this.scene, camera );
176
+ this.renderer.compile( this.scene, camera );
183
177
  this.firstUpdate = false;
184
178
 
185
179
  }
@@ -228,30 +222,25 @@ class ProgressiveLightMap {
228
222
  */
229
223
  showDebugLightmap( visible, position = undefined ) {
230
224
 
231
- if ( this.lightMapContainers.length == 0 ) {
232
-
233
- if ( ! this.warned ) {
225
+ if ( this.lightMapContainers.length === 0 ) {
234
226
 
235
- console.warn( 'Call this after adding the objects!' ); this.warned = true;
236
-
237
- }
227
+ console.warn( 'THREE.ProgressiveLightMap: Call .showDebugLightmap() after adding the objects.' );
238
228
 
239
229
  return;
240
230
 
241
231
  }
242
232
 
243
- if ( this.labelMesh == null ) {
233
+ if ( this.labelMesh === null ) {
244
234
 
245
- this.labelMaterial = new THREE.MeshBasicMaterial(
246
- { map: this.progressiveLightMap1.texture, side: THREE.DoubleSide } );
247
- this.labelPlane = new THREE.PlaneGeometry( 100, 100 );
248
- this.labelMesh = new THREE.Mesh( this.labelPlane, this.labelMaterial );
235
+ const labelMaterial = new MeshBasicMaterial( { map: this.progressiveLightMap1.texture, side: DoubleSide } );
236
+ const labelGeometry = new PlaneGeometry( 100, 100 );
237
+ this.labelMesh = new Mesh( labelGeometry, labelMaterial );
249
238
  this.labelMesh.position.y = 250;
250
239
  this.lightMapContainers[ 0 ].object.parent.add( this.labelMesh );
251
240
 
252
241
  }
253
242
 
254
- if ( position != undefined ) {
243
+ if ( position !== undefined ) {
255
244
 
256
245
  this.labelMesh.position.copy( position );
257
246
 
@@ -268,7 +257,7 @@ class ProgressiveLightMap {
268
257
  */
269
258
  _initializeBlurPlane( res, lightMap = null ) {
270
259
 
271
- const blurMaterial = new THREE.MeshBasicMaterial();
260
+ const blurMaterial = new MeshBasicMaterial();
272
261
  blurMaterial.uniforms = { previousShadowMap: { value: null },
273
262
  pixelOffset: { value: 1.0 / res },
274
263
  polygonOffset: true, polygonOffsetFactor: - 1, polygonOffsetUnits: 3.0 };
@@ -306,11 +295,9 @@ class ProgressiveLightMap {
306
295
  // Set the new Shader to this
307
296
  blurMaterial.userData.shader = shader;
308
297
 
309
- this.compiled = true;
310
-
311
298
  };
312
299
 
313
- this.blurringPlane = new THREE.Mesh( new THREE.PlaneGeometry( 1, 1 ), blurMaterial );
300
+ this.blurringPlane = new Mesh( new PlaneGeometry( 1, 1 ), blurMaterial );
314
301
  this.blurringPlane.name = 'Blurring Plane';
315
302
  this.blurringPlane.frustumCulled = false;
316
303
  this.blurringPlane.renderOrder = 0;
@@ -319,6 +306,32 @@ class ProgressiveLightMap {
319
306
 
320
307
  }
321
308
 
309
+ /**
310
+ * Frees all internal resources.
311
+ */
312
+ dispose() {
313
+
314
+ this.progressiveLightMap1.dispose();
315
+ this.progressiveLightMap2.dispose();
316
+
317
+ this.uvMat.dispose();
318
+
319
+ if ( this.blurringPlane !== null ) {
320
+
321
+ this.blurringPlane.geometry.dispose();
322
+ this.blurringPlane.material.dispose();
323
+
324
+ }
325
+
326
+ if ( this.labelMesh !== null ) {
327
+
328
+ this.labelMesh.geometry.dispose();
329
+ this.labelMesh.material.dispose();
330
+
331
+ }
332
+
333
+ }
334
+
322
335
  }
323
336
 
324
337
  export { ProgressiveLightMap };
@@ -0,0 +1,294 @@
1
+ import { DoubleSide, FloatType, HalfFloatType, PlaneGeometry, Mesh, RenderTarget, Scene, MeshPhongNodeMaterial, NodeMaterial } from 'three/webgpu';
2
+ import { add, float, mix, output, sub, texture, uniform, uv, vec2, vec4 } from 'three/tsl';
3
+
4
+ import { potpack } from '../libs/potpack.module.js';
5
+
6
+ /**
7
+ * Progressive Light Map Accumulator, by [zalo](https://github.com/zalo/)
8
+ *
9
+ * To use, simply construct a `ProgressiveLightMap` object,
10
+ * `plmap.addObjectsToLightMap(object)` an array of semi-static
11
+ * objects and lights to the class once, and then call
12
+ * `plmap.update(camera)` every frame to begin accumulating
13
+ * lighting samples.
14
+ *
15
+ * This should begin accumulating lightmaps which apply to
16
+ * your objects, so you can start jittering lighting to achieve
17
+ * the texture-space effect you're looking for.
18
+ */
19
+ class ProgressiveLightMap {
20
+
21
+ /**
22
+ * @param {WebGPURenderer} renderer An instance of WebGPURenderer.
23
+ * @param {number} [resolution=1024] The side-long dimension of you total lightmap.
24
+ */
25
+ constructor( renderer, resolution = 1024 ) {
26
+
27
+ this.renderer = renderer;
28
+ this.resolution = resolution;
29
+
30
+ this._lightMapContainers = [];
31
+ this._scene = new Scene();
32
+ this._buffer1Active = false;
33
+ this._labelMesh = null;
34
+ this._blurringPlane = null;
35
+
36
+ // Create the Progressive LightMap Texture
37
+
38
+ const type = /(Android|iPad|iPhone|iPod)/g.test( navigator.userAgent ) ? HalfFloatType : FloatType;
39
+ this._progressiveLightMap1 = new RenderTarget( this.resolution, this.resolution, { type: type } );
40
+ this._progressiveLightMap2 = new RenderTarget( this.resolution, this.resolution, { type: type } );
41
+ this._progressiveLightMap2.texture.channel = 1;
42
+
43
+ // uniforms
44
+
45
+ this._averagingWindow = uniform( 100 );
46
+ this._previousShadowMap = texture( this._progressiveLightMap1.texture );
47
+
48
+ // materials
49
+
50
+ const uvNode = uv( 1 ).flipY();
51
+
52
+ this._uvMat = new MeshPhongNodeMaterial();
53
+ this._uvMat.vertexNode = vec4( sub( uvNode, vec2( 0.5 ) ).mul( 2 ), 1, 1 );
54
+ this._uvMat.outputNode = vec4( mix( this._previousShadowMap.sample( uv( 1 ) ), output, float( 1 ).div( this._averagingWindow ) ) );
55
+
56
+ }
57
+
58
+ /**
59
+ * Sets these objects' materials' lightmaps and modifies their uv1's.
60
+ * @param {Object3D} objects An array of objects and lights to set up your lightmap.
61
+ */
62
+ addObjectsToLightMap( objects ) {
63
+
64
+ // Prepare list of UV bounding boxes for packing later...
65
+ const uv_boxes = [];
66
+
67
+ const padding = 3 / this.resolution;
68
+
69
+ for ( let ob = 0; ob < objects.length; ob ++ ) {
70
+
71
+ const object = objects[ ob ];
72
+
73
+ // If this object is a light, simply add it to the internal scene
74
+ if ( object.isLight ) {
75
+
76
+ this._scene.attach( object ); continue;
77
+
78
+ }
79
+
80
+ if ( object.geometry.hasAttribute( 'uv' ) === false ) {
81
+
82
+ console.warn( 'THREE.ProgressiveLightMap: All lightmap objects need uvs.' ); continue;
83
+
84
+ }
85
+
86
+ if ( this._blurringPlane === null ) {
87
+
88
+ this._initializeBlurPlane();
89
+
90
+ }
91
+
92
+ // Apply the lightmap to the object
93
+ object.material.lightMap = this._progressiveLightMap2.texture;
94
+ object.material.dithering = true;
95
+ object.castShadow = true;
96
+ object.receiveShadow = true;
97
+ object.renderOrder = 1000 + ob;
98
+
99
+ // Prepare UV boxes for potpack
100
+ // TODO: Size these by object surface area
101
+ uv_boxes.push( { w: 1 + ( padding * 2 ), h: 1 + ( padding * 2 ), index: ob } );
102
+
103
+ this._lightMapContainers.push( { basicMat: object.material, object: object } );
104
+
105
+ }
106
+
107
+ // Pack the objects' lightmap UVs into the same global space
108
+ const dimensions = potpack( uv_boxes );
109
+ uv_boxes.forEach( ( box ) => {
110
+
111
+ const uv1 = objects[ box.index ].geometry.getAttribute( 'uv' ).clone();
112
+ for ( let i = 0; i < uv1.array.length; i += uv1.itemSize ) {
113
+
114
+ uv1.array[ i ] = ( uv1.array[ i ] + box.x + padding ) / dimensions.w;
115
+ uv1.array[ i + 1 ] = 1 - ( ( uv1.array[ i + 1 ] + box.y + padding ) / dimensions.h );
116
+
117
+ }
118
+
119
+ objects[ box.index ].geometry.setAttribute( 'uv1', uv1 );
120
+ objects[ box.index ].geometry.getAttribute( 'uv1' ).needsUpdate = true;
121
+
122
+ } );
123
+
124
+ }
125
+
126
+ /**
127
+ * Frees all internal resources.
128
+ */
129
+ dispose() {
130
+
131
+ this._progressiveLightMap1.dispose();
132
+ this._progressiveLightMap2.dispose();
133
+
134
+ this._uvMat.dispose();
135
+
136
+ if ( this._blurringPlane !== null ) {
137
+
138
+ this._blurringPlane.geometry.dispose();
139
+ this._blurringPlane.material.dispose();
140
+
141
+ }
142
+
143
+ if ( this._labelMesh !== null ) {
144
+
145
+ this._labelMesh.geometry.dispose();
146
+ this._labelMesh.material.dispose();
147
+
148
+ }
149
+
150
+ }
151
+
152
+ /**
153
+ * This function renders each mesh one at a time into their respective surface maps
154
+ * @param {Camera} camera Standard Rendering Camera
155
+ * @param {number} blendWindow When >1, samples will accumulate over time.
156
+ * @param {boolean} blurEdges Whether to fix UV Edges via blurring
157
+ */
158
+ update( camera, blendWindow = 100, blurEdges = true ) {
159
+
160
+ if ( this._blurringPlane === null ) {
161
+
162
+ return;
163
+
164
+ }
165
+
166
+ // Store the original Render Target
167
+ const currentRenderTarget = this.renderer.getRenderTarget();
168
+
169
+ // The blurring plane applies blur to the seams of the lightmap
170
+ this._blurringPlane.visible = blurEdges;
171
+
172
+ // Steal the Object3D from the real world to our special dimension
173
+ for ( let l = 0; l < this._lightMapContainers.length; l ++ ) {
174
+
175
+ this._lightMapContainers[ l ].object.oldScene = this._lightMapContainers[ l ].object.parent;
176
+ this._scene.attach( this._lightMapContainers[ l ].object );
177
+
178
+ }
179
+
180
+ // Set each object's material to the UV Unwrapped Surface Mapping Version
181
+ for ( let l = 0; l < this._lightMapContainers.length; l ++ ) {
182
+
183
+ this._averagingWindow.value = blendWindow;
184
+ this._lightMapContainers[ l ].object.material = this._uvMat;
185
+ this._lightMapContainers[ l ].object.oldFrustumCulled = this._lightMapContainers[ l ].object.frustumCulled;
186
+ this._lightMapContainers[ l ].object.frustumCulled = false;
187
+
188
+ }
189
+
190
+ // Ping-pong two surface buffers for reading/writing
191
+ const activeMap = this._buffer1Active ? this._progressiveLightMap1 : this._progressiveLightMap2;
192
+ const inactiveMap = this._buffer1Active ? this._progressiveLightMap2 : this._progressiveLightMap1;
193
+
194
+ // Render the object's surface maps
195
+ this.renderer.setRenderTarget( activeMap );
196
+ this._previousShadowMap.value = inactiveMap.texture;
197
+
198
+ this._buffer1Active = ! this._buffer1Active;
199
+ this.renderer.render( this._scene, camera );
200
+
201
+ // Restore the object's Real-time Material and add it back to the original world
202
+ for ( let l = 0; l < this._lightMapContainers.length; l ++ ) {
203
+
204
+ this._lightMapContainers[ l ].object.frustumCulled = this._lightMapContainers[ l ].object.oldFrustumCulled;
205
+ this._lightMapContainers[ l ].object.material = this._lightMapContainers[ l ].basicMat;
206
+ this._lightMapContainers[ l ].object.oldScene.attach( this._lightMapContainers[ l ].object );
207
+
208
+ }
209
+
210
+ // Restore the original Render Target
211
+ this.renderer.setRenderTarget( currentRenderTarget );
212
+
213
+ }
214
+
215
+ /**
216
+ * Draw the lightmap in the main scene. Call this after adding the objects to it.
217
+ * @param {boolean} visible Whether the debug plane should be visible.
218
+ * @param {Vector3} position Where the debug plane should be drawn.
219
+ */
220
+ showDebugLightmap( visible, position = null ) {
221
+
222
+ if ( this._lightMapContainers.length === 0 ) {
223
+
224
+ console.warn( 'THREE.ProgressiveLightMap: Call .showDebugLightmap() after adding the objects.' );
225
+
226
+ return;
227
+
228
+ }
229
+
230
+ if ( this._labelMesh === null ) {
231
+
232
+ const labelMaterial = new NodeMaterial();
233
+ labelMaterial.colorNode = texture( this._progressiveLightMap1.texture ).sample( uv().flipY() );
234
+ labelMaterial.side = DoubleSide;
235
+
236
+ const labelGeometry = new PlaneGeometry( 100, 100 );
237
+
238
+ this._labelMesh = new Mesh( labelGeometry, labelMaterial );
239
+ this._labelMesh.position.y = 250;
240
+
241
+ this._lightMapContainers[ 0 ].object.parent.add( this._labelMesh );
242
+
243
+ }
244
+
245
+ if ( position !== null ) {
246
+
247
+ this._labelMesh.position.copy( position );
248
+
249
+ }
250
+
251
+ this._labelMesh.visible = visible;
252
+
253
+ }
254
+
255
+ /**
256
+ * Creates the Blurring Plane.
257
+ */
258
+ _initializeBlurPlane() {
259
+
260
+ const blurMaterial = new NodeMaterial();
261
+ blurMaterial.polygonOffset = true;
262
+ blurMaterial.polygonOffsetFactor = - 1;
263
+ blurMaterial.polygonOffsetUnits = 3;
264
+
265
+ blurMaterial.vertexNode = vec4( sub( uv(), vec2( 0.5 ) ).mul( 2 ), 1, 1 );
266
+
267
+ const uvNode = uv().flipY().toVar();
268
+ const pixelOffset = float( 0.5 ).div( float( this.resolution ) ).toVar();
269
+
270
+ const color = add(
271
+ this._previousShadowMap.sample( uvNode.add( vec2( pixelOffset, 0 ) ) ),
272
+ this._previousShadowMap.sample( uvNode.add( vec2( 0, pixelOffset ) ) ),
273
+ this._previousShadowMap.sample( uvNode.add( vec2( 0, pixelOffset.negate() ) ) ),
274
+ this._previousShadowMap.sample( uvNode.add( vec2( pixelOffset.negate(), 0 ) ) ),
275
+ this._previousShadowMap.sample( uvNode.add( vec2( pixelOffset, pixelOffset ) ) ),
276
+ this._previousShadowMap.sample( uvNode.add( vec2( pixelOffset.negate(), pixelOffset ) ) ),
277
+ this._previousShadowMap.sample( uvNode.add( vec2( pixelOffset, pixelOffset.negate() ) ) ),
278
+ this._previousShadowMap.sample( uvNode.add( vec2( pixelOffset.negate(), pixelOffset.negate() ) ) ),
279
+ ).div( 8 );
280
+
281
+ blurMaterial.fragmentNode = color;
282
+
283
+ this._blurringPlane = new Mesh( new PlaneGeometry( 1, 1 ), blurMaterial );
284
+ this._blurringPlane.name = 'Blurring Plane';
285
+ this._blurringPlane.frustumCulled = false;
286
+ this._blurringPlane.renderOrder = 0;
287
+ this._blurringPlane.material.depthWrite = false;
288
+ this._scene.add( this._blurringPlane );
289
+
290
+ }
291
+
292
+ }
293
+
294
+ export { ProgressiveLightMap };
@@ -11,11 +11,18 @@ class Timer {
11
11
 
12
12
  this._timescale = 1;
13
13
 
14
- // use Page Visibility API to avoid large time delta values
14
+ this._document = null;
15
+ this._pageVisibilityHandler = null;
16
+
17
+ }
15
18
 
16
- this._usePageVisibilityAPI = ( typeof document !== 'undefined' && document.hidden !== undefined );
19
+ connect( document ) {
17
20
 
18
- if ( this._usePageVisibilityAPI === true ) {
21
+ this._document = document;
22
+
23
+ // use Page Visibility API to avoid large time delta values
24
+
25
+ if ( document.hidden !== undefined ) {
19
26
 
20
27
  this._pageVisibilityHandler = handleVisibilityChange.bind( this );
21
28
 
@@ -25,6 +32,19 @@ class Timer {
25
32
 
26
33
  }
27
34
 
35
+ disconnect() {
36
+
37
+ if ( this._pageVisibilityHandler !== null ) {
38
+
39
+ this._document.removeEventListener( 'visibilitychange', this._pageVisibilityHandler );
40
+ this._pageVisibilityHandler = null;
41
+
42
+ }
43
+
44
+ this._document = null;
45
+
46
+ }
47
+
28
48
  getDelta() {
29
49
 
30
50
  return this._delta / 1000;
@@ -61,11 +81,7 @@ class Timer {
61
81
 
62
82
  dispose() {
63
83
 
64
- if ( this._usePageVisibilityAPI === true ) {
65
-
66
- document.removeEventListener( 'visibilitychange', this._pageVisibilityHandler );
67
-
68
- }
84
+ this.disconnect();
69
85
 
70
86
  return this;
71
87
 
@@ -73,8 +89,7 @@ class Timer {
73
89
 
74
90
  update( timestamp ) {
75
91
 
76
-
77
- if ( this._usePageVisibilityAPI === true && document.hidden === true ) {
92
+ if ( this._pageVisibilityHandler !== null && this._document.hidden === true ) {
78
93
 
79
94
  this._delta = 0;
80
95
 
@@ -115,13 +130,13 @@ class FixedTimer extends Timer {
115
130
 
116
131
  function now() {
117
132
 
118
- return ( typeof performance === 'undefined' ? Date : performance ).now();
133
+ return performance.now();
119
134
 
120
135
  }
121
136
 
122
137
  function handleVisibilityChange() {
123
138
 
124
- if ( document.hidden === false ) this.reset();
139
+ if ( this._document.hidden === false ) this.reset();
125
140
 
126
141
  }
127
142