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
@@ -91,47 +91,6 @@ class WebGLBufferRenderer {
91
91
 
92
92
  }
93
93
 
94
- renderMultiDrawInstances( starts, counts, drawCount, primcount ) {
95
-
96
- const { extensions, mode, object, info } = this;
97
-
98
- if ( drawCount === 0 ) return;
99
-
100
- const extension = extensions.get( 'WEBGL_multi_draw' );
101
-
102
- if ( extension === null ) {
103
-
104
- for ( let i = 0; i < drawCount; i ++ ) {
105
-
106
- this.renderInstances( starts[ i ], counts[ i ], primcount[ i ] );
107
-
108
- }
109
-
110
- } else {
111
-
112
- if ( this.index !== 0 ) {
113
-
114
- extension.multiDrawElementsInstancedWEBGL( mode, counts, 0, this.type, starts, 0, primcount, 0, drawCount );
115
-
116
- } else {
117
-
118
- extension.multiDrawArraysInstancedWEBGL( mode, starts, 0, counts, 0, primcount, 0, drawCount );
119
-
120
- }
121
-
122
- let elementCount = 0;
123
- for ( let i = 0; i < drawCount; i ++ ) {
124
-
125
- elementCount += counts[ i ] * primcount[ i ];
126
-
127
- }
128
-
129
- info.update( object, elementCount, 1 );
130
-
131
- }
132
-
133
- }
134
-
135
94
  //
136
95
 
137
96
  }
@@ -10,8 +10,68 @@ import { DataTexture } from '../../../textures/DataTexture.js';
10
10
  import { error } from '../../../utils.js';
11
11
 
12
12
  const glslPolyfills = {
13
- bitcast_int_uint: new CodeNode( /* glsl */'uint tsl_bitcast_uint_to_int ( int x ) { return floatBitsToInt( uintBitsToFloat( x ) ); }' ),
14
- bitcast_uint_int: new CodeNode( /* glsl */'uint tsl_bitcast_int_to_uint ( int x ) { return floatBitsToUint( intBitsToFloat ( x ) ); }' )
13
+ bitcast_int_uint: new CodeNode( /* glsl */'uint tsl_bitcast_int_to_uint ( int x ) { return floatBitsToUint( intBitsToFloat ( x ) ); }' ),
14
+ bitcast_uint_int: new CodeNode( /* glsl */'uint tsl_bitcast_uint_to_int ( uint x ) { return floatBitsToInt( uintBitsToFloat ( x ) ); }' ),
15
+ textureGather: new CodeNode( /* glsl */`
16
+ vec4 tsl_textureGather( const int comp, sampler2D map, vec2 coord, ivec2 offset, bool flipY ) {
17
+ if ( flipY ) offset.y = - offset.y;
18
+ vec2 size = vec2( textureSize( map, 0 ) );
19
+ vec2 st = floor( coord * size + vec2( offset ) - 0.5 );
20
+ vec4 ij = vec4( st + 0.5, st + 1.5 ) / size.xyxy;
21
+ vec4 ret = vec4(
22
+ textureLod( map, ij.xw, 0.0 )[ comp ],
23
+ textureLod( map, ij.zw, 0.0 )[ comp ],
24
+ textureLod( map, ij.zy, 0.0 )[ comp ],
25
+ textureLod( map, ij.xy, 0.0 )[ comp ]
26
+ );
27
+ return flipY ? ret.wzyx : ret;
28
+ }
29
+ ` ),
30
+ textureGatherArray: new CodeNode( /* glsl */`
31
+ vec4 tsl_textureGather_array( const int comp, sampler2DArray map, vec3 coord, ivec2 offset, bool flipY ) {
32
+ if ( flipY ) offset.y = - offset.y;
33
+ vec2 size = vec2( textureSize( map, 0 ).xy );
34
+ vec2 st = floor( coord.xy * size + vec2( offset ) - 0.5 );
35
+ vec4 ij = vec4( st + 0.5, st + 1.5 ) / size.xyxy;
36
+ vec4 ret = vec4(
37
+ textureLod( map, vec3( ij.xw, coord.z ), 0.0 )[ comp ],
38
+ textureLod( map, vec3( ij.zw, coord.z ), 0.0 )[ comp ],
39
+ textureLod( map, vec3( ij.zy, coord.z ), 0.0 )[ comp ],
40
+ textureLod( map, vec3( ij.xy, coord.z ), 0.0 )[ comp ]
41
+ );
42
+ return flipY ? ret.wzyx : ret;
43
+ }
44
+ ` ),
45
+ textureGatherCompare: new CodeNode( /* glsl */`
46
+ vec4 tsl_textureGatherCompare( sampler2DShadow map, vec2 coord, ivec2 offset, float ref, bool flipY ) {
47
+ if ( flipY ) offset.y = - offset.y;
48
+ vec2 size = vec2( textureSize( map, 0 ) );
49
+ vec2 st = floor( coord * size + vec2( offset ) - 0.5 );
50
+ vec4 ij = vec4( st + 0.5, st + 1.5 ) / size.xyxy;
51
+ vec4 ret = vec4(
52
+ textureLod( map, vec3( ij.xw, ref ), 0.0 ),
53
+ textureLod( map, vec3( ij.zw, ref ), 0.0 ),
54
+ textureLod( map, vec3( ij.zy, ref ), 0.0 ),
55
+ textureLod( map, vec3( ij.xy, ref ), 0.0 )
56
+ );
57
+ return flipY ? ret.wzyx : ret;
58
+ }
59
+ ` ),
60
+ textureGatherCompareArray: new CodeNode( /* glsl */`
61
+ vec4 tsl_textureGatherCompare_array( sampler2DArrayShadow map, vec3 coord, ivec2 offset, float ref, bool flipY ) {
62
+ if ( flipY ) offset.y = - offset.y;
63
+ vec2 size = vec2( textureSize( map, 0 ).xy );
64
+ vec2 st = floor( coord.xy * size + vec2( offset ) - 0.5 );
65
+ vec4 ij = vec4( st + 0.5, st + 1.5 ) / size.xyxy;
66
+ vec4 ret = vec4(
67
+ texture( map, vec4( ij.xw, coord.z, ref ) ),
68
+ texture( map, vec4( ij.zw, coord.z, ref ) ),
69
+ texture( map, vec4( ij.zy, coord.z, ref ) ),
70
+ texture( map, vec4( ij.xy, coord.z, ref ) )
71
+ );
72
+ return flipY ? ret.wzyx : ret;
73
+ }
74
+ ` )
15
75
  };
16
76
 
17
77
  const glslMethods = {
@@ -22,7 +82,13 @@ const glslMethods = {
22
82
  bitcast_uint_float: 'uintBitsToFloat',
23
83
  bitcast_float_uint: 'floatBitsToUint',
24
84
  bitcast_uint_int: 'tsl_bitcast_uint_to_int',
25
- bitcast_int_uint: 'tsl_bitcast_int_to_uint'
85
+ bitcast_int_uint: 'tsl_bitcast_int_to_uint',
86
+ floatpack_snorm_2x16: 'packSnorm2x16',
87
+ floatpack_unorm_2x16: 'packUnorm2x16',
88
+ floatpack_float16_2x16: 'packHalf2x16',
89
+ floatunpack_snorm_2x16: 'unpackSnorm2x16',
90
+ floatunpack_unorm_2x16: 'unpackUnorm2x16',
91
+ floatunpack_float16_2x16: 'unpackHalf2x16'
26
92
  };
27
93
 
28
94
  const precisionLib = {
@@ -63,9 +129,9 @@ precision highp isampler3D;
63
129
  precision highp isamplerCube;
64
130
  precision highp isampler2DArray;
65
131
 
66
- precision lowp sampler2DShadow;
67
- precision lowp sampler2DArrayShadow;
68
- precision lowp samplerCubeShadow;
132
+ precision highp sampler2DShadow;
133
+ precision highp sampler2DArrayShadow;
134
+ precision highp samplerCubeShadow;
69
135
  `;
70
136
 
71
137
  /**
@@ -176,7 +242,7 @@ class GLSLNodeBuilder extends NodeBuilder {
176
242
  *
177
243
  * @param {string} type - The output type to bitcast to.
178
244
  * @param {string} inputType - The input type of the.
179
- * @return {string} The resolved WGSL bitcast invocation.
245
+ * @return {string} The resolved GLSL bitcast invocation.
180
246
  */
181
247
  getBitcastMethod( type, inputType ) {
182
248
 
@@ -184,6 +250,30 @@ class GLSLNodeBuilder extends NodeBuilder {
184
250
 
185
251
  }
186
252
 
253
+ /**
254
+ * Returns the float packing method name for a given numeric encoding.
255
+ *
256
+ * @param {string} encoding - The numeric encoding that describes how the float values are mapped to the integer range.
257
+ * @returns {string} The resolved GLSL float packing method name.
258
+ */
259
+ getFloatPackingMethod( encoding ) {
260
+
261
+ return this.getMethod( `floatpack_${ encoding }_2x16` );
262
+
263
+ }
264
+
265
+ /**
266
+ * Returns the float unpacking method name for a given numeric encoding.
267
+ *
268
+ * @param {string} encoding - The numeric encoding that describes how the integer values are mapped to the float range.
269
+ * @returns {string} The resolved GLSL float unpacking method name.
270
+ */
271
+ getFloatUnpackingMethod( encoding ) {
272
+
273
+ return this.getMethod( `floatunpack_${ encoding }_2x16` );
274
+
275
+ }
276
+
187
277
  /**
188
278
  * Returns the native snippet for a ternary operation.
189
279
  *
@@ -330,7 +420,7 @@ ${ flowData.code }
330
420
 
331
421
  if ( node.isNodeUniform && node.node.isTextureNode !== true && node.node.isBufferNode !== true ) {
332
422
 
333
- return shaderStage.charAt( 0 ) + '_' + node.name;
423
+ return node.name;
334
424
 
335
425
  }
336
426
 
@@ -448,11 +538,11 @@ ${ flowData.code }
448
538
 
449
539
  if ( offsetSnippet ) {
450
540
 
451
- snippet = `texelFetchOffset( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), ${ levelSnippet }, ${ offsetSnippet } )`;
541
+ snippet = `texelFetchOffset( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), int( ${ levelSnippet } ), ${ offsetSnippet } )`;
452
542
 
453
543
  } else {
454
544
 
455
- snippet = `texelFetch( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), ${ levelSnippet } )`;
545
+ snippet = `texelFetch( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), int( ${ levelSnippet } ) )`;
456
546
 
457
547
  }
458
548
 
@@ -460,11 +550,11 @@ ${ flowData.code }
460
550
 
461
551
  if ( offsetSnippet ) {
462
552
 
463
- snippet = `texelFetchOffset( ${ textureProperty }, ${ uvIndexSnippet }, ${ levelSnippet }, ${ offsetSnippet } )`;
553
+ snippet = `texelFetchOffset( ${ textureProperty }, ${ uvIndexSnippet }, int( ${ levelSnippet } ), ${ offsetSnippet } )`;
464
554
 
465
555
  } else {
466
556
 
467
- snippet = `texelFetch( ${ textureProperty }, ${ uvIndexSnippet }, ${ levelSnippet } )`;
557
+ snippet = `texelFetch( ${ textureProperty }, ${ uvIndexSnippet }, int( ${ levelSnippet } ) )`;
468
558
 
469
559
  }
470
560
 
@@ -515,10 +605,13 @@ ${ flowData.code }
515
605
  * @param {string} textureProperty - The name of the texture uniform in the shader.
516
606
  * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
517
607
  * @param {string} levelSnippet - A GLSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
608
+ * @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
518
609
  * @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
519
610
  * @return {string} The GLSL snippet.
520
611
  */
521
- generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, offsetSnippet ) {
612
+ generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet ) {
613
+
614
+ if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
522
615
 
523
616
  if ( offsetSnippet ) {
524
617
 
@@ -537,10 +630,13 @@ ${ flowData.code }
537
630
  * @param {string} textureProperty - The name of the texture uniform in the shader.
538
631
  * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
539
632
  * @param {string} biasSnippet - A GLSL snippet that represents the bias to apply to the mip level before sampling.
633
+ * @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
540
634
  * @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
541
635
  * @return {string} The GLSL snippet.
542
636
  */
543
- generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, offsetSnippet ) {
637
+ generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, offsetSnippet ) {
638
+
639
+ if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
544
640
 
545
641
  if ( offsetSnippet ) {
546
642
 
@@ -559,10 +655,13 @@ ${ flowData.code }
559
655
  * @param {string} textureProperty - The name of the texture uniform in the shader.
560
656
  * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
561
657
  * @param {Array<string>} gradSnippet - An array holding both gradient GLSL snippets.
658
+ * @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
562
659
  * @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
563
660
  * @return {string} The GLSL snippet.
564
661
  */
565
- generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, offsetSnippet ) {
662
+ generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, offsetSnippet ) {
663
+
664
+ if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
566
665
 
567
666
  if ( offsetSnippet ) {
568
667
 
@@ -591,6 +690,13 @@ ${ flowData.code }
591
690
 
592
691
  if ( shaderStage === 'fragment' ) {
593
692
 
693
+ // Cube shadow maps use vec4(direction, compareValue)
694
+ if ( texture.isCubeTexture ) {
695
+
696
+ return `texture( ${ textureProperty }, vec4( ${ uvSnippet }, ${ compareSnippet } ) )`;
697
+
698
+ }
699
+
594
700
  if ( depthSnippet ) {
595
701
 
596
702
  if ( offsetSnippet ) {
@@ -620,28 +726,68 @@ ${ flowData.code }
620
726
  }
621
727
 
622
728
  /**
623
- * Returns the variables of the given shader stage as a GLSL string.
729
+ * Generates the GLSL snippet for gathering four texels from the given texture.
624
730
  *
625
- * @param {string} shaderStage - The shader stage.
626
- * @return {string} The GLSL snippet that defines the variables.
731
+ * @param {Texture} texture - The texture.
732
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
733
+ * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
734
+ * @param {string} gatherSnippet - A GLSL snippet that represents the index of the channel to read.
735
+ * @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
736
+ * @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
737
+ * @param {?string} flipYSnippet - A GLSL snippet that represents the y-flip. Only used for WebGL.
738
+ * @return {string} The GLSL snippet.
627
739
  */
628
- getVars( shaderStage ) {
740
+ generateTextureGather( texture, textureProperty, uvSnippet, gatherSnippet, depthSnippet, offsetSnippet, flipYSnippet ) {
629
741
 
630
- const snippets = [];
742
+ if ( texture.isDepthTexture ) gatherSnippet = '0';
631
743
 
632
- const vars = this.vars[ shaderStage ];
744
+ if ( offsetSnippet === null ) offsetSnippet = 'ivec2( 0 )';
633
745
 
634
- if ( vars !== undefined ) {
746
+ if ( flipYSnippet === null ) flipYSnippet = 'false';
635
747
 
636
- for ( const variable of vars ) {
748
+ if ( depthSnippet ) {
637
749
 
638
- snippets.push( `${ this.getVar( variable.type, variable.name, variable.count ) };` );
750
+ this._include( 'textureGatherArray' );
639
751
 
640
- }
752
+ return `tsl_textureGather_array( ${gatherSnippet}, ${ textureProperty }, vec3( ${ uvSnippet }, ${ depthSnippet } ), ${ offsetSnippet }, ${ flipYSnippet } )`;
641
753
 
642
754
  }
643
755
 
644
- return snippets.join( '\n\t' );
756
+ this._include( 'textureGather' );
757
+
758
+ return `tsl_textureGather( ${gatherSnippet}, ${ textureProperty }, ${ uvSnippet }, ${ offsetSnippet }, ${ flipYSnippet } )`;
759
+
760
+ }
761
+
762
+ /**
763
+ * Generates the GLSL snippet for performing a depth comparison on four texels in the given depth texture.
764
+ *
765
+ * @param {Texture} texture - The texture.
766
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
767
+ * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
768
+ * @param {string} compareSnippet - A GLSL snippet that represents the reference value.
769
+ * @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
770
+ * @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
771
+ * @param {?string} flipYSnippet - A GLSL snippet that represents the y-flip. Only used for WebGL.
772
+ * @return {string} The GLSL snippet.
773
+ */
774
+ generateTextureGatherCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, offsetSnippet, flipYSnippet ) {
775
+
776
+ if ( offsetSnippet === null ) offsetSnippet = 'ivec2( 0 )';
777
+
778
+ if ( flipYSnippet === null ) flipYSnippet = 'false';
779
+
780
+ if ( depthSnippet ) {
781
+
782
+ this._include( 'textureGatherCompareArray' );
783
+
784
+ return `tsl_textureGatherCompare_array( ${ textureProperty }, vec3( ${ uvSnippet }, ${depthSnippet} ), ${ offsetSnippet }, ${ compareSnippet }, ${ flipYSnippet } )`;
785
+
786
+ }
787
+
788
+ this._include( 'textureGatherCompare' );
789
+
790
+ return `tsl_textureGatherCompare( ${ textureProperty }, ${ uvSnippet }, ${ offsetSnippet }, ${ compareSnippet }, ${ flipYSnippet } )`;
645
791
 
646
792
  }
647
793
 
@@ -665,7 +811,8 @@ ${ flowData.code }
665
811
 
666
812
  if ( uniform.type === 'texture' || uniform.type === 'texture3D' ) {
667
813
 
668
- const texture = uniform.node.value;
814
+ const textureNode = uniform.node;
815
+ const texture = textureNode.value;
669
816
 
670
817
  let typePrefix = '';
671
818
 
@@ -687,7 +834,7 @@ ${ flowData.code }
687
834
 
688
835
  snippet = `${typePrefix}sampler3D ${ uniform.name };`;
689
836
 
690
- } else if ( texture.compareFunction ) {
837
+ } else if ( texture.compareFunction && textureNode.compareNode !== null ) {
691
838
 
692
839
  if ( texture.isArrayTexture === true ) {
693
840
 
@@ -713,6 +860,20 @@ ${ flowData.code }
713
860
 
714
861
  snippet = `samplerCube ${ uniform.name };`;
715
862
 
863
+ } else if ( uniform.type === 'cubeDepthTexture' ) {
864
+
865
+ const texture = uniform.node.value;
866
+
867
+ if ( texture.compareFunction ) {
868
+
869
+ snippet = `samplerCubeShadow ${ uniform.name };`;
870
+
871
+ } else {
872
+
873
+ snippet = `samplerCube ${ uniform.name };`;
874
+
875
+ }
876
+
716
877
  } else if ( uniform.type === 'buffer' ) {
717
878
 
718
879
  const bufferNode = uniform.node;
@@ -724,32 +885,56 @@ ${ flowData.code }
724
885
 
725
886
  } else {
726
887
 
727
- const vectorType = this.getVectorType( uniform.type );
888
+ const groupName = uniform.groupNode.name;
728
889
 
729
- snippet = `${ vectorType } ${ this.getPropertyName( uniform, shaderStage ) };`;
890
+ // Check if this group has already been processed
891
+ if ( uniformGroups[ groupName ] === undefined ) {
730
892
 
731
- group = true;
893
+ // Get the shared uniform group that contains uniforms from all stages
894
+ const sharedUniformGroup = this.uniformGroups[ groupName ];
732
895
 
733
- }
896
+ if ( sharedUniformGroup !== undefined ) {
897
+
898
+ // Generate snippets for ALL uniforms in this shared group
899
+ const snippets = [];
900
+
901
+ for ( const sharedUniform of sharedUniformGroup.uniforms ) {
734
902
 
735
- const precision = uniform.node.precision;
903
+ const type = sharedUniform.getType();
904
+ const vectorType = this.getVectorType( type );
905
+ const precision = sharedUniform.nodeUniform.node.precision;
736
906
 
737
- if ( precision !== null ) {
907
+ let uniformSnippet = `${ vectorType } ${ sharedUniform.name };`;
738
908
 
739
- snippet = precisionLib[ precision ] + ' ' + snippet;
909
+ if ( precision !== null ) {
910
+
911
+ uniformSnippet = precisionLib[ precision ] + ' ' + uniformSnippet;
912
+
913
+ }
914
+
915
+ snippets.push( '\t' + uniformSnippet );
916
+
917
+ }
918
+
919
+ uniformGroups[ groupName ] = snippets;
920
+
921
+ }
922
+
923
+ }
924
+
925
+ group = true;
740
926
 
741
927
  }
742
928
 
743
- if ( group ) {
929
+ if ( ! group ) {
744
930
 
745
- snippet = '\t' + snippet;
931
+ const precision = uniform.node.precision;
746
932
 
747
- const groupName = uniform.groupNode.name;
748
- const groupSnippets = uniformGroups[ groupName ] || ( uniformGroups[ groupName ] = [] );
933
+ if ( precision !== null ) {
749
934
 
750
- groupSnippets.push( snippet );
935
+ snippet = precisionLib[ precision ] + ' ' + snippet;
751
936
 
752
- } else {
937
+ }
753
938
 
754
939
  snippet = 'uniform ' + snippet;
755
940
 
@@ -765,7 +950,7 @@ ${ flowData.code }
765
950
 
766
951
  const groupSnippets = uniformGroups[ name ];
767
952
 
768
- output += this._getGLSLUniformStruct( shaderStage + '_' + name, groupSnippets.join( '\n' ) ) + '\n';
953
+ output += this._getGLSLUniformStruct( name, groupSnippets.join( '\n' ) ) + '\n';
769
954
 
770
955
  }
771
956
 
@@ -888,9 +1073,9 @@ ${ flowData.code }
888
1073
 
889
1074
  }
890
1075
 
891
- if ( outputSnippet.length === 0 ) {
1076
+ if ( shaderStage === 'fragment' && outputSnippet.length === 0 ) {
892
1077
 
893
- outputSnippet.push( 'layout( location = 0 ) out vec4 fragColor;' );
1078
+ outputSnippet.push( `layout( location = 0 ) out ${ this.getOutputType() } fragColor;` );
894
1079
 
895
1080
  }
896
1081
 
@@ -1061,9 +1246,11 @@ ${ flowData.code }
1061
1246
 
1062
1247
  return 'uint( gl_DrawID )';
1063
1248
 
1064
- }
1249
+ } else {
1250
+
1251
+ return 'nodeUniformDrawId'; // fallback to uniform
1065
1252
 
1066
- return null;
1253
+ }
1067
1254
 
1068
1255
  }
1069
1256
 
@@ -1330,6 +1517,9 @@ ${shaderData.extensions}
1330
1517
  // precision
1331
1518
  ${ defaultPrecisions }
1332
1519
 
1520
+ // structs
1521
+ ${shaderData.structs}
1522
+
1333
1523
  // uniforms
1334
1524
  ${shaderData.uniforms}
1335
1525
 
@@ -1339,14 +1529,14 @@ ${shaderData.varyings}
1339
1529
  // attributes
1340
1530
  ${shaderData.attributes}
1341
1531
 
1532
+ // vars
1533
+ ${shaderData.vars}
1534
+
1342
1535
  // codes
1343
1536
  ${shaderData.codes}
1344
1537
 
1345
1538
  void main() {
1346
1539
 
1347
- // vars
1348
- ${shaderData.vars}
1349
-
1350
1540
  // transforms
1351
1541
  ${shaderData.transforms}
1352
1542
 
@@ -1388,14 +1578,14 @@ ${shaderData.uniforms}
1388
1578
  // varyings
1389
1579
  ${shaderData.varyings}
1390
1580
 
1581
+ // vars
1582
+ ${shaderData.vars}
1583
+
1391
1584
  // codes
1392
1585
  ${shaderData.codes}
1393
1586
 
1394
1587
  void main() {
1395
1588
 
1396
- // vars
1397
- ${shaderData.vars}
1398
-
1399
1589
  // flow
1400
1590
  ${shaderData.flow}
1401
1591
 
@@ -1443,14 +1633,14 @@ void main() {
1443
1633
  if ( shaderStage === 'vertex' ) {
1444
1634
 
1445
1635
  flow += 'gl_Position = ';
1446
- flow += `${ flowSlotData.result };`;
1636
+ flow += `${ this.format( flowSlotData.result, mainNode.getNodeType( this ), 'vec4' ) };`;
1447
1637
 
1448
1638
  } else if ( shaderStage === 'fragment' ) {
1449
1639
 
1450
1640
  if ( ! node.outputNode.isOutputStructNode ) {
1451
1641
 
1452
1642
  flow += 'fragColor = ';
1453
- flow += `${ flowSlotData.result };`;
1643
+ flow += `${ this.format( flowSlotData.result, mainNode.getNodeType( this ), this.getOutputType() ) };`;
1454
1644
 
1455
1645
  }
1456
1646
 
@@ -1466,12 +1656,26 @@ void main() {
1466
1656
  stageData.uniforms = this.getUniforms( shaderStage );
1467
1657
  stageData.attributes = this.getAttributes( shaderStage );
1468
1658
  stageData.varyings = this.getVaryings( shaderStage );
1469
- stageData.vars = this.getVars( shaderStage );
1659
+ stageData.vars = this.getVars( shaderStage, true );
1470
1660
  stageData.structs = this.getStructs( shaderStage );
1471
1661
  stageData.codes = this.getCodes( shaderStage );
1472
1662
  stageData.transforms = this.getTransforms( shaderStage );
1473
1663
  stageData.flow = flow;
1474
1664
 
1665
+ // fallbacks
1666
+
1667
+ if ( shaderStage === 'vertex' ) {
1668
+
1669
+ const ext = this.renderer.backend.extensions;
1670
+
1671
+ if ( this.object.isBatchedMesh && ext.has( 'WEBGL_multi_draw' ) === false ) {
1672
+
1673
+ stageData.uniforms += '\nuniform uint nodeUniformDrawId;\n';
1674
+
1675
+ }
1676
+
1677
+ }
1678
+
1475
1679
  }
1476
1680
 
1477
1681
  if ( this.material !== null ) {
@@ -1519,7 +1723,7 @@ void main() {
1519
1723
  uniformGPU = new NodeSampledTexture( uniformNode.name, uniformNode.node, group );
1520
1724
  bindings.push( uniformGPU );
1521
1725
 
1522
- } else if ( type === 'cubeTexture' ) {
1726
+ } else if ( type === 'cubeTexture' || type === 'cubeDepthTexture' ) {
1523
1727
 
1524
1728
  uniformGPU = new NodeSampledCubeTexture( uniformNode.name, uniformNode.node, group );
1525
1729
  bindings.push( uniformGPU );
@@ -1531,11 +1735,22 @@ void main() {
1531
1735
 
1532
1736
  } else if ( type === 'buffer' ) {
1533
1737
 
1534
- node.name = `NodeBuffer_${ node.id }`;
1535
1738
  uniformNode.name = `buffer${ node.id }`;
1536
1739
 
1537
- const buffer = new NodeUniformBuffer( node, group );
1538
- buffer.name = node.name;
1740
+ const sharedData = this.getSharedDataFromNode( node );
1741
+
1742
+ let buffer = sharedData.buffer;
1743
+
1744
+ if ( buffer === undefined ) {
1745
+
1746
+ node.name = `NodeBuffer_${ node.id }`;
1747
+
1748
+ buffer = new NodeUniformBuffer( node, group );
1749
+ buffer.name = node.name;
1750
+
1751
+ sharedData.buffer = buffer;
1752
+
1753
+ }
1539
1754
 
1540
1755
  bindings.push( buffer );
1541
1756
 
@@ -1543,24 +1758,38 @@ void main() {
1543
1758
 
1544
1759
  } else {
1545
1760
 
1546
- const uniformsStage = this.uniformGroups[ shaderStage ] || ( this.uniformGroups[ shaderStage ] = {} );
1547
-
1548
- let uniformsGroup = uniformsStage[ groupName ];
1761
+ let uniformsGroup = this.uniformGroups[ groupName ];
1549
1762
 
1550
1763
  if ( uniformsGroup === undefined ) {
1551
1764
 
1552
- uniformsGroup = new NodeUniformsGroup( shaderStage + '_' + groupName, group );
1553
- //uniformsGroup.setVisibility( gpuShaderStageLib[ shaderStage ] );
1765
+ uniformsGroup = new NodeUniformsGroup( groupName, group );
1554
1766
 
1555
- uniformsStage[ groupName ] = uniformsGroup;
1767
+ this.uniformGroups[ groupName ] = uniformsGroup;
1556
1768
 
1557
1769
  bindings.push( uniformsGroup );
1558
1770
 
1771
+ } else {
1772
+
1773
+ // Add to bindings for this stage if not already present
1774
+ if ( bindings.indexOf( uniformsGroup ) === - 1 ) {
1775
+
1776
+ bindings.push( uniformsGroup );
1777
+
1778
+ }
1779
+
1559
1780
  }
1560
1781
 
1561
1782
  uniformGPU = this.getNodeUniform( uniformNode, type );
1562
1783
 
1563
- uniformsGroup.addUniform( uniformGPU );
1784
+ // Only add uniform if not already present in the group (check by name to avoid duplicates across stages)
1785
+ const uniformName = uniformGPU.name;
1786
+ const alreadyExists = uniformsGroup.uniforms.some( u => u.name === uniformName );
1787
+
1788
+ if ( ! alreadyExists ) {
1789
+
1790
+ uniformsGroup.addUniform( uniformGPU );
1791
+
1792
+ }
1564
1793
 
1565
1794
  }
1566
1795