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
@@ -8,7 +8,7 @@ import ParameterNode from './ParameterNode.js';
8
8
  import StructType from './StructType.js';
9
9
  import FunctionNode from '../code/FunctionNode.js';
10
10
  import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
11
- import { getTypeFromLength } from './NodeUtils.js';
11
+ import { getDataFromObject, getTypeFromLength, hashString } from './NodeUtils.js';
12
12
  import { NodeUpdateType, defaultBuildStages, shaderStages } from './constants.js';
13
13
 
14
14
  import {
@@ -20,22 +20,24 @@ import { stack } from './StackNode.js';
20
20
  import { getCurrentStack, setCurrentStack } from '../tsl/TSLBase.js';
21
21
 
22
22
  import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js';
23
- import ChainMap from '../../renderers/common/ChainMap.js';
24
23
 
25
24
  import BindGroup from '../../renderers/common/BindGroup.js';
26
25
 
27
- import { REVISION, IntType, UnsignedIntType, LinearFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter, NormalBlending } from '../../constants.js';
26
+ import { REVISION, IntType, UnsignedIntType, LinearFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter, NormalBlending, RedFormat, RGFormat, RGBFormat, RedIntegerFormat, RGIntegerFormat, RGBIntegerFormat } from '../../constants.js';
28
27
  import { RenderTarget } from '../../core/RenderTarget.js';
29
28
  import { Color } from '../../math/Color.js';
30
29
  import { Vector2 } from '../../math/Vector2.js';
31
30
  import { Vector3 } from '../../math/Vector3.js';
32
31
  import { Vector4 } from '../../math/Vector4.js';
33
32
  import { Float16BufferAttribute } from '../../core/BufferAttribute.js';
34
- import { warn, error } from '../../utils.js';
33
+ import { warn, error, yieldToMain } from '../../utils.js';
35
34
 
36
35
  let _id = 0;
37
36
 
38
- const rendererCache = new WeakMap();
37
+ const _bindingGroupsCache = new WeakMap();
38
+ const _functionNodeCache = new WeakMap();
39
+
40
+ const sharedNodeData = new WeakMap();
39
41
 
40
42
  const typeFromArray = new Map( [
41
43
  [ Int8Array, 'int' ],
@@ -47,7 +49,7 @@ const typeFromArray = new Map( [
47
49
  [ Float32Array, 'float' ]
48
50
  ] );
49
51
 
50
- const toFloat = ( value ) => {
52
+ const _toFloat = ( value ) => {
51
53
 
52
54
  if ( /e/g.test( value ) ) {
53
55
 
@@ -63,6 +65,28 @@ const toFloat = ( value ) => {
63
65
 
64
66
  };
65
67
 
68
+ const _checkWriteUsage = ( data ) => {
69
+
70
+ if ( data.writeUsageCount > 0 ) return true;
71
+
72
+ if ( data.subBuildsCache !== undefined ) {
73
+
74
+ for ( const subBuild in data.subBuildsCache ) {
75
+
76
+ if ( _checkWriteUsage( data.subBuildsCache[ subBuild ] ) ) {
77
+
78
+ return true;
79
+
80
+ }
81
+
82
+ }
83
+
84
+ }
85
+
86
+ return false;
87
+
88
+ };
89
+
66
90
  /**
67
91
  * Base class for builders which generate a shader program based
68
92
  * on a 3D object and its node material definition.
@@ -133,16 +157,19 @@ class NodeBuilder {
133
157
  * A list of all nodes the builder is processing
134
158
  * for this 3D object.
135
159
  *
136
- * @type {Array<Node>}
160
+ * @type {Set<Node>}
137
161
  */
138
- this.nodes = [];
162
+ this.nodes = new Set();
139
163
 
140
164
  /**
141
- * A list of all sequential nodes.
165
+ * A list of all nodes the builder is processing in sequential order.
142
166
  *
143
- * @type {Array<Node>}
167
+ * This is used to determine the update order of nodes, which is important for
168
+ * {@link NodeUpdateType#UPDATE_BEFORE} and {@link NodeUpdateType#UPDATE_AFTER}.
169
+ *
170
+ * @type {Set<Node>}
144
171
  */
145
- this.sequentialNodes = [];
172
+ this.sequentialNodes = new Set();
146
173
 
147
174
  /**
148
175
  * A list of all nodes which {@link Node#update} method should be executed.
@@ -211,6 +238,14 @@ class NodeBuilder {
211
238
  */
212
239
  this.clippingContext = null;
213
240
 
241
+ /**
242
+ * Whether the built material uses hardware clipping or not.
243
+ *
244
+ * @type {boolean}
245
+ * @default false
246
+ */
247
+ this.hardwareClipping = false;
248
+
214
249
  /**
215
250
  * The generated vertex shader.
216
251
  *
@@ -466,36 +501,26 @@ class NodeBuilder {
466
501
  }
467
502
 
468
503
  /**
469
- * Whether the material is opaque or not.
504
+ * Whether the material is using flat shading or not.
470
505
  *
471
- * @return {boolean} Whether the material is opaque or not.
506
+ * @returns {boolean} Whether the material is using flat shading or not.
472
507
  */
473
- isOpaque() {
474
-
475
- const material = this.material;
508
+ isFlatShading() {
476
509
 
477
- return material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false;
510
+ return this.material.flatShading === true || this.geometry.hasAttribute( 'normal' ) === false;
478
511
 
479
512
  }
480
513
 
481
514
  /**
482
- * Returns the bind groups of the current renderer.
515
+ * Whether the material is opaque or not.
483
516
  *
484
- * @return {ChainMap} The cache.
517
+ * @return {boolean} Whether the material is opaque or not.
485
518
  */
486
- getBindGroupsCache() {
487
-
488
- let bindGroupsCache = rendererCache.get( this.renderer );
489
-
490
- if ( bindGroupsCache === undefined ) {
491
-
492
- bindGroupsCache = new ChainMap();
493
-
494
- rendererCache.set( this.renderer, bindGroupsCache );
519
+ isOpaque() {
495
520
 
496
- }
521
+ const material = this.material;
497
522
 
498
- return bindGroupsCache;
523
+ return material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false;
499
524
 
500
525
  }
501
526
 
@@ -536,7 +561,62 @@ class NodeBuilder {
536
561
  */
537
562
  includes( node ) {
538
563
 
539
- return this.nodes.includes( node );
564
+ return this.nodes.has( node );
565
+
566
+ }
567
+
568
+ /**
569
+ * Returns the type of the color output based on the renderer's render target.
570
+ *
571
+ * @param {number} [index=0] - The index of the render target texture.
572
+ * @return {string} The type.
573
+ */
574
+ getOutputType( index = 0 ) {
575
+
576
+ let type = 'vec4';
577
+
578
+ const renderTarget = this.renderer.getRenderTarget();
579
+
580
+ if ( renderTarget !== null ) {
581
+
582
+ const renderTargetType = renderTarget.textures[ index ].type;
583
+ const renderTargetFormat = renderTarget.textures[ index ].format;
584
+
585
+ let typeStr = 'vec';
586
+
587
+ if ( renderTargetType === IntType ) {
588
+
589
+ typeStr = 'ivec';
590
+
591
+ } else if ( renderTargetType === UnsignedIntType ) {
592
+
593
+ typeStr = 'uvec';
594
+
595
+ }
596
+
597
+ if ( renderTargetFormat === RedFormat || renderTargetFormat === RedIntegerFormat ) {
598
+
599
+ if ( renderTargetType === IntType ) type = 'int';
600
+ else if ( renderTargetType === UnsignedIntType ) type = 'uint';
601
+ else type = 'float';
602
+
603
+ } else if ( renderTargetFormat === RGFormat || renderTargetFormat === RGIntegerFormat ) {
604
+
605
+ type = `${ typeStr }2`;
606
+
607
+ } else if ( renderTargetFormat === RGBFormat || renderTargetFormat === RGBIntegerFormat ) {
608
+
609
+ type = `${ typeStr }3`;
610
+
611
+ } else {
612
+
613
+ type = `${ typeStr }4`;
614
+
615
+ }
616
+
617
+ }
618
+
619
+ return type;
540
620
 
541
621
  }
542
622
 
@@ -559,19 +639,21 @@ class NodeBuilder {
559
639
  */
560
640
  _getBindGroup( groupName, bindings ) {
561
641
 
562
- const bindGroupsCache = this.getBindGroupsCache();
642
+ const groupNode = bindings[ 0 ].groupNode;
563
643
 
564
- //
644
+ let sharedGroup = groupNode.shared;
645
+
646
+ if ( sharedGroup ) {
565
647
 
566
- const bindingsArray = [];
648
+ for ( let i = 1; i < bindings.length; i ++ ) {
567
649
 
568
- let sharedGroup = true;
650
+ if ( groupNode !== bindings[ i ].groupNode ) {
569
651
 
570
- for ( const binding of bindings ) {
652
+ sharedGroup = false;
571
653
 
572
- bindingsArray.push( binding );
654
+ }
573
655
 
574
- sharedGroup = sharedGroup && binding.groupNode.shared !== true;
656
+ }
575
657
 
576
658
  }
577
659
 
@@ -581,19 +663,59 @@ class NodeBuilder {
581
663
 
582
664
  if ( sharedGroup ) {
583
665
 
584
- bindGroup = bindGroupsCache.get( bindingsArray );
666
+ let cacheKeyString = '';
667
+
668
+ for ( const binding of bindings ) {
669
+
670
+ if ( binding.isNodeUniformsGroup ) {
671
+
672
+ binding.uniforms.sort( ( a, b ) => a.nodeUniform.node.id - b.nodeUniform.node.id );
673
+
674
+ for ( const uniform of binding.uniforms ) {
675
+
676
+ cacheKeyString += uniform.nodeUniform.node.id;
677
+
678
+ }
679
+
680
+ } else {
681
+
682
+ cacheKeyString += binding.nodeUniform.id;
683
+
684
+ }
685
+
686
+ }
687
+
688
+ // TODO: Remove this hack ._currentRenderContext
689
+
690
+ const currentContext = this.renderer._currentRenderContext || this.renderer; // use renderer as fallback until we have a compute context
691
+
692
+ let bindingGroupsCache = _bindingGroupsCache.get( currentContext );
693
+
694
+ if ( bindingGroupsCache === undefined ) {
695
+
696
+ bindingGroupsCache = new Map();
697
+
698
+ _bindingGroupsCache.set( currentContext, bindingGroupsCache );
699
+
700
+ }
701
+
702
+ //
703
+
704
+ const cacheKey = hashString( cacheKeyString );
705
+
706
+ bindGroup = bindingGroupsCache.get( cacheKey );
585
707
 
586
708
  if ( bindGroup === undefined ) {
587
709
 
588
- bindGroup = new BindGroup( groupName, bindingsArray, this.bindingsIndexes[ groupName ].group, bindingsArray );
710
+ bindGroup = new BindGroup( groupName, bindings );
589
711
 
590
- bindGroupsCache.set( bindingsArray, bindGroup );
712
+ bindingGroupsCache.set( cacheKey, bindGroup );
591
713
 
592
714
  }
593
715
 
594
716
  } else {
595
717
 
596
- bindGroup = new BindGroup( groupName, bindingsArray, this.bindingsIndexes[ groupName ].group, bindingsArray );
718
+ bindGroup = new BindGroup( groupName, bindings );
597
719
 
598
720
  }
599
721
 
@@ -651,7 +773,16 @@ class NodeBuilder {
651
773
  const uniforms = bindings[ shaderStage ][ groupName ];
652
774
 
653
775
  const groupUniforms = groups[ groupName ] || ( groups[ groupName ] = [] );
654
- groupUniforms.push( ...uniforms );
776
+
777
+ for ( const uniform of uniforms ) {
778
+
779
+ if ( groupUniforms.includes( uniform ) === false ) {
780
+
781
+ groupUniforms.push( uniform );
782
+
783
+ }
784
+
785
+ }
655
786
 
656
787
  }
657
788
 
@@ -691,8 +822,6 @@ class NodeBuilder {
691
822
  const bindingGroup = bindingsGroups[ i ];
692
823
  this.bindingsIndexes[ bindingGroup.name ].group = i;
693
824
 
694
- bindingGroup.index = i;
695
-
696
825
  }
697
826
 
698
827
  }
@@ -717,9 +846,9 @@ class NodeBuilder {
717
846
  */
718
847
  addNode( node ) {
719
848
 
720
- if ( this.nodes.includes( node ) === false ) {
849
+ if ( this.nodes.has( node ) === false ) {
721
850
 
722
- this.nodes.push( node );
851
+ this.nodes.add( node );
723
852
 
724
853
  this.setHashNode( node, node.getHash( this ) );
725
854
 
@@ -736,9 +865,12 @@ class NodeBuilder {
736
865
  */
737
866
  addSequentialNode( node ) {
738
867
 
739
- if ( this.sequentialNodes.includes( node ) === false ) {
868
+ const updateBeforeType = node.getUpdateBeforeType();
869
+ const updateAfterType = node.getUpdateAfterType();
740
870
 
741
- this.sequentialNodes.push( node );
871
+ if ( updateBeforeType !== NodeUpdateType.NONE || updateAfterType !== NodeUpdateType.NONE ) {
872
+
873
+ this.sequentialNodes.add( node );
742
874
 
743
875
  }
744
876
 
@@ -807,6 +939,17 @@ class NodeBuilder {
807
939
 
808
940
  }
809
941
 
942
+ /**
943
+ * Returns the maximum number of bytes available for uniform buffers.
944
+ *
945
+ * @return {number} The maximum number of bytes available for uniform buffers.
946
+ */
947
+ getUniformBufferLimit() {
948
+
949
+ return this.renderer.backend.capabilities.getUniformBufferLimit();
950
+
951
+ }
952
+
810
953
  /**
811
954
  * Adds the given node to the internal node chain.
812
955
  * This is used to check recursive calls in node-graph.
@@ -838,7 +981,7 @@ class NodeBuilder {
838
981
 
839
982
  if ( lastChain !== node ) {
840
983
 
841
- throw new Error( 'NodeBuilder: Invalid node chaining!' );
984
+ throw new Error( 'THREE.NodeBuilder: Invalid node chaining!' );
842
985
 
843
986
  }
844
987
 
@@ -951,8 +1094,13 @@ class NodeBuilder {
951
1094
  const context = { ...this.context };
952
1095
 
953
1096
  delete context.material;
1097
+ delete context.getUV;
1098
+ delete context.getOutput;
1099
+ delete context.getTextureLevel;
1100
+ delete context.getAO;
1101
+ delete context.getShadow;
954
1102
 
955
- return this.context;
1103
+ return context;
956
1104
 
957
1105
  }
958
1106
 
@@ -1082,6 +1230,17 @@ class NodeBuilder {
1082
1230
 
1083
1231
  }
1084
1232
 
1233
+ /**
1234
+ * Returns whether the builder is currently in an assignment context.
1235
+ *
1236
+ * @return {boolean} Whether the builder is in an assignment context.
1237
+ */
1238
+ isContextAssign() {
1239
+
1240
+ return this.context.assign === true;
1241
+
1242
+ }
1243
+
1085
1244
  /**
1086
1245
  * Calling this method increases the usage count for the given node by one.
1087
1246
  *
@@ -1093,10 +1252,50 @@ class NodeBuilder {
1093
1252
  const nodeData = this.getDataFromNode( node );
1094
1253
  nodeData.usageCount = nodeData.usageCount === undefined ? 1 : nodeData.usageCount + 1;
1095
1254
 
1255
+ if ( this.isContextAssign() ) {
1256
+
1257
+ nodeData.writeUsageCount = nodeData.writeUsageCount === undefined ? 1 : nodeData.writeUsageCount + 1;
1258
+
1259
+ } else {
1260
+
1261
+ nodeData.readUsageCount = nodeData.readUsageCount === undefined ? 1 : nodeData.readUsageCount + 1;
1262
+
1263
+ }
1264
+
1096
1265
  return nodeData.usageCount;
1097
1266
 
1098
1267
  }
1099
1268
 
1269
+ /**
1270
+ * Returns whether the given node has been written to in any shader stage.
1271
+ *
1272
+ * @param {Node} node - The node to check.
1273
+ * @return {boolean} Whether the node has been written to.
1274
+ */
1275
+ hasWriteUsage( node ) {
1276
+
1277
+ const refNode = node.getShared( this );
1278
+ const cache = refNode.isGlobal( this ) ? this.globalCache : this.cache;
1279
+ const nodeData = cache.getData( refNode );
1280
+
1281
+ if ( nodeData !== undefined ) {
1282
+
1283
+ for ( const shaderStage in nodeData ) {
1284
+
1285
+ if ( _checkWriteUsage( nodeData[ shaderStage ] ) ) {
1286
+
1287
+ return true;
1288
+
1289
+ }
1290
+
1291
+ }
1292
+
1293
+ }
1294
+
1295
+ return false;
1296
+
1297
+ }
1298
+
1100
1299
  /**
1101
1300
  * Generates a texture sample shader string for the given texture data.
1102
1301
  *
@@ -1224,17 +1423,17 @@ class NodeBuilder {
1224
1423
  if ( type === 'float' || type === 'int' || type === 'uint' ) value = 0;
1225
1424
  else if ( type === 'bool' ) value = false;
1226
1425
  else if ( type === 'color' ) value = new Color();
1227
- else if ( type === 'vec2' ) value = new Vector2();
1228
- else if ( type === 'vec3' ) value = new Vector3();
1229
- else if ( type === 'vec4' ) value = new Vector4();
1426
+ else if ( type === 'vec2' || type === 'uvec2' || type === 'ivec2' ) value = new Vector2();
1427
+ else if ( type === 'vec3' || type === 'uvec3' || type === 'ivec3' ) value = new Vector3();
1428
+ else if ( type === 'vec4' || type === 'uvec4' || type === 'ivec4' ) value = new Vector4();
1230
1429
 
1231
1430
  }
1232
1431
 
1233
- if ( type === 'float' ) return toFloat( value );
1432
+ if ( type === 'float' ) return _toFloat( value );
1234
1433
  if ( type === 'int' ) return `${ Math.round( value ) }`;
1235
1434
  if ( type === 'uint' ) return value >= 0 ? `${ Math.round( value ) }u` : '0u';
1236
1435
  if ( type === 'bool' ) return value ? 'true' : 'false';
1237
- if ( type === 'color' ) return `${ this.getType( 'vec3' ) }( ${ toFloat( value.r ) }, ${ toFloat( value.g ) }, ${ toFloat( value.b ) } )`;
1436
+ if ( type === 'color' ) return `${ this.getType( 'vec3' ) }( ${ _toFloat( value.r ) }, ${ _toFloat( value.g ) }, ${ _toFloat( value.b ) } )`;
1238
1437
 
1239
1438
  const typeLength = this.getTypeLength( type );
1240
1439
 
@@ -1264,7 +1463,7 @@ class NodeBuilder {
1264
1463
 
1265
1464
  }
1266
1465
 
1267
- throw new Error( `NodeBuilder: Type '${type}' not found in generate constant attempt.` );
1466
+ throw new Error( `THREE.NodeBuilder: Type '${type}' not found in generate constant attempt.` );
1268
1467
 
1269
1468
  }
1270
1469
 
@@ -1402,12 +1601,10 @@ class NodeBuilder {
1402
1601
 
1403
1602
  const type = texture.type;
1404
1603
 
1405
- if ( texture.isDataTexture ) {
1604
+ if ( texture.isDepthTexture === true ) return 'float';
1406
1605
 
1407
- if ( type === IntType ) return 'int';
1408
- if ( type === UnsignedIntType ) return 'uint';
1409
-
1410
- }
1606
+ if ( type === IntType ) return 'int';
1607
+ if ( type === UnsignedIntType ) return 'uint';
1411
1608
 
1412
1609
  return 'float';
1413
1610
 
@@ -1633,7 +1830,7 @@ class NodeBuilder {
1633
1830
 
1634
1831
  } else {
1635
1832
 
1636
- throw new Error( 'NodeBuilder: Invalid active stack removal.' );
1833
+ throw new Error( 'THREE.NodeBuilder: Invalid active stack removal.' );
1637
1834
 
1638
1835
  }
1639
1836
 
@@ -1732,6 +1929,8 @@ class NodeBuilder {
1732
1929
 
1733
1930
  let data = nodeData[ shaderStage ];
1734
1931
 
1932
+ if ( this.subBuildLayers.length === 0 ) return data;
1933
+
1735
1934
  const subBuilds = nodeData.any ? nodeData.any.subBuilds : null;
1736
1935
  const subBuild = this.getClosestSubBuild( subBuilds );
1737
1936
 
@@ -1773,11 +1972,12 @@ class NodeBuilder {
1773
1972
  *
1774
1973
  * @param {BufferAttributeNode} node - The buffer attribute node.
1775
1974
  * @param {string} type - The node type.
1975
+ * @param {?string} [name=null] - The name of the buffer attribute.
1776
1976
  * @return {NodeAttribute} The node attribute.
1777
1977
  */
1778
- getBufferAttributeFromNode( node, type ) {
1978
+ getBufferAttributeFromNode( node, type, name = null ) {
1779
1979
 
1780
- const nodeData = this.getDataFromNode( node );
1980
+ const nodeData = this.getDataFromNode( node, 'vertex' );
1781
1981
 
1782
1982
  let bufferAttribute = nodeData.bufferAttribute;
1783
1983
 
@@ -1785,7 +1985,13 @@ class NodeBuilder {
1785
1985
 
1786
1986
  const index = this.uniforms.index ++;
1787
1987
 
1788
- bufferAttribute = new NodeAttribute( 'nodeAttribute' + index, type, node );
1988
+ if ( name === null ) {
1989
+
1990
+ name = 'nodeAttribute' + index;
1991
+
1992
+ }
1993
+
1994
+ bufferAttribute = new NodeAttribute( name, type, node );
1789
1995
 
1790
1996
  this.bufferAttributes.push( bufferAttribute );
1791
1997
 
@@ -2062,28 +2268,29 @@ class NodeBuilder {
2062
2268
  const shaderStage = this.shaderStage;
2063
2269
  const declarations = this.declarations[ shaderStage ] || ( this.declarations[ shaderStage ] = {} );
2064
2270
 
2065
- const property = this.getPropertyName( node );
2271
+ const baseName = node.name;
2066
2272
 
2273
+ let name = baseName;
2274
+ let property = this.getPropertyName( node );
2067
2275
  let index = 1;
2068
- let name = property;
2069
2276
 
2070
2277
  // Automatically renames the property if the name is already in use.
2071
2278
 
2072
- while ( declarations[ name ] !== undefined ) {
2279
+ while ( declarations[ property ] !== undefined ) {
2073
2280
 
2074
- name = property + '_' + index ++;
2281
+ name = baseName + '_' + index ++;
2282
+ node.name = name;
2283
+ property = this.getPropertyName( node );
2075
2284
 
2076
2285
  }
2077
2286
 
2078
- if ( index > 1 ) {
2079
-
2080
- node.name = name;
2287
+ if ( name !== baseName ) {
2081
2288
 
2082
- warn( `TSL: Declaration name '${ property }' of '${ node.type }' already in use. Renamed to '${ name }'.` );
2289
+ warn( `TSL: Declaration name '${ baseName }' of '${ node.type }' already in use. Renamed to '${ name }'.` );
2083
2290
 
2084
2291
  }
2085
2292
 
2086
- declarations[ name ] = node;
2293
+ declarations[ property ] = node;
2087
2294
 
2088
2295
  }
2089
2296
 
@@ -2305,15 +2512,34 @@ class NodeBuilder {
2305
2512
  */
2306
2513
  buildFunctionNode( shaderNode ) {
2307
2514
 
2308
- const fn = new FunctionNode();
2515
+ const backend = this.renderer.backend;
2309
2516
 
2310
- const previous = this.currentFunctionNode;
2517
+ let cache = _functionNodeCache.get( backend );
2518
+
2519
+ if ( cache === undefined ) {
2520
+
2521
+ cache = new WeakMap();
2522
+ _functionNodeCache.set( backend, cache );
2523
+
2524
+ }
2311
2525
 
2312
- this.currentFunctionNode = fn;
2526
+ let fn = cache.get( shaderNode );
2313
2527
 
2314
- fn.code = this.buildFunctionCode( shaderNode );
2528
+ if ( fn === undefined ) {
2315
2529
 
2316
- this.currentFunctionNode = previous;
2530
+ fn = new FunctionNode();
2531
+
2532
+ const previous = this.currentFunctionNode;
2533
+
2534
+ this.currentFunctionNode = fn;
2535
+
2536
+ fn.code = this.buildFunctionCode( shaderNode );
2537
+
2538
+ this.currentFunctionNode = previous;
2539
+
2540
+ cache.set( shaderNode, fn );
2541
+
2542
+ }
2317
2543
 
2318
2544
  return fn;
2319
2545
 
@@ -2606,11 +2832,12 @@ class NodeBuilder {
2606
2832
  * Returns the variable definitions as a shader string for the given shader stage.
2607
2833
  *
2608
2834
  * @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
2835
+ * @param {boolean} [global=false] - Whether the variables are global.
2609
2836
  * @return {string} The variable code section.
2610
2837
  */
2611
- getVars( shaderStage ) {
2838
+ getVars( shaderStage, global = false ) {
2612
2839
 
2613
- let snippet = '';
2840
+ const snippets = [];
2614
2841
 
2615
2842
  const vars = this.vars[ shaderStage ];
2616
2843
 
@@ -2618,13 +2845,13 @@ class NodeBuilder {
2618
2845
 
2619
2846
  for ( const variable of vars ) {
2620
2847
 
2621
- snippet += `${ this.getVar( variable.type, variable.name ) }; `;
2848
+ snippets.push( `${ this.getVar( variable.type, variable.name, variable.count ) };` );
2622
2849
 
2623
2850
  }
2624
2851
 
2625
2852
  }
2626
2853
 
2627
- return snippet;
2854
+ return snippets.join( global ? '\n' : '\n\t' );
2628
2855
 
2629
2856
  }
2630
2857
 
@@ -2873,13 +3100,41 @@ class NodeBuilder {
2873
3100
  }
2874
3101
 
2875
3102
  /**
2876
- * Central build method which controls the build for the given object.
2877
- *
2878
- * @return {NodeBuilder} A reference to this node builder.
3103
+ * Prebuild the node builder.
2879
3104
  */
2880
- build() {
3105
+ prebuild() {
3106
+
3107
+ const { object, renderer, material } = this;
3108
+
3109
+ // < renderer.contextNode >
3110
+
3111
+ if ( renderer.contextNode.isContextNode === true ) {
3112
+
3113
+ this.context = { ...this.context, ...renderer.contextNode.getFlowContextData() };
3114
+
3115
+ } else {
3116
+
3117
+ error( 'NodeBuilder: "renderer.contextNode" must be an instance of `context()`.' );
3118
+
3119
+ }
3120
+
3121
+ // < material.contextNode >
3122
+
3123
+ if ( material && material.contextNode ) {
3124
+
3125
+ if ( material.contextNode.isContextNode === true ) {
3126
+
3127
+ this.context = { ...this.context, ...material.contextNode.getFlowContextData() };
3128
+
3129
+ } else {
2881
3130
 
2882
- const { object, material, renderer } = this;
3131
+ error( 'NodeBuilder: "material.contextNode" must be an instance of `context()`.' );
3132
+
3133
+ }
3134
+
3135
+ }
3136
+
3137
+ // < nodeMaterial >
2883
3138
 
2884
3139
  if ( material !== null ) {
2885
3140
 
@@ -2887,7 +3142,7 @@ class NodeBuilder {
2887
3142
 
2888
3143
  if ( nodeMaterial === null ) {
2889
3144
 
2890
- error( `NodeMaterial: Material "${ material.type }" is not compatible.` );
3145
+ error( `NodeBuilder: Material "${ material.type }" is not compatible.` );
2891
3146
 
2892
3147
  nodeMaterial = new NodeMaterial();
2893
3148
 
@@ -2901,6 +3156,17 @@ class NodeBuilder {
2901
3156
 
2902
3157
  }
2903
3158
 
3159
+ }
3160
+
3161
+ /**
3162
+ * Central build method which controls the build for the given object.
3163
+ *
3164
+ * @return {NodeBuilder} A reference to this node builder.
3165
+ */
3166
+ build() {
3167
+
3168
+ this.prebuild();
3169
+
2904
3170
  // setup() -> stage 1: create possible new nodes and/or return an output reference node
2905
3171
  // analyze() -> stage 2: analyze nodes to possible optimization and validation
2906
3172
  // generate() -> stage 3: generate shader
@@ -2909,9 +3175,9 @@ class NodeBuilder {
2909
3175
 
2910
3176
  this.setBuildStage( buildStage );
2911
3177
 
2912
- if ( this.context.vertex && this.context.vertex.isNode ) {
3178
+ if ( this.context.position && this.context.position.isNode ) {
2913
3179
 
2914
- this.flowNodeFromShaderStage( 'vertex', this.context.vertex );
3180
+ this.flowNodeFromShaderStage( 'vertex', this.context.position );
2915
3181
 
2916
3182
  }
2917
3183
 
@@ -2951,6 +3217,89 @@ class NodeBuilder {
2951
3217
 
2952
3218
  }
2953
3219
 
3220
+ /**
3221
+ * Async version of build() that yields to main thread between shader stages.
3222
+ * Use this in compileAsync() to prevent blocking the main thread.
3223
+ *
3224
+ * @return {Promise<NodeBuilder>} A promise that resolves to this node builder.
3225
+ */
3226
+ async buildAsync() {
3227
+
3228
+ this.prebuild();
3229
+
3230
+ // setup() -> stage 1: create possible new nodes and/or return an output reference node
3231
+ // analyze() -> stage 2: analyze nodes to possible optimization and validation
3232
+ // generate() -> stage 3: generate shader
3233
+
3234
+ for ( const buildStage of defaultBuildStages ) {
3235
+
3236
+ this.setBuildStage( buildStage );
3237
+
3238
+ if ( this.context.position && this.context.position.isNode ) {
3239
+
3240
+ this.flowNodeFromShaderStage( 'vertex', this.context.position );
3241
+
3242
+ }
3243
+
3244
+ for ( const shaderStage of shaderStages ) {
3245
+
3246
+ this.setShaderStage( shaderStage );
3247
+
3248
+ const flowNodes = this.flowNodes[ shaderStage ];
3249
+
3250
+ for ( const node of flowNodes ) {
3251
+
3252
+ if ( buildStage === 'generate' ) {
3253
+
3254
+ this.flowNode( node );
3255
+
3256
+ } else {
3257
+
3258
+ node.build( this );
3259
+
3260
+ }
3261
+
3262
+ }
3263
+
3264
+ // Yield to main thread after each shader stage to prevent blocking
3265
+ await yieldToMain();
3266
+
3267
+ }
3268
+
3269
+ }
3270
+
3271
+ this.setBuildStage( null );
3272
+ this.setShaderStage( null );
3273
+
3274
+ // stage 4: build code for a specific output
3275
+
3276
+ this.buildCode();
3277
+ this.buildUpdateNodes();
3278
+
3279
+ return this;
3280
+
3281
+ }
3282
+
3283
+ /**
3284
+ * Returns shared data object for the given node.
3285
+ *
3286
+ * @param {Node} node - The node to get shared data from.
3287
+ * @return {Object} The shared data.
3288
+ */
3289
+ getSharedDataFromNode( node ) {
3290
+
3291
+ let data = sharedNodeData.get( node );
3292
+
3293
+ if ( data === undefined ) {
3294
+
3295
+ data = {};
3296
+
3297
+ }
3298
+
3299
+ return data;
3300
+
3301
+ }
3302
+
2954
3303
  /**
2955
3304
  * Returns a uniform representation which is later used for UBO generation and rendering.
2956
3305
  *
@@ -2960,16 +3309,31 @@ class NodeBuilder {
2960
3309
  */
2961
3310
  getNodeUniform( uniformNode, type ) {
2962
3311
 
2963
- if ( type === 'float' || type === 'int' || type === 'uint' ) return new NumberNodeUniform( uniformNode );
2964
- if ( type === 'vec2' || type === 'ivec2' || type === 'uvec2' ) return new Vector2NodeUniform( uniformNode );
2965
- if ( type === 'vec3' || type === 'ivec3' || type === 'uvec3' ) return new Vector3NodeUniform( uniformNode );
2966
- if ( type === 'vec4' || type === 'ivec4' || type === 'uvec4' ) return new Vector4NodeUniform( uniformNode );
2967
- if ( type === 'color' ) return new ColorNodeUniform( uniformNode );
2968
- if ( type === 'mat2' ) return new Matrix2NodeUniform( uniformNode );
2969
- if ( type === 'mat3' ) return new Matrix3NodeUniform( uniformNode );
2970
- if ( type === 'mat4' ) return new Matrix4NodeUniform( uniformNode );
3312
+ const nodeData = this.getSharedDataFromNode( uniformNode );
2971
3313
 
2972
- throw new Error( `Uniform "${type}" not declared.` );
3314
+ let node = nodeData.cache;
3315
+
3316
+ if ( node === undefined ) {
3317
+
3318
+ if ( type === 'float' || type === 'int' || type === 'uint' ) node = new NumberNodeUniform( uniformNode );
3319
+ else if ( type === 'vec2' || type === 'ivec2' || type === 'uvec2' ) node = new Vector2NodeUniform( uniformNode );
3320
+ else if ( type === 'vec3' || type === 'ivec3' || type === 'uvec3' ) node = new Vector3NodeUniform( uniformNode );
3321
+ else if ( type === 'vec4' || type === 'ivec4' || type === 'uvec4' ) node = new Vector4NodeUniform( uniformNode );
3322
+ else if ( type === 'color' ) node = new ColorNodeUniform( uniformNode );
3323
+ else if ( type === 'mat2' ) node = new Matrix2NodeUniform( uniformNode );
3324
+ else if ( type === 'mat3' ) node = new Matrix3NodeUniform( uniformNode );
3325
+ else if ( type === 'mat4' ) node = new Matrix4NodeUniform( uniformNode );
3326
+ else {
3327
+
3328
+ throw new Error( `THREE.NodeBuilder: Uniform "${ type }" not implemented.` );
3329
+
3330
+ }
3331
+
3332
+ nodeData.cache = node;
3333
+
3334
+ }
3335
+
3336
+ return node;
2973
3337
 
2974
3338
  }
2975
3339
 
@@ -3076,6 +3440,20 @@ class NodeBuilder {
3076
3440
 
3077
3441
  }
3078
3442
 
3443
+ /**
3444
+ * Returns `true` if data from the previous frame are required. Relevant
3445
+ * when computing motion vectors with {@link VelocityNode}.
3446
+ *
3447
+ * @return {boolean} Whether data from the previous frame are required or not.
3448
+ */
3449
+ needsPreviousData() {
3450
+
3451
+ const mrt = this.renderer.getMRT();
3452
+
3453
+ return ( mrt && mrt.has( 'velocity' ) ) || getDataFromObject( this.object ).useVelocity === true;
3454
+
3455
+ }
3456
+
3079
3457
  }
3080
3458
 
3081
3459
  export default NodeBuilder;