super-three 0.176.0 → 0.177.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 (477) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +7631 -6743
  3. package/build/three.core.js +7496 -6758
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +172 -22
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +14 -6
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +3948 -1678
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +3941 -1678
  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 -0
  17. package/examples/jsm/capabilities/WebGPU.js +1 -0
  18. package/examples/jsm/controls/ArcballControls.js +14 -3
  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 +1 -0
  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 +1 -0
  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 +5 -4
  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 +24 -22
  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 +58 -1
  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 +5 -6
  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/GLSLDecoder.js +1 -2
  274. package/examples/jsm/transpiler/TSLEncoder.js +52 -8
  275. package/examples/jsm/transpiler/Transpiler.js +2 -0
  276. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  277. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  278. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  279. package/examples/jsm/tsl/display/BloomNode.js +1 -0
  280. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  281. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  282. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  283. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  284. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  285. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  286. package/examples/jsm/tsl/display/GaussianBlurNode.js +2 -27
  287. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  288. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  289. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  290. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  291. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  292. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  293. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  294. package/examples/jsm/tsl/display/SSAAPassNode.js +3 -2
  295. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  296. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  297. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  298. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  299. package/examples/jsm/tsl/display/TRAAPassNode.js +5 -4
  300. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  301. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  302. package/examples/jsm/tsl/lighting/TiledLightsNode.js +4 -3
  303. package/examples/jsm/tsl/math/Bayer.js +4 -1
  304. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  305. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  306. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  307. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  308. package/examples/jsm/utils/CameraUtils.js +4 -1
  309. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  310. package/examples/jsm/utils/GeometryUtils.js +4 -1
  311. package/examples/jsm/utils/LDrawUtils.js +2 -0
  312. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  313. package/examples/jsm/utils/SceneUtils.js +4 -1
  314. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  315. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  316. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  317. package/examples/jsm/utils/SortUtils.js +4 -1
  318. package/examples/jsm/utils/UVsDebug.js +4 -1
  319. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  320. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  321. package/examples/jsm/utils/WorkerPool.js +2 -0
  322. package/examples/jsm/webxr/ARButton.js +1 -0
  323. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  324. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  325. package/examples/jsm/webxr/Text2D.js +4 -1
  326. package/examples/jsm/webxr/VRButton.js +1 -0
  327. package/examples/jsm/webxr/XRButton.js +1 -0
  328. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  329. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  330. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  331. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  332. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  333. package/examples/jsm/webxr/XRPlanes.js +1 -0
  334. package/package.json +6 -4
  335. package/src/Three.Core.js +1 -1
  336. package/src/Three.TSL.js +13 -5
  337. package/src/Three.WebGPU.Nodes.js +1 -0
  338. package/src/Three.WebGPU.js +1 -0
  339. package/src/audio/AudioListener.js +13 -10
  340. package/src/cameras/ArrayCamera.js +9 -1
  341. package/src/constants.js +47 -20
  342. package/src/core/BufferAttribute.js +1 -1
  343. package/src/core/BufferGeometry.js +2 -5
  344. package/src/core/Object3D.js +22 -21
  345. package/src/core/RenderTarget.js +65 -21
  346. package/src/core/RenderTarget3D.js +1 -0
  347. package/src/extras/TextureUtils.js +1 -5
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/geometries/CapsuleGeometry.js +167 -17
  350. package/src/geometries/ExtrudeGeometry.js +39 -29
  351. package/src/helpers/ArrowHelper.js +2 -2
  352. package/src/helpers/SkeletonHelper.js +1 -1
  353. package/src/lights/LightShadow.js +14 -0
  354. package/src/lights/SpotLightShadow.js +9 -1
  355. package/src/lights/webgpu/ProjectorLight.js +46 -0
  356. package/src/loaders/BufferGeometryLoader.js +1 -10
  357. package/src/loaders/ImageBitmapLoader.js +21 -5
  358. package/src/loaders/ObjectLoader.js +44 -16
  359. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  360. package/src/materials/Material.js +1 -7
  361. package/src/materials/nodes/NodeMaterial.js +81 -18
  362. package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
  363. package/src/math/Box3.js +28 -0
  364. package/src/math/Color.js +7 -7
  365. package/src/math/ColorManagement.js +22 -3
  366. package/src/math/FrustumArray.js +253 -0
  367. package/src/math/Ray.js +2 -0
  368. package/src/math/Sphere.js +28 -0
  369. package/src/nodes/Nodes.js +1 -0
  370. package/src/nodes/TSL.js +1 -0
  371. package/src/nodes/accessors/Bitangent.js +31 -9
  372. package/src/nodes/accessors/Camera.js +31 -4
  373. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  374. package/src/nodes/accessors/InstanceNode.js +5 -4
  375. package/src/nodes/accessors/Lights.js +2 -2
  376. package/src/nodes/accessors/MaterialNode.js +4 -0
  377. package/src/nodes/accessors/ModelNode.js +1 -1
  378. package/src/nodes/accessors/Normal.js +26 -6
  379. package/src/nodes/accessors/Object3DNode.js +6 -7
  380. package/src/nodes/accessors/Position.js +14 -4
  381. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  382. package/src/nodes/accessors/ReferenceNode.js +1 -1
  383. package/src/nodes/accessors/SkinningNode.js +3 -2
  384. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  385. package/src/nodes/accessors/StorageTextureNode.js +14 -3
  386. package/src/nodes/accessors/TextureNode.js +59 -8
  387. package/src/nodes/accessors/VelocityNode.js +1 -0
  388. package/src/nodes/accessors/VertexColorNode.js +4 -4
  389. package/src/nodes/code/CodeNode.js +8 -11
  390. package/src/nodes/core/AssignNode.js +27 -5
  391. package/src/nodes/core/AttributeNode.js +2 -2
  392. package/src/nodes/core/CacheNode.js +14 -0
  393. package/src/nodes/core/ContextNode.js +7 -3
  394. package/src/nodes/core/Node.js +68 -19
  395. package/src/nodes/core/NodeBuilder.js +100 -12
  396. package/src/nodes/core/NodeUtils.js +42 -0
  397. package/src/nodes/core/NodeVarying.js +19 -1
  398. package/src/nodes/core/PropertyNode.js +8 -12
  399. package/src/nodes/core/StackNode.js +127 -2
  400. package/src/nodes/core/StructTypeNode.js +26 -4
  401. package/src/nodes/core/VarNode.js +11 -2
  402. package/src/nodes/core/VaryingNode.js +40 -21
  403. package/src/nodes/display/BlendModes.js +42 -1
  404. package/src/nodes/display/ColorSpaceNode.js +4 -27
  405. package/src/nodes/display/PassNode.js +8 -11
  406. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  407. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  408. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  409. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  410. package/src/nodes/gpgpu/ComputeNode.js +1 -1
  411. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  412. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  413. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  414. package/src/nodes/lighting/LightsNode.js +25 -7
  415. package/src/nodes/lighting/ProjectorLightNode.js +78 -0
  416. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  417. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  418. package/src/nodes/lighting/ShadowNode.js +172 -240
  419. package/src/nodes/lighting/SpotLightNode.js +44 -7
  420. package/src/nodes/materialx/lib/mx_noise.js +1 -1
  421. package/src/nodes/math/MathNode.js +56 -20
  422. package/src/nodes/math/OperatorNode.js +109 -82
  423. package/src/nodes/shapes/Shapes.js +5 -4
  424. package/src/nodes/tsl/TSLCore.js +140 -49
  425. package/src/nodes/utils/DebugNode.js +15 -3
  426. package/src/nodes/utils/Discard.js +2 -2
  427. package/src/nodes/utils/LoopNode.js +64 -17
  428. package/src/nodes/utils/ReflectorNode.js +67 -4
  429. package/src/objects/BatchedMesh.js +16 -4
  430. package/src/objects/Mesh.js +9 -0
  431. package/src/objects/Skeleton.js +1 -1
  432. package/src/objects/Sprite.js +9 -0
  433. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  434. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  435. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  436. package/src/renderers/WebGLRenderer.js +21 -10
  437. package/src/renderers/common/Animation.js +2 -2
  438. package/src/renderers/common/Background.js +11 -0
  439. package/src/renderers/common/RenderList.js +0 -4
  440. package/src/renderers/common/RenderObject.js +12 -1
  441. package/src/renderers/common/Renderer.js +116 -8
  442. package/src/renderers/common/Textures.js +15 -21
  443. package/src/renderers/common/TimestampQueryPool.js +1 -0
  444. package/src/renderers/common/Uniform.js +1 -1
  445. package/src/renderers/common/UniformsGroup.js +14 -18
  446. package/src/renderers/common/XRManager.js +154 -25
  447. package/src/renderers/common/extras/PMREMGenerator.js +29 -22
  448. package/src/renderers/common/nodes/Nodes.js +13 -3
  449. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  450. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  451. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  452. package/src/renderers/webgl/WebGLTextures.js +143 -4
  453. package/src/renderers/webgl/WebGLUtils.js +1 -3
  454. package/src/renderers/webgl-fallback/WebGLBackend.js +170 -34
  455. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -7
  456. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  457. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +42 -29
  458. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  459. package/src/renderers/webgpu/WebGPUBackend.js +442 -127
  460. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  461. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  462. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  463. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +75 -27
  464. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  465. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -1
  466. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -5
  467. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  468. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +34 -4
  469. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +44 -49
  470. package/src/renderers/webxr/WebXRController.js +1 -1
  471. package/src/renderers/webxr/WebXRManager.js +2 -1
  472. package/src/textures/DepthTexture.js +6 -10
  473. package/src/textures/Source.js +22 -0
  474. package/src/textures/Texture.js +118 -1
  475. package/src/textures/VideoTexture.js +1 -1
  476. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  477. package/src/core/RenderTargetArray.js +0 -40
@@ -15,6 +15,7 @@ const opLib = {
15
15
  '<=': 'lessThanEqual',
16
16
  '>=': 'greaterThanEqual',
17
17
  '==': 'equal',
18
+ '!=': 'notEqual',
18
19
  '&&': 'and',
19
20
  '||': 'or',
20
21
  '^^': 'xor',
@@ -60,6 +61,8 @@ class TSLEncoder {
60
61
  this.uniqueNames = false;
61
62
  this.reference = false;
62
63
 
64
+ this._currentVariable = null;
65
+
63
66
  this._currentProperties = {};
64
67
  this._lastStatement = null;
65
68
 
@@ -320,9 +323,22 @@ class TSLEncoder {
320
323
 
321
324
  let type = unaryLib[ node.type ];
322
325
 
323
- if ( node.after === false && ( node.type === '++' || node.type === '--' ) ) {
326
+ if ( node.type === '++' || node.type === '--' ) {
327
+
328
+ if ( this._currentVariable === null ) {
329
+
330
+ // optimize increment/decrement operator
331
+ // to avoid creating a new variable
332
+
333
+ node.after = false;
334
+
335
+ }
336
+
337
+ if ( node.after === false ) {
324
338
 
325
- type += 'Before';
339
+ type += 'Before';
340
+
341
+ }
326
342
 
327
343
  }
328
344
 
@@ -450,12 +466,34 @@ ${ this.tab }} )`;
450
466
  const name = node.initialization.name;
451
467
  const type = node.initialization.type;
452
468
  const condition = node.condition.type;
453
- const update = node.afterthought.type;
454
469
 
455
470
  const nameParam = name !== 'i' ? `, name: '${ name }'` : '';
456
471
  const typeParam = type !== 'int' ? `, type: '${ type }'` : '';
457
472
  const conditionParam = condition !== '<' ? `, condition: '${ condition }'` : '';
458
- const updateParam = update !== '++' ? `, update: '${ update }'` : '';
473
+
474
+ let updateParam = '';
475
+
476
+ if ( node.afterthought.isUnary ) {
477
+
478
+ if ( node.afterthought.type !== '++' ) {
479
+
480
+ updateParam = `, update: '${ node.afterthought.type }'`;
481
+
482
+ }
483
+
484
+ } else if ( node.afterthought.isOperator ) {
485
+
486
+ if ( node.afterthought.right.isAccessor || node.afterthought.right.isNumber ) {
487
+
488
+ updateParam = `, update: ${ this.emitExpression( node.afterthought.right ) }`;
489
+
490
+ } else {
491
+
492
+ updateParam = `, update: ( { i } ) => ${ this.emitExpression( node.afterthought ) }`;
493
+
494
+ }
495
+
496
+ }
459
497
 
460
498
  let loopStr = `Loop( { start: ${ start }, end: ${ end + nameParam + typeParam + conditionParam + updateParam } }, ( { ${ name } } ) => {\n\n`;
461
499
 
@@ -475,8 +513,10 @@ ${ this.tab }} )`;
475
513
 
476
514
  if ( ( initialization && initialization.isVariableDeclaration && initialization.next === null ) &&
477
515
  ( condition && condition.left.isAccessor && condition.left.property === initialization.name ) &&
478
- ( afterthought && afterthought.isUnary ) &&
479
- ( initialization.name === afterthought.expression.property )
516
+ ( afterthought && (
517
+ ( afterthought.isUnary && ( initialization.name === afterthought.expression.property ) ) ||
518
+ ( afterthought.isOperator && ( initialization.name === afterthought.left.property ) )
519
+ ) )
480
520
  ) {
481
521
 
482
522
  return this.emitLoop( node );
@@ -496,7 +536,7 @@ ${ this.tab }} )`;
496
536
  this.tab += '\t';
497
537
 
498
538
  let forStr = '{\n\n' + this.tab + initialization + ';\n\n';
499
- forStr += `${ this.tab }While( ${ condition }, () => {\n\n`;
539
+ forStr += `${ this.tab }Loop( ${ condition }, () => {\n\n`;
500
540
 
501
541
  forStr += this.emitBody( node.body ) + '\n\n';
502
542
 
@@ -508,7 +548,7 @@ ${ this.tab }} )`;
508
548
 
509
549
  forStr += this.tab + '}';
510
550
 
511
- this.imports.add( 'While' );
551
+ this.imports.add( 'Loop' );
512
552
 
513
553
  return forStr;
514
554
 
@@ -518,6 +558,8 @@ ${ this.tab }} )`;
518
558
 
519
559
  const { name, type, value, next } = node;
520
560
 
561
+ this._currentVariable = node;
562
+
521
563
  const valueStr = value ? this.emitExpression( value ) : '';
522
564
 
523
565
  let varStr = isRoot ? 'const ' : '';
@@ -555,6 +597,8 @@ ${ this.tab }} )`;
555
597
 
556
598
  this.addImport( type );
557
599
 
600
+ this._currentVariable = null;
601
+
558
602
  return varStr;
559
603
 
560
604
  }
@@ -4,6 +4,8 @@
4
4
  * `Transpiler` can only be used to convert GLSL into TSL right now. It is intended
5
5
  * to support developers when they want to migrate their custom materials from the
6
6
  * current to the new node-based material system.
7
+ *
8
+ * @three_import import Transpiler from 'three/addons/transpiler/Transpiler.js';
7
9
  */
8
10
  class Transpiler {
9
11
 
@@ -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
 
@@ -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, premult, unpremult } 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
 
@@ -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 ) ) );
@@ -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
 
@@ -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
 
@@ -7,6 +7,7 @@ import { nodeObject, Fn, uv, uniform, convertToTexture, vec2, vec3, vec4, mat3,
7
7
  * space conversion.
8
8
  *
9
9
  * @augments TempNode
10
+ * @three_import import { sobel } from 'three/addons/tsl/display/SobelOperatorNode.js';
10
11
  */
11
12
  class SobelOperatorNode extends TempNode {
12
13
 
@@ -15,6 +15,7 @@ let _rendererState;
15
15
  *
16
16
  * @abstract
17
17
  * @augments PassNode
18
+ * @three_import import { StereoCompositePassNode } from 'three/addons/tsl/display/StereoCompositePassNode.js';
18
19
  */
19
20
  class StereoCompositePassNode extends PassNode {
20
21
 
@@ -9,6 +9,7 @@ let _rendererState;
9
9
  * A special render pass node that renders the scene as a stereoscopic image.
10
10
  *
11
11
  * @augments PassNode
12
+ * @three_import import { stereoPass } from 'three/addons/tsl/display/StereoPassNode.js';
12
13
  */
13
14
  class StereoPassNode extends PassNode {
14
15
 
@@ -17,6 +17,7 @@ let _rendererState;
17
17
  * - {@link https://www.elopezr.com/temporal-aa-and-the-quest-for-the-holy-trail/}
18
18
  *
19
19
  * @augments PassNode
20
+ * @three_import import { traaPass } from 'three/addons/tsl/display/TRAAPassNode.js';
20
21
  */
21
22
  class TRAAPassNode extends PassNode {
22
23
 
@@ -153,7 +154,7 @@ class TRAAPassNode extends PassNode {
153
154
  const { renderer } = frame;
154
155
  const { scene, camera } = this;
155
156
 
156
- _rendererState = RendererUtils.resetRendererAndSceneState( renderer, scene, _rendererState );
157
+ _rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
157
158
 
158
159
  //
159
160
 
@@ -291,7 +292,7 @@ class TRAAPassNode extends PassNode {
291
292
 
292
293
  velocityOutput.setProjectionMatrix( null );
293
294
 
294
- RendererUtils.restoreRendererAndSceneState( renderer, scene, _rendererState );
295
+ RendererUtils.restoreRendererState( renderer, _rendererState );
295
296
 
296
297
  }
297
298
 
@@ -379,8 +380,8 @@ class TRAAPassNode extends PassNode {
379
380
  const currentWeight = float( 0.05 ).toVar();
380
381
  const historyWeight = currentWeight.oneMinus().toVar();
381
382
 
382
- const compressedCurrent = currentColor.mul( float( 1 ).div( ( max( max( currentColor.r, currentColor.g ), currentColor.b ).add( 1.0 ) ) ) );
383
- const compressedHistory = clampedHistoryColor.mul( float( 1 ).div( ( max( max( clampedHistoryColor.r, clampedHistoryColor.g ), clampedHistoryColor.b ).add( 1.0 ) ) ) );
383
+ const compressedCurrent = currentColor.mul( float( 1 ).div( ( max( currentColor.r, currentColor.g, currentColor.b ).add( 1.0 ) ) ) );
384
+ const compressedHistory = clampedHistoryColor.mul( float( 1 ).div( ( max( clampedHistoryColor.r, clampedHistoryColor.g, clampedHistoryColor.b ).add( 1.0 ) ) ) );
384
385
 
385
386
  const luminanceCurrent = luminance( compressedCurrent.rgb );
386
387
  const luminanceHistory = luminance( compressedHistory.rgb );
@@ -5,6 +5,7 @@ import { nodeObject, Fn, float, uv, convertToTexture, vec4, If, int, clamp, sub,
5
5
  * Post processing node for creating a transition effect between scenes.
6
6
  *
7
7
  * @augments TempNode
8
+ * @three_import import { transition } from 'three/addons/tsl/display/TransitionNode.js';
8
9
  */
9
10
  class TransitionNode extends TempNode {
10
11