super-three 0.177.0 → 0.181.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 (501) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +1994 -749
  3. package/build/three.core.js +1358 -506
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +631 -247
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +113 -33
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +9571 -3424
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +9397 -3426
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  14. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  15. package/examples/jsm/Addons.js +2 -3
  16. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  17. package/examples/jsm/capabilities/WebGL.js +0 -27
  18. package/examples/jsm/capabilities/WebGPU.js +1 -1
  19. package/examples/jsm/controls/ArcballControls.js +9 -9
  20. package/examples/jsm/controls/DragControls.js +7 -57
  21. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  22. package/examples/jsm/controls/FlyControls.js +1 -1
  23. package/examples/jsm/controls/OrbitControls.js +2 -2
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +1 -1
  26. package/examples/jsm/controls/TransformControls.js +62 -15
  27. package/examples/jsm/csm/CSMShadowNode.js +4 -4
  28. package/examples/jsm/effects/AsciiEffect.js +8 -8
  29. package/examples/jsm/environments/RoomEnvironment.js +8 -3
  30. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  31. package/examples/jsm/exporters/EXRExporter.js +1 -1
  32. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  33. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  34. package/examples/jsm/exporters/PLYExporter.js +1 -1
  35. package/examples/jsm/exporters/USDZExporter.js +683 -299
  36. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  37. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  38. package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
  39. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  40. package/examples/jsm/geometries/TextGeometry.js +3 -2
  41. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  42. package/examples/jsm/helpers/ViewHelper.js +43 -5
  43. package/examples/jsm/inspector/Inspector.js +427 -0
  44. package/examples/jsm/inspector/RendererInspector.js +415 -0
  45. package/examples/jsm/inspector/tabs/Console.js +204 -0
  46. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  47. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  48. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  49. package/examples/jsm/inspector/ui/Graph.js +95 -0
  50. package/examples/jsm/inspector/ui/Item.js +170 -0
  51. package/examples/jsm/inspector/ui/List.js +75 -0
  52. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  53. package/examples/jsm/inspector/ui/Style.js +654 -0
  54. package/examples/jsm/inspector/ui/Tab.js +46 -0
  55. package/examples/jsm/inspector/ui/Values.js +423 -0
  56. package/examples/jsm/inspector/ui/utils.js +56 -0
  57. package/examples/jsm/interactive/HTMLMesh.js +11 -13
  58. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  59. package/examples/jsm/interactive/SelectionBox.js +30 -0
  60. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  61. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  62. package/examples/jsm/lights/LightProbeGenerator.js +14 -3
  63. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  64. package/examples/jsm/lines/Line2.js +3 -3
  65. package/examples/jsm/lines/LineGeometry.js +1 -1
  66. package/examples/jsm/lines/LineSegments2.js +2 -2
  67. package/examples/jsm/lines/Wireframe.js +2 -2
  68. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  69. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  70. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  71. package/examples/jsm/loaders/3MFLoader.js +1 -1
  72. package/examples/jsm/loaders/ColladaLoader.js +4 -4
  73. package/examples/jsm/loaders/DDSLoader.js +1 -1
  74. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  75. package/examples/jsm/loaders/EXRLoader.js +210 -22
  76. package/examples/jsm/loaders/FBXLoader.js +4 -4
  77. package/examples/jsm/loaders/FontLoader.js +23 -5
  78. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  79. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  80. package/examples/jsm/loaders/HDRLoader.js +486 -0
  81. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  82. package/examples/jsm/loaders/KTXLoader.js +2 -2
  83. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  84. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  85. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  86. package/examples/jsm/loaders/LWOLoader.js +2 -2
  87. package/examples/jsm/loaders/MaterialXLoader.js +233 -34
  88. package/examples/jsm/loaders/OBJLoader.js +1 -1
  89. package/examples/jsm/loaders/PDBLoader.js +1 -1
  90. package/examples/jsm/loaders/RGBELoader.js +7 -473
  91. package/examples/jsm/loaders/SVGLoader.js +2 -2
  92. package/examples/jsm/loaders/TTFLoader.js +13 -1
  93. package/examples/jsm/loaders/USDLoader.js +219 -0
  94. package/examples/jsm/loaders/USDZLoader.js +4 -892
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  96. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  97. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  98. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  99. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  100. package/examples/jsm/math/ColorSpaces.js +19 -1
  101. package/examples/jsm/math/ConvexHull.js +3 -3
  102. package/examples/jsm/math/ImprovedNoise.js +1 -1
  103. package/examples/jsm/math/Lut.js +2 -2
  104. package/examples/jsm/math/SimplexNoise.js +1 -1
  105. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  106. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  107. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  108. package/examples/jsm/misc/TubePainter.js +383 -40
  109. package/examples/jsm/misc/Volume.js +1 -1
  110. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  111. package/examples/jsm/objects/LensflareMesh.js +3 -3
  112. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  113. package/examples/jsm/objects/Sky.js +1 -1
  114. package/examples/jsm/objects/SkyMesh.js +3 -3
  115. package/examples/jsm/objects/Water.js +3 -3
  116. package/examples/jsm/objects/WaterMesh.js +6 -6
  117. package/examples/jsm/physics/RapierPhysics.js +95 -16
  118. package/examples/jsm/postprocessing/GTAOPass.js +10 -9
  119. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  120. package/examples/jsm/postprocessing/OutlinePass.js +17 -17
  121. package/examples/jsm/postprocessing/SSAOPass.js +10 -9
  122. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  123. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  124. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  125. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  126. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  127. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  128. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  129. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  130. package/examples/jsm/shaders/BokehShader.js +1 -1
  131. package/examples/jsm/shaders/BokehShader2.js +1 -1
  132. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  133. package/examples/jsm/shaders/FocusShader.js +1 -1
  134. package/examples/jsm/shaders/GTAOShader.js +2 -2
  135. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  136. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  137. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  138. package/examples/jsm/shaders/SSRShader.js +1 -1
  139. package/examples/jsm/shaders/SepiaShader.js +1 -1
  140. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  141. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  142. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
  143. package/examples/jsm/shaders/VignetteShader.js +1 -1
  144. package/examples/jsm/transpiler/AST.js +381 -30
  145. package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
  146. package/examples/jsm/transpiler/Linker.js +327 -0
  147. package/examples/jsm/transpiler/TSLEncoder.js +196 -92
  148. package/examples/jsm/transpiler/Transpiler.js +17 -1
  149. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  150. package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  151. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  152. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  153. package/examples/jsm/tsl/display/BloomNode.js +11 -6
  154. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  155. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  156. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  157. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  158. package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
  159. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  160. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  161. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  162. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  163. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  164. package/examples/jsm/tsl/display/TRAANode.js +578 -0
  165. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  166. package/examples/jsm/tsl/display/hashBlur.js +18 -20
  167. package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
  168. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  169. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  170. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  171. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  172. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  173. package/package.json +5 -10
  174. package/src/Three.Core.js +5 -2
  175. package/src/Three.TSL.js +112 -32
  176. package/src/Three.WebGPU.Nodes.js +2 -0
  177. package/src/Three.WebGPU.js +4 -0
  178. package/src/animation/AnimationClip.js +20 -4
  179. package/src/animation/AnimationMixer.js +3 -3
  180. package/src/animation/AnimationObjectGroup.js +2 -1
  181. package/src/animation/KeyframeTrack.js +8 -7
  182. package/src/animation/PropertyBinding.js +12 -11
  183. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  184. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  185. package/src/audio/Audio.js +10 -9
  186. package/src/audio/PositionalAudio.js +1 -1
  187. package/src/cameras/Camera.js +14 -0
  188. package/src/cameras/OrthographicCamera.js +2 -2
  189. package/src/cameras/PerspectiveCamera.js +2 -2
  190. package/src/cameras/StereoCamera.js +2 -2
  191. package/src/constants.js +13 -5
  192. package/src/core/BufferAttribute.js +3 -3
  193. package/src/core/BufferGeometry.js +10 -10
  194. package/src/core/Clock.js +2 -8
  195. package/src/core/EventDispatcher.js +1 -1
  196. package/src/core/GLBufferAttribute.js +13 -1
  197. package/src/core/InterleavedBuffer.js +1 -1
  198. package/src/core/InterleavedBufferAttribute.js +3 -2
  199. package/src/core/Object3D.js +4 -3
  200. package/src/core/Raycaster.js +2 -1
  201. package/src/core/RenderTarget.js +10 -1
  202. package/{examples/jsm/misc → src/core}/Timer.js +4 -42
  203. package/src/extras/Controls.js +5 -4
  204. package/src/extras/DataUtils.js +2 -1
  205. package/src/extras/Earcut.js +6 -0
  206. package/src/extras/ImageUtils.js +2 -2
  207. package/src/extras/PMREMGenerator.js +279 -55
  208. package/src/extras/TextureUtils.js +2 -1
  209. package/src/extras/core/Curve.js +2 -1
  210. package/src/extras/core/Interpolations.js +7 -1
  211. package/src/extras/core/Path.js +22 -22
  212. package/src/extras/core/ShapePath.js +4 -4
  213. package/src/extras/lib/earcut.js +8 -8
  214. package/src/geometries/BoxGeometry.js +1 -0
  215. package/src/geometries/CapsuleGeometry.js +1 -0
  216. package/src/geometries/CircleGeometry.js +1 -0
  217. package/src/geometries/ConeGeometry.js +1 -0
  218. package/src/geometries/CylinderGeometry.js +1 -0
  219. package/src/geometries/DodecahedronGeometry.js +1 -0
  220. package/src/geometries/ExtrudeGeometry.js +8 -6
  221. package/src/geometries/IcosahedronGeometry.js +1 -0
  222. package/src/geometries/LatheGeometry.js +1 -0
  223. package/src/geometries/OctahedronGeometry.js +1 -0
  224. package/src/geometries/PlaneGeometry.js +1 -0
  225. package/src/geometries/RingGeometry.js +1 -0
  226. package/src/geometries/ShapeGeometry.js +1 -0
  227. package/src/geometries/SphereGeometry.js +1 -0
  228. package/src/geometries/TetrahedronGeometry.js +1 -0
  229. package/src/geometries/TorusGeometry.js +1 -0
  230. package/src/geometries/TorusKnotGeometry.js +1 -0
  231. package/src/geometries/TubeGeometry.js +1 -0
  232. package/src/helpers/CameraHelper.js +42 -12
  233. package/src/helpers/SkeletonHelper.js +35 -6
  234. package/src/lights/LightShadow.js +21 -8
  235. package/src/lights/PointLightShadow.js +1 -1
  236. package/src/lights/webgpu/ProjectorLight.js +1 -1
  237. package/src/loaders/AnimationLoader.js +2 -1
  238. package/src/loaders/AudioLoader.js +2 -1
  239. package/src/loaders/BufferGeometryLoader.js +2 -2
  240. package/src/loaders/Cache.js +2 -2
  241. package/src/loaders/DataTextureLoader.js +1 -1
  242. package/src/loaders/FileLoader.js +29 -5
  243. package/src/loaders/ImageBitmapLoader.js +32 -8
  244. package/src/loaders/ImageLoader.js +56 -9
  245. package/src/loaders/Loader.js +17 -3
  246. package/src/loaders/LoadingManager.js +45 -0
  247. package/src/loaders/MaterialLoader.js +3 -2
  248. package/src/loaders/ObjectLoader.js +13 -13
  249. package/src/loaders/TextureLoader.js +1 -1
  250. package/src/loaders/nodes/NodeLoader.js +3 -2
  251. package/src/materials/Material.js +16 -3
  252. package/src/materials/MeshBasicMaterial.js +2 -1
  253. package/src/materials/MeshDepthMaterial.js +1 -0
  254. package/src/materials/MeshDistanceMaterial.js +1 -1
  255. package/src/materials/MeshLambertMaterial.js +2 -1
  256. package/src/materials/MeshMatcapMaterial.js +22 -0
  257. package/src/materials/MeshNormalMaterial.js +1 -0
  258. package/src/materials/MeshPhongMaterial.js +2 -1
  259. package/src/materials/MeshPhysicalMaterial.js +2 -1
  260. package/src/materials/MeshStandardMaterial.js +8 -7
  261. package/src/materials/MeshToonMaterial.js +1 -0
  262. package/src/materials/PointsMaterial.js +1 -1
  263. package/src/materials/ShaderMaterial.js +2 -2
  264. package/src/materials/nodes/Line2NodeMaterial.js +2 -10
  265. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  266. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  267. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  268. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  269. package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
  270. package/src/materials/nodes/NodeMaterial.js +90 -27
  271. package/src/materials/nodes/PointsNodeMaterial.js +86 -28
  272. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  273. package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
  274. package/src/math/Color.js +6 -5
  275. package/src/math/ColorManagement.js +9 -3
  276. package/src/math/Cylindrical.js +1 -1
  277. package/src/math/Euler.js +2 -1
  278. package/src/math/Frustum.js +25 -9
  279. package/src/math/FrustumArray.js +10 -5
  280. package/src/math/Line3.js +129 -2
  281. package/src/math/MathUtils.js +13 -11
  282. package/src/math/Matrix2.js +1 -1
  283. package/src/math/Matrix3.js +2 -2
  284. package/src/math/Matrix4.js +55 -34
  285. package/src/math/Plane.js +1 -1
  286. package/src/math/Quaternion.js +69 -67
  287. package/src/math/Spherical.js +3 -3
  288. package/src/nodes/Nodes.js +6 -4
  289. package/src/nodes/TSL.js +9 -4
  290. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  291. package/src/nodes/accessors/Bitangent.js +31 -25
  292. package/src/nodes/accessors/BufferNode.js +1 -1
  293. package/src/nodes/accessors/Camera.js +142 -16
  294. package/src/nodes/accessors/ClippingNode.js +6 -5
  295. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  296. package/src/nodes/accessors/InstanceNode.js +25 -5
  297. package/src/nodes/accessors/Lights.js +10 -0
  298. package/src/nodes/accessors/Normal.js +97 -30
  299. package/src/nodes/accessors/Object3DNode.js +2 -2
  300. package/src/nodes/accessors/Position.js +25 -9
  301. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  302. package/src/nodes/accessors/ReferenceNode.js +20 -4
  303. package/src/nodes/accessors/ReflectVector.js +3 -3
  304. package/src/nodes/accessors/SceneNode.js +3 -2
  305. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  306. package/src/nodes/accessors/StorageTextureNode.js +23 -1
  307. package/src/nodes/accessors/Tangent.js +25 -17
  308. package/src/nodes/accessors/TangentUtils.js +46 -0
  309. package/src/nodes/accessors/Texture3DNode.js +14 -1
  310. package/src/nodes/accessors/TextureBicubic.js +21 -3
  311. package/src/nodes/accessors/TextureNode.js +142 -44
  312. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  313. package/src/nodes/code/FunctionCallNode.js +24 -4
  314. package/src/nodes/code/FunctionNode.js +23 -0
  315. package/src/nodes/core/ArrayNode.js +13 -0
  316. package/src/nodes/core/AssignNode.js +6 -2
  317. package/src/nodes/core/AttributeNode.js +2 -1
  318. package/src/nodes/core/ContextNode.js +48 -10
  319. package/src/nodes/core/IndexNode.js +2 -2
  320. package/src/nodes/core/InputNode.js +2 -1
  321. package/src/nodes/core/InspectorNode.js +128 -0
  322. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
  323. package/src/nodes/core/Node.js +167 -34
  324. package/src/nodes/core/NodeBuilder.js +404 -120
  325. package/src/nodes/core/NodeFrame.js +21 -21
  326. package/src/nodes/core/NodeFunction.js +2 -1
  327. package/src/nodes/core/NodeParser.js +2 -1
  328. package/src/nodes/core/NodeUniform.js +1 -1
  329. package/src/nodes/core/NodeUtils.js +17 -88
  330. package/src/nodes/core/ParameterNode.js +31 -0
  331. package/src/nodes/core/PropertyNode.js +7 -0
  332. package/src/nodes/core/StackNode.js +77 -30
  333. package/src/nodes/core/StructNode.js +5 -5
  334. package/src/nodes/core/StructTypeNode.js +1 -0
  335. package/src/nodes/core/SubBuildNode.js +89 -0
  336. package/src/nodes/core/UniformNode.js +80 -14
  337. package/src/nodes/core/VarNode.js +142 -16
  338. package/src/nodes/core/VaryingNode.js +9 -6
  339. package/src/nodes/display/BlendModes.js +7 -6
  340. package/src/nodes/display/BumpMapNode.js +1 -1
  341. package/src/nodes/display/ColorAdjustment.js +1 -1
  342. package/src/nodes/display/FrontFacingNode.js +35 -7
  343. package/src/nodes/display/NormalMapNode.js +20 -50
  344. package/src/nodes/display/PassNode.js +206 -17
  345. package/src/nodes/display/RenderOutputNode.js +28 -2
  346. package/src/nodes/display/ScreenNode.js +44 -40
  347. package/src/nodes/display/ToneMappingNode.js +31 -4
  348. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  349. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  350. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  351. package/src/nodes/display/ViewportTextureNode.js +94 -4
  352. package/src/nodes/fog/Fog.js +3 -2
  353. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  354. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  355. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  356. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  357. package/src/nodes/functions/BasicLightingModel.js +2 -1
  358. package/src/nodes/functions/PhongLightingModel.js +3 -3
  359. package/src/nodes/functions/PhysicalLightingModel.js +19 -18
  360. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  361. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  362. package/src/nodes/geometry/RangeNode.js +40 -4
  363. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  364. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  365. package/src/nodes/gpgpu/ComputeNode.js +81 -25
  366. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  367. package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
  368. package/src/nodes/lighting/EnvironmentNode.js +11 -11
  369. package/src/nodes/lighting/LightsNode.js +7 -8
  370. package/src/nodes/lighting/PointShadowNode.js +6 -0
  371. package/src/nodes/lighting/ProjectorLightNode.js +19 -6
  372. package/src/nodes/lighting/ShadowFilterNode.js +3 -1
  373. package/src/nodes/lighting/ShadowNode.js +77 -10
  374. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  375. package/src/nodes/materialx/lib/mx_noise.js +165 -1
  376. package/src/nodes/math/BitcastNode.js +156 -0
  377. package/src/nodes/math/ConditionalNode.js +25 -27
  378. package/src/nodes/math/MathNode.js +106 -65
  379. package/src/nodes/math/OperatorNode.js +28 -43
  380. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  381. package/src/nodes/shapes/Shapes.js +1 -1
  382. package/src/nodes/tsl/TSLBase.js +6 -2
  383. package/src/nodes/tsl/TSLCore.js +546 -186
  384. package/src/nodes/utils/DebugNode.js +3 -2
  385. package/src/nodes/utils/EquirectUV.js +27 -0
  386. package/src/nodes/utils/EventNode.js +119 -0
  387. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  388. package/src/nodes/utils/JoinNode.js +6 -3
  389. package/src/nodes/utils/LoopNode.js +20 -41
  390. package/src/nodes/utils/MatcapUV.js +22 -0
  391. package/src/nodes/utils/MemberNode.js +59 -7
  392. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  393. package/src/nodes/utils/RTTNode.js +33 -6
  394. package/src/nodes/utils/ReflectorNode.js +68 -10
  395. package/src/nodes/utils/SampleNode.js +91 -0
  396. package/src/nodes/utils/SplitNode.js +11 -0
  397. package/src/nodes/utils/Timer.js +0 -47
  398. package/src/nodes/utils/TriplanarTextures.js +65 -0
  399. package/src/objects/BatchedMesh.js +6 -4
  400. package/src/objects/LOD.js +1 -1
  401. package/src/objects/Line.js +2 -1
  402. package/src/objects/LineSegments.js +2 -1
  403. package/src/objects/Skeleton.js +3 -2
  404. package/src/objects/SkinnedMesh.js +3 -1
  405. package/src/objects/Sprite.js +4 -3
  406. package/src/renderers/WebGLRenderer.js +77 -66
  407. package/src/renderers/common/Animation.js +13 -1
  408. package/src/renderers/common/Attributes.js +1 -1
  409. package/src/renderers/common/Backend.js +108 -27
  410. package/src/renderers/common/Background.js +4 -3
  411. package/src/renderers/common/Bindings.js +76 -19
  412. package/src/renderers/common/CanvasTarget.js +341 -0
  413. package/src/renderers/common/ChainMap.js +1 -1
  414. package/src/renderers/common/Color4.js +2 -2
  415. package/src/renderers/common/CubeRenderTarget.js +1 -1
  416. package/src/renderers/common/DataMap.js +1 -1
  417. package/src/renderers/common/Geometries.js +26 -0
  418. package/src/renderers/common/Info.js +4 -2
  419. package/src/renderers/common/InspectorBase.js +146 -0
  420. package/src/renderers/common/Pipelines.js +1 -1
  421. package/src/renderers/common/PostProcessing.js +61 -25
  422. package/src/renderers/common/QuadMesh.js +7 -1
  423. package/src/renderers/common/RenderContext.js +2 -2
  424. package/src/renderers/common/RenderList.js +7 -3
  425. package/src/renderers/common/RenderObject.js +84 -5
  426. package/src/renderers/common/RenderObjects.js +1 -1
  427. package/src/renderers/common/Renderer.js +486 -255
  428. package/src/renderers/common/RendererUtils.js +9 -0
  429. package/src/renderers/common/SampledTexture.js +8 -68
  430. package/src/renderers/common/Sampler.js +117 -0
  431. package/src/renderers/common/Storage3DTexture.js +100 -0
  432. package/src/renderers/common/StorageArrayTexture.js +84 -0
  433. package/src/renderers/common/StorageTexture.js +27 -0
  434. package/src/renderers/common/Textures.js +138 -46
  435. package/src/renderers/common/TimestampQueryPool.js +65 -3
  436. package/src/renderers/common/UniformsGroup.js +2 -1
  437. package/src/renderers/common/XRManager.js +63 -24
  438. package/src/renderers/common/XRRenderTarget.js +21 -4
  439. package/src/renderers/common/extras/PMREMGenerator.js +161 -66
  440. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  441. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  442. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  443. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  444. package/src/renderers/common/nodes/Nodes.js +38 -16
  445. package/src/renderers/shaders/DFGLUTData.js +64 -0
  446. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  447. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  449. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  450. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  451. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  454. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
  455. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  456. package/src/renderers/shaders/UniformsLib.js +1 -0
  457. package/src/renderers/shaders/UniformsUtils.js +25 -4
  458. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  459. package/src/renderers/webgl/WebGLCapabilities.js +4 -3
  460. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  461. package/src/renderers/webgl/WebGLInfo.js +3 -1
  462. package/src/renderers/webgl/WebGLProgram.js +25 -18
  463. package/src/renderers/webgl/WebGLPrograms.js +9 -6
  464. package/src/renderers/webgl/WebGLShadowMap.js +13 -2
  465. package/src/renderers/webgl/WebGLState.js +17 -16
  466. package/src/renderers/webgl/WebGLTextures.js +38 -21
  467. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  468. package/src/renderers/webgl/WebGLUtils.js +3 -2
  469. package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
  470. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
  471. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  472. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  473. package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
  474. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
  475. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  476. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  477. package/src/renderers/webgpu/WebGPUBackend.js +205 -128
  478. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  479. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  480. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
  481. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
  482. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
  483. package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
  484. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
  485. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  486. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
  487. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  488. package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
  489. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  490. package/src/renderers/webxr/WebXRManager.js +89 -13
  491. package/src/textures/ExternalTexture.js +56 -0
  492. package/src/textures/FramebufferTexture.js +2 -2
  493. package/src/textures/Source.js +14 -3
  494. package/src/textures/Texture.js +3 -2
  495. package/src/textures/VideoTexture.js +29 -2
  496. package/src/utils.js +67 -3
  497. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  498. package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
  499. package/src/nodes/utils/EquirectUVNode.js +0 -65
  500. package/src/nodes/utils/MatcapUVNode.js +0 -49
  501. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -0,0 +1,455 @@
1
+ import TempNode from '../core/TempNode.js';
2
+ import { nodeProxyIntent } from '../tsl/TSLCore.js';
3
+
4
+
5
+ /**
6
+ * This class represents a set of built in WGSL shader functions that sync
7
+ * synchronously execute an operation across a subgroup, or 'warp', of compute
8
+ * or fragment shader invocations within a workgroup. Typically, these functions
9
+ * will synchronously execute an operation using data from all active invocations
10
+ * within the subgroup, then broadcast that result to all active invocations. In
11
+ * other graphics APIs, subgroup functions are also referred to as wave intrinsics
12
+ * (DirectX/HLSL) or warp intrinsics (CUDA).
13
+ *
14
+ * @augments TempNode
15
+ */
16
+ class SubgroupFunctionNode extends TempNode {
17
+
18
+ static get type() {
19
+
20
+ return 'SubgroupFunctionNode';
21
+
22
+ }
23
+
24
+ /**
25
+ * Constructs a new function node.
26
+ *
27
+ * @param {string} method - The subgroup/wave intrinsic method to construct.
28
+ * @param {Node} [aNode=null] - The method's first argument.
29
+ * @param {Node} [bNode=null] - The method's second argument.
30
+ */
31
+ constructor( method, aNode = null, bNode = null ) {
32
+
33
+ super();
34
+
35
+ /**
36
+ * The subgroup/wave intrinsic method to construct.
37
+ *
38
+ * @type {String}
39
+ */
40
+ this.method = method;
41
+
42
+ /**
43
+ * The method's first argument.
44
+ *
45
+ * @type {Node}
46
+ */
47
+ this.aNode = aNode;
48
+
49
+ /**
50
+ * The method's second argument.
51
+ *
52
+ * @type {Node}
53
+ */
54
+ this.bNode = bNode;
55
+
56
+ }
57
+
58
+ getInputType( builder ) {
59
+
60
+ const aType = this.aNode ? this.aNode.getNodeType( builder ) : null;
61
+ const bType = this.bNode ? this.bNode.getNodeType( builder ) : null;
62
+
63
+ const aLen = builder.isMatrix( aType ) ? 0 : builder.getTypeLength( aType );
64
+ const bLen = builder.isMatrix( bType ) ? 0 : builder.getTypeLength( bType );
65
+
66
+ if ( aLen > bLen ) {
67
+
68
+ return aType;
69
+
70
+ } else {
71
+
72
+ return bType;
73
+
74
+ }
75
+
76
+ }
77
+
78
+ getNodeType( builder ) {
79
+
80
+ const method = this.method;
81
+
82
+ if ( method === SubgroupFunctionNode.SUBGROUP_ELECT ) {
83
+
84
+ return 'bool';
85
+
86
+ } else if ( method === SubgroupFunctionNode.SUBGROUP_BALLOT ) {
87
+
88
+ return 'uvec4';
89
+
90
+ } else {
91
+
92
+ return this.getInputType( builder );
93
+
94
+ }
95
+
96
+ }
97
+
98
+ generate( builder, output ) {
99
+
100
+ const method = this.method;
101
+
102
+ const type = this.getNodeType( builder );
103
+ const inputType = this.getInputType( builder );
104
+
105
+ const a = this.aNode;
106
+ const b = this.bNode;
107
+
108
+ const params = [];
109
+
110
+ if (
111
+ method === SubgroupFunctionNode.SUBGROUP_BROADCAST ||
112
+ method === SubgroupFunctionNode.SUBGROUP_SHUFFLE ||
113
+ method === SubgroupFunctionNode.QUAD_BROADCAST
114
+ ) {
115
+
116
+ const bType = b.getNodeType( builder );
117
+
118
+ params.push(
119
+ a.build( builder, type ),
120
+ b.build( builder, bType === 'float' ? 'int' : type )
121
+ );
122
+
123
+ } else if (
124
+ method === SubgroupFunctionNode.SUBGROUP_SHUFFLE_XOR ||
125
+ method === SubgroupFunctionNode.SUBGROUP_SHUFFLE_DOWN ||
126
+ method === SubgroupFunctionNode.SUBGROUP_SHUFFLE_UP
127
+ ) {
128
+
129
+ params.push(
130
+ a.build( builder, type ),
131
+ b.build( builder, 'uint' )
132
+ );
133
+
134
+ } else {
135
+
136
+ if ( a !== null ) params.push( a.build( builder, inputType ) );
137
+ if ( b !== null ) params.push( b.build( builder, inputType ) );
138
+
139
+ }
140
+
141
+ const paramsString = params.length === 0 ? '()' : `( ${params.join( ', ' )} )`;
142
+
143
+ return builder.format( `${ builder.getMethod( method, type ) }${paramsString}`, type, output );
144
+
145
+
146
+
147
+ }
148
+
149
+ serialize( data ) {
150
+
151
+ super.serialize( data );
152
+
153
+ data.method = this.method;
154
+
155
+ }
156
+
157
+ deserialize( data ) {
158
+
159
+ super.deserialize( data );
160
+
161
+ this.method = data.method;
162
+
163
+ }
164
+
165
+ }
166
+
167
+ // 0 inputs
168
+ SubgroupFunctionNode.SUBGROUP_ELECT = 'subgroupElect';
169
+
170
+ // 1 input
171
+ SubgroupFunctionNode.SUBGROUP_BALLOT = 'subgroupBallot';
172
+ SubgroupFunctionNode.SUBGROUP_ADD = 'subgroupAdd';
173
+ SubgroupFunctionNode.SUBGROUP_INCLUSIVE_ADD = 'subgroupInclusiveAdd';
174
+ SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_AND = 'subgroupExclusiveAdd';
175
+ SubgroupFunctionNode.SUBGROUP_MUL = 'subgroupMul';
176
+ SubgroupFunctionNode.SUBGROUP_INCLUSIVE_MUL = 'subgroupInclusiveMul';
177
+ SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_MUL = 'subgroupExclusiveMul';
178
+ SubgroupFunctionNode.SUBGROUP_AND = 'subgroupAnd';
179
+ SubgroupFunctionNode.SUBGROUP_OR = 'subgroupOr';
180
+ SubgroupFunctionNode.SUBGROUP_XOR = 'subgroupXor';
181
+ SubgroupFunctionNode.SUBGROUP_MIN = 'subgroupMin';
182
+ SubgroupFunctionNode.SUBGROUP_MAX = 'subgroupMax';
183
+ SubgroupFunctionNode.SUBGROUP_ALL = 'subgroupAll';
184
+ SubgroupFunctionNode.SUBGROUP_ANY = 'subgroupAny';
185
+ SubgroupFunctionNode.SUBGROUP_BROADCAST_FIRST = 'subgroupBroadcastFirst';
186
+ SubgroupFunctionNode.QUAD_SWAP_X = 'quadSwapX';
187
+ SubgroupFunctionNode.QUAD_SWAP_Y = 'quadSwapY';
188
+ SubgroupFunctionNode.QUAD_SWAP_DIAGONAL = 'quadSwapDiagonal';
189
+
190
+ // 2 inputs
191
+ SubgroupFunctionNode.SUBGROUP_BROADCAST = 'subgroupBroadcast';
192
+ SubgroupFunctionNode.SUBGROUP_SHUFFLE = 'subgroupShuffle';
193
+ SubgroupFunctionNode.SUBGROUP_SHUFFLE_XOR = 'subgroupShuffleXor';
194
+ SubgroupFunctionNode.SUBGROUP_SHUFFLE_UP = 'subgroupShuffleUp';
195
+ SubgroupFunctionNode.SUBGROUP_SHUFFLE_DOWN = 'subgroupShuffleDown';
196
+ SubgroupFunctionNode.QUAD_BROADCAST = 'quadBroadcast';
197
+
198
+ export default SubgroupFunctionNode;
199
+
200
+
201
+
202
+ /**
203
+ * Returns true if this invocation has the lowest subgroup_invocation_id
204
+ * among active invocations in the subgroup.
205
+ *
206
+ * @tsl
207
+ * @method
208
+ * @return {bool} The result of the computation.
209
+ */
210
+ export const subgroupElect = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ELECT ).setParameterLength( 0 );
211
+
212
+ /**
213
+ * Returns a set of bitfields where the bit corresponding to subgroup_invocation_id
214
+ * is 1 if pred is true for that active invocation and 0 otherwise.
215
+ *
216
+ * @tsl
217
+ * @method
218
+ * @param {bool} pred - A boolean that sets the bit corresponding to the invocations subgroup invocation id.
219
+ * @return {vec4<u32>}- A bitfield corresponding to the pred value of each subgroup invocation.
220
+ */
221
+ export const subgroupBallot = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BALLOT ).setParameterLength( 1 );
222
+
223
+ /**
224
+ * A reduction that adds e among all active invocations and returns that result.
225
+ *
226
+ * @tsl
227
+ * @method
228
+ * @param {number} e - The value provided to the reduction by the current invocation.
229
+ * @return {number} The accumulated result of the reduction operation.
230
+ */
231
+ export const subgroupAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ADD ).setParameterLength( 1 );
232
+
233
+ /**
234
+ * An inclusive scan returning the sum of e for all active invocations with subgroup_invocation_id less than or equal to this invocation.
235
+ *
236
+ * @tsl
237
+ * @method
238
+ * @param {number} e - The value provided to the inclusive scan by the current invocation.
239
+ * @return {number} The accumulated result of the inclusive scan operation.
240
+ */
241
+ export const subgroupInclusiveAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_INCLUSIVE_ADD ).setParameterLength( 1 );
242
+
243
+ /**
244
+ * An exclusive scan that returns the sum of e for all active invocations with subgroup_invocation_id less than this invocation.
245
+ *
246
+ * @tsl
247
+ * @method
248
+ * @param {number} e - The value provided to the exclusive scan by the current invocation.
249
+ * @return {number} The accumulated result of the exclusive scan operation.
250
+ */
251
+ export const subgroupExclusiveAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_AND ).setParameterLength( 1 );
252
+
253
+ /**
254
+ * A reduction that multiplies e among all active invocations and returns that result.
255
+ *
256
+ * @tsl
257
+ * @method
258
+ * @param {number} e - The value provided to the reduction by the current invocation.
259
+ * @return {number} The accumulated result of the reduction operation.
260
+ */
261
+ export const subgroupMul = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_MUL ).setParameterLength( 1 );
262
+
263
+ /**
264
+ * An inclusive scan returning the product of e for all active invocations with subgroup_invocation_id less than or equal to this invocation.
265
+ *
266
+ * @tsl
267
+ * @method
268
+ * @param {number} e - The value provided to the inclusive scan by the current invocation.
269
+ * @return {number} The accumulated result of the inclusive scan operation.
270
+ */
271
+ export const subgroupInclusiveMul = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_INCLUSIVE_MUL ).setParameterLength( 1 );
272
+
273
+ /**
274
+ * An exclusive scan that returns the product of e for all active invocations with subgroup_invocation_id less than this invocation.
275
+ *
276
+ * @tsl
277
+ * @method
278
+ * @param {number} e - The value provided to the exclusive scan by the current invocation.
279
+ * @return {number} The accumulated result of the exclusive scan operation.
280
+ */
281
+ export const subgroupExclusiveMul = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_MUL ).setParameterLength( 1 );
282
+
283
+ /**
284
+ * A reduction that performs a bitwise and of e among all active invocations and returns that result.
285
+ *
286
+ * @tsl
287
+ * @method
288
+ * @param {number} e - The value provided to the reduction by the current invocation.
289
+ * @return {number} The result of the reduction operation.
290
+ */
291
+ export const subgroupAnd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_AND ).setParameterLength( 1 );
292
+
293
+ /**
294
+ * A reduction that performs a bitwise or of e among all active invocations and returns that result.
295
+ *
296
+ * @tsl
297
+ * @method
298
+ * @param {number} e - The value provided to the reduction by the current invocation.
299
+ * @return {number} The result of the reduction operation.
300
+ */
301
+ export const subgroupOr = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_OR ).setParameterLength( 1 );
302
+
303
+ /**
304
+ * A reduction that performs a bitwise xor of e among all active invocations and returns that result.
305
+ *
306
+ * @tsl
307
+ * @method
308
+ * @param {number} e - The value provided to the reduction by the current invocation.
309
+ * @return {number} The result of the reduction operation.
310
+ */
311
+ export const subgroupXor = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_XOR ).setParameterLength( 1 );
312
+
313
+ /**
314
+ * A reduction that performs a min of e among all active invocations and returns that result.
315
+ *
316
+ * @tsl
317
+ * @method
318
+ * @param {number} e - The value provided to the reduction by the current invocation.
319
+ * @return {number} The result of the reduction operation.
320
+ */
321
+ export const subgroupMin = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_MIN ).setParameterLength( 1 );
322
+
323
+ /**
324
+ * A reduction that performs a max of e among all active invocations and returns that result.
325
+ *
326
+ * @tsl
327
+ * @method
328
+ * @param {number} e - The value provided to the reduction by the current invocation.
329
+ * @return {number} The result of the reduction operation.
330
+ */
331
+ export const subgroupMax = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_MAX ).setParameterLength( 1 );
332
+
333
+ /**
334
+ * Returns true if e is true for all active invocations in the subgroup.
335
+ *
336
+ * @tsl
337
+ * @method
338
+ * @return {bool} The result of the computation.
339
+ */
340
+ export const subgroupAll = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ALL ).setParameterLength( 0 );
341
+
342
+ /**
343
+ * Returns true if e is true for any active invocation in the subgroup
344
+ *
345
+ * @tsl
346
+ * @method
347
+ * @return {bool} The result of the computation.
348
+ */
349
+ export const subgroupAny = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ANY ).setParameterLength( 0 );
350
+
351
+ /**
352
+ * Broadcasts e from the active invocation with the lowest subgroup_invocation_id in the subgroup to all other active invocations.
353
+ *
354
+ * @tsl
355
+ * @method
356
+ * @param {number} e - The value to broadcast from the lowest subgroup invocation.
357
+ * @param {number} id - The subgroup invocation to broadcast from.
358
+ * @return {number} The broadcast value.
359
+ */
360
+ export const subgroupBroadcastFirst = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BROADCAST_FIRST ).setParameterLength( 2 );
361
+
362
+ /**
363
+ * Swaps e between invocations in the quad in the X direction.
364
+ *
365
+ * @tsl
366
+ * @method
367
+ * @param {number} e - The value to swap from the current invocation.
368
+ * @return {number} The value received from the swap operation.
369
+ */
370
+ export const quadSwapX = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_SWAP_X ).setParameterLength( 1 );
371
+
372
+ /**
373
+ * Swaps e between invocations in the quad in the Y direction.
374
+ *
375
+ * @tsl
376
+ * @method
377
+ * @param {number} e - The value to swap from the current invocation.
378
+ * @return {number} The value received from the swap operation.
379
+ */
380
+ export const quadSwapY = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_SWAP_Y ).setParameterLength( 1 );
381
+
382
+ /**
383
+ * Swaps e between invocations in the quad diagonally.
384
+ *
385
+ * @tsl
386
+ * @method
387
+ * @param {number} e - The value to swap from the current invocation.
388
+ * @return {number} The value received from the swap operation.
389
+ */
390
+ export const quadSwapDiagonal = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_SWAP_DIAGONAL ).setParameterLength( 1 );
391
+
392
+ /**
393
+ * Broadcasts e from the invocation whose subgroup_invocation_id matches id, to all active invocations.
394
+ *
395
+ * @tsl
396
+ * @method
397
+ * @param {number} e - The value to broadcast from subgroup invocation 'id'.
398
+ * @param {number} id - The subgroup invocation to broadcast from.
399
+ * @return {number} The broadcast value.
400
+ */
401
+ export const subgroupBroadcast = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BROADCAST ).setParameterLength( 2 );
402
+
403
+ /**
404
+ * Returns v from the active invocation whose subgroup_invocation_id matches id
405
+ *
406
+ * @tsl
407
+ * @method
408
+ * @param {number} v - The value to return from subgroup invocation id^mask.
409
+ * @param {number} id - The subgroup invocation which returns the value v.
410
+ * @return {number} The broadcast value.
411
+ */
412
+ export const subgroupShuffle = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE ).setParameterLength( 2 );
413
+
414
+ /**
415
+ * Returns v from the active invocation whose subgroup_invocation_id matches subgroup_invocation_id ^ mask.
416
+ *
417
+ * @tsl
418
+ * @method
419
+ * @param {number} v - The value to return from subgroup invocation id^mask.
420
+ * @param {number} mask - A bitmask that determines the target invocation via a XOR operation.
421
+ * @return {number} The broadcast value.
422
+ */
423
+ export const subgroupShuffleXor = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE_XOR ).setParameterLength( 2 );
424
+
425
+ /**
426
+ * Returns v from the active invocation whose subgroup_invocation_id matches subgroup_invocation_id - delta
427
+ *
428
+ * @tsl
429
+ * @method
430
+ * @param {number} v - The value to return from subgroup invocation id^mask.
431
+ * @param {number} delta - A value that offsets the current in.
432
+ * @return {number} The broadcast value.
433
+ */
434
+ export const subgroupShuffleUp = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE_UP ).setParameterLength( 2 );
435
+
436
+ /**
437
+ * Returns v from the active invocation whose subgroup_invocation_id matches subgroup_invocation_id + delta
438
+ *
439
+ * @tsl
440
+ * @method
441
+ * @param {number} v - The value to return from subgroup invocation id^mask.
442
+ * @param {number} delta - A value that offsets the current subgroup invocation.
443
+ * @return {number} The broadcast value.
444
+ */
445
+ export const subgroupShuffleDown = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE_DOWN ).setParameterLength( 2 );
446
+
447
+ /**
448
+ * Broadcasts e from the quad invocation with id equal to id.
449
+ *
450
+ * @tsl
451
+ * @method
452
+ * @param {number} e - The value to broadcast.
453
+ * @return {number} The broadcast value.
454
+ */
455
+ export const quadBroadcast = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_BROADCAST ).setParameterLength( 1 );
@@ -1,6 +1,7 @@
1
1
  import ArrayElementNode from '../utils/ArrayElementNode.js';
2
2
  import { nodeObject } from '../tsl/TSLCore.js';
3
3
  import Node from '../core/Node.js';
4
+ import { warn } from '../../utils.js';
4
5
 
5
6
  /**
6
7
  * Represents an element of a 'workgroup' scoped buffer.
@@ -116,15 +117,23 @@ class WorkgroupInfoNode extends Node {
116
117
  */
117
118
  this.scope = scope;
118
119
 
120
+ /**
121
+ * The name of the workgroup scoped buffer.
122
+ *
123
+ * @type {string}
124
+ * @default ''
125
+ */
126
+ this.name = '';
127
+
119
128
  }
120
129
 
121
130
  /**
122
- * Sets the name/label of this node.
131
+ * Sets the name of this node.
123
132
  *
124
133
  * @param {string} name - The name to set.
125
134
  * @return {WorkgroupInfoNode} A reference to this node.
126
135
  */
127
- label( name ) {
136
+ setName( name ) {
128
137
 
129
138
  this.name = name;
130
139
 
@@ -132,6 +141,21 @@ class WorkgroupInfoNode extends Node {
132
141
 
133
142
  }
134
143
 
144
+ /**
145
+ * Sets the name/label of this node.
146
+ *
147
+ * @deprecated
148
+ * @param {string} name - The name to set.
149
+ * @return {WorkgroupInfoNode} A reference to this node.
150
+ */
151
+ label( name ) {
152
+
153
+ warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
154
+
155
+ return this.setName( name );
156
+
157
+ }
158
+
135
159
  /**
136
160
  * Sets the scope of this node.
137
161
  *
@@ -185,7 +209,9 @@ class WorkgroupInfoNode extends Node {
185
209
 
186
210
  generate( builder ) {
187
211
 
188
- return builder.getScopedArray( this.name || `${this.scope}Array_${this.id}`, this.scope.toLowerCase(), this.bufferType, this.bufferCount );
212
+ const name = ( this.name !== '' ) ? this.name : `${this.scope}Array_${this.id}`;
213
+
214
+ return builder.getScopedArray( name, this.scope.toLowerCase(), this.bufferType, this.bufferCount );
189
215
 
190
216
  }
191
217
 
@@ -1,11 +1,11 @@
1
1
  import LightingNode from './LightingNode.js';
2
- import { cache } from '../core/CacheNode.js';
2
+ import { isolate } from '../core/IsolateNode.js';
3
3
  import { roughness, clearcoatRoughness } from '../core/PropertyNode.js';
4
4
  import { cameraViewMatrix } from '../accessors/Camera.js';
5
- import { transformedClearcoatNormalView, transformedNormalView, transformedNormalWorld } from '../accessors/Normal.js';
5
+ import { normalView, clearcoatNormalView, normalWorld } from '../accessors/Normal.js';
6
6
  import { positionViewDirection } from '../accessors/Position.js';
7
- import { float } from '../tsl/TSLBase.js';
8
- import { transformedBentNormalView } from '../accessors/AccessorsUtils.js';
7
+ import { float, pow4 } from '../tsl/TSLBase.js';
8
+ import { bentNormalView } from '../accessors/AccessorsUtils.js';
9
9
  import { pmremTexture } from '../pmrem/PMREMNode.js';
10
10
  import { materialEnvIntensity } from '../accessors/MaterialProperties.js';
11
11
 
@@ -72,13 +72,13 @@ class EnvironmentNode extends LightingNode {
72
72
  //
73
73
 
74
74
  const useAnisotropy = material.useAnisotropy === true || material.anisotropy > 0;
75
- const radianceNormalView = useAnisotropy ? transformedBentNormalView : transformedNormalView;
75
+ const radianceNormalView = useAnisotropy ? bentNormalView : normalView;
76
76
 
77
77
  const radiance = envNode.context( createRadianceContext( roughness, radianceNormalView ) ).mul( materialEnvIntensity );
78
- const irradiance = envNode.context( createIrradianceContext( transformedNormalWorld ) ).mul( Math.PI ).mul( materialEnvIntensity );
78
+ const irradiance = envNode.context( createIrradianceContext( normalWorld ) ).mul( Math.PI ).mul( materialEnvIntensity );
79
79
 
80
- const isolateRadiance = cache( radiance );
81
- const isolateIrradiance = cache( irradiance );
80
+ const isolateRadiance = isolate( radiance );
81
+ const isolateIrradiance = isolate( irradiance );
82
82
 
83
83
  //
84
84
 
@@ -92,8 +92,8 @@ class EnvironmentNode extends LightingNode {
92
92
 
93
93
  if ( clearcoatRadiance ) {
94
94
 
95
- const clearcoatRadianceContext = envNode.context( createRadianceContext( clearcoatRoughness, transformedClearcoatNormalView ) ).mul( materialEnvIntensity );
96
- const isolateClearcoatRadiance = cache( clearcoatRadianceContext );
95
+ const clearcoatRadianceContext = envNode.context( createRadianceContext( clearcoatRoughness, clearcoatNormalView ) ).mul( materialEnvIntensity );
96
+ const isolateClearcoatRadiance = isolate( clearcoatRadianceContext );
97
97
 
98
98
  clearcoatRadiance.addAssign( isolateClearcoatRadiance );
99
99
 
@@ -117,7 +117,7 @@ const createRadianceContext = ( roughnessNode, normalViewNode ) => {
117
117
  reflectVec = positionViewDirection.negate().reflect( normalViewNode );
118
118
 
119
119
  // Mixing the reflection with the normal is more accurate and keeps rough objects from gathering light from behind their tangent plane.
120
- reflectVec = roughnessNode.mul( roughnessNode ).mix( reflectVec, normalViewNode ).normalize();
120
+ reflectVec = pow4( roughnessNode ).mix( reflectVec, normalViewNode ).normalize();
121
121
 
122
122
  reflectVec = reflectVec.transformDirection( cameraViewMatrix );
123
123
 
@@ -1,6 +1,7 @@
1
1
  import Node from '../core/Node.js';
2
- import { nodeObject, vec3 } from '../tsl/TSLBase.js';
2
+ import { nodeObject, property, vec3 } from '../tsl/TSLBase.js';
3
3
  import { hashArray } from '../core/NodeUtils.js';
4
+ import { warn } from '../../utils.js';
4
5
 
5
6
  const sortLights = ( lights ) => {
6
7
 
@@ -54,21 +55,21 @@ class LightsNode extends Node {
54
55
  *
55
56
  * @type {Node<vec3>}
56
57
  */
57
- this.totalDiffuseNode = vec3().toVar();
58
+ this.totalDiffuseNode = property( 'vec3', 'totalDiffuse' );
58
59
 
59
60
  /**
60
61
  * A node representing the total specular light.
61
62
  *
62
63
  * @type {Node<vec3>}
63
64
  */
64
- this.totalSpecularNode = vec3().toVar();
65
+ this.totalSpecularNode = property( 'vec3', 'totalSpecular' );
65
66
 
66
67
  /**
67
68
  * A node representing the outgoing light.
68
69
  *
69
70
  * @type {Node<vec3>}
70
71
  */
71
- this.outgoingLightNode = vec3().toVar();
72
+ this.outgoingLightNode = property( 'vec3', 'outgoingLight' );
72
73
 
73
74
  /**
74
75
  * An array representing the lights in the scene.
@@ -159,7 +160,7 @@ class LightsNode extends Node {
159
160
 
160
161
  for ( const lightNode of this._lightNodes ) {
161
162
 
162
- hash.push( lightNode.getSelf().getHash() );
163
+ hash.push( lightNode.getHash() );
163
164
 
164
165
  }
165
166
 
@@ -224,7 +225,7 @@ class LightsNode extends Node {
224
225
 
225
226
  if ( lightNodeClass === null ) {
226
227
 
227
- console.warn( `LightsNode.setupNodeLights: Light node not found for ${ light.constructor.name }` );
228
+ warn( `LightsNode.setupNodeLights: Light node not found for ${ light.constructor.name }` );
228
229
  continue;
229
230
 
230
231
  }
@@ -368,8 +369,6 @@ class LightsNode extends Node {
368
369
 
369
370
  }
370
371
 
371
- context.material.transparent = true;
372
-
373
372
  }
374
373
 
375
374
  totalDiffuseNode.assign( totalDiffuse );
@@ -279,8 +279,14 @@ class PointShadowNode extends ShadowNode {
279
279
 
280
280
  shadow.updateMatrices( light, vp );
281
281
 
282
+ const currentSceneName = scene.name;
283
+
284
+ scene.name = `Point Light Shadow [ ${ light.name || 'ID: ' + light.id } ] - Face ${ vp + 1 }`;
285
+
282
286
  renderer.render( scene, shadow.camera );
283
287
 
288
+ scene.name = currentSceneName;
289
+
284
290
  }
285
291
 
286
292
  //
@@ -1,8 +1,10 @@
1
1
  import SpotLightNode from './SpotLightNode.js';
2
2
 
3
- import { Fn, vec2 } from '../tsl/TSLCore.js';
3
+ import { float, Fn, If, vec2 } from '../tsl/TSLCore.js';
4
4
  import { length, min, max, saturate, acos } from '../math/MathNode.js';
5
5
  import { div, sub } from '../math/OperatorNode.js';
6
+ import { lightShadowMatrix } from '../accessors/Lights.js';
7
+ import { positionWorld } from '../accessors/Position.js';
6
8
 
7
9
  const sdBox = /*@__PURE__*/ Fn( ( [ p, b ] ) => {
8
10
 
@@ -61,13 +63,24 @@ class ProjectorLightNode extends SpotLightNode {
61
63
  */
62
64
  getSpotAttenuation( builder ) {
63
65
 
66
+ const attenuation = float( 0 );
64
67
  const penumbraCos = this.penumbraCosNode;
65
- const spotLightCoord = this.getLightCoord( builder );
66
- const coord = spotLightCoord.xyz.div( spotLightCoord.w );
67
68
 
68
- const boxDist = sdBox( coord.xy.sub( vec2( 0.5 ) ), vec2( 0.5 ) );
69
- const angleFactor = div( - 1.0, sub( 1.0, acos( penumbraCos ) ).sub( 1.0 ) );
70
- const attenuation = saturate( boxDist.mul( - 2.0 ).mul( angleFactor ) );
69
+ // compute the fragment's position in the light's clip space
70
+
71
+ const spotLightCoord = lightShadowMatrix( this.light ).mul( builder.context.positionWorld || positionWorld );
72
+
73
+ // the sign of w determines whether the current fragment is in front or behind the light.
74
+ // to avoid a back-projection, it's important to only compute an attenuation if w is positive
75
+
76
+ If( spotLightCoord.w.greaterThan( 0 ), () => {
77
+
78
+ const projectionUV = spotLightCoord.xyz.div( spotLightCoord.w );
79
+ const boxDist = sdBox( projectionUV.xy.sub( vec2( 0.5 ) ), vec2( 0.5 ) );
80
+ const angleFactor = div( - 1.0, sub( 1.0, acos( penumbraCos ) ).sub( 1.0 ) );
81
+ attenuation.assign( saturate( boxDist.mul( - 2.0 ).mul( angleFactor ) ) );
82
+
83
+ } );
71
84
 
72
85
  return attenuation;
73
86