@plastic-software/three 0.175.13 → 0.178.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (529) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +7747 -6792
  3. package/build/three.core.js +7371 -6576
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +190 -30
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +19 -11
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +4989 -2235
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +5082 -2469
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -1
  14. package/examples/jsm/animation/AnimationClipCreator.js +1 -0
  15. package/examples/jsm/animation/CCDIKSolver.js +6 -3
  16. package/examples/jsm/capabilities/WebGL.js +1 -27
  17. package/examples/jsm/capabilities/WebGPU.js +1 -0
  18. package/examples/jsm/controls/ArcballControls.js +15 -4
  19. package/examples/jsm/controls/DragControls.js +1 -0
  20. package/examples/jsm/controls/FirstPersonControls.js +1 -0
  21. package/examples/jsm/controls/FlyControls.js +1 -0
  22. package/examples/jsm/controls/MapControls.js +1 -0
  23. package/examples/jsm/controls/OrbitControls.js +1 -0
  24. package/examples/jsm/controls/PointerLockControls.js +5 -3
  25. package/examples/jsm/controls/TrackballControls.js +1 -0
  26. package/examples/jsm/controls/TransformControls.js +62 -14
  27. package/examples/jsm/csm/CSM.js +2 -0
  28. package/examples/jsm/csm/CSMFrustum.js +2 -0
  29. package/examples/jsm/csm/CSMHelper.js +1 -0
  30. package/examples/jsm/csm/CSMShader.js +4 -1
  31. package/examples/jsm/csm/CSMShadowNode.js +18 -4
  32. package/examples/jsm/curves/CurveExtras.js +14 -0
  33. package/examples/jsm/curves/NURBSCurve.js +1 -0
  34. package/examples/jsm/curves/NURBSSurface.js +2 -0
  35. package/examples/jsm/curves/NURBSUtils.js +4 -1
  36. package/examples/jsm/curves/NURBSVolume.js +2 -0
  37. package/examples/jsm/effects/AnaglyphEffect.js +2 -0
  38. package/examples/jsm/effects/AsciiEffect.js +2 -0
  39. package/examples/jsm/effects/OutlineEffect.js +2 -0
  40. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
  41. package/examples/jsm/effects/StereoEffect.js +2 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +1 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +49 -35
  44. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  45. package/examples/jsm/exporters/EXRExporter.js +2 -0
  46. package/examples/jsm/exporters/GLTFExporter.js +7 -4
  47. package/examples/jsm/exporters/KTX2Exporter.js +2 -0
  48. package/examples/jsm/exporters/OBJExporter.js +3 -1
  49. package/examples/jsm/exporters/PLYExporter.js +4 -2
  50. package/examples/jsm/exporters/STLExporter.js +2 -0
  51. package/examples/jsm/exporters/USDZExporter.js +12 -10
  52. package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +1 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +1 -0
  55. package/examples/jsm/geometries/ParametricFunctions.js +4 -1
  56. package/examples/jsm/geometries/ParametricGeometry.js +1 -0
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +2 -1
  58. package/examples/jsm/geometries/TeapotGeometry.js +1 -0
  59. package/examples/jsm/geometries/TextGeometry.js +1 -0
  60. package/examples/jsm/helpers/LightProbeHelper.js +1 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
  64. package/examples/jsm/helpers/RapierHelper.js +59 -0
  65. package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
  66. package/examples/jsm/helpers/TextureHelper.js +1 -0
  67. package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
  68. package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
  69. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
  70. package/examples/jsm/helpers/ViewHelper.js +1 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +7 -0
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -0
  73. package/examples/jsm/interactive/SelectionBox.js +2 -0
  74. package/examples/jsm/interactive/SelectionHelper.js +2 -0
  75. package/examples/jsm/lighting/TiledLighting.js +1 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +1 -0
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  79. package/examples/jsm/lines/Line2.js +1 -0
  80. package/examples/jsm/lines/LineGeometry.js +1 -0
  81. package/examples/jsm/lines/LineMaterial.js +4 -4
  82. package/examples/jsm/lines/LineSegments2.js +1 -0
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  84. package/examples/jsm/lines/Wireframe.js +1 -0
  85. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  88. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  89. package/examples/jsm/loaders/3DMLoader.js +1 -0
  90. package/examples/jsm/loaders/3MFLoader.js +1 -0
  91. package/examples/jsm/loaders/AMFLoader.js +1 -0
  92. package/examples/jsm/loaders/BVHLoader.js +1 -0
  93. package/examples/jsm/loaders/ColladaLoader.js +6 -5
  94. package/examples/jsm/loaders/DDSLoader.js +1 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  96. package/examples/jsm/loaders/EXRLoader.js +1 -0
  97. package/examples/jsm/loaders/FBXLoader.js +25 -23
  98. package/examples/jsm/loaders/FontLoader.js +1 -0
  99. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  100. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  102. package/examples/jsm/loaders/IESLoader.js +1 -0
  103. package/examples/jsm/loaders/KMZLoader.js +1 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  105. package/examples/jsm/loaders/KTXLoader.js +1 -0
  106. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  107. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  108. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  110. package/examples/jsm/loaders/LWOLoader.js +1 -13
  111. package/examples/jsm/loaders/LottieLoader.js +15 -0
  112. package/examples/jsm/loaders/MD2Loader.js +1 -0
  113. package/examples/jsm/loaders/MDDLoader.js +1 -0
  114. package/examples/jsm/loaders/MTLLoader.js +4 -3
  115. package/examples/jsm/loaders/MaterialXLoader.js +1 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  117. package/examples/jsm/loaders/OBJLoader.js +1 -0
  118. package/examples/jsm/loaders/PCDLoader.js +122 -19
  119. package/examples/jsm/loaders/PDBLoader.js +1 -0
  120. package/examples/jsm/loaders/PLYLoader.js +1 -0
  121. package/examples/jsm/loaders/PVRLoader.js +1 -0
  122. package/examples/jsm/loaders/RGBELoader.js +1 -0
  123. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  124. package/examples/jsm/loaders/STLLoader.js +1 -0
  125. package/examples/jsm/loaders/SVGLoader.js +1 -0
  126. package/examples/jsm/loaders/TDSLoader.js +1 -0
  127. package/examples/jsm/loaders/TGALoader.js +1 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  129. package/examples/jsm/loaders/TTFLoader.js +1 -0
  130. package/examples/jsm/loaders/USDZLoader.js +1 -0
  131. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  132. package/examples/jsm/loaders/VOXLoader.js +1 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  134. package/examples/jsm/loaders/VTKLoader.js +1 -0
  135. package/examples/jsm/loaders/XYZLoader.js +1 -0
  136. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  137. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  138. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  139. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  140. package/examples/jsm/math/Capsule.js +2 -0
  141. package/examples/jsm/math/ColorConverter.js +1 -0
  142. package/examples/jsm/math/ConvexHull.js +2 -0
  143. package/examples/jsm/math/ImprovedNoise.js +19 -14
  144. package/examples/jsm/math/Lut.js +2 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  146. package/examples/jsm/math/OBB.js +2 -0
  147. package/examples/jsm/math/Octree.js +20 -1
  148. package/examples/jsm/math/SimplexNoise.js +2 -0
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  150. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  151. package/examples/jsm/misc/Gyroscope.js +1 -0
  152. package/examples/jsm/misc/MD2Character.js +2 -0
  153. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  154. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  158. package/examples/jsm/misc/RollerCoaster.js +5 -0
  159. package/examples/jsm/misc/Timer.js +2 -0
  160. package/examples/jsm/misc/TubePainter.js +1 -0
  161. package/examples/jsm/misc/Volume.js +2 -0
  162. package/examples/jsm/misc/VolumeSlice.js +1 -0
  163. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  167. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  168. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  169. package/examples/jsm/objects/Lensflare.js +3 -0
  170. package/examples/jsm/objects/LensflareMesh.js +1 -0
  171. package/examples/jsm/objects/MarchingCubes.js +2 -0
  172. package/examples/jsm/objects/Reflector.js +1 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  174. package/examples/jsm/objects/Refractor.js +1 -0
  175. package/examples/jsm/objects/ShadowMesh.js +1 -0
  176. package/examples/jsm/objects/Sky.js +2 -1
  177. package/examples/jsm/objects/SkyMesh.js +20 -17
  178. package/examples/jsm/objects/Water.js +1 -0
  179. package/examples/jsm/objects/Water2.js +1 -0
  180. package/examples/jsm/objects/Water2Mesh.js +3 -1
  181. package/examples/jsm/objects/WaterMesh.js +2 -1
  182. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  183. package/examples/jsm/physics/JoltPhysics.js +1 -0
  184. package/examples/jsm/physics/RapierPhysics.js +139 -12
  185. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  186. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  187. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  188. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  190. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  191. package/examples/jsm/postprocessing/EffectComposer.js +4 -2
  192. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  193. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  194. package/examples/jsm/postprocessing/GTAOPass.js +4 -3
  195. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  196. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  197. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  198. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  199. package/examples/jsm/postprocessing/OutlinePass.js +5 -2
  200. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  201. package/examples/jsm/postprocessing/Pass.js +3 -1
  202. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  203. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  204. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  205. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  206. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  207. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  208. package/examples/jsm/postprocessing/SSAOPass.js +2 -1
  209. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  210. package/examples/jsm/postprocessing/SavePass.js +2 -1
  211. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  212. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  213. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  214. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  215. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  216. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  217. package/examples/jsm/renderers/Projector.js +2 -0
  218. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  219. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  220. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  221. package/examples/jsm/shaders/BasicShader.js +4 -1
  222. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  223. package/examples/jsm/shaders/BlendShader.js +4 -1
  224. package/examples/jsm/shaders/BokehShader.js +4 -1
  225. package/examples/jsm/shaders/BokehShader2.js +4 -1
  226. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  227. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  228. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  229. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  230. package/examples/jsm/shaders/CopyShader.js +4 -1
  231. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  232. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  233. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  234. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  235. package/examples/jsm/shaders/ExposureShader.js +4 -1
  236. package/examples/jsm/shaders/FXAAShader.js +4 -1
  237. package/examples/jsm/shaders/FilmShader.js +4 -1
  238. package/examples/jsm/shaders/FocusShader.js +4 -1
  239. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  240. package/examples/jsm/shaders/GTAOShader.js +4 -1
  241. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  242. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  243. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  244. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  245. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  246. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  247. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  248. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  249. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  250. package/examples/jsm/shaders/MirrorShader.js +4 -1
  251. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  252. package/examples/jsm/shaders/OutputShader.js +4 -1
  253. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  254. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  255. package/examples/jsm/shaders/SAOShader.js +4 -1
  256. package/examples/jsm/shaders/SMAAShader.js +1 -0
  257. package/examples/jsm/shaders/SSAOShader.js +4 -1
  258. package/examples/jsm/shaders/SSRShader.js +1 -0
  259. package/examples/jsm/shaders/SepiaShader.js +4 -1
  260. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  261. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  262. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  263. package/examples/jsm/shaders/ToonShader.js +2 -1
  264. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  265. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +4 -1
  266. package/examples/jsm/shaders/VelocityShader.js +4 -1
  267. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  268. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  269. package/examples/jsm/shaders/VignetteShader.js +4 -1
  270. package/examples/jsm/shaders/VolumeShader.js +5 -2
  271. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  272. package/examples/jsm/textures/FlakesTexture.js +2 -0
  273. package/examples/jsm/transpiler/AST.js +381 -30
  274. package/examples/jsm/transpiler/GLSLDecoder.js +226 -87
  275. package/examples/jsm/transpiler/Linker.js +327 -0
  276. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  277. package/examples/jsm/transpiler/Transpiler.js +19 -1
  278. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  279. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  280. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  281. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  282. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  283. package/examples/jsm/tsl/display/BloomNode.js +1 -0
  284. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  285. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  286. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  287. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  288. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  289. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  290. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  291. package/examples/jsm/tsl/display/GaussianBlurNode.js +4 -29
  292. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  293. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  294. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  295. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  296. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  297. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  298. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  299. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  300. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  301. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  302. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  303. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  304. package/examples/jsm/tsl/display/TRAAPassNode.js +5 -4
  305. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  306. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  307. package/examples/jsm/tsl/lighting/TiledLightsNode.js +4 -3
  308. package/examples/jsm/tsl/math/Bayer.js +4 -1
  309. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  310. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  311. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  312. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  313. package/examples/jsm/utils/CameraUtils.js +4 -1
  314. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  315. package/examples/jsm/utils/GeometryUtils.js +4 -1
  316. package/examples/jsm/utils/LDrawUtils.js +2 -0
  317. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  318. package/examples/jsm/utils/SceneUtils.js +4 -1
  319. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  320. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  321. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  322. package/examples/jsm/utils/SortUtils.js +4 -1
  323. package/examples/jsm/utils/UVsDebug.js +4 -1
  324. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  325. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  326. package/examples/jsm/utils/WorkerPool.js +2 -0
  327. package/examples/jsm/webxr/ARButton.js +1 -0
  328. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  329. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  330. package/examples/jsm/webxr/Text2D.js +4 -1
  331. package/examples/jsm/webxr/VRButton.js +1 -0
  332. package/examples/jsm/webxr/XRButton.js +1 -0
  333. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  334. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  335. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  336. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  338. package/examples/jsm/webxr/XRPlanes.js +1 -0
  339. package/package.json +6 -4
  340. package/src/Three.Core.js +1 -1
  341. package/src/Three.TSL.js +18 -10
  342. package/src/Three.WebGPU.Nodes.js +1 -0
  343. package/src/Three.WebGPU.js +3 -0
  344. package/src/audio/AudioListener.js +13 -10
  345. package/src/cameras/ArrayCamera.js +9 -1
  346. package/src/constants.js +47 -20
  347. package/src/core/BufferAttribute.js +3 -3
  348. package/src/core/BufferGeometry.js +2 -5
  349. package/src/core/Clock.js +2 -8
  350. package/src/core/GLBufferAttribute.js +13 -1
  351. package/src/core/Object3D.js +23 -22
  352. package/src/core/RenderTarget.js +65 -21
  353. package/src/core/RenderTarget3D.js +1 -0
  354. package/src/extras/TextureUtils.js +1 -5
  355. package/src/extras/core/Curve.js +1 -1
  356. package/src/extras/core/Path.js +22 -22
  357. package/src/geometries/CapsuleGeometry.js +167 -17
  358. package/src/geometries/ExtrudeGeometry.js +39 -29
  359. package/src/helpers/ArrowHelper.js +2 -2
  360. package/src/helpers/SkeletonHelper.js +1 -1
  361. package/src/lights/LightShadow.js +14 -0
  362. package/src/lights/SpotLightShadow.js +9 -1
  363. package/src/lights/webgpu/ProjectorLight.js +46 -0
  364. package/src/loaders/BufferGeometryLoader.js +1 -10
  365. package/src/loaders/FileLoader.js +2 -2
  366. package/src/loaders/ImageBitmapLoader.js +25 -9
  367. package/src/loaders/ImageLoader.js +55 -8
  368. package/src/loaders/ObjectLoader.js +44 -16
  369. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  370. package/src/materials/Material.js +1 -7
  371. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  372. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  373. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  374. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  375. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  376. package/src/materials/nodes/NodeMaterial.js +105 -19
  377. package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
  378. package/src/math/Box3.js +28 -0
  379. package/src/math/Color.js +7 -7
  380. package/src/math/ColorManagement.js +22 -3
  381. package/src/math/Frustum.js +6 -1
  382. package/src/math/FrustumArray.js +253 -0
  383. package/src/math/Quaternion.js +1 -1
  384. package/src/math/Ray.js +2 -0
  385. package/src/math/Sphere.js +28 -0
  386. package/src/nodes/Nodes.js +2 -3
  387. package/src/nodes/TSL.js +5 -3
  388. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  389. package/src/nodes/accessors/Bitangent.js +54 -26
  390. package/src/nodes/accessors/Camera.js +31 -4
  391. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  392. package/src/nodes/accessors/InstanceNode.js +5 -4
  393. package/src/nodes/accessors/Lights.js +2 -2
  394. package/src/nodes/accessors/MaterialNode.js +4 -0
  395. package/src/nodes/accessors/ModelNode.js +1 -1
  396. package/src/nodes/accessors/Normal.js +102 -16
  397. package/src/nodes/accessors/Object3DNode.js +7 -8
  398. package/src/nodes/accessors/Position.js +14 -4
  399. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  400. package/src/nodes/accessors/ReferenceNode.js +1 -1
  401. package/src/nodes/accessors/ReflectVector.js +3 -3
  402. package/src/nodes/accessors/SkinningNode.js +3 -2
  403. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  404. package/src/nodes/accessors/StorageTextureNode.js +14 -3
  405. package/src/nodes/accessors/Tangent.js +25 -17
  406. package/src/nodes/accessors/TangentUtils.js +46 -0
  407. package/src/nodes/accessors/TextureBicubic.js +21 -3
  408. package/src/nodes/accessors/TextureNode.js +59 -8
  409. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  410. package/src/nodes/accessors/VelocityNode.js +1 -0
  411. package/src/nodes/accessors/VertexColorNode.js +4 -4
  412. package/src/nodes/code/CodeNode.js +8 -11
  413. package/src/nodes/core/AssignNode.js +27 -5
  414. package/src/nodes/core/AttributeNode.js +2 -2
  415. package/src/nodes/core/ContextNode.js +7 -3
  416. package/src/nodes/core/Node.js +69 -20
  417. package/src/nodes/core/NodeBuilder.js +248 -29
  418. package/src/nodes/core/NodeUtils.js +42 -0
  419. package/src/nodes/core/NodeVarying.js +19 -1
  420. package/src/nodes/core/PropertyNode.js +8 -12
  421. package/src/nodes/core/StackNode.js +129 -26
  422. package/src/nodes/core/StructTypeNode.js +26 -4
  423. package/src/nodes/core/SubBuildNode.js +89 -0
  424. package/src/nodes/core/VarNode.js +11 -2
  425. package/src/nodes/core/VaryingNode.js +45 -24
  426. package/src/nodes/display/BlendModes.js +42 -1
  427. package/src/nodes/display/ColorSpaceNode.js +4 -27
  428. package/src/nodes/display/FrontFacingNode.js +34 -2
  429. package/src/nodes/display/NormalMapNode.js +19 -50
  430. package/src/nodes/display/PassNode.js +18 -19
  431. package/src/nodes/display/ScreenNode.js +0 -26
  432. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  433. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  434. package/src/nodes/functions/PhongLightingModel.js +3 -3
  435. package/src/nodes/functions/PhysicalLightingModel.js +14 -14
  436. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  437. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  438. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  439. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  440. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  441. package/src/nodes/gpgpu/ComputeNode.js +1 -1
  442. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  443. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  444. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  445. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  446. package/src/nodes/lighting/LightsNode.js +29 -11
  447. package/src/nodes/lighting/ProjectorLightNode.js +78 -0
  448. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  449. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  450. package/src/nodes/lighting/ShadowNode.js +174 -242
  451. package/src/nodes/lighting/SpotLightNode.js +44 -7
  452. package/src/nodes/materialx/lib/mx_noise.js +1 -1
  453. package/src/nodes/math/ConditionalNode.js +0 -19
  454. package/src/nodes/math/MathNode.js +68 -21
  455. package/src/nodes/math/OperatorNode.js +108 -98
  456. package/src/nodes/shapes/Shapes.js +5 -4
  457. package/src/nodes/tsl/TSLBase.js +1 -0
  458. package/src/nodes/tsl/TSLCore.js +160 -65
  459. package/src/nodes/utils/DebugNode.js +15 -3
  460. package/src/nodes/utils/Discard.js +2 -2
  461. package/src/nodes/utils/EquirectUV.js +27 -0
  462. package/src/nodes/utils/LoopNode.js +64 -34
  463. package/src/nodes/utils/MatcapUV.js +22 -0
  464. package/src/nodes/utils/RTTNode.js +13 -5
  465. package/src/nodes/utils/ReflectorNode.js +77 -7
  466. package/src/nodes/utils/SampleNode.js +81 -0
  467. package/src/nodes/utils/TriplanarTextures.js +65 -0
  468. package/src/objects/BatchedMesh.js +16 -4
  469. package/src/objects/Mesh.js +9 -0
  470. package/src/objects/Skeleton.js +1 -1
  471. package/src/objects/Sprite.js +9 -0
  472. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  473. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  474. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  475. package/src/renderers/WebGLRenderer.js +25 -11
  476. package/src/renderers/common/Animation.js +2 -2
  477. package/src/renderers/common/Background.js +13 -2
  478. package/src/renderers/common/CubeRenderTarget.js +1 -1
  479. package/src/renderers/common/RenderList.js +0 -4
  480. package/src/renderers/common/RenderObject.js +80 -4
  481. package/src/renderers/common/Renderer.js +116 -8
  482. package/src/renderers/common/Storage3DTexture.js +79 -0
  483. package/src/renderers/common/StorageArrayTexture.js +63 -0
  484. package/src/renderers/common/Textures.js +15 -21
  485. package/src/renderers/common/TimestampQueryPool.js +1 -0
  486. package/src/renderers/common/Uniform.js +1 -1
  487. package/src/renderers/common/UniformsGroup.js +14 -18
  488. package/src/renderers/common/XRManager.js +157 -27
  489. package/src/renderers/common/XRRenderTarget.js +21 -4
  490. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  491. package/src/renderers/common/nodes/Nodes.js +13 -3
  492. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +1 -1
  493. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  494. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  495. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  496. package/src/renderers/webgl/WebGLPrograms.js +4 -2
  497. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  498. package/src/renderers/webgl/WebGLState.js +4 -4
  499. package/src/renderers/webgl/WebGLTextures.js +144 -4
  500. package/src/renderers/webgl/WebGLUtils.js +1 -3
  501. package/src/renderers/webgl-fallback/WebGLBackend.js +244 -87
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +73 -7
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  504. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  507. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  508. package/src/renderers/webgpu/WebGPUBackend.js +451 -128
  509. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  510. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  511. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  512. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +86 -33
  513. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  514. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  515. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +28 -5
  516. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  517. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -8
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +45 -50
  519. package/src/renderers/webxr/WebXRController.js +1 -1
  520. package/src/renderers/webxr/WebXRManager.js +2 -1
  521. package/src/textures/DepthTexture.js +6 -10
  522. package/src/textures/Source.js +22 -0
  523. package/src/textures/Texture.js +118 -1
  524. package/src/textures/VideoTexture.js +1 -1
  525. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  526. package/src/core/RenderTargetArray.js +0 -40
  527. package/src/nodes/utils/EquirectUVNode.js +0 -65
  528. package/src/nodes/utils/MatcapUVNode.js +0 -49
  529. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -1004,7 +1004,7 @@ export const mx_worley_distance_1 = /*@__PURE__*/ Fn( ( [ p_immutable, x_immutab
1004
1004
 
1005
1005
  If( metric.equal( int( 3 ) ), () => {
1006
1006
 
1007
- return max( max( abs( diff.x ), abs( diff.y ) ), abs( diff.z ) );
1007
+ return max( abs( diff.x ), abs( diff.y ), abs( diff.z ) );
1008
1008
 
1009
1009
  } );
1010
1010
 
@@ -226,22 +226,3 @@ export default ConditionalNode;
226
226
  export const select = /*@__PURE__*/ nodeProxy( ConditionalNode ).setParameterLength( 2, 3 );
227
227
 
228
228
  addMethodChaining( 'select', select );
229
-
230
- // Deprecated
231
-
232
- /**
233
- * @tsl
234
- * @function
235
- * @deprecated since r168. Use {@link select} instead.
236
- *
237
- * @param {...any} params
238
- * @returns {ConditionalNode}
239
- */
240
- export const cond = ( ...params ) => { // @deprecated, r168
241
-
242
- console.warn( 'THREE.TSL: cond() has been renamed to select().' );
243
- return select( ...params );
244
-
245
- };
246
-
247
- addMethodChaining( 'cond', cond );
@@ -160,26 +160,31 @@ class MathNode extends TempNode {
160
160
 
161
161
  }
162
162
 
163
- generate( builder, output ) {
163
+ setup( builder ) {
164
164
 
165
- let method = this.method;
165
+ const { aNode, bNode, method } = this;
166
166
 
167
- const type = this.getNodeType( builder );
168
- const inputType = this.getInputType( builder );
167
+ let outputNode = null;
169
168
 
170
- const a = this.aNode;
171
- const b = this.bNode;
172
- const c = this.cNode;
169
+ if ( method === MathNode.ONE_MINUS ) {
173
170
 
174
- const coordinateSystem = builder.renderer.coordinateSystem;
171
+ outputNode = sub( 1.0, aNode );
172
+
173
+ } else if ( method === MathNode.RECIPROCAL ) {
174
+
175
+ outputNode = div( 1.0, aNode );
176
+
177
+ } else if ( method === MathNode.DIFFERENCE ) {
178
+
179
+ outputNode = abs( sub( aNode, bNode ) );
175
180
 
176
- if ( method === MathNode.TRANSFORM_DIRECTION ) {
181
+ } else if ( method === MathNode.TRANSFORM_DIRECTION ) {
177
182
 
178
183
  // dir can be either a direction vector or a normal vector
179
184
  // upper-left 3x3 of matrix is assumed to be orthogonal
180
185
 
181
- let tA = a;
182
- let tB = b;
186
+ let tA = aNode;
187
+ let tB = bNode;
183
188
 
184
189
  if ( builder.isMatrix( tA.getNodeType( builder ) ) ) {
185
190
 
@@ -193,23 +198,46 @@ class MathNode extends TempNode {
193
198
 
194
199
  const mulNode = mul( tA, tB ).xyz;
195
200
 
196
- return normalize( mulNode ).build( builder, output );
201
+ outputNode = normalize( mulNode );
197
202
 
198
- } else if ( method === MathNode.NEGATE ) {
203
+ }
199
204
 
200
- return builder.format( '( - ' + a.build( builder, inputType ) + ' )', type, output );
205
+ if ( outputNode !== null ) {
201
206
 
202
- } else if ( method === MathNode.ONE_MINUS ) {
207
+ return outputNode;
203
208
 
204
- return sub( 1.0, a ).build( builder, output );
209
+ } else {
205
210
 
206
- } else if ( method === MathNode.RECIPROCAL ) {
211
+ return super.setup( builder );
207
212
 
208
- return div( 1.0, a ).build( builder, output );
213
+ }
209
214
 
210
- } else if ( method === MathNode.DIFFERENCE ) {
215
+ }
216
+
217
+ generate( builder, output ) {
218
+
219
+ const properties = builder.getNodeProperties( this );
220
+
221
+ if ( properties.outputNode ) {
222
+
223
+ return super.generate( builder, output );
224
+
225
+ }
226
+
227
+ let method = this.method;
228
+
229
+ const type = this.getNodeType( builder );
230
+ const inputType = this.getInputType( builder );
231
+
232
+ const a = this.aNode;
233
+ const b = this.bNode;
234
+ const c = this.cNode;
211
235
 
212
- return abs( sub( a, b ) ).build( builder, output );
236
+ const coordinateSystem = builder.renderer.coordinateSystem;
237
+
238
+ if ( method === MathNode.NEGATE ) {
239
+
240
+ return builder.format( '( - ' + a.build( builder, inputType ) + ' )', type, output );
213
241
 
214
242
  } else {
215
243
 
@@ -260,6 +288,14 @@ class MathNode extends TempNode {
260
288
 
261
289
  }
262
290
 
291
+ if ( builder.shaderStage !== 'fragment' && ( method === MathNode.DFDX || method === MathNode.DFDY ) ) {
292
+
293
+ console.warn( `THREE.TSL: '${ method }' is not supported in the ${ builder.shaderStage } stage.` );
294
+
295
+ method = '/*' + method + '*/';
296
+
297
+ }
298
+
263
299
  params.push( a.build( builder, inputType ) );
264
300
  if ( b !== null ) params.push( b.build( builder, inputType ) );
265
301
  if ( c !== null ) params.push( c.build( builder, inputType ) );
@@ -1006,6 +1042,17 @@ export const mixElement = ( t, e1, e2 ) => mix( e1, e2, t );
1006
1042
  */
1007
1043
  export const smoothstepElement = ( x, low, high ) => smoothstep( low, high, x );
1008
1044
 
1045
+ /**
1046
+ * Alias for `step()` with a different parameter order.
1047
+ *
1048
+ * @tsl
1049
+ * @function
1050
+ * @param {Node | number} x - The source value for interpolation.
1051
+ * @param {Node | number} edge - The edge value.
1052
+ * @returns {Node}
1053
+ */
1054
+ export const stepElement = ( x, edge ) => step( edge, x );
1055
+
1009
1056
  /**
1010
1057
  * Returns the arc-tangent of the quotient of its parameters.
1011
1058
  *
@@ -1068,7 +1115,7 @@ addMethodChaining( 'fwidth', fwidth );
1068
1115
  addMethodChaining( 'atan2', atan2 );
1069
1116
  addMethodChaining( 'min', min );
1070
1117
  addMethodChaining( 'max', max );
1071
- addMethodChaining( 'step', step );
1118
+ addMethodChaining( 'step', stepElement );
1072
1119
  addMethodChaining( 'reflect', reflect );
1073
1120
  addMethodChaining( 'distance', distance );
1074
1121
  addMethodChaining( 'dot', dot );
@@ -1,6 +1,16 @@
1
1
  import { WebGLCoordinateSystem } from '../../constants.js';
2
2
  import TempNode from '../core/TempNode.js';
3
- import { addMethodChaining, int, nodeProxy } from '../tsl/TSLCore.js';
3
+ import { addMethodChaining, Fn, int, nodeProxy } from '../tsl/TSLCore.js';
4
+
5
+ const _vectorOperators = {
6
+ '==': 'equal',
7
+ '!=': 'notEqual',
8
+ '<': 'lessThan',
9
+ '>': 'greaterThan',
10
+ '<=': 'lessThanEqual',
11
+ '>=': 'greaterThanEqual',
12
+ '%': 'mod'
13
+ };
4
14
 
5
15
  /**
6
16
  * This node represents basic mathematical and logical operations like addition,
@@ -75,15 +85,27 @@ class OperatorNode extends TempNode {
75
85
 
76
86
  }
77
87
 
88
+ /**
89
+ * Returns the operator method name.
90
+ *
91
+ * @param {NodeBuilder} builder - The current node builder.
92
+ * @param {string} output - The output type.
93
+ * @returns {string} The operator method name.
94
+ */
95
+ getOperatorMethod( builder, output ) {
96
+
97
+ return builder.getMethod( _vectorOperators[ this.op ], output );
98
+
99
+ }
100
+
78
101
  /**
79
102
  * This method is overwritten since the node type is inferred from the operator
80
103
  * and the input node types.
81
104
  *
82
105
  * @param {NodeBuilder} builder - The current node builder.
83
- * @param {string} output - The current output string.
84
106
  * @return {string} The node type.
85
107
  */
86
- getNodeType( builder, output ) {
108
+ getNodeType( builder ) {
87
109
 
88
110
  const op = this.op;
89
111
 
@@ -91,7 +113,7 @@ class OperatorNode extends TempNode {
91
113
  const bNode = this.bNode;
92
114
 
93
115
  const typeA = aNode.getNodeType( builder );
94
- const typeB = typeof bNode !== 'undefined' ? bNode.getNodeType( builder ) : null;
116
+ const typeB = bNode ? bNode.getNodeType( builder ) : null;
95
117
 
96
118
  if ( typeA === 'void' || typeB === 'void' ) {
97
119
 
@@ -105,13 +127,13 @@ class OperatorNode extends TempNode {
105
127
 
106
128
  return builder.getIntegerType( typeA );
107
129
 
108
- } else if ( op === '!' || op === '==' || op === '!=' || op === '&&' || op === '||' || op === '^^' ) {
130
+ } else if ( op === '!' || op === '&&' || op === '||' || op === '^^' ) {
109
131
 
110
132
  return 'bool';
111
133
 
112
- } else if ( op === '<' || op === '>' || op === '<=' || op === '>=' ) {
134
+ } else if ( op === '==' || op === '!=' || op === '<' || op === '>' || op === '<=' || op === '>=' ) {
113
135
 
114
- const typeLength = output ? builder.getTypeLength( output ) : Math.max( builder.getTypeLength( typeA ), builder.getTypeLength( typeB ) );
136
+ const typeLength = Math.max( builder.getTypeLength( typeA ), builder.getTypeLength( typeB ) );
115
137
 
116
138
  return typeLength > 1 ? `bvec${ typeLength }` : 'bool';
117
139
 
@@ -169,10 +191,9 @@ class OperatorNode extends TempNode {
169
191
 
170
192
  const op = this.op;
171
193
 
172
- const aNode = this.aNode;
173
- const bNode = this.bNode;
194
+ const { aNode, bNode } = this;
174
195
 
175
- const type = this.getNodeType( builder, output );
196
+ const type = this.getNodeType( builder );
176
197
 
177
198
  let typeA = null;
178
199
  let typeB = null;
@@ -180,7 +201,7 @@ class OperatorNode extends TempNode {
180
201
  if ( type !== 'void' ) {
181
202
 
182
203
  typeA = aNode.getNodeType( builder );
183
- typeB = typeof bNode !== 'undefined' ? bNode.getNodeType( builder ) : null;
204
+ typeB = bNode ? bNode.getNodeType( builder ) : null;
184
205
 
185
206
  if ( op === '<' || op === '>' || op === '<=' || op === '>=' || op === '==' || op === '!=' ) {
186
207
 
@@ -188,6 +209,10 @@ class OperatorNode extends TempNode {
188
209
 
189
210
  typeB = typeA;
190
211
 
212
+ } else if ( builder.isVector( typeB ) ) {
213
+
214
+ typeA = typeB;
215
+
191
216
  } else if ( typeA !== typeB ) {
192
217
 
193
218
  typeA = typeB = 'float';
@@ -262,22 +287,21 @@ class OperatorNode extends TempNode {
262
287
  }
263
288
 
264
289
  const a = aNode.build( builder, typeA );
265
- const b = typeof bNode !== 'undefined' ? bNode.build( builder, typeB ) : null;
290
+ const b = bNode ? bNode.build( builder, typeB ) : null;
266
291
 
267
- const outputLength = builder.getTypeLength( output );
268
292
  const fnOpSnippet = builder.getFunctionOperator( op );
269
293
 
270
294
  if ( output !== 'void' ) {
271
295
 
272
296
  const isGLSL = builder.renderer.coordinateSystem === WebGLCoordinateSystem;
273
297
 
274
- if ( op === '==' ) {
298
+ if ( op === '==' || op === '!=' || op === '<' || op === '>' || op === '<=' || op === '>=' ) {
275
299
 
276
300
  if ( isGLSL ) {
277
301
 
278
- if ( outputLength > 1 ) {
302
+ if ( builder.isVector( typeA ) ) {
279
303
 
280
- return builder.format( `${ builder.getMethod( 'equal', output ) }( ${ a }, ${ b } )`, type, output );
304
+ return builder.format( `${ this.getOperatorMethod( builder, output ) }( ${ a }, ${ b } )`, type, output );
281
305
 
282
306
  } else {
283
307
 
@@ -289,71 +313,7 @@ class OperatorNode extends TempNode {
289
313
 
290
314
  // WGSL
291
315
 
292
- if ( outputLength > 1 || ! builder.isVector( typeA ) ) {
293
-
294
- return builder.format( `( ${ a } == ${ b } )`, type, output );
295
-
296
- } else {
297
-
298
- return builder.format( `all( ${ a } == ${ b } )`, type, output );
299
-
300
- }
301
-
302
- }
303
-
304
- } else if ( op === '<' && outputLength > 1 ) {
305
-
306
- if ( isGLSL ) {
307
-
308
- return builder.format( `${ builder.getMethod( 'lessThan', output ) }( ${ a }, ${ b } )`, type, output );
309
-
310
- } else {
311
-
312
- // WGSL
313
-
314
- return builder.format( `( ${ a } < ${ b } )`, type, output );
315
-
316
- }
317
-
318
- } else if ( op === '<=' && outputLength > 1 ) {
319
-
320
- if ( isGLSL ) {
321
-
322
- return builder.format( `${ builder.getMethod( 'lessThanEqual', output ) }( ${ a }, ${ b } )`, type, output );
323
-
324
- } else {
325
-
326
- // WGSL
327
-
328
- return builder.format( `( ${ a } <= ${ b } )`, type, output );
329
-
330
- }
331
-
332
- } else if ( op === '>' && outputLength > 1 ) {
333
-
334
- if ( isGLSL ) {
335
-
336
- return builder.format( `${ builder.getMethod( 'greaterThan', output ) }( ${ a }, ${ b } )`, type, output );
337
-
338
- } else {
339
-
340
- // WGSL
341
-
342
- return builder.format( `( ${ a } > ${ b } )`, type, output );
343
-
344
- }
345
-
346
- } else if ( op === '>=' && outputLength > 1 ) {
347
-
348
- if ( isGLSL ) {
349
-
350
- return builder.format( `${ builder.getMethod( 'greaterThanEqual', output ) }( ${ a }, ${ b } )`, type, output );
351
-
352
- } else {
353
-
354
- // WGSL
355
-
356
- return builder.format( `( ${ a } >= ${ b } )`, type, output );
316
+ return builder.format( `( ${ a } ${ op } ${ b } )`, type, output );
357
317
 
358
318
  }
359
319
 
@@ -365,7 +325,7 @@ class OperatorNode extends TempNode {
365
325
 
366
326
  } else {
367
327
 
368
- return builder.format( `${ builder.getMethod( 'mod', type ) }( ${ a }, ${ b } )`, type, output );
328
+ return builder.format( `${ this.getOperatorMethod( builder, type ) }( ${ a }, ${ b } )`, type, output );
369
329
 
370
330
  }
371
331
 
@@ -681,6 +641,68 @@ export const shiftLeft = /*@__PURE__*/ nodeProxy( OperatorNode, '<<' ).setParame
681
641
  */
682
642
  export const shiftRight = /*@__PURE__*/ nodeProxy( OperatorNode, '>>' ).setParameterLength( 2 ).setName( 'shiftRight' );
683
643
 
644
+ /**
645
+ * Increments a node by 1.
646
+ *
647
+ * @tsl
648
+ * @function
649
+ * @param {Node} a - The node to increment.
650
+ * @returns {OperatorNode}
651
+ */
652
+ export const incrementBefore = Fn( ( [ a ] ) => {
653
+
654
+ a.addAssign( 1 );
655
+ return a;
656
+
657
+ } );
658
+
659
+ /**
660
+ * Decrements a node by 1.
661
+ *
662
+ * @tsl
663
+ * @function
664
+ * @param {Node} a - The node to decrement.
665
+ * @returns {OperatorNode}
666
+ */
667
+ export const decrementBefore = Fn( ( [ a ] ) => {
668
+
669
+ a.subAssign( 1 );
670
+ return a;
671
+
672
+ } );
673
+
674
+ /**
675
+ * Increments a node by 1 and returns the previous value.
676
+ *
677
+ * @tsl
678
+ * @function
679
+ * @param {Node} a - The node to increment.
680
+ * @returns {OperatorNode}
681
+ */
682
+ export const increment = /*@__PURE__*/ Fn( ( [ a ] ) => {
683
+
684
+ const temp = int( a ).toConst();
685
+ a.addAssign( 1 );
686
+ return temp;
687
+
688
+ } );
689
+
690
+ /**
691
+ * Decrements a node by 1 and returns the previous value.
692
+ *
693
+ * @tsl
694
+ * @function
695
+ * @param {Node} a - The node to decrement.
696
+ * @returns {OperatorNode}
697
+ */
698
+ export const decrement = /*@__PURE__*/ Fn( ( [ a ] ) => {
699
+
700
+ const temp = int( a ).toConst();
701
+ a.subAssign( 1 );
702
+ return temp;
703
+
704
+ } );
705
+
684
706
  addMethodChaining( 'add', add );
685
707
  addMethodChaining( 'sub', sub );
686
708
  addMethodChaining( 'mul', mul );
@@ -703,21 +725,10 @@ addMethodChaining( 'bitXor', bitXor );
703
725
  addMethodChaining( 'shiftLeft', shiftLeft );
704
726
  addMethodChaining( 'shiftRight', shiftRight );
705
727
 
706
- /**
707
- * @tsl
708
- * @function
709
- * @deprecated since r168. Use {@link mod} instead.
710
- *
711
- * @param {Node} a - The first input.
712
- * @param {Node} b - The second input.
713
- * @returns {OperatorNode}
714
- */
715
- export const remainder = ( a, b ) => { // @deprecated, r168
716
-
717
- console.warn( 'THREE.TSL: "remainder()" is deprecated. Use "mod( int( ... ) )" instead.' );
718
- return mod( a, b );
719
-
720
- };
728
+ addMethodChaining( 'incrementBefore', incrementBefore );
729
+ addMethodChaining( 'decrementBefore', decrementBefore );
730
+ addMethodChaining( 'increment', increment );
731
+ addMethodChaining( 'decrement', decrement );
721
732
 
722
733
  /**
723
734
  * @tsl
@@ -735,5 +746,4 @@ export const modInt = ( a, b ) => { // @deprecated, r175
735
746
 
736
747
  };
737
748
 
738
- addMethodChaining( 'remainder', remainder );
739
749
  addMethodChaining( 'modInt', modInt );
@@ -1,4 +1,4 @@
1
- import { Fn, float } from '../tsl/TSLBase.js';
1
+ import { Fn, float, select } from '../tsl/TSLBase.js';
2
2
  import { lengthSq, smoothstep } from '../math/MathNode.js';
3
3
  import { uv } from '../accessors/UV.js';
4
4
 
@@ -12,18 +12,19 @@ import { uv } from '../accessors/UV.js';
12
12
  */
13
13
  export const shapeCircle = Fn( ( [ coord = uv() ], { renderer, material } ) => {
14
14
 
15
- const alpha = float( 1 ).toVar();
16
15
  const len2 = lengthSq( coord.mul( 2 ).sub( 1 ) );
17
16
 
17
+ let alpha;
18
+
18
19
  if ( material.alphaToCoverage && renderer.samples > 1 ) {
19
20
 
20
21
  const dlen = float( len2.fwidth() ).toVar();
21
22
 
22
- alpha.assign( smoothstep( dlen.oneMinus(), dlen.add( 1 ), len2 ).oneMinus() );
23
+ alpha = smoothstep( dlen.oneMinus(), dlen.add( 1 ), len2 ).oneMinus();
23
24
 
24
25
  } else {
25
26
 
26
- len2.greaterThan( 1.0 ).discard();
27
+ alpha = select( len2.greaterThan( 1.0 ), 0, 1 );
27
28
 
28
29
  }
29
30
 
@@ -24,6 +24,7 @@ export * from '../code/ExpressionNode.js'; // expression()
24
24
  export * from '../utils/Discard.js'; // Discard(), Return()
25
25
  export * from '../display/RenderOutputNode.js'; // .renderOutput()
26
26
  export * from '../utils/DebugNode.js'; // debug()
27
+ export * from '../core/SubBuildNode.js'; // subBuild()
27
28
 
28
29
  export function addNodeElement( name/*, nodeElement*/ ) {
29
30