@plastic-software/three 0.181.3 → 0.183.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 (437) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +11330 -10017
  4. package/build/three.core.js +10011 -9493
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1414 -631
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +21 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +8007 -5427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +8005 -5426
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +2 -2
  16. package/examples/jsm/controls/ArcballControls.js +3 -3
  17. package/examples/jsm/controls/MapControls.js +55 -1
  18. package/examples/jsm/controls/OrbitControls.js +109 -6
  19. package/examples/jsm/controls/TrackballControls.js +6 -6
  20. package/examples/jsm/csm/CSM.js +2 -1
  21. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  22. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  23. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  24. package/examples/jsm/exporters/EXRExporter.js +1 -1
  25. package/examples/jsm/exporters/GLTFExporter.js +131 -4
  26. package/examples/jsm/exporters/USDZExporter.js +22 -3
  27. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  28. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  29. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  30. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  31. package/examples/jsm/helpers/ViewHelper.js +67 -8
  32. package/examples/jsm/inspector/Inspector.js +74 -14
  33. package/examples/jsm/inspector/RendererInspector.js +12 -2
  34. package/examples/jsm/inspector/tabs/Console.js +41 -7
  35. package/examples/jsm/inspector/tabs/Parameters.js +18 -2
  36. package/examples/jsm/inspector/tabs/Performance.js +2 -2
  37. package/examples/jsm/inspector/tabs/Viewer.js +4 -4
  38. package/examples/jsm/inspector/ui/Profiler.js +1836 -31
  39. package/examples/jsm/inspector/ui/Style.js +973 -14
  40. package/examples/jsm/inspector/ui/Tab.js +188 -1
  41. package/examples/jsm/inspector/ui/Values.js +17 -1
  42. package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
  43. package/examples/jsm/lines/LineMaterial.js +6 -0
  44. package/examples/jsm/loaders/3DMLoader.js +5 -4
  45. package/examples/jsm/loaders/3MFLoader.js +2 -2
  46. package/examples/jsm/loaders/AMFLoader.js +2 -2
  47. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  48. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  49. package/examples/jsm/loaders/EXRLoader.js +5 -5
  50. package/examples/jsm/loaders/FBXLoader.js +2 -4
  51. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  52. package/examples/jsm/loaders/GLTFLoader.js +122 -171
  53. package/examples/jsm/loaders/HDRLoader.js +0 -1
  54. package/examples/jsm/loaders/KMZLoader.js +5 -5
  55. package/examples/jsm/loaders/KTX2Loader.js +19 -3
  56. package/examples/jsm/loaders/LDrawLoader.js +2 -3
  57. package/examples/jsm/loaders/LWOLoader.js +7 -39
  58. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  59. package/examples/jsm/loaders/PCDLoader.js +4 -2
  60. package/examples/jsm/loaders/SVGLoader.js +1 -1
  61. package/examples/jsm/loaders/TDSLoader.js +0 -2
  62. package/examples/jsm/loaders/TGALoader.js +0 -2
  63. package/examples/jsm/loaders/USDLoader.js +100 -40
  64. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  65. package/examples/jsm/loaders/VOXLoader.js +660 -117
  66. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  67. package/examples/jsm/loaders/VTKLoader.js +37 -24
  68. package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
  69. package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
  70. package/examples/jsm/loaders/usd/USDAParser.js +447 -366
  71. package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
  72. package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
  73. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  74. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  75. package/examples/jsm/math/Octree.js +131 -1
  76. package/examples/jsm/misc/Volume.js +0 -1
  77. package/examples/jsm/misc/VolumeSlice.js +0 -1
  78. package/examples/jsm/objects/LensflareMesh.js +1 -1
  79. package/examples/jsm/objects/Sky.js +76 -4
  80. package/examples/jsm/objects/SkyMesh.js +127 -10
  81. package/examples/jsm/objects/Water.js +4 -3
  82. package/examples/jsm/objects/Water2.js +5 -3
  83. package/examples/jsm/objects/WaterMesh.js +5 -7
  84. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  85. package/examples/jsm/physics/JoltPhysics.js +10 -6
  86. package/examples/jsm/physics/RapierPhysics.js +9 -5
  87. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  88. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  89. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  90. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  91. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  92. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  93. package/examples/jsm/renderers/Projector.js +268 -30
  94. package/examples/jsm/renderers/SVGRenderer.js +193 -60
  95. package/examples/jsm/shaders/GTAOShader.js +19 -6
  96. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  97. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  98. package/examples/jsm/shaders/SAOShader.js +17 -4
  99. package/examples/jsm/shaders/SSAOShader.js +11 -1
  100. package/examples/jsm/shaders/SSRShader.js +6 -5
  101. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  102. package/examples/jsm/shaders/VignetteShader.js +1 -1
  103. package/examples/jsm/transpiler/AST.js +44 -0
  104. package/examples/jsm/transpiler/GLSLDecoder.js +61 -4
  105. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  106. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  107. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  108. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  109. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  110. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  111. package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
  112. package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
  113. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  114. package/examples/jsm/tsl/display/CRT.js +150 -0
  115. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  116. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  117. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  118. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  119. package/examples/jsm/tsl/display/GTAONode.js +5 -4
  120. package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
  121. package/examples/jsm/tsl/display/GodraysNode.js +624 -0
  122. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  123. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  124. package/examples/jsm/tsl/display/OutlineNode.js +3 -3
  125. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  126. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  127. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  128. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  129. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  130. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  131. package/examples/jsm/tsl/display/SSGINode.js +8 -20
  132. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  133. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  134. package/examples/jsm/tsl/display/Shape.js +29 -0
  135. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  136. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  137. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  138. package/examples/jsm/tsl/display/TRAANode.js +273 -125
  139. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  140. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  141. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  142. package/examples/jsm/tsl/math/Bayer.js +40 -1
  143. package/examples/jsm/utils/LDrawUtils.js +1 -1
  144. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  145. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  146. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  147. package/package.json +20 -26
  148. package/src/Three.Core.js +2 -1
  149. package/src/Three.TSL.js +19 -11
  150. package/src/Three.WebGPU.Nodes.js +2 -0
  151. package/src/Three.WebGPU.js +3 -0
  152. package/src/Three.js +1 -0
  153. package/src/animation/AnimationAction.js +1 -1
  154. package/src/animation/AnimationClip.js +1 -1
  155. package/src/animation/AnimationMixer.js +6 -0
  156. package/src/animation/AnimationUtils.js +1 -12
  157. package/src/animation/KeyframeTrack.js +47 -8
  158. package/src/animation/PropertyMixer.js +4 -4
  159. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  160. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  161. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  162. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  163. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  164. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  165. package/src/audio/Audio.js +1 -1
  166. package/src/audio/AudioListener.js +5 -3
  167. package/src/cameras/Camera.js +32 -2
  168. package/src/cameras/CubeCamera.js +20 -0
  169. package/src/constants.js +90 -5
  170. package/src/core/BufferGeometry.js +14 -2
  171. package/src/core/Clock.js +7 -0
  172. package/src/core/Object3D.js +56 -4
  173. package/src/core/Raycaster.js +2 -2
  174. package/src/core/RenderTarget.js +3 -4
  175. package/src/extras/PMREMGenerator.js +7 -18
  176. package/src/extras/TextureUtils.js +5 -1
  177. package/src/geometries/ExtrudeGeometry.js +2 -2
  178. package/src/geometries/PolyhedronGeometry.js +1 -1
  179. package/src/geometries/TorusGeometry.js +8 -3
  180. package/src/helpers/CameraHelper.js +3 -0
  181. package/src/helpers/DirectionalLightHelper.js +4 -1
  182. package/src/helpers/HemisphereLightHelper.js +3 -0
  183. package/src/helpers/PointLightHelper.js +1 -25
  184. package/src/helpers/SpotLightHelper.js +3 -0
  185. package/src/lights/DirectionalLight.js +13 -0
  186. package/src/lights/HemisphereLight.js +10 -0
  187. package/src/lights/Light.js +1 -11
  188. package/src/lights/LightProbe.js +0 -15
  189. package/src/lights/LightShadow.js +15 -6
  190. package/src/lights/PointLight.js +15 -0
  191. package/src/lights/PointLightShadow.js +0 -86
  192. package/src/lights/SpotLight.js +22 -1
  193. package/src/lights/webgpu/IESSpotLight.js +2 -1
  194. package/src/loaders/Cache.js +28 -0
  195. package/src/loaders/FileLoader.js +1 -1
  196. package/src/loaders/ImageBitmapLoader.js +8 -3
  197. package/src/loaders/Loader.js +6 -0
  198. package/src/loaders/MaterialLoader.js +2 -1
  199. package/src/loaders/ObjectLoader.js +21 -2
  200. package/src/loaders/nodes/NodeLoader.js +2 -2
  201. package/src/materials/Material.js +2 -0
  202. package/src/materials/MeshLambertMaterial.js +9 -0
  203. package/src/materials/MeshPhongMaterial.js +9 -0
  204. package/src/materials/ShaderMaterial.js +20 -1
  205. package/src/materials/nodes/Line2NodeMaterial.js +7 -7
  206. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  207. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  208. package/src/materials/nodes/NodeMaterial.js +72 -25
  209. package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
  210. package/src/math/Line3.js +3 -5
  211. package/src/math/MathUtils.js +10 -10
  212. package/src/math/Matrix4.js +74 -65
  213. package/src/math/Quaternion.js +3 -29
  214. package/src/math/Sphere.js +1 -1
  215. package/src/math/Vector3.js +3 -5
  216. package/src/math/interpolants/BezierInterpolant.js +108 -0
  217. package/src/nodes/Nodes.js +87 -68
  218. package/src/nodes/TSL.js +6 -6
  219. package/src/nodes/accessors/Arrays.js +1 -1
  220. package/src/nodes/accessors/BatchNode.js +10 -10
  221. package/src/nodes/accessors/Bitangent.js +5 -5
  222. package/src/nodes/accessors/BufferAttributeNode.js +98 -12
  223. package/src/nodes/accessors/BufferNode.js +29 -2
  224. package/src/nodes/accessors/Camera.js +149 -28
  225. package/src/nodes/accessors/ClippingNode.js +4 -4
  226. package/src/nodes/accessors/CubeTextureNode.js +20 -1
  227. package/src/nodes/accessors/InstanceNode.js +148 -43
  228. package/src/nodes/accessors/MaterialNode.js +9 -1
  229. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  230. package/src/nodes/accessors/ModelNode.js +1 -1
  231. package/src/nodes/accessors/Normal.js +11 -11
  232. package/src/nodes/accessors/Position.js +34 -2
  233. package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
  234. package/src/nodes/accessors/ReferenceNode.js +4 -4
  235. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  236. package/src/nodes/accessors/SceneProperties.js +53 -0
  237. package/src/nodes/accessors/SkinningNode.js +27 -26
  238. package/src/nodes/accessors/StorageBufferNode.js +4 -21
  239. package/src/nodes/accessors/StorageTextureNode.js +37 -1
  240. package/src/nodes/accessors/Tangent.js +4 -14
  241. package/src/nodes/accessors/Texture3DNode.js +32 -35
  242. package/src/nodes/accessors/TextureNode.js +58 -22
  243. package/src/nodes/accessors/UniformArrayNode.js +4 -2
  244. package/src/nodes/accessors/UserDataNode.js +1 -2
  245. package/src/nodes/accessors/VertexColorNode.js +1 -2
  246. package/src/nodes/code/FunctionNode.js +1 -2
  247. package/src/nodes/core/ArrayNode.js +20 -1
  248. package/src/nodes/core/AssignNode.js +2 -2
  249. package/src/nodes/core/AttributeNode.js +2 -2
  250. package/src/nodes/core/ContextNode.js +103 -4
  251. package/src/nodes/core/MRTNode.js +48 -2
  252. package/src/nodes/core/Node.js +29 -3
  253. package/src/nodes/core/NodeBuilder.js +170 -53
  254. package/src/nodes/core/NodeError.js +28 -0
  255. package/src/nodes/core/NodeFrame.js +12 -4
  256. package/src/nodes/core/NodeUtils.js +10 -8
  257. package/src/nodes/core/OutputStructNode.js +12 -10
  258. package/src/nodes/core/ParameterNode.js +3 -3
  259. package/src/nodes/core/PropertyNode.js +19 -3
  260. package/src/nodes/core/StackNode.js +65 -16
  261. package/src/nodes/core/StackTrace.js +139 -0
  262. package/src/nodes/core/StructNode.js +16 -2
  263. package/src/nodes/core/StructTypeNode.js +11 -17
  264. package/src/nodes/core/SubBuildNode.js +1 -1
  265. package/src/nodes/core/UniformNode.js +21 -5
  266. package/src/nodes/core/VarNode.js +47 -22
  267. package/src/nodes/core/VaryingNode.js +1 -18
  268. package/src/nodes/display/BlendModes.js +0 -64
  269. package/src/nodes/display/ColorAdjustment.js +17 -0
  270. package/src/nodes/display/ColorSpaceNode.js +3 -3
  271. package/src/nodes/display/NormalMapNode.js +39 -4
  272. package/src/nodes/display/PassNode.js +98 -9
  273. package/src/nodes/display/RenderOutputNode.js +3 -3
  274. package/src/nodes/display/ScreenNode.js +3 -1
  275. package/src/nodes/display/ToneMappingNode.js +1 -1
  276. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  277. package/src/nodes/display/ViewportDepthNode.js +52 -4
  278. package/src/nodes/display/ViewportTextureNode.js +21 -4
  279. package/src/nodes/fog/Fog.js +18 -35
  280. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  281. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  282. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  283. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
  284. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  285. package/src/nodes/geometry/RangeNode.js +4 -2
  286. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
  287. package/src/nodes/gpgpu/ComputeNode.js +5 -4
  288. package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
  289. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  290. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  291. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  292. package/src/nodes/lighting/LightsNode.js +2 -2
  293. package/src/nodes/lighting/PointShadowNode.js +162 -149
  294. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  295. package/src/nodes/lighting/ShadowNode.js +97 -41
  296. package/src/nodes/math/BitcountNode.js +433 -0
  297. package/src/nodes/math/ConditionalNode.js +2 -2
  298. package/src/nodes/math/MathNode.js +3 -40
  299. package/src/nodes/math/OperatorNode.js +2 -1
  300. package/src/nodes/math/PackFloatNode.js +98 -0
  301. package/src/nodes/math/UnpackFloatNode.js +96 -0
  302. package/src/nodes/pmrem/PMREMNode.js +1 -1
  303. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  304. package/src/nodes/tsl/TSLCore.js +17 -14
  305. package/src/nodes/utils/ArrayElementNode.js +13 -0
  306. package/src/nodes/utils/DebugNode.js +11 -11
  307. package/src/nodes/utils/EventNode.js +1 -2
  308. package/src/nodes/utils/JoinNode.js +2 -2
  309. package/src/nodes/utils/LoopNode.js +1 -1
  310. package/src/nodes/utils/MemberNode.js +1 -1
  311. package/src/nodes/utils/Packing.js +13 -1
  312. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  313. package/src/nodes/utils/RTTNode.js +1 -1
  314. package/src/nodes/utils/ReflectorNode.js +3 -4
  315. package/src/nodes/utils/SampleNode.js +1 -1
  316. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  317. package/src/nodes/utils/UVUtils.js +28 -0
  318. package/src/objects/BatchedMesh.js +27 -14
  319. package/src/objects/InstancedMesh.js +11 -0
  320. package/src/objects/Line.js +1 -1
  321. package/src/objects/Mesh.js +1 -1
  322. package/src/objects/Points.js +1 -1
  323. package/src/objects/Skeleton.js +9 -0
  324. package/src/renderers/WebGLRenderer.js +178 -92
  325. package/src/renderers/common/Backend.js +29 -0
  326. package/src/renderers/common/Background.js +24 -11
  327. package/src/renderers/common/BindGroup.js +1 -9
  328. package/src/renderers/common/Binding.js +11 -0
  329. package/src/renderers/common/Bindings.js +27 -12
  330. package/src/renderers/common/BlendMode.js +143 -0
  331. package/src/renderers/common/Buffer.js +40 -0
  332. package/src/renderers/common/BundleGroup.js +1 -1
  333. package/src/renderers/common/ChainMap.js +30 -6
  334. package/src/renderers/common/CubeRenderTarget.js +50 -6
  335. package/src/renderers/common/Geometries.js +29 -3
  336. package/src/renderers/common/Lighting.js +5 -21
  337. package/src/renderers/common/Pipelines.js +4 -4
  338. package/src/renderers/common/PostProcessing.js +8 -206
  339. package/src/renderers/common/RenderBundles.js +2 -1
  340. package/src/renderers/common/RenderContext.js +16 -0
  341. package/src/renderers/common/RenderContexts.js +33 -49
  342. package/src/renderers/common/RenderLists.js +2 -1
  343. package/src/renderers/common/RenderObject.js +15 -3
  344. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  345. package/src/renderers/common/RenderObjects.js +18 -2
  346. package/src/renderers/common/RenderPipeline.js +203 -17
  347. package/src/renderers/common/Renderer.js +257 -72
  348. package/src/renderers/common/Sampler.js +4 -4
  349. package/src/renderers/common/StorageBuffer.js +13 -1
  350. package/src/renderers/common/Textures.js +17 -1
  351. package/src/renderers/common/TimestampQueryPool.js +5 -3
  352. package/src/renderers/common/Uniform.js +8 -0
  353. package/src/renderers/common/UniformsGroup.js +61 -0
  354. package/src/renderers/common/XRManager.js +3 -2
  355. package/src/renderers/common/extras/PMREMGenerator.js +2 -8
  356. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  357. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
  358. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  359. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  360. package/src/renderers/shaders/DFGLUTData.js +19 -34
  361. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  362. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  363. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  364. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  365. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  366. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
  367. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  369. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  370. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  371. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
  372. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  373. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  374. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  375. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  376. package/src/renderers/shaders/ShaderChunk.js +3 -3
  377. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  378. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  379. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  380. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  381. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  382. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  383. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  384. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  386. package/src/renderers/shaders/ShaderLib.js +7 -5
  387. package/src/renderers/shaders/UniformsLib.js +0 -3
  388. package/src/renderers/webgl/WebGLBackground.js +2 -2
  389. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  390. package/src/renderers/webgl/WebGLCapabilities.js +3 -4
  391. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  392. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  393. package/src/renderers/webgl/WebGLLights.js +18 -1
  394. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  395. package/src/renderers/webgl/WebGLObjects.js +3 -1
  396. package/src/renderers/webgl/WebGLOutput.js +267 -0
  397. package/src/renderers/webgl/WebGLProgram.js +45 -109
  398. package/src/renderers/webgl/WebGLPrograms.js +45 -49
  399. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  400. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  401. package/src/renderers/webgl/WebGLState.js +32 -37
  402. package/src/renderers/webgl/WebGLTextures.js +89 -28
  403. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  404. package/src/renderers/webgl/WebGLUtils.js +6 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
  407. package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
  408. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
  409. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
  410. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  411. package/src/renderers/webgpu/WebGPUBackend.js +119 -13
  412. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  413. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
  414. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
  415. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  416. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -0
  417. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  418. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  419. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +65 -42
  420. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  421. package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
  422. package/src/renderers/webxr/WebXRManager.js +2 -2
  423. package/src/textures/CubeDepthTexture.js +76 -0
  424. package/src/textures/Source.js +1 -1
  425. package/src/textures/Texture.js +3 -3
  426. package/src/utils.js +258 -3
  427. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  428. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  429. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  430. package/src/nodes/accessors/SceneNode.js +0 -145
  431. package/src/nodes/code/ScriptableNode.js +0 -726
  432. package/src/nodes/code/ScriptableValueNode.js +0 -253
  433. package/src/nodes/display/PosterizeNode.js +0 -65
  434. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  435. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  436. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  437. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -1,4 +1,4 @@
1
- import { warnOnce } from '../../../utils.js';
1
+ import { error, warnOnce } from '../../../utils.js';
2
2
  import TimestampQueryPool from '../../common/TimestampQueryPool.js';
3
3
 
4
4
  /**
@@ -217,9 +217,9 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
217
217
 
218
218
  return totalDuration;
219
219
 
220
- } catch ( error ) {
220
+ } catch ( e ) {
221
221
 
222
- error( 'Error resolving queries:', error );
222
+ error( 'Error resolving queries:', e );
223
223
  if ( this.resultBuffer.mapState === 'mapped' ) {
224
224
 
225
225
  this.resultBuffer.unmap();
@@ -255,9 +255,9 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
255
255
 
256
256
  await this.pendingResolve;
257
257
 
258
- } catch ( error ) {
258
+ } catch ( e ) {
259
259
 
260
- error( 'Error waiting for pending resolve:', error );
260
+ error( 'Error waiting for pending resolve:', e );
261
261
 
262
262
  }
263
263
 
@@ -270,9 +270,9 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
270
270
 
271
271
  this.resultBuffer.unmap();
272
272
 
273
- } catch ( error ) {
273
+ } catch ( e ) {
274
274
 
275
- error( 'Error unmapping buffer:', error );
275
+ error( 'Error unmapping buffer:', e );
276
276
 
277
277
  }
278
278
 
@@ -34,17 +34,21 @@ class WebGPUUtils {
34
34
 
35
35
  let format;
36
36
 
37
- if ( renderContext.depthTexture !== null ) {
37
+ if ( renderContext.depth ) {
38
38
 
39
- format = this.getTextureFormatGPU( renderContext.depthTexture );
39
+ if ( renderContext.depthTexture !== null ) {
40
40
 
41
- } else if ( renderContext.depth && renderContext.stencil ) {
41
+ format = this.getTextureFormatGPU( renderContext.depthTexture );
42
42
 
43
- format = GPUTextureFormat.Depth24PlusStencil8;
43
+ } else if ( renderContext.stencil ) {
44
44
 
45
- } else if ( renderContext.depth ) {
45
+ format = GPUTextureFormat.Depth24PlusStencil8;
46
46
 
47
- format = GPUTextureFormat.Depth24Plus;
47
+ } else {
48
+
49
+ format = GPUTextureFormat.Depth24Plus;
50
+
51
+ }
48
52
 
49
53
  }
50
54
 
@@ -220,23 +224,25 @@ class WebGPUUtils {
220
224
  */
221
225
  getPreferredCanvasFormat() {
222
226
 
223
- const outputType = this.backend.parameters.outputType;
227
+ const parameters = this.backend.parameters;
228
+
229
+ const bufferType = parameters.outputType;
224
230
 
225
- if ( outputType === undefined ) {
231
+ if ( bufferType === undefined ) {
226
232
 
227
233
  return navigator.gpu.getPreferredCanvasFormat();
228
234
 
229
- } else if ( outputType === UnsignedByteType ) {
235
+ } else if ( bufferType === UnsignedByteType ) {
230
236
 
231
237
  return GPUTextureFormat.BGRA8Unorm;
232
238
 
233
- } else if ( outputType === HalfFloatType ) {
239
+ } else if ( bufferType === HalfFloatType ) {
234
240
 
235
241
  return GPUTextureFormat.RGBA16Float;
236
242
 
237
243
  } else {
238
244
 
239
- throw new Error( 'Unsupported outputType' );
245
+ throw new Error( 'Unsupported output buffer type.' );
240
246
 
241
247
  }
242
248
 
@@ -749,8 +749,8 @@ class WebXRManager extends EventDispatcher {
749
749
 
750
750
  // inherit camera layers and enable eye layers (1 = left, 2 = right)
751
751
  cameraXR.layers.mask = camera.layers.mask | 0b110;
752
- cameraL.layers.mask = cameraXR.layers.mask & 0b011;
753
- cameraR.layers.mask = cameraXR.layers.mask & 0b101;
752
+ cameraL.layers.mask = cameraXR.layers.mask & ~ 0b100;
753
+ cameraR.layers.mask = cameraXR.layers.mask & ~ 0b010;
754
754
 
755
755
  const parent = camera.parent;
756
756
  const cameras = cameraXR.cameras;
@@ -0,0 +1,76 @@
1
+ import { DepthTexture } from './DepthTexture.js';
2
+ import { CubeReflectionMapping, NearestFilter, UnsignedIntType, DepthFormat } from '../constants.js';
3
+
4
+ /**
5
+ * This class can be used to automatically save the depth information of a
6
+ * cube rendering into a cube texture with depth format. Used for PointLight shadows.
7
+ *
8
+ * @augments DepthTexture
9
+ */
10
+ class CubeDepthTexture extends DepthTexture {
11
+
12
+ /**
13
+ * Constructs a new cube depth texture.
14
+ *
15
+ * @param {number} size - The size (width and height) of each cube face.
16
+ * @param {number} [type=UnsignedIntType] - The texture type.
17
+ * @param {number} [mapping=CubeReflectionMapping] - The texture mapping.
18
+ * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
19
+ * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
20
+ * @param {number} [magFilter=NearestFilter] - The mag filter value.
21
+ * @param {number} [minFilter=NearestFilter] - The min filter value.
22
+ * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
23
+ * @param {number} [format=DepthFormat] - The texture format.
24
+ */
25
+ constructor( size, type = UnsignedIntType, mapping = CubeReflectionMapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, format = DepthFormat ) {
26
+
27
+ // Create 6 identical image descriptors for the cube faces
28
+ const image = { width: size, height: size, depth: 1 };
29
+ const images = [ image, image, image, image, image, image ];
30
+
31
+ // Call DepthTexture constructor with width, height
32
+ super( size, size, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format );
33
+
34
+ // Replace the single image with the array of 6 images
35
+ this.image = images;
36
+
37
+ /**
38
+ * This flag can be used for type testing.
39
+ *
40
+ * @type {boolean}
41
+ * @readonly
42
+ * @default true
43
+ */
44
+ this.isCubeDepthTexture = true;
45
+
46
+ /**
47
+ * Set to true for cube texture handling in WebGLTextures.
48
+ *
49
+ * @type {boolean}
50
+ * @readonly
51
+ * @default true
52
+ */
53
+ this.isCubeTexture = true;
54
+
55
+ }
56
+
57
+ /**
58
+ * Alias for {@link CubeDepthTexture#image}.
59
+ *
60
+ * @type {Array<Image>}
61
+ */
62
+ get images() {
63
+
64
+ return this.image;
65
+
66
+ }
67
+
68
+ set images( value ) {
69
+
70
+ this.image = value;
71
+
72
+ }
73
+
74
+ }
75
+
76
+ export { CubeDepthTexture };
@@ -88,7 +88,7 @@ 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
93
  target.set( data.displayHeight, data.displayWidth, 0 );
94
94
 
@@ -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
 
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,20 @@ function warnOnce( ...params ) {
152
347
 
153
348
  }
154
349
 
350
+ /**
351
+ * Asynchronously probes for WebGL sync object completion.
352
+ *
353
+ * This function creates a promise that resolves when the WebGL sync object
354
+ * signals completion or rejects if the sync operation fails. It uses polling
355
+ * at the specified interval to check the sync status without blocking the
356
+ * main thread. This is useful for GPU-CPU synchronization in WebGL contexts.
357
+ *
358
+ * @private
359
+ * @param {WebGL2RenderingContext} gl - The WebGL rendering context.
360
+ * @param {WebGLSync} sync - The WebGL sync object to wait for.
361
+ * @param {number} interval - The polling interval in milliseconds.
362
+ * @return {Promise<void>} A promise that resolves when the sync completes or rejects if it fails.
363
+ */
155
364
  function probeAsync( gl, sync, interval ) {
156
365
 
157
366
  return new Promise( function ( resolve, reject ) {
@@ -181,6 +390,18 @@ function probeAsync( gl, sync, interval ) {
181
390
 
182
391
  }
183
392
 
393
+ /**
394
+ * Converts a projection matrix from normalized device coordinates (NDC)
395
+ * range [-1, 1] to [0, 1].
396
+ *
397
+ * This conversion is commonly needed when working with depth textures or
398
+ * render targets that expect depth values in the [0, 1] range rather than
399
+ * the standard OpenGL NDC range of [-1, 1]. The function modifies the
400
+ * projection matrix in place.
401
+ *
402
+ * @private
403
+ * @param {Matrix4} projectionMatrix - The projection matrix to convert (modified in place).
404
+ */
184
405
  function toNormalizedProjectionMatrix( projectionMatrix ) {
185
406
 
186
407
  const m = projectionMatrix.elements;
@@ -193,6 +414,21 @@ function toNormalizedProjectionMatrix( projectionMatrix ) {
193
414
 
194
415
  }
195
416
 
417
+ /**
418
+ * Reverses the depth range of a projection matrix.
419
+ *
420
+ * This function inverts the depth mapping of a projection matrix, which is
421
+ * useful for reversed-Z depth buffer techniques that can improve depth
422
+ * precision. The function handles both perspective and orthographic projection
423
+ * matrices differently and modifies the matrix in place.
424
+ *
425
+ * For perspective matrices (where m[11] === -1), the depth mapping is
426
+ * reversed with an offset. For orthographic matrices, a simpler reversal
427
+ * is applied.
428
+ *
429
+ * @private
430
+ * @param {Matrix4} projectionMatrix - The projection matrix to reverse (modified in place).
431
+ */
196
432
  function toReversedProjectionMatrix( projectionMatrix ) {
197
433
 
198
434
  const m = projectionMatrix.elements;
@@ -213,4 +449,23 @@ function toReversedProjectionMatrix( projectionMatrix ) {
213
449
 
214
450
  }
215
451
 
216
- export { arrayMin, arrayMax, arrayNeedsUint32, getTypedArray, createElementNS, createCanvasElement, setConsoleFunction, getConsoleFunction, log, warn, error, warnOnce, probeAsync, toNormalizedProjectionMatrix, toReversedProjectionMatrix };
452
+ /**
453
+ * Used to select the correct depth functions
454
+ * when reversed depth buffer is used.
455
+ *
456
+ * @private
457
+ * @type {Object}
458
+ */
459
+ const ReversedDepthFuncs = {
460
+ [ NeverDepth ]: AlwaysDepth,
461
+ [ LessDepth ]: GreaterDepth,
462
+ [ EqualDepth ]: NotEqualDepth,
463
+ [ LessEqualDepth ]: GreaterEqualDepth,
464
+
465
+ [ AlwaysDepth ]: NeverDepth,
466
+ [ GreaterDepth ]: LessDepth,
467
+ [ NotEqualDepth ]: EqualDepth,
468
+ [ GreaterEqualDepth ]: LessEqualDepth,
469
+ };
470
+
471
+ export { arrayMin, arrayMax, arrayNeedsUint32, getTypedArray, createElementNS, createCanvasElement, setConsoleFunction, getConsoleFunction, log, warn, error, warnOnce, probeAsync, toNormalizedProjectionMatrix, toReversedProjectionMatrix, isTypedArray, ReversedDepthFuncs };