super-three 0.181.0 → 0.185.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 (693) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +21332 -19201
  4. package/build/three.core.js +20908 -19853
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1947 -862
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +37 -16
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +33628 -25197
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +33394 -25000
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +14 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +13 -6
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +127 -86
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +102 -17
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMFrustum.js +31 -6
  26. package/examples/jsm/csm/CSMShadowNode.js +10 -3
  27. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  28. package/examples/jsm/effects/AsciiEffect.js +14 -1
  29. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  30. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  31. package/examples/jsm/exporters/DRACOExporter.js +27 -6
  32. package/examples/jsm/exporters/EXRExporter.js +1 -1
  33. package/examples/jsm/exporters/GLTFExporter.js +266 -21
  34. package/examples/jsm/exporters/PLYExporter.js +286 -73
  35. package/examples/jsm/exporters/USDZExporter.js +353 -99
  36. package/examples/jsm/generators/CityGenerator.js +346 -0
  37. package/examples/jsm/generators/ForestGenerator.js +347 -0
  38. package/examples/jsm/generators/TerrainGenerator.js +504 -0
  39. package/examples/jsm/generators/TreeGenerator.js +377 -0
  40. package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
  41. package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
  42. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  43. package/examples/jsm/geometries/LoftGeometry.js +355 -0
  44. package/examples/jsm/geometries/TextGeometry.js +18 -0
  45. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  46. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  47. package/examples/jsm/helpers/LightProbeHelper.js +5 -4
  48. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  49. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  50. package/examples/jsm/helpers/ViewHelper.js +83 -14
  51. package/examples/jsm/inspector/Extension.js +13 -0
  52. package/examples/jsm/inspector/Inspector.js +244 -91
  53. package/examples/jsm/inspector/RendererInspector.js +165 -39
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  55. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  56. package/examples/jsm/inspector/tabs/Console.js +241 -25
  57. package/examples/jsm/inspector/tabs/Memory.js +136 -0
  58. package/examples/jsm/inspector/tabs/Parameters.js +115 -7
  59. package/examples/jsm/inspector/tabs/Performance.js +24 -9
  60. package/examples/jsm/inspector/tabs/Settings.js +306 -0
  61. package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
  62. package/examples/jsm/inspector/tabs/Viewer.js +723 -9
  63. package/examples/jsm/inspector/ui/Graph.js +162 -25
  64. package/examples/jsm/inspector/ui/Item.js +92 -13
  65. package/examples/jsm/inspector/ui/List.js +2 -2
  66. package/examples/jsm/inspector/ui/Profiler.js +1991 -44
  67. package/examples/jsm/inspector/ui/Style.js +1943 -543
  68. package/examples/jsm/inspector/ui/Tab.js +226 -5
  69. package/examples/jsm/inspector/ui/Values.js +126 -8
  70. package/examples/jsm/inspector/ui/utils.js +143 -10
  71. package/examples/jsm/interaction/InteractionManager.js +226 -0
  72. package/examples/jsm/libs/basis/README.md +0 -1
  73. package/examples/jsm/libs/demuxer_mp4.js +3 -3
  74. package/examples/jsm/libs/draco/README.md +0 -1
  75. package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
  76. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  77. package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
  78. package/examples/jsm/libs/mikktspace.module.js +34 -9
  79. package/examples/jsm/lighting/ClusteredLighting.js +55 -0
  80. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  81. package/examples/jsm/lighting/LightProbeGrid.js +681 -0
  82. package/examples/jsm/lines/LineMaterial.js +45 -16
  83. package/examples/jsm/lines/LineSegments2.js +8 -0
  84. package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
  85. package/examples/jsm/loaders/3DMLoader.js +6 -5
  86. package/examples/jsm/loaders/3MFLoader.js +2 -2
  87. package/examples/jsm/loaders/AMFLoader.js +2 -2
  88. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  89. package/examples/jsm/loaders/DRACOLoader.js +51 -18
  90. package/examples/jsm/loaders/EXRLoader.js +701 -90
  91. package/examples/jsm/loaders/FBXLoader.js +235 -37
  92. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  93. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  94. package/examples/jsm/loaders/HDRLoader.js +7 -30
  95. package/examples/jsm/loaders/KMZLoader.js +5 -5
  96. package/examples/jsm/loaders/KTX2Loader.js +58 -17
  97. package/examples/jsm/loaders/LDrawLoader.js +49 -58
  98. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  99. package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
  100. package/examples/jsm/loaders/LWOLoader.js +11 -39
  101. package/examples/jsm/loaders/LottieLoader.js +1 -1
  102. package/examples/jsm/loaders/MaterialXLoader.js +31 -9
  103. package/examples/jsm/loaders/NRRDLoader.js +5 -5
  104. package/examples/jsm/loaders/PCDLoader.js +11 -9
  105. package/examples/jsm/loaders/PLYLoader.js +218 -55
  106. package/examples/jsm/loaders/SVGLoader.js +549 -497
  107. package/examples/jsm/loaders/TDSLoader.js +0 -2
  108. package/examples/jsm/loaders/TGALoader.js +0 -2
  109. package/examples/jsm/loaders/TTFLoader.js +1 -1
  110. package/examples/jsm/loaders/USDLoader.js +127 -43
  111. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  112. package/examples/jsm/loaders/VOXLoader.js +660 -117
  113. package/examples/jsm/loaders/VRMLLoader.js +80 -3
  114. package/examples/jsm/loaders/VTKLoader.js +42 -25
  115. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  116. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  117. package/examples/jsm/loaders/usd/USDAParser.js +504 -344
  118. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  119. package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
  120. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  121. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  122. package/examples/jsm/math/Octree.js +131 -1
  123. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  124. package/examples/jsm/misc/RollerCoaster.js +42 -4
  125. package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
  126. package/examples/jsm/misc/Volume.js +2 -3
  127. package/examples/jsm/misc/VolumeSlice.js +0 -1
  128. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  129. package/examples/jsm/objects/GroundedSkybox.js +1 -1
  130. package/examples/jsm/objects/LensflareMesh.js +1 -1
  131. package/examples/jsm/objects/Reflector.js +72 -25
  132. package/examples/jsm/objects/Sky.js +90 -6
  133. package/examples/jsm/objects/SkyMesh.js +150 -16
  134. package/examples/jsm/objects/Water.js +4 -3
  135. package/examples/jsm/objects/Water2.js +5 -3
  136. package/examples/jsm/objects/Water2Mesh.js +1 -1
  137. package/examples/jsm/objects/WaterMesh.js +5 -7
  138. package/examples/jsm/physics/AmmoPhysics.js +27 -15
  139. package/examples/jsm/physics/JoltPhysics.js +10 -6
  140. package/examples/jsm/physics/RapierPhysics.js +36 -7
  141. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  142. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  143. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  144. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  145. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  146. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  147. package/examples/jsm/renderers/Projector.js +246 -28
  148. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  149. package/examples/jsm/shaders/GTAOShader.js +19 -6
  150. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  151. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  152. package/examples/jsm/shaders/SAOShader.js +17 -4
  153. package/examples/jsm/shaders/SSAOShader.js +11 -1
  154. package/examples/jsm/shaders/SSRShader.js +6 -5
  155. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  156. package/examples/jsm/shaders/VignetteShader.js +1 -1
  157. package/examples/jsm/shaders/VolumeShader.js +31 -44
  158. package/examples/jsm/transpiler/AST.js +44 -0
  159. package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
  160. package/examples/jsm/transpiler/Linker.js +1 -1
  161. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  162. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  163. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  164. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  165. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  166. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  167. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  168. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  169. package/examples/jsm/tsl/display/BloomNode.js +75 -25
  170. package/examples/jsm/tsl/display/CRT.js +150 -0
  171. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  172. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  173. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  174. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  175. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  176. package/examples/jsm/tsl/display/FXAANode.js +13 -14
  177. package/examples/jsm/tsl/display/GTAONode.js +40 -17
  178. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  179. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  180. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
  181. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  182. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  183. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  184. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  185. package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
  186. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  187. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
  188. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  189. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  190. package/examples/jsm/tsl/display/SSAAPassNode.js +15 -27
  191. package/examples/jsm/tsl/display/SSGINode.js +96 -62
  192. package/examples/jsm/tsl/display/SSRNode.js +831 -134
  193. package/examples/jsm/tsl/display/SSSNode.js +8 -6
  194. package/examples/jsm/tsl/display/Shape.js +29 -0
  195. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  196. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  197. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  198. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  199. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  200. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  201. package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
  202. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  203. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  204. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  205. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
  206. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  207. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  208. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  209. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  210. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  211. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  212. package/examples/jsm/tsl/math/Bayer.js +53 -3
  213. package/examples/jsm/tsl/math/curlNoise.js +107 -0
  214. package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
  215. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
  216. package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
  217. package/examples/jsm/tsl/utils/RNoise.js +51 -0
  218. package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
  219. package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
  220. package/examples/jsm/utils/ColorUtils.js +76 -0
  221. package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
  222. package/examples/jsm/utils/LDrawUtils.js +1 -1
  223. package/examples/jsm/utils/SceneOptimizer.js +1 -1
  224. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  225. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  226. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  227. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  228. package/examples/jsm/webxr/ARButton.js +1 -1
  229. package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
  230. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
  231. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  232. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  233. package/package.json +28 -34
  234. package/src/Three.Core.js +3 -1
  235. package/src/Three.TSL.js +35 -14
  236. package/src/Three.WebGPU.Nodes.js +5 -0
  237. package/src/Three.WebGPU.js +13 -0
  238. package/src/Three.js +1 -0
  239. package/src/animation/AnimationAction.js +18 -4
  240. package/src/animation/AnimationClip.js +0 -139
  241. package/src/animation/AnimationMixer.js +6 -0
  242. package/src/animation/AnimationUtils.js +1 -12
  243. package/src/animation/KeyframeTrack.js +47 -8
  244. package/src/animation/PropertyBinding.js +2 -2
  245. package/src/animation/PropertyMixer.js +4 -4
  246. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  247. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  248. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  249. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  250. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  251. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  252. package/src/audio/Audio.js +1 -1
  253. package/src/audio/AudioContext.js +2 -2
  254. package/src/audio/AudioListener.js +5 -3
  255. package/src/cameras/Camera.js +34 -4
  256. package/src/cameras/CubeCamera.js +20 -0
  257. package/src/cameras/StereoCamera.js +5 -2
  258. package/src/constants.js +90 -5
  259. package/src/core/BufferAttribute.js +13 -1
  260. package/src/core/BufferGeometry.js +43 -9
  261. package/src/core/Clock.js +7 -0
  262. package/src/core/Object3D.js +69 -11
  263. package/src/core/Raycaster.js +3 -3
  264. package/src/core/RenderTarget.js +19 -6
  265. package/src/extras/PMREMGenerator.js +13 -22
  266. package/src/extras/TextureUtils.js +6 -2
  267. package/src/extras/core/ShapePath.js +149 -160
  268. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  269. package/src/geometries/ExtrudeGeometry.js +2 -2
  270. package/src/geometries/PolyhedronGeometry.js +1 -1
  271. package/src/geometries/SphereGeometry.js +8 -3
  272. package/src/geometries/TorusGeometry.js +8 -3
  273. package/src/helpers/CameraHelper.js +3 -0
  274. package/src/helpers/DirectionalLightHelper.js +6 -1
  275. package/src/helpers/HemisphereLightHelper.js +5 -0
  276. package/src/helpers/PointLightHelper.js +3 -25
  277. package/src/helpers/SpotLightHelper.js +4 -1
  278. package/src/lights/DirectionalLight.js +13 -0
  279. package/src/lights/HemisphereLight.js +10 -0
  280. package/src/lights/Light.js +1 -11
  281. package/src/lights/LightProbe.js +0 -15
  282. package/src/lights/LightShadow.js +15 -6
  283. package/src/lights/PointLight.js +15 -0
  284. package/src/lights/PointLightShadow.js +0 -86
  285. package/src/lights/SpotLight.js +22 -1
  286. package/src/lights/webgpu/IESSpotLight.js +2 -1
  287. package/src/loaders/AudioLoader.js +11 -1
  288. package/src/loaders/Cache.js +28 -0
  289. package/src/loaders/DataTextureLoader.js +75 -42
  290. package/src/loaders/FileLoader.js +2 -3
  291. package/src/loaders/ImageBitmapLoader.js +12 -9
  292. package/src/loaders/Loader.js +6 -0
  293. package/src/loaders/LoadingManager.js +5 -0
  294. package/src/loaders/MaterialLoader.js +37 -266
  295. package/src/loaders/ObjectLoader.js +48 -6
  296. package/src/loaders/nodes/NodeLoader.js +2 -2
  297. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  298. package/src/materials/LineBasicMaterial.js +4 -0
  299. package/src/materials/Material.js +198 -1
  300. package/src/materials/MeshBasicMaterial.js +24 -0
  301. package/src/materials/MeshDepthMaterial.js +10 -0
  302. package/src/materials/MeshDistanceMaterial.js +10 -0
  303. package/src/materials/MeshLambertMaterial.js +49 -1
  304. package/src/materials/MeshMatcapMaterial.js +25 -1
  305. package/src/materials/MeshNormalMaterial.js +9 -1
  306. package/src/materials/MeshPhongMaterial.js +49 -1
  307. package/src/materials/MeshPhysicalMaterial.js +38 -0
  308. package/src/materials/MeshStandardMaterial.js +42 -1
  309. package/src/materials/MeshToonMaterial.js +35 -2
  310. package/src/materials/PointsMaterial.js +7 -0
  311. package/src/materials/ShaderMaterial.js +106 -1
  312. package/src/materials/SpriteMaterial.js +7 -0
  313. package/src/materials/nodes/Line2NodeMaterial.js +380 -297
  314. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  315. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  316. package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
  317. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
  318. package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
  319. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
  320. package/src/materials/nodes/NodeMaterial.js +153 -89
  321. package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
  322. package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
  323. package/src/math/Box3.js +5 -0
  324. package/src/math/FrustumArray.js +103 -133
  325. package/src/math/Interpolant.js +1 -1
  326. package/src/math/Line3.js +6 -5
  327. package/src/math/MathUtils.js +12 -12
  328. package/src/math/Matrix2.js +13 -9
  329. package/src/math/Matrix3.js +24 -9
  330. package/src/math/Matrix4.js +112 -74
  331. package/src/math/Plane.js +4 -3
  332. package/src/math/Quaternion.js +3 -29
  333. package/src/math/Sphere.js +1 -1
  334. package/src/math/Triangle.js +1 -1
  335. package/src/math/Vector2.js +13 -9
  336. package/src/math/Vector3.js +17 -15
  337. package/src/math/Vector4.js +15 -11
  338. package/src/math/interpolants/BezierInterpolant.js +106 -0
  339. package/src/nodes/Nodes.js +86 -71
  340. package/src/nodes/TSL.js +15 -13
  341. package/src/nodes/accessors/Arrays.js +5 -5
  342. package/src/nodes/accessors/Batch.js +108 -0
  343. package/src/nodes/accessors/Bitangent.js +7 -7
  344. package/src/nodes/accessors/BufferAttributeNode.js +120 -17
  345. package/src/nodes/accessors/BufferNode.js +29 -2
  346. package/src/nodes/accessors/Camera.js +149 -28
  347. package/src/nodes/accessors/ClippingNode.js +5 -5
  348. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  349. package/src/nodes/accessors/Instance.js +264 -0
  350. package/src/nodes/accessors/MaterialNode.js +27 -3
  351. package/src/nodes/accessors/MaterialProperties.js +6 -8
  352. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  353. package/src/nodes/accessors/ModelNode.js +1 -1
  354. package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
  355. package/src/nodes/accessors/Normal.js +24 -24
  356. package/src/nodes/accessors/Object3DNode.js +1 -1
  357. package/src/nodes/accessors/Position.js +39 -3
  358. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  359. package/src/nodes/accessors/ReferenceNode.js +9 -8
  360. package/src/nodes/accessors/ReflectVector.js +3 -3
  361. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  362. package/src/nodes/accessors/SceneProperties.js +47 -0
  363. package/src/nodes/accessors/Skinning.js +263 -0
  364. package/src/nodes/accessors/StorageBufferNode.js +16 -27
  365. package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
  366. package/src/nodes/accessors/StorageTextureNode.js +74 -11
  367. package/src/nodes/accessors/Tangent.js +8 -18
  368. package/src/nodes/accessors/Texture3DNode.js +32 -35
  369. package/src/nodes/accessors/TextureNode.js +124 -25
  370. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  371. package/src/nodes/accessors/UserDataNode.js +1 -2
  372. package/src/nodes/accessors/VertexColorNode.js +1 -2
  373. package/src/nodes/code/FunctionCallNode.js +1 -1
  374. package/src/nodes/code/FunctionNode.js +4 -19
  375. package/src/nodes/core/ArrayNode.js +21 -2
  376. package/src/nodes/core/AssignNode.js +3 -3
  377. package/src/nodes/core/AttributeNode.js +3 -3
  378. package/src/nodes/core/BypassNode.js +1 -1
  379. package/src/nodes/core/ContextNode.js +104 -5
  380. package/src/nodes/core/IndexNode.js +2 -1
  381. package/src/nodes/core/InputNode.js +1 -1
  382. package/src/nodes/core/InspectorNode.js +1 -1
  383. package/src/nodes/core/IsolateNode.js +1 -1
  384. package/src/nodes/core/MRTNode.js +55 -4
  385. package/src/nodes/core/Node.js +151 -17
  386. package/src/nodes/core/NodeBuilder.js +479 -101
  387. package/src/nodes/core/NodeError.js +28 -0
  388. package/src/nodes/core/NodeFrame.js +12 -4
  389. package/src/nodes/core/NodeUtils.js +20 -18
  390. package/src/nodes/core/OutputStructNode.js +13 -11
  391. package/src/nodes/core/OverrideContextNode.js +153 -0
  392. package/src/nodes/core/ParameterNode.js +4 -4
  393. package/src/nodes/core/PropertyNode.js +66 -4
  394. package/src/nodes/core/StackNode.js +91 -20
  395. package/src/nodes/core/StackTrace.js +139 -0
  396. package/src/nodes/core/StructNode.js +20 -8
  397. package/src/nodes/core/StructTypeNode.js +17 -23
  398. package/src/nodes/core/SubBuildNode.js +2 -2
  399. package/src/nodes/core/UniformGroupNode.js +36 -6
  400. package/src/nodes/core/UniformNode.js +21 -5
  401. package/src/nodes/core/VarNode.js +56 -23
  402. package/src/nodes/core/VaryingNode.js +14 -21
  403. package/src/nodes/display/BlendModes.js +1 -105
  404. package/src/nodes/display/BumpMapNode.js +6 -1
  405. package/src/nodes/display/ColorAdjustment.js +27 -9
  406. package/src/nodes/display/ColorSpaceNode.js +3 -3
  407. package/src/nodes/display/FrontFacingNode.js +38 -9
  408. package/src/nodes/display/NormalMapNode.js +41 -6
  409. package/src/nodes/display/PassNode.js +157 -56
  410. package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
  411. package/src/nodes/display/RenderOutputNode.js +19 -10
  412. package/src/nodes/display/ScreenNode.js +4 -2
  413. package/src/nodes/display/ToneMappingNode.js +1 -1
  414. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  415. package/src/nodes/display/ViewportDepthNode.js +52 -4
  416. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  417. package/src/nodes/display/ViewportTextureNode.js +39 -11
  418. package/src/nodes/fog/Fog.js +18 -35
  419. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  420. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  421. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  422. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  423. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  424. package/src/nodes/functions/VolumetricLightingModel.js +40 -7
  425. package/src/nodes/geometry/RangeNode.js +5 -3
  426. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  427. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  428. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  429. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  430. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  431. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
  432. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  433. package/src/nodes/lighting/EnvironmentNode.js +30 -5
  434. package/src/nodes/lighting/IESSpotLightNode.js +40 -2
  435. package/src/nodes/lighting/LightingContextNode.js +10 -2
  436. package/src/nodes/lighting/LightsNode.js +97 -65
  437. package/src/nodes/lighting/PointShadowNode.js +166 -148
  438. package/src/nodes/lighting/ShadowFilterNode.js +74 -117
  439. package/src/nodes/lighting/ShadowNode.js +149 -51
  440. package/src/nodes/materialx/lib/mx_noise.js +2 -2
  441. package/src/nodes/math/BitcastNode.js +1 -1
  442. package/src/nodes/math/BitcountNode.js +433 -0
  443. package/src/nodes/math/ConditionalNode.js +6 -6
  444. package/src/nodes/math/MathNode.js +115 -52
  445. package/src/nodes/math/OperatorNode.js +24 -23
  446. package/src/nodes/math/PackFloatNode.js +98 -0
  447. package/src/nodes/math/UnpackFloatNode.js +96 -0
  448. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  449. package/src/nodes/pmrem/PMREMNode.js +34 -3
  450. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  451. package/src/nodes/tsl/TSLBase.js +1 -1
  452. package/src/nodes/tsl/TSLCore.js +99 -33
  453. package/src/nodes/utils/ArrayElementNode.js +14 -1
  454. package/src/nodes/utils/ConvertNode.js +1 -1
  455. package/src/nodes/utils/DebugNode.js +12 -12
  456. package/src/nodes/utils/EquirectUV.js +30 -5
  457. package/src/nodes/utils/EventNode.js +31 -2
  458. package/src/nodes/utils/FlipNode.js +1 -1
  459. package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
  460. package/src/nodes/utils/JoinNode.js +3 -3
  461. package/src/nodes/utils/LoopNode.js +1 -1
  462. package/src/nodes/utils/MemberNode.js +2 -2
  463. package/src/nodes/utils/Packing.js +48 -5
  464. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  465. package/src/nodes/utils/RTTNode.js +41 -25
  466. package/src/nodes/utils/ReflectorNode.js +4 -4
  467. package/src/nodes/utils/Remap.js +48 -0
  468. package/src/nodes/utils/RotateNode.js +1 -1
  469. package/src/nodes/utils/SampleNode.js +1 -1
  470. package/src/nodes/utils/SetNode.js +1 -1
  471. package/src/nodes/utils/SplitNode.js +1 -1
  472. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  473. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  474. package/src/nodes/utils/UVUtils.js +28 -0
  475. package/src/objects/BatchedMesh.js +66 -30
  476. package/src/objects/InstancedMesh.js +19 -3
  477. package/src/objects/Line.js +1 -1
  478. package/src/objects/Mesh.js +1 -1
  479. package/src/objects/Points.js +1 -1
  480. package/src/objects/SkinnedMesh.js +26 -9
  481. package/src/renderers/WebGLRenderer.js +344 -156
  482. package/src/renderers/common/Animation.js +3 -3
  483. package/src/renderers/common/Attributes.js +15 -1
  484. package/src/renderers/common/Backend.js +78 -13
  485. package/src/renderers/common/Background.js +26 -13
  486. package/src/renderers/common/BindGroup.js +1 -16
  487. package/src/renderers/common/Binding.js +11 -0
  488. package/src/renderers/common/Bindings.js +141 -57
  489. package/src/renderers/common/BlendMode.js +143 -0
  490. package/src/renderers/common/Buffer.js +49 -0
  491. package/src/renderers/common/BundleGroup.js +1 -1
  492. package/src/renderers/common/ChainMap.js +30 -6
  493. package/src/renderers/common/ClippingContext.js +10 -2
  494. package/src/renderers/common/ComputePipeline.js +1 -1
  495. package/src/renderers/common/CubeRenderTarget.js +51 -7
  496. package/src/renderers/common/Geometries.js +29 -3
  497. package/src/renderers/common/Info.js +374 -4
  498. package/src/renderers/common/InspectorBase.js +6 -1
  499. package/src/renderers/common/Lighting.js +51 -19
  500. package/src/renderers/common/Pipelines.js +40 -7
  501. package/src/renderers/common/PostProcessing.js +8 -206
  502. package/src/renderers/common/ReadbackBuffer.js +78 -0
  503. package/src/renderers/common/RenderBundle.js +3 -1
  504. package/src/renderers/common/RenderBundles.js +7 -3
  505. package/src/renderers/common/RenderContext.js +16 -0
  506. package/src/renderers/common/RenderContexts.js +33 -49
  507. package/src/renderers/common/RenderList.js +41 -4
  508. package/src/renderers/common/RenderLists.js +2 -1
  509. package/src/renderers/common/RenderObject.js +88 -16
  510. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  511. package/src/renderers/common/RenderObjects.js +21 -5
  512. package/src/renderers/common/RenderPipeline.js +232 -17
  513. package/src/renderers/common/Renderer.js +700 -163
  514. package/src/renderers/common/Sampler.js +16 -48
  515. package/src/renderers/common/StorageBuffer.js +13 -1
  516. package/src/renderers/common/Textures.js +121 -9
  517. package/src/renderers/common/TimestampQueryPool.js +6 -4
  518. package/src/renderers/common/Uniform.js +8 -0
  519. package/src/renderers/common/UniformsGroup.js +84 -1
  520. package/src/renderers/common/XRManager.js +377 -51
  521. package/src/renderers/common/extras/PMREMGenerator.js +40 -61
  522. package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
  523. package/src/renderers/common/nodes/NodeLibrary.js +4 -4
  524. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
  525. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  526. package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
  527. package/src/renderers/shaders/DFGLUTData.js +19 -34
  528. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  529. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  530. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  531. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  532. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  533. package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
  534. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
  535. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  536. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
  537. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
  538. package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
  539. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  540. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  541. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  542. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  543. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +3 -1
  544. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  545. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  546. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
  547. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  548. package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
  549. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  550. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  551. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  552. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  553. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  554. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
  555. package/src/renderers/shaders/ShaderChunk.js +5 -3
  556. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  557. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  558. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
  559. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  560. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  561. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  562. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  563. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  564. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  565. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  566. package/src/renderers/shaders/ShaderLib.js +7 -6
  567. package/src/renderers/shaders/UniformsLib.js +7 -5
  568. package/src/renderers/shaders/UniformsUtils.js +27 -5
  569. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  570. package/src/renderers/webgl/WebGLBackground.js +15 -15
  571. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  572. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  573. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  574. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  575. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  576. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  577. package/src/renderers/webgl/WebGLLights.js +18 -1
  578. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  579. package/src/renderers/webgl/WebGLObjects.js +3 -1
  580. package/src/renderers/webgl/WebGLOutput.js +271 -0
  581. package/src/renderers/webgl/WebGLProgram.js +54 -113
  582. package/src/renderers/webgl/WebGLPrograms.js +74 -55
  583. package/src/renderers/webgl/WebGLRenderLists.js +24 -1
  584. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  585. package/src/renderers/webgl/WebGLShaderCache.js +5 -11
  586. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  587. package/src/renderers/webgl/WebGLState.js +75 -37
  588. package/src/renderers/webgl/WebGLTextures.js +230 -56
  589. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  590. package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
  591. package/src/renderers/webgl/WebGLUtils.js +6 -2
  592. package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
  593. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  594. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
  595. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  596. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  597. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  598. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
  599. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  600. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
  601. package/src/renderers/webgpu/WebGPUBackend.js +733 -302
  602. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  603. package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
  604. package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
  605. package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
  606. package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
  607. package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
  608. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
  609. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
  610. package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
  611. package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
  612. package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
  613. package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
  614. package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
  615. package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
  616. package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
  617. package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
  618. package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
  619. package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
  620. package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
  621. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
  622. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
  623. package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
  624. package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
  625. package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
  626. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
  627. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
  628. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
  629. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
  630. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
  631. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  632. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  633. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
  634. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
  635. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
  636. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
  637. package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
  638. package/src/renderers/webxr/WebXRController.js +12 -0
  639. package/src/renderers/webxr/WebXRManager.js +4 -2
  640. package/src/textures/CubeDepthTexture.js +76 -0
  641. package/src/textures/DepthTexture.js +1 -1
  642. package/src/textures/ExternalTexture.js +0 -3
  643. package/src/textures/HTMLTexture.js +74 -0
  644. package/src/textures/Source.js +2 -2
  645. package/src/textures/Texture.js +16 -5
  646. package/src/utils.js +280 -3
  647. package/examples/fonts/LICENSE +0 -13
  648. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  649. package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
  650. package/examples/fonts/README.md +0 -11
  651. package/examples/fonts/droid/NOTICE +0 -190
  652. package/examples/fonts/droid/README.txt +0 -18
  653. package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
  654. package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
  655. package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
  656. package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
  657. package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
  658. package/examples/fonts/gentilis_bold.typeface.json +0 -1
  659. package/examples/fonts/gentilis_regular.typeface.json +0 -1
  660. package/examples/fonts/helvetiker_bold.typeface.json +0 -1
  661. package/examples/fonts/helvetiker_regular.typeface.json +0 -1
  662. package/examples/fonts/optimer_bold.typeface.json +0 -1
  663. package/examples/fonts/optimer_regular.typeface.json +0 -1
  664. package/examples/fonts/ttf/README.md +0 -9
  665. package/examples/fonts/ttf/kenpixel.ttf +0 -0
  666. package/examples/jsm/libs/ammo.wasm.js +0 -822
  667. package/examples/jsm/libs/ammo.wasm.wasm +0 -0
  668. package/examples/jsm/libs/draco/draco_encoder.js +0 -33
  669. package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
  670. package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
  671. package/examples/jsm/libs/opentype.module.js +0 -14506
  672. package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
  673. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
  674. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  675. package/examples/jsm/lighting/TiledLighting.js +0 -42
  676. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  677. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  678. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  679. package/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
  680. package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
  681. package/src/nodes/accessors/BatchNode.js +0 -163
  682. package/src/nodes/accessors/InstanceNode.js +0 -244
  683. package/src/nodes/accessors/InstancedMeshNode.js +0 -50
  684. package/src/nodes/accessors/SceneNode.js +0 -145
  685. package/src/nodes/accessors/SkinningNode.js +0 -327
  686. package/src/nodes/code/ScriptableNode.js +0 -726
  687. package/src/nodes/code/ScriptableValueNode.js +0 -253
  688. package/src/nodes/display/PosterizeNode.js +0 -65
  689. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  690. package/src/nodes/utils/RemapNode.js +0 -125
  691. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  692. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  693. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -3,22 +3,21 @@ import { texture as TSL_Texture } from '../../nodes/accessors/TextureNode.js';
3
3
  import { positionWorldDirection } from '../../nodes/accessors/Position.js';
4
4
  import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
5
5
 
6
- import { WebGLCubeRenderTarget } from '../../renderers/WebGLCubeRenderTarget.js';
6
+ import { RenderTarget } from '../../core/RenderTarget.js';
7
7
  import { Scene } from '../../scenes/Scene.js';
8
8
  import { CubeCamera } from '../../cameras/CubeCamera.js';
9
9
  import { BoxGeometry } from '../../geometries/BoxGeometry.js';
10
10
  import { Mesh } from '../../objects/Mesh.js';
11
+ import { CubeTexture } from '../../textures/CubeTexture.js';
11
12
  import { BackSide, NoBlending, LinearFilter, LinearMipmapLinearFilter } from '../../constants.js';
12
13
 
13
- // @TODO: Consider rename WebGLCubeRenderTarget to just CubeRenderTarget
14
-
15
14
  /**
16
15
  * This class represents a cube render target. It is a special version
17
16
  * of `WebGLCubeRenderTarget` which is compatible with `WebGPURenderer`.
18
17
  *
19
- * @augments WebGLCubeRenderTarget
18
+ * @augments RenderTarget
20
19
  */
21
- class CubeRenderTarget extends WebGLCubeRenderTarget {
20
+ class CubeRenderTarget extends RenderTarget {
22
21
 
23
22
  /**
24
23
  * Constructs a new cube render target.
@@ -28,7 +27,7 @@ class CubeRenderTarget extends WebGLCubeRenderTarget {
28
27
  */
29
28
  constructor( size = 1, options = {} ) {
30
29
 
31
- super( size, options );
30
+ super( size, size, options );
32
31
 
33
32
  /**
34
33
  * This flag can be used for type testing.
@@ -39,6 +38,27 @@ class CubeRenderTarget extends WebGLCubeRenderTarget {
39
38
  */
40
39
  this.isCubeRenderTarget = true;
41
40
 
41
+ const image = { width: size, height: size, depth: 1 };
42
+ const images = [ image, image, image, image, image, image ];
43
+
44
+ /**
45
+ * Overwritten with a different texture type.
46
+ *
47
+ * @type {DataArrayTexture}
48
+ */
49
+ this.texture = new CubeTexture( images );
50
+ this._setTextureOptions( options );
51
+
52
+ // By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)
53
+ // in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,
54
+ // in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.
55
+
56
+ // three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped
57
+ // and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture
58
+ // as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).
59
+
60
+ this.texture.isRenderTargetTexture = true;
61
+
42
62
  }
43
63
 
44
64
  /**
@@ -89,7 +109,7 @@ class CubeRenderTarget extends WebGLCubeRenderTarget {
89
109
  renderer.setMRT( currentMRT );
90
110
 
91
111
  texture.minFilter = currentMinFilter;
92
- texture.currentGenerateMipmaps = currentGenerateMipmaps;
112
+ texture.generateMipmaps = currentGenerateMipmaps;
93
113
 
94
114
  mesh.geometry.dispose();
95
115
  mesh.material.dispose();
@@ -98,6 +118,30 @@ class CubeRenderTarget extends WebGLCubeRenderTarget {
98
118
 
99
119
  }
100
120
 
121
+ /**
122
+ * Clears this cube render target.
123
+ *
124
+ * @param {Renderer} renderer - The renderer.
125
+ * @param {boolean} [color=true] - Whether the color buffer should be cleared or not.
126
+ * @param {boolean} [depth=true] - Whether the depth buffer should be cleared or not.
127
+ * @param {boolean} [stencil=true] - Whether the stencil buffer should be cleared or not.
128
+ */
129
+ clear( renderer, color = true, depth = true, stencil = true ) {
130
+
131
+ const currentRenderTarget = renderer.getRenderTarget();
132
+
133
+ for ( let i = 0; i < 6; i ++ ) {
134
+
135
+ renderer.setRenderTarget( this, i );
136
+
137
+ renderer.clear( color, depth, stencil );
138
+
139
+ }
140
+
141
+ renderer.setRenderTarget( currentRenderTarget );
142
+
143
+ }
144
+
101
145
  }
102
146
 
103
147
  export default CubeRenderTarget;
@@ -1,6 +1,5 @@
1
1
  import DataMap from './DataMap.js';
2
2
  import { AttributeType } from './Constants.js';
3
- import { arrayNeedsUint32 } from '../../utils.js';
4
3
 
5
4
  import { Uint16BufferAttribute, Uint32BufferAttribute } from '../../core/BufferAttribute.js';
6
5
 
@@ -18,6 +17,20 @@ function getWireframeVersion( geometry ) {
18
17
 
19
18
  }
20
19
 
20
+ /**
21
+ * Returns the wireframe ID for the given geometry.
22
+ *
23
+ * @private
24
+ * @function
25
+ * @param {BufferGeometry} geometry - The geometry.
26
+ * @return {number} The ID.
27
+ */
28
+ function getWireframeId( geometry ) {
29
+
30
+ return ( geometry.index !== null ) ? geometry.index.id : geometry.attributes.position.id;
31
+
32
+ }
33
+
21
34
  /**
22
35
  * Returns a wireframe index attribute for the given geometry.
23
36
  *
@@ -63,8 +76,9 @@ function getWireframeIndex( geometry ) {
63
76
 
64
77
  }
65
78
 
66
- const attribute = new ( arrayNeedsUint32( indices ) ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );
79
+ const attribute = new ( geometryPosition.count >= 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );
67
80
  attribute.version = getWireframeVersion( geometry );
81
+ attribute.__id = getWireframeId( geometry );
68
82
 
69
83
  return attribute;
70
84
 
@@ -310,6 +324,18 @@ class Geometries extends DataMap {
310
324
 
311
325
  }
312
326
 
327
+ /**
328
+ * Returns the byte offset into the indirect attribute buffer of the given render object.
329
+ *
330
+ * @param {RenderObject} renderObject - The render object.
331
+ * @return {number} The byte offset into the indirect attribute buffer.
332
+ */
333
+ getIndirectOffset( renderObject ) {
334
+
335
+ return renderObject.geometry.indirectOffset;
336
+
337
+ }
338
+
313
339
  /**
314
340
  * Returns the index of the given render object's geometry. This is implemented
315
341
  * in a method to return a wireframe index if necessary.
@@ -335,7 +361,7 @@ class Geometries extends DataMap {
335
361
 
336
362
  wireframes.set( geometry, wireframeAttribute );
337
363
 
338
- } else if ( wireframeAttribute.version !== getWireframeVersion( geometry ) ) {
364
+ } else if ( wireframeAttribute.version !== getWireframeVersion( geometry ) || wireframeAttribute.__id !== getWireframeId( geometry ) ) {
339
365
 
340
366
  this.attributes.delete( wireframeAttribute );
341
367
 
@@ -1,4 +1,12 @@
1
1
  import { error } from '../../utils.js';
2
+ import {
3
+ ByteType, UnsignedByteType, ShortType, UnsignedShortType, HalfFloatType,
4
+ IntType, UnsignedIntType, FloatType,
5
+ AlphaFormat, RedFormat, RedIntegerFormat, DepthFormat, DepthStencilFormat,
6
+ RGFormat, RGIntegerFormat, RGBFormat, RGBIntegerFormat,
7
+ UnsignedShort4444Type, UnsignedShort5551Type,
8
+ UnsignedInt248Type, UnsignedInt5999Type, UnsignedInt101111Type
9
+ } from '../../constants.js';
2
10
 
3
11
  /**
4
12
  * This renderer module provides a series of statistical information
@@ -86,14 +94,56 @@ class Info {
86
94
  *
87
95
  * @type {Object}
88
96
  * @readonly
97
+ * @property {number} attributes - The number of active attributes.
98
+ * @property {number} attributesSize - The memory size of active attributes in bytes.
89
99
  * @property {number} geometries - The number of active geometries.
90
- * @property {number} frameCalls - The number of active textures.
100
+ * @property {number} indexAttributes - The number of active index attributes.
101
+ * @property {number} indexAttributesSize - The memory size of active index attributes in bytes.
102
+ * @property {number} indirectStorageAttributes - The number of active indirect storage attributes.
103
+ * @property {number} indirectStorageAttributesSize - The memory size of active indirect storage attributes in bytes.
104
+ * @property {number} programs - The number of active programs.
105
+ * @property {number} programsSize - The memory size of active programs in bytes.
106
+ * @property {number} readbackBuffers - The number of active readback buffers.
107
+ * @property {number} readbackBuffersSize - The memory size of active readback buffers in bytes.
108
+ * @property {number} renderTargets - The number of active renderTargets.
109
+ * @property {number} storageAttributes - The number of active storage attributes.
110
+ * @property {number} storageAttributesSize - The memory size of active storage attributes in bytes.
111
+ * @property {number} textures - The number of active textures.
112
+ * @property {number} texturesSize - The memory size of active textures in bytes.
113
+ * @property {number} uniformBuffers - The number of active uniform buffers.
114
+ * @property {number} uniformBuffersSize - The memory size of active uniform buffers in bytes.
115
+ * @property {number} total - The total memory size in bytes.
91
116
  */
92
117
  this.memory = {
118
+ attributes: 0,
119
+ attributesSize: 0,
93
120
  geometries: 0,
94
- textures: 0
121
+ indexAttributes: 0,
122
+ indexAttributesSize: 0,
123
+ indirectStorageAttributes: 0,
124
+ indirectStorageAttributesSize: 0,
125
+ programs: 0,
126
+ programsSize: 0,
127
+ readbackBuffers: 0,
128
+ readbackBuffersSize: 0,
129
+ renderTargets: 0,
130
+ storageAttributes: 0,
131
+ storageAttributesSize: 0,
132
+ textures: 0,
133
+ texturesSize: 0,
134
+ uniformBuffers: 0,
135
+ uniformBuffersSize: 0,
136
+ total: 0
95
137
  };
96
138
 
139
+ /**
140
+ * Map for storing calculated byte sizes of tracked objects.
141
+ *
142
+ * @type {Map<Object, number>}
143
+ * @private
144
+ */
145
+ this.memoryMap = new Map();
146
+
97
147
  }
98
148
 
99
149
  /**
@@ -161,8 +211,328 @@ class Info {
161
211
 
162
212
  this.render.timestamp = 0;
163
213
  this.compute.timestamp = 0;
164
- this.memory.geometries = 0;
165
- this.memory.textures = 0;
214
+
215
+ for ( const prop in this.memory ) {
216
+
217
+ this.memory[ prop ] = 0;
218
+
219
+ }
220
+
221
+ this.memoryMap.clear();
222
+
223
+ }
224
+
225
+ /**
226
+ * Tracks texture memory explicitly, updating counts and byte tracking.
227
+ *
228
+ * @param {Texture} texture
229
+ */
230
+ createTexture( texture ) {
231
+
232
+ const size = this._getTextureMemorySize( texture );
233
+ this.memoryMap.set( texture, size );
234
+
235
+ this.memory.textures ++;
236
+ this.memory.total += size;
237
+ this.memory.texturesSize += size;
238
+
239
+ }
240
+
241
+ /**
242
+ * Tracks texture memory explicitly, updating counts and byte tracking.
243
+ *
244
+ * @param {Texture} texture
245
+ */
246
+ destroyTexture( texture ) {
247
+
248
+ const size = this.memoryMap.get( texture ) || 0;
249
+ this.memoryMap.delete( texture );
250
+
251
+ this.memory.textures --;
252
+ this.memory.total -= size;
253
+ this.memory.texturesSize -= size;
254
+
255
+ }
256
+
257
+ /**
258
+ * Tracks attribute memory explicitly, updating counts and byte tracking.
259
+ *
260
+ * @param {BufferAttribute} attribute
261
+ * @param {string} type - type of attribute
262
+ * @private
263
+ */
264
+ _createAttribute( attribute, type ) {
265
+
266
+ const size = this._getAttributeMemorySize( attribute );
267
+ this.memoryMap.set( attribute, { size, type } );
268
+
269
+ this.memory[ type ] ++;
270
+ this.memory.total += size;
271
+ this.memory[ type + 'Size' ] += size;
272
+
273
+ }
274
+
275
+ /**
276
+ * Tracks a regular attribute memory explicitly.
277
+ *
278
+ * @param {BufferAttribute} attribute - The attribute to track.
279
+ */
280
+ createAttribute( attribute ) {
281
+
282
+ this._createAttribute( attribute, 'attributes' );
283
+
284
+ }
285
+
286
+ /**
287
+ * Tracks an index attribute memory explicitly.
288
+ *
289
+ * @param {BufferAttribute} attribute - The index attribute to track.
290
+ */
291
+ createIndexAttribute( attribute ) {
292
+
293
+ this._createAttribute( attribute, 'indexAttributes' );
294
+
295
+ }
296
+
297
+ /**
298
+ * Tracks a storage attribute memory explicitly.
299
+ *
300
+ * @param {BufferAttribute} attribute - The storage attribute to track.
301
+ */
302
+ createStorageAttribute( attribute ) {
303
+
304
+ this._createAttribute( attribute, 'storageAttributes' );
305
+
306
+ }
307
+
308
+ /**
309
+ * Tracks an indirect storage attribute memory explicitly.
310
+ *
311
+ * @param {BufferAttribute} attribute - The indirect storage attribute to track.
312
+ */
313
+ createIndirectStorageAttribute( attribute ) {
314
+
315
+ this._createAttribute( attribute, 'indirectStorageAttributes' );
316
+
317
+ }
318
+
319
+ /**
320
+ * Tracks attribute memory explicitly, updating counts and byte tracking.
321
+ *
322
+ * @param {BufferAttribute} attribute
323
+ */
324
+ destroyAttribute( attribute ) {
325
+
326
+ const data = this.memoryMap.get( attribute );
327
+
328
+ if ( data ) {
329
+
330
+ this.memoryMap.delete( attribute );
331
+
332
+ this.memory[ data.type ] --;
333
+ this.memory.total -= data.size;
334
+ this.memory[ data.type + 'Size' ] -= data.size;
335
+
336
+ }
337
+
338
+ }
339
+
340
+ /**
341
+ * Tracks a readback buffer memory explicitly.
342
+ *
343
+ * @param {ReadbackBuffer} readbackBuffer - The readback buffer to track.
344
+ */
345
+ createReadbackBuffer( readbackBuffer ) {
346
+
347
+ const maxByteLength = readbackBuffer.maxByteLength;
348
+ this.memoryMap.set( readbackBuffer, { size: maxByteLength, type: 'readbackBuffers' } );
349
+
350
+ this.memory.readbackBuffers ++;
351
+ this.memory.total += maxByteLength;
352
+ this.memory.readbackBuffersSize += maxByteLength;
353
+
354
+ }
355
+
356
+ /**
357
+ * Tracks a readback buffer memory explicitly.
358
+ *
359
+ * @param {ReadbackBuffer} readbackBuffer - The readback buffer to track.
360
+ */
361
+ destroyReadbackBuffer( readbackBuffer ) {
362
+
363
+ const { size } = this.memoryMap.get( readbackBuffer );
364
+ this.memoryMap.delete( readbackBuffer );
365
+
366
+ this.memory.readbackBuffers --;
367
+ this.memory.total -= size;
368
+ this.memory.readbackBuffersSize -= size;
369
+
370
+ }
371
+
372
+ /**
373
+ * Tracks a uniform buffer memory explicitly.
374
+ *
375
+ * @param {UniformBuffer} uniformBuffer - The uniform buffer to track.
376
+ */
377
+ createUniformBuffer( uniformBuffer ) {
378
+
379
+ const size = uniformBuffer.byteLength;
380
+ this.memoryMap.set( uniformBuffer, { size, type: 'uniformBuffers' } );
381
+
382
+ this.memory.uniformBuffers ++;
383
+ this.memory.total += size;
384
+ this.memory.uniformBuffersSize += size;
385
+
386
+ }
387
+
388
+ /**
389
+ * Tracks a uniform buffer memory explicitly.
390
+ *
391
+ * @param {UniformBuffer} uniformBuffer - The uniform buffer to track.
392
+ */
393
+ destroyUniformBuffer( uniformBuffer ) {
394
+
395
+ const data = this.memoryMap.get( uniformBuffer );
396
+
397
+ if ( data ) {
398
+
399
+ this.memoryMap.delete( uniformBuffer );
400
+
401
+ this.memory.uniformBuffers --;
402
+ this.memory.total -= data.size;
403
+ this.memory.uniformBuffersSize -= data.size;
404
+
405
+ }
406
+
407
+ }
408
+
409
+ /**
410
+ * Tracks program memory explicitly, updating counts and byte tracking.
411
+ *
412
+ * @param {ProgrammableStage} program - The program to track.
413
+ */
414
+ createProgram( program ) {
415
+
416
+ const size = program.code.length; // Approx size
417
+
418
+ this.memoryMap.set( program, size );
419
+
420
+ this.memory.programs ++;
421
+ this.memory.total += size;
422
+ this.memory.programsSize += size;
423
+
424
+ }
425
+
426
+ /**
427
+ * Tracks program memory explicitly, updating counts and byte tracking.
428
+ *
429
+ * @param {Object} program - The program to track.
430
+ */
431
+ destroyProgram( program ) {
432
+
433
+ const size = this.memoryMap.get( program ) || 0;
434
+ this.memoryMap.delete( program );
435
+
436
+ this.memory.programs --;
437
+ this.memory.total -= size;
438
+ this.memory.programsSize -= size;
439
+
440
+ }
441
+
442
+ /**
443
+ * Calculates the memory size of a texture in bytes.
444
+ *
445
+ * @param {Texture} texture - The texture to calculate the size for.
446
+ * @return {number} The calculated size in bytes.
447
+ * @private
448
+ */
449
+ _getTextureMemorySize( texture ) {
450
+
451
+ if ( texture.isCompressedTexture ) {
452
+
453
+ return 1; // Fallback estimate since exact format decompressed isn't readily available without format maps
454
+
455
+ }
456
+
457
+ let bytesPerChannel = 1;
458
+
459
+ if ( texture.type === ByteType || texture.type === UnsignedByteType ) bytesPerChannel = 1;
460
+ else if ( texture.type === ShortType || texture.type === UnsignedShortType || texture.type === HalfFloatType ) bytesPerChannel = 2;
461
+ else if ( texture.type === IntType || texture.type === UnsignedIntType || texture.type === FloatType ) bytesPerChannel = 4;
462
+
463
+ let channels = 4; // RGBA default
464
+
465
+ if ( texture.format === AlphaFormat || texture.format === RedFormat || texture.format === RedIntegerFormat || texture.format === DepthFormat || texture.format === DepthStencilFormat ) channels = 1;
466
+ else if ( texture.format === RGFormat || texture.format === RGIntegerFormat ) channels = 2;
467
+ else if ( texture.format === RGBFormat || texture.format === RGBIntegerFormat ) channels = 3;
468
+
469
+ let bytesPerPixel = bytesPerChannel * channels;
470
+
471
+ // Packed overrides
472
+ if ( texture.type === UnsignedShort4444Type || texture.type === UnsignedShort5551Type ) bytesPerPixel = 2;
473
+ else if ( texture.type === UnsignedInt248Type || texture.type === UnsignedInt5999Type || texture.type === UnsignedInt101111Type ) bytesPerPixel = 4;
474
+
475
+ const width = texture.width || 1;
476
+ const height = texture.height || 1;
477
+ const depth = texture.isCubeTexture ? 6 : ( texture.depth || 1 );
478
+
479
+ let size = width * height * depth * bytesPerPixel;
480
+ const mipmaps = texture.mipmaps;
481
+
482
+ if ( mipmaps && mipmaps.length > 0 ) {
483
+
484
+ let mipmapSize = 0;
485
+ for ( let i = 0; i < mipmaps.length; i ++ ) {
486
+
487
+ const mipmap = mipmaps[ i ];
488
+ if ( mipmap.data ) {
489
+
490
+ mipmapSize += mipmap.data.byteLength;
491
+
492
+ } else {
493
+
494
+ const mipWidth = mipmap.width || Math.max( 1, width >> i );
495
+ const mipHeight = mipmap.height || Math.max( 1, height >> i );
496
+ mipmapSize += mipWidth * mipHeight * depth * bytesPerPixel;
497
+
498
+ }
499
+
500
+ }
501
+
502
+ size += mipmapSize;
503
+
504
+ } else if ( texture.generateMipmaps ) {
505
+
506
+ size = size * 1.333; // MiP chain approximation
507
+
508
+ }
509
+
510
+ return Math.round( size );
511
+
512
+ }
513
+
514
+ /**
515
+ * Calculates the memory size of an attribute in bytes.
516
+ *
517
+ * @param {BufferAttribute} attribute - The attribute to calculate the size for.
518
+ * @return {number} The calculated size in bytes.
519
+ * @private
520
+ */
521
+ _getAttributeMemorySize( attribute ) {
522
+
523
+ if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;
524
+
525
+ if ( attribute.array ) {
526
+
527
+ return attribute.array.byteLength;
528
+
529
+ } else if ( attribute.count && attribute.itemSize ) {
530
+
531
+ return attribute.count * attribute.itemSize * 4; // Assume Float32
532
+
533
+ }
534
+
535
+ return 0;
166
536
 
167
537
  }
168
538
 
@@ -1,15 +1,20 @@
1
+ import { EventDispatcher } from '../../core/EventDispatcher.js';
2
+
1
3
  /**
2
4
  * InspectorBase is the base class for all inspectors.
3
5
  *
4
6
  * @class InspectorBase
7
+ * @augments EventDispatcher
5
8
  */
6
- class InspectorBase {
9
+ class InspectorBase extends EventDispatcher {
7
10
 
8
11
  /**
9
12
  * Creates a new InspectorBase.
10
13
  */
11
14
  constructor() {
12
15
 
16
+ super();
17
+
13
18
  /**
14
19
  * The renderer associated with this inspector.
15
20
  *
@@ -1,8 +1,7 @@
1
1
  import { LightsNode } from '../../nodes/Nodes.js';
2
- import ChainMap from './ChainMap.js';
3
2
 
4
3
  const _defaultLights = /*@__PURE__*/ new LightsNode();
5
- const _chainKeys = [];
4
+ const _weakMap = /*@__PURE__*/ new WeakMap();
6
5
 
7
6
  /**
8
7
  * This renderer module manages the lights nodes which are unique
@@ -12,16 +11,29 @@ const _chainKeys = [];
12
11
  * with the actual lights from the scene.
13
12
  *
14
13
  * @private
15
- * @augments ChainMap
16
14
  */
17
- class Lighting extends ChainMap {
15
+ class Lighting {
18
16
 
19
17
  /**
20
- * Constructs a lighting management component.
18
+ * Constructs a new lighting manager.
21
19
  */
22
20
  constructor() {
23
21
 
24
- super();
22
+ /**
23
+ * Whether this lighting manager is enabled or not.
24
+ *
25
+ * @type {boolean}
26
+ * @default true
27
+ */
28
+ this.enabled = true;
29
+
30
+ /**
31
+ * A stack of light arrays saved per render via {@link Lighting#beginRender}.
32
+ *
33
+ * @private
34
+ * @type {Array<Array<Light>>}
35
+ */
36
+ this._cache = [];
25
37
 
26
38
  }
27
39
 
@@ -38,36 +50,56 @@ class Lighting extends ChainMap {
38
50
  }
39
51
 
40
52
  /**
41
- * Returns a lights node for the given scene and camera.
53
+ * Returns a lights node for the given scene.
42
54
  *
43
55
  * @param {Scene} scene - The scene.
44
- * @param {Camera} camera - The camera.
45
56
  * @return {LightsNode} The lights node.
46
57
  */
47
- getNode( scene, camera ) {
58
+ getNode( scene ) {
48
59
 
49
- // ignore post-processing
60
+ // Ignore renderable objects, e.g: Mesh, Sprite, etc.
61
+ if ( scene.isScene !== true && scene.isGroup !== true ) return _defaultLights;
50
62
 
51
- if ( scene.isQuadMesh ) return _defaultLights;
52
-
53
- _chainKeys[ 0 ] = scene;
54
- _chainKeys[ 1 ] = camera;
55
-
56
- let node = this.get( _chainKeys );
63
+ let node = _weakMap.get( scene );
57
64
 
58
65
  if ( node === undefined ) {
59
66
 
60
67
  node = this.createNode();
61
- this.set( _chainKeys, node );
68
+ _weakMap.set( scene, node );
62
69
 
63
70
  }
64
71
 
65
- _chainKeys.length = 0;
66
-
67
72
  return node;
68
73
 
69
74
  }
70
75
 
76
+ /**
77
+ * Saves the current lights of the scene's lights node so they can be restored
78
+ * in {@link Lighting#finishRender}. Must be paired with a `finishRender()` call
79
+ * to avoid memory leaks.
80
+ *
81
+ * Nested render calls might mutate the lights array so a save/restore is required
82
+ * for each render call.
83
+ *
84
+ * @param {Scene} scene - The scene.
85
+ */
86
+ beginRender( scene ) {
87
+
88
+ this._cache.push( this.getNode( scene ).getLights() );
89
+
90
+ }
91
+
92
+ /**
93
+ * Restores the lights saved by the matching {@link Lighting#beginRender} call.
94
+ *
95
+ * @param {Scene} scene - The scene.
96
+ */
97
+ finishRender( scene ) {
98
+
99
+ this.getNode( scene ).setLights( this._cache.pop() );
100
+
101
+ }
102
+
71
103
  }
72
104
 
73
105
  export default Lighting;