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
@@ -5,12 +5,15 @@ import { colorSpaceToWorking } from '../display/ColorSpaceNode.js';
5
5
  import { expression } from '../code/ExpressionNode.js';
6
6
  import { maxMipLevel } from '../utils/MaxMipLevelNode.js';
7
7
  import { nodeProxy, vec3, nodeObject, int, Fn } from '../tsl/TSLBase.js';
8
+ import { step } from '../math/MathNode.js';
8
9
  import { NodeUpdateType } from '../core/constants.js';
9
10
 
10
- import { IntType, NearestFilter, UnsignedIntType } from '../../constants.js';
11
+ import { Compatibility, GreaterCompare, GreaterEqualCompare, IntType, LessCompare, LessEqualCompare, NearestFilter, UnsignedIntType } from '../../constants.js';
11
12
 
12
13
  import { Texture } from '../../textures/Texture.js';
13
- import { warn } from '../../utils.js';
14
+ import { warn, warnOnce } from '../../utils.js';
15
+
16
+ import NodeError from '../core/NodeError.js';
14
17
 
15
18
  const EmptyTexture = /*@__PURE__*/ new Texture();
16
19
 
@@ -96,6 +99,15 @@ class TextureNode extends UniformNode {
96
99
  */
97
100
  this.gradNode = null;
98
101
 
102
+ /**
103
+ * Represents the optional index constant of the channel to gather.
104
+ * This must be in range [0, 3] and a compile-time constant.
105
+ *
106
+ * @type {?Node<int>}
107
+ * @default null
108
+ */
109
+ this.gatherNode = null;
110
+
99
111
  /**
100
112
  * Represents the optional texel offset applied to the unnormalized texture
101
113
  * coordinate before sampling the texture.
@@ -214,9 +226,15 @@ class TextureNode extends UniformNode {
214
226
  * @param {NodeBuilder} builder - The current node builder.
215
227
  * @return {string} The node type.
216
228
  */
217
- getNodeType( /*builder*/ ) {
229
+ generateNodeType( /*builder*/ ) {
230
+
231
+ if ( this.value.isDepthTexture === true ) {
218
232
 
219
- if ( this.value.isDepthTexture === true ) return 'float';
233
+ if ( this.gatherNode === null ) return 'float';
234
+
235
+ return 'vec4';
236
+
237
+ }
220
238
 
221
239
  if ( this.value.type === UnsignedIntType ) {
222
240
 
@@ -343,7 +361,7 @@ class TextureNode extends UniformNode {
343
361
 
344
362
  if ( ! texture || texture.isTexture !== true ) {
345
363
 
346
- throw new Error( 'THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().' );
364
+ throw new NodeError( 'THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().', this.stackTrace );
347
365
 
348
366
  }
349
367
 
@@ -391,11 +409,42 @@ class TextureNode extends UniformNode {
391
409
 
392
410
  //
393
411
 
412
+ let compareNode = null;
413
+ let compareStepNode = null;
414
+
415
+ if ( this.compareNode !== null ) {
416
+
417
+ if ( builder.renderer.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {
418
+
419
+ compareNode = this.compareNode;
420
+
421
+ } else {
422
+
423
+ const compareFunction = texture.compareFunction;
424
+
425
+ if ( compareFunction === null || compareFunction === LessCompare || compareFunction === LessEqualCompare || compareFunction === GreaterCompare || compareFunction === GreaterEqualCompare ) {
426
+
427
+ compareStepNode = this.compareNode;
428
+
429
+ } else {
430
+
431
+ compareNode = this.compareNode;
432
+
433
+ warnOnce( 'TSL: Only "LessCompare", "LessEqualCompare", "GreaterCompare" and "GreaterEqualCompare" are supported for depth texture comparison fallback.' );
434
+
435
+ }
436
+
437
+ }
438
+
439
+ }
440
+
394
441
  properties.uvNode = uvNode;
395
442
  properties.levelNode = levelNode;
396
443
  properties.biasNode = this.biasNode;
397
- properties.compareNode = this.compareNode;
444
+ properties.compareNode = compareNode;
445
+ properties.compareStepNode = compareStepNode;
398
446
  properties.gradNode = this.gradNode;
447
+ properties.gatherNode = this.gatherNode;
399
448
  properties.depthNode = this.depthNode;
400
449
  properties.offsetNode = this.offsetNode;
401
450
 
@@ -438,10 +487,12 @@ class TextureNode extends UniformNode {
438
487
  * @param {?string} depthSnippet - The depth snippet.
439
488
  * @param {?string} compareSnippet - The compare snippet.
440
489
  * @param {?Array<string>} gradSnippet - The grad snippet.
490
+ * @param {?string} gatherSnippet - The gather snippet.
441
491
  * @param {?string} offsetSnippet - The offset snippet.
492
+ * @param {?string} flipYSnippet - The y-flip snippet. Only used for WebGL.
442
493
  * @return {string} The generated code snippet.
443
494
  */
444
- generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, offsetSnippet ) {
495
+ generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, gatherSnippet, offsetSnippet, flipYSnippet ) {
445
496
 
446
497
  const texture = this.value;
447
498
 
@@ -455,6 +506,18 @@ class TextureNode extends UniformNode {
455
506
 
456
507
  snippet = builder.generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, offsetSnippet );
457
508
 
509
+ } else if ( gatherSnippet ) {
510
+
511
+ if ( compareSnippet ) {
512
+
513
+ snippet = builder.generateTextureGatherCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, offsetSnippet, flipYSnippet );
514
+
515
+ } else {
516
+
517
+ snippet = builder.generateTextureGather( texture, textureProperty, uvSnippet, gatherSnippet, depthSnippet, offsetSnippet, flipYSnippet );
518
+
519
+ }
520
+
458
521
  } else if ( compareSnippet ) {
459
522
 
460
523
  snippet = builder.generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, offsetSnippet );
@@ -503,25 +566,60 @@ class TextureNode extends UniformNode {
503
566
 
504
567
  const nodeData = builder.getDataFromNode( this );
505
568
 
569
+ let nodeType = this.getNodeType( builder );
570
+
506
571
  let propertyName = nodeData.propertyName;
507
572
 
508
573
  if ( propertyName === undefined ) {
509
574
 
510
- const { uvNode, levelNode, biasNode, compareNode, depthNode, gradNode, offsetNode } = properties;
575
+ const { uvNode, levelNode, biasNode, compareNode, compareStepNode, depthNode, gradNode, gatherNode, offsetNode } = properties;
511
576
 
512
577
  const uvSnippet = this.generateUV( builder, uvNode );
513
578
  const levelSnippet = levelNode ? levelNode.build( builder, 'float' ) : null;
514
579
  const biasSnippet = biasNode ? biasNode.build( builder, 'float' ) : null;
515
580
  const depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;
516
581
  const compareSnippet = compareNode ? compareNode.build( builder, 'float' ) : null;
582
+ const compareStepSnippet = compareStepNode ? compareStepNode.build( builder, 'float' ) : null;
517
583
  const gradSnippet = gradNode ? [ gradNode[ 0 ].build( builder, 'vec2' ), gradNode[ 1 ].build( builder, 'vec2' ) ] : null;
584
+ const gatherSnippet = gatherNode ? gatherNode.build( builder, 'int' ) : null;
518
585
  const offsetSnippet = offsetNode ? this.generateOffset( builder, offsetNode ) : null;
586
+ const flipYSnippet = this._flipYUniform ? this._flipYUniform.build( builder, 'bool' ) : null;
587
+
588
+ if ( gatherSnippet ) {
589
+
590
+ nodeType = 'vec4';
591
+
592
+ }
593
+
594
+ let finalDepthSnippet = depthSnippet;
595
+
596
+ if ( finalDepthSnippet === null && texture.isArrayTexture && this.isTexture3DNode !== true ) {
597
+
598
+ finalDepthSnippet = '0';
599
+
600
+ }
519
601
 
520
602
  const nodeVar = builder.getVarFromNode( this );
521
603
 
522
604
  propertyName = builder.getPropertyName( nodeVar );
523
605
 
524
- const snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, offsetSnippet );
606
+ let snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, finalDepthSnippet, compareSnippet, gradSnippet, gatherSnippet, offsetSnippet, flipYSnippet );
607
+
608
+ if ( compareStepSnippet !== null ) {
609
+
610
+ const compareFunction = texture.compareFunction;
611
+
612
+ if ( compareFunction === GreaterCompare || compareFunction === GreaterEqualCompare ) {
613
+
614
+ snippet = step( expression( snippet, nodeType ), expression( compareStepSnippet, 'float' ) ).build( builder, nodeType );
615
+
616
+ } else {
617
+
618
+ snippet = step( expression( compareStepSnippet, 'float' ), expression( snippet, nodeType ) ).build( builder, nodeType );
619
+
620
+ }
621
+
622
+ }
525
623
 
526
624
  builder.addLineFlowCode( `${propertyName} = ${snippet}`, this );
527
625
 
@@ -531,7 +629,6 @@ class TextureNode extends UniformNode {
531
629
  }
532
630
 
533
631
  let snippet = propertyName;
534
- const nodeType = this.getNodeType( builder );
535
632
 
536
633
  if ( builder.needsToWorkingColorSpace( texture ) ) {
537
634
 
@@ -572,21 +669,6 @@ class TextureNode extends UniformNode {
572
669
 
573
670
  // @TODO: Move to TSL
574
671
 
575
- /**
576
- * @function
577
- * @deprecated since r172. Use {@link TextureNode#sample} instead.
578
- *
579
- * @param {Node} uvNode - The uv node.
580
- * @return {TextureNode} A texture node representing the texture sample.
581
- */
582
- uv( uvNode ) { // @deprecated, r172
583
-
584
- warn( 'TextureNode: .uv() has been renamed. Use .sample() instead.' );
585
-
586
- return this.sample( uvNode );
587
-
588
- }
589
-
590
672
  /**
591
673
  * Samples the texture with the given uv node.
592
674
  *
@@ -728,6 +810,22 @@ class TextureNode extends UniformNode {
728
810
 
729
811
  }
730
812
 
813
+ /**
814
+ * Gathers four texels from the texture.
815
+ *
816
+ * @param {Node<int>} gatherNode - The index of the channel to read. This must be in range [0, 3] and a compile-time constant.
817
+ * @return {TextureNode} A texture node representing the texture sample.
818
+ */
819
+ gather( gatherNode = 0 ) {
820
+
821
+ const textureNode = this.clone();
822
+ textureNode.gatherNode = nodeObject( gatherNode );
823
+ textureNode.referenceNode = this.getBase();
824
+
825
+ return nodeObject( textureNode );
826
+
827
+ }
828
+
731
829
  /**
732
830
  * Samples the texture by defining a depth node.
733
831
  *
@@ -824,6 +922,7 @@ class TextureNode extends UniformNode {
824
922
  newNode.depthNode = this.depthNode;
825
923
  newNode.compareNode = this.compareNode;
826
924
  newNode.gradNode = this.gradNode;
925
+ newNode.gatherNode = this.gatherNode;
827
926
  newNode.offsetNode = this.offsetNode;
828
927
 
829
928
  return newNode;
@@ -41,7 +41,7 @@ class UniformArrayElementNode extends ArrayElementNode {
41
41
  generate( builder ) {
42
42
 
43
43
  const snippet = super.generate( builder );
44
- const type = this.getNodeType();
44
+ const type = this.getNodeType( builder );
45
45
  const paddedType = this.node.getPaddedType();
46
46
 
47
47
  return builder.format( snippet, paddedType, type );
@@ -135,7 +135,7 @@ class UniformArrayNode extends BufferNode {
135
135
  * @param {NodeBuilder} builder - The current node builder.
136
136
  * @return {string} The node type.
137
137
  */
138
- getNodeType( /*builder*/ ) {
138
+ generateNodeType( /*builder*/ ) {
139
139
 
140
140
  return this.paddedType;
141
141
 
@@ -315,6 +315,8 @@ class UniformArrayNode extends BufferNode {
315
315
  this.bufferCount = length;
316
316
  this.bufferType = paddedType;
317
317
 
318
+ this.update(); // initialize the buffer values
319
+
318
320
  return super.setup( builder );
319
321
 
320
322
  }
@@ -328,7 +330,7 @@ class UniformArrayNode extends BufferNode {
328
330
  */
329
331
  element( indexNode ) {
330
332
 
331
- return nodeObject( new UniformArrayElementNode( this, nodeObject( indexNode ) ) );
333
+ return new UniformArrayElementNode( this, nodeObject( indexNode ) );
332
334
 
333
335
  }
334
336
 
@@ -345,4 +347,4 @@ export default UniformArrayNode;
345
347
  * @param {?string} [nodeType] - The data type of the array elements.
346
348
  * @returns {UniformArrayNode}
347
349
  */
348
- export const uniformArray = ( values, nodeType ) => nodeObject( new UniformArrayNode( values, nodeType ) );
350
+ export const uniformArray = ( values, nodeType ) => new UniformArrayNode( values, nodeType );
@@ -1,5 +1,4 @@
1
1
  import ReferenceNode from './ReferenceNode.js';
2
- import { nodeObject } from '../tsl/TSLBase.js';
3
2
 
4
3
  /**
5
4
  * A special type of reference node that allows to link values in
@@ -74,4 +73,4 @@ export default UserDataNode;
74
73
  * @param {?Object} userData - A reference to the `userData` object. If not provided, the `userData` property of the 3D object that uses the node material is evaluated.
75
74
  * @returns {UserDataNode}
76
75
  */
77
- export const userData = ( name, inputType, userData ) => nodeObject( new UserDataNode( name, inputType, userData ) );
76
+ export const userData = ( name, inputType, userData ) => new UserDataNode( name, inputType, userData );
@@ -1,5 +1,4 @@
1
1
  import AttributeNode from '../core/AttributeNode.js';
2
- import { nodeObject } from '../tsl/TSLBase.js';
3
2
  import { Vector4 } from '../../math/Vector4.js';
4
3
 
5
4
  /**
@@ -107,4 +106,4 @@ export default VertexColorNode;
107
106
  * @param {number} [index=0] - The attribute index.
108
107
  * @returns {VertexColorNode}
109
108
  */
110
- export const vertexColor = ( index = 0 ) => nodeObject( new VertexColorNode( index ) );
109
+ export const vertexColor = ( index = 0 ) => new VertexColorNode( index );
@@ -76,7 +76,7 @@ class FunctionCallNode extends TempNode {
76
76
  * @param {NodeBuilder} builder - The current node builder.
77
77
  * @returns {string} The type of this node.
78
78
  */
79
- getNodeType( builder ) {
79
+ generateNodeType( builder ) {
80
80
 
81
81
  return this.functionNode.getNodeType( builder );
82
82
 
@@ -1,5 +1,5 @@
1
1
  import CodeNode from './CodeNode.js';
2
- import { nodeObject } from '../tsl/TSLBase.js';
2
+ import { nodeProxyConstructor } from '../tsl/TSLCore.js';
3
3
 
4
4
  /**
5
5
  * This class represents a native shader function. It can be used to implement
@@ -54,7 +54,7 @@ class FunctionNode extends CodeNode {
54
54
  * @param {NodeBuilder} builder - The current node builder.
55
55
  * @return {string} The type.
56
56
  */
57
- getNodeType( builder ) {
57
+ generateNodeType( builder ) {
58
58
 
59
59
  return this.getNodeFunction( builder ).type;
60
60
 
@@ -156,26 +156,11 @@ export default FunctionNode;
156
156
 
157
157
  const nativeFn = ( code, includes = [], language = '' ) => {
158
158
 
159
- for ( let i = 0; i < includes.length; i ++ ) {
160
-
161
- const include = includes[ i ];
162
-
163
- // TSL Function: glslFn, wgslFn
164
-
165
- if ( typeof include === 'function' ) {
166
-
167
- includes[ i ] = include.functionNode;
168
-
169
- }
170
-
171
- }
172
-
173
- const functionNode = nodeObject( new FunctionNode( code, includes, language ) );
159
+ const functionNode = new FunctionNode( code, includes, language );
174
160
 
175
161
  const fn = ( ...params ) => functionNode.call( ...params );
176
- fn.functionNode = functionNode;
177
162
 
178
- return fn;
163
+ return nodeProxyConstructor( fn, functionNode );
179
164
 
180
165
  };
181
166
 
@@ -77,11 +77,11 @@ class ArrayNode extends TempNode {
77
77
  * @param {NodeBuilder} builder - The current node builder.
78
78
  * @return {string} The type of the node.
79
79
  */
80
- getNodeType( builder ) {
80
+ generateNodeType( builder ) {
81
81
 
82
82
  if ( this.nodeType === null ) {
83
83
 
84
- this.nodeType = this.values[ 0 ].getNodeType( builder );
84
+ return this.values[ 0 ].getNodeType( builder );
85
85
 
86
86
  }
87
87
 
@@ -101,6 +101,25 @@ class ArrayNode extends TempNode {
101
101
 
102
102
  }
103
103
 
104
+ /**
105
+ * Returns the type of a member variable.
106
+ *
107
+ * @param {NodeBuilder} builder - The current node builder.
108
+ * @param {string} name - The name of the member variable.
109
+ * @return {string} The type of the member variable.
110
+ */
111
+ getMemberType( builder, name ) {
112
+
113
+ if ( this.nodeType === null ) {
114
+
115
+ return this.values[ 0 ].getMemberType( builder, name );
116
+
117
+ }
118
+
119
+ return super.getMemberType( builder, name );
120
+
121
+ }
122
+
104
123
  /**
105
124
  * This method builds the output node and returns the resulting array as a shader string.
106
125
  *
@@ -63,7 +63,7 @@ class AssignNode extends TempNode {
63
63
 
64
64
  }
65
65
 
66
- getNodeType( builder, output ) {
66
+ generateNodeType( builder, output ) {
67
67
 
68
68
  return output !== 'void' ? this.targetNode.getNodeType( builder ) : 'void';
69
69
 
@@ -99,8 +99,8 @@ class AssignNode extends TempNode {
99
99
 
100
100
  const scope = targetNode.getScope();
101
101
 
102
- const targetProperties = builder.getNodeProperties( scope );
103
- targetProperties.assign = true;
102
+ const scopeData = builder.getDataFromNode( scope );
103
+ scopeData.assign = true;
104
104
 
105
105
  const properties = builder.getNodeProperties( this );
106
106
  properties.sourceNode = sourceNode;
@@ -1,5 +1,5 @@
1
1
  import Node from './Node.js';
2
- import { nodeObject, varying } from '../tsl/TSLBase.js';
2
+ import { varying } from '../tsl/TSLBase.js';
3
3
  import { warn } from '../../utils.js';
4
4
 
5
5
  /**
@@ -43,7 +43,7 @@ class AttributeNode extends Node {
43
43
 
44
44
  }
45
45
 
46
- getNodeType( builder ) {
46
+ generateNodeType( builder ) {
47
47
 
48
48
  let nodeType = this.nodeType;
49
49
 
@@ -165,4 +165,4 @@ export default AttributeNode;
165
165
  * @param {?string} [nodeType=null] - The node type.
166
166
  * @returns {AttributeNode}
167
167
  */
168
- export const attribute = ( name, nodeType = null ) => nodeObject( new AttributeNode( name, nodeType ) );
168
+ export const attribute = ( name, nodeType = null ) => new AttributeNode( name, nodeType );
@@ -55,7 +55,7 @@ class BypassNode extends Node {
55
55
 
56
56
  }
57
57
 
58
- getNodeType( builder ) {
58
+ generateNodeType( builder ) {
59
59
 
60
60
  return this.outputNode.getNodeType( builder );
61
61
 
@@ -1,5 +1,5 @@
1
1
  import Node from './Node.js';
2
- import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
2
+ import { addMethodChaining } from '../tsl/TSLCore.js';
3
3
  import { warn } from '../../utils.js';
4
4
 
5
5
  /**
@@ -9,6 +9,12 @@ import { warn } from '../../utils.js';
9
9
  *
10
10
  * ```js
11
11
  *node.context( { getUV: () => customCoord } );
12
+ *\// or
13
+ *material.contextNode = context( { getUV: () => customCoord } );
14
+ *\// or
15
+ *renderer.contextNode = context( { getUV: () => customCoord } );
16
+ *\// or
17
+ *scenePass.contextNode = context( { getUV: () => customCoord } );
12
18
  *```
13
19
  * @augments Node
14
20
  */
@@ -26,7 +32,7 @@ class ContextNode extends Node {
26
32
  * @param {Node} node - The node whose context should be modified.
27
33
  * @param {Object} [value={}] - The modified context data.
28
34
  */
29
- constructor( node, value = {} ) {
35
+ constructor( node = null, value = {} ) {
30
36
 
31
37
  super();
32
38
 
@@ -73,12 +79,35 @@ class ContextNode extends Node {
73
79
  * @param {NodeBuilder} builder - The current node builder.
74
80
  * @return {string} The node type.
75
81
  */
76
- getNodeType( builder ) {
82
+ generateNodeType( builder ) {
77
83
 
78
84
  return this.node.getNodeType( builder );
79
85
 
80
86
  }
81
87
 
88
+ /**
89
+ * Gathers the context data from all parent context nodes.
90
+ *
91
+ * @return {Object} The gathered context data.
92
+ */
93
+ getFlowContextData() {
94
+
95
+ const children = [];
96
+
97
+ this.traverse( ( node ) => {
98
+
99
+ if ( node.isContextNode === true ) {
100
+
101
+ children.push( node.value );
102
+
103
+ }
104
+
105
+ } );
106
+
107
+ return Object.assign( {}, ...children );
108
+
109
+ }
110
+
82
111
  /**
83
112
  * This method is overwritten to ensure it returns the member type of {@link ContextNode#node}.
84
113
  *
@@ -133,11 +162,24 @@ export default ContextNode;
133
162
  *
134
163
  * @tsl
135
164
  * @function
136
- * @param {Node} node - The node whose context should be modified.
165
+ * @param {Node|Object} [nodeOrValue={}] - The node whose context should be modified or the modified context data.
137
166
  * @param {Object} [value={}] - The modified context data.
138
167
  * @returns {ContextNode}
139
168
  */
140
- export const context = /*@__PURE__*/ nodeProxy( ContextNode ).setParameterLength( 1, 2 );
169
+ export const context = ( nodeOrValue = null, value = {} ) => {
170
+
171
+ let node = nodeOrValue;
172
+
173
+ if ( node === null || node.isNode !== true ) {
174
+
175
+ value = node || value;
176
+ node = null;
177
+
178
+ }
179
+
180
+ return new ContextNode( node, value );
181
+
182
+ };
141
183
 
142
184
  /**
143
185
  * TSL function for defining a uniformFlow context value for a given node.
@@ -160,6 +202,61 @@ export const uniformFlow = ( node ) => context( node, { uniformFlow: true } );
160
202
  */
161
203
  export const setName = ( node, name ) => context( node, { nodeName: name } );
162
204
 
205
+ /**
206
+ * TSL function for defining a built-in shadow context for a given node.
207
+ *
208
+ * @tsl
209
+ * @function
210
+ * @param {ShadowNode} shadowNode - The shadow node representing the light's shadow.
211
+ * @param {Light} light - The light associated with the shadow.
212
+ * @param {Node} [node=null] - The node whose context should be modified.
213
+ * @returns {ContextNode}
214
+ */
215
+ export function builtinShadowContext( shadowNode, light, node = null ) {
216
+
217
+ return context( node, {
218
+
219
+ getShadow: ( { light: shadowLight, shadowColorNode } ) => {
220
+
221
+ if ( light === shadowLight ) {
222
+
223
+ return shadowColorNode.mul( shadowNode );
224
+
225
+ }
226
+
227
+ return shadowColorNode;
228
+
229
+ }
230
+
231
+ } );
232
+
233
+ }
234
+
235
+ /**
236
+ * TSL function for defining a built-in ambient occlusion context for a given node.
237
+ *
238
+ * @tsl
239
+ * @function
240
+ * @param {Node} aoNode - The ambient occlusion value node to apply.
241
+ * @param {Node} [node=null] - The node whose context should be modified.
242
+ * @returns {ContextNode}
243
+ */
244
+ export function builtinAOContext( aoNode, node = null ) {
245
+
246
+ return context( node, {
247
+
248
+ getAO: ( inputNode, { material } ) => {
249
+
250
+ if ( material.transparent === true ) return inputNode;
251
+
252
+ return inputNode !== null ? inputNode.mul( aoNode ) : aoNode;
253
+
254
+ }
255
+
256
+ } );
257
+
258
+ }
259
+
163
260
  /**
164
261
  * TSL function for defining a label context value for a given node.
165
262
  *
@@ -182,3 +279,5 @@ addMethodChaining( 'context', context );
182
279
  addMethodChaining( 'label', label );
183
280
  addMethodChaining( 'uniformFlow', uniformFlow );
184
281
  addMethodChaining( 'setName', setName );
282
+ addMethodChaining( 'builtinShadowContext', ( node, shadowNode, light ) => builtinShadowContext( shadowNode, light, node ) );
283
+ addMethodChaining( 'builtinAOContext', ( node, aoValue ) => builtinAOContext( aoValue, node ) );
@@ -1,5 +1,6 @@
1
1
  import Node from './Node.js';
2
- import { nodeImmutable, varying } from '../tsl/TSLBase.js';
2
+ import { nodeImmutable } from '../tsl/TSLCore.js';
3
+ import { varying } from './VaryingNode.js';
3
4
 
4
5
  /**
5
6
  * This class represents shader indices of different types. The following predefined node
@@ -51,7 +51,7 @@ class InputNode extends Node {
51
51
 
52
52
  }
53
53
 
54
- getNodeType( /*builder*/ ) {
54
+ generateNodeType( /*builder*/ ) {
55
55
 
56
56
  if ( this.nodeType === null ) {
57
57
 
@@ -72,7 +72,7 @@ class InspectorNode extends Node {
72
72
  * @param {NodeBuilder} builder - The node builder.
73
73
  * @returns {string}
74
74
  */
75
- getNodeType( builder ) {
75
+ generateNodeType( builder ) {
76
76
 
77
77
  return this.node.getNodeType( builder );
78
78
 
@@ -53,7 +53,7 @@ class IsolateNode extends Node {
53
53
 
54
54
  }
55
55
 
56
- getNodeType( builder ) {
56
+ generateNodeType( builder ) {
57
57
 
58
58
  const previousCache = builder.getCache();
59
59
  const cache = builder.getCacheFromNode( this, this.parent );