@plastic-software/three 0.175.14 → 0.179.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 (572) hide show
  1. package/README.md +4 -4
  2. package/build/three.cjs +8402 -6787
  3. package/build/three.core.js +8007 -6688
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +397 -102
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +84 -27
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +6831 -2838
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +6648 -2838
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +1 -3
  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 +2 -1
  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 +22 -8
  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 +57 -38
  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 +679 -300
  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 +48 -8
  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 +11 -2
  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/libs/meshopt_decoder.module.js +75 -58
  76. package/examples/jsm/lighting/TiledLighting.js +1 -0
  77. package/examples/jsm/lights/LightProbeGenerator.js +15 -3
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  79. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  80. package/examples/jsm/lines/Line2.js +1 -0
  81. package/examples/jsm/lines/LineGeometry.js +1 -0
  82. package/examples/jsm/lines/LineMaterial.js +4 -4
  83. package/examples/jsm/lines/LineSegments2.js +1 -0
  84. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  85. package/examples/jsm/lines/Wireframe.js +1 -0
  86. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  87. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  88. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  89. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  90. package/examples/jsm/loaders/3DMLoader.js +1 -0
  91. package/examples/jsm/loaders/3MFLoader.js +1 -0
  92. package/examples/jsm/loaders/AMFLoader.js +1 -0
  93. package/examples/jsm/loaders/BVHLoader.js +1 -0
  94. package/examples/jsm/loaders/ColladaLoader.js +6 -5
  95. package/examples/jsm/loaders/DDSLoader.js +1 -0
  96. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  97. package/examples/jsm/loaders/EXRLoader.js +211 -22
  98. package/examples/jsm/loaders/FBXLoader.js +25 -23
  99. package/examples/jsm/loaders/FontLoader.js +1 -0
  100. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  101. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  102. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  103. package/examples/jsm/loaders/IESLoader.js +1 -0
  104. package/examples/jsm/loaders/KMZLoader.js +1 -0
  105. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  106. package/examples/jsm/loaders/KTXLoader.js +1 -0
  107. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  108. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  110. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  111. package/examples/jsm/loaders/LWOLoader.js +1 -13
  112. package/examples/jsm/loaders/LottieLoader.js +15 -0
  113. package/examples/jsm/loaders/MD2Loader.js +1 -0
  114. package/examples/jsm/loaders/MDDLoader.js +1 -0
  115. package/examples/jsm/loaders/MTLLoader.js +4 -3
  116. package/examples/jsm/loaders/MaterialXLoader.js +213 -30
  117. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  118. package/examples/jsm/loaders/OBJLoader.js +1 -0
  119. package/examples/jsm/loaders/PCDLoader.js +122 -19
  120. package/examples/jsm/loaders/PDBLoader.js +1 -0
  121. package/examples/jsm/loaders/PLYLoader.js +1 -0
  122. package/examples/jsm/loaders/PVRLoader.js +1 -0
  123. package/examples/jsm/loaders/RGBELoader.js +1 -0
  124. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  125. package/examples/jsm/loaders/STLLoader.js +1 -0
  126. package/examples/jsm/loaders/SVGLoader.js +1 -0
  127. package/examples/jsm/loaders/TDSLoader.js +1 -0
  128. package/examples/jsm/loaders/TGALoader.js +1 -0
  129. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  130. package/examples/jsm/loaders/TTFLoader.js +14 -1
  131. package/examples/jsm/loaders/USDLoader.js +219 -0
  132. package/examples/jsm/loaders/USDZLoader.js +4 -891
  133. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  134. package/examples/jsm/loaders/VOXLoader.js +1 -0
  135. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  136. package/examples/jsm/loaders/VTKLoader.js +1 -0
  137. package/examples/jsm/loaders/XYZLoader.js +1 -0
  138. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  139. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  140. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  141. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  142. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  143. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  144. package/examples/jsm/math/Capsule.js +2 -0
  145. package/examples/jsm/math/ColorConverter.js +1 -0
  146. package/examples/jsm/math/ConvexHull.js +2 -0
  147. package/examples/jsm/math/ImprovedNoise.js +19 -14
  148. package/examples/jsm/math/Lut.js +2 -0
  149. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  150. package/examples/jsm/math/OBB.js +2 -0
  151. package/examples/jsm/math/Octree.js +20 -1
  152. package/examples/jsm/math/SimplexNoise.js +2 -0
  153. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  155. package/examples/jsm/misc/Gyroscope.js +1 -0
  156. package/examples/jsm/misc/MD2Character.js +2 -0
  157. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  158. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  159. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  160. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  161. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  162. package/examples/jsm/misc/RollerCoaster.js +5 -0
  163. package/examples/jsm/misc/TubePainter.js +1 -0
  164. package/examples/jsm/misc/Volume.js +2 -0
  165. package/examples/jsm/misc/VolumeSlice.js +1 -0
  166. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  167. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  168. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  169. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  170. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  171. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  172. package/examples/jsm/objects/Lensflare.js +3 -0
  173. package/examples/jsm/objects/LensflareMesh.js +4 -3
  174. package/examples/jsm/objects/MarchingCubes.js +2 -0
  175. package/examples/jsm/objects/Reflector.js +1 -0
  176. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  177. package/examples/jsm/objects/Refractor.js +1 -0
  178. package/examples/jsm/objects/ShadowMesh.js +1 -0
  179. package/examples/jsm/objects/Sky.js +2 -1
  180. package/examples/jsm/objects/SkyMesh.js +22 -19
  181. package/examples/jsm/objects/Water.js +1 -0
  182. package/examples/jsm/objects/Water2.js +1 -0
  183. package/examples/jsm/objects/Water2Mesh.js +3 -1
  184. package/examples/jsm/objects/WaterMesh.js +2 -1
  185. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  186. package/examples/jsm/physics/JoltPhysics.js +1 -0
  187. package/examples/jsm/physics/RapierPhysics.js +149 -13
  188. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  189. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  190. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  191. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  192. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  193. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  194. package/examples/jsm/postprocessing/EffectComposer.js +4 -2
  195. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  196. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  197. package/examples/jsm/postprocessing/GTAOPass.js +14 -12
  198. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  199. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  200. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  201. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  202. package/examples/jsm/postprocessing/OutlinePass.js +22 -19
  203. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  204. package/examples/jsm/postprocessing/Pass.js +3 -1
  205. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  206. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  207. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  208. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  209. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  210. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  211. package/examples/jsm/postprocessing/SSAOPass.js +12 -10
  212. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  213. package/examples/jsm/postprocessing/SavePass.js +2 -1
  214. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  215. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  216. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  217. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  218. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  219. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  220. package/examples/jsm/renderers/Projector.js +2 -0
  221. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  222. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  223. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  224. package/examples/jsm/shaders/BasicShader.js +4 -1
  225. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  226. package/examples/jsm/shaders/BlendShader.js +4 -1
  227. package/examples/jsm/shaders/BokehShader.js +4 -1
  228. package/examples/jsm/shaders/BokehShader2.js +4 -1
  229. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  230. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  231. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  232. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  233. package/examples/jsm/shaders/CopyShader.js +4 -1
  234. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  235. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  236. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  237. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  238. package/examples/jsm/shaders/ExposureShader.js +4 -1
  239. package/examples/jsm/shaders/FXAAShader.js +4 -1
  240. package/examples/jsm/shaders/FilmShader.js +4 -1
  241. package/examples/jsm/shaders/FocusShader.js +4 -1
  242. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  243. package/examples/jsm/shaders/GTAOShader.js +4 -1
  244. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  245. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  246. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  247. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  248. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  249. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  250. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  251. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  252. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  253. package/examples/jsm/shaders/MirrorShader.js +4 -1
  254. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  255. package/examples/jsm/shaders/OutputShader.js +4 -1
  256. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  257. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  258. package/examples/jsm/shaders/SAOShader.js +4 -1
  259. package/examples/jsm/shaders/SMAAShader.js +1 -0
  260. package/examples/jsm/shaders/SSAOShader.js +4 -1
  261. package/examples/jsm/shaders/SSRShader.js +1 -0
  262. package/examples/jsm/shaders/SepiaShader.js +4 -1
  263. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  264. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  265. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  266. package/examples/jsm/shaders/ToonShader.js +2 -1
  267. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  268. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
  269. package/examples/jsm/shaders/VelocityShader.js +4 -1
  270. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  271. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  272. package/examples/jsm/shaders/VignetteShader.js +4 -1
  273. package/examples/jsm/shaders/VolumeShader.js +5 -2
  274. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  275. package/examples/jsm/textures/FlakesTexture.js +2 -0
  276. package/examples/jsm/transpiler/AST.js +381 -30
  277. package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
  278. package/examples/jsm/transpiler/Linker.js +327 -0
  279. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  280. package/examples/jsm/transpiler/Transpiler.js +19 -1
  281. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  282. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  283. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  284. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  285. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  286. package/examples/jsm/tsl/display/BloomNode.js +9 -7
  287. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  288. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  289. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  290. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  291. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  292. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  293. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  294. package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
  295. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  296. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  297. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  298. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  299. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  300. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  301. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  302. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  303. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  304. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  305. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  306. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  307. package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
  308. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  309. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  310. package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
  311. package/examples/jsm/tsl/math/Bayer.js +4 -1
  312. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  313. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  314. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  315. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  316. package/examples/jsm/utils/CameraUtils.js +4 -1
  317. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  318. package/examples/jsm/utils/GeometryUtils.js +4 -1
  319. package/examples/jsm/utils/LDrawUtils.js +2 -0
  320. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  321. package/examples/jsm/utils/SceneUtils.js +4 -1
  322. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  323. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  324. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  325. package/examples/jsm/utils/SortUtils.js +4 -1
  326. package/examples/jsm/utils/UVsDebug.js +4 -1
  327. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  328. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  329. package/examples/jsm/utils/WorkerPool.js +2 -0
  330. package/examples/jsm/webxr/ARButton.js +1 -0
  331. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  332. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  333. package/examples/jsm/webxr/Text2D.js +4 -1
  334. package/examples/jsm/webxr/VRButton.js +1 -0
  335. package/examples/jsm/webxr/XRButton.js +1 -0
  336. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  338. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  339. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  340. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  341. package/examples/jsm/webxr/XRPlanes.js +1 -0
  342. package/package.json +6 -4
  343. package/src/Three.Core.js +2 -1
  344. package/src/Three.TSL.js +83 -26
  345. package/src/Three.WebGPU.Nodes.js +1 -0
  346. package/src/Three.WebGPU.js +3 -0
  347. package/src/animation/KeyframeTrack.js +1 -1
  348. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  350. package/src/audio/AudioListener.js +13 -10
  351. package/src/cameras/ArrayCamera.js +9 -1
  352. package/src/cameras/Camera.js +14 -0
  353. package/src/cameras/OrthographicCamera.js +1 -1
  354. package/src/cameras/PerspectiveCamera.js +1 -1
  355. package/src/constants.js +47 -20
  356. package/src/core/BufferAttribute.js +3 -3
  357. package/src/core/BufferGeometry.js +2 -5
  358. package/src/core/Clock.js +2 -8
  359. package/src/core/GLBufferAttribute.js +13 -1
  360. package/src/core/Object3D.js +23 -22
  361. package/src/core/RenderTarget.js +65 -21
  362. package/src/core/RenderTarget3D.js +1 -0
  363. package/{examples/jsm/misc → src/core}/Timer.js +4 -40
  364. package/src/extras/PMREMGenerator.js +11 -0
  365. package/src/extras/TextureUtils.js +1 -5
  366. package/src/extras/core/Curve.js +1 -1
  367. package/src/extras/core/Path.js +22 -22
  368. package/src/geometries/CapsuleGeometry.js +167 -17
  369. package/src/geometries/ExtrudeGeometry.js +39 -29
  370. package/src/helpers/ArrowHelper.js +2 -2
  371. package/src/helpers/CameraHelper.js +41 -11
  372. package/src/helpers/SkeletonHelper.js +36 -7
  373. package/src/lights/LightShadow.js +34 -7
  374. package/src/lights/PointLightShadow.js +1 -1
  375. package/src/lights/SpotLightShadow.js +9 -1
  376. package/src/lights/webgpu/ProjectorLight.js +46 -0
  377. package/src/loaders/BufferGeometryLoader.js +1 -10
  378. package/src/loaders/FileLoader.js +27 -4
  379. package/src/loaders/ImageBitmapLoader.js +48 -9
  380. package/src/loaders/ImageLoader.js +55 -8
  381. package/src/loaders/Loader.js +14 -0
  382. package/src/loaders/LoadingManager.js +23 -0
  383. package/src/loaders/ObjectLoader.js +44 -16
  384. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  385. package/src/materials/Material.js +1 -7
  386. package/src/materials/MeshBasicMaterial.js +1 -1
  387. package/src/materials/nodes/Line2NodeMaterial.js +0 -8
  388. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  389. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  390. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  391. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  392. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  393. package/src/materials/nodes/NodeMaterial.js +106 -20
  394. package/src/materials/nodes/PointsNodeMaterial.js +5 -0
  395. package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
  396. package/src/math/Box3.js +28 -0
  397. package/src/math/Color.js +7 -7
  398. package/src/math/ColorManagement.js +22 -3
  399. package/src/math/Frustum.js +25 -9
  400. package/src/math/FrustumArray.js +258 -0
  401. package/src/math/Line3.js +129 -2
  402. package/src/math/Matrix4.js +48 -27
  403. package/src/math/Quaternion.js +1 -1
  404. package/src/math/Ray.js +2 -0
  405. package/src/math/Sphere.js +28 -0
  406. package/src/math/Spherical.js +2 -2
  407. package/src/nodes/Nodes.js +3 -3
  408. package/src/nodes/TSL.js +6 -3
  409. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  410. package/src/nodes/accessors/Bitangent.js +54 -26
  411. package/src/nodes/accessors/Camera.js +40 -13
  412. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  413. package/src/nodes/accessors/InstanceNode.js +5 -4
  414. package/src/nodes/accessors/Lights.js +2 -2
  415. package/src/nodes/accessors/MaterialNode.js +4 -0
  416. package/src/nodes/accessors/ModelNode.js +1 -1
  417. package/src/nodes/accessors/Normal.js +110 -24
  418. package/src/nodes/accessors/Object3DNode.js +7 -8
  419. package/src/nodes/accessors/Position.js +14 -4
  420. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  421. package/src/nodes/accessors/ReferenceNode.js +19 -4
  422. package/src/nodes/accessors/ReflectVector.js +3 -3
  423. package/src/nodes/accessors/SceneNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +3 -2
  425. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  426. package/src/nodes/accessors/StorageTextureNode.js +15 -4
  427. package/src/nodes/accessors/Tangent.js +25 -17
  428. package/src/nodes/accessors/TangentUtils.js +46 -0
  429. package/src/nodes/accessors/TextureBicubic.js +21 -3
  430. package/src/nodes/accessors/TextureNode.js +71 -8
  431. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  432. package/src/nodes/accessors/VelocityNode.js +1 -0
  433. package/src/nodes/accessors/VertexColorNode.js +4 -4
  434. package/src/nodes/code/CodeNode.js +8 -11
  435. package/src/nodes/core/ArrayNode.js +12 -0
  436. package/src/nodes/core/AssignNode.js +30 -5
  437. package/src/nodes/core/AttributeNode.js +2 -2
  438. package/src/nodes/core/ContextNode.js +27 -4
  439. package/src/nodes/core/Node.js +83 -22
  440. package/src/nodes/core/NodeBuilder.js +273 -49
  441. package/src/nodes/core/NodeUtils.js +46 -1
  442. package/src/nodes/core/NodeVarying.js +19 -1
  443. package/src/nodes/core/PropertyNode.js +8 -12
  444. package/src/nodes/core/StackNode.js +171 -26
  445. package/src/nodes/core/StructTypeNode.js +26 -4
  446. package/src/nodes/core/SubBuildNode.js +89 -0
  447. package/src/nodes/core/UniformNode.js +63 -5
  448. package/src/nodes/core/VarNode.js +102 -4
  449. package/src/nodes/core/VaryingNode.js +45 -24
  450. package/src/nodes/display/BlendModes.js +42 -1
  451. package/src/nodes/display/ColorSpaceNode.js +4 -27
  452. package/src/nodes/display/FrontFacingNode.js +34 -2
  453. package/src/nodes/display/NormalMapNode.js +19 -50
  454. package/src/nodes/display/PassNode.js +165 -20
  455. package/src/nodes/display/ScreenNode.js +0 -26
  456. package/src/nodes/display/ViewportTextureNode.js +67 -7
  457. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  458. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  459. package/src/nodes/functions/PhongLightingModel.js +3 -3
  460. package/src/nodes/functions/PhysicalLightingModel.js +16 -16
  461. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  462. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  463. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  464. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  465. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  466. package/src/nodes/gpgpu/ComputeNode.js +68 -24
  467. package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
  468. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  469. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  470. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  471. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  472. package/src/nodes/lighting/LightsNode.js +29 -11
  473. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  474. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  475. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  476. package/src/nodes/lighting/ShadowNode.js +174 -242
  477. package/src/nodes/lighting/SpotLightNode.js +44 -7
  478. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  479. package/src/nodes/materialx/lib/mx_noise.js +166 -2
  480. package/src/nodes/math/ConditionalNode.js +1 -20
  481. package/src/nodes/math/MathNode.js +146 -75
  482. package/src/nodes/math/OperatorNode.js +129 -119
  483. package/src/nodes/shapes/Shapes.js +5 -4
  484. package/src/nodes/tsl/TSLBase.js +1 -0
  485. package/src/nodes/tsl/TSLCore.js +222 -72
  486. package/src/nodes/utils/DebugNode.js +16 -4
  487. package/src/nodes/utils/Discard.js +2 -2
  488. package/src/nodes/utils/EquirectUV.js +27 -0
  489. package/src/nodes/utils/EventNode.js +83 -0
  490. package/src/nodes/utils/LoopNode.js +64 -34
  491. package/src/nodes/utils/MatcapUV.js +22 -0
  492. package/src/nodes/utils/RTTNode.js +22 -5
  493. package/src/nodes/utils/ReflectorNode.js +77 -7
  494. package/src/nodes/utils/SampleNode.js +81 -0
  495. package/src/nodes/utils/TriplanarTextures.js +65 -0
  496. package/src/objects/BatchedMesh.js +20 -6
  497. package/src/objects/Mesh.js +9 -0
  498. package/src/objects/Skeleton.js +1 -1
  499. package/src/objects/Sprite.js +9 -0
  500. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  501. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  502. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  503. package/src/renderers/WebGLRenderer.js +45 -32
  504. package/src/renderers/common/Animation.js +2 -2
  505. package/src/renderers/common/Background.js +13 -2
  506. package/src/renderers/common/Bindings.js +19 -18
  507. package/src/renderers/common/Color4.js +2 -2
  508. package/src/renderers/common/CubeRenderTarget.js +1 -1
  509. package/src/renderers/common/PostProcessing.js +60 -5
  510. package/src/renderers/common/RenderList.js +0 -4
  511. package/src/renderers/common/RenderObject.js +80 -4
  512. package/src/renderers/common/Renderer.js +133 -22
  513. package/src/renderers/common/SampledTexture.js +3 -71
  514. package/src/renderers/common/Sampler.js +79 -0
  515. package/src/renderers/common/Storage3DTexture.js +100 -0
  516. package/src/renderers/common/StorageArrayTexture.js +84 -0
  517. package/src/renderers/common/StorageTexture.js +19 -0
  518. package/src/renderers/common/Textures.js +34 -24
  519. package/src/renderers/common/TimestampQueryPool.js +1 -0
  520. package/src/renderers/common/Uniform.js +1 -1
  521. package/src/renderers/common/UniformsGroup.js +14 -18
  522. package/src/renderers/common/XRManager.js +183 -35
  523. package/src/renderers/common/XRRenderTarget.js +21 -4
  524. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  525. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  526. package/src/renderers/common/nodes/Nodes.js +13 -3
  527. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  528. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
  529. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  530. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  531. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  532. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  533. package/src/renderers/webgl/WebGLMaterials.js +6 -6
  534. package/src/renderers/webgl/WebGLProgram.js +22 -16
  535. package/src/renderers/webgl/WebGLPrograms.js +8 -6
  536. package/src/renderers/webgl/WebGLShadowMap.js +14 -3
  537. package/src/renderers/webgl/WebGLState.js +4 -4
  538. package/src/renderers/webgl/WebGLTextures.js +163 -11
  539. package/src/renderers/webgl/WebGLUtils.js +1 -3
  540. package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
  541. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
  542. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  543. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  544. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  545. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  546. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  547. package/src/renderers/webgpu/WebGPUBackend.js +505 -143
  548. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  549. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  550. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  551. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
  552. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  553. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  554. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
  555. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  556. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
  557. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
  558. package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
  559. package/src/renderers/webxr/WebXRController.js +1 -1
  560. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  561. package/src/renderers/webxr/WebXRManager.js +70 -9
  562. package/src/textures/DepthTexture.js +6 -10
  563. package/src/textures/ExternalTexture.js +45 -0
  564. package/src/textures/FramebufferTexture.js +2 -2
  565. package/src/textures/Source.js +32 -0
  566. package/src/textures/Texture.js +118 -1
  567. package/src/textures/VideoTexture.js +31 -3
  568. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  569. package/src/core/RenderTargetArray.js +0 -40
  570. package/src/nodes/utils/EquirectUVNode.js +0 -65
  571. package/src/nodes/utils/MatcapUVNode.js +0 -49
  572. 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
 
@@ -363,7 +364,9 @@ class BloomNode extends TempNode {
363
364
 
364
365
  // gaussian blur materials
365
366
 
366
- const kernelSizeArray = [ 3, 5, 7, 9, 11 ];
367
+ // These sizes have been changed to account for the altered coefficents-calculation to avoid blockiness,
368
+ // while retaining the same blur-strength. For details see https://github.com/mrdoob/three.js/pull/31528
369
+ const kernelSizeArray = [ 6, 10, 14, 18, 22 ];
367
370
 
368
371
  for ( let i = 0; i < this._nMips; i ++ ) {
369
372
 
@@ -448,10 +451,11 @@ class BloomNode extends TempNode {
448
451
  _getSeparableBlurMaterial( builder, kernelRadius ) {
449
452
 
450
453
  const coefficients = [];
454
+ const sigma = kernelRadius / 3;
451
455
 
452
456
  for ( let i = 0; i < kernelRadius; i ++ ) {
453
457
 
454
- coefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( kernelRadius * kernelRadius ) ) / kernelRadius );
458
+ coefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( sigma * sigma ) ) / sigma );
455
459
 
456
460
  }
457
461
 
@@ -467,8 +471,7 @@ class BloomNode extends TempNode {
467
471
 
468
472
  const separableBlurPass = Fn( () => {
469
473
 
470
- const weightSum = gaussianCoefficients.element( 0 ).toVar();
471
- const diffuseSum = sampleTexel( uvNode ).rgb.mul( weightSum ).toVar();
474
+ const diffuseSum = sampleTexel( uvNode ).rgb.mul( gaussianCoefficients.element( 0 ) ).toVar();
472
475
 
473
476
  Loop( { start: int( 1 ), end: int( kernelRadius ), type: 'int', condition: '<' }, ( { i } ) => {
474
477
 
@@ -477,12 +480,11 @@ class BloomNode extends TempNode {
477
480
  const uvOffset = direction.mul( invSize ).mul( x );
478
481
  const sample1 = sampleTexel( uvNode.add( uvOffset ) ).rgb;
479
482
  const sample2 = sampleTexel( uvNode.sub( uvOffset ) ).rgb;
480
- diffuseSum.addAssign( add( sample1, sample2 ).mul( w ) );
481
- weightSum.addAssign( float( 2.0 ).mul( w ) );
483
+ diffuseSum.addAssign( add( sample1, sample2 ).mul( w ) );
482
484
 
483
485
  } );
484
486
 
485
- return vec4( diffuseSum.div( weightSum ), 1.0 );
487
+ return vec4( diffuseSum, 1.0 );
486
488
 
487
489
  } );
488
490
 
@@ -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, 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
 
@@ -51,7 +26,7 @@ class GaussianBlurNode extends TempNode {
51
26
  * @param {Node<vec2|float>} directionNode - Defines the direction and radius of the blur.
52
27
  * @param {number} sigma - Controls the kernel of the blur filter. Higher values mean a wider blur radius.
53
28
  */
54
- constructor( textureNode, directionNode = null, sigma = 2 ) {
29
+ constructor( textureNode, directionNode = null, sigma = 4 ) {
55
30
 
56
31
  super( 'vec4' );
57
32
 
@@ -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
 
@@ -292,8 +267,7 @@ class GaussianBlurNode extends TempNode {
292
267
  const invSize = this._invSize;
293
268
  const direction = directionNode.mul( this._passDirection );
294
269
 
295
- const weightSum = float( gaussianCoefficients[ 0 ] ).toVar();
296
- const diffuseSum = vec4( sampleTexture( uvNode ).mul( weightSum ) ).toVar();
270
+ const diffuseSum = vec4( sampleTexture( uvNode ).mul( gaussianCoefficients[ 0 ] ) ).toVar();
297
271
 
298
272
  for ( let i = 1; i < kernelSize; i ++ ) {
299
273
 
@@ -306,11 +280,9 @@ class GaussianBlurNode extends TempNode {
306
280
  const sample2 = sampleTexture( uvNode.sub( uvOffset ) );
307
281
 
308
282
  diffuseSum.addAssign( sample1.add( sample2 ).mul( w ) );
309
- weightSum.addAssign( mul( 2.0, w ) );
310
-
311
283
  }
312
284
 
313
- return output( diffuseSum.div( weightSum ) );
285
+ return output( diffuseSum );
314
286
 
315
287
  } );
316
288
 
@@ -353,10 +325,11 @@ class GaussianBlurNode extends TempNode {
353
325
  _getCoefficients( kernelRadius ) {
354
326
 
355
327
  const coefficients = [];
328
+ const sigma = kernelRadius / 3;
356
329
 
357
330
  for ( let i = 0; i < kernelRadius; i ++ ) {
358
331
 
359
- coefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( kernelRadius * kernelRadius ) ) / kernelRadius );
332
+ coefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( sigma * sigma ) ) / sigma );
360
333
 
361
334
  }
362
335
 
@@ -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