@unikia/upe-renderer 0.186.110 → 0.187.11

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 (506) hide show
  1. package/README.md +5 -7
  2. package/UPSTREAM.md +4 -4
  3. package/build/three.core.js +853 -277
  4. package/build/three.module.js +1098 -1280
  5. package/build/three.tsl.js +41938 -686
  6. package/build/three.webgpu.js +10604 -49055
  7. package/build/three.webgpu.nodes.js +9249 -5788
  8. package/examples/jsm/Addons.js +2 -0
  9. package/examples/jsm/animation/CCDIKSolver.js +17 -5
  10. package/examples/jsm/controls/FirstPersonControls.js +1 -1
  11. package/examples/jsm/controls/OrbitControls.js +27 -14
  12. package/examples/jsm/csm/CSMShader.js +74 -3
  13. package/examples/jsm/curves/CurveExtras.js +4 -4
  14. package/examples/jsm/curves/NURBSCurve.js +14 -0
  15. package/examples/jsm/exporters/EXRExporter.js +673 -16
  16. package/examples/jsm/exporters/GLTFExporter.js +4 -4
  17. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  18. package/examples/jsm/exporters/OBJExporter.js +48 -5
  19. package/examples/jsm/exporters/PLYExporter.js +22 -11
  20. package/examples/jsm/generators/CityGenerator.js +3 -2
  21. package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
  22. package/examples/jsm/gpgpu/BitonicSort.js +30 -23
  23. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
  24. package/examples/jsm/inspector/Extension.js +1 -1
  25. package/examples/jsm/inspector/Inspector.js +6 -46
  26. package/examples/jsm/inspector/RendererInspector.js +43 -8
  27. package/examples/jsm/inspector/Storage.js +49 -0
  28. package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
  29. package/examples/jsm/inspector/tabs/Parameters.js +5 -1
  30. package/examples/jsm/inspector/tabs/Performance.js +22 -7
  31. package/examples/jsm/inspector/tabs/Settings.js +1 -1
  32. package/examples/jsm/inspector/tabs/Timeline.js +83 -7
  33. package/examples/jsm/inspector/tabs/Viewer.js +25 -10
  34. package/examples/jsm/inspector/ui/Profiler.js +1 -1
  35. package/examples/jsm/inspector/ui/Style.js +21 -53
  36. package/examples/jsm/inspector/ui/Values.js +28 -3
  37. package/examples/jsm/libs/fflate.module.js +83 -56
  38. package/examples/jsm/libs/mikktspace.README.md +27 -0
  39. package/examples/jsm/libs/mikktspace.module.js +721 -109
  40. package/examples/jsm/lighting/ClusteredLighting.js +100 -2
  41. package/examples/jsm/lighting/LightMapper.js +295 -0
  42. package/examples/jsm/lighting/LightProbeGrid.js +242 -139
  43. package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
  44. package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
  45. package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
  46. package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
  47. package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
  48. package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
  49. package/examples/jsm/lights/SunLight.js +9 -4
  50. package/examples/jsm/lights/SunLightNode.js +3 -3
  51. package/examples/jsm/lines/LineMaterial.js +26 -10
  52. package/examples/jsm/loaders/3DMLoader.js +10 -1
  53. package/examples/jsm/loaders/3MFLoader.js +5 -1
  54. package/examples/jsm/loaders/AMFLoader.js +2 -0
  55. package/examples/jsm/loaders/BVHLoader.js +2 -0
  56. package/examples/jsm/loaders/ColladaLoader.js +8 -0
  57. package/examples/jsm/loaders/DDSLoader.js +1 -1
  58. package/examples/jsm/loaders/DRACOLoader.js +5 -1
  59. package/examples/jsm/loaders/EXRLoader.js +120 -104
  60. package/examples/jsm/loaders/FBXLoader.js +4 -0
  61. package/examples/jsm/loaders/FontLoader.js +2 -0
  62. package/examples/jsm/loaders/GCodeLoader.js +5 -9
  63. package/examples/jsm/loaders/GLTFLoader.js +112 -31
  64. package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
  65. package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
  66. package/examples/jsm/loaders/IESLoader.js +46 -12
  67. package/examples/jsm/loaders/JXLLoader.js +159 -0
  68. package/examples/jsm/loaders/KMZLoader.js +6 -0
  69. package/examples/jsm/loaders/KSPLATLoader.js +2 -0
  70. package/examples/jsm/loaders/KTX2Loader.js +49 -4
  71. package/examples/jsm/loaders/KTXLoader.js +5 -3
  72. package/examples/jsm/loaders/LDrawLoader.js +15 -22
  73. package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
  74. package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
  75. package/examples/jsm/loaders/LUTImageLoader.js +2 -0
  76. package/examples/jsm/loaders/LWOLoader.js +6 -0
  77. package/examples/jsm/loaders/MD2Loader.js +2 -0
  78. package/examples/jsm/loaders/MDDLoader.js +4 -0
  79. package/examples/jsm/loaders/MTLLoader.js +8 -0
  80. package/examples/jsm/loaders/MaterialXLoader.js +57 -5
  81. package/examples/jsm/loaders/NRRDLoader.js +4 -2
  82. package/examples/jsm/loaders/OBJLoader.js +10 -4
  83. package/examples/jsm/loaders/PCDLoader.js +6 -2
  84. package/examples/jsm/loaders/PDBLoader.js +5 -3
  85. package/examples/jsm/loaders/PLYLoader.js +39 -15
  86. package/examples/jsm/loaders/PVRLoader.js +2 -2
  87. package/examples/jsm/loaders/SPLATLoader.js +2 -0
  88. package/examples/jsm/loaders/SPZLoader.js +2 -0
  89. package/examples/jsm/loaders/STLLoader.js +3 -1
  90. package/examples/jsm/loaders/SVGLoader.js +27 -49
  91. package/examples/jsm/loaders/TDSLoader.js +4 -0
  92. package/examples/jsm/loaders/TGALoader.js +6 -5
  93. package/examples/jsm/loaders/TTFLoader.js +2 -0
  94. package/examples/jsm/loaders/USDLoader.js +14 -0
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
  96. package/examples/jsm/loaders/VOXLoader.js +3 -0
  97. package/examples/jsm/loaders/VRMLLoader.js +4 -0
  98. package/examples/jsm/loaders/VTKLoader.js +2 -0
  99. package/examples/jsm/loaders/XYZLoader.js +2 -0
  100. package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
  101. package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
  102. package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
  103. package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
  104. package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
  105. package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
  106. package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
  107. package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
  108. package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
  109. package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
  110. package/examples/jsm/loaders/usd/USDAParser.js +56 -47
  111. package/examples/jsm/loaders/usd/USDComposer.js +25 -30
  112. package/examples/jsm/math/ColorConverter.js +7 -3
  113. package/examples/jsm/math/Lut.js +2 -2
  114. package/examples/jsm/math/OBB.js +3 -3
  115. package/examples/jsm/math/Octree.js +20 -17
  116. package/examples/jsm/objects/GaussianSplat.js +5 -4
  117. package/examples/jsm/objects/Reflector.js +5 -0
  118. package/examples/jsm/objects/SkyMesh.js +14 -7
  119. package/examples/jsm/objects/Water2Mesh.js +2 -2
  120. package/examples/jsm/physics/RapierPhysics.js +2 -2
  121. package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
  122. package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
  123. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  124. package/examples/jsm/postprocessing/GTAOPass.js +26 -18
  125. package/examples/jsm/renderers/SVGRenderer.js +3 -2
  126. package/examples/jsm/shaders/GTAOShader.js +7 -4
  127. package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
  128. package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
  129. package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
  130. package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
  131. package/examples/jsm/tsl/display/BloomNode.js +3 -3
  132. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
  133. package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
  134. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  135. package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
  136. package/examples/jsm/tsl/display/FSR1Node.js +3 -3
  137. package/examples/jsm/tsl/display/FXAANode.js +3 -10
  138. package/examples/jsm/tsl/display/FilmNode.js +3 -3
  139. package/examples/jsm/tsl/display/GTAONode.js +33 -25
  140. package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
  141. package/examples/jsm/tsl/display/GodraysNode.js +5 -19
  142. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
  143. package/examples/jsm/tsl/display/LensflareNode.js +3 -3
  144. package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
  145. package/examples/jsm/tsl/display/OITPassNode.js +0 -11
  146. package/examples/jsm/tsl/display/OutlineNode.js +107 -5
  147. package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
  148. package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
  149. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
  150. package/examples/jsm/tsl/display/SMAANode.js +3 -3
  151. package/examples/jsm/tsl/display/SSAONode.js +6 -20
  152. package/examples/jsm/tsl/display/SSGINode.js +36 -29
  153. package/examples/jsm/tsl/display/SSRNode.js +135 -63
  154. package/examples/jsm/tsl/display/SSSNode.js +6 -20
  155. package/examples/jsm/tsl/display/SharpenNode.js +3 -3
  156. package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
  157. package/examples/jsm/tsl/display/TAAUNode.js +10 -42
  158. package/examples/jsm/tsl/display/TRAANode.js +11 -43
  159. package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
  160. package/examples/jsm/tsl/display/TransitionNode.js +3 -3
  161. package/examples/jsm/tsl/display/lensDirt.js +30 -0
  162. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
  163. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
  164. package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
  165. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
  166. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
  167. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
  168. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
  169. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
  170. package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
  171. package/examples/jsm/tsl/utils/Raymarching.js +1 -1
  172. package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
  173. package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
  174. package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
  175. package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
  176. package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
  177. package/examples/jsm/utils/SceneOptimizer.js +2 -1
  178. package/examples/jsm/utils/SceneUtils.js +1 -1
  179. package/examples/jsm/utils/unwrapUVs.js +865 -0
  180. package/examples/jsm/webxr/XREstimatedLight.js +11 -4
  181. package/package.json +3 -3
  182. package/src/Three.TSL.js +2 -683
  183. package/src/Three.WebGPU.Nodes.js +2 -1
  184. package/src/Three.WebGPU.js +2 -1
  185. package/src/animation/AnimationAction.js +1 -1
  186. package/src/animation/AnimationUtils.js +1 -3
  187. package/src/animation/KeyframeTrack.js +19 -0
  188. package/src/cameras/ArrayCamera.js +12 -0
  189. package/src/cameras/CubeCamera.js +3 -3
  190. package/src/constants.js +1 -9
  191. package/src/core/BufferAttribute.js +57 -21
  192. package/src/core/BufferGeometry.js +5 -13
  193. package/src/core/Clock.js +1 -1
  194. package/src/core/InterleavedBuffer.js +28 -18
  195. package/src/core/InterleavedBufferAttribute.js +54 -20
  196. package/src/core/Object3D.js +19 -9
  197. package/src/core/Raycaster.js +2 -0
  198. package/src/core/RenderTarget.js +11 -5
  199. package/src/core/UniformsGroup.js +7 -3
  200. package/src/extras/PMREMGenerator.js +392 -685
  201. package/src/extras/core/Curve.js +4 -0
  202. package/src/extras/core/CurvePath.js +13 -0
  203. package/src/extras/core/ShapePath.js +1 -1
  204. package/src/geometries/EdgesGeometry.js +12 -10
  205. package/src/geometries/LatheGeometry.js +2 -0
  206. package/src/helpers/PolarGridHelper.js +1 -1
  207. package/src/lights/Light.js +11 -0
  208. package/src/lights/LightProbe.js +2 -0
  209. package/src/lights/LightShadow.js +2 -0
  210. package/src/loaders/AnimationLoader.js +2 -0
  211. package/src/loaders/AudioLoader.js +2 -0
  212. package/src/loaders/BufferGeometryLoader.js +2 -0
  213. package/src/loaders/CompressedTextureLoader.js +2 -0
  214. package/src/loaders/CubeTextureLoader.js +2 -0
  215. package/src/loaders/DataTextureLoader.js +2 -0
  216. package/src/loaders/FileLoader.js +2 -0
  217. package/src/loaders/ImageBitmapLoader.js +3 -1
  218. package/src/loaders/ImageLoader.js +1 -0
  219. package/src/loaders/Loader.js +47 -0
  220. package/src/loaders/MaterialLoader.js +2 -0
  221. package/src/loaders/ObjectLoader.js +27 -8
  222. package/src/loaders/TextureLoader.js +5 -3
  223. package/src/loaders/nodes/NodeLoader.js +2 -0
  224. package/src/materials/Material.js +21 -2
  225. package/src/materials/MeshDepthMaterial.js +1 -1
  226. package/src/materials/MeshDistanceMaterial.js +1 -1
  227. package/src/materials/MeshLambertMaterial.js +1 -1
  228. package/src/materials/MeshMatcapMaterial.js +1 -1
  229. package/src/materials/MeshNormalMaterial.js +1 -1
  230. package/src/materials/MeshPhongMaterial.js +1 -1
  231. package/src/materials/MeshPhysicalMaterial.js +90 -11
  232. package/src/materials/MeshStandardMaterial.js +1 -1
  233. package/src/materials/MeshToonMaterial.js +1 -1
  234. package/src/materials/nodes/Line2NodeMaterial.js +32 -10
  235. package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
  236. package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
  237. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
  238. package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
  239. package/src/materials/nodes/NodeMaterial.js +36 -16
  240. package/src/materials/nodes/NodeMaterialInstance.js +193 -0
  241. package/src/materials/nodes/NodeMaterials.js +1 -0
  242. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  243. package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
  244. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
  245. package/src/math/Box3.js +2 -2
  246. package/src/math/Color.js +8 -8
  247. package/src/math/ColorManagement.js +2 -21
  248. package/src/math/FrustumArray.js +12 -0
  249. package/src/math/Interpolant.js +1 -1
  250. package/src/math/Line3.js +2 -4
  251. package/src/math/MathUtils.js +33 -46
  252. package/src/math/Matrix2.js +1 -1
  253. package/src/math/Matrix3.js +1 -1
  254. package/src/math/Matrix4.js +1 -1
  255. package/src/math/Triangle.js +2 -1
  256. package/src/math/Vector2.js +1 -1
  257. package/src/math/Vector3.js +1 -1
  258. package/src/math/Vector4.js +1 -1
  259. package/src/nodes/Nodes.js +1 -0
  260. package/src/nodes/TSL.js +2 -0
  261. package/src/nodes/accessors/Arrays.js +1 -1
  262. package/src/nodes/accessors/Batch.js +29 -23
  263. package/src/nodes/accessors/BufferAttributeNode.js +21 -1
  264. package/src/nodes/accessors/BuiltinNode.js +6 -0
  265. package/src/nodes/accessors/Camera.js +100 -93
  266. package/src/nodes/accessors/ClippingNode.js +17 -6
  267. package/src/nodes/accessors/CubeTextureNode.js +12 -24
  268. package/src/nodes/accessors/Instance.js +198 -160
  269. package/src/nodes/accessors/Lights.js +19 -6
  270. package/src/nodes/accessors/MaterialNode.js +33 -4
  271. package/src/nodes/accessors/Morph.js +81 -22
  272. package/src/nodes/accessors/Normal.js +0 -42
  273. package/src/nodes/accessors/Object3DNode.js +6 -0
  274. package/src/nodes/accessors/PointUVNode.js +6 -0
  275. package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
  276. package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
  277. package/src/nodes/accessors/ReferenceNode.js +6 -0
  278. package/src/nodes/accessors/Skinning.js +57 -52
  279. package/src/nodes/accessors/StorageBufferNode.js +3 -12
  280. package/src/nodes/accessors/TextureBicubic.js +30 -27
  281. package/src/nodes/accessors/TextureNode.js +164 -78
  282. package/src/nodes/accessors/TextureSizeNode.js +6 -0
  283. package/src/nodes/accessors/UniformArrayNode.js +8 -15
  284. package/src/nodes/accessors/VelocityNode.js +13 -8
  285. package/src/nodes/code/CodeNode.js +6 -0
  286. package/src/nodes/code/ExpressionNode.js +6 -0
  287. package/src/nodes/code/FunctionCallNode.js +3 -3
  288. package/src/nodes/code/FunctionNode.js +15 -13
  289. package/src/nodes/core/ArrayNode.js +3 -3
  290. package/src/nodes/core/AssignNode.js +10 -9
  291. package/src/nodes/core/AttributeNode.js +39 -0
  292. package/src/nodes/core/BypassNode.js +6 -0
  293. package/src/nodes/core/ConstNode.js +31 -1
  294. package/src/nodes/core/ContextNode.js +11 -6
  295. package/src/nodes/core/IndexNode.js +6 -0
  296. package/src/nodes/core/InputNode.js +6 -0
  297. package/src/nodes/core/InspectorNode.js +17 -31
  298. package/src/nodes/core/IsolateNode.js +8 -0
  299. package/src/nodes/core/Node.js +367 -67
  300. package/src/nodes/core/NodeBuilder.js +664 -222
  301. package/src/nodes/core/NodeUtils.js +25 -0
  302. package/src/nodes/core/NodeVar.js +10 -1
  303. package/src/nodes/core/OutputStructNode.js +6 -0
  304. package/src/nodes/core/OverrideContextNode.js +38 -37
  305. package/src/nodes/core/PropertyNode.js +14 -0
  306. package/src/nodes/core/StackNode.js +33 -21
  307. package/src/nodes/core/StructNode.js +6 -0
  308. package/src/nodes/core/StructTypeNode.js +6 -0
  309. package/src/nodes/core/SubBuildNode.js +8 -0
  310. package/src/nodes/core/TempNode.js +10 -35
  311. package/src/nodes/core/UniformGroupNode.js +6 -0
  312. package/src/nodes/core/VarNode.js +43 -135
  313. package/src/nodes/core/VaryingNode.js +33 -2
  314. package/src/nodes/display/BlendModes.js +5 -40
  315. package/src/nodes/display/BumpMapNode.js +17 -7
  316. package/src/nodes/display/ColorAdjustment.js +22 -10
  317. package/src/nodes/display/ColorSpaceFunctions.js +2 -14
  318. package/src/nodes/display/ColorSpaceNode.js +3 -3
  319. package/src/nodes/display/FrontFacingNode.js +6 -0
  320. package/src/nodes/display/NormalMapNode.js +3 -3
  321. package/src/nodes/display/PassNode.js +75 -16
  322. package/src/nodes/display/RenderOutputNode.js +22 -5
  323. package/src/nodes/display/ScreenNode.js +6 -0
  324. package/src/nodes/display/ToneMappingFunctions.js +9 -51
  325. package/src/nodes/display/ToneMappingNode.js +3 -3
  326. package/src/nodes/display/ToonOutlinePassNode.js +66 -2
  327. package/src/nodes/display/ViewportDepthNode.js +34 -4
  328. package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
  329. package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
  330. package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
  331. package/src/nodes/functions/BSDF/D_GGX.js +1 -8
  332. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
  333. package/src/nodes/functions/BSDF/LTC.js +20 -47
  334. package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
  335. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
  336. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
  337. package/src/nodes/functions/PhysicalLightingModel.js +84 -51
  338. package/src/nodes/functions/VolumetricLightingModel.js +1 -1
  339. package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
  340. package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
  341. package/src/nodes/functions/material/getRoughness.js +3 -1
  342. package/src/nodes/geometry/RangeNode.js +52 -69
  343. package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
  344. package/src/nodes/gpgpu/BarrierNode.js +6 -0
  345. package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
  346. package/src/nodes/gpgpu/ComputeNode.js +6 -0
  347. package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
  348. package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
  349. package/src/nodes/lighting/AnalyticLightNode.js +7 -14
  350. package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
  351. package/src/nodes/lighting/EnvironmentNode.js +58 -8
  352. package/src/nodes/lighting/IESSpotLightNode.js +19 -4
  353. package/src/nodes/lighting/LightProbeNode.js +2 -1
  354. package/src/nodes/lighting/LightUtils.js +2 -2
  355. package/src/nodes/lighting/LightingNode.js +6 -0
  356. package/src/nodes/lighting/LightsNode.js +26 -32
  357. package/src/nodes/lighting/PointShadowNode.js +92 -48
  358. package/src/nodes/lighting/ProjectorLightNode.js +1 -1
  359. package/src/nodes/lighting/RectAreaLightNode.js +13 -14
  360. package/src/nodes/lighting/ShadowBaseNode.js +9 -17
  361. package/src/nodes/lighting/ShadowFilterNode.js +26 -3
  362. package/src/nodes/lighting/ShadowNode.js +13 -11
  363. package/src/nodes/materialx/MaterialXColor.js +2 -14
  364. package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
  365. package/src/nodes/materialx/MaterialXNodes.js +8 -11
  366. package/src/nodes/materialx/MaterialXNoise.js +195 -454
  367. package/src/nodes/math/BitcastNode.js +5 -5
  368. package/src/nodes/math/BitcountNode.js +18 -46
  369. package/src/nodes/math/ConditionalNode.js +92 -22
  370. package/src/nodes/math/Hash.js +1 -1
  371. package/src/nodes/math/MathNode.js +86 -64
  372. package/src/nodes/math/MathUtils.js +2 -2
  373. package/src/nodes/math/OperatorNode.js +42 -59
  374. package/src/nodes/math/PackFloatNode.js +9 -9
  375. package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
  376. package/src/nodes/math/TriNoise3D.js +3 -23
  377. package/src/nodes/math/UnpackFloatNode.js +9 -9
  378. package/src/nodes/pmrem/PMREMNode.js +38 -75
  379. package/src/nodes/pmrem/PMREMUtils.js +108 -272
  380. package/src/nodes/procedural/Checker.js +1 -1
  381. package/src/nodes/tsl/TSLCore.js +199 -74
  382. package/src/nodes/utils/ArrayElementNode.js +19 -1
  383. package/src/nodes/utils/CubeMapNode.js +3 -3
  384. package/src/nodes/utils/DebugNode.js +2 -2
  385. package/src/nodes/utils/EventNode.js +6 -0
  386. package/src/nodes/utils/FlipNode.js +3 -3
  387. package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
  388. package/src/nodes/utils/JoinNode.js +3 -3
  389. package/src/nodes/utils/LoopNode.js +14 -9
  390. package/src/nodes/utils/MemberNode.js +18 -0
  391. package/src/nodes/utils/PostProcessingUtils.js +20 -25
  392. package/src/nodes/utils/RTTNode.js +2 -0
  393. package/src/nodes/utils/ReflectorNode.js +24 -0
  394. package/src/nodes/utils/RotateNode.js +3 -3
  395. package/src/nodes/utils/SampleNode.js +6 -0
  396. package/src/nodes/utils/SetNode.js +3 -3
  397. package/src/nodes/utils/SplitNode.js +6 -0
  398. package/src/nodes/utils/UVUtils.js +2 -2
  399. package/src/objects/BatchedMesh.js +146 -15
  400. package/src/objects/InstancedMesh.js +12 -4
  401. package/src/objects/Line.js +20 -0
  402. package/src/objects/Mesh.js +8 -0
  403. package/src/objects/Points.js +20 -0
  404. package/src/objects/Skeleton.js +26 -0
  405. package/src/objects/SkinnedMesh.js +3 -3
  406. package/src/objects/Sprite.js +10 -0
  407. package/src/renderers/WebGLRenderer.js +104 -70
  408. package/src/renderers/common/Animation.js +5 -1
  409. package/src/renderers/common/Attributes.js +67 -57
  410. package/src/renderers/common/Backend.js +78 -3
  411. package/src/renderers/common/BindGroup.js +11 -0
  412. package/src/renderers/common/Binding.js +0 -11
  413. package/src/renderers/common/Bindings.js +116 -10
  414. package/src/renderers/common/Buffer.js +1 -1
  415. package/src/renderers/common/ClippingContext.js +12 -1
  416. package/src/renderers/common/ComputePipeline.js +17 -1
  417. package/src/renderers/common/DirectRenderPipeline.js +7 -3
  418. package/src/renderers/common/Geometries.js +170 -132
  419. package/src/renderers/common/Info.js +1 -1
  420. package/src/renderers/common/InspectorBase.js +5 -5
  421. package/src/renderers/common/Lighting.js +59 -0
  422. package/src/renderers/common/Pipelines.js +26 -12
  423. package/src/renderers/common/ProgrammableStage.js +1 -17
  424. package/src/renderers/common/RenderContext.js +21 -0
  425. package/src/renderers/common/RenderContexts.js +13 -4
  426. package/src/renderers/common/RenderObject.js +111 -35
  427. package/src/renderers/common/RenderObjects.js +37 -19
  428. package/src/renderers/common/Renderer.js +537 -295
  429. package/src/renderers/common/RendererUtils.js +15 -0
  430. package/src/renderers/common/StandardDrawingPipeline.js +343 -0
  431. package/src/renderers/common/Storage3DTexture.js +11 -0
  432. package/src/renderers/common/StorageArrayTexture.js +10 -0
  433. package/src/renderers/common/StorageTexture.js +0 -9
  434. package/src/renderers/common/Textures.js +144 -37
  435. package/src/renderers/common/UniformsGroup.js +19 -0
  436. package/src/renderers/common/XRManager.js +10 -91
  437. package/src/renderers/common/extras/PMREMGenerator.js +298 -576
  438. package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
  439. package/src/renderers/common/nodes/NodeLibrary.js +11 -35
  440. package/src/renderers/common/nodes/NodeManager.js +80 -31
  441. package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
  442. package/src/renderers/common/nodes/NodeSampler.js +14 -0
  443. package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
  444. package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
  445. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
  446. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
  447. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
  448. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
  449. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  450. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
  451. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
  452. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
  453. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
  454. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
  455. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
  456. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
  457. package/src/renderers/shaders/ShaderChunk.js +0 -2
  458. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
  459. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  461. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
  462. package/src/renderers/shaders/ShaderLib.js +3 -0
  463. package/src/renderers/shaders/UniformsLib.js +4 -5
  464. package/src/renderers/webgl/WebGLBackground.js +3 -3
  465. package/src/renderers/webgl/WebGLBindingStates.js +4 -2
  466. package/src/renderers/webgl/WebGLCapabilities.js +7 -1
  467. package/src/renderers/webgl/WebGLEnvironments.js +2 -2
  468. package/src/renderers/webgl/WebGLGeometries.js +42 -14
  469. package/src/renderers/webgl/WebGLMaterials.js +15 -2
  470. package/src/renderers/webgl/WebGLOutput.js +37 -1
  471. package/src/renderers/webgl/WebGLProgram.js +13 -54
  472. package/src/renderers/webgl/WebGLPrograms.js +22 -8
  473. package/src/renderers/webgl/WebGLRenderStates.js +11 -8
  474. package/src/renderers/webgl/WebGLShadowMap.js +6 -4
  475. package/src/renderers/webgl/WebGLState.js +10 -6
  476. package/src/renderers/webgl/WebGLTextures.js +129 -77
  477. package/src/renderers/webgl/WebGLUniforms.js +44 -6
  478. package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
  479. package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
  480. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
  481. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
  482. package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
  483. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
  484. package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
  485. package/src/renderers/webgpu/WebGPUBackend.js +140 -82
  486. package/src/renderers/webgpu/WebGPURenderer.js +1 -1
  487. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
  488. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
  489. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
  490. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
  491. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
  492. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
  493. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
  494. package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
  495. package/src/renderers/webxr/WebXRController.js +3 -3
  496. package/src/renderers/webxr/WebXRManager.js +5 -90
  497. package/src/scenes/Scene.js +4 -4
  498. package/src/textures/CompressedTexture.js +2 -2
  499. package/src/textures/DepthTexture.js +2 -2
  500. package/src/textures/FramebufferTexture.js +11 -0
  501. package/src/textures/Texture.js +29 -1
  502. package/src/textures/TextureSource.js +1 -1
  503. package/src/upe.js +1 -1
  504. package/src/utils.js +4 -4
  505. package/examples/jsm/libs/surfaceNet.js +0 -201
  506. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
@@ -1,6 +1,5 @@
1
1
  import { SRGBColorSpace, LinearSRGBColorSpace, SRGBTransfer, LinearTransfer, NoColorSpace } from '../constants.js';
2
2
  import { Matrix3 } from './Matrix3.js';
3
- import { warnOnce } from '../utils.js';
4
3
 
5
4
  const LINEAR_REC709_TO_XYZ = /*@__PURE__*/ new Matrix3().set(
6
5
  0.4123908, 0.3575843, 0.1804808,
@@ -126,8 +125,8 @@ function createColorManagement() {
126
125
  _getMatrix: function ( targetMatrix, sourceColorSpace, targetColorSpace ) {
127
126
 
128
127
  return targetMatrix
129
- .copy( this.spaces[ sourceColorSpace ].toXYZ )
130
- .multiply( this.spaces[ targetColorSpace ].fromXYZ );
128
+ .copy( this.spaces[ targetColorSpace ].fromXYZ )
129
+ .multiply( this.spaces[ sourceColorSpace ].toXYZ );
131
130
 
132
131
  },
133
132
 
@@ -143,24 +142,6 @@ function createColorManagement() {
143
142
 
144
143
  },
145
144
 
146
- // Deprecated
147
-
148
- fromWorkingColorSpace: function ( color, targetColorSpace ) {
149
-
150
- warnOnce( 'ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace().' ); // @deprecated, r177
151
-
152
- return ColorManagement.workingToColorSpace( color, targetColorSpace );
153
-
154
- },
155
-
156
- toWorkingColorSpace: function ( color, sourceColorSpace ) {
157
-
158
- warnOnce( 'ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking().' ); // @deprecated, r177
159
-
160
- return ColorManagement.colorSpaceToWorking( color, sourceColorSpace );
161
-
162
- },
163
-
164
145
  };
165
146
 
166
147
  /******************************************************************************
@@ -75,6 +75,18 @@ class FrustumArray {
75
75
 
76
76
  }
77
77
 
78
+ /**
79
+ * Returns the cached frustum for the sub-camera at the given index.
80
+ *
81
+ * @param {number} index - The sub-camera index.
82
+ * @return {Frustum|undefined} The cached frustum.
83
+ */
84
+ getFrustum( index ) {
85
+
86
+ return this._frustums[ index ];
87
+
88
+ }
89
+
78
90
  /**
79
91
  * Returns `true` if the 3D object's bounding sphere is intersecting any cached frustum.
80
92
  *
@@ -307,7 +307,7 @@ class Interpolant {
307
307
  *
308
308
  * @param {number} i1 - An index into the sample value buffer.
309
309
  * @param {number} t0 - The previous interpolation factor.
310
- * @param {number} t - The current interpolation factor.
310
+ * @param {number} t1 - The next interpolation factor.
311
311
  */
312
312
  intervalChanged_( /* i1, t0, t1 */ ) {
313
313
 
package/src/math/Line3.js CHANGED
@@ -121,7 +121,7 @@ class Line3 {
121
121
  *
122
122
  * @param {number} t - A value between `[0,1]` to represent a position along the line segment.
123
123
  * @param {Vector3} target - The target vector that is used to store the method's result.
124
- * @return {Vector3} The delta vector.
124
+ * @return {Vector3} The point along the line segment.
125
125
  */
126
126
  at( t, target ) {
127
127
 
@@ -216,9 +216,7 @@ class Line3 {
216
216
  c1.copy( p1 );
217
217
  c2.copy( p2 );
218
218
 
219
- c1.sub( c2 );
220
-
221
- return c1.dot( c1 );
219
+ return c1.distanceToSquared( c2 );
222
220
 
223
221
  }
224
222
 
@@ -379,98 +379,84 @@ function setQuaternionFromProperEuler( q, a, b, c, order ) {
379
379
  }
380
380
 
381
381
  /**
382
- * Denormalizes the given value according to the given typed array.
382
+ * Returns the factor used by {@link normalize} and {@link denormalize} for the given typed array,
383
+ * or `undefined` if the values are not scaled (float arrays) or the array type is not supported.
383
384
  *
384
- * @param {number} value - The value to denormalize.
385
385
  * @param {TypedArray} array - The typed array that defines the data type of the value.
386
- * @return {number} The denormalize (float) value in the range `[0,1]`.
386
+ * @return {number|undefined} The normalization factor.
387
387
  */
388
- function denormalize( value, array ) {
388
+ function getNormalizationScale( array ) {
389
389
 
390
390
  switch ( array.constructor ) {
391
391
 
392
- case Float32Array:
393
-
394
- return value;
395
-
396
392
  case Uint32Array:
397
393
 
398
- return value / 4294967295.0;
394
+ return 4294967295.0;
399
395
 
400
396
  case Uint16Array:
401
397
 
402
- return value / 65535.0;
398
+ return 65535.0;
403
399
 
404
400
  case Uint8Array:
405
401
  case Uint8ClampedArray:
406
402
 
407
- return value / 255.0;
403
+ return 255.0;
408
404
 
409
405
  case Int32Array:
410
406
 
411
- return Math.max( value / 2147483647.0, - 1.0 );
407
+ return 2147483647.0;
412
408
 
413
409
  case Int16Array:
414
410
 
415
- return Math.max( value / 32767.0, - 1.0 );
411
+ return 32767.0;
416
412
 
417
413
  case Int8Array:
418
414
 
419
- return Math.max( value / 127.0, - 1.0 );
415
+ return 127.0;
420
416
 
421
417
  default:
422
418
 
423
- throw new Error( 'THREE.MathUtils: Invalid component type.' );
419
+ return undefined;
424
420
 
425
421
  }
426
422
 
427
423
  }
428
424
 
429
425
  /**
430
- * Normalizes the given value according to the given typed array.
426
+ * Denormalizes the given value according to the given typed array.
431
427
  *
432
- * @param {number} value - The float value in the range `[0,1]` to normalize.
428
+ * @param {number} value - The value to denormalize.
433
429
  * @param {TypedArray} array - The typed array that defines the data type of the value.
434
- * @return {number} The normalize value.
430
+ * @return {number} The denormalized (float) value in the range `[0,1]` or `[-1,1]`
435
431
  */
436
- function normalize( value, array ) {
437
-
438
- switch ( array.constructor ) {
439
-
440
- case Float32Array:
441
-
442
- return value;
443
-
444
- case Uint32Array:
445
-
446
- return Math.round( value * 4294967295.0 );
447
-
448
- case Uint16Array:
432
+ function denormalize( value, array ) {
449
433
 
450
- return Math.round( value * 65535.0 );
434
+ if ( array.constructor === Float32Array ) return value;
451
435
 
452
- case Uint8Array:
453
- case Uint8ClampedArray:
436
+ const scale = getNormalizationScale( array );
454
437
 
455
- return Math.round( value * 255.0 );
456
-
457
- case Int32Array:
438
+ if ( scale === undefined ) throw new Error( 'THREE.MathUtils: Invalid component type.' );
458
439
 
459
- return Math.round( value * 2147483647.0 );
440
+ return Math.max( value / scale, - 1.0 );
460
441
 
461
- case Int16Array:
462
-
463
- return Math.round( value * 32767.0 );
442
+ }
464
443
 
465
- case Int8Array:
444
+ /**
445
+ * Normalizes the given value according to the given typed array.
446
+ *
447
+ * @param {number} value - The float value in the range `[0,1]` or `[-1,1]` to normalize.
448
+ * @param {TypedArray} array - The typed array that defines the data type of the value.
449
+ * @return {number} The normalized value.
450
+ */
451
+ function normalize( value, array ) {
466
452
 
467
- return Math.round( value * 127.0 );
453
+ if ( array.constructor === Float32Array ) return value;
468
454
 
469
- default:
455
+ const scale = getNormalizationScale( array );
470
456
 
471
- throw new Error( 'THREE.MathUtils: Invalid component type.' );
457
+ if ( scale === undefined ) throw new Error( 'THREE.MathUtils: Invalid component type.' );
472
458
 
473
- }
459
+ return Math.round( value * scale );
474
460
 
475
461
  }
476
462
 
@@ -749,5 +735,6 @@ export {
749
735
  setQuaternionFromProperEuler,
750
736
  normalize,
751
737
  denormalize,
738
+ getNormalizationScale,
752
739
  MathUtils
753
740
  };
@@ -35,7 +35,7 @@ export class Matrix2 {
35
35
  * @readonly
36
36
  * @default true
37
37
  */
38
- Matrix2.prototype.isMatrix2 = true;
38
+ this.prototype.isMatrix2 = true;
39
39
 
40
40
  }
41
41
 
@@ -39,7 +39,7 @@ class Matrix3 {
39
39
  * @readonly
40
40
  * @default true
41
41
  */
42
- Matrix3.prototype.isMatrix3 = true;
42
+ this.prototype.isMatrix3 = true;
43
43
 
44
44
  }
45
45
 
@@ -50,7 +50,7 @@ class Matrix4 {
50
50
  * @readonly
51
51
  * @default true
52
52
  */
53
- Matrix4.prototype.isMatrix4 = true;
53
+ this.prototype.isMatrix4 = true;
54
54
 
55
55
  }
56
56
 
@@ -473,7 +473,8 @@ class Triangle {
473
473
  }
474
474
 
475
475
  const vc = d1 * d4 - d3 * d2;
476
- if ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {
476
+
477
+ if ( vc <= 0 && d1 >= 0 && d3 <= 0 && d1 - d3 > 0 ) { // modification of the algorithm: d1 - d3 is the squared length of AB, so skip this region if a and b coincide
477
478
 
478
479
  v = d1 / ( d1 - d3 );
479
480
  // edge region of AB; barycentric coords (1-v, v, 0)
@@ -36,7 +36,7 @@ class Vector2 {
36
36
  * @readonly
37
37
  * @default true
38
38
  */
39
- Vector2.prototype.isVector2 = true;
39
+ this.prototype.isVector2 = true;
40
40
 
41
41
  }
42
42
 
@@ -37,7 +37,7 @@ class Vector3 {
37
37
  * @readonly
38
38
  * @default true
39
39
  */
40
- Vector3.prototype.isVector3 = true;
40
+ this.prototype.isVector3 = true;
41
41
 
42
42
  }
43
43
 
@@ -35,7 +35,7 @@ class Vector4 {
35
35
  * @readonly
36
36
  * @default true
37
37
  */
38
- Vector4.prototype.isVector4 = true;
38
+ this.prototype.isVector4 = true;
39
39
 
40
40
  }
41
41
 
@@ -54,6 +54,7 @@ export { default as MaterialReferenceNode } from './accessors/MaterialReferenceN
54
54
  export { default as ModelNode } from './accessors/ModelNode.js';
55
55
  export { default as Object3DNode } from './accessors/Object3DNode.js';
56
56
  export { default as PointUVNode } from './accessors/PointUVNode.js';
57
+ export { default as ReferenceAttributeNode } from './accessors/ReferenceAttributeNode.js';
57
58
  export { default as ReferenceBaseNode } from './accessors/ReferenceBaseNode.js';
58
59
  export { default as ReferenceElementNode } from './accessors/ReferenceElementNode.js';
59
60
  export { default as ReferenceNode } from './accessors/ReferenceNode.js';
package/src/nodes/TSL.js CHANGED
@@ -82,6 +82,7 @@ export * from './accessors/Normal.js';
82
82
  export * from './accessors/Object3DNode.js';
83
83
  export * from './accessors/PointUVNode.js';
84
84
  export * from './accessors/Position.js';
85
+ export * from './accessors/ReferenceAttributeNode.js';
85
86
  export * from './accessors/ReferenceNode.js';
86
87
  export * from './accessors/ReflectVector.js';
87
88
  export * from './accessors/Skinning.js';
@@ -162,6 +163,7 @@ export * from './shapes/Shapes.js';
162
163
  export * from './materialx/MaterialXNodes.js';
163
164
 
164
165
  // functions
166
+ export { default as BRDF_EON, EON_DirectionalAlbedo } from './functions/BSDF/BRDF_EON.js';
165
167
  export { default as BRDF_GGX } from './functions/BSDF/BRDF_GGX.js';
166
168
  export { default as BRDF_Lambert } from './functions/BSDF/BRDF_Lambert.js';
167
169
  export { default as BRDF_Sheen } from './functions/BSDF/BRDF_Sheen.js';
@@ -29,7 +29,7 @@ export const attributeArray = ( count, type = 'float' ) => {
29
29
  }
30
30
 
31
31
  const buffer = new StorageBufferAttribute( count, itemSize, typedArray );
32
- const node = storage( buffer, type, count );
32
+ const node = storage( buffer, type, buffer.count );
33
33
 
34
34
  return node;
35
35
 
@@ -7,11 +7,9 @@ import { textureSize } from './TextureSizeNode.js';
7
7
  import { tangentLocal } from './Tangent.js';
8
8
  import { instanceIndex, drawIndex } from '../core/IndexNode.js';
9
9
  import { varyingProperty } from '../core/PropertyNode.js';
10
- import { OnAfterObjectUpdate } from '../utils/EventNode.js';
10
+ import { OnObjectUpdate, OnAfterObjectUpdate } from '../utils/EventNode.js';
11
11
  import { DataTexture } from '../../textures/DataTexture.js';
12
12
 
13
- const _previousBatchingMatrices = /*@__PURE__*/ new WeakMap();
14
-
15
13
  /**
16
14
  * TSL function that retrieves the batching color for a given instance ID from a colors texture.
17
15
  *
@@ -70,33 +68,28 @@ function createBatchingMatrixNode( matricesTexture, id ) {
70
68
  }
71
69
 
72
70
  /**
73
- * Retrieves or initializes the previous frame batching matrix node for motion vectors.
74
- * Uses a WeakMap to cache previous frame matrices textures and their TSL nodes.
71
+ * Returns the batching matrices texture of the previous frame for motion vectors.
72
+ * It is created on first use and again after the batched mesh released it.
75
73
  *
76
74
  * @param {BatchedMesh} batchMesh - The batched mesh.
77
- * @param {Node<uint>} id - The indirect instance ID.
78
- * @returns {Node<mat4>} The previous frame batching matrix node.
75
+ * @returns {DataTexture} The previous frame matrices texture.
79
76
  */
80
- function getPreviousNode( batchMesh, id ) {
81
-
82
- let data = _previousBatchingMatrices.get( batchMesh );
77
+ function getPreviousMatricesTexture( batchMesh ) {
83
78
 
84
- if ( data === undefined ) {
79
+ let previousMatricesTexture = batchMesh._previousMatricesTexture;
85
80
 
86
- const { image, format, type } = batchMesh._matricesTexture;
81
+ if ( previousMatricesTexture === null ) {
87
82
 
88
- const previousMatricesTexture = new DataTexture( image.data.slice(), image.width, image.height, format, type );
83
+ const { image, format, type, version } = batchMesh._matricesTexture;
89
84
 
90
- data = {
91
- previousMatricesTexture,
92
- node: createBatchingMatrixNode( previousMatricesTexture, id )
93
- };
85
+ previousMatricesTexture = new DataTexture( image.data.slice(), image.width, image.height, format, type );
86
+ previousMatricesTexture.version = version;
94
87
 
95
- _previousBatchingMatrices.set( batchMesh, data );
88
+ batchMesh._previousMatricesTexture = previousMatricesTexture;
96
89
 
97
90
  }
98
91
 
99
- return data.node;
92
+ return previousMatricesTexture;
100
93
 
101
94
  }
102
95
 
@@ -151,14 +144,19 @@ export const batch = /*@__PURE__*/ Fn( ( [ batchMesh ], builder ) => {
151
144
 
152
145
  OnAfterObjectUpdate( ( { object } ) => {
153
146
 
154
- const previousBatchData = _previousBatchingMatrices.get( object );
147
+ const previousMatricesTexture = getPreviousMatricesTexture( object );
148
+ const matricesTexture = object._matricesTexture;
149
+
150
+ if ( previousMatricesTexture.version !== matricesTexture.version ) {
151
+
152
+ previousMatricesTexture.image.data.set( matricesTexture.image.data );
153
+ previousMatricesTexture.version = matricesTexture.version;
155
154
 
156
- previousBatchData.previousMatricesTexture.image.data.set( object._matricesTexture.image.data );
157
- previousBatchData.previousMatricesTexture.needsUpdate = true;
155
+ }
158
156
 
159
157
  } );
160
158
 
161
- const previousBatchingMatrixNode = getPreviousNode( batchMesh, indirectId );
159
+ const previousBatchingMatrixNode = createBatchingMatrixNode( getPreviousMatricesTexture( batchMesh ), indirectId );
162
160
  positionPrevious.assign( previousBatchingMatrixNode.mul( positionPrevious ).xyz );
163
161
 
164
162
  }
@@ -175,6 +173,14 @@ export const batch = /*@__PURE__*/ Fn( ( [ batchMesh ], builder ) => {
175
173
 
176
174
  }
177
175
 
176
+ const drawFormat = builder.renderer.backend.isWebGPUBackend === true ? 'merged' : 'multiDraw';
177
+
178
+ OnObjectUpdate( ( { object, camera, material } ) => {
179
+
180
+ object._updateDrawParameters( camera, object.geometry, material, drawFormat );
181
+
182
+ } );
183
+
178
184
  }, 'void' );
179
185
 
180
186
 
@@ -80,7 +80,7 @@ class BufferAttributeNode extends InputNode {
80
80
  /**
81
81
  * Constructs a new buffer attribute node.
82
82
  *
83
- * @param {BufferAttribute|InterleavedBuffer|TypedArray} value - The attribute data.
83
+ * @param {BufferAttribute|InterleavedBufferAttribute|InterleavedBuffer|TypedArray} value - The attribute data.
84
84
  * @param {?string} [bufferType=null] - The buffer type (e.g. `'vec3'`).
85
85
  * @param {number} [bufferStride=0] - The buffer stride.
86
86
  * @param {number} [bufferOffset=0] - The buffer offset.
@@ -161,6 +161,13 @@ class BufferAttributeNode extends InputNode {
161
161
  this.usage = value.usage;
162
162
  this.instanced = value.isInstancedBufferAttribute;
163
163
 
164
+ } else if ( value && value.isInterleavedBufferAttribute === true ) {
165
+
166
+ // e.g. a column of a buffer attribute with an item size larger than four
167
+
168
+ this.attribute = value;
169
+ this.usage = value.data.usage;
170
+
164
171
  }
165
172
 
166
173
  }
@@ -355,6 +362,19 @@ class BufferAttributeNode extends InputNode {
355
362
 
356
363
  }
357
364
 
365
+ /**
366
+ * Returns the buffer attribute to bind when rendering the given object. Nodes that
367
+ * bind attributes of the rendered object, like {@link ReferenceAttributeNode}, overwrite it.
368
+ *
369
+ * @param {Object3D} object - The rendered object.
370
+ * @return {?(BufferAttribute|InterleavedBufferAttribute)} The buffer attribute.
371
+ */
372
+ getObjectAttribute( /*object*/ ) {
373
+
374
+ return this.attribute;
375
+
376
+ }
377
+
358
378
  }
359
379
 
360
380
  export default BufferAttributeNode;
@@ -36,6 +36,12 @@ class BuiltinNode extends Node {
36
36
 
37
37
  }
38
38
 
39
+ isCacheable( /*builder*/ ) {
40
+
41
+ return false;
42
+
43
+ }
44
+
39
45
  /**
40
46
  * Generates the code snippet of the builtin node.
41
47
  *