@plastic-software/three 0.175.13 → 0.178.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 (529) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +7747 -6792
  3. package/build/three.core.js +7371 -6576
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +190 -30
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +19 -11
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +4989 -2235
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +5082 -2469
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -1
  14. package/examples/jsm/animation/AnimationClipCreator.js +1 -0
  15. package/examples/jsm/animation/CCDIKSolver.js +6 -3
  16. package/examples/jsm/capabilities/WebGL.js +1 -27
  17. package/examples/jsm/capabilities/WebGPU.js +1 -0
  18. package/examples/jsm/controls/ArcballControls.js +15 -4
  19. package/examples/jsm/controls/DragControls.js +1 -0
  20. package/examples/jsm/controls/FirstPersonControls.js +1 -0
  21. package/examples/jsm/controls/FlyControls.js +1 -0
  22. package/examples/jsm/controls/MapControls.js +1 -0
  23. package/examples/jsm/controls/OrbitControls.js +1 -0
  24. package/examples/jsm/controls/PointerLockControls.js +5 -3
  25. package/examples/jsm/controls/TrackballControls.js +1 -0
  26. package/examples/jsm/controls/TransformControls.js +62 -14
  27. package/examples/jsm/csm/CSM.js +2 -0
  28. package/examples/jsm/csm/CSMFrustum.js +2 -0
  29. package/examples/jsm/csm/CSMHelper.js +1 -0
  30. package/examples/jsm/csm/CSMShader.js +4 -1
  31. package/examples/jsm/csm/CSMShadowNode.js +18 -4
  32. package/examples/jsm/curves/CurveExtras.js +14 -0
  33. package/examples/jsm/curves/NURBSCurve.js +1 -0
  34. package/examples/jsm/curves/NURBSSurface.js +2 -0
  35. package/examples/jsm/curves/NURBSUtils.js +4 -1
  36. package/examples/jsm/curves/NURBSVolume.js +2 -0
  37. package/examples/jsm/effects/AnaglyphEffect.js +2 -0
  38. package/examples/jsm/effects/AsciiEffect.js +2 -0
  39. package/examples/jsm/effects/OutlineEffect.js +2 -0
  40. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
  41. package/examples/jsm/effects/StereoEffect.js +2 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +1 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +49 -35
  44. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  45. package/examples/jsm/exporters/EXRExporter.js +2 -0
  46. package/examples/jsm/exporters/GLTFExporter.js +7 -4
  47. package/examples/jsm/exporters/KTX2Exporter.js +2 -0
  48. package/examples/jsm/exporters/OBJExporter.js +3 -1
  49. package/examples/jsm/exporters/PLYExporter.js +4 -2
  50. package/examples/jsm/exporters/STLExporter.js +2 -0
  51. package/examples/jsm/exporters/USDZExporter.js +12 -10
  52. package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +1 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +1 -0
  55. package/examples/jsm/geometries/ParametricFunctions.js +4 -1
  56. package/examples/jsm/geometries/ParametricGeometry.js +1 -0
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +2 -1
  58. package/examples/jsm/geometries/TeapotGeometry.js +1 -0
  59. package/examples/jsm/geometries/TextGeometry.js +1 -0
  60. package/examples/jsm/helpers/LightProbeHelper.js +1 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
  64. package/examples/jsm/helpers/RapierHelper.js +59 -0
  65. package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
  66. package/examples/jsm/helpers/TextureHelper.js +1 -0
  67. package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
  68. package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
  69. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
  70. package/examples/jsm/helpers/ViewHelper.js +1 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +7 -0
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -0
  73. package/examples/jsm/interactive/SelectionBox.js +2 -0
  74. package/examples/jsm/interactive/SelectionHelper.js +2 -0
  75. package/examples/jsm/lighting/TiledLighting.js +1 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +1 -0
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  79. package/examples/jsm/lines/Line2.js +1 -0
  80. package/examples/jsm/lines/LineGeometry.js +1 -0
  81. package/examples/jsm/lines/LineMaterial.js +4 -4
  82. package/examples/jsm/lines/LineSegments2.js +1 -0
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  84. package/examples/jsm/lines/Wireframe.js +1 -0
  85. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  88. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  89. package/examples/jsm/loaders/3DMLoader.js +1 -0
  90. package/examples/jsm/loaders/3MFLoader.js +1 -0
  91. package/examples/jsm/loaders/AMFLoader.js +1 -0
  92. package/examples/jsm/loaders/BVHLoader.js +1 -0
  93. package/examples/jsm/loaders/ColladaLoader.js +6 -5
  94. package/examples/jsm/loaders/DDSLoader.js +1 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  96. package/examples/jsm/loaders/EXRLoader.js +1 -0
  97. package/examples/jsm/loaders/FBXLoader.js +25 -23
  98. package/examples/jsm/loaders/FontLoader.js +1 -0
  99. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  100. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  102. package/examples/jsm/loaders/IESLoader.js +1 -0
  103. package/examples/jsm/loaders/KMZLoader.js +1 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  105. package/examples/jsm/loaders/KTXLoader.js +1 -0
  106. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  107. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  108. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  110. package/examples/jsm/loaders/LWOLoader.js +1 -13
  111. package/examples/jsm/loaders/LottieLoader.js +15 -0
  112. package/examples/jsm/loaders/MD2Loader.js +1 -0
  113. package/examples/jsm/loaders/MDDLoader.js +1 -0
  114. package/examples/jsm/loaders/MTLLoader.js +4 -3
  115. package/examples/jsm/loaders/MaterialXLoader.js +1 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  117. package/examples/jsm/loaders/OBJLoader.js +1 -0
  118. package/examples/jsm/loaders/PCDLoader.js +122 -19
  119. package/examples/jsm/loaders/PDBLoader.js +1 -0
  120. package/examples/jsm/loaders/PLYLoader.js +1 -0
  121. package/examples/jsm/loaders/PVRLoader.js +1 -0
  122. package/examples/jsm/loaders/RGBELoader.js +1 -0
  123. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  124. package/examples/jsm/loaders/STLLoader.js +1 -0
  125. package/examples/jsm/loaders/SVGLoader.js +1 -0
  126. package/examples/jsm/loaders/TDSLoader.js +1 -0
  127. package/examples/jsm/loaders/TGALoader.js +1 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  129. package/examples/jsm/loaders/TTFLoader.js +1 -0
  130. package/examples/jsm/loaders/USDZLoader.js +1 -0
  131. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  132. package/examples/jsm/loaders/VOXLoader.js +1 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  134. package/examples/jsm/loaders/VTKLoader.js +1 -0
  135. package/examples/jsm/loaders/XYZLoader.js +1 -0
  136. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  137. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  138. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  139. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  140. package/examples/jsm/math/Capsule.js +2 -0
  141. package/examples/jsm/math/ColorConverter.js +1 -0
  142. package/examples/jsm/math/ConvexHull.js +2 -0
  143. package/examples/jsm/math/ImprovedNoise.js +19 -14
  144. package/examples/jsm/math/Lut.js +2 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  146. package/examples/jsm/math/OBB.js +2 -0
  147. package/examples/jsm/math/Octree.js +20 -1
  148. package/examples/jsm/math/SimplexNoise.js +2 -0
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  150. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  151. package/examples/jsm/misc/Gyroscope.js +1 -0
  152. package/examples/jsm/misc/MD2Character.js +2 -0
  153. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  154. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  158. package/examples/jsm/misc/RollerCoaster.js +5 -0
  159. package/examples/jsm/misc/Timer.js +2 -0
  160. package/examples/jsm/misc/TubePainter.js +1 -0
  161. package/examples/jsm/misc/Volume.js +2 -0
  162. package/examples/jsm/misc/VolumeSlice.js +1 -0
  163. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  167. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  168. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  169. package/examples/jsm/objects/Lensflare.js +3 -0
  170. package/examples/jsm/objects/LensflareMesh.js +1 -0
  171. package/examples/jsm/objects/MarchingCubes.js +2 -0
  172. package/examples/jsm/objects/Reflector.js +1 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  174. package/examples/jsm/objects/Refractor.js +1 -0
  175. package/examples/jsm/objects/ShadowMesh.js +1 -0
  176. package/examples/jsm/objects/Sky.js +2 -1
  177. package/examples/jsm/objects/SkyMesh.js +20 -17
  178. package/examples/jsm/objects/Water.js +1 -0
  179. package/examples/jsm/objects/Water2.js +1 -0
  180. package/examples/jsm/objects/Water2Mesh.js +3 -1
  181. package/examples/jsm/objects/WaterMesh.js +2 -1
  182. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  183. package/examples/jsm/physics/JoltPhysics.js +1 -0
  184. package/examples/jsm/physics/RapierPhysics.js +139 -12
  185. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  186. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  187. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  188. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  190. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  191. package/examples/jsm/postprocessing/EffectComposer.js +4 -2
  192. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  193. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  194. package/examples/jsm/postprocessing/GTAOPass.js +4 -3
  195. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  196. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  197. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  198. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  199. package/examples/jsm/postprocessing/OutlinePass.js +5 -2
  200. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  201. package/examples/jsm/postprocessing/Pass.js +3 -1
  202. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  203. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  204. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  205. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  206. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  207. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  208. package/examples/jsm/postprocessing/SSAOPass.js +2 -1
  209. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  210. package/examples/jsm/postprocessing/SavePass.js +2 -1
  211. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  212. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  213. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  214. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  215. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  216. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  217. package/examples/jsm/renderers/Projector.js +2 -0
  218. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  219. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  220. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  221. package/examples/jsm/shaders/BasicShader.js +4 -1
  222. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  223. package/examples/jsm/shaders/BlendShader.js +4 -1
  224. package/examples/jsm/shaders/BokehShader.js +4 -1
  225. package/examples/jsm/shaders/BokehShader2.js +4 -1
  226. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  227. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  228. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  229. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  230. package/examples/jsm/shaders/CopyShader.js +4 -1
  231. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  232. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  233. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  234. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  235. package/examples/jsm/shaders/ExposureShader.js +4 -1
  236. package/examples/jsm/shaders/FXAAShader.js +4 -1
  237. package/examples/jsm/shaders/FilmShader.js +4 -1
  238. package/examples/jsm/shaders/FocusShader.js +4 -1
  239. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  240. package/examples/jsm/shaders/GTAOShader.js +4 -1
  241. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  242. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  243. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  244. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  245. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  246. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  247. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  248. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  249. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  250. package/examples/jsm/shaders/MirrorShader.js +4 -1
  251. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  252. package/examples/jsm/shaders/OutputShader.js +4 -1
  253. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  254. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  255. package/examples/jsm/shaders/SAOShader.js +4 -1
  256. package/examples/jsm/shaders/SMAAShader.js +1 -0
  257. package/examples/jsm/shaders/SSAOShader.js +4 -1
  258. package/examples/jsm/shaders/SSRShader.js +1 -0
  259. package/examples/jsm/shaders/SepiaShader.js +4 -1
  260. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  261. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  262. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  263. package/examples/jsm/shaders/ToonShader.js +2 -1
  264. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  265. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +4 -1
  266. package/examples/jsm/shaders/VelocityShader.js +4 -1
  267. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  268. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  269. package/examples/jsm/shaders/VignetteShader.js +4 -1
  270. package/examples/jsm/shaders/VolumeShader.js +5 -2
  271. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  272. package/examples/jsm/textures/FlakesTexture.js +2 -0
  273. package/examples/jsm/transpiler/AST.js +381 -30
  274. package/examples/jsm/transpiler/GLSLDecoder.js +226 -87
  275. package/examples/jsm/transpiler/Linker.js +327 -0
  276. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  277. package/examples/jsm/transpiler/Transpiler.js +19 -1
  278. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  279. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  280. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  281. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  282. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  283. package/examples/jsm/tsl/display/BloomNode.js +1 -0
  284. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  285. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  286. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  287. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  288. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  289. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  290. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  291. package/examples/jsm/tsl/display/GaussianBlurNode.js +4 -29
  292. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  293. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  294. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  295. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  296. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  297. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  298. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  299. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  300. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  301. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  302. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  303. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  304. package/examples/jsm/tsl/display/TRAAPassNode.js +5 -4
  305. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  306. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  307. package/examples/jsm/tsl/lighting/TiledLightsNode.js +4 -3
  308. package/examples/jsm/tsl/math/Bayer.js +4 -1
  309. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  310. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  311. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  312. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  313. package/examples/jsm/utils/CameraUtils.js +4 -1
  314. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  315. package/examples/jsm/utils/GeometryUtils.js +4 -1
  316. package/examples/jsm/utils/LDrawUtils.js +2 -0
  317. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  318. package/examples/jsm/utils/SceneUtils.js +4 -1
  319. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  320. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  321. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  322. package/examples/jsm/utils/SortUtils.js +4 -1
  323. package/examples/jsm/utils/UVsDebug.js +4 -1
  324. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  325. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  326. package/examples/jsm/utils/WorkerPool.js +2 -0
  327. package/examples/jsm/webxr/ARButton.js +1 -0
  328. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  329. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  330. package/examples/jsm/webxr/Text2D.js +4 -1
  331. package/examples/jsm/webxr/VRButton.js +1 -0
  332. package/examples/jsm/webxr/XRButton.js +1 -0
  333. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  334. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  335. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  336. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  338. package/examples/jsm/webxr/XRPlanes.js +1 -0
  339. package/package.json +6 -4
  340. package/src/Three.Core.js +1 -1
  341. package/src/Three.TSL.js +18 -10
  342. package/src/Three.WebGPU.Nodes.js +1 -0
  343. package/src/Three.WebGPU.js +3 -0
  344. package/src/audio/AudioListener.js +13 -10
  345. package/src/cameras/ArrayCamera.js +9 -1
  346. package/src/constants.js +47 -20
  347. package/src/core/BufferAttribute.js +3 -3
  348. package/src/core/BufferGeometry.js +2 -5
  349. package/src/core/Clock.js +2 -8
  350. package/src/core/GLBufferAttribute.js +13 -1
  351. package/src/core/Object3D.js +23 -22
  352. package/src/core/RenderTarget.js +65 -21
  353. package/src/core/RenderTarget3D.js +1 -0
  354. package/src/extras/TextureUtils.js +1 -5
  355. package/src/extras/core/Curve.js +1 -1
  356. package/src/extras/core/Path.js +22 -22
  357. package/src/geometries/CapsuleGeometry.js +167 -17
  358. package/src/geometries/ExtrudeGeometry.js +39 -29
  359. package/src/helpers/ArrowHelper.js +2 -2
  360. package/src/helpers/SkeletonHelper.js +1 -1
  361. package/src/lights/LightShadow.js +14 -0
  362. package/src/lights/SpotLightShadow.js +9 -1
  363. package/src/lights/webgpu/ProjectorLight.js +46 -0
  364. package/src/loaders/BufferGeometryLoader.js +1 -10
  365. package/src/loaders/FileLoader.js +2 -2
  366. package/src/loaders/ImageBitmapLoader.js +25 -9
  367. package/src/loaders/ImageLoader.js +55 -8
  368. package/src/loaders/ObjectLoader.js +44 -16
  369. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  370. package/src/materials/Material.js +1 -7
  371. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  372. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  373. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  374. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  375. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  376. package/src/materials/nodes/NodeMaterial.js +105 -19
  377. package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
  378. package/src/math/Box3.js +28 -0
  379. package/src/math/Color.js +7 -7
  380. package/src/math/ColorManagement.js +22 -3
  381. package/src/math/Frustum.js +6 -1
  382. package/src/math/FrustumArray.js +253 -0
  383. package/src/math/Quaternion.js +1 -1
  384. package/src/math/Ray.js +2 -0
  385. package/src/math/Sphere.js +28 -0
  386. package/src/nodes/Nodes.js +2 -3
  387. package/src/nodes/TSL.js +5 -3
  388. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  389. package/src/nodes/accessors/Bitangent.js +54 -26
  390. package/src/nodes/accessors/Camera.js +31 -4
  391. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  392. package/src/nodes/accessors/InstanceNode.js +5 -4
  393. package/src/nodes/accessors/Lights.js +2 -2
  394. package/src/nodes/accessors/MaterialNode.js +4 -0
  395. package/src/nodes/accessors/ModelNode.js +1 -1
  396. package/src/nodes/accessors/Normal.js +102 -16
  397. package/src/nodes/accessors/Object3DNode.js +7 -8
  398. package/src/nodes/accessors/Position.js +14 -4
  399. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  400. package/src/nodes/accessors/ReferenceNode.js +1 -1
  401. package/src/nodes/accessors/ReflectVector.js +3 -3
  402. package/src/nodes/accessors/SkinningNode.js +3 -2
  403. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  404. package/src/nodes/accessors/StorageTextureNode.js +14 -3
  405. package/src/nodes/accessors/Tangent.js +25 -17
  406. package/src/nodes/accessors/TangentUtils.js +46 -0
  407. package/src/nodes/accessors/TextureBicubic.js +21 -3
  408. package/src/nodes/accessors/TextureNode.js +59 -8
  409. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  410. package/src/nodes/accessors/VelocityNode.js +1 -0
  411. package/src/nodes/accessors/VertexColorNode.js +4 -4
  412. package/src/nodes/code/CodeNode.js +8 -11
  413. package/src/nodes/core/AssignNode.js +27 -5
  414. package/src/nodes/core/AttributeNode.js +2 -2
  415. package/src/nodes/core/ContextNode.js +7 -3
  416. package/src/nodes/core/Node.js +69 -20
  417. package/src/nodes/core/NodeBuilder.js +248 -29
  418. package/src/nodes/core/NodeUtils.js +42 -0
  419. package/src/nodes/core/NodeVarying.js +19 -1
  420. package/src/nodes/core/PropertyNode.js +8 -12
  421. package/src/nodes/core/StackNode.js +129 -26
  422. package/src/nodes/core/StructTypeNode.js +26 -4
  423. package/src/nodes/core/SubBuildNode.js +89 -0
  424. package/src/nodes/core/VarNode.js +11 -2
  425. package/src/nodes/core/VaryingNode.js +45 -24
  426. package/src/nodes/display/BlendModes.js +42 -1
  427. package/src/nodes/display/ColorSpaceNode.js +4 -27
  428. package/src/nodes/display/FrontFacingNode.js +34 -2
  429. package/src/nodes/display/NormalMapNode.js +19 -50
  430. package/src/nodes/display/PassNode.js +18 -19
  431. package/src/nodes/display/ScreenNode.js +0 -26
  432. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  433. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  434. package/src/nodes/functions/PhongLightingModel.js +3 -3
  435. package/src/nodes/functions/PhysicalLightingModel.js +14 -14
  436. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  437. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  438. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  439. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  440. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  441. package/src/nodes/gpgpu/ComputeNode.js +1 -1
  442. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  443. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  444. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  445. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  446. package/src/nodes/lighting/LightsNode.js +29 -11
  447. package/src/nodes/lighting/ProjectorLightNode.js +78 -0
  448. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  449. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  450. package/src/nodes/lighting/ShadowNode.js +174 -242
  451. package/src/nodes/lighting/SpotLightNode.js +44 -7
  452. package/src/nodes/materialx/lib/mx_noise.js +1 -1
  453. package/src/nodes/math/ConditionalNode.js +0 -19
  454. package/src/nodes/math/MathNode.js +68 -21
  455. package/src/nodes/math/OperatorNode.js +108 -98
  456. package/src/nodes/shapes/Shapes.js +5 -4
  457. package/src/nodes/tsl/TSLBase.js +1 -0
  458. package/src/nodes/tsl/TSLCore.js +160 -65
  459. package/src/nodes/utils/DebugNode.js +15 -3
  460. package/src/nodes/utils/Discard.js +2 -2
  461. package/src/nodes/utils/EquirectUV.js +27 -0
  462. package/src/nodes/utils/LoopNode.js +64 -34
  463. package/src/nodes/utils/MatcapUV.js +22 -0
  464. package/src/nodes/utils/RTTNode.js +13 -5
  465. package/src/nodes/utils/ReflectorNode.js +77 -7
  466. package/src/nodes/utils/SampleNode.js +81 -0
  467. package/src/nodes/utils/TriplanarTextures.js +65 -0
  468. package/src/objects/BatchedMesh.js +16 -4
  469. package/src/objects/Mesh.js +9 -0
  470. package/src/objects/Skeleton.js +1 -1
  471. package/src/objects/Sprite.js +9 -0
  472. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  473. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  474. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  475. package/src/renderers/WebGLRenderer.js +25 -11
  476. package/src/renderers/common/Animation.js +2 -2
  477. package/src/renderers/common/Background.js +13 -2
  478. package/src/renderers/common/CubeRenderTarget.js +1 -1
  479. package/src/renderers/common/RenderList.js +0 -4
  480. package/src/renderers/common/RenderObject.js +80 -4
  481. package/src/renderers/common/Renderer.js +116 -8
  482. package/src/renderers/common/Storage3DTexture.js +79 -0
  483. package/src/renderers/common/StorageArrayTexture.js +63 -0
  484. package/src/renderers/common/Textures.js +15 -21
  485. package/src/renderers/common/TimestampQueryPool.js +1 -0
  486. package/src/renderers/common/Uniform.js +1 -1
  487. package/src/renderers/common/UniformsGroup.js +14 -18
  488. package/src/renderers/common/XRManager.js +157 -27
  489. package/src/renderers/common/XRRenderTarget.js +21 -4
  490. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  491. package/src/renderers/common/nodes/Nodes.js +13 -3
  492. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +1 -1
  493. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  494. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  495. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  496. package/src/renderers/webgl/WebGLPrograms.js +4 -2
  497. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  498. package/src/renderers/webgl/WebGLState.js +4 -4
  499. package/src/renderers/webgl/WebGLTextures.js +144 -4
  500. package/src/renderers/webgl/WebGLUtils.js +1 -3
  501. package/src/renderers/webgl-fallback/WebGLBackend.js +244 -87
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +73 -7
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  504. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  507. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  508. package/src/renderers/webgpu/WebGPUBackend.js +451 -128
  509. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  510. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  511. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  512. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +86 -33
  513. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  514. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  515. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +28 -5
  516. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  517. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -8
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +45 -50
  519. package/src/renderers/webxr/WebXRController.js +1 -1
  520. package/src/renderers/webxr/WebXRManager.js +2 -1
  521. package/src/textures/DepthTexture.js +6 -10
  522. package/src/textures/Source.js +22 -0
  523. package/src/textures/Texture.js +118 -1
  524. package/src/textures/VideoTexture.js +1 -1
  525. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  526. package/src/core/RenderTargetArray.js +0 -40
  527. package/src/nodes/utils/EquirectUVNode.js +0 -65
  528. package/src/nodes/utils/MatcapUVNode.js +0 -49
  529. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -10,6 +10,7 @@ let _rendererState;
10
10
  * Post processing node for creating an after image effect.
11
11
  *
12
12
  * @augments TempNode
13
+ * @three_import import { afterImage } from 'three/addons/tsl/display/AfterImageNode.js';
13
14
  */
14
15
  class AfterImageNode extends TempNode {
15
16
 
@@ -143,6 +144,7 @@ class AfterImageNode extends TempNode {
143
144
  this.textureNodeOld.value = this._oldRT.texture;
144
145
 
145
146
  // comp
147
+ _quadMeshComp.material = this._materialComposed;
146
148
 
147
149
  renderer.setRenderTarget( this._compRT );
148
150
  _quadMeshComp.render( renderer );
@@ -202,9 +204,6 @@ class AfterImageNode extends TempNode {
202
204
  const materialComposed = this._materialComposed || ( this._materialComposed = new NodeMaterial() );
203
205
  materialComposed.name = 'AfterImage';
204
206
  materialComposed.fragmentNode = afterImg();
205
-
206
- _quadMeshComp.material = materialComposed;
207
-
208
207
  //
209
208
 
210
209
  const properties = builder.getNodeProperties( this );
@@ -6,6 +6,7 @@ import StereoCompositePassNode from './StereoCompositePassNode.js';
6
6
  * A render pass node that creates an anaglyph effect.
7
7
  *
8
8
  * @augments StereoCompositePassNode
9
+ * @three_import import { anaglyphPass } from 'three/addons/tsl/display/AnaglyphPassNode.js';
9
10
  */
10
11
  class AnaglyphPassNode extends StereoCompositePassNode {
11
12
 
@@ -9,6 +9,7 @@ let _rendererState;
9
9
  * Post processing node for adding an anamorphic flare effect.
10
10
  *
11
11
  * @augments TempNode
12
+ * @three_import import { anamorphic } from 'three/addons/tsl/display/AnamorphicNode.js';
12
13
  */
13
14
  class AnamorphicNode extends TempNode {
14
15
 
@@ -22,11 +23,11 @@ class AnamorphicNode extends TempNode {
22
23
  * Constructs a new anamorphic node.
23
24
  *
24
25
  * @param {TextureNode} textureNode - The texture node that represents the input of the effect.
25
- * @param {Node<float>} tresholdNode - The threshold is one option to control the intensity and size of the effect.
26
+ * @param {Node<float>} thresholdNode - The threshold is one option to control the intensity and size of the effect.
26
27
  * @param {Node<float>} scaleNode - Defines the vertical scale of the flares.
27
28
  * @param {number} samples - More samples result in larger flares and a more expensive runtime behavior.
28
29
  */
29
- constructor( textureNode, tresholdNode, scaleNode, samples ) {
30
+ constructor( textureNode, thresholdNode, scaleNode, samples ) {
30
31
 
31
32
  super( 'vec4' );
32
33
 
@@ -42,7 +43,7 @@ class AnamorphicNode extends TempNode {
42
43
  *
43
44
  * @type {Node<float>}
44
45
  */
45
- this.tresholdNode = tresholdNode;
46
+ this.thresholdNode = thresholdNode;
46
47
 
47
48
  /**
48
49
  * Defines the vertical scale of the flares.
@@ -202,7 +203,7 @@ class AnamorphicNode extends TempNode {
202
203
 
203
204
  const uv = vec2( uvNode.x.add( this._invSize.x.mul( i ).mul( this.scaleNode ) ), uvNode.y );
204
205
  const color = sampleTexture( uv );
205
- const pass = threshold( color, this.tresholdNode ).mul( softness );
206
+ const pass = threshold( color, this.thresholdNode ).mul( softness );
206
207
 
207
208
  total.addAssign( pass );
208
209
 
@@ -40,6 +40,7 @@ let _rendererState;
40
40
  * postProcessing.outputNode = scenePassColor.add( bloomPass );
41
41
  * ```
42
42
  * @augments TempNode
43
+ * @three_import import { bloom } from 'three/addons/tsl/display/BloomNode.js';
43
44
  */
44
45
  class BloomNode extends TempNode {
45
46
 
@@ -0,0 +1,206 @@
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
+ };
@@ -1,5 +1,5 @@
1
1
  import { DataTexture, RepeatWrapping, Vector2, Vector3, TempNode } from 'three/webgpu';
2
- import { texture, getNormalFromDepth, getViewPosition, convertToTexture, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, luminance, vec2, vec3, vec4, uniformArray, int, dot, max, pow, abs, If, textureSize, sin, cos, mat2, PI } from 'three/tsl';
2
+ import { texture, getNormalFromDepth, getViewPosition, convertToTexture, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, luminance, vec2, vec3, vec4, uniformArray, int, dot, max, pow, abs, If, textureSize, sin, cos, mat2, PI, property } from 'three/tsl';
3
3
  import { SimplexNoise } from '../../math/SimplexNoise.js';
4
4
 
5
5
  /**
@@ -11,6 +11,7 @@ import { SimplexNoise } from '../../math/SimplexNoise.js';
11
11
  * Reference: {@link https://openaccess.thecvf.com/content/WACV2021/papers/Khademi_Self-Supervised_Poisson-Gaussian_Denoising_WACV_2021_paper.pdf}.
12
12
  *
13
13
  * @augments TempNode
14
+ * @three_import import { denoise } from 'three/addons/tsl/display/DenoiseNode.js';
14
15
  */
15
16
  class DenoiseNode extends TempNode {
16
17
 
@@ -186,59 +187,58 @@ class DenoiseNode extends TempNode {
186
187
  const viewNormal = sampleNormal( uvNode ).toVar();
187
188
 
188
189
  const texel = sampleTexture( uvNode ).toVar();
190
+ const result = property( 'vec4' );
189
191
 
190
192
  If( depth.greaterThanEqual( 1.0 ).or( dot( viewNormal, viewNormal ).equal( 0.0 ) ), () => {
191
193
 
192
- return texel;
194
+ result.assign( texel );
193
195
 
194
- } );
196
+ } ).Else( () => {
195
197
 
196
- const center = vec3( texel.rgb ).toVar();
198
+ const center = vec3( texel.rgb );
197
199
 
198
- const viewPosition = getViewPosition( uvNode, depth, this._cameraProjectionMatrixInverse ).toVar();
200
+ const viewPosition = getViewPosition( uvNode, depth, this._cameraProjectionMatrixInverse ).toConst();
199
201
 
200
- const noiseResolution = textureSize( this.noiseNode, 0 );
201
- let noiseUv = vec2( uvNode.x, uvNode.y.oneMinus() );
202
- noiseUv = noiseUv.mul( this._resolution.div( noiseResolution ) );
203
- const noiseTexel = sampleNoise( noiseUv ).toVar();
202
+ const noiseResolution = textureSize( this.noiseNode, 0 );
203
+ let noiseUv = vec2( uvNode.x, uvNode.y.oneMinus() );
204
+ noiseUv = noiseUv.mul( this._resolution.div( noiseResolution ) );
205
+ const noiseTexel = sampleNoise( noiseUv ).toVar();
204
206
 
205
- const x = sin( noiseTexel.element( this.index.mod( 4 ).mul( 2 ).mul( PI ) ) ).toVar();
206
- const y = cos( noiseTexel.element( this.index.mod( 4 ).mul( 2 ).mul( PI ) ) ).toVar();
207
+ const x = sin( noiseTexel.element( this.index.mod( 4 ).mul( 2 ).mul( PI ) ) );
208
+ const y = cos( noiseTexel.element( this.index.mod( 4 ).mul( 2 ).mul( PI ) ) );
207
209
 
208
- const noiseVec = vec2( x, y ).toVar();
209
- const rotationMatrix = mat2( noiseVec.x, noiseVec.y.negate(), noiseVec.x, noiseVec.y ).toVar();
210
+ const noiseVec = vec2( x, y );
211
+ const rotationMatrix = mat2( noiseVec.x, noiseVec.y.negate(), noiseVec.x, noiseVec.y );
210
212
 
211
- const totalWeight = float( 1.0 ).toVar();
212
- const denoised = vec3( texel.rgb ).toVar();
213
+ const totalWeight = float( 1.0 ).toVar();
214
+ const denoised = vec3( texel.rgb ).toVar();
213
215
 
214
- Loop( { start: int( 0 ), end: int( 16 ), type: 'int', condition: '<' }, ( { i } ) => {
216
+ Loop( { start: int( 0 ), end: int( 16 ), type: 'int', condition: '<' }, ( { i } ) => {
215
217
 
216
- const sampleDir = this._sampleVectors.element( i ).toVar();
217
- const offset = rotationMatrix.mul( sampleDir.xy.mul( float( 1.0 ).add( sampleDir.z.mul( this.radius.sub( 1 ) ) ) ) ).div( this._resolution ).toVar();
218
- const sampleUv = uvNode.add( offset ).toVar();
218
+ const sampleDir = this._sampleVectors.element( i );
219
+ const offset = rotationMatrix.mul( sampleDir.xy.mul( float( 1.0 ).add( sampleDir.z.mul( this.radius.sub( 1 ) ) ) ) ).div( this._resolution );
220
+ const sampleUv = uvNode.add( offset );
219
221
 
220
- const result = denoiseSample( center, viewNormal, viewPosition, sampleUv );
222
+ const sampleResult = denoiseSample( center, viewNormal, viewPosition, sampleUv );
221
223
 
222
- denoised.addAssign( result.xyz );
223
- totalWeight.addAssign( result.w );
224
+ denoised.addAssign( sampleResult.xyz );
225
+ totalWeight.addAssign( sampleResult.w );
224
226
 
225
- } );
227
+ } );
228
+
229
+ If( totalWeight.greaterThan( float( 0 ) ), () => {
226
230
 
227
- If( totalWeight.greaterThan( float( 0 ) ), () => {
231
+ denoised.divAssign( totalWeight );
228
232
 
229
- denoised.divAssign( totalWeight );
233
+ } );
234
+
235
+ result.assign( vec4( denoised, texel.a ) );
230
236
 
231
237
  } );
232
238
 
233
- return vec4( denoised, texel.a );
239
+ return result;
234
240
 
235
- } ).setLayout( {
236
- name: 'denoise',
237
- type: 'vec4',
238
- inputs: [
239
- { name: 'uv', type: 'vec2' }
240
- ]
241
- } );
241
+ }/*, { uv: 'vec2', return: 'vec4' }*/ );
242
242
 
243
243
  const output = Fn( () => {
244
244
 
@@ -5,6 +5,7 @@ import { convertToTexture, nodeObject, Fn, uv, uniform, vec2, vec4, clamp } from
5
5
  * Post processing node for creating depth of field (DOF) effect.
6
6
  *
7
7
  * @augments TempNode
8
+ * @three_import import { dof } from 'three/addons/tsl/display/DepthOfFieldNode.js';
8
9
  */
9
10
  class DepthOfFieldNode extends TempNode {
10
11
 
@@ -5,6 +5,7 @@ import { nodeObject, Fn, uv, uniform, vec2, vec3, sin, cos, add, vec4, screenSiz
5
5
  * Post processing node for creating dot-screen effect.
6
6
  *
7
7
  * @augments TempNode
8
+ * @three_import import { dotScreen } from 'three/addons/tsl/display/DotScreenNode.js';
8
9
  */
9
10
  class DotScreenNode extends TempNode {
10
11
 
@@ -6,6 +6,7 @@ import { nodeObject, Fn, uniformArray, select, float, NodeUpdateType, uv, dot, c
6
6
  * so tone mapping and color space conversion must happen before the anti-aliasing.
7
7
  *
8
8
  * @augments TempNode
9
+ * @three_import import { fxaa } from 'three/addons/tsl/display/FXAANode.js';
9
10
  */
10
11
  class FXAANode extends TempNode {
11
12
 
@@ -122,8 +123,8 @@ class FXAANode extends TempNode {
122
123
  const se = SampleLuminanceOffset( texSize, uv, 1.0, 1.0 );
123
124
  const sw = SampleLuminanceOffset( texSize, uv, - 1.0, 1.0 );
124
125
 
125
- const highest = max( max( max( max( s, e ), n ), w ), m );
126
- const lowest = min( min( min( min( s, e ), n ), w ), m );
126
+ const highest = max( s, e, n, w, m );
127
+ const lowest = min( s, e, n, w, m );
127
128
  const contrast = highest.sub( lowest );
128
129
 
129
130
  return { m, n, e, s, w, ne, nw, se, sw, highest, lowest, contrast };
@@ -5,6 +5,7 @@ import { rand, Fn, fract, time, uv, clamp, mix, vec4, nodeProxy } from 'three/ts
5
5
  * Post processing node for creating a film grain effect.
6
6
  *
7
7
  * @augments TempNode
8
+ * @three_import import { film } from 'three/addons/tsl/display/FilmNode.js';
8
9
  */
9
10
  class FilmNode extends TempNode {
10
11
 
@@ -29,6 +29,7 @@ let _rendererState;
29
29
  * Reference: {@link https://www.activision.com/cdn/research/Practical_Real_Time_Strategies_for_Accurate_Indirect_Occlusion_NEW%20VERSION_COLOR.pdf}.
30
30
  *
31
31
  * @augments TempNode
32
+ * @three_import import { ao } from 'three/addons/tsl/display/GTAONode.js';
32
33
  */
33
34
  class GTAONode extends TempNode {
34
35
 
@@ -1,40 +1,15 @@
1
1
  import { RenderTarget, Vector2, NodeMaterial, RendererUtils, QuadMesh, TempNode, NodeUpdateType } from 'three/webgpu';
2
- import { nodeObject, Fn, If, float, uv, uniform, convertToTexture, vec2, vec4, passTexture, mul } from 'three/tsl';
2
+ import { nodeObject, Fn, float, uv, uniform, convertToTexture, vec2, vec4, passTexture, mul, premultiplyAlpha, unpremultiplyAlpha } from 'three/tsl';
3
3
 
4
4
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
5
5
 
6
6
  let _rendererState;
7
7
 
8
- const premult = /*@__PURE__*/ Fn( ( [ color ] ) => {
9
-
10
- return vec4( color.rgb.mul( color.a ), color.a );
11
-
12
- } ).setLayout( {
13
- name: 'premult',
14
- type: 'vec4',
15
- inputs: [
16
- { name: 'color', type: 'vec4' }
17
- ]
18
- } );
19
-
20
- const unpremult = /*@__PURE__*/ Fn( ( [ color ] ) => {
21
-
22
- If( color.a.equal( 0.0 ), () => vec4( 0.0 ) );
23
-
24
- return vec4( color.rgb.div( color.a ), color.a );
25
-
26
- } ).setLayout( {
27
- name: 'unpremult',
28
- type: 'vec4',
29
- inputs: [
30
- { name: 'color', type: 'vec4' }
31
- ]
32
- } );
33
-
34
8
  /**
35
9
  * Post processing node for creating a gaussian blur effect.
36
10
  *
37
11
  * @augments TempNode
12
+ * @three_import import { gaussianBlur, premultipliedGaussianBlur } from 'three/addons/tsl/display/GaussianBlurNode.js';
38
13
  */
39
14
  class GaussianBlurNode extends TempNode {
40
15
 
@@ -274,8 +249,8 @@ class GaussianBlurNode extends TempNode {
274
249
 
275
250
  // https://lisyarus.github.io/blog/posts/blur-coefficients-generator.html
276
251
 
277
- sampleTexture = ( uv ) => premult( textureNode.sample( uv ) );
278
- output = ( color ) => unpremult( color );
252
+ sampleTexture = ( uv ) => premultiplyAlpha( textureNode.sample( uv ) );
253
+ output = ( color ) => unpremultiplyAlpha( color );
279
254
 
280
255
  } else {
281
256
 
@@ -14,6 +14,7 @@ let _rendererState;
14
14
  * - {@link https://john-chapman.github.io/2017/11/05/pseudo-lens-flare.html}.
15
15
  *
16
16
  * @augments TempNode
17
+ * @three_import import { lensflare } from 'three/addons/tsl/display/LensflareNode.js';
17
18
  */
18
19
  class LensflareNode extends TempNode {
19
20
 
@@ -5,6 +5,7 @@ import { nodeObject, Fn, float, uniform, vec3, vec4, mix } from 'three/tsl';
5
5
  * A post processing node for color grading via lookup tables.
6
6
  *
7
7
  * @augments TempNode
8
+ * @three_import import { lut3D } from 'three/addons/tsl/display/Lut3DNode.js';
8
9
  */
9
10
  class Lut3DNode extends TempNode {
10
11
 
@@ -40,6 +40,7 @@ let _rendererState;
40
40
  * ```
41
41
  *
42
42
  * @augments TempNode
43
+ * @three_import import { outline } from 'three/addons/tsl/display/OutlineNode.js';
43
44
  */
44
45
  class OutlineNode extends TempNode {
45
46
 
@@ -6,6 +6,7 @@ import StereoCompositePassNode from './StereoCompositePassNode.js';
6
6
  * A render pass node that creates a parallax barrier effect.
7
7
  *
8
8
  * @augments StereoCompositePassNode
9
+ * @three_import import { parallaxBarrierPass } from 'three/addons/tsl/display/ParallaxBarrierPassNode.js';
9
10
  */
10
11
  class ParallaxBarrierPassNode extends StereoCompositePassNode {
11
12
 
@@ -219,6 +219,7 @@ const pixelation = ( node, depthNode, normalNode, pixelSize = 6, normalEdgeStren
219
219
  * A special render pass node that renders the scene with a pixelation effect.
220
220
  *
221
221
  * @augments PassNode
222
+ * @three_import import { pixelationPass } from 'three/addons/tsl/display/PixelationPassNode.js';
222
223
  */
223
224
  class PixelationPassNode extends PassNode {
224
225
 
@@ -6,6 +6,7 @@ import { nodeObject, Fn, uv, uniform, vec2, sin, cos, vec4, convertToTexture } f
6
6
  * separates color channels and offsets them from each other.
7
7
  *
8
8
  * @augments TempNode
9
+ * @three_import import { rgbShift } from 'three/addons/tsl/display/RGBShiftNode.js';
9
10
  */
10
11
  class RGBShiftNode extends TempNode {
11
12
 
@@ -15,6 +15,7 @@ let _rendererState;
15
15
  * Reference: {@link https://github.com/iryoku/smaa/releases/tag/v2.8}.
16
16
  *
17
17
  * @augments TempNode
18
+ * @three_import import { smaa } from 'three/addons/tsl/display/SMAANode.js';
18
19
  */
19
20
  class SMAANode extends TempNode {
20
21
 
@@ -320,11 +321,11 @@ class SMAANode extends TempNode {
320
321
  // Calculate left and top deltas:
321
322
  const Cleft = this.textureNode.sample( vOffset0.xy ).rgb.toVar();
322
323
  let t = abs( C.sub( Cleft ) );
323
- delta.x = max( max( t.r, t.g ), t.b );
324
+ delta.x = max( t.r, t.g, t.b );
324
325
 
325
326
  const Ctop = this.textureNode.sample( vOffset0.zw ).rgb.toVar();
326
327
  t = abs( C.sub( Ctop ) );
327
- delta.y = max( max( t.r, t.g ), t.b );
328
+ delta.y = max( t.r, t.g, t.b );
328
329
 
329
330
  // We do the usual threshold:
330
331
  const edges = step( threshold, delta.xy ).toVar();
@@ -335,26 +336,26 @@ class SMAANode extends TempNode {
335
336
  // Calculate right and bottom deltas:
336
337
  const Cright = this.textureNode.sample( vOffset1.xy ).rgb.toVar();
337
338
  t = abs( C.sub( Cright ) );
338
- delta.z = max( max( t.r, t.g ), t.b );
339
+ delta.z = max( t.r, t.g, t.b );
339
340
 
340
341
  const Cbottom = this.textureNode.sample( vOffset1.zw ).rgb.toVar();
341
342
  t = abs( C.sub( Cbottom ) );
342
- delta.w = max( max( t.r, t.g ), t.b );
343
+ delta.w = max( t.r, t.g, t.b );
343
344
 
344
345
  // Calculate the maximum delta in the direct neighborhood:
345
- let maxDelta = max( max( max( delta.x, delta.y ), delta.z ), delta.w ).toVar();
346
+ let maxDelta = max( delta.x, delta.y, delta.z, delta.w ).toVar();
346
347
 
347
348
  // Calculate left-left and top-top deltas:
348
349
  const Cleftleft = this.textureNode.sample( vOffset2.xy ).rgb.toVar();
349
350
  t = abs( C.sub( Cleftleft ) );
350
- delta.z = max( max( t.r, t.g ), t.b );
351
+ delta.z = max( t.r, t.g, t.b );
351
352
 
352
353
  const Ctoptop = this.textureNode.sample( vOffset2.zw ).rgb.toVar();
353
354
  t = abs( C.sub( Ctoptop ) );
354
- delta.w = max( max( t.r, t.g ), t.b );
355
+ delta.w = max( t.r, t.g, t.b );
355
356
 
356
357
  // Calculate the final maximum delta:
357
- maxDelta = max( max( maxDelta, delta.z ), delta.w );
358
+ maxDelta = max( maxDelta, delta.z, delta.w );
358
359
 
359
360
  // Local contrast adaptation in action:
360
361
  edges.xy.mulAssign( vec2( step( float( 0.5 ).mul( maxDelta ), delta.xy ) ) );
@@ -1,5 +1,5 @@
1
1
  import { AdditiveBlending, Color, Vector2, RendererUtils, PassNode, QuadMesh, NodeMaterial } from 'three/webgpu';
2
- import { nodeObject, uniform, mrt, texture, getTextureIndex } from 'three/tsl';
2
+ import { nodeObject, uniform, mrt, texture, getTextureIndex, unpremultiplyAlpha } from 'three/tsl';
3
3
 
4
4
  const _size = /*@__PURE__*/ new Vector2();
5
5
 
@@ -15,6 +15,7 @@ let _rendererState;
15
15
  * Reference: {@link https://en.wikipedia.org/wiki/Supersampling}
16
16
  *
17
17
  * @augments PassNode
18
+ * @three_import import { ssaaPass } from 'three/addons/tsl/display/SSAAPassNode.js';
18
19
  */
19
20
  class SSAAPassNode extends PassNode {
20
21
 
@@ -113,7 +114,7 @@ class SSAAPassNode extends PassNode {
113
114
  const { renderer } = frame;
114
115
  const { scene, camera } = this;
115
116
 
116
- _rendererState = RendererUtils.resetRendererAndSceneState( renderer, scene, _rendererState );
117
+ _rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
117
118
 
118
119
  //
119
120
 
@@ -229,7 +230,7 @@ class SSAAPassNode extends PassNode {
229
230
 
230
231
  //
231
232
 
232
- RendererUtils.restoreRendererAndSceneState( renderer, scene, _rendererState );
233
+ RendererUtils.restoreRendererState( renderer, _rendererState );
233
234
 
234
235
  }
235
236
 
@@ -276,7 +277,7 @@ class SSAAPassNode extends PassNode {
276
277
  }
277
278
 
278
279
  this._quadMesh.material = new NodeMaterial();
279
- this._quadMesh.material.fragmentNode = sampleTexture;
280
+ this._quadMesh.material.fragmentNode = unpremultiplyAlpha( sampleTexture );
280
281
  this._quadMesh.material.transparent = true;
281
282
  this._quadMesh.material.depthTest = false;
282
283
  this._quadMesh.material.depthWrite = false;
@@ -11,6 +11,7 @@ let _rendererState;
11
11
  * Reference: {@link https://lettier.github.io/3d-game-shaders-for-beginners/screen-space-reflection.html}
12
12
  *
13
13
  * @augments TempNode
14
+ * @three_import import { ssr } from 'three/addons/tsl/display/SSRNode.js';
14
15
  */
15
16
  class SSRNode extends TempNode {
16
17