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
@@ -0,0 +1,74 @@
1
+ import { Texture } from './Texture.js';
2
+
3
+ /**
4
+ * Creates a texture from an HTML element.
5
+ *
6
+ * This is almost the same as the base texture class, except that it sets {@link Texture#needsUpdate}
7
+ * to `true` immediately and listens for the parent canvas's paint events to trigger updates.
8
+ *
9
+ * @augments Texture
10
+ */
11
+ class HTMLTexture extends Texture {
12
+
13
+ /**
14
+ * Constructs a new texture.
15
+ *
16
+ * @param {HTMLElement} [element] - The HTML element.
17
+ * @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.
18
+ * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
19
+ * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
20
+ * @param {number} [magFilter=LinearFilter] - The mag filter value.
21
+ * @param {number} [minFilter=LinearMipmapLinearFilter] - The min filter value.
22
+ * @param {number} [format=RGBAFormat] - The texture format.
23
+ * @param {number} [type=UnsignedByteType] - The texture type.
24
+ * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
25
+ */
26
+ constructor( element, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {
27
+
28
+ super( element, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
29
+
30
+ /**
31
+ * This flag can be used for type testing.
32
+ *
33
+ * @type {boolean}
34
+ * @readonly
35
+ * @default true
36
+ */
37
+ this.isHTMLTexture = true;
38
+ this.generateMipmaps = false;
39
+
40
+ this.needsUpdate = true;
41
+
42
+ const parent = element ? element.parentNode : null;
43
+
44
+ if ( parent !== null && 'requestPaint' in parent ) {
45
+
46
+ parent.onpaint = () => {
47
+
48
+ this.needsUpdate = true;
49
+
50
+ };
51
+
52
+ parent.requestPaint();
53
+
54
+ }
55
+
56
+ }
57
+
58
+ dispose() {
59
+
60
+ const parent = this.image ? this.image.parentNode : null;
61
+
62
+ if ( parent !== null && 'onpaint' in parent ) {
63
+
64
+ parent.onpaint = null;
65
+
66
+ }
67
+
68
+ super.dispose();
69
+
70
+ }
71
+
72
+ }
73
+
74
+ export { HTMLTexture };
@@ -88,9 +88,9 @@ class Source {
88
88
 
89
89
  target.set( data.videoWidth, data.videoHeight, 0 );
90
90
 
91
- } else if ( data instanceof VideoFrame ) {
91
+ } else if ( ( typeof VideoFrame !== 'undefined' ) && ( data instanceof VideoFrame ) ) {
92
92
 
93
- target.set( data.displayHeight, data.displayWidth, 0 );
93
+ target.set( data.displayWidth, data.displayHeight, 0 );
94
94
 
95
95
  } else if ( data !== null ) {
96
96
 
@@ -68,7 +68,7 @@ class Texture extends EventDispatcher {
68
68
  Object.defineProperty( this, 'id', { value: _textureId ++ } );
69
69
 
70
70
  /**
71
- * The UUID of the material.
71
+ * The UUID of the texture.
72
72
  *
73
73
  * @type {string}
74
74
  * @readonly
@@ -76,7 +76,7 @@ class Texture extends EventDispatcher {
76
76
  this.uuid = generateUUID();
77
77
 
78
78
  /**
79
- * The name of the material.
79
+ * The name of the texture.
80
80
  *
81
81
  * @type {string}
82
82
  */
@@ -158,7 +158,7 @@ class Texture extends EventDispatcher {
158
158
  * texture samples being used.
159
159
  *
160
160
  * @type {number}
161
- * @default 0
161
+ * @default Texture.DEFAULT_ANISOTROPY
162
162
  */
163
163
  this.anisotropy = anisotropy;
164
164
 
@@ -368,6 +368,15 @@ class Texture extends EventDispatcher {
368
368
  */
369
369
  this.pmremVersion = 0;
370
370
 
371
+ /**
372
+ * Whether the texture should use one of the 16 bit integer formats which are normalized
373
+ * to [0, 1] or [-1, 1] (depending on signed/unsigned) when sampled.
374
+ *
375
+ * @type {boolean}
376
+ * @default false
377
+ */
378
+ this.normalized = false;
379
+
371
380
  }
372
381
 
373
382
  /**
@@ -408,14 +417,14 @@ class Texture extends EventDispatcher {
408
417
 
409
418
  }
410
419
 
411
- set image( value = null ) {
420
+ set image( value ) {
412
421
 
413
422
  this.source.data = value;
414
423
 
415
424
  }
416
425
 
417
426
  /**
418
- * Updates the texture transformation matrix from the from the properties {@link Texture#offset},
427
+ * Updates the texture transformation matrix from the properties {@link Texture#offset},
419
428
  * {@link Texture#repeat}, {@link Texture#rotation}, and {@link Texture#center}.
420
429
  */
421
430
  updateMatrix() {
@@ -483,6 +492,7 @@ class Texture extends EventDispatcher {
483
492
  this.format = source.format;
484
493
  this.internalFormat = source.internalFormat;
485
494
  this.type = source.type;
495
+ this.normalized = source.normalized;
486
496
 
487
497
  this.offset.copy( source.offset );
488
498
  this.repeat.copy( source.repeat );
@@ -601,6 +611,7 @@ class Texture extends EventDispatcher {
601
611
  format: this.format,
602
612
  internalFormat: this.internalFormat,
603
613
  type: this.type,
614
+ normalized: this.normalized,
604
615
  colorSpace: this.colorSpace,
605
616
 
606
617
  minFilter: this.minFilter,
package/src/utils.js CHANGED
@@ -1,3 +1,12 @@
1
+ import { AlwaysDepth, EqualDepth, GreaterDepth, GreaterEqualDepth, LessDepth, LessEqualDepth, NeverDepth, NotEqualDepth } from './constants.js';
2
+
3
+ /**
4
+ * Finds the minimum value in an array.
5
+ *
6
+ * @private
7
+ * @param {Array<number>} array - The array to search for the minimum value.
8
+ * @return {number} The minimum value in the array, or Infinity if the array is empty.
9
+ */
1
10
  function arrayMin( array ) {
2
11
 
3
12
  if ( array.length === 0 ) return Infinity;
@@ -14,6 +23,13 @@ function arrayMin( array ) {
14
23
 
15
24
  }
16
25
 
26
+ /**
27
+ * Finds the maximum value in an array.
28
+ *
29
+ * @private
30
+ * @param {Array<number>} array - The array to search for the maximum value.
31
+ * @return {number} The maximum value in the array, or -Infinity if the array is empty.
32
+ */
17
33
  function arrayMax( array ) {
18
34
 
19
35
  if ( array.length === 0 ) return - Infinity;
@@ -30,6 +46,18 @@ function arrayMax( array ) {
30
46
 
31
47
  }
32
48
 
49
+ /**
50
+ * Checks if an array contains values that require Uint32 representation.
51
+ *
52
+ * This function determines whether the array contains any values >= 65535,
53
+ * which would require a Uint32Array rather than a Uint16Array for proper storage.
54
+ * The function iterates from the end of the array, assuming larger values are
55
+ * typically located at the end.
56
+ *
57
+ * @private
58
+ * @param {Array<number>} array - The array to check.
59
+ * @return {boolean} True if the array contains values >= 65535, false otherwise.
60
+ */
33
61
  function arrayNeedsUint32( array ) {
34
62
 
35
63
  // assumes larger values usually on last
@@ -44,6 +72,14 @@ function arrayNeedsUint32( array ) {
44
72
 
45
73
  }
46
74
 
75
+ /**
76
+ * Map of typed array constructor names to their constructors.
77
+ * This mapping enables dynamic creation of typed arrays based on string type names.
78
+ *
79
+ * @private
80
+ * @constant
81
+ * @type {Object<string, TypedArrayConstructor>}
82
+ */
47
83
  const TYPED_ARRAYS = {
48
84
  Int8Array: Int8Array,
49
85
  Uint8Array: Uint8Array,
@@ -56,18 +92,57 @@ const TYPED_ARRAYS = {
56
92
  Float64Array: Float64Array
57
93
  };
58
94
 
95
+ /**
96
+ * Creates a typed array of the specified type from the given buffer.
97
+ *
98
+ * @private
99
+ * @param {string} type - The name of the typed array type (e.g., 'Float32Array', 'Uint16Array').
100
+ * @param {ArrayBuffer} buffer - The buffer to create the typed array from.
101
+ * @return {TypedArray} A new typed array of the specified type.
102
+ */
59
103
  function getTypedArray( type, buffer ) {
60
104
 
61
105
  return new TYPED_ARRAYS[ type ]( buffer );
62
106
 
63
107
  }
64
108
 
109
+ /**
110
+ * Returns `true` if the given object is a typed array.
111
+ *
112
+ * @param {any} array - The object to check.
113
+ * @return {boolean} Whether the given object is a typed array.
114
+ */
115
+ function isTypedArray( array ) {
116
+
117
+ return ArrayBuffer.isView( array ) && ! ( array instanceof DataView );
118
+
119
+ }
120
+
121
+ /**
122
+ * Creates an XHTML element with the specified tag name.
123
+ *
124
+ * This function uses the XHTML namespace to create DOM elements,
125
+ * ensuring proper element creation in XML-based contexts.
126
+ *
127
+ * @private
128
+ * @param {string} name - The tag name of the element to create (e.g., 'canvas', 'div').
129
+ * @return {HTMLElement} The created XHTML element.
130
+ */
65
131
  function createElementNS( name ) {
66
132
 
67
133
  return document.createElementNS( 'http://www.w3.org/1999/xhtml', name );
68
134
 
69
135
  }
70
136
 
137
+ /**
138
+ * Creates a canvas element configured for block display.
139
+ *
140
+ * This is a convenience function that creates a canvas element with
141
+ * display style set to 'block', which is commonly used in three.js
142
+ * rendering contexts to avoid inline element spacing issues.
143
+ *
144
+ * @return {HTMLCanvasElement} A canvas element with display set to 'block'.
145
+ */
71
146
  function createCanvasElement() {
72
147
 
73
148
  const canvas = createElementNS( 'canvas' );
@@ -76,22 +151,59 @@ function createCanvasElement() {
76
151
 
77
152
  }
78
153
 
154
+ /**
155
+ * Internal cache for tracking warning messages to prevent duplicate warnings.
156
+ *
157
+ * @private
158
+ * @type {Object<string, boolean>}
159
+ */
79
160
  const _cache = {};
80
161
 
162
+ /**
163
+ * Custom console function handler for intercepting log, warn, and error calls.
164
+ *
165
+ * @private
166
+ * @type {Function|null}
167
+ */
81
168
  let _setConsoleFunction = null;
82
169
 
170
+ /**
171
+ * Sets a custom function to handle console output.
172
+ *
173
+ * This allows external code to intercept and handle console.log, console.warn,
174
+ * and console.error calls made by three.js, which is useful for custom logging,
175
+ * testing, or debugging workflows.
176
+ *
177
+ * @param {Function} fn - The function to handle console output. Should accept
178
+ * (type, message, ...params) where type is 'log', 'warn', or 'error'.
179
+ */
83
180
  function setConsoleFunction( fn ) {
84
181
 
85
182
  _setConsoleFunction = fn;
86
183
 
87
184
  }
88
185
 
186
+ /**
187
+ * Gets the currently set custom console function.
188
+ *
189
+ * @return {Function|null} The custom console function, or null if not set.
190
+ */
89
191
  function getConsoleFunction() {
90
192
 
91
193
  return _setConsoleFunction;
92
194
 
93
195
  }
94
196
 
197
+ /**
198
+ * Logs an informational message with the 'THREE.' prefix.
199
+ *
200
+ * If a custom console function is set via setConsoleFunction(), it will be used
201
+ * instead of the native console.log. The first parameter is treated as the
202
+ * method name and is automatically prefixed with 'THREE.'.
203
+ *
204
+ * @param {...any} params - The message components. The first param is used as
205
+ * the method name and prefixed with 'THREE.'.
206
+ */
95
207
  function log( ...params ) {
96
208
 
97
209
  const message = 'THREE.' + params.shift();
@@ -108,8 +220,50 @@ function log( ...params ) {
108
220
 
109
221
  }
110
222
 
223
+ /**
224
+ * Enhances log/warn/error messages related to TSL.
225
+ *
226
+ * @param {Array<any>} params - The original message parameters.
227
+ * @returns {Array<any>} The filtered and enhanced message parameters.
228
+ */
229
+ function enhanceLogMessage( params ) {
230
+
231
+ const message = params[ 0 ];
232
+
233
+ if ( typeof message === 'string' && message.startsWith( 'TSL:' ) ) {
234
+
235
+ const stackTrace = params[ 1 ];
236
+
237
+ if ( stackTrace && stackTrace.isStackTrace ) {
238
+
239
+ params[ 0 ] += ' ' + stackTrace.getLocation();
240
+
241
+ } else {
242
+
243
+ params[ 1 ] = 'Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.';
244
+
245
+ }
246
+
247
+ }
248
+
249
+ return params;
250
+
251
+ }
252
+
253
+ /**
254
+ * Logs a warning message with the 'THREE.' prefix.
255
+ *
256
+ * If a custom console function is set via setConsoleFunction(), it will be used
257
+ * instead of the native console.warn. The first parameter is treated as the
258
+ * method name and is automatically prefixed with 'THREE.'.
259
+ *
260
+ * @param {...any} params - The message components. The first param is used as
261
+ * the method name and prefixed with 'THREE.'.
262
+ */
111
263
  function warn( ...params ) {
112
264
 
265
+ params = enhanceLogMessage( params );
266
+
113
267
  const message = 'THREE.' + params.shift();
114
268
 
115
269
  if ( _setConsoleFunction ) {
@@ -118,14 +272,36 @@ function warn( ...params ) {
118
272
 
119
273
  } else {
120
274
 
121
- console.warn( message, ...params );
275
+ const stackTrace = params[ 0 ];
276
+
277
+ if ( stackTrace && stackTrace.isStackTrace ) {
278
+
279
+ console.warn( stackTrace.getError( message ) );
280
+
281
+ } else {
282
+
283
+ console.warn( message, ...params );
284
+
285
+ }
122
286
 
123
287
  }
124
288
 
125
289
  }
126
290
 
291
+ /**
292
+ * Logs an error message with the 'THREE.' prefix.
293
+ *
294
+ * If a custom console function is set via setConsoleFunction(), it will be used
295
+ * instead of the native console.error. The first parameter is treated as the
296
+ * method name and is automatically prefixed with 'THREE.'.
297
+ *
298
+ * @param {...any} params - The message components. The first param is used as
299
+ * the method name and prefixed with 'THREE.'.
300
+ */
127
301
  function error( ...params ) {
128
302
 
303
+ params = enhanceLogMessage( params );
304
+
129
305
  const message = 'THREE.' + params.shift();
130
306
 
131
307
  if ( _setConsoleFunction ) {
@@ -134,12 +310,31 @@ function error( ...params ) {
134
310
 
135
311
  } else {
136
312
 
137
- console.error( message, ...params );
313
+ const stackTrace = params[ 0 ];
314
+
315
+ if ( stackTrace && stackTrace.isStackTrace ) {
316
+
317
+ console.error( stackTrace.getError( message ) );
318
+
319
+ } else {
320
+
321
+ console.error( message, ...params );
322
+
323
+ }
138
324
 
139
325
  }
140
326
 
141
327
  }
142
328
 
329
+ /**
330
+ * Logs a warning message only once, preventing duplicate warnings.
331
+ *
332
+ * This function maintains an internal cache of warning messages and will only
333
+ * output each unique warning message once. Useful for warnings that may be
334
+ * triggered repeatedly but should only be shown to the user once.
335
+ *
336
+ * @param {...any} params - The warning message components.
337
+ */
143
338
  function warnOnce( ...params ) {
144
339
 
145
340
  const message = params.join( ' ' );
@@ -152,6 +347,42 @@ function warnOnce( ...params ) {
152
347
 
153
348
  }
154
349
 
350
+ /**
351
+ * Yields execution to the main thread to allow rendering and other tasks.
352
+ * Uses scheduler.yield() when available (Chrome 115+), falls back to requestAnimationFrame.
353
+ *
354
+ * @return {Promise<void>}
355
+ */
356
+ function yieldToMain() {
357
+
358
+ if ( typeof self !== 'undefined' && typeof self.scheduler !== 'undefined' && typeof self.scheduler.yield !== 'undefined' ) {
359
+
360
+ return self.scheduler.yield();
361
+
362
+ }
363
+
364
+ return new Promise( resolve => {
365
+
366
+ requestAnimationFrame( resolve );
367
+
368
+ } );
369
+
370
+ }
371
+
372
+ /**
373
+ * Asynchronously probes for WebGL sync object completion.
374
+ *
375
+ * This function creates a promise that resolves when the WebGL sync object
376
+ * signals completion or rejects if the sync operation fails. It uses polling
377
+ * at the specified interval to check the sync status without blocking the
378
+ * main thread. This is useful for GPU-CPU synchronization in WebGL contexts.
379
+ *
380
+ * @private
381
+ * @param {WebGL2RenderingContext} gl - The WebGL rendering context.
382
+ * @param {WebGLSync} sync - The WebGL sync object to wait for.
383
+ * @param {number} interval - The polling interval in milliseconds.
384
+ * @return {Promise<void>} A promise that resolves when the sync completes or rejects if it fails.
385
+ */
155
386
  function probeAsync( gl, sync, interval ) {
156
387
 
157
388
  return new Promise( function ( resolve, reject ) {
@@ -181,6 +412,18 @@ function probeAsync( gl, sync, interval ) {
181
412
 
182
413
  }
183
414
 
415
+ /**
416
+ * Converts a projection matrix from normalized device coordinates (NDC)
417
+ * range [-1, 1] to [0, 1].
418
+ *
419
+ * This conversion is commonly needed when working with depth textures or
420
+ * render targets that expect depth values in the [0, 1] range rather than
421
+ * the standard OpenGL NDC range of [-1, 1]. The function modifies the
422
+ * projection matrix in place.
423
+ *
424
+ * @private
425
+ * @param {Matrix4} projectionMatrix - The projection matrix to convert (modified in place).
426
+ */
184
427
  function toNormalizedProjectionMatrix( projectionMatrix ) {
185
428
 
186
429
  const m = projectionMatrix.elements;
@@ -193,6 +436,21 @@ function toNormalizedProjectionMatrix( projectionMatrix ) {
193
436
 
194
437
  }
195
438
 
439
+ /**
440
+ * Reverses the depth range of a projection matrix.
441
+ *
442
+ * This function inverts the depth mapping of a projection matrix, which is
443
+ * useful for reversed-Z depth buffer techniques that can improve depth
444
+ * precision. The function handles both perspective and orthographic projection
445
+ * matrices differently and modifies the matrix in place.
446
+ *
447
+ * For perspective matrices (where m[11] === -1), the depth mapping is
448
+ * reversed with an offset. For orthographic matrices, a simpler reversal
449
+ * is applied.
450
+ *
451
+ * @private
452
+ * @param {Matrix4} projectionMatrix - The projection matrix to reverse (modified in place).
453
+ */
196
454
  function toReversedProjectionMatrix( projectionMatrix ) {
197
455
 
198
456
  const m = projectionMatrix.elements;
@@ -213,4 +471,23 @@ function toReversedProjectionMatrix( projectionMatrix ) {
213
471
 
214
472
  }
215
473
 
216
- export { arrayMin, arrayMax, arrayNeedsUint32, getTypedArray, createElementNS, createCanvasElement, setConsoleFunction, getConsoleFunction, log, warn, error, warnOnce, probeAsync, toNormalizedProjectionMatrix, toReversedProjectionMatrix };
474
+ /**
475
+ * Used to select the correct depth functions
476
+ * when reversed depth buffer is used.
477
+ *
478
+ * @private
479
+ * @type {Object}
480
+ */
481
+ const ReversedDepthFuncs = {
482
+ [ NeverDepth ]: AlwaysDepth,
483
+ [ LessDepth ]: GreaterDepth,
484
+ [ EqualDepth ]: NotEqualDepth,
485
+ [ LessEqualDepth ]: GreaterEqualDepth,
486
+
487
+ [ AlwaysDepth ]: NeverDepth,
488
+ [ GreaterDepth ]: LessDepth,
489
+ [ NotEqualDepth ]: EqualDepth,
490
+ [ GreaterEqualDepth ]: LessEqualDepth,
491
+ };
492
+
493
+ export { arrayMin, arrayMax, arrayNeedsUint32, getTypedArray, createElementNS, createCanvasElement, setConsoleFunction, getConsoleFunction, log, warn, error, warnOnce, probeAsync, yieldToMain, toNormalizedProjectionMatrix, toReversedProjectionMatrix, isTypedArray, ReversedDepthFuncs };