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
@@ -1,8 +1,8 @@
1
1
  import { RenderTarget, Vector2, QuadMesh, NodeMaterial, RendererUtils, TempNode, NodeUpdateType } from 'three/webgpu';
2
- import { nodeObject, Fn, float, uv, texture, passTexture, uniform, sign, max, convertToTexture } from 'three/tsl';
2
+ import { nodeObject, Fn, float, uv, texture, passTexture, sign, max, convertToTexture } from 'three/tsl';
3
3
 
4
4
  const _size = /*@__PURE__*/ new Vector2();
5
- const _quadMeshComp = /*@__PURE__*/ new QuadMesh();
5
+ const _quadMesh = /*@__PURE__*/ new QuadMesh();
6
6
 
7
7
  let _rendererState;
8
8
 
@@ -24,9 +24,9 @@ class AfterImageNode extends TempNode {
24
24
  * Constructs a new after image node.
25
25
  *
26
26
  * @param {TextureNode} textureNode - The texture node that represents the input of the effect.
27
- * @param {number} [damp=0.96] - The damping intensity. A higher value means a stronger after image effect.
27
+ * @param {Node<float>} [damp=0.96] - The damping intensity. A higher value means a stronger after image effect.
28
28
  */
29
- constructor( textureNode, damp = 0.96 ) {
29
+ constructor( textureNode, damp = float( 0.96 ) ) {
30
30
 
31
31
  super( 'vec4' );
32
32
 
@@ -37,21 +37,14 @@ class AfterImageNode extends TempNode {
37
37
  */
38
38
  this.textureNode = textureNode;
39
39
 
40
- /**
41
- * The texture represents the pervious frame.
42
- *
43
- * @type {TextureNode}
44
- */
45
- this.textureNodeOld = texture( null );
46
-
47
40
  /**
48
41
  * How quickly the after-image fades. A higher value means the after-image
49
42
  * persists longer, while a lower value means it fades faster. Should be in
50
43
  * the range `[0, 1]`.
51
44
  *
52
- * @type {UniformNode<float>}
45
+ * @type {Node<float>}
53
46
  */
54
- this.damp = uniform( damp );
47
+ this.damp = damp;
55
48
 
56
49
  /**
57
50
  * The render target used for compositing the effect.
@@ -79,6 +72,14 @@ class AfterImageNode extends TempNode {
79
72
  */
80
73
  this._textureNode = passTexture( this, this._compRT.texture );
81
74
 
75
+ /**
76
+ * The texture represents the pervious frame.
77
+ *
78
+ * @private
79
+ * @type {TextureNode}
80
+ */
81
+ this._textureNodeOld = texture( this._oldRT.texture );
82
+
82
83
  /**
83
84
  * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
84
85
  * its effect once per frame in `updateBefore()`.
@@ -139,17 +140,20 @@ class AfterImageNode extends TempNode {
139
140
 
140
141
  this.setSize( _size.x, _size.y );
141
142
 
142
- const currentTexture = textureNode.value;
143
+ // make sure texture nodes point to correct render targets
144
+
145
+ this._textureNode.value = this._compRT.texture;
146
+ this._textureNodeOld.value = this._oldRT.texture;
143
147
 
144
- this.textureNodeOld.value = this._oldRT.texture;
148
+ // composite
145
149
 
146
- // comp
147
- _quadMeshComp.material = this._materialComposed;
150
+ _quadMesh.material = this._materialComposed;
151
+ _quadMesh.name = 'AfterImage';
148
152
 
149
153
  renderer.setRenderTarget( this._compRT );
150
- _quadMeshComp.render( renderer );
154
+ _quadMesh.render( renderer );
151
155
 
152
- // Swap the textures
156
+ // swap
153
157
 
154
158
  const temp = this._oldRT;
155
159
  this._oldRT = this._compRT;
@@ -157,8 +161,6 @@ class AfterImageNode extends TempNode {
157
161
 
158
162
  //
159
163
 
160
- textureNode.value = currentTexture;
161
-
162
164
  RendererUtils.restoreRendererState( renderer, _rendererState );
163
165
 
164
166
  }
@@ -172,7 +174,7 @@ class AfterImageNode extends TempNode {
172
174
  setup( builder ) {
173
175
 
174
176
  const textureNode = this.textureNode;
175
- const textureNodeOld = this.textureNodeOld;
177
+ const textureNodeOld = this._textureNodeOld;
176
178
 
177
179
  //
178
180
 
@@ -234,9 +236,9 @@ class AfterImageNode extends TempNode {
234
236
  * @tsl
235
237
  * @function
236
238
  * @param {Node<vec4>} node - The node that represents the input of the effect.
237
- * @param {number} [damp=0.96] - The damping intensity. A higher value means a stronger after image effect.
239
+ * @param {(Node<float>|number)} [damp=0.96] - The damping intensity. A higher value means a stronger after image effect.
238
240
  * @returns {AfterImageNode}
239
241
  */
240
- export const afterImage = ( node, damp ) => nodeObject( new AfterImageNode( convertToTexture( node ), damp ) );
242
+ export const afterImage = ( node, damp ) => nodeObject( new AfterImageNode( convertToTexture( node ), nodeObject( damp ) ) );
241
243
 
242
244
  export default AfterImageNode;
@@ -69,9 +69,9 @@ class AnamorphicNode extends TempNode {
69
69
  /**
70
70
  * The resolution scale.
71
71
  *
72
- * @type {Vector2}
72
+ * @type {number}
73
73
  */
74
- this.resolution = new Vector2( 1, 1 );
74
+ this.resolutionScale = 1;
75
75
 
76
76
  /**
77
77
  * The internal render target of the effect.
@@ -130,8 +130,8 @@ class AnamorphicNode extends TempNode {
130
130
 
131
131
  this._invSize.value.set( 1 / width, 1 / height );
132
132
 
133
- width = Math.max( Math.round( width * this.resolution.x ), 1 );
134
- height = Math.max( Math.round( height * this.resolution.y ), 1 );
133
+ width = Math.max( Math.round( width * this.resolutionScale ), 1 );
134
+ height = Math.max( Math.round( height * this.resolutionScale ), 1 );
135
135
 
136
136
  this._renderTarget.setSize( width, height );
137
137
 
@@ -158,6 +158,7 @@ class AnamorphicNode extends TempNode {
158
158
  const currentTexture = textureNode.value;
159
159
 
160
160
  _quadMesh.material = this._material;
161
+ _quadMesh.name = 'Anamorphic';
161
162
 
162
163
  this.setSize( map.image.width, map.image.height );
163
164
 
@@ -240,6 +241,29 @@ class AnamorphicNode extends TempNode {
240
241
 
241
242
  }
242
243
 
244
+ /**
245
+ * The resolution scale.
246
+ *
247
+ * @deprecated
248
+ * @type {Vector2}
249
+ * @default {(1,1)}
250
+ */
251
+ get resolution() {
252
+
253
+ console.warn( 'THREE.AnamorphicNode: The "resolution" property has been renamed to "resolutionScale" and is now of type `number`.' ); // @deprecated r180
254
+
255
+ return new Vector2( this.resolutionScale, this.resolutionScale );
256
+
257
+ }
258
+
259
+ set resolution( value ) {
260
+
261
+ console.warn( 'THREE.AnamorphicNode: The "resolution" property has been renamed to "resolutionScale" and is now of type `number`.' ); // @deprecated r180
262
+
263
+ this.resolutionScale = value.x;
264
+
265
+ }
266
+
243
267
  }
244
268
 
245
269
  /**
@@ -300,6 +300,7 @@ class BloomNode extends TempNode {
300
300
 
301
301
  renderer.setRenderTarget( this._renderTargetBright );
302
302
  _quadMesh.material = this._highPassFilterMaterial;
303
+ _quadMesh.name = 'Bloom [ High Pass ]';
303
304
  _quadMesh.render( renderer );
304
305
 
305
306
  // 2. Blur all the mips progressively
@@ -313,11 +314,13 @@ class BloomNode extends TempNode {
313
314
  this._separableBlurMaterials[ i ].colorTexture.value = inputRenderTarget.texture;
314
315
  this._separableBlurMaterials[ i ].direction.value = _BlurDirectionX;
315
316
  renderer.setRenderTarget( this._renderTargetsHorizontal[ i ] );
317
+ _quadMesh.name = `Bloom [ Blur Horizontal - ${ i } ]`;
316
318
  _quadMesh.render( renderer );
317
319
 
318
320
  this._separableBlurMaterials[ i ].colorTexture.value = this._renderTargetsHorizontal[ i ].texture;
319
321
  this._separableBlurMaterials[ i ].direction.value = _BlurDirectionY;
320
322
  renderer.setRenderTarget( this._renderTargetsVertical[ i ] );
323
+ _quadMesh.name = `Bloom [ Blur Vertical - ${ i } ]`;
321
324
  _quadMesh.render( renderer );
322
325
 
323
326
  inputRenderTarget = this._renderTargetsVertical[ i ];
@@ -328,6 +331,7 @@ class BloomNode extends TempNode {
328
331
 
329
332
  renderer.setRenderTarget( this._renderTargetsHorizontal[ 0 ] );
330
333
  _quadMesh.material = this._compositeMaterial;
334
+ _quadMesh.name = 'Bloom [ Composite ]';
331
335
  _quadMesh.render( renderer );
332
336
 
333
337
  // restore
@@ -364,7 +368,9 @@ class BloomNode extends TempNode {
364
368
 
365
369
  // gaussian blur materials
366
370
 
367
- const kernelSizeArray = [ 3, 5, 7, 9, 11 ];
371
+ // These sizes have been changed to account for the altered coefficients-calculation to avoid blockiness,
372
+ // while retaining the same blur-strength. For details see https://github.com/mrdoob/three.js/pull/31528
373
+ const kernelSizeArray = [ 6, 10, 14, 18, 22 ];
368
374
 
369
375
  for ( let i = 0; i < this._nMips; i ++ ) {
370
376
 
@@ -449,10 +455,11 @@ class BloomNode extends TempNode {
449
455
  _getSeparableBlurMaterial( builder, kernelRadius ) {
450
456
 
451
457
  const coefficients = [];
458
+ const sigma = kernelRadius / 3;
452
459
 
453
460
  for ( let i = 0; i < kernelRadius; i ++ ) {
454
461
 
455
- coefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( kernelRadius * kernelRadius ) ) / kernelRadius );
462
+ coefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( sigma * sigma ) ) / sigma );
456
463
 
457
464
  }
458
465
 
@@ -468,8 +475,7 @@ class BloomNode extends TempNode {
468
475
 
469
476
  const separableBlurPass = Fn( () => {
470
477
 
471
- const weightSum = gaussianCoefficients.element( 0 ).toVar();
472
- const diffuseSum = sampleTexel( uvNode ).rgb.mul( weightSum ).toVar();
478
+ const diffuseSum = sampleTexel( uvNode ).rgb.mul( gaussianCoefficients.element( 0 ) ).toVar();
473
479
 
474
480
  Loop( { start: int( 1 ), end: int( kernelRadius ), type: 'int', condition: '<' }, ( { i } ) => {
475
481
 
@@ -479,11 +485,10 @@ class BloomNode extends TempNode {
479
485
  const sample1 = sampleTexel( uvNode.add( uvOffset ) ).rgb;
480
486
  const sample2 = sampleTexel( uvNode.sub( uvOffset ) ).rgb;
481
487
  diffuseSum.addAssign( add( sample1, sample2 ).mul( w ) );
482
- weightSum.addAssign( float( 2.0 ).mul( w ) );
483
488
 
484
489
  } );
485
490
 
486
- return vec4( diffuseSum.div( weightSum ), 1.0 );
491
+ return vec4( diffuseSum, 1.0 );
487
492
 
488
493
  } );
489
494
 
@@ -0,0 +1,207 @@
1
+ import { Vector2, TempNode } from 'three/webgpu';
2
+ import {
3
+ nodeObject,
4
+ Fn,
5
+ uniform,
6
+ convertToTexture,
7
+ float,
8
+ vec4,
9
+ uv,
10
+ NodeUpdateType,
11
+ } from 'three/tsl';
12
+
13
+ /**
14
+ * Post processing node for applying chromatic aberration effect.
15
+ * This effect simulates the color fringing that occurs in real camera lenses
16
+ * by separating and offsetting the red, green, and blue channels.
17
+ *
18
+ * @augments TempNode
19
+ * @three_import import { chromaticAberration } from 'three/addons/tsl/display/ChromaticAberrationNode.js';
20
+ */
21
+ class ChromaticAberrationNode extends TempNode {
22
+
23
+ static get type() {
24
+
25
+ return 'ChromaticAberrationNode';
26
+
27
+ }
28
+
29
+ /**
30
+ * Constructs a new chromatic aberration node.
31
+ *
32
+ * @param {TextureNode} textureNode - The texture node that represents the input of the effect.
33
+ * @param {Node} strengthNode - The strength of the chromatic aberration effect as a node.
34
+ * @param {Node} centerNode - The center point of the effect as a node.
35
+ * @param {Node} scaleNode - The scale factor for stepped scaling from center as a node.
36
+ */
37
+ constructor( textureNode, strengthNode, centerNode, scaleNode ) {
38
+
39
+ super( 'vec4' );
40
+
41
+ /**
42
+ * The texture node that represents the input of the effect.
43
+ *
44
+ * @type {texture}
45
+ */
46
+ this.textureNode = textureNode;
47
+
48
+ /**
49
+ * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node updates
50
+ * its internal uniforms once per frame in `updateBefore()`.
51
+ *
52
+ * @type {string}
53
+ * @default 'frame'
54
+ */
55
+ this.updateBeforeType = NodeUpdateType.FRAME;
56
+
57
+ /**
58
+ * A node holding the strength of the effect.
59
+ *
60
+ * @type {Node}
61
+ */
62
+ this.strengthNode = strengthNode;
63
+
64
+ /**
65
+ * A node holding the center point of the effect.
66
+ *
67
+ * @type {Node}
68
+ */
69
+ this.centerNode = centerNode;
70
+
71
+ /**
72
+ * A node holding the scale factor for stepped scaling.
73
+ *
74
+ * @type {Node}
75
+ */
76
+ this.scaleNode = scaleNode;
77
+
78
+ /**
79
+ * A uniform node holding the inverse resolution value.
80
+ *
81
+ * @private
82
+ * @type {UniformNode<vec2>}
83
+ */
84
+ this._invSize = uniform( new Vector2() );
85
+
86
+ }
87
+
88
+ /**
89
+ * This method is used to update the effect's uniforms once per frame.
90
+ *
91
+ * @param {NodeFrame} frame - The current node frame.
92
+ */
93
+ updateBefore( /* frame */ ) {
94
+
95
+ const map = this.textureNode.value;
96
+ this._invSize.value.set( 1 / map.image.width, 1 / map.image.height );
97
+
98
+ }
99
+
100
+ /**
101
+ * This method is used to setup the effect's TSL code.
102
+ *
103
+ * @param {NodeBuilder} builder - The current node builder.
104
+ * @return {ShaderCallNodeInternal}
105
+ */
106
+ setup( /* builder */ ) {
107
+
108
+ const textureNode = this.textureNode;
109
+ const uvNode = textureNode.uvNode || uv();
110
+
111
+ const ApplyChromaticAberration = Fn( ( [ uv, strength, center, scale ] ) => {
112
+
113
+ // Calculate distance from center
114
+ const offset = uv.sub( center );
115
+ const distance = offset.length();
116
+
117
+ // Create stepped scaling zones based on distance
118
+ // Each channel gets different scaling steps
119
+ const redScale = float( 1.0 ).add( scale.mul( 0.02 ).mul( strength ) ); // Red channel scaled outward
120
+ const greenScale = float( 1.0 ); // Green stays at original scale
121
+ const blueScale = float( 1.0 ).sub( scale.mul( 0.02 ).mul( strength ) ); // Blue channel scaled inward
122
+
123
+ // Create radial distortion based on distance from center
124
+ const aberrationStrength = strength.mul( distance );
125
+
126
+ // Calculate scaled UV coordinates for each channel
127
+ const redUV = center.add( offset.mul( redScale ) );
128
+ const greenUV = center.add( offset.mul( greenScale ) );
129
+ const blueUV = center.add( offset.mul( blueScale ) );
130
+
131
+ // Apply additional chromatic offset based on aberration strength
132
+ const rOffset = offset.mul( aberrationStrength ).mul( float( 0.01 ) );
133
+ const gOffset = offset.mul( aberrationStrength ).mul( float( 0.0 ) );
134
+ const bOffset = offset.mul( aberrationStrength ).mul( float( - 0.01 ) );
135
+
136
+ // Final UV coordinates combining scale and chromatic aberration
137
+ const finalRedUV = redUV.add( rOffset );
138
+ const finalGreenUV = greenUV.add( gOffset );
139
+ const finalBlueUV = blueUV.add( bOffset );
140
+
141
+ // Sample texture for each channel
142
+ const r = textureNode.sample( finalRedUV ).r;
143
+ const g = textureNode.sample( finalGreenUV ).g;
144
+ const b = textureNode.sample( finalBlueUV ).b;
145
+
146
+ // Get original alpha
147
+ const a = textureNode.sample( uv ).a;
148
+
149
+ return vec4( r, g, b, a );
150
+
151
+ } ).setLayout( {
152
+ name: 'ChromaticAberrationShader',
153
+ type: 'vec4',
154
+ inputs: [
155
+ { name: 'uv', type: 'vec2' },
156
+ { name: 'strength', type: 'float' },
157
+ { name: 'center', type: 'vec2' },
158
+ { name: 'scale', type: 'float' },
159
+ { name: 'invSize', type: 'vec2' }
160
+ ]
161
+ } );
162
+
163
+ const chromaticAberrationFn = Fn( () => {
164
+
165
+ return ApplyChromaticAberration(
166
+ uvNode,
167
+ this.strengthNode,
168
+ this.centerNode,
169
+ this.scaleNode,
170
+ this._invSize
171
+ );
172
+
173
+ } );
174
+
175
+ const outputNode = chromaticAberrationFn();
176
+
177
+ return outputNode;
178
+
179
+ }
180
+
181
+ }
182
+
183
+ export default ChromaticAberrationNode;
184
+
185
+ /**
186
+ * TSL function for creating a chromatic aberration node for post processing.
187
+ *
188
+ * @tsl
189
+ * @function
190
+ * @param {Node<vec4>} node - The node that represents the input of the effect.
191
+ * @param {Node|number} [strength=1.0] - The strength of the chromatic aberration effect as a node or value.
192
+ * @param {?(Node|Vector2)} [center=null] - The center point of the effect as a node or value. If null, uses screen center (0.5, 0.5).
193
+ * @param {Node|number} [scale=1.1] - The scale factor for stepped scaling from center as a node or value.
194
+ * @returns {ChromaticAberrationNode}
195
+ */
196
+ export const chromaticAberration = ( node, strength = 1.0, center = null, scale = 1.1 ) => {
197
+
198
+ return nodeObject(
199
+ new ChromaticAberrationNode(
200
+ convertToTexture( node ),
201
+ nodeObject( strength ),
202
+ nodeObject( center ),
203
+ nodeObject( scale )
204
+ )
205
+ );
206
+
207
+ };
@@ -259,6 +259,7 @@ export default DenoiseNode;
259
259
  /**
260
260
  * Generates denoise samples based on the given parameters.
261
261
  *
262
+ * @private
262
263
  * @param {number} numSamples - The number of samples.
263
264
  * @param {number} numRings - The number of rings.
264
265
  * @param {number} radiusExponent - The radius exponent.
@@ -283,6 +284,7 @@ function generateDenoiseSamples( numSamples, numRings, radiusExponent ) {
283
284
  /**
284
285
  * Generates a default noise texture for the given size.
285
286
  *
287
+ * @private
286
288
  * @param {number} [size=64] - The texture size.
287
289
  * @return {DataTexture} The generated noise texture.
288
290
  */