super-three 0.177.0 → 0.181.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 (501) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +1994 -749
  3. package/build/three.core.js +1358 -506
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +631 -247
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +113 -33
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +9571 -3424
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +9397 -3426
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  14. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  15. package/examples/jsm/Addons.js +2 -3
  16. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  17. package/examples/jsm/capabilities/WebGL.js +0 -27
  18. package/examples/jsm/capabilities/WebGPU.js +1 -1
  19. package/examples/jsm/controls/ArcballControls.js +9 -9
  20. package/examples/jsm/controls/DragControls.js +7 -57
  21. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  22. package/examples/jsm/controls/FlyControls.js +1 -1
  23. package/examples/jsm/controls/OrbitControls.js +2 -2
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +1 -1
  26. package/examples/jsm/controls/TransformControls.js +62 -15
  27. package/examples/jsm/csm/CSMShadowNode.js +4 -4
  28. package/examples/jsm/effects/AsciiEffect.js +8 -8
  29. package/examples/jsm/environments/RoomEnvironment.js +8 -3
  30. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  31. package/examples/jsm/exporters/EXRExporter.js +1 -1
  32. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  33. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  34. package/examples/jsm/exporters/PLYExporter.js +1 -1
  35. package/examples/jsm/exporters/USDZExporter.js +683 -299
  36. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  37. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  38. package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
  39. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  40. package/examples/jsm/geometries/TextGeometry.js +3 -2
  41. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  42. package/examples/jsm/helpers/ViewHelper.js +43 -5
  43. package/examples/jsm/inspector/Inspector.js +427 -0
  44. package/examples/jsm/inspector/RendererInspector.js +415 -0
  45. package/examples/jsm/inspector/tabs/Console.js +204 -0
  46. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  47. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  48. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  49. package/examples/jsm/inspector/ui/Graph.js +95 -0
  50. package/examples/jsm/inspector/ui/Item.js +170 -0
  51. package/examples/jsm/inspector/ui/List.js +75 -0
  52. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  53. package/examples/jsm/inspector/ui/Style.js +654 -0
  54. package/examples/jsm/inspector/ui/Tab.js +46 -0
  55. package/examples/jsm/inspector/ui/Values.js +423 -0
  56. package/examples/jsm/inspector/ui/utils.js +56 -0
  57. package/examples/jsm/interactive/HTMLMesh.js +11 -13
  58. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  59. package/examples/jsm/interactive/SelectionBox.js +30 -0
  60. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  61. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  62. package/examples/jsm/lights/LightProbeGenerator.js +14 -3
  63. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  64. package/examples/jsm/lines/Line2.js +3 -3
  65. package/examples/jsm/lines/LineGeometry.js +1 -1
  66. package/examples/jsm/lines/LineSegments2.js +2 -2
  67. package/examples/jsm/lines/Wireframe.js +2 -2
  68. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  69. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  70. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  71. package/examples/jsm/loaders/3MFLoader.js +1 -1
  72. package/examples/jsm/loaders/ColladaLoader.js +4 -4
  73. package/examples/jsm/loaders/DDSLoader.js +1 -1
  74. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  75. package/examples/jsm/loaders/EXRLoader.js +210 -22
  76. package/examples/jsm/loaders/FBXLoader.js +4 -4
  77. package/examples/jsm/loaders/FontLoader.js +23 -5
  78. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  79. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  80. package/examples/jsm/loaders/HDRLoader.js +486 -0
  81. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  82. package/examples/jsm/loaders/KTXLoader.js +2 -2
  83. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  84. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  85. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  86. package/examples/jsm/loaders/LWOLoader.js +2 -2
  87. package/examples/jsm/loaders/MaterialXLoader.js +233 -34
  88. package/examples/jsm/loaders/OBJLoader.js +1 -1
  89. package/examples/jsm/loaders/PDBLoader.js +1 -1
  90. package/examples/jsm/loaders/RGBELoader.js +7 -473
  91. package/examples/jsm/loaders/SVGLoader.js +2 -2
  92. package/examples/jsm/loaders/TTFLoader.js +13 -1
  93. package/examples/jsm/loaders/USDLoader.js +219 -0
  94. package/examples/jsm/loaders/USDZLoader.js +4 -892
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  96. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  97. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  98. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  99. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  100. package/examples/jsm/math/ColorSpaces.js +19 -1
  101. package/examples/jsm/math/ConvexHull.js +3 -3
  102. package/examples/jsm/math/ImprovedNoise.js +1 -1
  103. package/examples/jsm/math/Lut.js +2 -2
  104. package/examples/jsm/math/SimplexNoise.js +1 -1
  105. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  106. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  107. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  108. package/examples/jsm/misc/TubePainter.js +383 -40
  109. package/examples/jsm/misc/Volume.js +1 -1
  110. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  111. package/examples/jsm/objects/LensflareMesh.js +3 -3
  112. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  113. package/examples/jsm/objects/Sky.js +1 -1
  114. package/examples/jsm/objects/SkyMesh.js +3 -3
  115. package/examples/jsm/objects/Water.js +3 -3
  116. package/examples/jsm/objects/WaterMesh.js +6 -6
  117. package/examples/jsm/physics/RapierPhysics.js +95 -16
  118. package/examples/jsm/postprocessing/GTAOPass.js +10 -9
  119. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  120. package/examples/jsm/postprocessing/OutlinePass.js +17 -17
  121. package/examples/jsm/postprocessing/SSAOPass.js +10 -9
  122. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  123. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  124. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  125. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  126. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  127. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  128. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  129. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  130. package/examples/jsm/shaders/BokehShader.js +1 -1
  131. package/examples/jsm/shaders/BokehShader2.js +1 -1
  132. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  133. package/examples/jsm/shaders/FocusShader.js +1 -1
  134. package/examples/jsm/shaders/GTAOShader.js +2 -2
  135. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  136. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  137. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  138. package/examples/jsm/shaders/SSRShader.js +1 -1
  139. package/examples/jsm/shaders/SepiaShader.js +1 -1
  140. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  141. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  142. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
  143. package/examples/jsm/shaders/VignetteShader.js +1 -1
  144. package/examples/jsm/transpiler/AST.js +381 -30
  145. package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
  146. package/examples/jsm/transpiler/Linker.js +327 -0
  147. package/examples/jsm/transpiler/TSLEncoder.js +196 -92
  148. package/examples/jsm/transpiler/Transpiler.js +17 -1
  149. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  150. package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  151. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  152. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  153. package/examples/jsm/tsl/display/BloomNode.js +11 -6
  154. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  155. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  156. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  157. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  158. package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
  159. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  160. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  161. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  162. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  163. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  164. package/examples/jsm/tsl/display/TRAANode.js +578 -0
  165. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  166. package/examples/jsm/tsl/display/hashBlur.js +18 -20
  167. package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
  168. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  169. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  170. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  171. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  172. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  173. package/package.json +5 -10
  174. package/src/Three.Core.js +5 -2
  175. package/src/Three.TSL.js +112 -32
  176. package/src/Three.WebGPU.Nodes.js +2 -0
  177. package/src/Three.WebGPU.js +4 -0
  178. package/src/animation/AnimationClip.js +20 -4
  179. package/src/animation/AnimationMixer.js +3 -3
  180. package/src/animation/AnimationObjectGroup.js +2 -1
  181. package/src/animation/KeyframeTrack.js +8 -7
  182. package/src/animation/PropertyBinding.js +12 -11
  183. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  184. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  185. package/src/audio/Audio.js +10 -9
  186. package/src/audio/PositionalAudio.js +1 -1
  187. package/src/cameras/Camera.js +14 -0
  188. package/src/cameras/OrthographicCamera.js +2 -2
  189. package/src/cameras/PerspectiveCamera.js +2 -2
  190. package/src/cameras/StereoCamera.js +2 -2
  191. package/src/constants.js +13 -5
  192. package/src/core/BufferAttribute.js +3 -3
  193. package/src/core/BufferGeometry.js +10 -10
  194. package/src/core/Clock.js +2 -8
  195. package/src/core/EventDispatcher.js +1 -1
  196. package/src/core/GLBufferAttribute.js +13 -1
  197. package/src/core/InterleavedBuffer.js +1 -1
  198. package/src/core/InterleavedBufferAttribute.js +3 -2
  199. package/src/core/Object3D.js +4 -3
  200. package/src/core/Raycaster.js +2 -1
  201. package/src/core/RenderTarget.js +10 -1
  202. package/{examples/jsm/misc → src/core}/Timer.js +4 -42
  203. package/src/extras/Controls.js +5 -4
  204. package/src/extras/DataUtils.js +2 -1
  205. package/src/extras/Earcut.js +6 -0
  206. package/src/extras/ImageUtils.js +2 -2
  207. package/src/extras/PMREMGenerator.js +279 -55
  208. package/src/extras/TextureUtils.js +2 -1
  209. package/src/extras/core/Curve.js +2 -1
  210. package/src/extras/core/Interpolations.js +7 -1
  211. package/src/extras/core/Path.js +22 -22
  212. package/src/extras/core/ShapePath.js +4 -4
  213. package/src/extras/lib/earcut.js +8 -8
  214. package/src/geometries/BoxGeometry.js +1 -0
  215. package/src/geometries/CapsuleGeometry.js +1 -0
  216. package/src/geometries/CircleGeometry.js +1 -0
  217. package/src/geometries/ConeGeometry.js +1 -0
  218. package/src/geometries/CylinderGeometry.js +1 -0
  219. package/src/geometries/DodecahedronGeometry.js +1 -0
  220. package/src/geometries/ExtrudeGeometry.js +8 -6
  221. package/src/geometries/IcosahedronGeometry.js +1 -0
  222. package/src/geometries/LatheGeometry.js +1 -0
  223. package/src/geometries/OctahedronGeometry.js +1 -0
  224. package/src/geometries/PlaneGeometry.js +1 -0
  225. package/src/geometries/RingGeometry.js +1 -0
  226. package/src/geometries/ShapeGeometry.js +1 -0
  227. package/src/geometries/SphereGeometry.js +1 -0
  228. package/src/geometries/TetrahedronGeometry.js +1 -0
  229. package/src/geometries/TorusGeometry.js +1 -0
  230. package/src/geometries/TorusKnotGeometry.js +1 -0
  231. package/src/geometries/TubeGeometry.js +1 -0
  232. package/src/helpers/CameraHelper.js +42 -12
  233. package/src/helpers/SkeletonHelper.js +35 -6
  234. package/src/lights/LightShadow.js +21 -8
  235. package/src/lights/PointLightShadow.js +1 -1
  236. package/src/lights/webgpu/ProjectorLight.js +1 -1
  237. package/src/loaders/AnimationLoader.js +2 -1
  238. package/src/loaders/AudioLoader.js +2 -1
  239. package/src/loaders/BufferGeometryLoader.js +2 -2
  240. package/src/loaders/Cache.js +2 -2
  241. package/src/loaders/DataTextureLoader.js +1 -1
  242. package/src/loaders/FileLoader.js +29 -5
  243. package/src/loaders/ImageBitmapLoader.js +32 -8
  244. package/src/loaders/ImageLoader.js +56 -9
  245. package/src/loaders/Loader.js +17 -3
  246. package/src/loaders/LoadingManager.js +45 -0
  247. package/src/loaders/MaterialLoader.js +3 -2
  248. package/src/loaders/ObjectLoader.js +13 -13
  249. package/src/loaders/TextureLoader.js +1 -1
  250. package/src/loaders/nodes/NodeLoader.js +3 -2
  251. package/src/materials/Material.js +16 -3
  252. package/src/materials/MeshBasicMaterial.js +2 -1
  253. package/src/materials/MeshDepthMaterial.js +1 -0
  254. package/src/materials/MeshDistanceMaterial.js +1 -1
  255. package/src/materials/MeshLambertMaterial.js +2 -1
  256. package/src/materials/MeshMatcapMaterial.js +22 -0
  257. package/src/materials/MeshNormalMaterial.js +1 -0
  258. package/src/materials/MeshPhongMaterial.js +2 -1
  259. package/src/materials/MeshPhysicalMaterial.js +2 -1
  260. package/src/materials/MeshStandardMaterial.js +8 -7
  261. package/src/materials/MeshToonMaterial.js +1 -0
  262. package/src/materials/PointsMaterial.js +1 -1
  263. package/src/materials/ShaderMaterial.js +2 -2
  264. package/src/materials/nodes/Line2NodeMaterial.js +2 -10
  265. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  266. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  267. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  268. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  269. package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
  270. package/src/materials/nodes/NodeMaterial.js +90 -27
  271. package/src/materials/nodes/PointsNodeMaterial.js +86 -28
  272. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  273. package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
  274. package/src/math/Color.js +6 -5
  275. package/src/math/ColorManagement.js +9 -3
  276. package/src/math/Cylindrical.js +1 -1
  277. package/src/math/Euler.js +2 -1
  278. package/src/math/Frustum.js +25 -9
  279. package/src/math/FrustumArray.js +10 -5
  280. package/src/math/Line3.js +129 -2
  281. package/src/math/MathUtils.js +13 -11
  282. package/src/math/Matrix2.js +1 -1
  283. package/src/math/Matrix3.js +2 -2
  284. package/src/math/Matrix4.js +55 -34
  285. package/src/math/Plane.js +1 -1
  286. package/src/math/Quaternion.js +69 -67
  287. package/src/math/Spherical.js +3 -3
  288. package/src/nodes/Nodes.js +6 -4
  289. package/src/nodes/TSL.js +9 -4
  290. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  291. package/src/nodes/accessors/Bitangent.js +31 -25
  292. package/src/nodes/accessors/BufferNode.js +1 -1
  293. package/src/nodes/accessors/Camera.js +142 -16
  294. package/src/nodes/accessors/ClippingNode.js +6 -5
  295. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  296. package/src/nodes/accessors/InstanceNode.js +25 -5
  297. package/src/nodes/accessors/Lights.js +10 -0
  298. package/src/nodes/accessors/Normal.js +97 -30
  299. package/src/nodes/accessors/Object3DNode.js +2 -2
  300. package/src/nodes/accessors/Position.js +25 -9
  301. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  302. package/src/nodes/accessors/ReferenceNode.js +20 -4
  303. package/src/nodes/accessors/ReflectVector.js +3 -3
  304. package/src/nodes/accessors/SceneNode.js +3 -2
  305. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  306. package/src/nodes/accessors/StorageTextureNode.js +23 -1
  307. package/src/nodes/accessors/Tangent.js +25 -17
  308. package/src/nodes/accessors/TangentUtils.js +46 -0
  309. package/src/nodes/accessors/Texture3DNode.js +14 -1
  310. package/src/nodes/accessors/TextureBicubic.js +21 -3
  311. package/src/nodes/accessors/TextureNode.js +142 -44
  312. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  313. package/src/nodes/code/FunctionCallNode.js +24 -4
  314. package/src/nodes/code/FunctionNode.js +23 -0
  315. package/src/nodes/core/ArrayNode.js +13 -0
  316. package/src/nodes/core/AssignNode.js +6 -2
  317. package/src/nodes/core/AttributeNode.js +2 -1
  318. package/src/nodes/core/ContextNode.js +48 -10
  319. package/src/nodes/core/IndexNode.js +2 -2
  320. package/src/nodes/core/InputNode.js +2 -1
  321. package/src/nodes/core/InspectorNode.js +128 -0
  322. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
  323. package/src/nodes/core/Node.js +167 -34
  324. package/src/nodes/core/NodeBuilder.js +404 -120
  325. package/src/nodes/core/NodeFrame.js +21 -21
  326. package/src/nodes/core/NodeFunction.js +2 -1
  327. package/src/nodes/core/NodeParser.js +2 -1
  328. package/src/nodes/core/NodeUniform.js +1 -1
  329. package/src/nodes/core/NodeUtils.js +17 -88
  330. package/src/nodes/core/ParameterNode.js +31 -0
  331. package/src/nodes/core/PropertyNode.js +7 -0
  332. package/src/nodes/core/StackNode.js +77 -30
  333. package/src/nodes/core/StructNode.js +5 -5
  334. package/src/nodes/core/StructTypeNode.js +1 -0
  335. package/src/nodes/core/SubBuildNode.js +89 -0
  336. package/src/nodes/core/UniformNode.js +80 -14
  337. package/src/nodes/core/VarNode.js +142 -16
  338. package/src/nodes/core/VaryingNode.js +9 -6
  339. package/src/nodes/display/BlendModes.js +7 -6
  340. package/src/nodes/display/BumpMapNode.js +1 -1
  341. package/src/nodes/display/ColorAdjustment.js +1 -1
  342. package/src/nodes/display/FrontFacingNode.js +35 -7
  343. package/src/nodes/display/NormalMapNode.js +20 -50
  344. package/src/nodes/display/PassNode.js +206 -17
  345. package/src/nodes/display/RenderOutputNode.js +28 -2
  346. package/src/nodes/display/ScreenNode.js +44 -40
  347. package/src/nodes/display/ToneMappingNode.js +31 -4
  348. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  349. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  350. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  351. package/src/nodes/display/ViewportTextureNode.js +94 -4
  352. package/src/nodes/fog/Fog.js +3 -2
  353. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  354. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  355. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  356. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  357. package/src/nodes/functions/BasicLightingModel.js +2 -1
  358. package/src/nodes/functions/PhongLightingModel.js +3 -3
  359. package/src/nodes/functions/PhysicalLightingModel.js +19 -18
  360. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  361. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  362. package/src/nodes/geometry/RangeNode.js +40 -4
  363. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  364. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  365. package/src/nodes/gpgpu/ComputeNode.js +81 -25
  366. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  367. package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
  368. package/src/nodes/lighting/EnvironmentNode.js +11 -11
  369. package/src/nodes/lighting/LightsNode.js +7 -8
  370. package/src/nodes/lighting/PointShadowNode.js +6 -0
  371. package/src/nodes/lighting/ProjectorLightNode.js +19 -6
  372. package/src/nodes/lighting/ShadowFilterNode.js +3 -1
  373. package/src/nodes/lighting/ShadowNode.js +77 -10
  374. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  375. package/src/nodes/materialx/lib/mx_noise.js +165 -1
  376. package/src/nodes/math/BitcastNode.js +156 -0
  377. package/src/nodes/math/ConditionalNode.js +25 -27
  378. package/src/nodes/math/MathNode.js +106 -65
  379. package/src/nodes/math/OperatorNode.js +28 -43
  380. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  381. package/src/nodes/shapes/Shapes.js +1 -1
  382. package/src/nodes/tsl/TSLBase.js +6 -2
  383. package/src/nodes/tsl/TSLCore.js +546 -186
  384. package/src/nodes/utils/DebugNode.js +3 -2
  385. package/src/nodes/utils/EquirectUV.js +27 -0
  386. package/src/nodes/utils/EventNode.js +119 -0
  387. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  388. package/src/nodes/utils/JoinNode.js +6 -3
  389. package/src/nodes/utils/LoopNode.js +20 -41
  390. package/src/nodes/utils/MatcapUV.js +22 -0
  391. package/src/nodes/utils/MemberNode.js +59 -7
  392. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  393. package/src/nodes/utils/RTTNode.js +33 -6
  394. package/src/nodes/utils/ReflectorNode.js +68 -10
  395. package/src/nodes/utils/SampleNode.js +91 -0
  396. package/src/nodes/utils/SplitNode.js +11 -0
  397. package/src/nodes/utils/Timer.js +0 -47
  398. package/src/nodes/utils/TriplanarTextures.js +65 -0
  399. package/src/objects/BatchedMesh.js +6 -4
  400. package/src/objects/LOD.js +1 -1
  401. package/src/objects/Line.js +2 -1
  402. package/src/objects/LineSegments.js +2 -1
  403. package/src/objects/Skeleton.js +3 -2
  404. package/src/objects/SkinnedMesh.js +3 -1
  405. package/src/objects/Sprite.js +4 -3
  406. package/src/renderers/WebGLRenderer.js +77 -66
  407. package/src/renderers/common/Animation.js +13 -1
  408. package/src/renderers/common/Attributes.js +1 -1
  409. package/src/renderers/common/Backend.js +108 -27
  410. package/src/renderers/common/Background.js +4 -3
  411. package/src/renderers/common/Bindings.js +76 -19
  412. package/src/renderers/common/CanvasTarget.js +341 -0
  413. package/src/renderers/common/ChainMap.js +1 -1
  414. package/src/renderers/common/Color4.js +2 -2
  415. package/src/renderers/common/CubeRenderTarget.js +1 -1
  416. package/src/renderers/common/DataMap.js +1 -1
  417. package/src/renderers/common/Geometries.js +26 -0
  418. package/src/renderers/common/Info.js +4 -2
  419. package/src/renderers/common/InspectorBase.js +146 -0
  420. package/src/renderers/common/Pipelines.js +1 -1
  421. package/src/renderers/common/PostProcessing.js +61 -25
  422. package/src/renderers/common/QuadMesh.js +7 -1
  423. package/src/renderers/common/RenderContext.js +2 -2
  424. package/src/renderers/common/RenderList.js +7 -3
  425. package/src/renderers/common/RenderObject.js +84 -5
  426. package/src/renderers/common/RenderObjects.js +1 -1
  427. package/src/renderers/common/Renderer.js +486 -255
  428. package/src/renderers/common/RendererUtils.js +9 -0
  429. package/src/renderers/common/SampledTexture.js +8 -68
  430. package/src/renderers/common/Sampler.js +117 -0
  431. package/src/renderers/common/Storage3DTexture.js +100 -0
  432. package/src/renderers/common/StorageArrayTexture.js +84 -0
  433. package/src/renderers/common/StorageTexture.js +27 -0
  434. package/src/renderers/common/Textures.js +138 -46
  435. package/src/renderers/common/TimestampQueryPool.js +65 -3
  436. package/src/renderers/common/UniformsGroup.js +2 -1
  437. package/src/renderers/common/XRManager.js +63 -24
  438. package/src/renderers/common/XRRenderTarget.js +21 -4
  439. package/src/renderers/common/extras/PMREMGenerator.js +161 -66
  440. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  441. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  442. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  443. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  444. package/src/renderers/common/nodes/Nodes.js +38 -16
  445. package/src/renderers/shaders/DFGLUTData.js +64 -0
  446. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  447. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  449. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  450. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  451. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  454. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
  455. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  456. package/src/renderers/shaders/UniformsLib.js +1 -0
  457. package/src/renderers/shaders/UniformsUtils.js +25 -4
  458. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  459. package/src/renderers/webgl/WebGLCapabilities.js +4 -3
  460. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  461. package/src/renderers/webgl/WebGLInfo.js +3 -1
  462. package/src/renderers/webgl/WebGLProgram.js +25 -18
  463. package/src/renderers/webgl/WebGLPrograms.js +9 -6
  464. package/src/renderers/webgl/WebGLShadowMap.js +13 -2
  465. package/src/renderers/webgl/WebGLState.js +17 -16
  466. package/src/renderers/webgl/WebGLTextures.js +38 -21
  467. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  468. package/src/renderers/webgl/WebGLUtils.js +3 -2
  469. package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
  470. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
  471. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  472. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  473. package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
  474. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
  475. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  476. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  477. package/src/renderers/webgpu/WebGPUBackend.js +205 -128
  478. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  479. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  480. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
  481. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
  482. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
  483. package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
  484. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
  485. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  486. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
  487. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  488. package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
  489. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  490. package/src/renderers/webxr/WebXRManager.js +89 -13
  491. package/src/textures/ExternalTexture.js +56 -0
  492. package/src/textures/FramebufferTexture.js +2 -2
  493. package/src/textures/Source.js +14 -3
  494. package/src/textures/Texture.js +3 -2
  495. package/src/textures/VideoTexture.js +29 -2
  496. package/src/utils.js +67 -3
  497. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  498. package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
  499. package/src/nodes/utils/EquirectUVNode.js +0 -65
  500. package/src/nodes/utils/MatcapUVNode.js +0 -49
  501. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -4,12 +4,13 @@ import { textureSize } from './TextureSizeNode.js';
4
4
  import { colorSpaceToWorking } from '../display/ColorSpaceNode.js';
5
5
  import { expression } from '../code/ExpressionNode.js';
6
6
  import { maxMipLevel } from '../utils/MaxMipLevelNode.js';
7
- import { nodeProxy, vec3, nodeObject, int } from '../tsl/TSLBase.js';
7
+ import { nodeProxy, vec3, nodeObject, int, Fn } from '../tsl/TSLBase.js';
8
8
  import { NodeUpdateType } from '../core/constants.js';
9
9
 
10
10
  import { IntType, NearestFilter, UnsignedIntType } from '../../constants.js';
11
11
 
12
12
  import { Texture } from '../../textures/Texture.js';
13
+ import { warn } from '../../utils.js';
13
14
 
14
15
  const EmptyTexture = /*@__PURE__*/ new Texture();
15
16
 
@@ -95,6 +96,15 @@ class TextureNode extends UniformNode {
95
96
  */
96
97
  this.gradNode = null;
97
98
 
99
+ /**
100
+ * Represents the optional texel offset applied to the unnormalized texture
101
+ * coordinate before sampling the texture.
102
+ *
103
+ * @type {?Node<ivec2|ivec3>}
104
+ * @default null
105
+ */
106
+ this.offsetNode = null;
107
+
98
108
  /**
99
109
  * Whether texture values should be sampled or fetched.
100
110
  *
@@ -114,9 +124,9 @@ class TextureNode extends UniformNode {
114
124
  this.updateMatrix = false;
115
125
 
116
126
  /**
117
- * By default the `update()` method is not executed. `setUpdateMatrix()`
118
- * sets the value to `frame` when the uv transformation matrix should
119
- * automatically be updated.
127
+ * By default the `update()` method is not executed. Depending on
128
+ * whether a uv transformation matrix and/or flipY is applied, `update()`
129
+ * is executed per object.
120
130
  *
121
131
  * @type {string}
122
132
  * @default 'none'
@@ -144,9 +154,19 @@ class TextureNode extends UniformNode {
144
154
  *
145
155
  * @private
146
156
  * @type {?UniformNode<mat3>}
157
+ * @default null
147
158
  */
148
159
  this._matrixUniform = null;
149
160
 
161
+ /**
162
+ * The uniform node that represents the y-flip. Only required for WebGL.
163
+ *
164
+ * @private
165
+ * @type {?UniformNode<bool>}
166
+ * @default null
167
+ */
168
+ this._flipYUniform = null;
169
+
150
170
  this.setUpdateMatrix( uvNode === null );
151
171
 
152
172
  }
@@ -270,7 +290,6 @@ class TextureNode extends UniformNode {
270
290
  setUpdateMatrix( value ) {
271
291
 
272
292
  this.updateMatrix = value;
273
- this.updateType = value ? NodeUpdateType.OBJECT : NodeUpdateType.NONE;
274
293
 
275
294
  return this;
276
295
 
@@ -286,17 +305,19 @@ class TextureNode extends UniformNode {
286
305
  */
287
306
  setupUV( builder, uvNode ) {
288
307
 
289
- const texture = this.value;
308
+ if ( builder.isFlipY() ) {
290
309
 
291
- if ( builder.isFlipY() && ( ( texture.image instanceof ImageBitmap && texture.flipY === true ) || texture.isRenderTargetTexture === true || texture.isFramebufferTexture === true || texture.isDepthTexture === true ) ) {
310
+ if ( this._flipYUniform === null ) this._flipYUniform = uniform( false );
311
+
312
+ uvNode = uvNode.toVar();
292
313
 
293
314
  if ( this.sampler ) {
294
315
 
295
- uvNode = uvNode.flipY();
316
+ uvNode = this._flipYUniform.select( uvNode.flipY(), uvNode );
296
317
 
297
318
  } else {
298
319
 
299
- uvNode = uvNode.setY( int( textureSize( this, this.levelNode ).y ).sub( uvNode.y ).sub( 1 ) );
320
+ uvNode = this._flipYUniform.select( uvNode.setY( int( textureSize( this, this.levelNode ).y ).sub( uvNode.y ).sub( 1 ) ), uvNode );
300
321
 
301
322
  }
302
323
 
@@ -328,23 +349,35 @@ class TextureNode extends UniformNode {
328
349
 
329
350
  //
330
351
 
331
- let uvNode = this.uvNode;
352
+ const uvNode = Fn( () => {
332
353
 
333
- if ( ( uvNode === null || builder.context.forceUVContext === true ) && builder.context.getUV ) {
354
+ let uvNode = this.uvNode;
334
355
 
335
- uvNode = builder.context.getUV( this, builder );
356
+ if ( ( uvNode === null || builder.context.forceUVContext === true ) && builder.context.getUV ) {
336
357
 
337
- }
358
+ uvNode = builder.context.getUV( this, builder );
338
359
 
339
- if ( ! uvNode ) uvNode = this.getDefaultUV();
360
+ }
340
361
 
341
- if ( this.updateMatrix === true ) {
362
+ if ( ! uvNode ) uvNode = this.getDefaultUV();
342
363
 
343
- uvNode = this.getTransformedUV( uvNode );
364
+ if ( this.updateMatrix === true ) {
344
365
 
345
- }
366
+ uvNode = this.getTransformedUV( uvNode );
346
367
 
347
- uvNode = this.setupUV( builder, uvNode );
368
+ }
369
+
370
+ uvNode = this.setupUV( builder, uvNode );
371
+
372
+ //
373
+
374
+ this.updateType = ( this._matrixUniform !== null || this._flipYUniform !== null ) ? NodeUpdateType.OBJECT : NodeUpdateType.NONE;
375
+
376
+ //
377
+
378
+ return uvNode;
379
+
380
+ } )();
348
381
 
349
382
  //
350
383
 
@@ -364,6 +397,7 @@ class TextureNode extends UniformNode {
364
397
  properties.compareNode = this.compareNode;
365
398
  properties.gradNode = this.gradNode;
366
399
  properties.depthNode = this.depthNode;
400
+ properties.offsetNode = this.offsetNode;
367
401
 
368
402
  }
369
403
 
@@ -380,6 +414,19 @@ class TextureNode extends UniformNode {
380
414
 
381
415
  }
382
416
 
417
+ /**
418
+ * Generates the offset code snippet.
419
+ *
420
+ * @param {NodeBuilder} builder - The current node builder.
421
+ * @param {Node} offsetNode - The offset node to generate code for.
422
+ * @return {string} The generated code snippet.
423
+ */
424
+ generateOffset( builder, offsetNode ) {
425
+
426
+ return offsetNode.build( builder, 'ivec2' );
427
+
428
+ }
429
+
383
430
  /**
384
431
  * Generates the snippet for the texture sampling.
385
432
  *
@@ -391,37 +438,38 @@ class TextureNode extends UniformNode {
391
438
  * @param {?string} depthSnippet - The depth snippet.
392
439
  * @param {?string} compareSnippet - The compare snippet.
393
440
  * @param {?Array<string>} gradSnippet - The grad snippet.
441
+ * @param {?string} offsetSnippet - The offset snippet.
394
442
  * @return {string} The generated code snippet.
395
443
  */
396
- generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet ) {
444
+ generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, offsetSnippet ) {
397
445
 
398
446
  const texture = this.value;
399
447
 
400
448
  let snippet;
401
449
 
402
- if ( levelSnippet ) {
403
-
404
- snippet = builder.generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet );
450
+ if ( biasSnippet ) {
405
451
 
406
- } else if ( biasSnippet ) {
407
-
408
- snippet = builder.generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet );
452
+ snippet = builder.generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, offsetSnippet );
409
453
 
410
454
  } else if ( gradSnippet ) {
411
455
 
412
- snippet = builder.generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet );
456
+ snippet = builder.generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, offsetSnippet );
413
457
 
414
458
  } else if ( compareSnippet ) {
415
459
 
416
- snippet = builder.generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet );
460
+ snippet = builder.generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, offsetSnippet );
417
461
 
418
462
  } else if ( this.sampler === false ) {
419
463
 
420
- snippet = builder.generateTextureLoad( texture, textureProperty, uvSnippet, depthSnippet );
464
+ snippet = builder.generateTextureLoad( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet );
465
+
466
+ } else if ( levelSnippet ) {
467
+
468
+ snippet = builder.generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet );
421
469
 
422
470
  } else {
423
471
 
424
- snippet = builder.generateTexture( texture, textureProperty, uvSnippet, depthSnippet );
472
+ snippet = builder.generateTexture( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet );
425
473
 
426
474
  }
427
475
 
@@ -459,7 +507,7 @@ class TextureNode extends UniformNode {
459
507
 
460
508
  if ( propertyName === undefined ) {
461
509
 
462
- const { uvNode, levelNode, biasNode, compareNode, depthNode, gradNode } = properties;
510
+ const { uvNode, levelNode, biasNode, compareNode, depthNode, gradNode, offsetNode } = properties;
463
511
 
464
512
  const uvSnippet = this.generateUV( builder, uvNode );
465
513
  const levelSnippet = levelNode ? levelNode.build( builder, 'float' ) : null;
@@ -467,12 +515,13 @@ class TextureNode extends UniformNode {
467
515
  const depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;
468
516
  const compareSnippet = compareNode ? compareNode.build( builder, 'float' ) : null;
469
517
  const gradSnippet = gradNode ? [ gradNode[ 0 ].build( builder, 'vec2' ), gradNode[ 1 ].build( builder, 'vec2' ) ] : null;
518
+ const offsetSnippet = offsetNode ? this.generateOffset( builder, offsetNode ) : null;
470
519
 
471
520
  const nodeVar = builder.getVarFromNode( this );
472
521
 
473
522
  propertyName = builder.getPropertyName( nodeVar );
474
523
 
475
- const snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet );
524
+ const snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, offsetSnippet );
476
525
 
477
526
  builder.addLineFlowCode( `${propertyName} = ${snippet}`, this );
478
527
 
@@ -532,7 +581,7 @@ class TextureNode extends UniformNode {
532
581
  */
533
582
  uv( uvNode ) { // @deprecated, r172
534
583
 
535
- console.warn( 'THREE.TextureNode: .uv() has been renamed. Use .sample() instead.' );
584
+ warn( 'TextureNode: .uv() has been renamed. Use .sample() instead.' );
536
585
 
537
586
  return this.sample( uvNode );
538
587
 
@@ -548,12 +597,24 @@ class TextureNode extends UniformNode {
548
597
 
549
598
  const textureNode = this.clone();
550
599
  textureNode.uvNode = nodeObject( uvNode );
551
- textureNode.referenceNode = this.getSelf();
600
+ textureNode.referenceNode = this.getBase();
552
601
 
553
602
  return nodeObject( textureNode );
554
603
 
555
604
  }
556
605
 
606
+ /**
607
+ * TSL function for creating a texture node that fetches/loads texels without interpolation.
608
+ *
609
+ * @param {Node<uvec2>} uvNode - The uv node.
610
+ * @returns {TextureNode} A texture node representing the texture load.
611
+ */
612
+ load( uvNode ) {
613
+
614
+ return this.sample( uvNode ).setSampler( false );
615
+
616
+ }
617
+
557
618
  /**
558
619
  * Samples a blurred version of the texture by defining an internal bias.
559
620
  *
@@ -564,13 +625,13 @@ class TextureNode extends UniformNode {
564
625
 
565
626
  const textureNode = this.clone();
566
627
  textureNode.biasNode = nodeObject( amountNode ).mul( maxMipLevel( textureNode ) );
567
- textureNode.referenceNode = this.getSelf();
628
+ textureNode.referenceNode = this.getBase();
568
629
 
569
630
  const map = textureNode.value;
570
631
 
571
632
  if ( textureNode.generateMipmaps === false && ( map && map.generateMipmaps === false || map.minFilter === NearestFilter || map.magFilter === NearestFilter ) ) {
572
633
 
573
- console.warn( 'THREE.TSL: texture().blur() requires mipmaps and sampling. Use .generateMipmaps=true and .minFilter/.magFilter=THREE.LinearFilter in the Texture.' );
634
+ warn( 'TSL: texture().blur() requires mipmaps and sampling. Use .generateMipmaps=true and .minFilter/.magFilter=THREE.LinearFilter in the Texture.' );
574
635
 
575
636
  textureNode.biasNode = null;
576
637
 
@@ -590,7 +651,7 @@ class TextureNode extends UniformNode {
590
651
 
591
652
  const textureNode = this.clone();
592
653
  textureNode.levelNode = nodeObject( levelNode );
593
- textureNode.referenceNode = this.getSelf();
654
+ textureNode.referenceNode = this.getBase();
594
655
 
595
656
  return nodeObject( textureNode );
596
657
 
@@ -618,12 +679,22 @@ class TextureNode extends UniformNode {
618
679
 
619
680
  const textureNode = this.clone();
620
681
  textureNode.biasNode = nodeObject( biasNode );
621
- textureNode.referenceNode = this.getSelf();
682
+ textureNode.referenceNode = this.getBase();
622
683
 
623
684
  return nodeObject( textureNode );
624
685
 
625
686
  }
626
687
 
688
+ /**
689
+ * Returns the base texture of this node.
690
+ * @return {TextureNode} The base texture node.
691
+ */
692
+ getBase() {
693
+
694
+ return this.referenceNode ? this.referenceNode.getBase() : this;
695
+
696
+ }
697
+
627
698
  /**
628
699
  * Samples the texture by executing a compare operation.
629
700
  *
@@ -634,7 +705,7 @@ class TextureNode extends UniformNode {
634
705
 
635
706
  const textureNode = this.clone();
636
707
  textureNode.compareNode = nodeObject( compareNode );
637
- textureNode.referenceNode = this.getSelf();
708
+ textureNode.referenceNode = this.getBase();
638
709
 
639
710
  return nodeObject( textureNode );
640
711
 
@@ -651,7 +722,7 @@ class TextureNode extends UniformNode {
651
722
 
652
723
  const textureNode = this.clone();
653
724
  textureNode.gradNode = [ nodeObject( gradNodeX ), nodeObject( gradNodeY ) ];
654
- textureNode.referenceNode = this.getSelf();
725
+ textureNode.referenceNode = this.getBase();
655
726
 
656
727
  return nodeObject( textureNode );
657
728
 
@@ -667,7 +738,23 @@ class TextureNode extends UniformNode {
667
738
 
668
739
  const textureNode = this.clone();
669
740
  textureNode.depthNode = nodeObject( depthNode );
670
- textureNode.referenceNode = this.getSelf();
741
+ textureNode.referenceNode = this.getBase();
742
+
743
+ return nodeObject( textureNode );
744
+
745
+ }
746
+
747
+ /**
748
+ * Samples the texture by defining an offset node.
749
+ *
750
+ * @param {Node<ivec2>} offsetNode - The offset node.
751
+ * @return {TextureNode} A texture node representing the texture sample.
752
+ */
753
+ offset( offsetNode ) {
754
+
755
+ const textureNode = this.clone();
756
+ textureNode.offsetNode = nodeObject( offsetNode );
757
+ textureNode.referenceNode = this.getBase();
671
758
 
672
759
  return nodeObject( textureNode );
673
760
 
@@ -713,6 +800,16 @@ class TextureNode extends UniformNode {
713
800
 
714
801
  }
715
802
 
803
+ //
804
+
805
+ const flipYUniform = this._flipYUniform;
806
+
807
+ if ( flipYUniform !== null ) {
808
+
809
+ flipYUniform.value = ( ( texture.image instanceof ImageBitmap && texture.flipY === true ) || texture.isRenderTargetTexture === true || texture.isFramebufferTexture === true || texture.isDepthTexture === true );
810
+
811
+ }
812
+
716
813
  }
717
814
 
718
815
  /**
@@ -727,6 +824,7 @@ class TextureNode extends UniformNode {
727
824
  newNode.depthNode = this.depthNode;
728
825
  newNode.compareNode = this.compareNode;
729
826
  newNode.gradNode = this.gradNode;
827
+ newNode.offsetNode = this.offsetNode;
730
828
 
731
829
  return newNode;
732
830
 
@@ -754,7 +852,7 @@ const textureBase = /*@__PURE__*/ nodeProxy( TextureNode ).setParameterLength( 1
754
852
  *
755
853
  * @tsl
756
854
  * @function
757
- * @param {?Texture|TextureNode} [value=EmptyTexture] - The texture.
855
+ * @param {?(Texture|TextureNode)} [value=EmptyTexture] - The texture.
758
856
  * @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
759
857
  * @param {?Node<int>} [levelNode=null] - The level node.
760
858
  * @param {?Node<float>} [biasNode=null] - The bias node.
@@ -767,7 +865,7 @@ export const texture = ( value = EmptyTexture, uvNode = null, levelNode = null,
767
865
  if ( value && value.isTextureNode === true ) {
768
866
 
769
867
  textureNode = nodeObject( value.clone() );
770
- textureNode.referenceNode = value.getSelf(); // Ensure the reference is set to the original node
868
+ textureNode.referenceNode = value.getBase(); // Ensure the reference is set to the original node
771
869
 
772
870
  if ( uvNode !== null ) textureNode.uvNode = nodeObject( uvNode );
773
871
  if ( levelNode !== null ) textureNode.levelNode = nodeObject( levelNode );
@@ -798,7 +896,7 @@ export const uniformTexture = ( value = EmptyTexture ) => texture( value );
798
896
  *
799
897
  * @tsl
800
898
  * @function
801
- * @param {?Texture|TextureNode} [value=EmptyTexture] - The texture.
899
+ * @param {?(Texture|TextureNode)} [value=EmptyTexture] - The texture.
802
900
  * @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
803
901
  * @param {?Node<int>} [levelNode=null] - The level node.
804
902
  * @param {?Node<float>} [biasNode=null] - The bias node.
@@ -806,7 +904,7 @@ export const uniformTexture = ( value = EmptyTexture ) => texture( value );
806
904
  */
807
905
  export const textureLoad = ( ...params ) => texture( ...params ).setSampler( false );
808
906
 
809
- //export const textureLevel = ( value, uv, level ) => texture( value, uv ).level( level );
907
+ export const textureLevel = ( value, uv, level ) => texture( value, uv ).level( level );
810
908
 
811
909
  /**
812
910
  * Converts a texture or texture node to a sampler.
@@ -346,19 +346,3 @@ export default UniformArrayNode;
346
346
  * @returns {UniformArrayNode}
347
347
  */
348
348
  export const uniformArray = ( values, nodeType ) => nodeObject( new UniformArrayNode( values, nodeType ) );
349
-
350
- /**
351
- * @tsl
352
- * @function
353
- * @deprecated since r168. Use {@link uniformArray} instead.
354
- *
355
- * @param {Array<any>} values - Array-like data.
356
- * @param {string} nodeType - The data type of the array elements.
357
- * @returns {UniformArrayNode}
358
- */
359
- export const uniforms = ( values, nodeType ) => { // @deprecated, r168
360
-
361
- console.warn( 'THREE.TSL: uniforms() has been renamed to uniformArray().' );
362
- return nodeObject( new UniformArrayNode( values, nodeType ) );
363
-
364
- };
@@ -1,5 +1,6 @@
1
1
  import TempNode from '../core/TempNode.js';
2
2
  import { addMethodChaining, nodeArray, nodeObject, nodeObjects, float } from '../tsl/TSLCore.js';
3
+ import { error } from '../../utils.js';
3
4
 
4
5
  /**
5
6
  * This module represents the call of a {@link FunctionNode}. Developers are usually not confronted
@@ -69,12 +70,31 @@ class FunctionCallNode extends TempNode {
69
70
 
70
71
  }
71
72
 
73
+ /**
74
+ * Returns the type of this function call node.
75
+ *
76
+ * @param {NodeBuilder} builder - The current node builder.
77
+ * @returns {string} The type of this node.
78
+ */
72
79
  getNodeType( builder ) {
73
80
 
74
81
  return this.functionNode.getNodeType( builder );
75
82
 
76
83
  }
77
84
 
85
+ /**
86
+ * Returns the function node of this function call node.
87
+ *
88
+ * @param {NodeBuilder} builder - The current node builder.
89
+ * @param {string} [name] - The name of the member.
90
+ * @returns {string} The type of the member.
91
+ */
92
+ getMemberType( builder, name ) {
93
+
94
+ return this.functionNode.getMemberType( builder, name );
95
+
96
+ }
97
+
78
98
  generate( builder ) {
79
99
 
80
100
  const params = [];
@@ -102,13 +122,13 @@ class FunctionCallNode extends TempNode {
102
122
 
103
123
  if ( parameters.length > inputs.length ) {
104
124
 
105
- console.error( 'THREE.TSL: The number of provided parameters exceeds the expected number of inputs in \'Fn()\'.' );
125
+ error( 'TSL: The number of provided parameters exceeds the expected number of inputs in \'Fn()\'.' );
106
126
 
107
127
  parameters.length = inputs.length;
108
128
 
109
129
  } else if ( parameters.length < inputs.length ) {
110
130
 
111
- console.error( 'THREE.TSL: The number of provided parameters is less than the expected number of inputs in \'Fn()\'.' );
131
+ error( 'TSL: The number of provided parameters is less than the expected number of inputs in \'Fn()\'.' );
112
132
 
113
133
  while ( parameters.length < inputs.length ) {
114
134
 
@@ -136,7 +156,7 @@ class FunctionCallNode extends TempNode {
136
156
 
137
157
  } else {
138
158
 
139
- console.error( `THREE.TSL: Input '${ inputNode.name }' not found in \'Fn()\'.` );
159
+ error( `TSL: Input '${ inputNode.name }' not found in \'Fn()\'.` );
140
160
 
141
161
  params.push( generateInput( float( 0 ), inputNode ) );
142
162
 
@@ -160,7 +180,7 @@ export const call = ( func, ...params ) => {
160
180
 
161
181
  params = params.length > 1 || ( params[ 0 ] && params[ 0 ].isNode === true ) ? nodeArray( params ) : nodeObjects( params[ 0 ] );
162
182
 
163
- return nodeObject( new FunctionCallNode( nodeObject( func ), params ) );
183
+ return new FunctionCallNode( nodeObject( func ), params );
164
184
 
165
185
  };
166
186
 
@@ -48,12 +48,35 @@ class FunctionNode extends CodeNode {
48
48
 
49
49
  }
50
50
 
51
+ /**
52
+ * Returns the type of this function node.
53
+ *
54
+ * @param {NodeBuilder} builder - The current node builder.
55
+ * @return {string} The type.
56
+ */
51
57
  getNodeType( builder ) {
52
58
 
53
59
  return this.getNodeFunction( builder ).type;
54
60
 
55
61
  }
56
62
 
63
+ /**
64
+ * Returns the type of a member of this function node.
65
+ *
66
+ * @param {NodeBuilder} builder - The current node builder.
67
+ * @param {string} name - The name of the member.
68
+ * @return {string} The type of the member.
69
+ */
70
+ getMemberType( builder, name ) {
71
+
72
+ const type = this.getNodeType( builder );
73
+
74
+ const structType = builder.getStructTypeNode( type );
75
+
76
+ return structType.getMemberType( builder, name );
77
+
78
+ }
79
+
57
80
  /**
58
81
  * Returns the inputs of this function node.
59
82
  *
@@ -11,6 +11,7 @@ import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
11
11
  * ] );
12
12
  *
13
13
  * const redColor = tintColors.element( 0 );
14
+ * ```
14
15
  *
15
16
  * @augments TempNode
16
17
  */
@@ -58,6 +59,18 @@ class ArrayNode extends TempNode {
58
59
 
59
60
  }
60
61
 
62
+ /**
63
+ * Returns the number of elements in the node array.
64
+ *
65
+ * @param {NodeBuilder} builder - The current node builder.
66
+ * @return {number} The number of elements in the node array.
67
+ */
68
+ getArrayCount( /*builder*/ ) {
69
+
70
+ return this.count;
71
+
72
+ }
73
+
61
74
  /**
62
75
  * Returns the node's type.
63
76
  *
@@ -97,6 +97,11 @@ class AssignNode extends TempNode {
97
97
 
98
98
  const { targetNode, sourceNode } = this;
99
99
 
100
+ const scope = targetNode.getScope();
101
+
102
+ const targetProperties = builder.getNodeProperties( scope );
103
+ targetProperties.assign = true;
104
+
100
105
  const properties = builder.getNodeProperties( this );
101
106
  properties.sourceNode = sourceNode;
102
107
  properties.targetNode = targetNode.context( { assign: true } );
@@ -109,11 +114,10 @@ class AssignNode extends TempNode {
109
114
 
110
115
  const needsSplitAssign = this.needsSplitAssign( builder );
111
116
 
117
+ const target = targetNode.build( builder );
112
118
  const targetType = targetNode.getNodeType( builder );
113
119
 
114
- const target = targetNode.build( builder );
115
120
  const source = sourceNode.build( builder, targetType );
116
-
117
121
  const sourceType = sourceNode.getNodeType( builder );
118
122
 
119
123
  const nodeData = builder.getDataFromNode( this );
@@ -1,5 +1,6 @@
1
1
  import Node from './Node.js';
2
2
  import { nodeObject, varying } from '../tsl/TSLBase.js';
3
+ import { warn } from '../../utils.js';
3
4
 
4
5
  /**
5
6
  * Base class for representing shader attributes as nodes.
@@ -125,7 +126,7 @@ class AttributeNode extends Node {
125
126
 
126
127
  } else {
127
128
 
128
- console.warn( `AttributeNode: Vertex attribute "${ attributeName }" not found on geometry.` );
129
+ warn( `AttributeNode: Vertex attribute "${ attributeName }" not found on geometry.` );
129
130
 
130
131
  return builder.generateConst( nodeType );
131
132