super-three 0.181.0 → 0.184.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +13152 -11354
  4. package/build/three.core.js +12319 -11539
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1808 -781
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +27 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +10523 -6263
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +10484 -6262
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +11 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +7 -4
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +58 -54
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +34 -2
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  26. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  27. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  28. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  29. package/examples/jsm/exporters/EXRExporter.js +1 -1
  30. package/examples/jsm/exporters/GLTFExporter.js +152 -9
  31. package/examples/jsm/exporters/USDZExporter.js +22 -3
  32. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  33. package/examples/jsm/geometries/TextGeometry.js +18 -0
  34. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  36. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  37. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  38. package/examples/jsm/helpers/ViewHelper.js +67 -8
  39. package/examples/jsm/inspector/Extension.js +13 -0
  40. package/examples/jsm/inspector/Inspector.js +203 -88
  41. package/examples/jsm/inspector/RendererInspector.js +14 -4
  42. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  43. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  44. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  45. package/examples/jsm/inspector/tabs/Console.js +41 -7
  46. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  47. package/examples/jsm/inspector/tabs/Parameters.js +51 -3
  48. package/examples/jsm/inspector/tabs/Performance.js +4 -4
  49. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  50. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  51. package/examples/jsm/inspector/tabs/Viewer.js +107 -5
  52. package/examples/jsm/inspector/ui/Graph.js +2 -2
  53. package/examples/jsm/inspector/ui/List.js +1 -1
  54. package/examples/jsm/inspector/ui/Profiler.js +1936 -34
  55. package/examples/jsm/inspector/ui/Style.js +1044 -31
  56. package/examples/jsm/inspector/ui/Tab.js +222 -3
  57. package/examples/jsm/inspector/ui/Values.js +55 -2
  58. package/examples/jsm/inspector/ui/utils.js +13 -0
  59. package/examples/jsm/interaction/InteractionManager.js +226 -0
  60. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  61. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  62. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  63. package/examples/jsm/lines/LineMaterial.js +7 -1
  64. package/examples/jsm/loaders/3DMLoader.js +5 -4
  65. package/examples/jsm/loaders/3MFLoader.js +2 -2
  66. package/examples/jsm/loaders/AMFLoader.js +2 -2
  67. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  68. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  69. package/examples/jsm/loaders/EXRLoader.js +687 -48
  70. package/examples/jsm/loaders/FBXLoader.js +235 -37
  71. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  72. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  73. package/examples/jsm/loaders/HDRLoader.js +1 -2
  74. package/examples/jsm/loaders/KMZLoader.js +5 -5
  75. package/examples/jsm/loaders/KTX2Loader.js +27 -5
  76. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  77. package/examples/jsm/loaders/LWOLoader.js +7 -39
  78. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  79. package/examples/jsm/loaders/PCDLoader.js +4 -2
  80. package/examples/jsm/loaders/SVGLoader.js +2 -2
  81. package/examples/jsm/loaders/TDSLoader.js +0 -2
  82. package/examples/jsm/loaders/TGALoader.js +0 -2
  83. package/examples/jsm/loaders/USDLoader.js +100 -40
  84. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  85. package/examples/jsm/loaders/VOXLoader.js +660 -117
  86. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  87. package/examples/jsm/loaders/VTKLoader.js +42 -25
  88. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  89. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  90. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  91. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  92. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  93. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  94. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  95. package/examples/jsm/math/Octree.js +131 -1
  96. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  97. package/examples/jsm/misc/RollerCoaster.js +42 -4
  98. package/examples/jsm/misc/Volume.js +0 -1
  99. package/examples/jsm/misc/VolumeSlice.js +0 -1
  100. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  101. package/examples/jsm/objects/LensflareMesh.js +1 -1
  102. package/examples/jsm/objects/Reflector.js +73 -25
  103. package/examples/jsm/objects/Sky.js +90 -6
  104. package/examples/jsm/objects/SkyMesh.js +150 -16
  105. package/examples/jsm/objects/Water.js +4 -3
  106. package/examples/jsm/objects/Water2.js +5 -3
  107. package/examples/jsm/objects/WaterMesh.js +5 -7
  108. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  109. package/examples/jsm/physics/JoltPhysics.js +10 -6
  110. package/examples/jsm/physics/RapierPhysics.js +9 -5
  111. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  112. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  113. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  114. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  115. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  116. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  117. package/examples/jsm/renderers/Projector.js +246 -28
  118. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  119. package/examples/jsm/shaders/GTAOShader.js +19 -6
  120. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  122. package/examples/jsm/shaders/SAOShader.js +17 -4
  123. package/examples/jsm/shaders/SSAOShader.js +11 -1
  124. package/examples/jsm/shaders/SSRShader.js +6 -5
  125. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  126. package/examples/jsm/shaders/VignetteShader.js +1 -1
  127. package/examples/jsm/transpiler/AST.js +44 -0
  128. package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  130. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  131. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  132. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  133. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  134. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  135. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  136. package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
  137. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  138. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  139. package/examples/jsm/tsl/display/CRT.js +150 -0
  140. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  141. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  142. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  143. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  144. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  145. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  146. package/examples/jsm/tsl/display/GTAONode.js +6 -4
  147. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  148. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  149. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  150. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  151. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  152. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  153. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  154. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  155. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  156. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  157. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  158. package/examples/jsm/tsl/display/SSGINode.js +8 -24
  159. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  160. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  161. package/examples/jsm/tsl/display/Shape.js +29 -0
  162. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  163. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  164. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  165. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  166. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  167. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  168. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  169. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  170. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  171. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  172. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  173. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  174. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  175. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  176. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  177. package/examples/jsm/tsl/math/Bayer.js +53 -3
  178. package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
  179. package/examples/jsm/utils/ColorUtils.js +76 -0
  180. package/examples/jsm/utils/LDrawUtils.js +1 -1
  181. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  182. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  183. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  186. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  187. package/package.json +24 -30
  188. package/src/Three.Core.js +3 -1
  189. package/src/Three.TSL.js +25 -11
  190. package/src/Three.WebGPU.Nodes.js +5 -0
  191. package/src/Three.WebGPU.js +9 -0
  192. package/src/Three.js +1 -0
  193. package/src/animation/AnimationAction.js +12 -2
  194. package/src/animation/AnimationClip.js +1 -1
  195. package/src/animation/AnimationMixer.js +6 -0
  196. package/src/animation/AnimationUtils.js +1 -12
  197. package/src/animation/KeyframeTrack.js +47 -8
  198. package/src/animation/PropertyMixer.js +4 -4
  199. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  200. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  201. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  202. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  203. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  204. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  205. package/src/audio/Audio.js +1 -1
  206. package/src/audio/AudioContext.js +2 -2
  207. package/src/audio/AudioListener.js +5 -3
  208. package/src/cameras/Camera.js +32 -2
  209. package/src/cameras/CubeCamera.js +20 -0
  210. package/src/constants.js +90 -5
  211. package/src/core/BufferAttribute.js +13 -1
  212. package/src/core/BufferGeometry.js +14 -2
  213. package/src/core/Clock.js +7 -0
  214. package/src/core/Object3D.js +52 -4
  215. package/src/core/Raycaster.js +2 -2
  216. package/src/core/RenderTarget.js +4 -4
  217. package/src/extras/PMREMGenerator.js +7 -18
  218. package/src/extras/TextureUtils.js +5 -1
  219. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  220. package/src/geometries/ExtrudeGeometry.js +2 -2
  221. package/src/geometries/PolyhedronGeometry.js +1 -1
  222. package/src/geometries/TorusGeometry.js +8 -3
  223. package/src/helpers/CameraHelper.js +3 -0
  224. package/src/helpers/DirectionalLightHelper.js +4 -1
  225. package/src/helpers/HemisphereLightHelper.js +3 -0
  226. package/src/helpers/PointLightHelper.js +1 -25
  227. package/src/helpers/SpotLightHelper.js +3 -0
  228. package/src/lights/DirectionalLight.js +13 -0
  229. package/src/lights/HemisphereLight.js +10 -0
  230. package/src/lights/Light.js +1 -11
  231. package/src/lights/LightProbe.js +0 -15
  232. package/src/lights/LightShadow.js +15 -6
  233. package/src/lights/PointLight.js +15 -0
  234. package/src/lights/PointLightShadow.js +0 -86
  235. package/src/lights/SpotLight.js +22 -1
  236. package/src/lights/webgpu/IESSpotLight.js +2 -1
  237. package/src/loaders/AudioLoader.js +11 -1
  238. package/src/loaders/Cache.js +28 -0
  239. package/src/loaders/DataTextureLoader.js +6 -4
  240. package/src/loaders/FileLoader.js +2 -3
  241. package/src/loaders/ImageBitmapLoader.js +12 -9
  242. package/src/loaders/Loader.js +6 -0
  243. package/src/loaders/MaterialLoader.js +3 -2
  244. package/src/loaders/ObjectLoader.js +46 -6
  245. package/src/loaders/nodes/NodeLoader.js +2 -2
  246. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  247. package/src/materials/Material.js +2 -0
  248. package/src/materials/MeshLambertMaterial.js +9 -0
  249. package/src/materials/MeshPhongMaterial.js +9 -0
  250. package/src/materials/MeshToonMaterial.js +1 -1
  251. package/src/materials/ShaderMaterial.js +20 -1
  252. package/src/materials/nodes/Line2NodeMaterial.js +34 -7
  253. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  254. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  255. package/src/materials/nodes/NodeMaterial.js +45 -25
  256. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
  257. package/src/math/Line3.js +6 -5
  258. package/src/math/MathUtils.js +10 -10
  259. package/src/math/Matrix2.js +13 -9
  260. package/src/math/Matrix3.js +13 -9
  261. package/src/math/Matrix4.js +87 -74
  262. package/src/math/Plane.js +4 -3
  263. package/src/math/Quaternion.js +3 -29
  264. package/src/math/Sphere.js +1 -1
  265. package/src/math/Triangle.js +1 -1
  266. package/src/math/Vector2.js +11 -7
  267. package/src/math/Vector3.js +15 -13
  268. package/src/math/Vector4.js +13 -9
  269. package/src/math/interpolants/BezierInterpolant.js +108 -0
  270. package/src/nodes/Nodes.js +86 -68
  271. package/src/nodes/TSL.js +7 -7
  272. package/src/nodes/accessors/Arrays.js +1 -1
  273. package/src/nodes/accessors/BatchNode.js +10 -10
  274. package/src/nodes/accessors/Bitangent.js +5 -5
  275. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  276. package/src/nodes/accessors/BufferNode.js +29 -2
  277. package/src/nodes/accessors/Camera.js +149 -28
  278. package/src/nodes/accessors/ClippingNode.js +4 -4
  279. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  280. package/src/nodes/accessors/InstanceNode.js +148 -43
  281. package/src/nodes/accessors/MaterialNode.js +9 -1
  282. package/src/nodes/accessors/MaterialProperties.js +2 -5
  283. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  284. package/src/nodes/accessors/ModelNode.js +1 -1
  285. package/src/nodes/accessors/Normal.js +11 -11
  286. package/src/nodes/accessors/Object3DNode.js +1 -1
  287. package/src/nodes/accessors/Position.js +34 -2
  288. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  289. package/src/nodes/accessors/ReferenceNode.js +8 -8
  290. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  291. package/src/nodes/accessors/SceneProperties.js +47 -0
  292. package/src/nodes/accessors/SkinningNode.js +27 -26
  293. package/src/nodes/accessors/StorageBufferNode.js +14 -25
  294. package/src/nodes/accessors/StorageTextureNode.js +40 -9
  295. package/src/nodes/accessors/Tangent.js +4 -14
  296. package/src/nodes/accessors/Texture3DNode.js +32 -35
  297. package/src/nodes/accessors/TextureNode.js +67 -23
  298. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  299. package/src/nodes/accessors/UserDataNode.js +1 -2
  300. package/src/nodes/accessors/VertexColorNode.js +1 -2
  301. package/src/nodes/code/FunctionCallNode.js +1 -1
  302. package/src/nodes/code/FunctionNode.js +2 -3
  303. package/src/nodes/core/ArrayNode.js +21 -2
  304. package/src/nodes/core/AssignNode.js +3 -3
  305. package/src/nodes/core/AttributeNode.js +3 -3
  306. package/src/nodes/core/BypassNode.js +1 -1
  307. package/src/nodes/core/ContextNode.js +104 -5
  308. package/src/nodes/core/IndexNode.js +2 -1
  309. package/src/nodes/core/InputNode.js +1 -1
  310. package/src/nodes/core/InspectorNode.js +1 -1
  311. package/src/nodes/core/IsolateNode.js +1 -1
  312. package/src/nodes/core/MRTNode.js +48 -2
  313. package/src/nodes/core/Node.js +112 -15
  314. package/src/nodes/core/NodeBuilder.js +284 -66
  315. package/src/nodes/core/NodeError.js +28 -0
  316. package/src/nodes/core/NodeFrame.js +12 -4
  317. package/src/nodes/core/NodeUtils.js +11 -9
  318. package/src/nodes/core/OutputStructNode.js +12 -10
  319. package/src/nodes/core/ParameterNode.js +4 -4
  320. package/src/nodes/core/PropertyNode.js +19 -3
  321. package/src/nodes/core/StackNode.js +66 -17
  322. package/src/nodes/core/StackTrace.js +139 -0
  323. package/src/nodes/core/StructNode.js +17 -3
  324. package/src/nodes/core/StructTypeNode.js +12 -18
  325. package/src/nodes/core/SubBuildNode.js +2 -2
  326. package/src/nodes/core/UniformGroupNode.js +36 -6
  327. package/src/nodes/core/UniformNode.js +21 -5
  328. package/src/nodes/core/VarNode.js +48 -23
  329. package/src/nodes/core/VaryingNode.js +2 -19
  330. package/src/nodes/display/BlendModes.js +0 -64
  331. package/src/nodes/display/ColorAdjustment.js +17 -0
  332. package/src/nodes/display/ColorSpaceNode.js +3 -3
  333. package/src/nodes/display/NormalMapNode.js +39 -4
  334. package/src/nodes/display/PassNode.js +125 -16
  335. package/src/nodes/display/RenderOutputNode.js +7 -7
  336. package/src/nodes/display/ScreenNode.js +4 -2
  337. package/src/nodes/display/ToneMappingNode.js +1 -1
  338. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  339. package/src/nodes/display/ViewportDepthNode.js +52 -4
  340. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  341. package/src/nodes/display/ViewportTextureNode.js +39 -11
  342. package/src/nodes/fog/Fog.js +18 -35
  343. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  344. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  345. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  346. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  347. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  348. package/src/nodes/geometry/RangeNode.js +5 -3
  349. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  350. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  351. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  352. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  353. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  354. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  355. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  356. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  357. package/src/nodes/lighting/LightsNode.js +7 -28
  358. package/src/nodes/lighting/PointShadowNode.js +162 -149
  359. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  360. package/src/nodes/lighting/ShadowNode.js +120 -42
  361. package/src/nodes/math/BitcastNode.js +1 -1
  362. package/src/nodes/math/BitcountNode.js +433 -0
  363. package/src/nodes/math/ConditionalNode.js +3 -3
  364. package/src/nodes/math/MathNode.js +76 -41
  365. package/src/nodes/math/OperatorNode.js +3 -2
  366. package/src/nodes/math/PackFloatNode.js +98 -0
  367. package/src/nodes/math/UnpackFloatNode.js +96 -0
  368. package/src/nodes/pmrem/PMREMNode.js +1 -1
  369. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  370. package/src/nodes/tsl/TSLBase.js +1 -1
  371. package/src/nodes/tsl/TSLCore.js +38 -17
  372. package/src/nodes/utils/ArrayElementNode.js +14 -1
  373. package/src/nodes/utils/ConvertNode.js +1 -1
  374. package/src/nodes/utils/DebugNode.js +12 -12
  375. package/src/nodes/utils/EventNode.js +31 -2
  376. package/src/nodes/utils/FlipNode.js +1 -1
  377. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  378. package/src/nodes/utils/JoinNode.js +3 -3
  379. package/src/nodes/utils/LoopNode.js +1 -1
  380. package/src/nodes/utils/MemberNode.js +2 -2
  381. package/src/nodes/utils/Packing.js +13 -1
  382. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  383. package/src/nodes/utils/RTTNode.js +1 -1
  384. package/src/nodes/utils/ReflectorNode.js +3 -4
  385. package/src/nodes/utils/Remap.js +48 -0
  386. package/src/nodes/utils/RotateNode.js +1 -1
  387. package/src/nodes/utils/SampleNode.js +1 -1
  388. package/src/nodes/utils/SetNode.js +1 -1
  389. package/src/nodes/utils/SplitNode.js +1 -1
  390. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  391. package/src/nodes/utils/UVUtils.js +28 -0
  392. package/src/objects/BatchedMesh.js +44 -16
  393. package/src/objects/InstancedMesh.js +30 -3
  394. package/src/objects/Line.js +1 -1
  395. package/src/objects/Mesh.js +1 -1
  396. package/src/objects/Points.js +1 -1
  397. package/src/objects/Skeleton.js +9 -0
  398. package/src/objects/SkinnedMesh.js +26 -9
  399. package/src/renderers/WebGLRenderer.js +329 -145
  400. package/src/renderers/common/Animation.js +3 -3
  401. package/src/renderers/common/Attributes.js +15 -1
  402. package/src/renderers/common/Backend.js +29 -8
  403. package/src/renderers/common/Background.js +26 -13
  404. package/src/renderers/common/BindGroup.js +1 -16
  405. package/src/renderers/common/Binding.js +11 -0
  406. package/src/renderers/common/Bindings.js +29 -14
  407. package/src/renderers/common/BlendMode.js +143 -0
  408. package/src/renderers/common/Buffer.js +40 -0
  409. package/src/renderers/common/BundleGroup.js +1 -1
  410. package/src/renderers/common/ChainMap.js +30 -6
  411. package/src/renderers/common/ComputePipeline.js +1 -1
  412. package/src/renderers/common/CubeRenderTarget.js +51 -7
  413. package/src/renderers/common/Geometries.js +29 -3
  414. package/src/renderers/common/Info.js +333 -4
  415. package/src/renderers/common/InspectorBase.js +6 -1
  416. package/src/renderers/common/Lighting.js +5 -21
  417. package/src/renderers/common/Pipelines.js +40 -7
  418. package/src/renderers/common/PostProcessing.js +8 -206
  419. package/src/renderers/common/ReadbackBuffer.js +78 -0
  420. package/src/renderers/common/RenderBundle.js +3 -1
  421. package/src/renderers/common/RenderBundles.js +7 -3
  422. package/src/renderers/common/RenderContext.js +16 -0
  423. package/src/renderers/common/RenderContexts.js +33 -49
  424. package/src/renderers/common/RenderLists.js +2 -1
  425. package/src/renderers/common/RenderObject.js +17 -5
  426. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  427. package/src/renderers/common/RenderObjects.js +21 -5
  428. package/src/renderers/common/RenderPipeline.js +232 -17
  429. package/src/renderers/common/Renderer.js +481 -117
  430. package/src/renderers/common/Sampler.js +4 -4
  431. package/src/renderers/common/StorageBuffer.js +13 -1
  432. package/src/renderers/common/Textures.js +89 -4
  433. package/src/renderers/common/TimestampQueryPool.js +5 -3
  434. package/src/renderers/common/Uniform.js +8 -0
  435. package/src/renderers/common/UniformsGroup.js +62 -1
  436. package/src/renderers/common/XRManager.js +37 -29
  437. package/src/renderers/common/extras/PMREMGenerator.js +25 -23
  438. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  439. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
  440. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  441. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  442. package/src/renderers/shaders/DFGLUTData.js +19 -34
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  444. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  445. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  446. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  447. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  448. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  449. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  450. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  451. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  452. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  453. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  454. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  455. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  456. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  457. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  458. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  459. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  461. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  462. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  463. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  464. package/src/renderers/shaders/ShaderChunk.js +5 -3
  465. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  466. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  467. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  468. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  469. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  470. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  472. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  473. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  474. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  475. package/src/renderers/shaders/ShaderLib.js +7 -6
  476. package/src/renderers/shaders/UniformsLib.js +7 -5
  477. package/src/renderers/shaders/UniformsUtils.js +27 -5
  478. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  479. package/src/renderers/webgl/WebGLBackground.js +15 -15
  480. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  481. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  482. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  483. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  484. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  485. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  486. package/src/renderers/webgl/WebGLLights.js +18 -1
  487. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  488. package/src/renderers/webgl/WebGLObjects.js +3 -1
  489. package/src/renderers/webgl/WebGLOutput.js +270 -0
  490. package/src/renderers/webgl/WebGLProgram.js +49 -109
  491. package/src/renderers/webgl/WebGLPrograms.js +63 -51
  492. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  493. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  494. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  495. package/src/renderers/webgl/WebGLState.js +75 -37
  496. package/src/renderers/webgl/WebGLTextures.js +215 -54
  497. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  498. package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
  499. package/src/renderers/webgl/WebGLUtils.js +6 -2
  500. package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
  501. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  504. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
  507. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  508. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  509. package/src/renderers/webgpu/WebGPUBackend.js +260 -140
  510. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  511. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
  512. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
  513. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  514. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  515. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  516. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  517. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
  519. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  520. package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
  521. package/src/renderers/webxr/WebXRController.js +12 -0
  522. package/src/renderers/webxr/WebXRManager.js +4 -2
  523. package/src/textures/CubeDepthTexture.js +76 -0
  524. package/src/textures/HTMLTexture.js +74 -0
  525. package/src/textures/Source.js +2 -2
  526. package/src/textures/Texture.js +16 -5
  527. package/src/utils.js +280 -3
  528. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  529. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  530. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  531. package/src/nodes/accessors/SceneNode.js +0 -145
  532. package/src/nodes/code/ScriptableNode.js +0 -726
  533. package/src/nodes/code/ScriptableValueNode.js +0 -253
  534. package/src/nodes/display/PosterizeNode.js +0 -65
  535. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  536. package/src/nodes/utils/RemapNode.js +0 -125
  537. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  538. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  539. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -11,17 +11,7 @@ import { directionToFaceDirection } from '../display/FrontFacingNode.js';
11
11
  * @tsl
12
12
  * @type {Node<vec4>}
13
13
  */
14
- export const tangentGeometry = /*@__PURE__*/ Fn( ( builder ) => {
15
-
16
- if ( builder.geometry.hasAttribute( 'tangent' ) === false ) {
17
-
18
- builder.geometry.computeTangents();
19
-
20
- }
21
-
22
- return attribute( 'tangent', 'vec4' );
23
-
24
- } )();
14
+ export const tangentGeometry = /*@__PURE__*/ attribute( 'tangent', 'vec4' );
25
15
 
26
16
  /**
27
17
  * TSL object that represents the vertex tangent in local space of the current rendered object.
@@ -37,11 +27,11 @@ export const tangentLocal = /*@__PURE__*/ tangentGeometry.xyz.toVar( 'tangentLoc
37
27
  * @tsl
38
28
  * @type {Node<vec3>}
39
29
  */
40
- export const tangentView = /*@__PURE__*/ ( Fn( ( { subBuildFn, geometry, material } ) => {
30
+ export const tangentView = /*@__PURE__*/ ( Fn( ( builder ) => {
41
31
 
42
32
  let node;
43
33
 
44
- if ( subBuildFn === 'VERTEX' || geometry.hasAttribute( 'tangent' ) ) {
34
+ if ( builder.subBuildFn === 'VERTEX' || builder.geometry.hasAttribute( 'tangent' ) ) {
45
35
 
46
36
  node = modelViewMatrix.mul( vec4( tangentLocal, 0 ) ).xyz.toVarying( 'v_tangentView' ).normalize();
47
37
 
@@ -51,7 +41,7 @@ export const tangentView = /*@__PURE__*/ ( Fn( ( { subBuildFn, geometry, materia
51
41
 
52
42
  }
53
43
 
54
- if ( material.flatShading !== true ) {
44
+ if ( builder.isFlatShading() !== true ) {
55
45
 
56
46
  node = directionToFaceDirection( node );
57
47
 
@@ -1,6 +1,5 @@
1
1
  import TextureNode from './TextureNode.js';
2
- import { nodeProxy, vec3, Fn, If, int } from '../tsl/TSLBase.js';
3
- import { textureSize } from './TextureSizeNode.js';
2
+ import { nodeProxy, vec3, Fn, If } from '../tsl/TSLBase.js';
4
3
 
5
4
  const normal = Fn( ( { texture, uv } ) => {
6
5
 
@@ -115,35 +114,6 @@ class Texture3DNode extends TextureNode {
115
114
  */
116
115
  setUpdateMatrix( /*value*/ ) { } // Ignore .updateMatrix for 3d TextureNode
117
116
 
118
- /**
119
- * Overwrites the default implementation to return the unmodified uv node.
120
- *
121
- * @param {NodeBuilder} builder - The current node builder.
122
- * @param {Node} uvNode - The uv node to setup.
123
- * @return {Node} The unmodified uv node.
124
- */
125
- setupUV( builder, uvNode ) {
126
-
127
- const texture = this.value;
128
-
129
- if ( builder.isFlipY() && ( texture.isRenderTargetTexture === true || texture.isFramebufferTexture === true ) ) {
130
-
131
- if ( this.sampler ) {
132
-
133
- uvNode = uvNode.flipY();
134
-
135
- } else {
136
-
137
- uvNode = uvNode.setY( int( textureSize( this, this.levelNode ).y ).sub( uvNode.y ).sub( 1 ) );
138
-
139
- }
140
-
141
- }
142
-
143
- return uvNode;
144
-
145
- }
146
-
147
117
  /**
148
118
  * Generates the uv code snippet.
149
119
  *
@@ -171,10 +141,12 @@ class Texture3DNode extends TextureNode {
171
141
  }
172
142
 
173
143
  /**
174
- * TODO.
144
+ * Computes the normal for the given uv. These texture coordiantes represent a
145
+ * position inside the 3D texture. Unlike geometric normals, this normal
146
+ * represents a slope or gradient of scalar data inside the 3D texture.
175
147
  *
176
- * @param {Node<vec3>} uvNode - The uv node .
177
- * @return {Node<vec3>} TODO.
148
+ * @param {Node<vec3>} uvNode - The uv node that defines a position in the 3D texture.
149
+ * @return {Node<vec3>} The normal representing the slope/gradient in the data.
178
150
  */
179
151
  normal( uvNode ) {
180
152
 
@@ -192,8 +164,33 @@ export default Texture3DNode;
192
164
  * @tsl
193
165
  * @function
194
166
  * @param {Data3DTexture} value - The 3D texture.
195
- * @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
167
+ * @param {?Node<vec3>} [uvNode=null] - The uv node.
196
168
  * @param {?Node<int>} [levelNode=null] - The level node.
197
169
  * @returns {Texture3DNode}
198
170
  */
199
171
  export const texture3D = /*@__PURE__*/ nodeProxy( Texture3DNode ).setParameterLength( 1, 3 );
172
+
173
+ /**
174
+ * TSL function for creating a texture node that fetches/loads texels without interpolation.
175
+ *
176
+ * @tsl
177
+ * @function
178
+ * @param {?(Texture|TextureNode)} [value=EmptyTexture] - The texture.
179
+ * @param {?Node<vec3>} [uvNode=null] - The uv node.
180
+ * @param {?Node<int>} [levelNode=null] - The level node.
181
+ * @param {?Node<float>} [biasNode=null] - The bias node.
182
+ * @returns {TextureNode}
183
+ */
184
+ export const texture3DLoad = ( ...params ) => texture3D( ...params ).setSampler( false );
185
+
186
+ /**
187
+ * TSL function for creating a texture node that fetches/loads texels without interpolation.
188
+ *
189
+ * @tsl
190
+ * @function
191
+ * @param {?(Texture|TextureNode)} [value=EmptyTexture] - The texture.
192
+ * @param {?Node<vec3>} [uvNode=null] - The uv node.
193
+ * @param {?Node<int>} [levelNode=null] - The level node.
194
+ * @returns {TextureNode}
195
+ */
196
+ export const texture3DLevel = ( value, uvNode, levelNode ) => texture3D( value, uvNode ).level( levelNode );
@@ -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
 
@@ -214,7 +217,7 @@ class TextureNode extends UniformNode {
214
217
  * @param {NodeBuilder} builder - The current node builder.
215
218
  * @return {string} The node type.
216
219
  */
217
- getNodeType( /*builder*/ ) {
220
+ generateNodeType( /*builder*/ ) {
218
221
 
219
222
  if ( this.value.isDepthTexture === true ) return 'float';
220
223
 
@@ -343,7 +346,7 @@ class TextureNode extends UniformNode {
343
346
 
344
347
  if ( ! texture || texture.isTexture !== true ) {
345
348
 
346
- throw new Error( 'THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().' );
349
+ throw new NodeError( 'THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().', this.stackTrace );
347
350
 
348
351
  }
349
352
 
@@ -391,10 +394,40 @@ class TextureNode extends UniformNode {
391
394
 
392
395
  //
393
396
 
397
+ let compareNode = null;
398
+ let compareStepNode = null;
399
+
400
+ if ( this.compareNode !== null ) {
401
+
402
+ if ( builder.renderer.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {
403
+
404
+ compareNode = this.compareNode;
405
+
406
+ } else {
407
+
408
+ const compareFunction = texture.compareFunction;
409
+
410
+ if ( compareFunction === null || compareFunction === LessCompare || compareFunction === LessEqualCompare || compareFunction === GreaterCompare || compareFunction === GreaterEqualCompare ) {
411
+
412
+ compareStepNode = this.compareNode;
413
+
414
+ } else {
415
+
416
+ compareNode = this.compareNode;
417
+
418
+ warnOnce( 'TSL: Only "LessCompare", "LessEqualCompare", "GreaterCompare" and "GreaterEqualCompare" are supported for depth texture comparison fallback.' );
419
+
420
+ }
421
+
422
+ }
423
+
424
+ }
425
+
394
426
  properties.uvNode = uvNode;
395
427
  properties.levelNode = levelNode;
396
428
  properties.biasNode = this.biasNode;
397
- properties.compareNode = this.compareNode;
429
+ properties.compareNode = compareNode;
430
+ properties.compareStepNode = compareStepNode;
398
431
  properties.gradNode = this.gradNode;
399
432
  properties.depthNode = this.depthNode;
400
433
  properties.offsetNode = this.offsetNode;
@@ -503,25 +536,52 @@ class TextureNode extends UniformNode {
503
536
 
504
537
  const nodeData = builder.getDataFromNode( this );
505
538
 
539
+ const nodeType = this.getNodeType( builder );
540
+
506
541
  let propertyName = nodeData.propertyName;
507
542
 
508
543
  if ( propertyName === undefined ) {
509
544
 
510
- const { uvNode, levelNode, biasNode, compareNode, depthNode, gradNode, offsetNode } = properties;
545
+ const { uvNode, levelNode, biasNode, compareNode, compareStepNode, depthNode, gradNode, offsetNode } = properties;
511
546
 
512
547
  const uvSnippet = this.generateUV( builder, uvNode );
513
548
  const levelSnippet = levelNode ? levelNode.build( builder, 'float' ) : null;
514
549
  const biasSnippet = biasNode ? biasNode.build( builder, 'float' ) : null;
515
550
  const depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;
516
551
  const compareSnippet = compareNode ? compareNode.build( builder, 'float' ) : null;
552
+ const compareStepSnippet = compareStepNode ? compareStepNode.build( builder, 'float' ) : null;
517
553
  const gradSnippet = gradNode ? [ gradNode[ 0 ].build( builder, 'vec2' ), gradNode[ 1 ].build( builder, 'vec2' ) ] : null;
518
554
  const offsetSnippet = offsetNode ? this.generateOffset( builder, offsetNode ) : null;
519
555
 
556
+ let finalDepthSnippet = depthSnippet;
557
+
558
+ if ( finalDepthSnippet === null && texture.isArrayTexture && this.isTexture3DNode !== true ) {
559
+
560
+ finalDepthSnippet = '0';
561
+
562
+ }
563
+
520
564
  const nodeVar = builder.getVarFromNode( this );
521
565
 
522
566
  propertyName = builder.getPropertyName( nodeVar );
523
567
 
524
- const snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, offsetSnippet );
568
+ let snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, finalDepthSnippet, compareSnippet, gradSnippet, offsetSnippet );
569
+
570
+ if ( compareStepSnippet !== null ) {
571
+
572
+ const compareFunction = texture.compareFunction;
573
+
574
+ if ( compareFunction === GreaterCompare || compareFunction === GreaterEqualCompare ) {
575
+
576
+ snippet = step( expression( snippet, nodeType ), expression( compareStepSnippet, 'float' ) ).build( builder, nodeType );
577
+
578
+ } else {
579
+
580
+ snippet = step( expression( compareStepSnippet, 'float' ), expression( snippet, nodeType ) ).build( builder, nodeType );
581
+
582
+ }
583
+
584
+ }
525
585
 
526
586
  builder.addLineFlowCode( `${propertyName} = ${snippet}`, this );
527
587
 
@@ -531,7 +591,6 @@ class TextureNode extends UniformNode {
531
591
  }
532
592
 
533
593
  let snippet = propertyName;
534
- const nodeType = this.getNodeType( builder );
535
594
 
536
595
  if ( builder.needsToWorkingColorSpace( texture ) ) {
537
596
 
@@ -572,21 +631,6 @@ class TextureNode extends UniformNode {
572
631
 
573
632
  // @TODO: Move to TSL
574
633
 
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
634
  /**
591
635
  * Samples the texture with the given uv node.
592
636
  *
@@ -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,4 @@
1
1
  import CodeNode from './CodeNode.js';
2
- import { nodeObject } from '../tsl/TSLBase.js';
3
2
 
4
3
  /**
5
4
  * This class represents a native shader function. It can be used to implement
@@ -54,7 +53,7 @@ class FunctionNode extends CodeNode {
54
53
  * @param {NodeBuilder} builder - The current node builder.
55
54
  * @return {string} The type.
56
55
  */
57
- getNodeType( builder ) {
56
+ generateNodeType( builder ) {
58
57
 
59
58
  return this.getNodeFunction( builder ).type;
60
59
 
@@ -170,7 +169,7 @@ const nativeFn = ( code, includes = [], language = '' ) => {
170
169
 
171
170
  }
172
171
 
173
- const functionNode = nodeObject( new FunctionNode( code, includes, language ) );
172
+ const functionNode = new FunctionNode( code, includes, language );
174
173
 
175
174
  const fn = ( ...params ) => functionNode.call( ...params );
176
175
  fn.functionNode = functionNode;
@@ -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 );