super-three 0.181.0 → 0.185.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 (693) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +21332 -19201
  4. package/build/three.core.js +20908 -19853
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1947 -862
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +37 -16
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +33628 -25197
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +33394 -25000
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +14 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +13 -6
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +127 -86
  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 +102 -17
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMFrustum.js +31 -6
  26. package/examples/jsm/csm/CSMShadowNode.js +10 -3
  27. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  28. package/examples/jsm/effects/AsciiEffect.js +14 -1
  29. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  30. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  31. package/examples/jsm/exporters/DRACOExporter.js +27 -6
  32. package/examples/jsm/exporters/EXRExporter.js +1 -1
  33. package/examples/jsm/exporters/GLTFExporter.js +266 -21
  34. package/examples/jsm/exporters/PLYExporter.js +286 -73
  35. package/examples/jsm/exporters/USDZExporter.js +353 -99
  36. package/examples/jsm/generators/CityGenerator.js +346 -0
  37. package/examples/jsm/generators/ForestGenerator.js +347 -0
  38. package/examples/jsm/generators/TerrainGenerator.js +504 -0
  39. package/examples/jsm/generators/TreeGenerator.js +377 -0
  40. package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
  41. package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
  42. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  43. package/examples/jsm/geometries/LoftGeometry.js +355 -0
  44. package/examples/jsm/geometries/TextGeometry.js +18 -0
  45. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  46. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  47. package/examples/jsm/helpers/LightProbeHelper.js +5 -4
  48. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  49. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  50. package/examples/jsm/helpers/ViewHelper.js +83 -14
  51. package/examples/jsm/inspector/Extension.js +13 -0
  52. package/examples/jsm/inspector/Inspector.js +244 -91
  53. package/examples/jsm/inspector/RendererInspector.js +165 -39
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  55. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  56. package/examples/jsm/inspector/tabs/Console.js +241 -25
  57. package/examples/jsm/inspector/tabs/Memory.js +136 -0
  58. package/examples/jsm/inspector/tabs/Parameters.js +115 -7
  59. package/examples/jsm/inspector/tabs/Performance.js +24 -9
  60. package/examples/jsm/inspector/tabs/Settings.js +306 -0
  61. package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
  62. package/examples/jsm/inspector/tabs/Viewer.js +723 -9
  63. package/examples/jsm/inspector/ui/Graph.js +162 -25
  64. package/examples/jsm/inspector/ui/Item.js +92 -13
  65. package/examples/jsm/inspector/ui/List.js +2 -2
  66. package/examples/jsm/inspector/ui/Profiler.js +1991 -44
  67. package/examples/jsm/inspector/ui/Style.js +1943 -543
  68. package/examples/jsm/inspector/ui/Tab.js +226 -5
  69. package/examples/jsm/inspector/ui/Values.js +126 -8
  70. package/examples/jsm/inspector/ui/utils.js +143 -10
  71. package/examples/jsm/interaction/InteractionManager.js +226 -0
  72. package/examples/jsm/libs/basis/README.md +0 -1
  73. package/examples/jsm/libs/demuxer_mp4.js +3 -3
  74. package/examples/jsm/libs/draco/README.md +0 -1
  75. package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
  76. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  77. package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
  78. package/examples/jsm/libs/mikktspace.module.js +34 -9
  79. package/examples/jsm/lighting/ClusteredLighting.js +55 -0
  80. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  81. package/examples/jsm/lighting/LightProbeGrid.js +681 -0
  82. package/examples/jsm/lines/LineMaterial.js +45 -16
  83. package/examples/jsm/lines/LineSegments2.js +8 -0
  84. package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
  85. package/examples/jsm/loaders/3DMLoader.js +6 -5
  86. package/examples/jsm/loaders/3MFLoader.js +2 -2
  87. package/examples/jsm/loaders/AMFLoader.js +2 -2
  88. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  89. package/examples/jsm/loaders/DRACOLoader.js +51 -18
  90. package/examples/jsm/loaders/EXRLoader.js +701 -90
  91. package/examples/jsm/loaders/FBXLoader.js +235 -37
  92. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  93. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  94. package/examples/jsm/loaders/HDRLoader.js +7 -30
  95. package/examples/jsm/loaders/KMZLoader.js +5 -5
  96. package/examples/jsm/loaders/KTX2Loader.js +58 -17
  97. package/examples/jsm/loaders/LDrawLoader.js +49 -58
  98. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  99. package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
  100. package/examples/jsm/loaders/LWOLoader.js +11 -39
  101. package/examples/jsm/loaders/LottieLoader.js +1 -1
  102. package/examples/jsm/loaders/MaterialXLoader.js +31 -9
  103. package/examples/jsm/loaders/NRRDLoader.js +5 -5
  104. package/examples/jsm/loaders/PCDLoader.js +11 -9
  105. package/examples/jsm/loaders/PLYLoader.js +218 -55
  106. package/examples/jsm/loaders/SVGLoader.js +549 -497
  107. package/examples/jsm/loaders/TDSLoader.js +0 -2
  108. package/examples/jsm/loaders/TGALoader.js +0 -2
  109. package/examples/jsm/loaders/TTFLoader.js +1 -1
  110. package/examples/jsm/loaders/USDLoader.js +127 -43
  111. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  112. package/examples/jsm/loaders/VOXLoader.js +660 -117
  113. package/examples/jsm/loaders/VRMLLoader.js +80 -3
  114. package/examples/jsm/loaders/VTKLoader.js +42 -25
  115. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  116. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  117. package/examples/jsm/loaders/usd/USDAParser.js +504 -344
  118. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  119. package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
  120. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  121. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  122. package/examples/jsm/math/Octree.js +131 -1
  123. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  124. package/examples/jsm/misc/RollerCoaster.js +42 -4
  125. package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
  126. package/examples/jsm/misc/Volume.js +2 -3
  127. package/examples/jsm/misc/VolumeSlice.js +0 -1
  128. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  129. package/examples/jsm/objects/GroundedSkybox.js +1 -1
  130. package/examples/jsm/objects/LensflareMesh.js +1 -1
  131. package/examples/jsm/objects/Reflector.js +72 -25
  132. package/examples/jsm/objects/Sky.js +90 -6
  133. package/examples/jsm/objects/SkyMesh.js +150 -16
  134. package/examples/jsm/objects/Water.js +4 -3
  135. package/examples/jsm/objects/Water2.js +5 -3
  136. package/examples/jsm/objects/Water2Mesh.js +1 -1
  137. package/examples/jsm/objects/WaterMesh.js +5 -7
  138. package/examples/jsm/physics/AmmoPhysics.js +27 -15
  139. package/examples/jsm/physics/JoltPhysics.js +10 -6
  140. package/examples/jsm/physics/RapierPhysics.js +36 -7
  141. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  142. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  143. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  144. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  145. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  146. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  147. package/examples/jsm/renderers/Projector.js +246 -28
  148. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  149. package/examples/jsm/shaders/GTAOShader.js +19 -6
  150. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  151. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  152. package/examples/jsm/shaders/SAOShader.js +17 -4
  153. package/examples/jsm/shaders/SSAOShader.js +11 -1
  154. package/examples/jsm/shaders/SSRShader.js +6 -5
  155. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  156. package/examples/jsm/shaders/VignetteShader.js +1 -1
  157. package/examples/jsm/shaders/VolumeShader.js +31 -44
  158. package/examples/jsm/transpiler/AST.js +44 -0
  159. package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
  160. package/examples/jsm/transpiler/Linker.js +1 -1
  161. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  162. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  163. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  164. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  165. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  166. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  167. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  168. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  169. package/examples/jsm/tsl/display/BloomNode.js +75 -25
  170. package/examples/jsm/tsl/display/CRT.js +150 -0
  171. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  172. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  173. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  174. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  175. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  176. package/examples/jsm/tsl/display/FXAANode.js +13 -14
  177. package/examples/jsm/tsl/display/GTAONode.js +40 -17
  178. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  179. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  180. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
  181. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  182. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  183. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  184. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  185. package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
  186. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  187. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
  188. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  189. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  190. package/examples/jsm/tsl/display/SSAAPassNode.js +15 -27
  191. package/examples/jsm/tsl/display/SSGINode.js +96 -62
  192. package/examples/jsm/tsl/display/SSRNode.js +831 -134
  193. package/examples/jsm/tsl/display/SSSNode.js +8 -6
  194. package/examples/jsm/tsl/display/Shape.js +29 -0
  195. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  196. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  197. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  198. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  199. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  200. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  201. package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
  202. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  203. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  204. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  205. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
  206. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  207. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  208. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  209. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  210. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  211. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  212. package/examples/jsm/tsl/math/Bayer.js +53 -3
  213. package/examples/jsm/tsl/math/curlNoise.js +107 -0
  214. package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
  215. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
  216. package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
  217. package/examples/jsm/tsl/utils/RNoise.js +51 -0
  218. package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
  219. package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
  220. package/examples/jsm/utils/ColorUtils.js +76 -0
  221. package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
  222. package/examples/jsm/utils/LDrawUtils.js +1 -1
  223. package/examples/jsm/utils/SceneOptimizer.js +1 -1
  224. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  225. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  226. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  227. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  228. package/examples/jsm/webxr/ARButton.js +1 -1
  229. package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
  230. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
  231. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  232. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  233. package/package.json +28 -34
  234. package/src/Three.Core.js +3 -1
  235. package/src/Three.TSL.js +35 -14
  236. package/src/Three.WebGPU.Nodes.js +5 -0
  237. package/src/Three.WebGPU.js +13 -0
  238. package/src/Three.js +1 -0
  239. package/src/animation/AnimationAction.js +18 -4
  240. package/src/animation/AnimationClip.js +0 -139
  241. package/src/animation/AnimationMixer.js +6 -0
  242. package/src/animation/AnimationUtils.js +1 -12
  243. package/src/animation/KeyframeTrack.js +47 -8
  244. package/src/animation/PropertyBinding.js +2 -2
  245. package/src/animation/PropertyMixer.js +4 -4
  246. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  247. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  248. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  249. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  250. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  251. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  252. package/src/audio/Audio.js +1 -1
  253. package/src/audio/AudioContext.js +2 -2
  254. package/src/audio/AudioListener.js +5 -3
  255. package/src/cameras/Camera.js +34 -4
  256. package/src/cameras/CubeCamera.js +20 -0
  257. package/src/cameras/StereoCamera.js +5 -2
  258. package/src/constants.js +90 -5
  259. package/src/core/BufferAttribute.js +13 -1
  260. package/src/core/BufferGeometry.js +43 -9
  261. package/src/core/Clock.js +7 -0
  262. package/src/core/Object3D.js +69 -11
  263. package/src/core/Raycaster.js +3 -3
  264. package/src/core/RenderTarget.js +19 -6
  265. package/src/extras/PMREMGenerator.js +13 -22
  266. package/src/extras/TextureUtils.js +6 -2
  267. package/src/extras/core/ShapePath.js +149 -160
  268. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  269. package/src/geometries/ExtrudeGeometry.js +2 -2
  270. package/src/geometries/PolyhedronGeometry.js +1 -1
  271. package/src/geometries/SphereGeometry.js +8 -3
  272. package/src/geometries/TorusGeometry.js +8 -3
  273. package/src/helpers/CameraHelper.js +3 -0
  274. package/src/helpers/DirectionalLightHelper.js +6 -1
  275. package/src/helpers/HemisphereLightHelper.js +5 -0
  276. package/src/helpers/PointLightHelper.js +3 -25
  277. package/src/helpers/SpotLightHelper.js +4 -1
  278. package/src/lights/DirectionalLight.js +13 -0
  279. package/src/lights/HemisphereLight.js +10 -0
  280. package/src/lights/Light.js +1 -11
  281. package/src/lights/LightProbe.js +0 -15
  282. package/src/lights/LightShadow.js +15 -6
  283. package/src/lights/PointLight.js +15 -0
  284. package/src/lights/PointLightShadow.js +0 -86
  285. package/src/lights/SpotLight.js +22 -1
  286. package/src/lights/webgpu/IESSpotLight.js +2 -1
  287. package/src/loaders/AudioLoader.js +11 -1
  288. package/src/loaders/Cache.js +28 -0
  289. package/src/loaders/DataTextureLoader.js +75 -42
  290. package/src/loaders/FileLoader.js +2 -3
  291. package/src/loaders/ImageBitmapLoader.js +12 -9
  292. package/src/loaders/Loader.js +6 -0
  293. package/src/loaders/LoadingManager.js +5 -0
  294. package/src/loaders/MaterialLoader.js +37 -266
  295. package/src/loaders/ObjectLoader.js +48 -6
  296. package/src/loaders/nodes/NodeLoader.js +2 -2
  297. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  298. package/src/materials/LineBasicMaterial.js +4 -0
  299. package/src/materials/Material.js +198 -1
  300. package/src/materials/MeshBasicMaterial.js +24 -0
  301. package/src/materials/MeshDepthMaterial.js +10 -0
  302. package/src/materials/MeshDistanceMaterial.js +10 -0
  303. package/src/materials/MeshLambertMaterial.js +49 -1
  304. package/src/materials/MeshMatcapMaterial.js +25 -1
  305. package/src/materials/MeshNormalMaterial.js +9 -1
  306. package/src/materials/MeshPhongMaterial.js +49 -1
  307. package/src/materials/MeshPhysicalMaterial.js +38 -0
  308. package/src/materials/MeshStandardMaterial.js +42 -1
  309. package/src/materials/MeshToonMaterial.js +35 -2
  310. package/src/materials/PointsMaterial.js +7 -0
  311. package/src/materials/ShaderMaterial.js +106 -1
  312. package/src/materials/SpriteMaterial.js +7 -0
  313. package/src/materials/nodes/Line2NodeMaterial.js +380 -297
  314. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  315. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  316. package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
  317. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
  318. package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
  319. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
  320. package/src/materials/nodes/NodeMaterial.js +153 -89
  321. package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
  322. package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
  323. package/src/math/Box3.js +5 -0
  324. package/src/math/FrustumArray.js +103 -133
  325. package/src/math/Interpolant.js +1 -1
  326. package/src/math/Line3.js +6 -5
  327. package/src/math/MathUtils.js +12 -12
  328. package/src/math/Matrix2.js +13 -9
  329. package/src/math/Matrix3.js +24 -9
  330. package/src/math/Matrix4.js +112 -74
  331. package/src/math/Plane.js +4 -3
  332. package/src/math/Quaternion.js +3 -29
  333. package/src/math/Sphere.js +1 -1
  334. package/src/math/Triangle.js +1 -1
  335. package/src/math/Vector2.js +13 -9
  336. package/src/math/Vector3.js +17 -15
  337. package/src/math/Vector4.js +15 -11
  338. package/src/math/interpolants/BezierInterpolant.js +106 -0
  339. package/src/nodes/Nodes.js +86 -71
  340. package/src/nodes/TSL.js +15 -13
  341. package/src/nodes/accessors/Arrays.js +5 -5
  342. package/src/nodes/accessors/Batch.js +108 -0
  343. package/src/nodes/accessors/Bitangent.js +7 -7
  344. package/src/nodes/accessors/BufferAttributeNode.js +120 -17
  345. package/src/nodes/accessors/BufferNode.js +29 -2
  346. package/src/nodes/accessors/Camera.js +149 -28
  347. package/src/nodes/accessors/ClippingNode.js +5 -5
  348. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  349. package/src/nodes/accessors/Instance.js +264 -0
  350. package/src/nodes/accessors/MaterialNode.js +27 -3
  351. package/src/nodes/accessors/MaterialProperties.js +6 -8
  352. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  353. package/src/nodes/accessors/ModelNode.js +1 -1
  354. package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
  355. package/src/nodes/accessors/Normal.js +24 -24
  356. package/src/nodes/accessors/Object3DNode.js +1 -1
  357. package/src/nodes/accessors/Position.js +39 -3
  358. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  359. package/src/nodes/accessors/ReferenceNode.js +9 -8
  360. package/src/nodes/accessors/ReflectVector.js +3 -3
  361. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  362. package/src/nodes/accessors/SceneProperties.js +47 -0
  363. package/src/nodes/accessors/Skinning.js +263 -0
  364. package/src/nodes/accessors/StorageBufferNode.js +16 -27
  365. package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
  366. package/src/nodes/accessors/StorageTextureNode.js +74 -11
  367. package/src/nodes/accessors/Tangent.js +8 -18
  368. package/src/nodes/accessors/Texture3DNode.js +32 -35
  369. package/src/nodes/accessors/TextureNode.js +124 -25
  370. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  371. package/src/nodes/accessors/UserDataNode.js +1 -2
  372. package/src/nodes/accessors/VertexColorNode.js +1 -2
  373. package/src/nodes/code/FunctionCallNode.js +1 -1
  374. package/src/nodes/code/FunctionNode.js +4 -19
  375. package/src/nodes/core/ArrayNode.js +21 -2
  376. package/src/nodes/core/AssignNode.js +3 -3
  377. package/src/nodes/core/AttributeNode.js +3 -3
  378. package/src/nodes/core/BypassNode.js +1 -1
  379. package/src/nodes/core/ContextNode.js +104 -5
  380. package/src/nodes/core/IndexNode.js +2 -1
  381. package/src/nodes/core/InputNode.js +1 -1
  382. package/src/nodes/core/InspectorNode.js +1 -1
  383. package/src/nodes/core/IsolateNode.js +1 -1
  384. package/src/nodes/core/MRTNode.js +55 -4
  385. package/src/nodes/core/Node.js +151 -17
  386. package/src/nodes/core/NodeBuilder.js +479 -101
  387. package/src/nodes/core/NodeError.js +28 -0
  388. package/src/nodes/core/NodeFrame.js +12 -4
  389. package/src/nodes/core/NodeUtils.js +20 -18
  390. package/src/nodes/core/OutputStructNode.js +13 -11
  391. package/src/nodes/core/OverrideContextNode.js +153 -0
  392. package/src/nodes/core/ParameterNode.js +4 -4
  393. package/src/nodes/core/PropertyNode.js +66 -4
  394. package/src/nodes/core/StackNode.js +91 -20
  395. package/src/nodes/core/StackTrace.js +139 -0
  396. package/src/nodes/core/StructNode.js +20 -8
  397. package/src/nodes/core/StructTypeNode.js +17 -23
  398. package/src/nodes/core/SubBuildNode.js +2 -2
  399. package/src/nodes/core/UniformGroupNode.js +36 -6
  400. package/src/nodes/core/UniformNode.js +21 -5
  401. package/src/nodes/core/VarNode.js +56 -23
  402. package/src/nodes/core/VaryingNode.js +14 -21
  403. package/src/nodes/display/BlendModes.js +1 -105
  404. package/src/nodes/display/BumpMapNode.js +6 -1
  405. package/src/nodes/display/ColorAdjustment.js +27 -9
  406. package/src/nodes/display/ColorSpaceNode.js +3 -3
  407. package/src/nodes/display/FrontFacingNode.js +38 -9
  408. package/src/nodes/display/NormalMapNode.js +41 -6
  409. package/src/nodes/display/PassNode.js +157 -56
  410. package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
  411. package/src/nodes/display/RenderOutputNode.js +19 -10
  412. package/src/nodes/display/ScreenNode.js +4 -2
  413. package/src/nodes/display/ToneMappingNode.js +1 -1
  414. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  415. package/src/nodes/display/ViewportDepthNode.js +52 -4
  416. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  417. package/src/nodes/display/ViewportTextureNode.js +39 -11
  418. package/src/nodes/fog/Fog.js +18 -35
  419. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  420. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  421. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  422. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  423. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  424. package/src/nodes/functions/VolumetricLightingModel.js +40 -7
  425. package/src/nodes/geometry/RangeNode.js +5 -3
  426. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  427. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  428. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  429. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  430. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  431. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
  432. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  433. package/src/nodes/lighting/EnvironmentNode.js +30 -5
  434. package/src/nodes/lighting/IESSpotLightNode.js +40 -2
  435. package/src/nodes/lighting/LightingContextNode.js +10 -2
  436. package/src/nodes/lighting/LightsNode.js +97 -65
  437. package/src/nodes/lighting/PointShadowNode.js +166 -148
  438. package/src/nodes/lighting/ShadowFilterNode.js +74 -117
  439. package/src/nodes/lighting/ShadowNode.js +149 -51
  440. package/src/nodes/materialx/lib/mx_noise.js +2 -2
  441. package/src/nodes/math/BitcastNode.js +1 -1
  442. package/src/nodes/math/BitcountNode.js +433 -0
  443. package/src/nodes/math/ConditionalNode.js +6 -6
  444. package/src/nodes/math/MathNode.js +115 -52
  445. package/src/nodes/math/OperatorNode.js +24 -23
  446. package/src/nodes/math/PackFloatNode.js +98 -0
  447. package/src/nodes/math/UnpackFloatNode.js +96 -0
  448. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  449. package/src/nodes/pmrem/PMREMNode.js +34 -3
  450. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  451. package/src/nodes/tsl/TSLBase.js +1 -1
  452. package/src/nodes/tsl/TSLCore.js +99 -33
  453. package/src/nodes/utils/ArrayElementNode.js +14 -1
  454. package/src/nodes/utils/ConvertNode.js +1 -1
  455. package/src/nodes/utils/DebugNode.js +12 -12
  456. package/src/nodes/utils/EquirectUV.js +30 -5
  457. package/src/nodes/utils/EventNode.js +31 -2
  458. package/src/nodes/utils/FlipNode.js +1 -1
  459. package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
  460. package/src/nodes/utils/JoinNode.js +3 -3
  461. package/src/nodes/utils/LoopNode.js +1 -1
  462. package/src/nodes/utils/MemberNode.js +2 -2
  463. package/src/nodes/utils/Packing.js +48 -5
  464. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  465. package/src/nodes/utils/RTTNode.js +41 -25
  466. package/src/nodes/utils/ReflectorNode.js +4 -4
  467. package/src/nodes/utils/Remap.js +48 -0
  468. package/src/nodes/utils/RotateNode.js +1 -1
  469. package/src/nodes/utils/SampleNode.js +1 -1
  470. package/src/nodes/utils/SetNode.js +1 -1
  471. package/src/nodes/utils/SplitNode.js +1 -1
  472. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  473. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  474. package/src/nodes/utils/UVUtils.js +28 -0
  475. package/src/objects/BatchedMesh.js +66 -30
  476. package/src/objects/InstancedMesh.js +19 -3
  477. package/src/objects/Line.js +1 -1
  478. package/src/objects/Mesh.js +1 -1
  479. package/src/objects/Points.js +1 -1
  480. package/src/objects/SkinnedMesh.js +26 -9
  481. package/src/renderers/WebGLRenderer.js +344 -156
  482. package/src/renderers/common/Animation.js +3 -3
  483. package/src/renderers/common/Attributes.js +15 -1
  484. package/src/renderers/common/Backend.js +78 -13
  485. package/src/renderers/common/Background.js +26 -13
  486. package/src/renderers/common/BindGroup.js +1 -16
  487. package/src/renderers/common/Binding.js +11 -0
  488. package/src/renderers/common/Bindings.js +141 -57
  489. package/src/renderers/common/BlendMode.js +143 -0
  490. package/src/renderers/common/Buffer.js +49 -0
  491. package/src/renderers/common/BundleGroup.js +1 -1
  492. package/src/renderers/common/ChainMap.js +30 -6
  493. package/src/renderers/common/ClippingContext.js +10 -2
  494. package/src/renderers/common/ComputePipeline.js +1 -1
  495. package/src/renderers/common/CubeRenderTarget.js +51 -7
  496. package/src/renderers/common/Geometries.js +29 -3
  497. package/src/renderers/common/Info.js +374 -4
  498. package/src/renderers/common/InspectorBase.js +6 -1
  499. package/src/renderers/common/Lighting.js +51 -19
  500. package/src/renderers/common/Pipelines.js +40 -7
  501. package/src/renderers/common/PostProcessing.js +8 -206
  502. package/src/renderers/common/ReadbackBuffer.js +78 -0
  503. package/src/renderers/common/RenderBundle.js +3 -1
  504. package/src/renderers/common/RenderBundles.js +7 -3
  505. package/src/renderers/common/RenderContext.js +16 -0
  506. package/src/renderers/common/RenderContexts.js +33 -49
  507. package/src/renderers/common/RenderList.js +41 -4
  508. package/src/renderers/common/RenderLists.js +2 -1
  509. package/src/renderers/common/RenderObject.js +88 -16
  510. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  511. package/src/renderers/common/RenderObjects.js +21 -5
  512. package/src/renderers/common/RenderPipeline.js +232 -17
  513. package/src/renderers/common/Renderer.js +700 -163
  514. package/src/renderers/common/Sampler.js +16 -48
  515. package/src/renderers/common/StorageBuffer.js +13 -1
  516. package/src/renderers/common/Textures.js +121 -9
  517. package/src/renderers/common/TimestampQueryPool.js +6 -4
  518. package/src/renderers/common/Uniform.js +8 -0
  519. package/src/renderers/common/UniformsGroup.js +84 -1
  520. package/src/renderers/common/XRManager.js +377 -51
  521. package/src/renderers/common/extras/PMREMGenerator.js +40 -61
  522. package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
  523. package/src/renderers/common/nodes/NodeLibrary.js +4 -4
  524. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
  525. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  526. package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
  527. package/src/renderers/shaders/DFGLUTData.js +19 -34
  528. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  529. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  530. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  531. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  532. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  533. package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
  534. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
  535. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  536. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
  537. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
  538. package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
  539. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  540. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  541. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  542. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  543. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +3 -1
  544. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  545. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  546. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
  547. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  548. package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
  549. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  550. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  551. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  552. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  553. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  554. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
  555. package/src/renderers/shaders/ShaderChunk.js +5 -3
  556. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  557. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  558. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
  559. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  560. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  561. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  562. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  563. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  564. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  565. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  566. package/src/renderers/shaders/ShaderLib.js +7 -6
  567. package/src/renderers/shaders/UniformsLib.js +7 -5
  568. package/src/renderers/shaders/UniformsUtils.js +27 -5
  569. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  570. package/src/renderers/webgl/WebGLBackground.js +15 -15
  571. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  572. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  573. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  574. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  575. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  576. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  577. package/src/renderers/webgl/WebGLLights.js +18 -1
  578. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  579. package/src/renderers/webgl/WebGLObjects.js +3 -1
  580. package/src/renderers/webgl/WebGLOutput.js +271 -0
  581. package/src/renderers/webgl/WebGLProgram.js +54 -113
  582. package/src/renderers/webgl/WebGLPrograms.js +74 -55
  583. package/src/renderers/webgl/WebGLRenderLists.js +24 -1
  584. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  585. package/src/renderers/webgl/WebGLShaderCache.js +5 -11
  586. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  587. package/src/renderers/webgl/WebGLState.js +75 -37
  588. package/src/renderers/webgl/WebGLTextures.js +230 -56
  589. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  590. package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
  591. package/src/renderers/webgl/WebGLUtils.js +6 -2
  592. package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
  593. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  594. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
  595. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  596. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  597. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  598. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
  599. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  600. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
  601. package/src/renderers/webgpu/WebGPUBackend.js +733 -302
  602. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  603. package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
  604. package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
  605. package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
  606. package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
  607. package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
  608. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
  609. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
  610. package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
  611. package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
  612. package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
  613. package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
  614. package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
  615. package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
  616. package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
  617. package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
  618. package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
  619. package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
  620. package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
  621. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
  622. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
  623. package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
  624. package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
  625. package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
  626. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
  627. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
  628. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
  629. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
  630. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
  631. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  632. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  633. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
  634. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
  635. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
  636. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
  637. package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
  638. package/src/renderers/webxr/WebXRController.js +12 -0
  639. package/src/renderers/webxr/WebXRManager.js +4 -2
  640. package/src/textures/CubeDepthTexture.js +76 -0
  641. package/src/textures/DepthTexture.js +1 -1
  642. package/src/textures/ExternalTexture.js +0 -3
  643. package/src/textures/HTMLTexture.js +74 -0
  644. package/src/textures/Source.js +2 -2
  645. package/src/textures/Texture.js +16 -5
  646. package/src/utils.js +280 -3
  647. package/examples/fonts/LICENSE +0 -13
  648. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  649. package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
  650. package/examples/fonts/README.md +0 -11
  651. package/examples/fonts/droid/NOTICE +0 -190
  652. package/examples/fonts/droid/README.txt +0 -18
  653. package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
  654. package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
  655. package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
  656. package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
  657. package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
  658. package/examples/fonts/gentilis_bold.typeface.json +0 -1
  659. package/examples/fonts/gentilis_regular.typeface.json +0 -1
  660. package/examples/fonts/helvetiker_bold.typeface.json +0 -1
  661. package/examples/fonts/helvetiker_regular.typeface.json +0 -1
  662. package/examples/fonts/optimer_bold.typeface.json +0 -1
  663. package/examples/fonts/optimer_regular.typeface.json +0 -1
  664. package/examples/fonts/ttf/README.md +0 -9
  665. package/examples/fonts/ttf/kenpixel.ttf +0 -0
  666. package/examples/jsm/libs/ammo.wasm.js +0 -822
  667. package/examples/jsm/libs/ammo.wasm.wasm +0 -0
  668. package/examples/jsm/libs/draco/draco_encoder.js +0 -33
  669. package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
  670. package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
  671. package/examples/jsm/libs/opentype.module.js +0 -14506
  672. package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
  673. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
  674. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  675. package/examples/jsm/lighting/TiledLighting.js +0 -42
  676. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  677. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  678. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  679. package/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
  680. package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
  681. package/src/nodes/accessors/BatchNode.js +0 -163
  682. package/src/nodes/accessors/InstanceNode.js +0 -244
  683. package/src/nodes/accessors/InstancedMeshNode.js +0 -50
  684. package/src/nodes/accessors/SceneNode.js +0 -145
  685. package/src/nodes/accessors/SkinningNode.js +0 -327
  686. package/src/nodes/code/ScriptableNode.js +0 -726
  687. package/src/nodes/code/ScriptableValueNode.js +0 -253
  688. package/src/nodes/display/PosterizeNode.js +0 -65
  689. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  690. package/src/nodes/utils/RemapNode.js +0 -125
  691. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  692. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  693. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -1,9 +1,9 @@
1
1
  import { attribute } from '../core/AttributeNode.js';
2
2
  import { cameraViewMatrix } from './Camera.js';
3
3
  import { modelNormalMatrix, modelWorldMatrix } from './ModelNode.js';
4
- import { mat3, vec3, Fn } from '../tsl/TSLBase.js';
4
+ import { mat3, vec3, Fn, addMethodChaining } from '../tsl/TSLBase.js';
5
5
  import { positionView } from './Position.js';
6
- import { directionToFaceDirection } from '../display/FrontFacingNode.js';
6
+ import { negateOnBackSide } from '../display/FrontFacingNode.js';
7
7
  import { warn } from '../../utils.js';
8
8
 
9
9
  /**
@@ -52,7 +52,7 @@ export const normalViewGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
52
52
 
53
53
  let node;
54
54
 
55
- if ( builder.material.flatShading === true ) {
55
+ if ( builder.isFlatShading() ) {
56
56
 
57
57
  node = normalFlat;
58
58
 
@@ -74,9 +74,9 @@ export const normalViewGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
74
74
  */
75
75
  export const normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
76
76
 
77
- let normal = normalViewGeometry.transformDirection( cameraViewMatrix );
77
+ let normal = normalViewGeometry.transformNormalByInverseViewMatrix( cameraViewMatrix );
78
78
 
79
- if ( builder.material.flatShading !== true ) {
79
+ if ( builder.isFlatShading() !== true ) {
80
80
 
81
81
  normal = normal.toVarying( 'v_normalWorldGeometry' );
82
82
 
@@ -92,25 +92,25 @@ export const normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
92
92
  * @tsl
93
93
  * @type {Node<vec3>}
94
94
  */
95
- export const normalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, material, context } ) => {
95
+ export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
96
96
 
97
97
  let node;
98
98
 
99
- if ( subBuildFn === 'NORMAL' || subBuildFn === 'VERTEX' ) {
99
+ if ( builder.subBuildFn === 'NORMAL' || builder.subBuildFn === 'VERTEX' ) {
100
100
 
101
101
  node = normalViewGeometry;
102
102
 
103
- if ( material.flatShading !== true ) {
103
+ if ( builder.isFlatShading() !== true ) {
104
104
 
105
- node = directionToFaceDirection( node );
105
+ node = negateOnBackSide( node );
106
106
 
107
107
  }
108
108
 
109
109
  } else {
110
110
 
111
- // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
111
+ // Use custom context to avoid side effects from nodes overwriting getUV, getTextureLevel in the context (e.g. EnvironmentNode)
112
112
 
113
- node = context.setupNormal().context( { getUV: null } );
113
+ node = builder.context.setupNormal().context( { getUV: null, getTextureLevel: null } );
114
114
 
115
115
  }
116
116
 
@@ -124,7 +124,7 @@ export const normalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, material, context
124
124
  * @tsl
125
125
  * @type {Node<vec3>}
126
126
  */
127
- export const normalWorld = /*@__PURE__*/ normalView.transformDirection( cameraViewMatrix ).toVar( 'normalWorld' );
127
+ export const normalWorld = /*@__PURE__*/ normalView.transformNormalByInverseViewMatrix( cameraViewMatrix ).toVar( 'normalWorld' );
128
128
 
129
129
  /**
130
130
  * TSL object that represents the clearcoat vertex normal of the current rendered object in view space.
@@ -142,9 +142,9 @@ export const clearcoatNormalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, context }
142
142
 
143
143
  } else {
144
144
 
145
- // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
145
+ // Use custom context to avoid side effects from nodes overwriting getUV, getTextureLevel in the context (e.g. EnvironmentNode)
146
146
 
147
- node = context.setupClearcoatNormal().context( { getUV: null } );
147
+ node = context.setupClearcoatNormal().context( { getUV: null, getTextureLevel: null } );
148
148
 
149
149
  }
150
150
 
@@ -153,24 +153,24 @@ export const clearcoatNormalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, context }
153
153
  }, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'clearcoatNormalView' );
154
154
 
155
155
  /**
156
- * Transforms the normal with the given matrix.
156
+ * Transforms the normal by the normal matrix of the given matrix and then normalizes the result.
157
157
  *
158
158
  * @tsl
159
159
  * @function
160
160
  * @param {Node<vec3>} normal - The normal.
161
- * @param {Node<mat3>} [matrix=modelWorldMatrix] - The matrix.
161
+ * @param {Node<mat3|mat4>} [matrix=modelWorldMatrix] - The matrix.
162
162
  * @return {Node<vec3>} The transformed normal.
163
163
  */
164
164
  export const transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorldMatrix ] ) => {
165
165
 
166
- const m = mat3( matrix );
167
-
168
- const transformedNormal = normal.div( vec3( m[ 0 ].dot( m[ 0 ] ), m[ 1 ].dot( m[ 1 ] ), m[ 2 ].dot( m[ 2 ] ) ) );
166
+ const normalMatrix = mat3( matrix ).inverse().transpose();
169
167
 
170
- return m.mul( transformedNormal ).xyz;
168
+ return normalMatrix.mul( normal ).normalize();
171
169
 
172
170
  } );
173
171
 
172
+ addMethodChaining( 'transformNormal', transformNormal );
173
+
174
174
  /**
175
175
  * Transforms the given normal from local to view space.
176
176
  *
@@ -182,11 +182,11 @@ export const transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorld
182
182
  */
183
183
  export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) => {
184
184
 
185
- const modelNormalViewMatrix = builder.renderer.overrideNodes.modelNormalViewMatrix;
185
+ const modelNormalViewMatrix = builder.context.modelNormalViewMatrix;
186
186
 
187
- if ( modelNormalViewMatrix !== null ) {
187
+ if ( modelNormalViewMatrix ) {
188
188
 
189
- return modelNormalViewMatrix.transformDirection( normal );
189
+ return normal.transformNormalByViewMatrix( modelNormalViewMatrix );
190
190
 
191
191
  }
192
192
 
@@ -194,7 +194,7 @@ export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) =
194
194
 
195
195
  const transformedNormal = modelNormalMatrix.mul( normal );
196
196
 
197
- return cameraViewMatrix.transformDirection( transformedNormal );
197
+ return transformedNormal.transformNormalByViewMatrix( cameraViewMatrix );
198
198
 
199
199
  } );
200
200
 
@@ -75,7 +75,7 @@ class Object3DNode extends Node {
75
75
  *
76
76
  * @return {('mat4'|'vec3'|'float')} The node type.
77
77
  */
78
- getNodeType() {
78
+ generateNodeType() {
79
79
 
80
80
  const scope = this.scope;
81
81
 
@@ -1,6 +1,28 @@
1
1
  import { attribute } from '../core/AttributeNode.js';
2
- import { Fn, vec3 } from '../tsl/TSLCore.js';
2
+ import { Fn, vec3, vec4 } from '../tsl/TSLCore.js';
3
3
  import { modelWorldMatrix } from './ModelNode.js';
4
+ import { cameraProjectionMatrixInverse } from './Camera.js';
5
+ import { warnOnce } from '../../utils.js';
6
+
7
+ /**
8
+ * TSL object that represents the clip space position of the current rendered object.
9
+ *
10
+ * @tsl
11
+ * @type {VaryingNode<vec4>}
12
+ */
13
+ export const clipSpace = /*@__PURE__*/ ( Fn( ( builder ) => {
14
+
15
+ if ( builder.shaderStage !== 'fragment' ) {
16
+
17
+ warnOnce( 'TSL: `clipSpace` is only available in fragment stage.' );
18
+
19
+ return vec4();
20
+
21
+ }
22
+
23
+ return builder.context.clipSpace.toVarying( 'v_clipSpace' );
24
+
25
+ } ).once() )();
4
26
 
5
27
  /**
6
28
  * TSL object that represents the position attribute of the current rendered object.
@@ -11,7 +33,11 @@ import { modelWorldMatrix } from './ModelNode.js';
11
33
  export const positionGeometry = /*@__PURE__*/ attribute( 'position', 'vec3' );
12
34
 
13
35
  /**
14
- * TSL object that represents the vertex position in local space of the current rendered object.
36
+ * TSL object that represents the transformed vertex position in local space of the current rendered object.
37
+ *
38
+ * The term "transformed" indicates that an object or material's properties, such as skinning, batch,
39
+ * instancing, or displacement mapping, will change the vertex position of the node when present.
40
+ * To use the pre-transformed local space position of the object, use {@link positionGeometry}.
15
41
  *
16
42
  * @tsl
17
43
  * @type {AttributeNode<vec3>}
@@ -61,9 +87,19 @@ export const positionWorldDirection = /*@__PURE__*/ ( Fn( () => {
61
87
  */
62
88
  export const positionView = /*@__PURE__*/ ( Fn( ( builder ) => {
63
89
 
90
+ if ( builder.shaderStage === 'fragment' && builder.material.vertexNode ) {
91
+
92
+ // reconstruct view position from clip space
93
+
94
+ const viewPos = cameraProjectionMatrixInverse.mul( clipSpace );
95
+
96
+ return viewPos.xyz.div( viewPos.w ).toVar( 'positionView' );
97
+
98
+ }
99
+
64
100
  return builder.context.setupPositionView().toVarying( 'v_positionView' );
65
101
 
66
- }, 'vec3' ).once( [ 'POSITION' ] ) )();
102
+ }, 'vec3' ).once( [ 'POSITION', 'VERTEX' ] ) )();
67
103
 
68
104
  /**
69
105
  * TSL object that represents the position view direction of the current rendered object.
@@ -4,7 +4,7 @@ import { uniform } from '../core/UniformNode.js';
4
4
  import { nodeObject } from '../tsl/TSLCore.js';
5
5
  import ArrayElementNode from '../utils/ArrayElementNode.js';
6
6
 
7
- // TODO: Avoid duplicated code and ues only ReferenceBaseNode or ReferenceNode
7
+ // TODO: Avoid duplicated code and use only ReferenceBaseNode or ReferenceNode
8
8
 
9
9
  /**
10
10
  * This class is only relevant if the referenced property is array-like.
@@ -57,7 +57,7 @@ class ReferenceElementNode extends ArrayElementNode {
57
57
  *
58
58
  * @return {string} The node type.
59
59
  */
60
- getNodeType() {
60
+ generateNodeType() {
61
61
 
62
62
  return this.referenceNode.uniformType;
63
63
 
@@ -199,7 +199,7 @@ class ReferenceBaseNode extends Node {
199
199
  */
200
200
  element( indexNode ) {
201
201
 
202
- return nodeObject( new ReferenceElementNode( this, nodeObject( indexNode ) ) );
202
+ return new ReferenceElementNode( this, nodeObject( indexNode ) );
203
203
 
204
204
  }
205
205
 
@@ -230,7 +230,7 @@ class ReferenceBaseNode extends Node {
230
230
  * @param {NodeBuilder} builder - The current node builder.
231
231
  * @return {string} The node type.
232
232
  */
233
- getNodeType( builder ) {
233
+ generateNodeType( builder ) {
234
234
 
235
235
  if ( this.node === null ) {
236
236
 
@@ -340,7 +340,7 @@ export default ReferenceBaseNode;
340
340
  * @param {Object} object - The object the property belongs to.
341
341
  * @returns {ReferenceBaseNode}
342
342
  */
343
- export const reference = ( name, type, object ) => nodeObject( new ReferenceBaseNode( name, type, object ) );
343
+ export const reference = ( name, type, object ) => new ReferenceBaseNode( name, type, object );
344
344
 
345
345
  /**
346
346
  * TSL function for creating a reference base node. Use this function if you want need a reference
@@ -354,4 +354,4 @@ export const reference = ( name, type, object ) => nodeObject( new ReferenceBase
354
354
  * @param {Object} [object] - An array-like object the property belongs to.
355
355
  * @returns {ReferenceBaseNode}
356
356
  */
357
- export const referenceBuffer = ( name, type, count, object ) => nodeObject( new ReferenceBaseNode( name, type, object, count ) );
357
+ export const referenceBuffer = ( name, type, count, object ) => new ReferenceBaseNode( name, type, object, count );
@@ -9,7 +9,7 @@ import { uniformArray } from './UniformArrayNode.js';
9
9
  import ArrayElementNode from '../utils/ArrayElementNode.js';
10
10
  import { warn } from '../../utils.js';
11
11
 
12
- // TODO: Avoid duplicated code and ues only ReferenceBaseNode or ReferenceNode
12
+ // TODO: Avoid duplicated code and use only ReferenceBaseNode or ReferenceNode
13
13
 
14
14
  /**
15
15
  * This class is only relevant if the referenced property is array-like.
@@ -62,7 +62,7 @@ class ReferenceElementNode extends ArrayElementNode {
62
62
  *
63
63
  * @return {string} The node type.
64
64
  */
65
- getNodeType() {
65
+ generateNodeType() {
66
66
 
67
67
  return this.referenceNode.uniformType;
68
68
 
@@ -71,8 +71,8 @@ class ReferenceElementNode extends ArrayElementNode {
71
71
  generate( builder ) {
72
72
 
73
73
  const snippet = super.generate( builder );
74
- const arrayType = this.referenceNode.getNodeType();
75
- const elementType = this.getNodeType();
74
+ const arrayType = this.referenceNode.getNodeType( builder );
75
+ const elementType = this.getNodeType( builder );
76
76
 
77
77
  return builder.format( snippet, arrayType, elementType );
78
78
 
@@ -198,7 +198,7 @@ class ReferenceNode extends Node {
198
198
  */
199
199
  element( indexNode ) {
200
200
 
201
- return nodeObject( new ReferenceElementNode( this, nodeObject( indexNode ) ) );
201
+ return new ReferenceElementNode( this, nodeObject( indexNode ) );
202
202
 
203
203
  }
204
204
 
@@ -262,6 +262,7 @@ class ReferenceNode extends Node {
262
262
  } else if ( Array.isArray( this.getValueFromReference() ) ) {
263
263
 
264
264
  node = uniformArray( null, uniformType );
265
+ node.updateType = NodeUpdateType.OBJECT;
265
266
 
266
267
  } else if ( uniformType === 'texture' ) {
267
268
 
@@ -296,7 +297,7 @@ class ReferenceNode extends Node {
296
297
  * @param {NodeBuilder} builder - The current node builder.
297
298
  * @return {string} The node type.
298
299
  */
299
- getNodeType( builder ) {
300
+ generateNodeType( builder ) {
300
301
 
301
302
  if ( this.node === null ) {
302
303
 
@@ -407,7 +408,7 @@ export default ReferenceNode;
407
408
  * @param {?Object} [object] - The object the property belongs to.
408
409
  * @returns {ReferenceNode}
409
410
  */
410
- export const reference = ( name, type, object ) => nodeObject( new ReferenceNode( name, type, object ) );
411
+ export const reference = ( name, type, object ) => new ReferenceNode( name, type, object );
411
412
 
412
413
  /**
413
414
  * TSL function for creating a reference node. Use this function if you want need a reference
@@ -421,4 +422,4 @@ export const reference = ( name, type, object ) => nodeObject( new ReferenceNode
421
422
  * @param {Object} object - An array-like object the property belongs to.
422
423
  * @returns {ReferenceNode}
423
424
  */
424
- export const referenceBuffer = ( name, type, count, object ) => nodeObject( new ReferenceNode( name, type, object, count ) );
425
+ export const referenceBuffer = ( name, type, count, object ) => new ReferenceNode( name, type, object, count );
@@ -1,4 +1,4 @@
1
- import { cameraViewMatrix } from './Camera.js';
1
+ import { cameraWorldMatrix } from './Camera.js';
2
2
  import { normalView } from './Normal.js';
3
3
  import { positionViewDirection } from './Position.js';
4
4
  import { materialRefractionRatio } from './MaterialProperties.js';
@@ -25,7 +25,7 @@ export const refractView = /*@__PURE__*/ positionViewDirection.negate().refract(
25
25
  * @tsl
26
26
  * @type {Node<vec3>}
27
27
  */
28
- export const reflectVector = /*@__PURE__*/ reflectView.transformDirection( cameraViewMatrix ).toVar( 'reflectVector' );
28
+ export const reflectVector = /*@__PURE__*/ reflectView.transformDirection( cameraWorldMatrix ).toVar( 'reflectVector' );
29
29
 
30
30
  /**
31
31
  * Used for sampling cube maps when using cube refraction mapping.
@@ -33,4 +33,4 @@ export const reflectVector = /*@__PURE__*/ reflectView.transformDirection( camer
33
33
  * @tsl
34
34
  * @type {Node<vec3>}
35
35
  */
36
- export const refractVector = /*@__PURE__*/ refractView.transformDirection( cameraViewMatrix ).toVar( 'reflectVector' );
36
+ export const refractVector = /*@__PURE__*/ refractView.transformDirection( cameraWorldMatrix ).toVar( 'refractVector' );
@@ -1,5 +1,4 @@
1
1
  import ReferenceBaseNode from './ReferenceBaseNode.js';
2
- import { nodeObject } from '../tsl/TSLCore.js';
3
2
  import { renderGroup } from '../core/UniformGroupNode.js';
4
3
 
5
4
  /**
@@ -76,4 +75,4 @@ export default RendererReferenceNode;
76
75
  * the node refers to the renderer of the current state.
77
76
  * @returns {RendererReferenceNode}
78
77
  */
79
- export const rendererReference = ( name, type, renderer = null ) => nodeObject( new RendererReferenceNode( name, type, renderer ) );
78
+ export const rendererReference = ( name, type, renderer = null ) => new RendererReferenceNode( name, type, renderer );
@@ -0,0 +1,47 @@
1
+ import { UVMapping } from '../../constants.js';
2
+ import { Matrix4 } from '../../math/Matrix4.js';
3
+ import { renderGroup } from '../core/UniformGroupNode.js';
4
+ import { uniform } from '../tsl/TSLBase.js';
5
+
6
+ const _m1 = /*@__PURE__*/ new Matrix4();
7
+
8
+ /**
9
+ * TSL object that represents the scene's background blurriness.
10
+ *
11
+ * @tsl
12
+ * @type {Node<float>}
13
+ */
14
+ export const backgroundBlurriness = /*@__PURE__*/ uniform( 0 ).setGroup( renderGroup ).onRenderUpdate( ( { scene } ) => scene.backgroundBlurriness );
15
+
16
+ /**
17
+ * TSL object that represents the scene's background intensity.
18
+ *
19
+ * @tsl
20
+ * @type {Node<float>}
21
+ */
22
+ export const backgroundIntensity = /*@__PURE__*/ uniform( 1 ).setGroup( renderGroup ).onRenderUpdate( ( { scene } ) => scene.backgroundIntensity );
23
+
24
+ /**
25
+ * TSL object that represents the scene's background rotation.
26
+ *
27
+ * @tsl
28
+ * @type {Node<mat4>}
29
+ */
30
+ export const backgroundRotation = /*@__PURE__*/ uniform( new Matrix4() ).setGroup( renderGroup ).onRenderUpdate( ( { scene } ) => {
31
+
32
+ const background = scene.background;
33
+
34
+ if ( ( background !== null && background.isTexture && background.mapping !== UVMapping ) || ( scene.backgroundNode && scene.backgroundNode.isNode ) ) {
35
+
36
+ // note: since the matrix is orthonormal, we can use the more-efficient transpose() in lieu of invert()
37
+ _m1.makeRotationFromEuler( scene.backgroundRotation ).transpose();
38
+
39
+ } else {
40
+
41
+ _m1.identity();
42
+
43
+ }
44
+
45
+ return _m1;
46
+
47
+ } );
@@ -0,0 +1,263 @@
1
+
2
+ import { Fn, add, uniform } from '../tsl/TSLBase.js';
3
+ import { attribute } from '../core/AttributeNode.js';
4
+ import { OnObjectUpdate } from '../utils/EventNode.js';
5
+ import { normalLocal } from './Normal.js';
6
+ import { positionLocal, positionPrevious } from './Position.js';
7
+ import { tangentLocal } from './Tangent.js';
8
+ import { reference, referenceBuffer } from './ReferenceNode.js';
9
+ import { buffer } from './BufferNode.js';
10
+ import { storage } from './StorageBufferNode.js';
11
+ import { instanceIndex } from '../core/IndexNode.js';
12
+
13
+ import { InstancedBufferAttribute } from '../../core/InstancedBufferAttribute.js';
14
+
15
+ const _skeletonsUpdated = /*@__PURE__*/ new WeakMap();
16
+ const _previousBoneMatricesData = /*@__PURE__*/ new WeakMap();
17
+
18
+ /**
19
+ * Computes the skinned position by applying bone matrices based on weights.
20
+ *
21
+ * @param {Node} boneMatrices - The bone matrices buffer or storage node.
22
+ * @param {Node<vec3>} position - The vertex position to transform.
23
+ * @param {Node<mat4>} bindMatrix - The bind matrix node.
24
+ * @param {Node<mat4>} bindMatrixInverse - The inverse bind matrix node.
25
+ * @param {Node<uvec4>} skinIndex - The skin index attribute.
26
+ * @param {Node<vec4>} skinWeight - The skin weight attribute.
27
+ * @returns {Node<vec3>} The skinned position.
28
+ */
29
+ function getSkinnedPosition( boneMatrices, position, bindMatrix, bindMatrixInverse, skinIndex, skinWeight ) {
30
+
31
+ const boneMatX = boneMatrices.element( skinIndex.x );
32
+ const boneMatY = boneMatrices.element( skinIndex.y );
33
+ const boneMatZ = boneMatrices.element( skinIndex.z );
34
+ const boneMatW = boneMatrices.element( skinIndex.w );
35
+
36
+ // POSITION
37
+
38
+ const skinVertex = bindMatrix.mul( position );
39
+
40
+ const skinned = add(
41
+ boneMatX.mul( skinWeight.x ).mul( skinVertex ),
42
+ boneMatY.mul( skinWeight.y ).mul( skinVertex ),
43
+ boneMatZ.mul( skinWeight.z ).mul( skinVertex ),
44
+ boneMatW.mul( skinWeight.w ).mul( skinVertex )
45
+ );
46
+
47
+ return bindMatrixInverse.mul( skinned ).xyz;
48
+
49
+ }
50
+
51
+ /**
52
+ * Computes the skinned normal and tangent vectors by applying bone matrices based on weights.
53
+ *
54
+ * @param {Node} boneMatrices - The bone matrices buffer or storage node.
55
+ * @param {Node<vec3>} normal - The normal vector in local space.
56
+ * @param {Node<vec3>} tangent - The tangent vector in local space.
57
+ * @param {Node<mat4>} bindMatrix - The bind matrix node.
58
+ * @param {Node<mat4>} bindMatrixInverse - The inverse bind matrix node.
59
+ * @param {Node<uvec4>} skinIndex - The skin index attribute.
60
+ * @param {Node<vec4>} skinWeight - The skin weight attribute.
61
+ * @returns {{skinNormal: Node<vec3>, skinTangent: Node<vec3>}} The skinned normal and tangent.
62
+ */
63
+ function getSkinnedNormalAndTangent( boneMatrices, normal, tangent, bindMatrix, bindMatrixInverse, skinIndex, skinWeight ) {
64
+
65
+ const boneMatX = boneMatrices.element( skinIndex.x );
66
+ const boneMatY = boneMatrices.element( skinIndex.y );
67
+ const boneMatZ = boneMatrices.element( skinIndex.z );
68
+ const boneMatW = boneMatrices.element( skinIndex.w );
69
+
70
+ // NORMAL and TANGENT
71
+
72
+ let skinMatrix = add(
73
+ skinWeight.x.mul( boneMatX ),
74
+ skinWeight.y.mul( boneMatY ),
75
+ skinWeight.z.mul( boneMatZ ),
76
+ skinWeight.w.mul( boneMatW )
77
+ );
78
+
79
+ skinMatrix = bindMatrixInverse.mul( skinMatrix ).mul( bindMatrix );
80
+
81
+ const skinNormal = skinMatrix.transformDirection( normal ).xyz;
82
+ const skinTangent = skinMatrix.transformDirection( tangent ).xyz;
83
+
84
+ return { skinNormal, skinTangent };
85
+
86
+ }
87
+
88
+ /**
89
+ * Retrieves or initializes the previous frame skinned position node for motion vectors.
90
+ * Uses a WeakMap to cache previous frame bone matrix arrays and their TSL buffer nodes.
91
+ *
92
+ * @param {SkinnedMesh} skinnedMesh - The skinned mesh.
93
+ * @param {Node<mat4>} bindMatrixNode - The bind matrix node.
94
+ * @param {Node<mat4>} bindMatrixInverseNode - The inverse bind matrix node.
95
+ * @param {Node<uvec4>} skinIndexNode - The skin index attribute.
96
+ * @param {Node<vec4>} skinWeightNode - The skin weight attribute.
97
+ * @returns {Node<vec3>} The skinned position from the previous frame.
98
+ */
99
+ function getPreviousSkinnedPosition( skinnedMesh, bindMatrixNode, bindMatrixInverseNode, skinIndexNode, skinWeightNode ) {
100
+
101
+ const skeleton = skinnedMesh.skeleton;
102
+
103
+ let data = _previousBoneMatricesData.get( skeleton );
104
+
105
+ if ( data === undefined ) {
106
+
107
+ skeleton.update();
108
+
109
+ const previousBoneMatrices = new Float32Array( skeleton.boneMatrices );
110
+
111
+ data = {
112
+ previousBoneMatrices,
113
+ node: buffer( previousBoneMatrices, 'mat4', skeleton.bones.length )
114
+ };
115
+
116
+ _previousBoneMatricesData.set( skeleton, data );
117
+
118
+ }
119
+
120
+ return getSkinnedPosition( data.node, positionPrevious, bindMatrixNode, bindMatrixInverseNode, skinIndexNode, skinWeightNode );
121
+
122
+ }
123
+
124
+ /**
125
+ * TSL function representing the standard skeletal animation vertex shader setup.
126
+ * Transforms positionLocal, normalLocal, and tangentLocal in-place.
127
+ *
128
+ * @tsl
129
+ * @function
130
+ * @param {SkinnedMesh} skinnedMesh - The skinned mesh.
131
+ */
132
+ export const skinning = /*@__PURE__*/ Fn( ( [ skinnedMesh ], builder ) => {
133
+
134
+ const skinIndexNode = attribute( 'skinIndex', 'uvec4' );
135
+ const skinWeightNode = attribute( 'skinWeight', 'vec4' );
136
+ const bindMatrixNode = reference( 'bindMatrix', 'mat4' );
137
+ const bindMatrixInverseNode = reference( 'bindMatrixInverse', 'mat4' );
138
+ const boneMatricesNode = referenceBuffer( 'skeleton.boneMatrices', 'mat4', skinnedMesh.skeleton.bones.length );
139
+
140
+ OnObjectUpdate( ( { object, frameId } ) => {
141
+
142
+ const skeleton = object.skeleton;
143
+
144
+ if ( _skeletonsUpdated.get( skeleton ) !== frameId ) {
145
+
146
+ _skeletonsUpdated.set( skeleton, frameId );
147
+
148
+ const skeletonData = _previousBoneMatricesData.get( skeleton );
149
+
150
+ if ( skeletonData !== undefined ) {
151
+
152
+ skeletonData.previousBoneMatrices.set( skeleton.boneMatrices );
153
+
154
+ }
155
+
156
+ skeleton.update();
157
+
158
+ }
159
+
160
+ } );
161
+
162
+ if ( builder.needsPreviousData() ) {
163
+
164
+ const previousSkinnedPosition = getPreviousSkinnedPosition( skinnedMesh, bindMatrixNode, bindMatrixInverseNode, skinIndexNode, skinWeightNode );
165
+
166
+ positionPrevious.assign( previousSkinnedPosition );
167
+
168
+ }
169
+
170
+ const skinPosition = getSkinnedPosition( boneMatricesNode, positionLocal, bindMatrixNode, bindMatrixInverseNode, skinIndexNode, skinWeightNode );
171
+ positionLocal.assign( skinPosition );
172
+
173
+ if ( builder.hasGeometryAttribute( 'normal' ) ) {
174
+
175
+ const { skinNormal, skinTangent } = getSkinnedNormalAndTangent( boneMatricesNode, normalLocal, tangentLocal, bindMatrixNode, bindMatrixInverseNode, skinIndexNode, skinWeightNode );
176
+
177
+ normalLocal.assign( skinNormal );
178
+
179
+ if ( builder.hasGeometryAttribute( 'tangent' ) ) {
180
+
181
+ tangentLocal.assign( skinTangent );
182
+
183
+ }
184
+
185
+ }
186
+
187
+ }, 'void' );
188
+
189
+ /**
190
+ * TSL function that computes skeletal animation for custom compute passes.
191
+ *
192
+ * @tsl
193
+ * @function
194
+ * @param {SkinnedMesh} skinnedMesh - The skinned mesh.
195
+ * @param {Node<vec3>} [toPosition=null] - The target position node to assign.
196
+ * @returns {Node<vec3>} The computed skinned position node.
197
+ */
198
+ export const computeSkinning = /*@__PURE__*/ Fn( ( [ skinnedMesh, toPosition = null ], builder ) => {
199
+
200
+ const positionNode = storage( new InstancedBufferAttribute( skinnedMesh.geometry.getAttribute( 'position' ).array, 3 ), 'vec3' ).setPBO( true ).toReadOnly().element( instanceIndex ).toVar();
201
+ const skinIndexNode = storage( new InstancedBufferAttribute( new Uint32Array( skinnedMesh.geometry.getAttribute( 'skinIndex' ).array ), 4 ), 'uvec4' ).setPBO( true ).toReadOnly().element( instanceIndex ).toVar();
202
+ const skinWeightNode = storage( new InstancedBufferAttribute( skinnedMesh.geometry.getAttribute( 'skinWeight' ).array, 4 ), 'vec4' ).setPBO( true ).toReadOnly().element( instanceIndex ).toVar();
203
+ const bindMatrixNode = uniform( skinnedMesh.bindMatrix, 'mat4' );
204
+ const bindMatrixInverseNode = uniform( skinnedMesh.bindMatrixInverse, 'mat4' );
205
+ const boneMatricesNode = buffer( skinnedMesh.skeleton.boneMatrices, 'mat4', skinnedMesh.skeleton.bones.length );
206
+
207
+ const skeleton = skinnedMesh.skeleton;
208
+
209
+ OnObjectUpdate( ( { frameId } ) => {
210
+
211
+ if ( _skeletonsUpdated.get( skeleton ) !== frameId ) {
212
+
213
+ _skeletonsUpdated.set( skeleton, frameId );
214
+
215
+ const state = _previousBoneMatricesData.get( skeleton );
216
+
217
+ if ( state !== undefined ) {
218
+
219
+ state.previousBoneMatrices.set( skeleton.boneMatrices );
220
+
221
+ }
222
+
223
+ skeleton.update();
224
+
225
+ }
226
+
227
+ } );
228
+
229
+ if ( builder.needsPreviousData() ) {
230
+
231
+ const previousSkinnedPosition = getPreviousSkinnedPosition( skinnedMesh, bindMatrixNode, bindMatrixInverseNode, skinIndexNode, skinWeightNode );
232
+
233
+ positionPrevious.assign( previousSkinnedPosition );
234
+
235
+ }
236
+
237
+ const skinPosition = getSkinnedPosition( boneMatricesNode, positionNode, bindMatrixNode, bindMatrixInverseNode, skinIndexNode, skinWeightNode );
238
+
239
+ if ( toPosition !== null ) {
240
+
241
+ toPosition.assign( skinPosition );
242
+
243
+ }
244
+
245
+ if ( builder.hasGeometryAttribute( 'normal' ) ) {
246
+
247
+ const { skinNormal, skinTangent } = getSkinnedNormalAndTangent( boneMatricesNode, normalLocal, tangentLocal, bindMatrixNode, bindMatrixInverseNode, skinIndexNode, skinWeightNode );
248
+
249
+ normalLocal.assign( skinNormal );
250
+
251
+ if ( builder.hasGeometryAttribute( 'tangent' ) ) {
252
+
253
+ tangentLocal.assign( skinTangent );
254
+
255
+ }
256
+
257
+ }
258
+
259
+ return skinPosition;
260
+
261
+ } );
262
+
263
+