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
@@ -236,6 +236,48 @@ export function getLengthFromType( type ) {
236
236
 
237
237
  }
238
238
 
239
+ /**
240
+ * Returns the gpu memory length for the given data type.
241
+ *
242
+ * @method
243
+ * @param {string} type - The data type.
244
+ * @return {number} The length.
245
+ */
246
+ export function getMemoryLengthFromType( type ) {
247
+
248
+ if ( /float|int|uint/.test( type ) ) return 1;
249
+ if ( /vec2/.test( type ) ) return 2;
250
+ if ( /vec3/.test( type ) ) return 3;
251
+ if ( /vec4/.test( type ) ) return 4;
252
+ if ( /mat2/.test( type ) ) return 4;
253
+ if ( /mat3/.test( type ) ) return 12;
254
+ if ( /mat4/.test( type ) ) return 16;
255
+
256
+ console.error( 'THREE.TSL: Unsupported type:', type );
257
+
258
+ }
259
+
260
+ /**
261
+ * Returns the byte boundary for the given data type.
262
+ *
263
+ * @method
264
+ * @param {string} type - The data type.
265
+ * @return {number} The byte boundary.
266
+ */
267
+ export function getByteBoundaryFromType( type ) {
268
+
269
+ if ( /float|int|uint/.test( type ) ) return 4;
270
+ if ( /vec2/.test( type ) ) return 8;
271
+ if ( /vec3/.test( type ) ) return 16;
272
+ if ( /vec4/.test( type ) ) return 16;
273
+ if ( /mat2/.test( type ) ) return 8;
274
+ if ( /mat3/.test( type ) ) return 48;
275
+ if ( /mat4/.test( type ) ) return 64;
276
+
277
+ console.error( 'THREE.TSL: Unsupported type:', type );
278
+
279
+ }
280
+
239
281
  /**
240
282
  * Returns the data type for the given value.
241
283
  *
@@ -15,8 +15,10 @@ class NodeVarying extends NodeVar {
15
15
  *
16
16
  * @param {string} name - The name of the varying.
17
17
  * @param {string} type - The type of the varying.
18
+ * @param {?string} interpolationType - The interpolation type of the varying.
19
+ * @param {?string} interpolationSampling - The interpolation sampling type of the varying.
18
20
  */
19
- constructor( name, type ) {
21
+ constructor( name, type, interpolationType = null, interpolationSampling = null ) {
20
22
 
21
23
  super( name, type );
22
24
 
@@ -38,6 +40,22 @@ class NodeVarying extends NodeVar {
38
40
  */
39
41
  this.isNodeVarying = true;
40
42
 
43
+ /**
44
+ * The interpolation type of the varying data.
45
+ *
46
+ * @type {?string}
47
+ * @default null
48
+ */
49
+ this.interpolationType = interpolationType;
50
+
51
+ /**
52
+ * The interpolation sampling type of varying data.
53
+ *
54
+ * @type {?string}
55
+ * @default null
56
+ */
57
+ this.interpolationSampling = interpolationSampling;
58
+
41
59
  }
42
60
 
43
61
  }
@@ -58,6 +58,14 @@ class PropertyNode extends Node {
58
58
  */
59
59
  this.isPropertyNode = true;
60
60
 
61
+ /**
62
+ * This flag is used for global cache.
63
+ *
64
+ * @type {boolean}
65
+ * @default true
66
+ */
67
+ this.global = true;
68
+
61
69
  }
62
70
 
63
71
  getHash( builder ) {
@@ -66,18 +74,6 @@ class PropertyNode extends Node {
66
74
 
67
75
  }
68
76
 
69
- /**
70
- * The method is overwritten so it always returns `true`.
71
- *
72
- * @param {NodeBuilder} builder - The current node builder.
73
- * @return {boolean} Whether this node is global or not.
74
- */
75
- isGlobal( /*builder*/ ) {
76
-
77
- return true;
78
-
79
- }
80
-
81
77
  generate( builder ) {
82
78
 
83
79
  let nodeVar;
@@ -1,6 +1,6 @@
1
1
  import Node from './Node.js';
2
2
  import { select } from '../math/ConditionalNode.js';
3
- import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack } from '../tsl/TSLBase.js';
3
+ import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack, nodeObject } from '../tsl/TSLBase.js';
4
4
 
5
5
  /**
6
6
  * Stack is a helper for Nodes that need to produce stack-based code instead of continuous flow.
@@ -57,6 +57,16 @@ class StackNode extends Node {
57
57
  */
58
58
  this._currentCond = null;
59
59
 
60
+ /**
61
+ * The expression node. Only
62
+ * relevant for Switch/Case.
63
+ *
64
+ * @private
65
+ * @type {Node}
66
+ * @default null
67
+ */
68
+ this._expressionNode = null;
69
+
60
70
  /**
61
71
  * This flag can be used for type testing.
62
72
  *
@@ -143,15 +153,130 @@ class StackNode extends Node {
143
153
 
144
154
  }
145
155
 
156
+ /**
157
+ * Represents a `switch` statement in TSL.
158
+ *
159
+ * @param {any} expression - Represents the expression.
160
+ * @param {Function} method - TSL code which is executed if the condition evaluates to `true`.
161
+ * @return {StackNode} A reference to this stack node.
162
+ */
163
+ Switch( expression ) {
164
+
165
+ this._expressionNode = nodeObject( expression );
166
+
167
+ return this;
168
+
169
+ }
170
+
171
+ /**
172
+ * Represents a `case` statement in TSL. The TSL version accepts an arbitrary numbers of values.
173
+ * The last parameter must be the callback method that should be executed in the `true` case.
174
+ *
175
+ * @param {...any} params - The values of the `Case()` statement as well as the callback method.
176
+ * @return {StackNode} A reference to this stack node.
177
+ */
178
+ Case( ...params ) {
179
+
180
+ const caseNodes = [];
181
+
182
+ // extract case nodes from the parameter list
183
+
184
+ if ( params.length >= 2 ) {
185
+
186
+ for ( let i = 0; i < params.length - 1; i ++ ) {
187
+
188
+ caseNodes.push( this._expressionNode.equal( nodeObject( params[ i ] ) ) );
189
+
190
+ }
191
+
192
+ } else {
193
+
194
+ throw new Error( 'TSL: Invalid parameter length. Case() requires at least two parameters.' );
195
+
196
+ }
197
+
198
+ // extract method
199
+
200
+ const method = params[ params.length - 1 ];
201
+ const methodNode = new ShaderNode( method );
202
+
203
+ // chain multiple cases when using Case( 1, 2, 3, () => {} )
204
+
205
+ let caseNode = caseNodes[ 0 ];
206
+
207
+ for ( let i = 1; i < caseNodes.length; i ++ ) {
208
+
209
+ caseNode = caseNode.or( caseNodes[ i ] );
210
+
211
+ }
212
+
213
+ // build condition
214
+
215
+ const condNode = select( caseNode, methodNode );
216
+
217
+ if ( this._currentCond === null ) {
218
+
219
+ this._currentCond = condNode;
220
+
221
+ return this.add( this._currentCond );
222
+
223
+ } else {
224
+
225
+ this._currentCond.elseNode = condNode;
226
+ this._currentCond = condNode;
227
+
228
+ return this;
229
+
230
+ }
231
+
232
+ }
233
+
234
+ /**
235
+ * Represents the default code block of a Switch/Case statement.
236
+ *
237
+ * @param {Function} method - TSL code which is executed in the `else` case.
238
+ * @return {StackNode} A reference to this stack node.
239
+ */
240
+ Default( method ) {
241
+
242
+ this.Else( method );
243
+
244
+ return this;
245
+
246
+ }
247
+
146
248
  build( builder, ...params ) {
147
249
 
148
250
  const previousStack = getCurrentStack();
149
251
 
150
252
  setCurrentStack( this );
151
253
 
254
+ const buildStage = builder.buildStage;
255
+
152
256
  for ( const node of this.nodes ) {
153
257
 
154
- node.build( builder, 'void' );
258
+ if ( buildStage === 'setup' ) {
259
+
260
+ node.build( builder );
261
+
262
+ } else if ( buildStage === 'analyze' ) {
263
+
264
+ node.build( builder, this );
265
+
266
+ } else if ( buildStage === 'generate' ) {
267
+
268
+ const stages = builder.getDataFromNode( node, 'any' ).stages;
269
+ const parents = stages && stages[ builder.shaderStage ];
270
+
271
+ if ( node.isVarNode && parents && parents.length === 1 && parents[ 0 ] && parents[ 0 ].isStackNode ) {
272
+
273
+ continue; // skip var nodes that are only used in .toVarying()
274
+
275
+ }
276
+
277
+ node.build( builder, 'void' );
278
+
279
+ }
155
280
 
156
281
  }
157
282
 
@@ -1,6 +1,6 @@
1
1
 
2
2
  import Node from './Node.js';
3
- import { getLengthFromType } from './NodeUtils.js';
3
+ import { getByteBoundaryFromType, getMemoryLengthFromType } from './NodeUtils.js';
4
4
 
5
5
  /**
6
6
  * Generates a layout for struct members.
@@ -86,15 +86,37 @@ class StructTypeNode extends Node {
86
86
  */
87
87
  getLength() {
88
88
 
89
- let length = 0;
89
+ const GPU_CHUNK_BYTES = 8;
90
+ const BYTES_PER_ELEMENT = Float32Array.BYTES_PER_ELEMENT;
91
+
92
+ let offset = 0; // global buffer offset in bytes
90
93
 
91
94
  for ( const member of this.membersLayout ) {
92
95
 
93
- length += getLengthFromType( member.type );
96
+ const type = member.type;
97
+
98
+ const itemSize = getMemoryLengthFromType( type ) * BYTES_PER_ELEMENT;
99
+ const boundary = getByteBoundaryFromType( type );
100
+
101
+ const chunkOffset = offset % GPU_CHUNK_BYTES; // offset in the current chunk
102
+ const chunkPadding = chunkOffset % boundary; // required padding to match boundary
103
+ const chunkStart = chunkOffset + chunkPadding; // start position in the current chunk for the data
104
+
105
+ offset += chunkPadding;
106
+
107
+ // Check for chunk overflow
108
+ if ( chunkStart !== 0 && ( GPU_CHUNK_BYTES - chunkStart ) < itemSize ) {
109
+
110
+ // Add padding to the end of the chunk
111
+ offset += ( GPU_CHUNK_BYTES - chunkStart );
112
+
113
+ }
114
+
115
+ offset += itemSize;
94
116
 
95
117
  }
96
118
 
97
- return length;
119
+ return ( Math.ceil( offset / GPU_CHUNK_BYTES ) * GPU_CHUNK_BYTES ) / BYTES_PER_ELEMENT;
98
120
 
99
121
  }
100
122
 
@@ -72,6 +72,15 @@ class VarNode extends Node {
72
72
  */
73
73
  this.readOnly = readOnly;
74
74
 
75
+ /**
76
+ *
77
+ * Add this flag to the node system to indicate that this node require parents.
78
+ *
79
+ * @type {boolean}
80
+ * @default true
81
+ */
82
+ this.parents = true;
83
+
75
84
  }
76
85
 
77
86
  getMemberType( builder, name ) {
@@ -167,7 +176,7 @@ const createVar = /*@__PURE__*/ nodeProxy( VarNode );
167
176
  * @param {?string} name - The name of the variable in the shader.
168
177
  * @returns {VarNode}
169
178
  */
170
- export const Var = ( node, name = null ) => createVar( node, name ).append();
179
+ export const Var = ( node, name = null ) => createVar( node, name ).toStack();
171
180
 
172
181
  /**
173
182
  * TSL function for creating a const node.
@@ -178,7 +187,7 @@ export const Var = ( node, name = null ) => createVar( node, name ).append();
178
187
  * @param {?string} name - The name of the constant in the shader.
179
188
  * @returns {VarNode}
180
189
  */
181
- export const Const = ( node, name = null ) => createVar( node, name, true ).append();
190
+ export const Const = ( node, name = null ) => createVar( node, name, true ).toStack();
182
191
 
183
192
  // Method chaining
184
193
 
@@ -55,17 +55,45 @@ class VaryingNode extends Node {
55
55
  */
56
56
  this.isVaryingNode = true;
57
57
 
58
+ /**
59
+ * The interpolation type of the varying data.
60
+ *
61
+ * @type {?string}
62
+ * @default null
63
+ */
64
+ this.interpolationType = null;
65
+
66
+ /**
67
+ * The interpolation sampling type of varying data.
68
+ *
69
+ * @type {?string}
70
+ * @default null
71
+ */
72
+ this.interpolationSampling = null;
73
+
74
+ /**
75
+ * This flag is used for global cache.
76
+ *
77
+ * @type {boolean}
78
+ * @default true
79
+ */
80
+ this.global = true;
81
+
58
82
  }
59
83
 
60
84
  /**
61
- * The method is overwritten so it always returns `true`.
85
+ * Defines the interpolation type of the varying.
62
86
  *
63
- * @param {NodeBuilder} builder - The current node builder.
64
- * @return {boolean} Whether this node is global or not.
87
+ * @param {string} type - The interpolation type.
88
+ * @param {?string} sampling - The interpolation sampling type
89
+ * @return {VaryingNode} A reference to this node.
65
90
  */
66
- isGlobal( /*builder*/ ) {
91
+ setInterpolation( type, sampling = null ) {
92
+
93
+ this.interpolationType = type;
94
+ this.interpolationSampling = sampling;
67
95
 
68
- return true;
96
+ return this;
69
97
 
70
98
  }
71
99
 
@@ -99,8 +127,10 @@ class VaryingNode extends Node {
99
127
 
100
128
  const name = this.name;
101
129
  const type = this.getNodeType( builder );
130
+ const interpolationType = this.interpolationType;
131
+ const interpolationSampling = this.interpolationSampling;
102
132
 
103
- properties.varying = varying = builder.getVaryingFromNode( this, name, type );
133
+ properties.varying = varying = builder.getVaryingFromNode( this, name, type, interpolationType, interpolationSampling );
104
134
  properties.node = this.node;
105
135
 
106
136
  }
@@ -116,13 +146,15 @@ class VaryingNode extends Node {
116
146
 
117
147
  this.setupVarying( builder );
118
148
 
149
+ builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, this.node );
150
+
119
151
  }
120
152
 
121
153
  analyze( builder ) {
122
154
 
123
155
  this.setupVarying( builder );
124
156
 
125
- return this.node.analyze( builder );
157
+ builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, this.node );
126
158
 
127
159
  }
128
160
 
@@ -131,9 +163,7 @@ class VaryingNode extends Node {
131
163
  const properties = builder.getNodeProperties( this );
132
164
  const varying = this.setupVarying( builder );
133
165
 
134
- const needsReassign = builder.shaderStage === 'fragment' && properties.reassignPosition === true && builder.context.needsPositionReassign;
135
-
136
- if ( properties.propertyName === undefined || needsReassign ) {
166
+ if ( properties.propertyName === undefined ) {
137
167
 
138
168
  const type = this.getNodeType( builder );
139
169
  const propertyName = builder.getPropertyName( varying, NodeShaderStage.VERTEX );
@@ -143,17 +173,6 @@ class VaryingNode extends Node {
143
173
 
144
174
  properties.propertyName = propertyName;
145
175
 
146
- if ( needsReassign ) {
147
-
148
- // once reassign varying in fragment stage
149
- properties.reassignPosition = false;
150
-
151
- } else if ( properties.reassignPosition === undefined && builder.context.isPositionNodeInput ) {
152
-
153
- properties.reassignPosition = true;
154
-
155
- }
156
-
157
176
  }
158
177
 
159
178
  return builder.getPropertyName( varying );
@@ -1,4 +1,4 @@
1
- import { Fn, vec4 } from '../tsl/TSLBase.js';
1
+ import { Fn, If, vec4 } from '../tsl/TSLBase.js';
2
2
  import { mix, min, step } from '../math/MathNode.js';
3
3
 
4
4
  /**
@@ -130,6 +130,47 @@ export const blendColor = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
130
130
  ]
131
131
  } );
132
132
 
133
+ /**
134
+ * Premultiplies the RGB channels of a color by its alpha channel.
135
+ *
136
+ * This function is useful for converting a non-premultiplied alpha color
137
+ * into a premultiplied alpha format, where the RGB values are scaled
138
+ * by the alpha value. Premultiplied alpha is often used in graphics
139
+ * rendering for certain operations, such as compositing and image processing.
140
+ *
141
+ * @tsl
142
+ * @function
143
+ * @param {Node<vec4>} color - The input color with non-premultiplied alpha.
144
+ * @return {Node<vec4>} The color with premultiplied alpha.
145
+ */
146
+ export const premult = /*@__PURE__*/ Fn( ( [ color ] ) => {
147
+
148
+ return vec4( color.rgb.mul( color.a ), color.a );
149
+
150
+ }, { color: 'vec4', return: 'vec4' } );
151
+
152
+ /**
153
+ * Unpremultiplies the RGB channels of a color by its alpha channel.
154
+ *
155
+ * This function is useful for converting a premultiplied alpha color
156
+ * back into a non-premultiplied alpha format, where the RGB values are
157
+ * divided by the alpha value. Unpremultiplied alpha is often used in graphics
158
+ * rendering for certain operations, such as compositing and image processing.
159
+ *
160
+ * @tsl
161
+ * @function
162
+ * @param {Node<vec4>} color - The input color with premultiplied alpha.
163
+ * @return {Node<vec4>} The color with non-premultiplied alpha.
164
+ */
165
+ export const unpremult = /*@__PURE__*/ Fn( ( [ color ] ) => {
166
+
167
+ If( color.a.equal( 0.0 ), () => vec4( 0.0 ) );
168
+
169
+ return vec4( color.rgb.div( color.a ), color.a );
170
+
171
+ }, { color: 'vec4', return: 'vec4' } );
172
+
173
+
133
174
  // Deprecated
134
175
 
135
176
  /**
@@ -126,36 +126,16 @@ class ColorSpaceNode extends TempNode {
126
126
 
127
127
  export default ColorSpaceNode;
128
128
 
129
- /**
130
- * TSL function for converting a given color node to the current output color space.
131
- *
132
- * @tsl
133
- * @function
134
- * @param {Node} node - Represents the node to convert.
135
- * @returns {ColorSpaceNode}
136
- */
137
- export const toOutputColorSpace = ( node ) => nodeObject( new ColorSpaceNode( nodeObject( node ), WORKING_COLOR_SPACE, OUTPUT_COLOR_SPACE ) );
138
-
139
- /**
140
- * TSL function for converting a given color node to the current working color space.
141
- *
142
- * @tsl
143
- * @function
144
- * @param {Node} node - Represents the node to convert.
145
- * @returns {ColorSpaceNode}
146
- */
147
- export const toWorkingColorSpace = ( node ) => nodeObject( new ColorSpaceNode( nodeObject( node ), OUTPUT_COLOR_SPACE, WORKING_COLOR_SPACE ) );
148
-
149
129
  /**
150
130
  * TSL function for converting a given color node from the current working color space to the given color space.
151
131
  *
152
132
  * @tsl
153
133
  * @function
154
134
  * @param {Node} node - Represents the node to convert.
155
- * @param {string} colorSpace - The target color space.
135
+ * @param {string} targetColorSpace - The target color space.
156
136
  * @returns {ColorSpaceNode}
157
137
  */
158
- export const workingToColorSpace = ( node, colorSpace ) => nodeObject( new ColorSpaceNode( nodeObject( node ), WORKING_COLOR_SPACE, colorSpace ) );
138
+ export const workingToColorSpace = ( node, targetColorSpace ) => nodeObject( new ColorSpaceNode( nodeObject( node ), WORKING_COLOR_SPACE, targetColorSpace ) );
159
139
 
160
140
  /**
161
141
  * TSL function for converting a given color node from the given color space to the current working color space.
@@ -163,10 +143,10 @@ export const workingToColorSpace = ( node, colorSpace ) => nodeObject( new Color
163
143
  * @tsl
164
144
  * @function
165
145
  * @param {Node} node - Represents the node to convert.
166
- * @param {string} colorSpace - The source color space.
146
+ * @param {string} sourceColorSpace - The source color space.
167
147
  * @returns {ColorSpaceNode}
168
148
  */
169
- export const colorSpaceToWorking = ( node, colorSpace ) => nodeObject( new ColorSpaceNode( nodeObject( node ), colorSpace, WORKING_COLOR_SPACE ) );
149
+ export const colorSpaceToWorking = ( node, sourceColorSpace ) => nodeObject( new ColorSpaceNode( nodeObject( node ), sourceColorSpace, WORKING_COLOR_SPACE ) );
170
150
 
171
151
  /**
172
152
  * TSL function for converting a given color node from one color space to another one.
@@ -180,8 +160,5 @@ export const colorSpaceToWorking = ( node, colorSpace ) => nodeObject( new Color
180
160
  */
181
161
  export const convertColorSpace = ( node, sourceColorSpace, targetColorSpace ) => nodeObject( new ColorSpaceNode( nodeObject( node ), sourceColorSpace, targetColorSpace ) );
182
162
 
183
- addMethodChaining( 'toOutputColorSpace', toOutputColorSpace );
184
- addMethodChaining( 'toWorkingColorSpace', toWorkingColorSpace );
185
-
186
163
  addMethodChaining( 'workingToColorSpace', workingToColorSpace );
187
164
  addMethodChaining( 'colorSpaceToWorking', colorSpaceToWorking );
@@ -336,6 +336,14 @@ class PassNode extends TempNode {
336
336
  */
337
337
  this.updateBeforeType = NodeUpdateType.FRAME;
338
338
 
339
+ /**
340
+ * This flag is used for global cache.
341
+ *
342
+ * @type {boolean}
343
+ * @default true
344
+ */
345
+ this.global = true;
346
+
339
347
  }
340
348
 
341
349
  /**
@@ -404,17 +412,6 @@ class PassNode extends TempNode {
404
412
 
405
413
  }
406
414
 
407
- /**
408
- * The method is overwritten so it always returns `true`.
409
- *
410
- * @return {boolean} Whether this node is global or not.
411
- */
412
- isGlobal() {
413
-
414
- return true;
415
-
416
- }
417
-
418
415
  /**
419
416
  * Returns the texture for the given output name.
420
417
  *
@@ -32,7 +32,11 @@ class ShadowMaskModel extends LightingModel {
32
32
  */
33
33
  direct( { lightNode } ) {
34
34
 
35
- this.shadowNode.mulAssign( lightNode.shadowNode );
35
+ if ( lightNode.shadowNode !== null ) {
36
+
37
+ this.shadowNode.mulAssign( lightNode.shadowNode );
38
+
39
+ }
36
40
 
37
41
  }
38
42
 
@@ -28,7 +28,7 @@ const getParallaxCorrectNormal = /*@__PURE__*/ Fn( ( [ normal, cubeSize, cubePos
28
28
  rbminmax.y = nDir.y.greaterThan( float( 0 ) ).select( rbmax.y, rbmin.y );
29
29
  rbminmax.z = nDir.z.greaterThan( float( 0 ) ).select( rbmax.z, rbmin.z );
30
30
 
31
- const correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z ).toVar();
31
+ const correction = min( rbminmax.x, rbminmax.y, rbminmax.z ).toVar();
32
32
  const boxIntersection = positionWorld.add( nDir.mul( correction ) ).toVar();
33
33
  return boxIntersection.sub( cubePos );
34
34