super-three 0.181.0 → 0.184.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 (539) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +13152 -11354
  4. package/build/three.core.js +12319 -11539
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1808 -781
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +27 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +10523 -6263
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +10484 -6262
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +11 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +7 -4
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +58 -54
  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 +34 -2
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  26. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  27. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  28. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  29. package/examples/jsm/exporters/EXRExporter.js +1 -1
  30. package/examples/jsm/exporters/GLTFExporter.js +152 -9
  31. package/examples/jsm/exporters/USDZExporter.js +22 -3
  32. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  33. package/examples/jsm/geometries/TextGeometry.js +18 -0
  34. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  36. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  37. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  38. package/examples/jsm/helpers/ViewHelper.js +67 -8
  39. package/examples/jsm/inspector/Extension.js +13 -0
  40. package/examples/jsm/inspector/Inspector.js +203 -88
  41. package/examples/jsm/inspector/RendererInspector.js +14 -4
  42. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  43. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  44. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  45. package/examples/jsm/inspector/tabs/Console.js +41 -7
  46. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  47. package/examples/jsm/inspector/tabs/Parameters.js +51 -3
  48. package/examples/jsm/inspector/tabs/Performance.js +4 -4
  49. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  50. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  51. package/examples/jsm/inspector/tabs/Viewer.js +107 -5
  52. package/examples/jsm/inspector/ui/Graph.js +2 -2
  53. package/examples/jsm/inspector/ui/List.js +1 -1
  54. package/examples/jsm/inspector/ui/Profiler.js +1936 -34
  55. package/examples/jsm/inspector/ui/Style.js +1044 -31
  56. package/examples/jsm/inspector/ui/Tab.js +222 -3
  57. package/examples/jsm/inspector/ui/Values.js +55 -2
  58. package/examples/jsm/inspector/ui/utils.js +13 -0
  59. package/examples/jsm/interaction/InteractionManager.js +226 -0
  60. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  61. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  62. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  63. package/examples/jsm/lines/LineMaterial.js +7 -1
  64. package/examples/jsm/loaders/3DMLoader.js +5 -4
  65. package/examples/jsm/loaders/3MFLoader.js +2 -2
  66. package/examples/jsm/loaders/AMFLoader.js +2 -2
  67. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  68. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  69. package/examples/jsm/loaders/EXRLoader.js +687 -48
  70. package/examples/jsm/loaders/FBXLoader.js +235 -37
  71. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  72. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  73. package/examples/jsm/loaders/HDRLoader.js +1 -2
  74. package/examples/jsm/loaders/KMZLoader.js +5 -5
  75. package/examples/jsm/loaders/KTX2Loader.js +27 -5
  76. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  77. package/examples/jsm/loaders/LWOLoader.js +7 -39
  78. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  79. package/examples/jsm/loaders/PCDLoader.js +4 -2
  80. package/examples/jsm/loaders/SVGLoader.js +2 -2
  81. package/examples/jsm/loaders/TDSLoader.js +0 -2
  82. package/examples/jsm/loaders/TGALoader.js +0 -2
  83. package/examples/jsm/loaders/USDLoader.js +100 -40
  84. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  85. package/examples/jsm/loaders/VOXLoader.js +660 -117
  86. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  87. package/examples/jsm/loaders/VTKLoader.js +42 -25
  88. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  89. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  90. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  91. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  92. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  93. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  94. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  95. package/examples/jsm/math/Octree.js +131 -1
  96. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  97. package/examples/jsm/misc/RollerCoaster.js +42 -4
  98. package/examples/jsm/misc/Volume.js +0 -1
  99. package/examples/jsm/misc/VolumeSlice.js +0 -1
  100. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  101. package/examples/jsm/objects/LensflareMesh.js +1 -1
  102. package/examples/jsm/objects/Reflector.js +73 -25
  103. package/examples/jsm/objects/Sky.js +90 -6
  104. package/examples/jsm/objects/SkyMesh.js +150 -16
  105. package/examples/jsm/objects/Water.js +4 -3
  106. package/examples/jsm/objects/Water2.js +5 -3
  107. package/examples/jsm/objects/WaterMesh.js +5 -7
  108. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  109. package/examples/jsm/physics/JoltPhysics.js +10 -6
  110. package/examples/jsm/physics/RapierPhysics.js +9 -5
  111. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  112. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  113. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  114. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  115. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  116. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  117. package/examples/jsm/renderers/Projector.js +246 -28
  118. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  119. package/examples/jsm/shaders/GTAOShader.js +19 -6
  120. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  122. package/examples/jsm/shaders/SAOShader.js +17 -4
  123. package/examples/jsm/shaders/SSAOShader.js +11 -1
  124. package/examples/jsm/shaders/SSRShader.js +6 -5
  125. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  126. package/examples/jsm/shaders/VignetteShader.js +1 -1
  127. package/examples/jsm/transpiler/AST.js +44 -0
  128. package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  130. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  131. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  132. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  133. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  134. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  135. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  136. package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
  137. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  138. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  139. package/examples/jsm/tsl/display/CRT.js +150 -0
  140. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  141. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  142. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  143. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  144. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  145. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  146. package/examples/jsm/tsl/display/GTAONode.js +6 -4
  147. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  148. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  149. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  150. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  151. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  152. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  153. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  154. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  155. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  156. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  157. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  158. package/examples/jsm/tsl/display/SSGINode.js +8 -24
  159. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  160. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  161. package/examples/jsm/tsl/display/Shape.js +29 -0
  162. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  163. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  164. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  165. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  166. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  167. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  168. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  169. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  170. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  171. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  172. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  173. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  174. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  175. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  176. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  177. package/examples/jsm/tsl/math/Bayer.js +53 -3
  178. package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
  179. package/examples/jsm/utils/ColorUtils.js +76 -0
  180. package/examples/jsm/utils/LDrawUtils.js +1 -1
  181. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  182. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  183. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  186. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  187. package/package.json +24 -30
  188. package/src/Three.Core.js +3 -1
  189. package/src/Three.TSL.js +25 -11
  190. package/src/Three.WebGPU.Nodes.js +5 -0
  191. package/src/Three.WebGPU.js +9 -0
  192. package/src/Three.js +1 -0
  193. package/src/animation/AnimationAction.js +12 -2
  194. package/src/animation/AnimationClip.js +1 -1
  195. package/src/animation/AnimationMixer.js +6 -0
  196. package/src/animation/AnimationUtils.js +1 -12
  197. package/src/animation/KeyframeTrack.js +47 -8
  198. package/src/animation/PropertyMixer.js +4 -4
  199. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  200. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  201. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  202. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  203. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  204. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  205. package/src/audio/Audio.js +1 -1
  206. package/src/audio/AudioContext.js +2 -2
  207. package/src/audio/AudioListener.js +5 -3
  208. package/src/cameras/Camera.js +32 -2
  209. package/src/cameras/CubeCamera.js +20 -0
  210. package/src/constants.js +90 -5
  211. package/src/core/BufferAttribute.js +13 -1
  212. package/src/core/BufferGeometry.js +14 -2
  213. package/src/core/Clock.js +7 -0
  214. package/src/core/Object3D.js +52 -4
  215. package/src/core/Raycaster.js +2 -2
  216. package/src/core/RenderTarget.js +4 -4
  217. package/src/extras/PMREMGenerator.js +7 -18
  218. package/src/extras/TextureUtils.js +5 -1
  219. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  220. package/src/geometries/ExtrudeGeometry.js +2 -2
  221. package/src/geometries/PolyhedronGeometry.js +1 -1
  222. package/src/geometries/TorusGeometry.js +8 -3
  223. package/src/helpers/CameraHelper.js +3 -0
  224. package/src/helpers/DirectionalLightHelper.js +4 -1
  225. package/src/helpers/HemisphereLightHelper.js +3 -0
  226. package/src/helpers/PointLightHelper.js +1 -25
  227. package/src/helpers/SpotLightHelper.js +3 -0
  228. package/src/lights/DirectionalLight.js +13 -0
  229. package/src/lights/HemisphereLight.js +10 -0
  230. package/src/lights/Light.js +1 -11
  231. package/src/lights/LightProbe.js +0 -15
  232. package/src/lights/LightShadow.js +15 -6
  233. package/src/lights/PointLight.js +15 -0
  234. package/src/lights/PointLightShadow.js +0 -86
  235. package/src/lights/SpotLight.js +22 -1
  236. package/src/lights/webgpu/IESSpotLight.js +2 -1
  237. package/src/loaders/AudioLoader.js +11 -1
  238. package/src/loaders/Cache.js +28 -0
  239. package/src/loaders/DataTextureLoader.js +6 -4
  240. package/src/loaders/FileLoader.js +2 -3
  241. package/src/loaders/ImageBitmapLoader.js +12 -9
  242. package/src/loaders/Loader.js +6 -0
  243. package/src/loaders/MaterialLoader.js +3 -2
  244. package/src/loaders/ObjectLoader.js +46 -6
  245. package/src/loaders/nodes/NodeLoader.js +2 -2
  246. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  247. package/src/materials/Material.js +2 -0
  248. package/src/materials/MeshLambertMaterial.js +9 -0
  249. package/src/materials/MeshPhongMaterial.js +9 -0
  250. package/src/materials/MeshToonMaterial.js +1 -1
  251. package/src/materials/ShaderMaterial.js +20 -1
  252. package/src/materials/nodes/Line2NodeMaterial.js +34 -7
  253. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  254. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  255. package/src/materials/nodes/NodeMaterial.js +45 -25
  256. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
  257. package/src/math/Line3.js +6 -5
  258. package/src/math/MathUtils.js +10 -10
  259. package/src/math/Matrix2.js +13 -9
  260. package/src/math/Matrix3.js +13 -9
  261. package/src/math/Matrix4.js +87 -74
  262. package/src/math/Plane.js +4 -3
  263. package/src/math/Quaternion.js +3 -29
  264. package/src/math/Sphere.js +1 -1
  265. package/src/math/Triangle.js +1 -1
  266. package/src/math/Vector2.js +11 -7
  267. package/src/math/Vector3.js +15 -13
  268. package/src/math/Vector4.js +13 -9
  269. package/src/math/interpolants/BezierInterpolant.js +108 -0
  270. package/src/nodes/Nodes.js +86 -68
  271. package/src/nodes/TSL.js +7 -7
  272. package/src/nodes/accessors/Arrays.js +1 -1
  273. package/src/nodes/accessors/BatchNode.js +10 -10
  274. package/src/nodes/accessors/Bitangent.js +5 -5
  275. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  276. package/src/nodes/accessors/BufferNode.js +29 -2
  277. package/src/nodes/accessors/Camera.js +149 -28
  278. package/src/nodes/accessors/ClippingNode.js +4 -4
  279. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  280. package/src/nodes/accessors/InstanceNode.js +148 -43
  281. package/src/nodes/accessors/MaterialNode.js +9 -1
  282. package/src/nodes/accessors/MaterialProperties.js +2 -5
  283. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  284. package/src/nodes/accessors/ModelNode.js +1 -1
  285. package/src/nodes/accessors/Normal.js +11 -11
  286. package/src/nodes/accessors/Object3DNode.js +1 -1
  287. package/src/nodes/accessors/Position.js +34 -2
  288. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  289. package/src/nodes/accessors/ReferenceNode.js +8 -8
  290. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  291. package/src/nodes/accessors/SceneProperties.js +47 -0
  292. package/src/nodes/accessors/SkinningNode.js +27 -26
  293. package/src/nodes/accessors/StorageBufferNode.js +14 -25
  294. package/src/nodes/accessors/StorageTextureNode.js +40 -9
  295. package/src/nodes/accessors/Tangent.js +4 -14
  296. package/src/nodes/accessors/Texture3DNode.js +32 -35
  297. package/src/nodes/accessors/TextureNode.js +67 -23
  298. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  299. package/src/nodes/accessors/UserDataNode.js +1 -2
  300. package/src/nodes/accessors/VertexColorNode.js +1 -2
  301. package/src/nodes/code/FunctionCallNode.js +1 -1
  302. package/src/nodes/code/FunctionNode.js +2 -3
  303. package/src/nodes/core/ArrayNode.js +21 -2
  304. package/src/nodes/core/AssignNode.js +3 -3
  305. package/src/nodes/core/AttributeNode.js +3 -3
  306. package/src/nodes/core/BypassNode.js +1 -1
  307. package/src/nodes/core/ContextNode.js +104 -5
  308. package/src/nodes/core/IndexNode.js +2 -1
  309. package/src/nodes/core/InputNode.js +1 -1
  310. package/src/nodes/core/InspectorNode.js +1 -1
  311. package/src/nodes/core/IsolateNode.js +1 -1
  312. package/src/nodes/core/MRTNode.js +48 -2
  313. package/src/nodes/core/Node.js +112 -15
  314. package/src/nodes/core/NodeBuilder.js +284 -66
  315. package/src/nodes/core/NodeError.js +28 -0
  316. package/src/nodes/core/NodeFrame.js +12 -4
  317. package/src/nodes/core/NodeUtils.js +11 -9
  318. package/src/nodes/core/OutputStructNode.js +12 -10
  319. package/src/nodes/core/ParameterNode.js +4 -4
  320. package/src/nodes/core/PropertyNode.js +19 -3
  321. package/src/nodes/core/StackNode.js +66 -17
  322. package/src/nodes/core/StackTrace.js +139 -0
  323. package/src/nodes/core/StructNode.js +17 -3
  324. package/src/nodes/core/StructTypeNode.js +12 -18
  325. package/src/nodes/core/SubBuildNode.js +2 -2
  326. package/src/nodes/core/UniformGroupNode.js +36 -6
  327. package/src/nodes/core/UniformNode.js +21 -5
  328. package/src/nodes/core/VarNode.js +48 -23
  329. package/src/nodes/core/VaryingNode.js +2 -19
  330. package/src/nodes/display/BlendModes.js +0 -64
  331. package/src/nodes/display/ColorAdjustment.js +17 -0
  332. package/src/nodes/display/ColorSpaceNode.js +3 -3
  333. package/src/nodes/display/NormalMapNode.js +39 -4
  334. package/src/nodes/display/PassNode.js +125 -16
  335. package/src/nodes/display/RenderOutputNode.js +7 -7
  336. package/src/nodes/display/ScreenNode.js +4 -2
  337. package/src/nodes/display/ToneMappingNode.js +1 -1
  338. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  339. package/src/nodes/display/ViewportDepthNode.js +52 -4
  340. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  341. package/src/nodes/display/ViewportTextureNode.js +39 -11
  342. package/src/nodes/fog/Fog.js +18 -35
  343. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  344. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  345. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  346. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  347. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  348. package/src/nodes/geometry/RangeNode.js +5 -3
  349. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  350. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  351. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  352. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  353. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  354. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  355. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  356. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  357. package/src/nodes/lighting/LightsNode.js +7 -28
  358. package/src/nodes/lighting/PointShadowNode.js +162 -149
  359. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  360. package/src/nodes/lighting/ShadowNode.js +120 -42
  361. package/src/nodes/math/BitcastNode.js +1 -1
  362. package/src/nodes/math/BitcountNode.js +433 -0
  363. package/src/nodes/math/ConditionalNode.js +3 -3
  364. package/src/nodes/math/MathNode.js +76 -41
  365. package/src/nodes/math/OperatorNode.js +3 -2
  366. package/src/nodes/math/PackFloatNode.js +98 -0
  367. package/src/nodes/math/UnpackFloatNode.js +96 -0
  368. package/src/nodes/pmrem/PMREMNode.js +1 -1
  369. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  370. package/src/nodes/tsl/TSLBase.js +1 -1
  371. package/src/nodes/tsl/TSLCore.js +38 -17
  372. package/src/nodes/utils/ArrayElementNode.js +14 -1
  373. package/src/nodes/utils/ConvertNode.js +1 -1
  374. package/src/nodes/utils/DebugNode.js +12 -12
  375. package/src/nodes/utils/EventNode.js +31 -2
  376. package/src/nodes/utils/FlipNode.js +1 -1
  377. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  378. package/src/nodes/utils/JoinNode.js +3 -3
  379. package/src/nodes/utils/LoopNode.js +1 -1
  380. package/src/nodes/utils/MemberNode.js +2 -2
  381. package/src/nodes/utils/Packing.js +13 -1
  382. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  383. package/src/nodes/utils/RTTNode.js +1 -1
  384. package/src/nodes/utils/ReflectorNode.js +3 -4
  385. package/src/nodes/utils/Remap.js +48 -0
  386. package/src/nodes/utils/RotateNode.js +1 -1
  387. package/src/nodes/utils/SampleNode.js +1 -1
  388. package/src/nodes/utils/SetNode.js +1 -1
  389. package/src/nodes/utils/SplitNode.js +1 -1
  390. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  391. package/src/nodes/utils/UVUtils.js +28 -0
  392. package/src/objects/BatchedMesh.js +44 -16
  393. package/src/objects/InstancedMesh.js +30 -3
  394. package/src/objects/Line.js +1 -1
  395. package/src/objects/Mesh.js +1 -1
  396. package/src/objects/Points.js +1 -1
  397. package/src/objects/Skeleton.js +9 -0
  398. package/src/objects/SkinnedMesh.js +26 -9
  399. package/src/renderers/WebGLRenderer.js +329 -145
  400. package/src/renderers/common/Animation.js +3 -3
  401. package/src/renderers/common/Attributes.js +15 -1
  402. package/src/renderers/common/Backend.js +29 -8
  403. package/src/renderers/common/Background.js +26 -13
  404. package/src/renderers/common/BindGroup.js +1 -16
  405. package/src/renderers/common/Binding.js +11 -0
  406. package/src/renderers/common/Bindings.js +29 -14
  407. package/src/renderers/common/BlendMode.js +143 -0
  408. package/src/renderers/common/Buffer.js +40 -0
  409. package/src/renderers/common/BundleGroup.js +1 -1
  410. package/src/renderers/common/ChainMap.js +30 -6
  411. package/src/renderers/common/ComputePipeline.js +1 -1
  412. package/src/renderers/common/CubeRenderTarget.js +51 -7
  413. package/src/renderers/common/Geometries.js +29 -3
  414. package/src/renderers/common/Info.js +333 -4
  415. package/src/renderers/common/InspectorBase.js +6 -1
  416. package/src/renderers/common/Lighting.js +5 -21
  417. package/src/renderers/common/Pipelines.js +40 -7
  418. package/src/renderers/common/PostProcessing.js +8 -206
  419. package/src/renderers/common/ReadbackBuffer.js +78 -0
  420. package/src/renderers/common/RenderBundle.js +3 -1
  421. package/src/renderers/common/RenderBundles.js +7 -3
  422. package/src/renderers/common/RenderContext.js +16 -0
  423. package/src/renderers/common/RenderContexts.js +33 -49
  424. package/src/renderers/common/RenderLists.js +2 -1
  425. package/src/renderers/common/RenderObject.js +17 -5
  426. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  427. package/src/renderers/common/RenderObjects.js +21 -5
  428. package/src/renderers/common/RenderPipeline.js +232 -17
  429. package/src/renderers/common/Renderer.js +481 -117
  430. package/src/renderers/common/Sampler.js +4 -4
  431. package/src/renderers/common/StorageBuffer.js +13 -1
  432. package/src/renderers/common/Textures.js +89 -4
  433. package/src/renderers/common/TimestampQueryPool.js +5 -3
  434. package/src/renderers/common/Uniform.js +8 -0
  435. package/src/renderers/common/UniformsGroup.js +62 -1
  436. package/src/renderers/common/XRManager.js +37 -29
  437. package/src/renderers/common/extras/PMREMGenerator.js +25 -23
  438. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  439. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
  440. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  441. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  442. package/src/renderers/shaders/DFGLUTData.js +19 -34
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  444. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  445. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  446. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  447. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  448. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  449. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  450. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  451. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  452. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  453. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  454. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  455. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  456. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  457. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  458. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  459. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  461. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  462. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  463. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  464. package/src/renderers/shaders/ShaderChunk.js +5 -3
  465. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  466. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  467. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  468. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  469. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  470. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  472. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  473. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  474. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  475. package/src/renderers/shaders/ShaderLib.js +7 -6
  476. package/src/renderers/shaders/UniformsLib.js +7 -5
  477. package/src/renderers/shaders/UniformsUtils.js +27 -5
  478. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  479. package/src/renderers/webgl/WebGLBackground.js +15 -15
  480. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  481. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  482. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  483. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  484. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  485. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  486. package/src/renderers/webgl/WebGLLights.js +18 -1
  487. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  488. package/src/renderers/webgl/WebGLObjects.js +3 -1
  489. package/src/renderers/webgl/WebGLOutput.js +270 -0
  490. package/src/renderers/webgl/WebGLProgram.js +49 -109
  491. package/src/renderers/webgl/WebGLPrograms.js +63 -51
  492. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  493. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  494. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  495. package/src/renderers/webgl/WebGLState.js +75 -37
  496. package/src/renderers/webgl/WebGLTextures.js +215 -54
  497. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  498. package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
  499. package/src/renderers/webgl/WebGLUtils.js +6 -2
  500. package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
  501. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  504. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
  507. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  508. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  509. package/src/renderers/webgpu/WebGPUBackend.js +260 -140
  510. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  511. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
  512. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
  513. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  514. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  515. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  516. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  517. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
  519. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  520. package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
  521. package/src/renderers/webxr/WebXRController.js +12 -0
  522. package/src/renderers/webxr/WebXRManager.js +4 -2
  523. package/src/textures/CubeDepthTexture.js +76 -0
  524. package/src/textures/HTMLTexture.js +74 -0
  525. package/src/textures/Source.js +2 -2
  526. package/src/textures/Texture.js +16 -5
  527. package/src/utils.js +280 -3
  528. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  529. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  530. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  531. package/src/nodes/accessors/SceneNode.js +0 -145
  532. package/src/nodes/code/ScriptableNode.js +0 -726
  533. package/src/nodes/code/ScriptableValueNode.js +0 -253
  534. package/src/nodes/display/PosterizeNode.js +0 -65
  535. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  536. package/src/nodes/utils/RemapNode.js +0 -125
  537. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  538. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  539. 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
@@ -87,13 +95,51 @@ class Info {
87
95
  * @type {Object}
88
96
  * @readonly
89
97
  * @property {number} geometries - The number of active geometries.
90
- * @property {number} frameCalls - The number of active textures.
98
+ * @property {number} textures - The number of active textures.
99
+ * @property {number} attributes - The number of active attributes.
100
+ * @property {number} indexAttributes - The number of active index attributes.
101
+ * @property {number} storageAttributes - The number of active storage attributes.
102
+ * @property {number} indirectStorageAttributes - The number of active indirect storage attributes.
103
+ * @property {number} readbackBuffers - The number of active readback buffers.
104
+ * @property {number} programs - The number of active programs.
105
+ * @property {number} renderTargets - The number of active renderTargets.
106
+ * @property {number} total - The total memory size in bytes.
107
+ * @property {number} texturesSize - The memory size of active textures in bytes.
108
+ * @property {number} attributesSize - The memory size of active attributes in bytes.
109
+ * @property {number} indexAttributesSize - The memory size of active index attributes in bytes.
110
+ * @property {number} storageAttributesSize - The memory size of active storage attributes in bytes.
111
+ * @property {number} indirectStorageAttributesSize - The memory size of active indirect storage attributes in bytes.
112
+ * @property {number} readbackBuffersSize - The memory size of active readback buffers in bytes.
113
+ * @property {number} programsSize - The memory size of active programs in bytes.
91
114
  */
92
115
  this.memory = {
93
116
  geometries: 0,
94
- textures: 0
117
+ textures: 0,
118
+ attributes: 0,
119
+ indexAttributes: 0,
120
+ storageAttributes: 0,
121
+ indirectStorageAttributes: 0,
122
+ readbackBuffers: 0,
123
+ programs: 0,
124
+ renderTargets: 0,
125
+ total: 0,
126
+ texturesSize: 0,
127
+ attributesSize: 0,
128
+ indexAttributesSize: 0,
129
+ storageAttributesSize: 0,
130
+ indirectStorageAttributesSize: 0,
131
+ readbackBuffersSize: 0,
132
+ programsSize: 0
95
133
  };
96
134
 
135
+ /**
136
+ * Map for storing calculated byte sizes of tracked objects.
137
+ *
138
+ * @type {Map<Object, number>}
139
+ * @private
140
+ */
141
+ this.memoryMap = new Map();
142
+
97
143
  }
98
144
 
99
145
  /**
@@ -161,8 +207,291 @@ class Info {
161
207
 
162
208
  this.render.timestamp = 0;
163
209
  this.compute.timestamp = 0;
164
- this.memory.geometries = 0;
165
- this.memory.textures = 0;
210
+
211
+ for ( const prop in this.memory ) {
212
+
213
+ this.memory[ prop ] = 0;
214
+
215
+ }
216
+
217
+ this.memoryMap.clear();
218
+
219
+ }
220
+
221
+ /**
222
+ * Tracks texture memory explicitly, updating counts and byte tracking.
223
+ *
224
+ * @param {Texture} texture
225
+ */
226
+ createTexture( texture ) {
227
+
228
+ const size = this._getTextureMemorySize( texture );
229
+ this.memoryMap.set( texture, size );
230
+
231
+ this.memory.textures ++;
232
+ this.memory.total += size;
233
+ this.memory.texturesSize += size;
234
+
235
+ }
236
+
237
+ /**
238
+ * Tracks texture memory explicitly, updating counts and byte tracking.
239
+ *
240
+ * @param {Texture} texture
241
+ */
242
+ destroyTexture( texture ) {
243
+
244
+ const size = this.memoryMap.get( texture ) || 0;
245
+ this.memoryMap.delete( texture );
246
+
247
+ this.memory.textures --;
248
+ this.memory.total -= size;
249
+ this.memory.texturesSize -= size;
250
+
251
+ }
252
+
253
+ /**
254
+ * Tracks attribute memory explicitly, updating counts and byte tracking.
255
+ *
256
+ * @param {BufferAttribute} attribute
257
+ * @param {string} type - type of attribute
258
+ * @private
259
+ */
260
+ _createAttribute( attribute, type ) {
261
+
262
+ const size = this._getAttributeMemorySize( attribute );
263
+ this.memoryMap.set( attribute, { size, type } );
264
+
265
+ this.memory[ type ] ++;
266
+ this.memory.total += size;
267
+ this.memory[ type + 'Size' ] += size;
268
+
269
+ }
270
+
271
+ /**
272
+ * Tracks a regular attribute memory explicitly.
273
+ *
274
+ * @param {BufferAttribute} attribute - The attribute to track.
275
+ */
276
+ createAttribute( attribute ) {
277
+
278
+ this._createAttribute( attribute, 'attributes' );
279
+
280
+ }
281
+
282
+ /**
283
+ * Tracks an index attribute memory explicitly.
284
+ *
285
+ * @param {BufferAttribute} attribute - The index attribute to track.
286
+ */
287
+ createIndexAttribute( attribute ) {
288
+
289
+ this._createAttribute( attribute, 'indexAttributes' );
290
+
291
+ }
292
+
293
+ /**
294
+ * Tracks a storage attribute memory explicitly.
295
+ *
296
+ * @param {BufferAttribute} attribute - The storage attribute to track.
297
+ */
298
+ createStorageAttribute( attribute ) {
299
+
300
+ this._createAttribute( attribute, 'storageAttributes' );
301
+
302
+ }
303
+
304
+ /**
305
+ * Tracks an indirect storage attribute memory explicitly.
306
+ *
307
+ * @param {BufferAttribute} attribute - The indirect storage attribute to track.
308
+ */
309
+ createIndirectStorageAttribute( attribute ) {
310
+
311
+ this._createAttribute( attribute, 'indirectStorageAttributes' );
312
+
313
+ }
314
+
315
+ /**
316
+ * Tracks attribute memory explicitly, updating counts and byte tracking.
317
+ *
318
+ * @param {BufferAttribute} attribute
319
+ */
320
+ destroyAttribute( attribute ) {
321
+
322
+ const data = this.memoryMap.get( attribute );
323
+
324
+ if ( data ) {
325
+
326
+ this.memoryMap.delete( attribute );
327
+
328
+ this.memory[ data.type ] --;
329
+ this.memory.total -= data.size;
330
+ this.memory[ data.type + 'Size' ] -= data.size;
331
+
332
+ }
333
+
334
+ }
335
+
336
+ /**
337
+ * Tracks a readback buffer memory explicitly.
338
+ *
339
+ * @param {ReadbackBuffer} readbackBuffer - The readback buffer to track.
340
+ */
341
+ createReadbackBuffer( readbackBuffer ) {
342
+
343
+ const maxByteLength = readbackBuffer.maxByteLength;
344
+ this.memoryMap.set( readbackBuffer, { size: maxByteLength, type: 'readbackBuffers' } );
345
+
346
+ this.memory.readbackBuffers ++;
347
+ this.memory.total += maxByteLength;
348
+ this.memory.readbackBuffersSize += maxByteLength;
349
+
350
+ }
351
+
352
+ /**
353
+ * Tracks a readback buffer memory explicitly.
354
+ *
355
+ * @param {ReadbackBuffer} readbackBuffer - The readback buffer to track.
356
+ */
357
+ destroyReadbackBuffer( readbackBuffer ) {
358
+
359
+ const { size } = this.memoryMap.get( readbackBuffer );
360
+ this.memoryMap.delete( readbackBuffer );
361
+
362
+ this.memory.readbackBuffers --;
363
+ this.memory.total -= size;
364
+ this.memory.readbackBuffersSize -= size;
365
+
366
+ }
367
+
368
+ /**
369
+ * Tracks program memory explicitly, updating counts and byte tracking.
370
+ *
371
+ * @param {ProgrammableStage} program - The program to track.
372
+ */
373
+ createProgram( program ) {
374
+
375
+ const size = program.code.length; // Approx size
376
+
377
+ this.memoryMap.set( program, size );
378
+
379
+ this.memory.programs ++;
380
+ this.memory.total += size;
381
+ this.memory.programsSize += size;
382
+
383
+ }
384
+
385
+ /**
386
+ * Tracks program memory explicitly, updating counts and byte tracking.
387
+ *
388
+ * @param {Object} program - The program to track.
389
+ */
390
+ destroyProgram( program ) {
391
+
392
+ const size = this.memoryMap.get( program ) || 0;
393
+ this.memoryMap.delete( program );
394
+
395
+ this.memory.programs --;
396
+ this.memory.total -= size;
397
+ this.memory.programsSize -= size;
398
+
399
+ }
400
+
401
+ /**
402
+ * Calculates the memory size of a texture in bytes.
403
+ *
404
+ * @param {Texture} texture - The texture to calculate the size for.
405
+ * @return {number} The calculated size in bytes.
406
+ * @private
407
+ */
408
+ _getTextureMemorySize( texture ) {
409
+
410
+ if ( texture.isCompressedTexture ) {
411
+
412
+ return 1; // Fallback estimate since exact format decompressed isn't readily available without format maps
413
+
414
+ }
415
+
416
+ let bytesPerChannel = 1;
417
+
418
+ if ( texture.type === ByteType || texture.type === UnsignedByteType ) bytesPerChannel = 1;
419
+ else if ( texture.type === ShortType || texture.type === UnsignedShortType || texture.type === HalfFloatType ) bytesPerChannel = 2;
420
+ else if ( texture.type === IntType || texture.type === UnsignedIntType || texture.type === FloatType ) bytesPerChannel = 4;
421
+
422
+ let channels = 4; // RGBA default
423
+
424
+ if ( texture.format === AlphaFormat || texture.format === RedFormat || texture.format === RedIntegerFormat || texture.format === DepthFormat || texture.format === DepthStencilFormat ) channels = 1;
425
+ else if ( texture.format === RGFormat || texture.format === RGIntegerFormat ) channels = 2;
426
+ else if ( texture.format === RGBFormat || texture.format === RGBIntegerFormat ) channels = 3;
427
+
428
+ let bytesPerPixel = bytesPerChannel * channels;
429
+
430
+ // Packed overrides
431
+ if ( texture.type === UnsignedShort4444Type || texture.type === UnsignedShort5551Type ) bytesPerPixel = 2;
432
+ else if ( texture.type === UnsignedInt248Type || texture.type === UnsignedInt5999Type || texture.type === UnsignedInt101111Type ) bytesPerPixel = 4;
433
+
434
+ const width = texture.width || 1;
435
+ const height = texture.height || 1;
436
+ const depth = texture.isCubeTexture ? 6 : ( texture.depth || 1 );
437
+
438
+ let size = width * height * depth * bytesPerPixel;
439
+ const mipmaps = texture.mipmaps;
440
+
441
+ if ( mipmaps && mipmaps.length > 0 ) {
442
+
443
+ let mipmapSize = 0;
444
+ for ( let i = 0; i < mipmaps.length; i ++ ) {
445
+
446
+ const mipmap = mipmaps[ i ];
447
+ if ( mipmap.data ) {
448
+
449
+ mipmapSize += mipmap.data.byteLength;
450
+
451
+ } else {
452
+
453
+ const mipWidth = mipmap.width || Math.max( 1, width >> i );
454
+ const mipHeight = mipmap.height || Math.max( 1, height >> i );
455
+ mipmapSize += mipWidth * mipHeight * depth * bytesPerPixel;
456
+
457
+ }
458
+
459
+ }
460
+
461
+ size += mipmapSize;
462
+
463
+ } else if ( texture.generateMipmaps ) {
464
+
465
+ size = size * 1.333; // MiP chain approximation
466
+
467
+ }
468
+
469
+ return Math.round( size );
470
+
471
+ }
472
+
473
+ /**
474
+ * Calculates the memory size of an attribute in bytes.
475
+ *
476
+ * @param {BufferAttribute} attribute - The attribute to calculate the size for.
477
+ * @return {number} The calculated size in bytes.
478
+ * @private
479
+ */
480
+ _getAttributeMemorySize( attribute ) {
481
+
482
+ if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;
483
+
484
+ if ( attribute.array ) {
485
+
486
+ return attribute.array.byteLength;
487
+
488
+ } else if ( attribute.count && attribute.itemSize ) {
489
+
490
+ return attribute.count * attribute.itemSize * 4; // Assume Float32
491
+
492
+ }
493
+
494
+ return 0;
166
495
 
167
496
  }
168
497
 
@@ -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,18 +11,8 @@ 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 {
18
-
19
- /**
20
- * Constructs a lighting management component.
21
- */
22
- constructor() {
23
-
24
- super();
25
-
26
- }
15
+ class Lighting {
27
16
 
28
17
  /**
29
18
  * Creates a new lights node for the given array of lights.
@@ -44,26 +33,21 @@ class Lighting extends ChainMap {
44
33
  * @param {Camera} camera - The camera.
45
34
  * @return {LightsNode} The lights node.
46
35
  */
47
- getNode( scene, camera ) {
36
+ getNode( scene ) {
48
37
 
49
38
  // ignore post-processing
50
39
 
51
40
  if ( scene.isQuadMesh ) return _defaultLights;
52
41
 
53
- _chainKeys[ 0 ] = scene;
54
- _chainKeys[ 1 ] = camera;
55
-
56
- let node = this.get( _chainKeys );
42
+ let node = _weakMap.get( scene );
57
43
 
58
44
  if ( node === undefined ) {
59
45
 
60
46
  node = this.createNode();
61
- this.set( _chainKeys, node );
47
+ _weakMap.set( scene, node );
62
48
 
63
49
  }
64
50
 
65
- _chainKeys.length = 0;
66
-
67
51
  return node;
68
52
 
69
53
  }