@plastic-software/three 0.179.0 → 0.181.1

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 (430) hide show
  1. package/build/three.cjs +1108 -591
  2. package/build/three.core.js +616 -345
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +488 -250
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +37 -6
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +6576 -2152
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +6575 -2151
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  13. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  14. package/examples/jsm/Addons.js +1 -1
  15. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  16. package/examples/jsm/controls/ArcballControls.js +8 -8
  17. package/examples/jsm/controls/DragControls.js +7 -57
  18. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  19. package/examples/jsm/controls/FlyControls.js +1 -1
  20. package/examples/jsm/controls/OrbitControls.js +2 -2
  21. package/examples/jsm/controls/PointerLockControls.js +2 -10
  22. package/examples/jsm/controls/TrackballControls.js +1 -1
  23. package/examples/jsm/controls/TransformControls.js +1 -1
  24. package/examples/jsm/effects/AsciiEffect.js +8 -8
  25. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  26. package/examples/jsm/exporters/EXRExporter.js +1 -1
  27. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  28. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  29. package/examples/jsm/exporters/PLYExporter.js +1 -1
  30. package/examples/jsm/exporters/USDZExporter.js +9 -2
  31. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  32. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  33. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  34. package/examples/jsm/geometries/TextGeometry.js +3 -2
  35. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  36. package/examples/jsm/helpers/ViewHelper.js +43 -5
  37. package/examples/jsm/inspector/Inspector.js +427 -0
  38. package/examples/jsm/inspector/RendererInspector.js +415 -0
  39. package/examples/jsm/inspector/tabs/Console.js +204 -0
  40. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  41. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  42. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  43. package/examples/jsm/inspector/ui/Graph.js +95 -0
  44. package/examples/jsm/inspector/ui/Item.js +170 -0
  45. package/examples/jsm/inspector/ui/List.js +75 -0
  46. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  47. package/examples/jsm/inspector/ui/Style.js +654 -0
  48. package/examples/jsm/inspector/ui/Tab.js +46 -0
  49. package/examples/jsm/inspector/ui/Values.js +423 -0
  50. package/examples/jsm/inspector/ui/utils.js +56 -0
  51. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  52. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  53. package/examples/jsm/interactive/SelectionBox.js +30 -0
  54. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  55. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  56. package/examples/jsm/lines/Line2.js +3 -3
  57. package/examples/jsm/lines/LineGeometry.js +1 -1
  58. package/examples/jsm/lines/LineSegments2.js +2 -2
  59. package/examples/jsm/lines/Wireframe.js +2 -2
  60. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  61. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  62. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  63. package/examples/jsm/loaders/3MFLoader.js +1 -1
  64. package/examples/jsm/loaders/ColladaLoader.js +3 -3
  65. package/examples/jsm/loaders/DDSLoader.js +1 -1
  66. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  67. package/examples/jsm/loaders/EXRLoader.js +5 -5
  68. package/examples/jsm/loaders/FBXLoader.js +2 -2
  69. package/examples/jsm/loaders/FontLoader.js +23 -5
  70. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  71. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  72. package/examples/jsm/loaders/HDRLoader.js +486 -0
  73. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  74. package/examples/jsm/loaders/KTXLoader.js +2 -2
  75. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  76. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  77. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  78. package/examples/jsm/loaders/LWOLoader.js +2 -2
  79. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  80. package/examples/jsm/loaders/OBJLoader.js +1 -1
  81. package/examples/jsm/loaders/PDBLoader.js +1 -1
  82. package/examples/jsm/loaders/RGBELoader.js +7 -473
  83. package/examples/jsm/loaders/SVGLoader.js +2 -2
  84. package/examples/jsm/loaders/TTFLoader.js +4 -4
  85. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  86. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  87. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  88. package/examples/jsm/math/ColorSpaces.js +19 -1
  89. package/examples/jsm/math/ConvexHull.js +3 -3
  90. package/examples/jsm/math/ImprovedNoise.js +1 -1
  91. package/examples/jsm/math/Lut.js +2 -2
  92. package/examples/jsm/math/SimplexNoise.js +1 -1
  93. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  94. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  95. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  96. package/examples/jsm/misc/TubePainter.js +383 -40
  97. package/examples/jsm/misc/Volume.js +1 -1
  98. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  99. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  100. package/examples/jsm/objects/Sky.js +1 -1
  101. package/examples/jsm/objects/SkyMesh.js +1 -1
  102. package/examples/jsm/objects/Water.js +3 -3
  103. package/examples/jsm/objects/WaterMesh.js +6 -6
  104. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  105. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  106. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  107. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  108. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  109. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  110. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  111. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  112. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  113. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  114. package/examples/jsm/shaders/BokehShader.js +1 -1
  115. package/examples/jsm/shaders/BokehShader2.js +1 -1
  116. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  117. package/examples/jsm/shaders/FocusShader.js +1 -1
  118. package/examples/jsm/shaders/GTAOShader.js +2 -2
  119. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  120. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  122. package/examples/jsm/shaders/SSRShader.js +1 -1
  123. package/examples/jsm/shaders/SepiaShader.js +1 -1
  124. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  125. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  126. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +1 -1
  127. package/examples/jsm/shaders/VignetteShader.js +1 -1
  128. package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
  129. package/examples/jsm/transpiler/TSLEncoder.js +9 -10
  130. package/examples/jsm/transpiler/WGSLEncoder.js +24 -0
  131. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  132. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  133. package/examples/jsm/tsl/display/BloomNode.js +7 -3
  134. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
  135. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  136. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  137. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  138. package/examples/jsm/tsl/display/GaussianBlurNode.js +49 -35
  139. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  140. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  141. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  142. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  143. package/examples/jsm/tsl/display/TRAANode.js +124 -7
  144. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  145. package/examples/jsm/tsl/display/hashBlur.js +16 -18
  146. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  147. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  148. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  149. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  150. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  151. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  152. package/package.json +5 -10
  153. package/src/Three.Core.js +4 -2
  154. package/src/Three.TSL.js +36 -5
  155. package/src/Three.WebGPU.Nodes.js +2 -0
  156. package/src/Three.WebGPU.js +2 -0
  157. package/src/animation/AnimationClip.js +20 -4
  158. package/src/animation/AnimationMixer.js +3 -3
  159. package/src/animation/AnimationObjectGroup.js +2 -1
  160. package/src/animation/KeyframeTrack.js +7 -6
  161. package/src/animation/PropertyBinding.js +12 -11
  162. package/src/audio/Audio.js +10 -9
  163. package/src/audio/PositionalAudio.js +1 -1
  164. package/src/cameras/OrthographicCamera.js +1 -1
  165. package/src/cameras/PerspectiveCamera.js +1 -1
  166. package/src/cameras/StereoCamera.js +2 -2
  167. package/src/constants.js +11 -3
  168. package/src/core/BufferGeometry.js +10 -10
  169. package/src/core/EventDispatcher.js +1 -1
  170. package/src/core/InterleavedBuffer.js +1 -1
  171. package/src/core/InterleavedBufferAttribute.js +3 -2
  172. package/src/core/Object3D.js +3 -2
  173. package/src/core/Raycaster.js +2 -1
  174. package/src/core/RenderTarget.js +10 -1
  175. package/src/extras/Controls.js +5 -4
  176. package/src/extras/DataUtils.js +2 -1
  177. package/src/extras/Earcut.js +6 -0
  178. package/src/extras/ImageUtils.js +2 -2
  179. package/src/extras/PMREMGenerator.js +268 -55
  180. package/src/extras/TextureUtils.js +2 -1
  181. package/src/extras/core/Curve.js +2 -1
  182. package/src/extras/core/Interpolations.js +7 -1
  183. package/src/extras/core/ShapePath.js +4 -4
  184. package/src/extras/lib/earcut.js +8 -8
  185. package/src/geometries/BoxGeometry.js +1 -0
  186. package/src/geometries/CapsuleGeometry.js +1 -0
  187. package/src/geometries/CircleGeometry.js +1 -0
  188. package/src/geometries/ConeGeometry.js +1 -0
  189. package/src/geometries/CylinderGeometry.js +1 -0
  190. package/src/geometries/DodecahedronGeometry.js +1 -0
  191. package/src/geometries/ExtrudeGeometry.js +8 -6
  192. package/src/geometries/IcosahedronGeometry.js +1 -0
  193. package/src/geometries/LatheGeometry.js +1 -0
  194. package/src/geometries/OctahedronGeometry.js +1 -0
  195. package/src/geometries/PlaneGeometry.js +1 -0
  196. package/src/geometries/RingGeometry.js +1 -0
  197. package/src/geometries/ShapeGeometry.js +1 -0
  198. package/src/geometries/SphereGeometry.js +1 -0
  199. package/src/geometries/TetrahedronGeometry.js +1 -0
  200. package/src/geometries/TorusGeometry.js +1 -0
  201. package/src/geometries/TorusKnotGeometry.js +1 -0
  202. package/src/geometries/TubeGeometry.js +1 -0
  203. package/src/helpers/CameraHelper.js +1 -1
  204. package/src/lights/webgpu/ProjectorLight.js +1 -1
  205. package/src/loaders/AnimationLoader.js +2 -1
  206. package/src/loaders/AudioLoader.js +2 -1
  207. package/src/loaders/BufferGeometryLoader.js +2 -2
  208. package/src/loaders/Cache.js +2 -2
  209. package/src/loaders/DataTextureLoader.js +1 -1
  210. package/src/loaders/FileLoader.js +3 -2
  211. package/src/loaders/ImageBitmapLoader.js +5 -4
  212. package/src/loaders/ImageLoader.js +1 -1
  213. package/src/loaders/Loader.js +3 -3
  214. package/src/loaders/LoadingManager.js +25 -3
  215. package/src/loaders/MaterialLoader.js +3 -2
  216. package/src/loaders/ObjectLoader.js +13 -13
  217. package/src/loaders/TextureLoader.js +1 -1
  218. package/src/loaders/nodes/NodeLoader.js +3 -2
  219. package/src/materials/Material.js +16 -3
  220. package/src/materials/MeshBasicMaterial.js +1 -0
  221. package/src/materials/MeshDepthMaterial.js +1 -0
  222. package/src/materials/MeshDistanceMaterial.js +1 -1
  223. package/src/materials/MeshLambertMaterial.js +2 -1
  224. package/src/materials/MeshMatcapMaterial.js +22 -0
  225. package/src/materials/MeshNormalMaterial.js +1 -0
  226. package/src/materials/MeshPhongMaterial.js +2 -1
  227. package/src/materials/MeshPhysicalMaterial.js +2 -1
  228. package/src/materials/MeshStandardMaterial.js +8 -7
  229. package/src/materials/MeshToonMaterial.js +1 -0
  230. package/src/materials/PointsMaterial.js +1 -1
  231. package/src/materials/ShaderMaterial.js +2 -2
  232. package/src/materials/nodes/Line2NodeMaterial.js +2 -2
  233. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  234. package/src/materials/nodes/NodeMaterial.js +62 -22
  235. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  236. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  237. package/src/materials/nodes/manager/NodeMaterialObserver.js +3 -2
  238. package/src/math/Color.js +6 -5
  239. package/src/math/ColorManagement.js +9 -3
  240. package/src/math/Cylindrical.js +1 -1
  241. package/src/math/Euler.js +2 -1
  242. package/src/math/MathUtils.js +13 -11
  243. package/src/math/Matrix2.js +1 -1
  244. package/src/math/Matrix3.js +2 -2
  245. package/src/math/Matrix4.js +7 -7
  246. package/src/math/Plane.js +1 -1
  247. package/src/math/Quaternion.js +68 -66
  248. package/src/math/Spherical.js +1 -1
  249. package/src/nodes/Nodes.js +4 -1
  250. package/src/nodes/TSL.js +4 -1
  251. package/src/nodes/accessors/BufferNode.js +1 -1
  252. package/src/nodes/accessors/Camera.js +133 -7
  253. package/src/nodes/accessors/ClippingNode.js +6 -5
  254. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  255. package/src/nodes/accessors/InstanceNode.js +25 -5
  256. package/src/nodes/accessors/Lights.js +10 -0
  257. package/src/nodes/accessors/Normal.js +5 -4
  258. package/src/nodes/accessors/Object3DNode.js +1 -1
  259. package/src/nodes/accessors/Position.js +18 -2
  260. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  261. package/src/nodes/accessors/ReferenceNode.js +3 -2
  262. package/src/nodes/accessors/SceneNode.js +2 -1
  263. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  264. package/src/nodes/accessors/StorageTextureNode.js +22 -0
  265. package/src/nodes/accessors/Texture3DNode.js +14 -1
  266. package/src/nodes/accessors/TextureNode.js +130 -44
  267. package/src/nodes/code/FunctionCallNode.js +24 -4
  268. package/src/nodes/code/FunctionNode.js +23 -0
  269. package/src/nodes/core/ArrayNode.js +1 -0
  270. package/src/nodes/core/AssignNode.js +4 -3
  271. package/src/nodes/core/AttributeNode.js +2 -1
  272. package/src/nodes/core/ContextNode.js +29 -10
  273. package/src/nodes/core/IndexNode.js +2 -2
  274. package/src/nodes/core/InputNode.js +2 -1
  275. package/src/nodes/core/InspectorNode.js +128 -0
  276. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +40 -7
  277. package/src/nodes/core/Node.js +152 -31
  278. package/src/nodes/core/NodeBuilder.js +183 -35
  279. package/src/nodes/core/NodeFrame.js +21 -21
  280. package/src/nodes/core/NodeFunction.js +2 -1
  281. package/src/nodes/core/NodeParser.js +2 -1
  282. package/src/nodes/core/NodeUniform.js +1 -1
  283. package/src/nodes/core/NodeUtils.js +17 -91
  284. package/src/nodes/core/ParameterNode.js +31 -0
  285. package/src/nodes/core/PropertyNode.js +7 -0
  286. package/src/nodes/core/StackNode.js +43 -16
  287. package/src/nodes/core/StructNode.js +5 -5
  288. package/src/nodes/core/StructTypeNode.js +1 -0
  289. package/src/nodes/core/SubBuildNode.js +2 -2
  290. package/src/nodes/core/UniformNode.js +18 -10
  291. package/src/nodes/core/VarNode.js +70 -33
  292. package/src/nodes/core/VaryingNode.js +3 -2
  293. package/src/nodes/display/BlendModes.js +5 -4
  294. package/src/nodes/display/BumpMapNode.js +1 -1
  295. package/src/nodes/display/ColorAdjustment.js +1 -1
  296. package/src/nodes/display/FrontFacingNode.js +4 -8
  297. package/src/nodes/display/NormalMapNode.js +2 -1
  298. package/src/nodes/display/PassNode.js +52 -11
  299. package/src/nodes/display/RenderOutputNode.js +28 -2
  300. package/src/nodes/display/ScreenNode.js +44 -14
  301. package/src/nodes/display/ToneMappingNode.js +31 -4
  302. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  303. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  304. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  305. package/src/nodes/display/ViewportTextureNode.js +42 -12
  306. package/src/nodes/fog/Fog.js +3 -2
  307. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  308. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  309. package/src/nodes/functions/BasicLightingModel.js +2 -1
  310. package/src/nodes/functions/PhysicalLightingModel.js +3 -2
  311. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  312. package/src/nodes/geometry/RangeNode.js +40 -4
  313. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  314. package/src/nodes/gpgpu/ComputeNode.js +17 -5
  315. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  316. package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
  317. package/src/nodes/lighting/EnvironmentNode.js +6 -6
  318. package/src/nodes/lighting/LightsNode.js +3 -4
  319. package/src/nodes/lighting/PointShadowNode.js +6 -0
  320. package/src/nodes/lighting/ShadowFilterNode.js +2 -0
  321. package/src/nodes/lighting/ShadowNode.js +75 -8
  322. package/src/nodes/math/BitcastNode.js +156 -0
  323. package/src/nodes/math/ConditionalNode.js +24 -7
  324. package/src/nodes/math/MathNode.js +25 -19
  325. package/src/nodes/math/OperatorNode.js +7 -5
  326. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  327. package/src/nodes/shapes/Shapes.js +1 -1
  328. package/src/nodes/tsl/TSLBase.js +5 -2
  329. package/src/nodes/tsl/TSLCore.js +460 -159
  330. package/src/nodes/utils/DebugNode.js +2 -1
  331. package/src/nodes/utils/EventNode.js +36 -0
  332. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  333. package/src/nodes/utils/JoinNode.js +6 -3
  334. package/src/nodes/utils/LoopNode.js +20 -24
  335. package/src/nodes/utils/MemberNode.js +59 -7
  336. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  337. package/src/nodes/utils/RTTNode.js +13 -3
  338. package/src/nodes/utils/ReflectorNode.js +58 -7
  339. package/src/nodes/utils/SampleNode.js +12 -2
  340. package/src/nodes/utils/SplitNode.js +11 -0
  341. package/src/nodes/utils/Timer.js +0 -47
  342. package/src/objects/BatchedMesh.js +2 -2
  343. package/src/objects/LOD.js +1 -1
  344. package/src/objects/Line.js +2 -1
  345. package/src/objects/LineSegments.js +2 -1
  346. package/src/objects/Skeleton.js +3 -2
  347. package/src/objects/SkinnedMesh.js +3 -1
  348. package/src/objects/Sprite.js +4 -3
  349. package/src/renderers/WebGLRenderer.js +48 -41
  350. package/src/renderers/common/Animation.js +13 -1
  351. package/src/renderers/common/Attributes.js +1 -1
  352. package/src/renderers/common/Backend.js +108 -27
  353. package/src/renderers/common/Background.js +2 -1
  354. package/src/renderers/common/Bindings.js +58 -2
  355. package/src/renderers/common/CanvasTarget.js +341 -0
  356. package/src/renderers/common/ChainMap.js +1 -1
  357. package/src/renderers/common/DataMap.js +1 -1
  358. package/src/renderers/common/Geometries.js +26 -0
  359. package/src/renderers/common/Info.js +4 -2
  360. package/src/renderers/common/InspectorBase.js +146 -0
  361. package/src/renderers/common/Pipelines.js +1 -1
  362. package/src/renderers/common/PostProcessing.js +6 -25
  363. package/src/renderers/common/QuadMesh.js +7 -1
  364. package/src/renderers/common/RenderContext.js +2 -2
  365. package/src/renderers/common/RenderList.js +7 -3
  366. package/src/renderers/common/RenderObject.js +16 -2
  367. package/src/renderers/common/RenderObjects.js +1 -1
  368. package/src/renderers/common/Renderer.js +473 -245
  369. package/src/renderers/common/RendererUtils.js +9 -0
  370. package/src/renderers/common/SampledTexture.js +9 -1
  371. package/src/renderers/common/Sampler.js +50 -12
  372. package/src/renderers/common/StorageTexture.js +9 -1
  373. package/src/renderers/common/Textures.js +121 -45
  374. package/src/renderers/common/TimestampQueryPool.js +65 -3
  375. package/src/renderers/common/UniformsGroup.js +2 -1
  376. package/src/renderers/common/XRManager.js +42 -22
  377. package/src/renderers/common/extras/PMREMGenerator.js +160 -65
  378. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  379. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  380. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  381. package/src/renderers/common/nodes/Nodes.js +38 -16
  382. package/src/renderers/shaders/DFGLUTData.js +64 -0
  383. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  384. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  386. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  387. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  388. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  389. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  390. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  391. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -15
  392. package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
  393. package/src/renderers/shaders/UniformsLib.js +1 -0
  394. package/src/renderers/shaders/UniformsUtils.js +25 -4
  395. package/src/renderers/webgl/WebGLCapabilities.js +2 -1
  396. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  397. package/src/renderers/webgl/WebGLInfo.js +3 -1
  398. package/src/renderers/webgl/WebGLProgram.js +15 -14
  399. package/src/renderers/webgl/WebGLPrograms.js +2 -1
  400. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  401. package/src/renderers/webgl/WebGLState.js +15 -14
  402. package/src/renderers/webgl/WebGLTextures.js +19 -14
  403. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  404. package/src/renderers/webgl/WebGLUtils.js +3 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +199 -167
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +181 -25
  407. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  408. package/src/renderers/webgl-fallback/utils/WebGLState.js +7 -6
  409. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +169 -19
  410. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  411. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  412. package/src/renderers/webgpu/WebGPUBackend.js +153 -123
  413. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  414. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  415. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +142 -50
  416. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  417. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
  418. package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -2
  419. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +53 -34
  420. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  421. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +260 -99
  422. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  423. package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
  424. package/src/renderers/webxr/WebXRManager.js +42 -26
  425. package/src/textures/ExternalTexture.js +15 -4
  426. package/src/textures/Source.js +3 -2
  427. package/src/textures/Texture.js +3 -2
  428. package/src/textures/VideoTexture.js +2 -3
  429. package/src/utils.js +67 -3
  430. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
@@ -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.
@@ -149,7 +150,7 @@ class WorkgroupInfoNode extends Node {
149
150
  */
150
151
  label( name ) {
151
152
 
152
- console.warn( 'THREE.TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
153
+ warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
153
154
 
154
155
  return this.setName( name );
155
156
 
@@ -1,10 +1,10 @@
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
5
  import { normalView, clearcoatNormalView, normalWorld } from '../accessors/Normal.js';
6
6
  import { positionViewDirection } from '../accessors/Position.js';
7
- import { float } from '../tsl/TSLBase.js';
7
+ import { float, pow4 } from '../tsl/TSLBase.js';
8
8
  import { bentNormalView } from '../accessors/AccessorsUtils.js';
9
9
  import { pmremTexture } from '../pmrem/PMREMNode.js';
10
10
  import { materialEnvIntensity } from '../accessors/MaterialProperties.js';
@@ -77,8 +77,8 @@ class EnvironmentNode extends LightingNode {
77
77
  const radiance = envNode.context( createRadianceContext( roughness, radianceNormalView ) ).mul( materialEnvIntensity );
78
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
 
@@ -93,7 +93,7 @@ class EnvironmentNode extends LightingNode {
93
93
  if ( clearcoatRadiance ) {
94
94
 
95
95
  const clearcoatRadianceContext = envNode.context( createRadianceContext( clearcoatRoughness, clearcoatNormalView ) ).mul( materialEnvIntensity );
96
- const isolateClearcoatRadiance = cache( clearcoatRadianceContext );
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
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
 
@@ -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
  //
@@ -245,6 +245,8 @@ const linearShadowDistance = ( light ) => {
245
245
  * If not, it creates a new `NodeMaterial` configured for shadow rendering and stores it
246
246
  * in the `shadowMaterialLib` for future use.
247
247
  *
248
+ * @tsl
249
+ * @function
248
250
  * @param {Light} light - The light source for which the shadow material is needed.
249
251
  * If the light is a point light, a depth node is calculated
250
252
  * using the linear shadow distance.