super-three 0.181.0 → 0.184.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +13152 -11354
  4. package/build/three.core.js +12319 -11539
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1808 -781
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +27 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +10523 -6263
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +10484 -6262
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +11 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +7 -4
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +58 -54
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +34 -2
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  26. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  27. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  28. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  29. package/examples/jsm/exporters/EXRExporter.js +1 -1
  30. package/examples/jsm/exporters/GLTFExporter.js +152 -9
  31. package/examples/jsm/exporters/USDZExporter.js +22 -3
  32. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  33. package/examples/jsm/geometries/TextGeometry.js +18 -0
  34. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  36. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  37. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  38. package/examples/jsm/helpers/ViewHelper.js +67 -8
  39. package/examples/jsm/inspector/Extension.js +13 -0
  40. package/examples/jsm/inspector/Inspector.js +203 -88
  41. package/examples/jsm/inspector/RendererInspector.js +14 -4
  42. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  43. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  44. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  45. package/examples/jsm/inspector/tabs/Console.js +41 -7
  46. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  47. package/examples/jsm/inspector/tabs/Parameters.js +51 -3
  48. package/examples/jsm/inspector/tabs/Performance.js +4 -4
  49. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  50. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  51. package/examples/jsm/inspector/tabs/Viewer.js +107 -5
  52. package/examples/jsm/inspector/ui/Graph.js +2 -2
  53. package/examples/jsm/inspector/ui/List.js +1 -1
  54. package/examples/jsm/inspector/ui/Profiler.js +1936 -34
  55. package/examples/jsm/inspector/ui/Style.js +1044 -31
  56. package/examples/jsm/inspector/ui/Tab.js +222 -3
  57. package/examples/jsm/inspector/ui/Values.js +55 -2
  58. package/examples/jsm/inspector/ui/utils.js +13 -0
  59. package/examples/jsm/interaction/InteractionManager.js +226 -0
  60. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  61. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  62. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  63. package/examples/jsm/lines/LineMaterial.js +7 -1
  64. package/examples/jsm/loaders/3DMLoader.js +5 -4
  65. package/examples/jsm/loaders/3MFLoader.js +2 -2
  66. package/examples/jsm/loaders/AMFLoader.js +2 -2
  67. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  68. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  69. package/examples/jsm/loaders/EXRLoader.js +687 -48
  70. package/examples/jsm/loaders/FBXLoader.js +235 -37
  71. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  72. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  73. package/examples/jsm/loaders/HDRLoader.js +1 -2
  74. package/examples/jsm/loaders/KMZLoader.js +5 -5
  75. package/examples/jsm/loaders/KTX2Loader.js +27 -5
  76. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  77. package/examples/jsm/loaders/LWOLoader.js +7 -39
  78. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  79. package/examples/jsm/loaders/PCDLoader.js +4 -2
  80. package/examples/jsm/loaders/SVGLoader.js +2 -2
  81. package/examples/jsm/loaders/TDSLoader.js +0 -2
  82. package/examples/jsm/loaders/TGALoader.js +0 -2
  83. package/examples/jsm/loaders/USDLoader.js +100 -40
  84. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  85. package/examples/jsm/loaders/VOXLoader.js +660 -117
  86. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  87. package/examples/jsm/loaders/VTKLoader.js +42 -25
  88. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  89. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  90. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  91. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  92. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  93. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  94. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  95. package/examples/jsm/math/Octree.js +131 -1
  96. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  97. package/examples/jsm/misc/RollerCoaster.js +42 -4
  98. package/examples/jsm/misc/Volume.js +0 -1
  99. package/examples/jsm/misc/VolumeSlice.js +0 -1
  100. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  101. package/examples/jsm/objects/LensflareMesh.js +1 -1
  102. package/examples/jsm/objects/Reflector.js +73 -25
  103. package/examples/jsm/objects/Sky.js +90 -6
  104. package/examples/jsm/objects/SkyMesh.js +150 -16
  105. package/examples/jsm/objects/Water.js +4 -3
  106. package/examples/jsm/objects/Water2.js +5 -3
  107. package/examples/jsm/objects/WaterMesh.js +5 -7
  108. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  109. package/examples/jsm/physics/JoltPhysics.js +10 -6
  110. package/examples/jsm/physics/RapierPhysics.js +9 -5
  111. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  112. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  113. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  114. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  115. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  116. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  117. package/examples/jsm/renderers/Projector.js +246 -28
  118. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  119. package/examples/jsm/shaders/GTAOShader.js +19 -6
  120. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  122. package/examples/jsm/shaders/SAOShader.js +17 -4
  123. package/examples/jsm/shaders/SSAOShader.js +11 -1
  124. package/examples/jsm/shaders/SSRShader.js +6 -5
  125. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  126. package/examples/jsm/shaders/VignetteShader.js +1 -1
  127. package/examples/jsm/transpiler/AST.js +44 -0
  128. package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  130. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  131. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  132. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  133. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  134. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  135. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  136. package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
  137. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  138. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  139. package/examples/jsm/tsl/display/CRT.js +150 -0
  140. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  141. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  142. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  143. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  144. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  145. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  146. package/examples/jsm/tsl/display/GTAONode.js +6 -4
  147. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  148. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  149. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  150. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  151. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  152. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  153. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  154. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  155. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  156. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  157. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  158. package/examples/jsm/tsl/display/SSGINode.js +8 -24
  159. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  160. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  161. package/examples/jsm/tsl/display/Shape.js +29 -0
  162. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  163. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  164. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  165. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  166. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  167. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  168. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  169. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  170. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  171. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  172. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  173. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  174. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  175. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  176. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  177. package/examples/jsm/tsl/math/Bayer.js +53 -3
  178. package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
  179. package/examples/jsm/utils/ColorUtils.js +76 -0
  180. package/examples/jsm/utils/LDrawUtils.js +1 -1
  181. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  182. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  183. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  186. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  187. package/package.json +24 -30
  188. package/src/Three.Core.js +3 -1
  189. package/src/Three.TSL.js +25 -11
  190. package/src/Three.WebGPU.Nodes.js +5 -0
  191. package/src/Three.WebGPU.js +9 -0
  192. package/src/Three.js +1 -0
  193. package/src/animation/AnimationAction.js +12 -2
  194. package/src/animation/AnimationClip.js +1 -1
  195. package/src/animation/AnimationMixer.js +6 -0
  196. package/src/animation/AnimationUtils.js +1 -12
  197. package/src/animation/KeyframeTrack.js +47 -8
  198. package/src/animation/PropertyMixer.js +4 -4
  199. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  200. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  201. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  202. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  203. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  204. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  205. package/src/audio/Audio.js +1 -1
  206. package/src/audio/AudioContext.js +2 -2
  207. package/src/audio/AudioListener.js +5 -3
  208. package/src/cameras/Camera.js +32 -2
  209. package/src/cameras/CubeCamera.js +20 -0
  210. package/src/constants.js +90 -5
  211. package/src/core/BufferAttribute.js +13 -1
  212. package/src/core/BufferGeometry.js +14 -2
  213. package/src/core/Clock.js +7 -0
  214. package/src/core/Object3D.js +52 -4
  215. package/src/core/Raycaster.js +2 -2
  216. package/src/core/RenderTarget.js +4 -4
  217. package/src/extras/PMREMGenerator.js +7 -18
  218. package/src/extras/TextureUtils.js +5 -1
  219. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  220. package/src/geometries/ExtrudeGeometry.js +2 -2
  221. package/src/geometries/PolyhedronGeometry.js +1 -1
  222. package/src/geometries/TorusGeometry.js +8 -3
  223. package/src/helpers/CameraHelper.js +3 -0
  224. package/src/helpers/DirectionalLightHelper.js +4 -1
  225. package/src/helpers/HemisphereLightHelper.js +3 -0
  226. package/src/helpers/PointLightHelper.js +1 -25
  227. package/src/helpers/SpotLightHelper.js +3 -0
  228. package/src/lights/DirectionalLight.js +13 -0
  229. package/src/lights/HemisphereLight.js +10 -0
  230. package/src/lights/Light.js +1 -11
  231. package/src/lights/LightProbe.js +0 -15
  232. package/src/lights/LightShadow.js +15 -6
  233. package/src/lights/PointLight.js +15 -0
  234. package/src/lights/PointLightShadow.js +0 -86
  235. package/src/lights/SpotLight.js +22 -1
  236. package/src/lights/webgpu/IESSpotLight.js +2 -1
  237. package/src/loaders/AudioLoader.js +11 -1
  238. package/src/loaders/Cache.js +28 -0
  239. package/src/loaders/DataTextureLoader.js +6 -4
  240. package/src/loaders/FileLoader.js +2 -3
  241. package/src/loaders/ImageBitmapLoader.js +12 -9
  242. package/src/loaders/Loader.js +6 -0
  243. package/src/loaders/MaterialLoader.js +3 -2
  244. package/src/loaders/ObjectLoader.js +46 -6
  245. package/src/loaders/nodes/NodeLoader.js +2 -2
  246. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  247. package/src/materials/Material.js +2 -0
  248. package/src/materials/MeshLambertMaterial.js +9 -0
  249. package/src/materials/MeshPhongMaterial.js +9 -0
  250. package/src/materials/MeshToonMaterial.js +1 -1
  251. package/src/materials/ShaderMaterial.js +20 -1
  252. package/src/materials/nodes/Line2NodeMaterial.js +34 -7
  253. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  254. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  255. package/src/materials/nodes/NodeMaterial.js +45 -25
  256. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
  257. package/src/math/Line3.js +6 -5
  258. package/src/math/MathUtils.js +10 -10
  259. package/src/math/Matrix2.js +13 -9
  260. package/src/math/Matrix3.js +13 -9
  261. package/src/math/Matrix4.js +87 -74
  262. package/src/math/Plane.js +4 -3
  263. package/src/math/Quaternion.js +3 -29
  264. package/src/math/Sphere.js +1 -1
  265. package/src/math/Triangle.js +1 -1
  266. package/src/math/Vector2.js +11 -7
  267. package/src/math/Vector3.js +15 -13
  268. package/src/math/Vector4.js +13 -9
  269. package/src/math/interpolants/BezierInterpolant.js +108 -0
  270. package/src/nodes/Nodes.js +86 -68
  271. package/src/nodes/TSL.js +7 -7
  272. package/src/nodes/accessors/Arrays.js +1 -1
  273. package/src/nodes/accessors/BatchNode.js +10 -10
  274. package/src/nodes/accessors/Bitangent.js +5 -5
  275. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  276. package/src/nodes/accessors/BufferNode.js +29 -2
  277. package/src/nodes/accessors/Camera.js +149 -28
  278. package/src/nodes/accessors/ClippingNode.js +4 -4
  279. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  280. package/src/nodes/accessors/InstanceNode.js +148 -43
  281. package/src/nodes/accessors/MaterialNode.js +9 -1
  282. package/src/nodes/accessors/MaterialProperties.js +2 -5
  283. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  284. package/src/nodes/accessors/ModelNode.js +1 -1
  285. package/src/nodes/accessors/Normal.js +11 -11
  286. package/src/nodes/accessors/Object3DNode.js +1 -1
  287. package/src/nodes/accessors/Position.js +34 -2
  288. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  289. package/src/nodes/accessors/ReferenceNode.js +8 -8
  290. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  291. package/src/nodes/accessors/SceneProperties.js +47 -0
  292. package/src/nodes/accessors/SkinningNode.js +27 -26
  293. package/src/nodes/accessors/StorageBufferNode.js +14 -25
  294. package/src/nodes/accessors/StorageTextureNode.js +40 -9
  295. package/src/nodes/accessors/Tangent.js +4 -14
  296. package/src/nodes/accessors/Texture3DNode.js +32 -35
  297. package/src/nodes/accessors/TextureNode.js +67 -23
  298. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  299. package/src/nodes/accessors/UserDataNode.js +1 -2
  300. package/src/nodes/accessors/VertexColorNode.js +1 -2
  301. package/src/nodes/code/FunctionCallNode.js +1 -1
  302. package/src/nodes/code/FunctionNode.js +2 -3
  303. package/src/nodes/core/ArrayNode.js +21 -2
  304. package/src/nodes/core/AssignNode.js +3 -3
  305. package/src/nodes/core/AttributeNode.js +3 -3
  306. package/src/nodes/core/BypassNode.js +1 -1
  307. package/src/nodes/core/ContextNode.js +104 -5
  308. package/src/nodes/core/IndexNode.js +2 -1
  309. package/src/nodes/core/InputNode.js +1 -1
  310. package/src/nodes/core/InspectorNode.js +1 -1
  311. package/src/nodes/core/IsolateNode.js +1 -1
  312. package/src/nodes/core/MRTNode.js +48 -2
  313. package/src/nodes/core/Node.js +112 -15
  314. package/src/nodes/core/NodeBuilder.js +284 -66
  315. package/src/nodes/core/NodeError.js +28 -0
  316. package/src/nodes/core/NodeFrame.js +12 -4
  317. package/src/nodes/core/NodeUtils.js +11 -9
  318. package/src/nodes/core/OutputStructNode.js +12 -10
  319. package/src/nodes/core/ParameterNode.js +4 -4
  320. package/src/nodes/core/PropertyNode.js +19 -3
  321. package/src/nodes/core/StackNode.js +66 -17
  322. package/src/nodes/core/StackTrace.js +139 -0
  323. package/src/nodes/core/StructNode.js +17 -3
  324. package/src/nodes/core/StructTypeNode.js +12 -18
  325. package/src/nodes/core/SubBuildNode.js +2 -2
  326. package/src/nodes/core/UniformGroupNode.js +36 -6
  327. package/src/nodes/core/UniformNode.js +21 -5
  328. package/src/nodes/core/VarNode.js +48 -23
  329. package/src/nodes/core/VaryingNode.js +2 -19
  330. package/src/nodes/display/BlendModes.js +0 -64
  331. package/src/nodes/display/ColorAdjustment.js +17 -0
  332. package/src/nodes/display/ColorSpaceNode.js +3 -3
  333. package/src/nodes/display/NormalMapNode.js +39 -4
  334. package/src/nodes/display/PassNode.js +125 -16
  335. package/src/nodes/display/RenderOutputNode.js +7 -7
  336. package/src/nodes/display/ScreenNode.js +4 -2
  337. package/src/nodes/display/ToneMappingNode.js +1 -1
  338. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  339. package/src/nodes/display/ViewportDepthNode.js +52 -4
  340. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  341. package/src/nodes/display/ViewportTextureNode.js +39 -11
  342. package/src/nodes/fog/Fog.js +18 -35
  343. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  344. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  345. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  346. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  347. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  348. package/src/nodes/geometry/RangeNode.js +5 -3
  349. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  350. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  351. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  352. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  353. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  354. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  355. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  356. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  357. package/src/nodes/lighting/LightsNode.js +7 -28
  358. package/src/nodes/lighting/PointShadowNode.js +162 -149
  359. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  360. package/src/nodes/lighting/ShadowNode.js +120 -42
  361. package/src/nodes/math/BitcastNode.js +1 -1
  362. package/src/nodes/math/BitcountNode.js +433 -0
  363. package/src/nodes/math/ConditionalNode.js +3 -3
  364. package/src/nodes/math/MathNode.js +76 -41
  365. package/src/nodes/math/OperatorNode.js +3 -2
  366. package/src/nodes/math/PackFloatNode.js +98 -0
  367. package/src/nodes/math/UnpackFloatNode.js +96 -0
  368. package/src/nodes/pmrem/PMREMNode.js +1 -1
  369. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  370. package/src/nodes/tsl/TSLBase.js +1 -1
  371. package/src/nodes/tsl/TSLCore.js +38 -17
  372. package/src/nodes/utils/ArrayElementNode.js +14 -1
  373. package/src/nodes/utils/ConvertNode.js +1 -1
  374. package/src/nodes/utils/DebugNode.js +12 -12
  375. package/src/nodes/utils/EventNode.js +31 -2
  376. package/src/nodes/utils/FlipNode.js +1 -1
  377. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  378. package/src/nodes/utils/JoinNode.js +3 -3
  379. package/src/nodes/utils/LoopNode.js +1 -1
  380. package/src/nodes/utils/MemberNode.js +2 -2
  381. package/src/nodes/utils/Packing.js +13 -1
  382. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  383. package/src/nodes/utils/RTTNode.js +1 -1
  384. package/src/nodes/utils/ReflectorNode.js +3 -4
  385. package/src/nodes/utils/Remap.js +48 -0
  386. package/src/nodes/utils/RotateNode.js +1 -1
  387. package/src/nodes/utils/SampleNode.js +1 -1
  388. package/src/nodes/utils/SetNode.js +1 -1
  389. package/src/nodes/utils/SplitNode.js +1 -1
  390. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  391. package/src/nodes/utils/UVUtils.js +28 -0
  392. package/src/objects/BatchedMesh.js +44 -16
  393. package/src/objects/InstancedMesh.js +30 -3
  394. package/src/objects/Line.js +1 -1
  395. package/src/objects/Mesh.js +1 -1
  396. package/src/objects/Points.js +1 -1
  397. package/src/objects/Skeleton.js +9 -0
  398. package/src/objects/SkinnedMesh.js +26 -9
  399. package/src/renderers/WebGLRenderer.js +329 -145
  400. package/src/renderers/common/Animation.js +3 -3
  401. package/src/renderers/common/Attributes.js +15 -1
  402. package/src/renderers/common/Backend.js +29 -8
  403. package/src/renderers/common/Background.js +26 -13
  404. package/src/renderers/common/BindGroup.js +1 -16
  405. package/src/renderers/common/Binding.js +11 -0
  406. package/src/renderers/common/Bindings.js +29 -14
  407. package/src/renderers/common/BlendMode.js +143 -0
  408. package/src/renderers/common/Buffer.js +40 -0
  409. package/src/renderers/common/BundleGroup.js +1 -1
  410. package/src/renderers/common/ChainMap.js +30 -6
  411. package/src/renderers/common/ComputePipeline.js +1 -1
  412. package/src/renderers/common/CubeRenderTarget.js +51 -7
  413. package/src/renderers/common/Geometries.js +29 -3
  414. package/src/renderers/common/Info.js +333 -4
  415. package/src/renderers/common/InspectorBase.js +6 -1
  416. package/src/renderers/common/Lighting.js +5 -21
  417. package/src/renderers/common/Pipelines.js +40 -7
  418. package/src/renderers/common/PostProcessing.js +8 -206
  419. package/src/renderers/common/ReadbackBuffer.js +78 -0
  420. package/src/renderers/common/RenderBundle.js +3 -1
  421. package/src/renderers/common/RenderBundles.js +7 -3
  422. package/src/renderers/common/RenderContext.js +16 -0
  423. package/src/renderers/common/RenderContexts.js +33 -49
  424. package/src/renderers/common/RenderLists.js +2 -1
  425. package/src/renderers/common/RenderObject.js +17 -5
  426. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  427. package/src/renderers/common/RenderObjects.js +21 -5
  428. package/src/renderers/common/RenderPipeline.js +232 -17
  429. package/src/renderers/common/Renderer.js +481 -117
  430. package/src/renderers/common/Sampler.js +4 -4
  431. package/src/renderers/common/StorageBuffer.js +13 -1
  432. package/src/renderers/common/Textures.js +89 -4
  433. package/src/renderers/common/TimestampQueryPool.js +5 -3
  434. package/src/renderers/common/Uniform.js +8 -0
  435. package/src/renderers/common/UniformsGroup.js +62 -1
  436. package/src/renderers/common/XRManager.js +37 -29
  437. package/src/renderers/common/extras/PMREMGenerator.js +25 -23
  438. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  439. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
  440. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  441. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  442. package/src/renderers/shaders/DFGLUTData.js +19 -34
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  444. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  445. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  446. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  447. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  448. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  449. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  450. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  451. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  452. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  453. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  454. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  455. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  456. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  457. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  458. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  459. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  461. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  462. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  463. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  464. package/src/renderers/shaders/ShaderChunk.js +5 -3
  465. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  466. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  467. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  468. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  469. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  470. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  472. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  473. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  474. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  475. package/src/renderers/shaders/ShaderLib.js +7 -6
  476. package/src/renderers/shaders/UniformsLib.js +7 -5
  477. package/src/renderers/shaders/UniformsUtils.js +27 -5
  478. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  479. package/src/renderers/webgl/WebGLBackground.js +15 -15
  480. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  481. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  482. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  483. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  484. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  485. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  486. package/src/renderers/webgl/WebGLLights.js +18 -1
  487. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  488. package/src/renderers/webgl/WebGLObjects.js +3 -1
  489. package/src/renderers/webgl/WebGLOutput.js +270 -0
  490. package/src/renderers/webgl/WebGLProgram.js +49 -109
  491. package/src/renderers/webgl/WebGLPrograms.js +63 -51
  492. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  493. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  494. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  495. package/src/renderers/webgl/WebGLState.js +75 -37
  496. package/src/renderers/webgl/WebGLTextures.js +215 -54
  497. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  498. package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
  499. package/src/renderers/webgl/WebGLUtils.js +6 -2
  500. package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
  501. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  504. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
  507. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  508. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  509. package/src/renderers/webgpu/WebGPUBackend.js +260 -140
  510. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  511. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
  512. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
  513. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  514. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  515. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  516. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  517. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
  519. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  520. package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
  521. package/src/renderers/webxr/WebXRController.js +12 -0
  522. package/src/renderers/webxr/WebXRManager.js +4 -2
  523. package/src/textures/CubeDepthTexture.js +76 -0
  524. package/src/textures/HTMLTexture.js +74 -0
  525. package/src/textures/Source.js +2 -2
  526. package/src/textures/Texture.js +16 -5
  527. package/src/utils.js +280 -3
  528. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  529. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  530. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  531. package/src/nodes/accessors/SceneNode.js +0 -145
  532. package/src/nodes/code/ScriptableNode.js +0 -726
  533. package/src/nodes/code/ScriptableValueNode.js +0 -253
  534. package/src/nodes/display/PosterizeNode.js +0 -65
  535. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  536. package/src/nodes/utils/RemapNode.js +0 -125
  537. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  538. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  539. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -1,4 +1,5 @@
1
- import { abs, cross, float, Fn, normalize, ivec2, sub, vec2, vec3, vec4, fract, dot } from '../tsl/TSLBase.js';
1
+ import { abs, cross, float, Fn, normalize, ivec2, sub, vec2, vec3, vec4, fract, dot, cos, sin } from '../tsl/TSLBase.js';
2
+ import { sqrt } from '../math/MathNode.js';
2
3
  import { textureSize } from '../accessors/TextureSizeNode.js';
3
4
  import { textureLoad } from '../accessors/TextureNode.js';
4
5
  import { WebGPUCoordinateSystem } from '../../constants.js';
@@ -120,3 +121,34 @@ export const interleavedGradientNoise = Fn( ( [ position ] ) => {
120
121
  { name: 'position', type: 'vec2' }
121
122
  ]
122
123
  } );
124
+
125
+ /**
126
+ * Vogel disk sampling for uniform circular distribution.
127
+ *
128
+ * This function generates sample points distributed uniformly on a disk using the golden angle,
129
+ * resulting in an efficient low-discrepancy sequence for sampling. The rotation parameter (phi)
130
+ * allows randomizing the pattern per-pixel when combined with IGN.
131
+ *
132
+ * @tsl
133
+ * @function
134
+ * @param {Node<int>} sampleIndex - The index of the current sample (0-based).
135
+ * @param {Node<int>} samplesCount - The total number of samples.
136
+ * @param {Node<float>} phi - Rotation angle in radians (typically from IGN * 2π).
137
+ * @return {Node<vec2>} A 2D point on the unit disk.
138
+ */
139
+ export const vogelDiskSample = Fn( ( [ sampleIndex, samplesCount, phi ] ) => {
140
+
141
+ const goldenAngle = float( 2.399963229728653 ); // 2π * (2 - φ) where φ is golden ratio
142
+ const r = sqrt( float( sampleIndex ).add( 0.5 ).div( float( samplesCount ) ) );
143
+ const theta = float( sampleIndex ).mul( goldenAngle ).add( phi );
144
+ return vec2( cos( theta ), sin( theta ) ).mul( r );
145
+
146
+ } ).setLayout( {
147
+ name: 'vogelDiskSample',
148
+ type: 'vec2',
149
+ inputs: [
150
+ { name: 'sampleIndex', type: 'int' },
151
+ { name: 'samplesCount', type: 'int' },
152
+ { name: 'phi', type: 'float' }
153
+ ]
154
+ } );
@@ -266,7 +266,7 @@ export default RTTNode;
266
266
  * @param {Object} [options={type:HalfFloatType}] - The options for the internal render target.
267
267
  * @returns {RTTNode}
268
268
  */
269
- export const rtt = ( node, ...params ) => nodeObject( new RTTNode( nodeObject( node ), ...params ) );
269
+ export const rtt = ( node, ...params ) => new RTTNode( nodeObject( node ), ...params );
270
270
 
271
271
  /**
272
272
  * TSL function for converting nodes to textures nodes.
@@ -1,6 +1,5 @@
1
1
  import Node from '../core/Node.js';
2
2
  import TextureNode from '../accessors/TextureNode.js';
3
- import { nodeObject } from '../tsl/TSLBase.js';
4
3
  import { NodeUpdateType } from '../core/constants.js';
5
4
  import { screenUV } from '../display/ScreenNode.js';
6
5
 
@@ -134,10 +133,10 @@ class ReflectorNode extends TextureNode {
134
133
 
135
134
  }
136
135
 
137
- this._depthNode = nodeObject( new ReflectorNode( {
136
+ this._depthNode = new ReflectorNode( {
138
137
  defaultTexture: _defaultRT.depthTexture,
139
138
  reflector: this._reflectorBaseNode
140
- } ) );
139
+ } );
141
140
 
142
141
  }
143
142
 
@@ -625,6 +624,6 @@ class ReflectorBaseNode extends Node {
625
624
  * @param {ReflectorBaseNode} [parameters.reflector] - The reflector base node.
626
625
  * @returns {ReflectorNode}
627
626
  */
628
- export const reflector = ( parameters ) => nodeObject( new ReflectorNode( parameters ) );
627
+ export const reflector = ( parameters ) => new ReflectorNode( parameters );
629
628
 
630
629
  export default ReflectorNode;
@@ -0,0 +1,48 @@
1
+ import { float, addMethodChaining, Fn, bool, defined } from '../tsl/TSLCore.js';
2
+
3
+ /**
4
+ * This node allows to remap a node value from one range into another. E.g a value of
5
+ * `0.4` in the range `[ 0.3, 0.5 ]` should be remapped into the normalized range `[ 0, 1 ]`.
6
+ * `remap` takes care of that and converts the original value of `0.4` to `0.5`.
7
+ *
8
+ * @tsl
9
+ * @function
10
+ * @param {Node} node - The node that should be remapped.
11
+ * @param {Node} inLowNode - The source or current lower bound of the range.
12
+ * @param {Node} inHighNode - The source or current upper bound of the range.
13
+ * @param {?Node} [outLowNode=float(0)] - The target lower bound of the range.
14
+ * @param {?Node} [outHighNode=float(1)] - The target upper bound of the range.
15
+ * @returns {Node}
16
+ */
17
+ export const remap = /*@__PURE__*/ Fn( ( [ node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ), doClamp = bool( false ) ] ) => {
18
+
19
+ let t = node.sub( inLowNode ).div( inHighNode.sub( inLowNode ) );
20
+
21
+ if ( defined( doClamp ) ) t = t.clamp();
22
+
23
+ return t.mul( outHighNode.sub( outLowNode ) ).add( outLowNode );
24
+
25
+ } );
26
+
27
+ /**
28
+ * This node allows to remap a node value from one range into another but with enabled clamping. E.g a value of
29
+ * `0.4` in the range `[ 0.3, 0.5 ]` should be remapped into the normalized range `[ 0, 1 ]`.
30
+ * `remapClamp` takes care of that and converts the original value of `0.4` to `0.5`.
31
+ *
32
+ * @tsl
33
+ * @function
34
+ * @param {Node} node - The node that should be remapped.
35
+ * @param {Node} inLowNode - The source or current lower bound of the range.
36
+ * @param {Node} inHighNode - The source or current upper bound of the range.
37
+ * @param {?Node} [outLowNode=float(0)] - The target lower bound of the range.
38
+ * @param {?Node} [outHighNode=float(1)] - The target upper bound of the range.
39
+ * @returns {Node}
40
+ */
41
+ export function remapClamp( node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ) ) {
42
+
43
+ return remap( node, inLowNode, inHighNode, outLowNode, outHighNode, true );
44
+
45
+ }
46
+
47
+ addMethodChaining( 'remap', remap );
48
+ addMethodChaining( 'remapClamp', remapClamp );
@@ -49,7 +49,7 @@ class RotateNode extends TempNode {
49
49
  * @param {NodeBuilder} builder - The current node builder.
50
50
  * @return {string} The node's type.
51
51
  */
52
- getNodeType( builder ) {
52
+ generateNodeType( builder ) {
53
53
 
54
54
  return this.positionNode.getNodeType( builder );
55
55
 
@@ -88,4 +88,4 @@ export default SampleNode;
88
88
  * @param {?Node<vec2>} [uv=null] - The UV node to be used in the texture sampling.
89
89
  * @returns {SampleNode} The created SampleNode instance wrapped as a node object.
90
90
  */
91
- export const sample = ( callback, uv = null ) => nodeObject( new SampleNode( callback, nodeObject( uv ) ) );
91
+ export const sample = ( callback, uv = null ) => new SampleNode( callback, nodeObject( uv ) );
@@ -60,7 +60,7 @@ class SetNode extends TempNode {
60
60
  * @param {NodeBuilder} builder - The current node builder.
61
61
  * @return {string} The node type.
62
62
  */
63
- getNodeType( builder ) {
63
+ generateNodeType( builder ) {
64
64
 
65
65
  return this.sourceNode.getNodeType( builder );
66
66
 
@@ -94,7 +94,7 @@ class SplitNode extends Node {
94
94
  * @param {NodeBuilder} builder - The current node builder.
95
95
  * @return {string} The node type.
96
96
  */
97
- getNodeType( builder ) {
97
+ generateNodeType( builder ) {
98
98
 
99
99
  return builder.getTypeFromLength( this.components.length, this.getComponentType( builder ) );
100
100
 
@@ -0,0 +1,35 @@
1
+ import { uv } from '../accessors/UV.js';
2
+ import { Fn, float, vec2 } from '../tsl/TSLBase.js';
3
+
4
+ /**
5
+ * TSL function for computing texture coordinates for animated sprite sheets.
6
+ *
7
+ * ```js
8
+ * const uvNode = spritesheetUV( vec2( 6, 6 ), uv(), time.mul( animationSpeed ) );
9
+ *
10
+ * material.colorNode = texture( spriteSheet, uvNode );
11
+ * ```
12
+ *
13
+ * @tsl
14
+ * @function
15
+ * @param {Node<vec2>} countNode - The node that defines the number of sprites in the x and y direction (e.g 6x6).
16
+ * @param {?Node<vec2>} [uvNode=uv()] - The uv node.
17
+ * @param {?Node<float>} [frameNode=float(0)] - The node that defines the current frame/sprite.
18
+ * @returns {Node<vec2>}
19
+ */
20
+ export const spritesheetUV = /*@__PURE__*/ Fn( ( [ countNode, uvNode = uv(), frameNode = float( 0 ) ] ) => {
21
+
22
+ const width = countNode.x;
23
+ const height = countNode.y;
24
+
25
+ const frameNum = frameNode.mod( width.mul( height ) ).floor();
26
+
27
+ const column = frameNum.mod( width );
28
+ const row = height.sub( frameNum.add( 1 ).div( width ).ceil() );
29
+
30
+ const scale = countNode.reciprocal();
31
+ const uvFrameOffset = vec2( column, row );
32
+
33
+ return uvNode.add( uvFrameOffset ).mul( scale );
34
+
35
+ } );
@@ -1,5 +1,33 @@
1
1
  import { Fn, vec2 } from '../tsl/TSLBase.js';
2
2
  import { rotate } from './RotateNode.js';
3
+ import { context } from '../core/ContextNode.js';
4
+
5
+ /**
6
+ * Replaces the default UV coordinates used in texture lookups.
7
+ *
8
+ * ```js
9
+ *material.contextNode = replaceDefaultUV( ( textureNode ) => {
10
+ *
11
+ * // ...
12
+ * return customUVCoordinates;
13
+ *
14
+ *} );
15
+ *```
16
+ *
17
+ * @tsl
18
+ * @function
19
+ * @param {function(Node):Node<vec2>|Node<vec2>} callback - A callback that receives the texture node
20
+ * and must return the new uv coordinates.
21
+ * @param {Node} [node=null] - An optional node to which the context will be applied.
22
+ * @return {ContextNode} A context node that replaces the default UV coordinates.
23
+ */
24
+ export function replaceDefaultUV( callback, node = null ) {
25
+
26
+ const getUV = typeof callback === 'function' ? callback : () => callback;
27
+
28
+ return context( node, { getUV } );
29
+
30
+ }
3
31
 
4
32
  /**
5
33
  * Rotates the given uv coordinates around a center point
@@ -272,7 +272,6 @@ class BatchedMesh extends Mesh {
272
272
  this._multiDrawCounts = new Int32Array( maxInstanceCount );
273
273
  this._multiDrawStarts = new Int32Array( maxInstanceCount );
274
274
  this._multiDrawCount = 0;
275
- this._multiDrawInstances = null;
276
275
 
277
276
  // Local matrix per geometry by using data texture
278
277
  this._matricesTexture = null;
@@ -871,10 +870,9 @@ class BatchedMesh extends Mesh {
871
870
  }
872
871
 
873
872
  /**
874
- * Repacks the sub geometries in [name] to remove any unused space remaining from
873
+ * Repacks the sub geometries in BatchedMesh to remove any unused space remaining from
875
874
  * previously deleted geometry, freeing up space to add new geometry.
876
875
  *
877
- * @param {number} instanceId - The ID of the instance to remove from the batch.
878
876
  * @return {BatchedMesh} A reference to this batched mesh.
879
877
  */
880
878
  optimize() {
@@ -926,6 +924,7 @@ class BatchedMesh extends Mesh {
926
924
 
927
925
  index.array.copyWithin( nextIndexStart, indexStart, indexStart + reservedIndexCount );
928
926
  index.addUpdateRange( nextIndexStart, reservedIndexCount );
927
+ index.needsUpdate = true;
929
928
 
930
929
  geometryInfo.indexStart = nextIndexStart;
931
930
 
@@ -946,6 +945,7 @@ class BatchedMesh extends Mesh {
946
945
  const { array, itemSize } = attribute;
947
946
  array.copyWithin( nextVertexStart * itemSize, vertexStart * itemSize, ( vertexStart + reservedVertexCount ) * itemSize );
948
947
  attribute.addUpdateRange( nextVertexStart * itemSize, reservedVertexCount * itemSize );
948
+ attribute.needsUpdate = true;
949
949
 
950
950
  }
951
951
 
@@ -956,12 +956,12 @@ class BatchedMesh extends Mesh {
956
956
  nextVertexStart += geometryInfo.reservedVertexCount;
957
957
  geometryInfo.start = geometry.index ? geometryInfo.indexStart : geometryInfo.vertexStart;
958
958
 
959
- // step the next geometry points to the shifted position
960
- this._nextIndexStart = geometry.index ? geometryInfo.indexStart + geometryInfo.reservedIndexCount : 0;
961
- this._nextVertexStart = geometryInfo.vertexStart + geometryInfo.reservedVertexCount;
962
-
963
959
  }
964
960
 
961
+ this._nextIndexStart = nextIndexStart;
962
+ this._nextVertexStart = nextVertexStart;
963
+ this._visibilityChanged = true;
964
+
965
965
  return this;
966
966
 
967
967
  }
@@ -1102,7 +1102,7 @@ class BatchedMesh extends Mesh {
1102
1102
  * Sets the given color to the defined instance.
1103
1103
  *
1104
1104
  * @param {number} instanceId - The ID of an instance to set the color of.
1105
- * @param {Color} color - The color to set the instance to.
1105
+ * @param {Color|Vector4} color - The color to set the instance to. Use a `Vector4` to also define alpha.
1106
1106
  * @return {BatchedMesh} A reference to this batched mesh.
1107
1107
  */
1108
1108
  setColorAt( instanceId, color ) {
@@ -1126,13 +1126,29 @@ class BatchedMesh extends Mesh {
1126
1126
  * Returns the color of the defined instance.
1127
1127
  *
1128
1128
  * @param {number} instanceId - The ID of an instance to get the color of.
1129
- * @param {Color} color - The target object that is used to store the method's result.
1130
- * @return {Color} The instance's color.
1129
+ * @param {Color|Vector4} color - The target object that is used to store the method's result.
1130
+ * @return {Color|Vector4} The instance's color. Use a `Vector4` to also retrieve alpha.
1131
1131
  */
1132
1132
  getColorAt( instanceId, color ) {
1133
1133
 
1134
1134
  this.validateInstanceId( instanceId );
1135
- return color.fromArray( this._colorsTexture.image.data, instanceId * 4 );
1135
+ if ( this._colorsTexture === null ) {
1136
+
1137
+ if ( color.isVector4 ) {
1138
+
1139
+ return color.set( 1, 1, 1, 1 );
1140
+
1141
+ } else {
1142
+
1143
+ return color.setRGB( 1, 1, 1 );
1144
+
1145
+ }
1146
+
1147
+ } else {
1148
+
1149
+ return color.fromArray( this._colorsTexture.image.data, instanceId * 4 );
1150
+
1151
+ }
1136
1152
 
1137
1153
  }
1138
1154
 
@@ -1512,7 +1528,19 @@ class BatchedMesh extends Mesh {
1512
1528
  // the indexed version of the multi draw function requires specifying the start
1513
1529
  // offset in bytes.
1514
1530
  const index = geometry.getIndex();
1515
- const bytesPerElement = index === null ? 1 : index.array.BYTES_PER_ELEMENT;
1531
+ let bytesPerElement = index === null ? 1 : index.array.BYTES_PER_ELEMENT;
1532
+
1533
+
1534
+ // the "wireframe" attribute implicitly creates a line attribute in the renderer, which is double
1535
+ // the vertices to draw (3 lines per triangle) so we multiply the draw counts / starts and make
1536
+ // assumptions about the index buffer byte size.
1537
+ let multiDrawMultiplier = 1;
1538
+ if ( material.wireframe ) {
1539
+
1540
+ multiDrawMultiplier = 2;
1541
+ bytesPerElement = geometry.attributes.position.count > 65535 ? 4 : 2;
1542
+
1543
+ }
1516
1544
 
1517
1545
  const instanceInfo = this._instanceInfo;
1518
1546
  const multiDrawStarts = this._multiDrawStarts;
@@ -1593,8 +1621,8 @@ class BatchedMesh extends Mesh {
1593
1621
  for ( let i = 0, l = list.length; i < l; i ++ ) {
1594
1622
 
1595
1623
  const item = list[ i ];
1596
- multiDrawStarts[ multiDrawCount ] = item.start * bytesPerElement;
1597
- multiDrawCounts[ multiDrawCount ] = item.count;
1624
+ multiDrawStarts[ multiDrawCount ] = item.start * bytesPerElement * multiDrawMultiplier;
1625
+ multiDrawCounts[ multiDrawCount ] = item.count * multiDrawMultiplier;
1598
1626
  indirectArray[ multiDrawCount ] = item.index;
1599
1627
  multiDrawCount ++;
1600
1628
 
@@ -1624,8 +1652,8 @@ class BatchedMesh extends Mesh {
1624
1652
  if ( ! culled ) {
1625
1653
 
1626
1654
  const geometryInfo = geometryInfoList[ geometryId ];
1627
- multiDrawStarts[ multiDrawCount ] = geometryInfo.start * bytesPerElement;
1628
- multiDrawCounts[ multiDrawCount ] = geometryInfo.count;
1655
+ multiDrawStarts[ multiDrawCount ] = geometryInfo.start * bytesPerElement * multiDrawMultiplier;
1656
+ multiDrawCounts[ multiDrawCount ] = geometryInfo.count * multiDrawMultiplier;
1629
1657
  indirectArray[ multiDrawCount ] = i;
1630
1658
  multiDrawCount ++;
1631
1659
 
@@ -56,6 +56,15 @@ class InstancedMesh extends Mesh {
56
56
  */
57
57
  this.instanceMatrix = new InstancedBufferAttribute( new Float32Array( count * 16 ), 16 );
58
58
 
59
+ /**
60
+ * Represents the local transformation of all instances of the previous frame.
61
+ * Required for computing velocity. Maintained in {@link InstanceNode}.
62
+ *
63
+ * @type {?InstancedBufferAttribute}
64
+ * @default null
65
+ */
66
+ this.previousInstanceMatrix = null;
67
+
59
68
  /**
60
69
  * Represents the color of all instances. You have to set its
61
70
  * {@link BufferAttribute#needsUpdate} flag to true if you modify instanced data
@@ -185,6 +194,8 @@ class InstancedMesh extends Mesh {
185
194
 
186
195
  this.instanceMatrix.copy( source.instanceMatrix );
187
196
 
197
+ if ( source.previousInstanceMatrix !== null ) this.previousInstanceMatrix = source.previousInstanceMatrix.clone();
198
+
188
199
  if ( source.morphTexture !== null ) this.morphTexture = source.morphTexture.clone();
189
200
  if ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone();
190
201
 
@@ -202,10 +213,19 @@ class InstancedMesh extends Mesh {
202
213
  *
203
214
  * @param {number} index - The instance index.
204
215
  * @param {Color} color - The target object that is used to store the method's result.
216
+ * @return {Color} A reference to the target color.
205
217
  */
206
218
  getColorAt( index, color ) {
207
219
 
208
- color.fromArray( this.instanceColor.array, index * 3 );
220
+ if ( this.instanceColor === null ) {
221
+
222
+ return color.setRGB( 1, 1, 1 );
223
+
224
+ } else {
225
+
226
+ return color.fromArray( this.instanceColor.array, index * 3 );
227
+
228
+ }
209
229
 
210
230
  }
211
231
 
@@ -214,10 +234,11 @@ class InstancedMesh extends Mesh {
214
234
  *
215
235
  * @param {number} index - The instance index.
216
236
  * @param {Matrix4} matrix - The target object that is used to store the method's result.
237
+ * @return {Matrix4} A reference to the target matrix.
217
238
  */
218
239
  getMatrixAt( index, matrix ) {
219
240
 
220
- matrix.fromArray( this.instanceMatrix.array, index * 16 );
241
+ return matrix.fromArray( this.instanceMatrix.array, index * 16 );
221
242
 
222
243
  }
223
244
 
@@ -303,6 +324,7 @@ class InstancedMesh extends Mesh {
303
324
  *
304
325
  * @param {number} index - The instance index.
305
326
  * @param {Color} color - The instance color.
327
+ * @return {InstancedMesh} A reference to this instanced mesh.
306
328
  */
307
329
  setColorAt( index, color ) {
308
330
 
@@ -313,19 +335,22 @@ class InstancedMesh extends Mesh {
313
335
  }
314
336
 
315
337
  color.toArray( this.instanceColor.array, index * 3 );
338
+ return this;
316
339
 
317
340
  }
318
341
 
319
342
  /**
320
343
  * Sets the given local transformation matrix to the defined instance. Make sure you set the `needsUpdate` flag of
321
- * {@link InstancedMesh#instanceMatrix} to `true` after updating all the colors.
344
+ * {@link InstancedMesh#instanceMatrix} to `true` after updating all the matrices.
322
345
  *
323
346
  * @param {number} index - The instance index.
324
347
  * @param {Matrix4} matrix - The local transformation.
348
+ * @return {InstancedMesh} A reference to this instanced mesh.
325
349
  */
326
350
  setMatrixAt( index, matrix ) {
327
351
 
328
352
  matrix.toArray( this.instanceMatrix.array, index * 16 );
353
+ return this;
329
354
 
330
355
  }
331
356
 
@@ -336,6 +361,7 @@ class InstancedMesh extends Mesh {
336
361
  * @param {number} index - The instance index.
337
362
  * @param {Mesh} object - A mesh which `morphTargetInfluences` property containing the morph target weights
338
363
  * of a single instance.
364
+ * @return {InstancedMesh} A reference to this instanced mesh.
339
365
  */
340
366
  setMorphAt( index, object ) {
341
367
 
@@ -366,6 +392,7 @@ class InstancedMesh extends Mesh {
366
392
  array[ dataIndex ] = morphBaseInfluence;
367
393
 
368
394
  array.set( objectInfluences, dataIndex + 1 );
395
+ return this;
369
396
 
370
397
  }
371
398
 
@@ -81,7 +81,7 @@ class Line extends Object3D {
81
81
  * morph targets name, the value its attribute index. This member is `undefined`
82
82
  * by default and only set when morph targets are detected in the geometry.
83
83
  *
84
- * @type {Object<String,number>|undefined}
84
+ * @type {Object<string,number>|undefined}
85
85
  * @default undefined
86
86
  */
87
87
  this.morphTargetDictionary = undefined;
@@ -79,7 +79,7 @@ class Mesh extends Object3D {
79
79
  * morph targets name, the value its attribute index. This member is `undefined`
80
80
  * by default and only set when morph targets are detected in the geometry.
81
81
  *
82
- * @type {Object<String,number>|undefined}
82
+ * @type {Object<string,number>|undefined}
83
83
  * @default undefined
84
84
  */
85
85
  this.morphTargetDictionary = undefined;
@@ -59,7 +59,7 @@ class Points extends Object3D {
59
59
  * morph targets name, the value its attribute index. This member is `undefined`
60
60
  * by default and only set when morph targets are detected in the geometry.
61
61
  *
62
- * @type {Object<String,number>|undefined}
62
+ * @type {Object<string,number>|undefined}
63
63
  * @default undefined
64
64
  */
65
65
  this.morphTargetDictionary = undefined;
@@ -70,6 +70,15 @@ class Skeleton {
70
70
  */
71
71
  this.boneMatrices = null;
72
72
 
73
+ /**
74
+ * An array buffer holding the bone data of the previous frame.
75
+ * Required for computing velocity. Maintained in {@link SkinningNode}.
76
+ *
77
+ * @type {?Float32Array}
78
+ * @default null
79
+ */
80
+ this.previousBoneMatrices = null;
81
+
73
82
  /**
74
83
  * A texture holding the bone data for use
75
84
  * in the vertex shader.
@@ -8,12 +8,12 @@ import { Ray } from '../math/Ray.js';
8
8
  import { AttachedBindMode, DetachedBindMode } from '../constants.js';
9
9
  import { warn } from '../utils.js';
10
10
 
11
- const _basePosition = /*@__PURE__*/ new Vector3();
11
+ const _baseVector = /*@__PURE__*/ new Vector4();
12
12
 
13
13
  const _skinIndex = /*@__PURE__*/ new Vector4();
14
14
  const _skinWeight = /*@__PURE__*/ new Vector4();
15
15
 
16
- const _vector3 = /*@__PURE__*/ new Vector3();
16
+ const _vector4 = /*@__PURE__*/ new Vector4();
17
17
  const _matrix4 = /*@__PURE__*/ new Matrix4();
18
18
  const _vertex = /*@__PURE__*/ new Vector3();
19
19
 
@@ -309,12 +309,12 @@ class SkinnedMesh extends Mesh {
309
309
 
310
310
  /**
311
311
  * Applies the bone transform associated with the given index to the given
312
- * vertex position. Returns the updated vector.
312
+ * vector. Can be used to transform positions or direction vectors by providing
313
+ * a Vector4 with 1 or 0 in the w component respectively. Returns the updated vector.
313
314
  *
314
315
  * @param {number} index - The vertex index.
315
- * @param {Vector3} target - The target object that is used to store the method's result.
316
- * the skinned mesh's world matrix will be used instead.
317
- * @return {Vector3} The updated vertex position.
316
+ * @param {Vector3|Vector4} target - The target object that is used to store the method's result.
317
+ * @return {Vector3|Vector4} The updated vertex attribute data.
318
318
  */
319
319
  applyBoneTransform( index, target ) {
320
320
 
@@ -324,9 +324,19 @@ class SkinnedMesh extends Mesh {
324
324
  _skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );
325
325
  _skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );
326
326
 
327
- _basePosition.copy( target ).applyMatrix4( this.bindMatrix );
327
+ if ( target.isVector4 ) {
328
+
329
+ _baseVector.copy( target );
330
+ target.set( 0, 0, 0, 0 );
331
+
332
+ } else {
333
+
334
+ _baseVector.set( ...target, 1 );
335
+ target.set( 0, 0, 0 );
328
336
 
329
- target.set( 0, 0, 0 );
337
+ }
338
+
339
+ _baseVector.applyMatrix4( this.bindMatrix );
330
340
 
331
341
  for ( let i = 0; i < 4; i ++ ) {
332
342
 
@@ -338,12 +348,19 @@ class SkinnedMesh extends Mesh {
338
348
 
339
349
  _matrix4.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );
340
350
 
341
- target.addScaledVector( _vector3.copy( _basePosition ).applyMatrix4( _matrix4 ), weight );
351
+ target.addScaledVector( _vector4.copy( _baseVector ).applyMatrix4( _matrix4 ), weight );
342
352
 
343
353
  }
344
354
 
345
355
  }
346
356
 
357
+ if ( target.isVector4 ) {
358
+
359
+ // ensure the homogenous coordinate remains unchanged after vector operations
360
+ target.w = _baseVector.w;
361
+
362
+ }
363
+
347
364
  return target.applyMatrix4( this.bindMatrixInverse );
348
365
 
349
366
  }