@unikia/upe-renderer 0.186.110 → 0.187.11

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 (506) hide show
  1. package/README.md +5 -7
  2. package/UPSTREAM.md +4 -4
  3. package/build/three.core.js +853 -277
  4. package/build/three.module.js +1098 -1280
  5. package/build/three.tsl.js +41938 -686
  6. package/build/three.webgpu.js +10604 -49055
  7. package/build/three.webgpu.nodes.js +9249 -5788
  8. package/examples/jsm/Addons.js +2 -0
  9. package/examples/jsm/animation/CCDIKSolver.js +17 -5
  10. package/examples/jsm/controls/FirstPersonControls.js +1 -1
  11. package/examples/jsm/controls/OrbitControls.js +27 -14
  12. package/examples/jsm/csm/CSMShader.js +74 -3
  13. package/examples/jsm/curves/CurveExtras.js +4 -4
  14. package/examples/jsm/curves/NURBSCurve.js +14 -0
  15. package/examples/jsm/exporters/EXRExporter.js +673 -16
  16. package/examples/jsm/exporters/GLTFExporter.js +4 -4
  17. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  18. package/examples/jsm/exporters/OBJExporter.js +48 -5
  19. package/examples/jsm/exporters/PLYExporter.js +22 -11
  20. package/examples/jsm/generators/CityGenerator.js +3 -2
  21. package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
  22. package/examples/jsm/gpgpu/BitonicSort.js +30 -23
  23. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
  24. package/examples/jsm/inspector/Extension.js +1 -1
  25. package/examples/jsm/inspector/Inspector.js +6 -46
  26. package/examples/jsm/inspector/RendererInspector.js +43 -8
  27. package/examples/jsm/inspector/Storage.js +49 -0
  28. package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
  29. package/examples/jsm/inspector/tabs/Parameters.js +5 -1
  30. package/examples/jsm/inspector/tabs/Performance.js +22 -7
  31. package/examples/jsm/inspector/tabs/Settings.js +1 -1
  32. package/examples/jsm/inspector/tabs/Timeline.js +83 -7
  33. package/examples/jsm/inspector/tabs/Viewer.js +25 -10
  34. package/examples/jsm/inspector/ui/Profiler.js +1 -1
  35. package/examples/jsm/inspector/ui/Style.js +21 -53
  36. package/examples/jsm/inspector/ui/Values.js +28 -3
  37. package/examples/jsm/libs/fflate.module.js +83 -56
  38. package/examples/jsm/libs/mikktspace.README.md +27 -0
  39. package/examples/jsm/libs/mikktspace.module.js +721 -109
  40. package/examples/jsm/lighting/ClusteredLighting.js +100 -2
  41. package/examples/jsm/lighting/LightMapper.js +295 -0
  42. package/examples/jsm/lighting/LightProbeGrid.js +242 -139
  43. package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
  44. package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
  45. package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
  46. package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
  47. package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
  48. package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
  49. package/examples/jsm/lights/SunLight.js +9 -4
  50. package/examples/jsm/lights/SunLightNode.js +3 -3
  51. package/examples/jsm/lines/LineMaterial.js +26 -10
  52. package/examples/jsm/loaders/3DMLoader.js +10 -1
  53. package/examples/jsm/loaders/3MFLoader.js +5 -1
  54. package/examples/jsm/loaders/AMFLoader.js +2 -0
  55. package/examples/jsm/loaders/BVHLoader.js +2 -0
  56. package/examples/jsm/loaders/ColladaLoader.js +8 -0
  57. package/examples/jsm/loaders/DDSLoader.js +1 -1
  58. package/examples/jsm/loaders/DRACOLoader.js +5 -1
  59. package/examples/jsm/loaders/EXRLoader.js +120 -104
  60. package/examples/jsm/loaders/FBXLoader.js +4 -0
  61. package/examples/jsm/loaders/FontLoader.js +2 -0
  62. package/examples/jsm/loaders/GCodeLoader.js +5 -9
  63. package/examples/jsm/loaders/GLTFLoader.js +112 -31
  64. package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
  65. package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
  66. package/examples/jsm/loaders/IESLoader.js +46 -12
  67. package/examples/jsm/loaders/JXLLoader.js +159 -0
  68. package/examples/jsm/loaders/KMZLoader.js +6 -0
  69. package/examples/jsm/loaders/KSPLATLoader.js +2 -0
  70. package/examples/jsm/loaders/KTX2Loader.js +49 -4
  71. package/examples/jsm/loaders/KTXLoader.js +5 -3
  72. package/examples/jsm/loaders/LDrawLoader.js +15 -22
  73. package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
  74. package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
  75. package/examples/jsm/loaders/LUTImageLoader.js +2 -0
  76. package/examples/jsm/loaders/LWOLoader.js +6 -0
  77. package/examples/jsm/loaders/MD2Loader.js +2 -0
  78. package/examples/jsm/loaders/MDDLoader.js +4 -0
  79. package/examples/jsm/loaders/MTLLoader.js +8 -0
  80. package/examples/jsm/loaders/MaterialXLoader.js +57 -5
  81. package/examples/jsm/loaders/NRRDLoader.js +4 -2
  82. package/examples/jsm/loaders/OBJLoader.js +10 -4
  83. package/examples/jsm/loaders/PCDLoader.js +6 -2
  84. package/examples/jsm/loaders/PDBLoader.js +5 -3
  85. package/examples/jsm/loaders/PLYLoader.js +39 -15
  86. package/examples/jsm/loaders/PVRLoader.js +2 -2
  87. package/examples/jsm/loaders/SPLATLoader.js +2 -0
  88. package/examples/jsm/loaders/SPZLoader.js +2 -0
  89. package/examples/jsm/loaders/STLLoader.js +3 -1
  90. package/examples/jsm/loaders/SVGLoader.js +27 -49
  91. package/examples/jsm/loaders/TDSLoader.js +4 -0
  92. package/examples/jsm/loaders/TGALoader.js +6 -5
  93. package/examples/jsm/loaders/TTFLoader.js +2 -0
  94. package/examples/jsm/loaders/USDLoader.js +14 -0
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
  96. package/examples/jsm/loaders/VOXLoader.js +3 -0
  97. package/examples/jsm/loaders/VRMLLoader.js +4 -0
  98. package/examples/jsm/loaders/VTKLoader.js +2 -0
  99. package/examples/jsm/loaders/XYZLoader.js +2 -0
  100. package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
  101. package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
  102. package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
  103. package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
  104. package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
  105. package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
  106. package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
  107. package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
  108. package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
  109. package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
  110. package/examples/jsm/loaders/usd/USDAParser.js +56 -47
  111. package/examples/jsm/loaders/usd/USDComposer.js +25 -30
  112. package/examples/jsm/math/ColorConverter.js +7 -3
  113. package/examples/jsm/math/Lut.js +2 -2
  114. package/examples/jsm/math/OBB.js +3 -3
  115. package/examples/jsm/math/Octree.js +20 -17
  116. package/examples/jsm/objects/GaussianSplat.js +5 -4
  117. package/examples/jsm/objects/Reflector.js +5 -0
  118. package/examples/jsm/objects/SkyMesh.js +14 -7
  119. package/examples/jsm/objects/Water2Mesh.js +2 -2
  120. package/examples/jsm/physics/RapierPhysics.js +2 -2
  121. package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
  122. package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
  123. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  124. package/examples/jsm/postprocessing/GTAOPass.js +26 -18
  125. package/examples/jsm/renderers/SVGRenderer.js +3 -2
  126. package/examples/jsm/shaders/GTAOShader.js +7 -4
  127. package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
  128. package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
  129. package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
  130. package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
  131. package/examples/jsm/tsl/display/BloomNode.js +3 -3
  132. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
  133. package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
  134. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  135. package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
  136. package/examples/jsm/tsl/display/FSR1Node.js +3 -3
  137. package/examples/jsm/tsl/display/FXAANode.js +3 -10
  138. package/examples/jsm/tsl/display/FilmNode.js +3 -3
  139. package/examples/jsm/tsl/display/GTAONode.js +33 -25
  140. package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
  141. package/examples/jsm/tsl/display/GodraysNode.js +5 -19
  142. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
  143. package/examples/jsm/tsl/display/LensflareNode.js +3 -3
  144. package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
  145. package/examples/jsm/tsl/display/OITPassNode.js +0 -11
  146. package/examples/jsm/tsl/display/OutlineNode.js +107 -5
  147. package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
  148. package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
  149. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
  150. package/examples/jsm/tsl/display/SMAANode.js +3 -3
  151. package/examples/jsm/tsl/display/SSAONode.js +6 -20
  152. package/examples/jsm/tsl/display/SSGINode.js +36 -29
  153. package/examples/jsm/tsl/display/SSRNode.js +135 -63
  154. package/examples/jsm/tsl/display/SSSNode.js +6 -20
  155. package/examples/jsm/tsl/display/SharpenNode.js +3 -3
  156. package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
  157. package/examples/jsm/tsl/display/TAAUNode.js +10 -42
  158. package/examples/jsm/tsl/display/TRAANode.js +11 -43
  159. package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
  160. package/examples/jsm/tsl/display/TransitionNode.js +3 -3
  161. package/examples/jsm/tsl/display/lensDirt.js +30 -0
  162. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
  163. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
  164. package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
  165. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
  166. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
  167. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
  168. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
  169. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
  170. package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
  171. package/examples/jsm/tsl/utils/Raymarching.js +1 -1
  172. package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
  173. package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
  174. package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
  175. package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
  176. package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
  177. package/examples/jsm/utils/SceneOptimizer.js +2 -1
  178. package/examples/jsm/utils/SceneUtils.js +1 -1
  179. package/examples/jsm/utils/unwrapUVs.js +865 -0
  180. package/examples/jsm/webxr/XREstimatedLight.js +11 -4
  181. package/package.json +3 -3
  182. package/src/Three.TSL.js +2 -683
  183. package/src/Three.WebGPU.Nodes.js +2 -1
  184. package/src/Three.WebGPU.js +2 -1
  185. package/src/animation/AnimationAction.js +1 -1
  186. package/src/animation/AnimationUtils.js +1 -3
  187. package/src/animation/KeyframeTrack.js +19 -0
  188. package/src/cameras/ArrayCamera.js +12 -0
  189. package/src/cameras/CubeCamera.js +3 -3
  190. package/src/constants.js +1 -9
  191. package/src/core/BufferAttribute.js +57 -21
  192. package/src/core/BufferGeometry.js +5 -13
  193. package/src/core/Clock.js +1 -1
  194. package/src/core/InterleavedBuffer.js +28 -18
  195. package/src/core/InterleavedBufferAttribute.js +54 -20
  196. package/src/core/Object3D.js +19 -9
  197. package/src/core/Raycaster.js +2 -0
  198. package/src/core/RenderTarget.js +11 -5
  199. package/src/core/UniformsGroup.js +7 -3
  200. package/src/extras/PMREMGenerator.js +392 -685
  201. package/src/extras/core/Curve.js +4 -0
  202. package/src/extras/core/CurvePath.js +13 -0
  203. package/src/extras/core/ShapePath.js +1 -1
  204. package/src/geometries/EdgesGeometry.js +12 -10
  205. package/src/geometries/LatheGeometry.js +2 -0
  206. package/src/helpers/PolarGridHelper.js +1 -1
  207. package/src/lights/Light.js +11 -0
  208. package/src/lights/LightProbe.js +2 -0
  209. package/src/lights/LightShadow.js +2 -0
  210. package/src/loaders/AnimationLoader.js +2 -0
  211. package/src/loaders/AudioLoader.js +2 -0
  212. package/src/loaders/BufferGeometryLoader.js +2 -0
  213. package/src/loaders/CompressedTextureLoader.js +2 -0
  214. package/src/loaders/CubeTextureLoader.js +2 -0
  215. package/src/loaders/DataTextureLoader.js +2 -0
  216. package/src/loaders/FileLoader.js +2 -0
  217. package/src/loaders/ImageBitmapLoader.js +3 -1
  218. package/src/loaders/ImageLoader.js +1 -0
  219. package/src/loaders/Loader.js +47 -0
  220. package/src/loaders/MaterialLoader.js +2 -0
  221. package/src/loaders/ObjectLoader.js +27 -8
  222. package/src/loaders/TextureLoader.js +5 -3
  223. package/src/loaders/nodes/NodeLoader.js +2 -0
  224. package/src/materials/Material.js +21 -2
  225. package/src/materials/MeshDepthMaterial.js +1 -1
  226. package/src/materials/MeshDistanceMaterial.js +1 -1
  227. package/src/materials/MeshLambertMaterial.js +1 -1
  228. package/src/materials/MeshMatcapMaterial.js +1 -1
  229. package/src/materials/MeshNormalMaterial.js +1 -1
  230. package/src/materials/MeshPhongMaterial.js +1 -1
  231. package/src/materials/MeshPhysicalMaterial.js +90 -11
  232. package/src/materials/MeshStandardMaterial.js +1 -1
  233. package/src/materials/MeshToonMaterial.js +1 -1
  234. package/src/materials/nodes/Line2NodeMaterial.js +32 -10
  235. package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
  236. package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
  237. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
  238. package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
  239. package/src/materials/nodes/NodeMaterial.js +36 -16
  240. package/src/materials/nodes/NodeMaterialInstance.js +193 -0
  241. package/src/materials/nodes/NodeMaterials.js +1 -0
  242. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  243. package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
  244. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
  245. package/src/math/Box3.js +2 -2
  246. package/src/math/Color.js +8 -8
  247. package/src/math/ColorManagement.js +2 -21
  248. package/src/math/FrustumArray.js +12 -0
  249. package/src/math/Interpolant.js +1 -1
  250. package/src/math/Line3.js +2 -4
  251. package/src/math/MathUtils.js +33 -46
  252. package/src/math/Matrix2.js +1 -1
  253. package/src/math/Matrix3.js +1 -1
  254. package/src/math/Matrix4.js +1 -1
  255. package/src/math/Triangle.js +2 -1
  256. package/src/math/Vector2.js +1 -1
  257. package/src/math/Vector3.js +1 -1
  258. package/src/math/Vector4.js +1 -1
  259. package/src/nodes/Nodes.js +1 -0
  260. package/src/nodes/TSL.js +2 -0
  261. package/src/nodes/accessors/Arrays.js +1 -1
  262. package/src/nodes/accessors/Batch.js +29 -23
  263. package/src/nodes/accessors/BufferAttributeNode.js +21 -1
  264. package/src/nodes/accessors/BuiltinNode.js +6 -0
  265. package/src/nodes/accessors/Camera.js +100 -93
  266. package/src/nodes/accessors/ClippingNode.js +17 -6
  267. package/src/nodes/accessors/CubeTextureNode.js +12 -24
  268. package/src/nodes/accessors/Instance.js +198 -160
  269. package/src/nodes/accessors/Lights.js +19 -6
  270. package/src/nodes/accessors/MaterialNode.js +33 -4
  271. package/src/nodes/accessors/Morph.js +81 -22
  272. package/src/nodes/accessors/Normal.js +0 -42
  273. package/src/nodes/accessors/Object3DNode.js +6 -0
  274. package/src/nodes/accessors/PointUVNode.js +6 -0
  275. package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
  276. package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
  277. package/src/nodes/accessors/ReferenceNode.js +6 -0
  278. package/src/nodes/accessors/Skinning.js +57 -52
  279. package/src/nodes/accessors/StorageBufferNode.js +3 -12
  280. package/src/nodes/accessors/TextureBicubic.js +30 -27
  281. package/src/nodes/accessors/TextureNode.js +164 -78
  282. package/src/nodes/accessors/TextureSizeNode.js +6 -0
  283. package/src/nodes/accessors/UniformArrayNode.js +8 -15
  284. package/src/nodes/accessors/VelocityNode.js +13 -8
  285. package/src/nodes/code/CodeNode.js +6 -0
  286. package/src/nodes/code/ExpressionNode.js +6 -0
  287. package/src/nodes/code/FunctionCallNode.js +3 -3
  288. package/src/nodes/code/FunctionNode.js +15 -13
  289. package/src/nodes/core/ArrayNode.js +3 -3
  290. package/src/nodes/core/AssignNode.js +10 -9
  291. package/src/nodes/core/AttributeNode.js +39 -0
  292. package/src/nodes/core/BypassNode.js +6 -0
  293. package/src/nodes/core/ConstNode.js +31 -1
  294. package/src/nodes/core/ContextNode.js +11 -6
  295. package/src/nodes/core/IndexNode.js +6 -0
  296. package/src/nodes/core/InputNode.js +6 -0
  297. package/src/nodes/core/InspectorNode.js +17 -31
  298. package/src/nodes/core/IsolateNode.js +8 -0
  299. package/src/nodes/core/Node.js +367 -67
  300. package/src/nodes/core/NodeBuilder.js +664 -222
  301. package/src/nodes/core/NodeUtils.js +25 -0
  302. package/src/nodes/core/NodeVar.js +10 -1
  303. package/src/nodes/core/OutputStructNode.js +6 -0
  304. package/src/nodes/core/OverrideContextNode.js +38 -37
  305. package/src/nodes/core/PropertyNode.js +14 -0
  306. package/src/nodes/core/StackNode.js +33 -21
  307. package/src/nodes/core/StructNode.js +6 -0
  308. package/src/nodes/core/StructTypeNode.js +6 -0
  309. package/src/nodes/core/SubBuildNode.js +8 -0
  310. package/src/nodes/core/TempNode.js +10 -35
  311. package/src/nodes/core/UniformGroupNode.js +6 -0
  312. package/src/nodes/core/VarNode.js +43 -135
  313. package/src/nodes/core/VaryingNode.js +33 -2
  314. package/src/nodes/display/BlendModes.js +5 -40
  315. package/src/nodes/display/BumpMapNode.js +17 -7
  316. package/src/nodes/display/ColorAdjustment.js +22 -10
  317. package/src/nodes/display/ColorSpaceFunctions.js +2 -14
  318. package/src/nodes/display/ColorSpaceNode.js +3 -3
  319. package/src/nodes/display/FrontFacingNode.js +6 -0
  320. package/src/nodes/display/NormalMapNode.js +3 -3
  321. package/src/nodes/display/PassNode.js +75 -16
  322. package/src/nodes/display/RenderOutputNode.js +22 -5
  323. package/src/nodes/display/ScreenNode.js +6 -0
  324. package/src/nodes/display/ToneMappingFunctions.js +9 -51
  325. package/src/nodes/display/ToneMappingNode.js +3 -3
  326. package/src/nodes/display/ToonOutlinePassNode.js +66 -2
  327. package/src/nodes/display/ViewportDepthNode.js +34 -4
  328. package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
  329. package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
  330. package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
  331. package/src/nodes/functions/BSDF/D_GGX.js +1 -8
  332. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
  333. package/src/nodes/functions/BSDF/LTC.js +20 -47
  334. package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
  335. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
  336. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
  337. package/src/nodes/functions/PhysicalLightingModel.js +84 -51
  338. package/src/nodes/functions/VolumetricLightingModel.js +1 -1
  339. package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
  340. package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
  341. package/src/nodes/functions/material/getRoughness.js +3 -1
  342. package/src/nodes/geometry/RangeNode.js +52 -69
  343. package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
  344. package/src/nodes/gpgpu/BarrierNode.js +6 -0
  345. package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
  346. package/src/nodes/gpgpu/ComputeNode.js +6 -0
  347. package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
  348. package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
  349. package/src/nodes/lighting/AnalyticLightNode.js +7 -14
  350. package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
  351. package/src/nodes/lighting/EnvironmentNode.js +58 -8
  352. package/src/nodes/lighting/IESSpotLightNode.js +19 -4
  353. package/src/nodes/lighting/LightProbeNode.js +2 -1
  354. package/src/nodes/lighting/LightUtils.js +2 -2
  355. package/src/nodes/lighting/LightingNode.js +6 -0
  356. package/src/nodes/lighting/LightsNode.js +26 -32
  357. package/src/nodes/lighting/PointShadowNode.js +92 -48
  358. package/src/nodes/lighting/ProjectorLightNode.js +1 -1
  359. package/src/nodes/lighting/RectAreaLightNode.js +13 -14
  360. package/src/nodes/lighting/ShadowBaseNode.js +9 -17
  361. package/src/nodes/lighting/ShadowFilterNode.js +26 -3
  362. package/src/nodes/lighting/ShadowNode.js +13 -11
  363. package/src/nodes/materialx/MaterialXColor.js +2 -14
  364. package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
  365. package/src/nodes/materialx/MaterialXNodes.js +8 -11
  366. package/src/nodes/materialx/MaterialXNoise.js +195 -454
  367. package/src/nodes/math/BitcastNode.js +5 -5
  368. package/src/nodes/math/BitcountNode.js +18 -46
  369. package/src/nodes/math/ConditionalNode.js +92 -22
  370. package/src/nodes/math/Hash.js +1 -1
  371. package/src/nodes/math/MathNode.js +86 -64
  372. package/src/nodes/math/MathUtils.js +2 -2
  373. package/src/nodes/math/OperatorNode.js +42 -59
  374. package/src/nodes/math/PackFloatNode.js +9 -9
  375. package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
  376. package/src/nodes/math/TriNoise3D.js +3 -23
  377. package/src/nodes/math/UnpackFloatNode.js +9 -9
  378. package/src/nodes/pmrem/PMREMNode.js +38 -75
  379. package/src/nodes/pmrem/PMREMUtils.js +108 -272
  380. package/src/nodes/procedural/Checker.js +1 -1
  381. package/src/nodes/tsl/TSLCore.js +199 -74
  382. package/src/nodes/utils/ArrayElementNode.js +19 -1
  383. package/src/nodes/utils/CubeMapNode.js +3 -3
  384. package/src/nodes/utils/DebugNode.js +2 -2
  385. package/src/nodes/utils/EventNode.js +6 -0
  386. package/src/nodes/utils/FlipNode.js +3 -3
  387. package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
  388. package/src/nodes/utils/JoinNode.js +3 -3
  389. package/src/nodes/utils/LoopNode.js +14 -9
  390. package/src/nodes/utils/MemberNode.js +18 -0
  391. package/src/nodes/utils/PostProcessingUtils.js +20 -25
  392. package/src/nodes/utils/RTTNode.js +2 -0
  393. package/src/nodes/utils/ReflectorNode.js +24 -0
  394. package/src/nodes/utils/RotateNode.js +3 -3
  395. package/src/nodes/utils/SampleNode.js +6 -0
  396. package/src/nodes/utils/SetNode.js +3 -3
  397. package/src/nodes/utils/SplitNode.js +6 -0
  398. package/src/nodes/utils/UVUtils.js +2 -2
  399. package/src/objects/BatchedMesh.js +146 -15
  400. package/src/objects/InstancedMesh.js +12 -4
  401. package/src/objects/Line.js +20 -0
  402. package/src/objects/Mesh.js +8 -0
  403. package/src/objects/Points.js +20 -0
  404. package/src/objects/Skeleton.js +26 -0
  405. package/src/objects/SkinnedMesh.js +3 -3
  406. package/src/objects/Sprite.js +10 -0
  407. package/src/renderers/WebGLRenderer.js +104 -70
  408. package/src/renderers/common/Animation.js +5 -1
  409. package/src/renderers/common/Attributes.js +67 -57
  410. package/src/renderers/common/Backend.js +78 -3
  411. package/src/renderers/common/BindGroup.js +11 -0
  412. package/src/renderers/common/Binding.js +0 -11
  413. package/src/renderers/common/Bindings.js +116 -10
  414. package/src/renderers/common/Buffer.js +1 -1
  415. package/src/renderers/common/ClippingContext.js +12 -1
  416. package/src/renderers/common/ComputePipeline.js +17 -1
  417. package/src/renderers/common/DirectRenderPipeline.js +7 -3
  418. package/src/renderers/common/Geometries.js +170 -132
  419. package/src/renderers/common/Info.js +1 -1
  420. package/src/renderers/common/InspectorBase.js +5 -5
  421. package/src/renderers/common/Lighting.js +59 -0
  422. package/src/renderers/common/Pipelines.js +26 -12
  423. package/src/renderers/common/ProgrammableStage.js +1 -17
  424. package/src/renderers/common/RenderContext.js +21 -0
  425. package/src/renderers/common/RenderContexts.js +13 -4
  426. package/src/renderers/common/RenderObject.js +111 -35
  427. package/src/renderers/common/RenderObjects.js +37 -19
  428. package/src/renderers/common/Renderer.js +537 -295
  429. package/src/renderers/common/RendererUtils.js +15 -0
  430. package/src/renderers/common/StandardDrawingPipeline.js +343 -0
  431. package/src/renderers/common/Storage3DTexture.js +11 -0
  432. package/src/renderers/common/StorageArrayTexture.js +10 -0
  433. package/src/renderers/common/StorageTexture.js +0 -9
  434. package/src/renderers/common/Textures.js +144 -37
  435. package/src/renderers/common/UniformsGroup.js +19 -0
  436. package/src/renderers/common/XRManager.js +10 -91
  437. package/src/renderers/common/extras/PMREMGenerator.js +298 -576
  438. package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
  439. package/src/renderers/common/nodes/NodeLibrary.js +11 -35
  440. package/src/renderers/common/nodes/NodeManager.js +80 -31
  441. package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
  442. package/src/renderers/common/nodes/NodeSampler.js +14 -0
  443. package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
  444. package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
  445. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
  446. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
  447. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
  448. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
  449. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  450. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
  451. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
  452. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
  453. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
  454. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
  455. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
  456. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
  457. package/src/renderers/shaders/ShaderChunk.js +0 -2
  458. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
  459. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  461. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
  462. package/src/renderers/shaders/ShaderLib.js +3 -0
  463. package/src/renderers/shaders/UniformsLib.js +4 -5
  464. package/src/renderers/webgl/WebGLBackground.js +3 -3
  465. package/src/renderers/webgl/WebGLBindingStates.js +4 -2
  466. package/src/renderers/webgl/WebGLCapabilities.js +7 -1
  467. package/src/renderers/webgl/WebGLEnvironments.js +2 -2
  468. package/src/renderers/webgl/WebGLGeometries.js +42 -14
  469. package/src/renderers/webgl/WebGLMaterials.js +15 -2
  470. package/src/renderers/webgl/WebGLOutput.js +37 -1
  471. package/src/renderers/webgl/WebGLProgram.js +13 -54
  472. package/src/renderers/webgl/WebGLPrograms.js +22 -8
  473. package/src/renderers/webgl/WebGLRenderStates.js +11 -8
  474. package/src/renderers/webgl/WebGLShadowMap.js +6 -4
  475. package/src/renderers/webgl/WebGLState.js +10 -6
  476. package/src/renderers/webgl/WebGLTextures.js +129 -77
  477. package/src/renderers/webgl/WebGLUniforms.js +44 -6
  478. package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
  479. package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
  480. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
  481. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
  482. package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
  483. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
  484. package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
  485. package/src/renderers/webgpu/WebGPUBackend.js +140 -82
  486. package/src/renderers/webgpu/WebGPURenderer.js +1 -1
  487. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
  488. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
  489. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
  490. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
  491. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
  492. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
  493. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
  494. package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
  495. package/src/renderers/webxr/WebXRController.js +3 -3
  496. package/src/renderers/webxr/WebXRManager.js +5 -90
  497. package/src/scenes/Scene.js +4 -4
  498. package/src/textures/CompressedTexture.js +2 -2
  499. package/src/textures/DepthTexture.js +2 -2
  500. package/src/textures/FramebufferTexture.js +11 -0
  501. package/src/textures/Texture.js +29 -1
  502. package/src/textures/TextureSource.js +1 -1
  503. package/src/upe.js +1 -1
  504. package/src/utils.js +4 -4
  505. package/examples/jsm/libs/surfaceNet.js +0 -201
  506. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
@@ -1,20 +1,28 @@
1
1
  import Node from '../core/Node.js';
2
2
  import NodeError from '../core/NodeError.js';
3
3
  import { getValueType } from '../core/NodeUtils.js';
4
- import { buffer } from '../accessors/BufferNode.js';
5
- import { instancedBufferAttribute } from '../accessors/BufferAttributeNode.js';
6
4
  import { instanceIndex } from '../core/IndexNode.js';
7
- import { nodeProxy, float } from '../tsl/TSLBase.js';
5
+ import { uniform } from '../core/UniformNode.js';
6
+ import { hash } from '../math/Hash.js';
7
+ import { mix } from '../math/MathNode.js';
8
+ import { nodeProxy, float, uint, vec4 } from '../tsl/TSLBase.js';
8
9
 
9
10
  import { Vector4 } from '../../math/Vector4.js';
10
- import { MathUtils } from '../../math/MathUtils.js';
11
- import { InstancedBufferAttribute } from '../../core/InstancedBufferAttribute.js';
12
11
 
13
- let min = null;
14
- let max = null;
12
+ let _rangeId = 0;
13
+
14
+ // Per-object seed shared by all range nodes, so the values differ between objects.
15
+
16
+ const objectSeed = /*@__PURE__*/ uniform( 0, 'uint' ).onObjectUpdate( ( { object } ) => {
17
+
18
+ const objectId = object !== null ? object.id : 0; // compute has no object
19
+
20
+ return Math.imul( objectId, 0x9E3779B9 ) >>> 0;
21
+
22
+ } );
15
23
 
16
24
  /**
17
- * `RangeNode` generates random instanced attribute data in a defined range.
25
+ * `RangeNode` generates random per-instance values in a defined range.
18
26
  * An exemplary use case for this utility node is to generate random per-instance
19
27
  * colors:
20
28
  * ```js
@@ -58,6 +66,21 @@ class RangeNode extends Node {
58
66
  */
59
67
  this.maxNode = maxNode;
60
68
 
69
+ /**
70
+ * Salt of the random sequence. It uses a counter of range nodes instead of the
71
+ * global node id, so the values only change when range nodes are added or removed.
72
+ *
73
+ * @private
74
+ * @type {number}
75
+ */
76
+ this._salt = Math.imul( _rangeId ++, 0x85EBCA6B ) >>> 0;
77
+
78
+ }
79
+
80
+ isCacheable( /*builder*/ ) {
81
+
82
+ return false;
83
+
61
84
  }
62
85
 
63
86
  /**
@@ -86,7 +109,7 @@ class RangeNode extends Node {
86
109
  */
87
110
  generateNodeType( builder ) {
88
111
 
89
- return builder.object.count > 1 ? builder.getTypeFromLength( this.getVectorLength( builder ) ) : 'float';
112
+ return builder.getTypeFromLength( this.getVectorLength( builder ) );
90
113
 
91
114
  }
92
115
 
@@ -122,75 +145,35 @@ class RangeNode extends Node {
122
145
 
123
146
  setup( builder ) {
124
147
 
125
- const object = builder.object;
126
-
127
- let output = null;
128
-
129
- if ( object.count > 1 ) {
130
-
131
- const minNode = this.getConstNode( this.minNode );
132
- const maxNode = this.getConstNode( this.maxNode );
133
-
134
- const minValue = minNode.value;
135
- const maxValue = maxNode.value;
136
-
137
- const minLength = builder.getTypeLength( getValueType( minValue ) );
138
- const maxLength = builder.getTypeLength( getValueType( maxValue ) );
139
-
140
- min = min || new Vector4();
141
- max = max || new Vector4();
142
-
143
- min.setScalar( 0 );
144
- max.setScalar( 0 );
145
-
146
- if ( minLength === 1 ) min.setScalar( minValue );
147
- else if ( minValue.isColor ) min.set( minValue.r, minValue.g, minValue.b, 1 );
148
- else min.set( minValue.x, minValue.y, minValue.z || 0, minValue.w || 0 );
149
-
150
- if ( maxLength === 1 ) max.setScalar( maxValue );
151
- else if ( maxValue.isColor ) max.set( maxValue.r, maxValue.g, maxValue.b, 1 );
152
- else max.set( maxValue.x, maxValue.y, maxValue.z || 0, maxValue.w || 0 );
153
-
154
- const stride = 4;
155
-
156
- const length = stride * object.count;
157
- const array = new Float32Array( length );
158
-
159
- for ( let i = 0; i < length; i ++ ) {
160
-
161
- const index = i % stride;
162
-
163
- const minElementValue = min.getComponent( index );
164
- const maxElementValue = max.getComponent( index );
165
-
166
- array[ i ] = MathUtils.lerp( minElementValue, maxElementValue, Math.random() );
167
-
168
- }
169
-
170
- const nodeType = this.getNodeType( builder );
171
- const uniformBufferSize = object.count * 4 * 4; // count * 4 components * 4 bytes (float)
172
-
173
- if ( uniformBufferSize <= builder.getUniformBufferLimit() ) {
148
+ const minNode = this.getConstNode( this.minNode );
149
+ const maxNode = this.getConstNode( this.maxNode );
174
150
 
175
- output = buffer( array, 'vec4', object.count ).element( instanceIndex ).convert( nodeType );
151
+ const minValue = minNode.value;
152
+ const maxValue = maxNode.value;
176
153
 
177
- } else {
154
+ const minLength = builder.getTypeLength( getValueType( minValue ) );
155
+ const maxLength = builder.getTypeLength( getValueType( maxValue ) );
178
156
 
179
- // TODO: Improve anonymous buffer attribute creation removing this part
180
- const bufferAttribute = new InstancedBufferAttribute( array, 4 );
181
- builder.geometry.setAttribute( '__range' + this.id, bufferAttribute );
157
+ const min = new Vector4();
158
+ const max = new Vector4();
182
159
 
183
- output = instancedBufferAttribute( bufferAttribute ).convert( nodeType );
160
+ if ( minLength === 1 ) min.setScalar( minValue );
161
+ else if ( minValue.isColor ) min.set( minValue.r, minValue.g, minValue.b, 1 );
162
+ else min.set( minValue.x, minValue.y, minValue.z || 0, minValue.w || 0 );
184
163
 
185
- }
164
+ if ( maxLength === 1 ) max.setScalar( maxValue );
165
+ else if ( maxValue.isColor ) max.set( maxValue.r, maxValue.g, maxValue.b, 1 );
166
+ else max.set( maxValue.x, maxValue.y, maxValue.z || 0, maxValue.w || 0 );
186
167
 
187
- } else {
168
+ // The values are hashed from the instance index instead of stored per object, so they work
169
+ // for any instance count. The salt decorrelates range nodes.
188
170
 
189
- output = float( 0 );
171
+ const seed = objectSeed.bitXor( uint( this._salt ) );
190
172
 
191
- }
173
+ const index = instanceIndex.mul( 4 ).add( seed );
174
+ const random = vec4( hash( index ), hash( index.add( 1 ) ), hash( index.add( 2 ) ), hash( index.add( 3 ) ) );
192
175
 
193
- return output;
176
+ return mix( vec4( min ), vec4( max ), random ).convert( this.getNodeType( builder ) );
194
177
 
195
178
  }
196
179
 
@@ -1,5 +1,4 @@
1
1
  import Node from '../core/Node.js';
2
- import { expression } from '../code/ExpressionNode.js';
3
2
  import { nodeProxy } from '../tsl/TSLCore.js';
4
3
  import { error } from '../../utils.js';
5
4
 
@@ -64,6 +63,12 @@ class AtomicFunctionNode extends Node {
64
63
 
65
64
  }
66
65
 
66
+ isCacheable( /*builder*/ ) {
67
+
68
+ return false;
69
+
70
+ }
71
+
67
72
  /**
68
73
  * Overwrites the default implementation to return the type of
69
74
  * the pointer node.
@@ -128,13 +133,13 @@ class AtomicFunctionNode extends Node {
128
133
 
129
134
  } else {
130
135
 
131
- if ( properties.constNode === undefined ) {
132
-
133
- properties.constNode = expression( methodSnippet, type ).toConst();
136
+ // The result is stored in a constant, declared in the block where the operation is generated.
137
+ const nodeVar = builder.getVarFromNode( this, null, type, undefined, true, true );
138
+ const propertyName = builder.getPropertyName( nodeVar );
134
139
 
135
- }
140
+ builder.addLineFlowCode( `${ builder.generateLetStatement( type, propertyName ) } = ${ methodSnippet }`, this );
136
141
 
137
- return properties.constNode.build( builder );
142
+ return propertyName;
138
143
 
139
144
  }
140
145
 
@@ -26,6 +26,12 @@ class BarrierNode extends Node {
26
26
 
27
27
  }
28
28
 
29
+ isCacheable( /*builder*/ ) {
30
+
31
+ return false;
32
+
33
+ }
34
+
29
35
  setup( builder ) {
30
36
 
31
37
  builder.allowEarlyReturns = false;
@@ -37,6 +37,12 @@ class ComputeBuiltinNode extends Node {
37
37
 
38
38
  }
39
39
 
40
+ isCacheable( /*builder*/ ) {
41
+
42
+ return false;
43
+
44
+ }
45
+
40
46
  /**
41
47
  * This method is overwritten since hash is derived from the built-in name.
42
48
  *
@@ -110,6 +110,12 @@ class ComputeNode extends Node {
110
110
 
111
111
  }
112
112
 
113
+ isCacheable( /*builder*/ ) {
114
+
115
+ return false;
116
+
117
+ }
118
+
113
119
  /**
114
120
  * Sets the {@link ComputeNode#name} property.
115
121
  *
@@ -1,6 +1,6 @@
1
1
  import { error } from '../../utils.js';
2
- import TempNode from '../core/TempNode.js';
3
- import { nodeProxyIntent } from '../tsl/TSLCore.js';
2
+ import Node from '../core/Node.js';
3
+ import { nodeProxyAssignable } from '../tsl/TSLCore.js';
4
4
 
5
5
 
6
6
  /**
@@ -12,9 +12,9 @@ import { nodeProxyIntent } from '../tsl/TSLCore.js';
12
12
  * other graphics APIs, subgroup functions are also referred to as wave intrinsics
13
13
  * (DirectX/HLSL) or warp intrinsics (CUDA).
14
14
  *
15
- * @augments TempNode
15
+ * @augments Node
16
16
  */
17
- class SubgroupFunctionNode extends TempNode {
17
+ class SubgroupFunctionNode extends Node {
18
18
 
19
19
  static get type() {
20
20
 
@@ -76,6 +76,14 @@ class SubgroupFunctionNode extends TempNode {
76
76
 
77
77
  }
78
78
 
79
+ setup( builder ) {
80
+
81
+ builder.enableSubGroups();
82
+
83
+ return super.setup( builder );
84
+
85
+ }
86
+
79
87
  generateNodeType( builder ) {
80
88
 
81
89
  const method = this.method;
@@ -334,7 +342,7 @@ export default SubgroupFunctionNode;
334
342
  * @method
335
343
  * @return {bool} The result of the computation.
336
344
  */
337
- export const subgroupElect = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ELECT ).setParameterLength( 0 );
345
+ export const subgroupElect = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ELECT ).setParameterLength( 0 );
338
346
 
339
347
  /**
340
348
  * Returns a set of bitfields where the bit corresponding to subgroup_invocation_id
@@ -345,7 +353,7 @@ export const subgroupElect = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode
345
353
  * @param {bool} pred - A boolean that sets the bit corresponding to the invocations subgroup invocation id.
346
354
  * @return {vec4<u32>}- A bitfield corresponding to the pred value of each subgroup invocation.
347
355
  */
348
- export const subgroupBallot = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BALLOT ).setParameterLength( 1 );
356
+ export const subgroupBallot = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BALLOT ).setParameterLength( 1 );
349
357
 
350
358
  /**
351
359
  * A reduction that adds e among all active invocations and returns that result.
@@ -355,7 +363,7 @@ export const subgroupBallot = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNod
355
363
  * @param {number} e - The value provided to the reduction by the current invocation.
356
364
  * @return {number} The accumulated result of the reduction operation.
357
365
  */
358
- export const subgroupAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ADD ).setParameterLength( 1 );
366
+ export const subgroupAdd = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ADD ).setParameterLength( 1 );
359
367
 
360
368
  /**
361
369
  * An inclusive scan returning the sum of e for all active invocations with subgroup_invocation_id less than or equal to this invocation.
@@ -365,7 +373,7 @@ export const subgroupAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode,
365
373
  * @param {number} e - The value provided to the inclusive scan by the current invocation.
366
374
  * @return {number} The accumulated result of the inclusive scan operation.
367
375
  */
368
- export const subgroupInclusiveAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_INCLUSIVE_ADD ).setParameterLength( 1 );
376
+ export const subgroupInclusiveAdd = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_INCLUSIVE_ADD ).setParameterLength( 1 );
369
377
 
370
378
  /**
371
379
  * An exclusive scan that returns the sum of e for all active invocations with subgroup_invocation_id less than this invocation.
@@ -375,7 +383,7 @@ export const subgroupInclusiveAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunct
375
383
  * @param {number} e - The value provided to the exclusive scan by the current invocation.
376
384
  * @return {number} The accumulated result of the exclusive scan operation.
377
385
  */
378
- export const subgroupExclusiveAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_ADD ).setParameterLength( 1 );
386
+ export const subgroupExclusiveAdd = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_ADD ).setParameterLength( 1 );
379
387
 
380
388
  /**
381
389
  * A reduction that multiplies e among all active invocations and returns that result.
@@ -385,7 +393,7 @@ export const subgroupExclusiveAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunct
385
393
  * @param {number} e - The value provided to the reduction by the current invocation.
386
394
  * @return {number} The accumulated result of the reduction operation.
387
395
  */
388
- export const subgroupMul = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_MUL ).setParameterLength( 1 );
396
+ export const subgroupMul = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_MUL ).setParameterLength( 1 );
389
397
 
390
398
  /**
391
399
  * An inclusive scan returning the product of e for all active invocations with subgroup_invocation_id less than or equal to this invocation.
@@ -395,7 +403,7 @@ export const subgroupMul = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode,
395
403
  * @param {number} e - The value provided to the inclusive scan by the current invocation.
396
404
  * @return {number} The accumulated result of the inclusive scan operation.
397
405
  */
398
- export const subgroupInclusiveMul = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_INCLUSIVE_MUL ).setParameterLength( 1 );
406
+ export const subgroupInclusiveMul = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_INCLUSIVE_MUL ).setParameterLength( 1 );
399
407
 
400
408
  /**
401
409
  * An exclusive scan that returns the product of e for all active invocations with subgroup_invocation_id less than this invocation.
@@ -405,7 +413,7 @@ export const subgroupInclusiveMul = /*@__PURE__*/ nodeProxyIntent( SubgroupFunct
405
413
  * @param {number} e - The value provided to the exclusive scan by the current invocation.
406
414
  * @return {number} The accumulated result of the exclusive scan operation.
407
415
  */
408
- export const subgroupExclusiveMul = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_MUL ).setParameterLength( 1 );
416
+ export const subgroupExclusiveMul = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_MUL ).setParameterLength( 1 );
409
417
 
410
418
  /**
411
419
  * A reduction that performs a bitwise and of e among all active invocations and returns that result.
@@ -415,7 +423,7 @@ export const subgroupExclusiveMul = /*@__PURE__*/ nodeProxyIntent( SubgroupFunct
415
423
  * @param {number} e - The value provided to the reduction by the current invocation.
416
424
  * @return {number} The result of the reduction operation.
417
425
  */
418
- export const subgroupAnd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_AND ).setParameterLength( 1 );
426
+ export const subgroupAnd = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_AND ).setParameterLength( 1 );
419
427
 
420
428
  /**
421
429
  * A reduction that performs a bitwise or of e among all active invocations and returns that result.
@@ -425,7 +433,7 @@ export const subgroupAnd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode,
425
433
  * @param {number} e - The value provided to the reduction by the current invocation.
426
434
  * @return {number} The result of the reduction operation.
427
435
  */
428
- export const subgroupOr = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_OR ).setParameterLength( 1 );
436
+ export const subgroupOr = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_OR ).setParameterLength( 1 );
429
437
 
430
438
  /**
431
439
  * A reduction that performs a bitwise xor of e among all active invocations and returns that result.
@@ -435,7 +443,7 @@ export const subgroupOr = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, S
435
443
  * @param {number} e - The value provided to the reduction by the current invocation.
436
444
  * @return {number} The result of the reduction operation.
437
445
  */
438
- export const subgroupXor = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_XOR ).setParameterLength( 1 );
446
+ export const subgroupXor = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_XOR ).setParameterLength( 1 );
439
447
 
440
448
  /**
441
449
  * A reduction that performs a min of e among all active invocations and returns that result.
@@ -445,7 +453,7 @@ export const subgroupXor = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode,
445
453
  * @param {number} e - The value provided to the reduction by the current invocation.
446
454
  * @return {number} The result of the reduction operation.
447
455
  */
448
- export const subgroupMin = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_MIN ).setParameterLength( 1 );
456
+ export const subgroupMin = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_MIN ).setParameterLength( 1 );
449
457
 
450
458
  /**
451
459
  * A reduction that performs a max of e among all active invocations and returns that result.
@@ -455,7 +463,7 @@ export const subgroupMin = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode,
455
463
  * @param {number} e - The value provided to the reduction by the current invocation.
456
464
  * @return {number} The result of the reduction operation.
457
465
  */
458
- export const subgroupMax = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_MAX ).setParameterLength( 1 );
466
+ export const subgroupMax = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_MAX ).setParameterLength( 1 );
459
467
 
460
468
  /**
461
469
  * Returns true if e is true for all active invocations in the subgroup.
@@ -465,7 +473,7 @@ export const subgroupMax = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode,
465
473
  * @param {boolean} e - The predicate provided by the current invocation.
466
474
  * @return {bool} The result of the computation.
467
475
  */
468
- export const subgroupAll = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ALL ).setParameterLength( 1 );
476
+ export const subgroupAll = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ALL ).setParameterLength( 1 );
469
477
 
470
478
  /**
471
479
  * Returns true if e is true for any active invocation in the subgroup
@@ -475,7 +483,7 @@ export const subgroupAll = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode,
475
483
  * @param {boolean} e - The predicate provided by the current invocation.
476
484
  * @return {bool} The result of the computation.
477
485
  */
478
- export const subgroupAny = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ANY ).setParameterLength( 1 );
486
+ export const subgroupAny = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ANY ).setParameterLength( 1 );
479
487
 
480
488
  /**
481
489
  * Broadcasts e from the active invocation with the lowest subgroup_invocation_id in the subgroup to all other active invocations.
@@ -485,7 +493,7 @@ export const subgroupAny = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode,
485
493
  * @param {number} e - The value to broadcast from the lowest subgroup invocation.
486
494
  * @return {number} The broadcast value.
487
495
  */
488
- export const subgroupBroadcastFirst = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BROADCAST_FIRST ).setParameterLength( 1 );
496
+ export const subgroupBroadcastFirst = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BROADCAST_FIRST ).setParameterLength( 1 );
489
497
 
490
498
  /**
491
499
  * Swaps e between invocations in the quad in the X direction.
@@ -495,7 +503,7 @@ export const subgroupBroadcastFirst = /*@__PURE__*/ nodeProxyIntent( SubgroupFun
495
503
  * @param {number} e - The value to swap from the current invocation.
496
504
  * @return {number} The value received from the swap operation.
497
505
  */
498
- export const quadSwapX = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_SWAP_X ).setParameterLength( 1 );
506
+ export const quadSwapX = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_SWAP_X ).setParameterLength( 1 );
499
507
 
500
508
  /**
501
509
  * Swaps e between invocations in the quad in the Y direction.
@@ -505,7 +513,7 @@ export const quadSwapX = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, Su
505
513
  * @param {number} e - The value to swap from the current invocation.
506
514
  * @return {number} The value received from the swap operation.
507
515
  */
508
- export const quadSwapY = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_SWAP_Y ).setParameterLength( 1 );
516
+ export const quadSwapY = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_SWAP_Y ).setParameterLength( 1 );
509
517
 
510
518
  /**
511
519
  * Swaps e between invocations in the quad diagonally.
@@ -515,7 +523,7 @@ export const quadSwapY = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, Su
515
523
  * @param {number} e - The value to swap from the current invocation.
516
524
  * @return {number} The value received from the swap operation.
517
525
  */
518
- export const quadSwapDiagonal = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_SWAP_DIAGONAL ).setParameterLength( 1 );
526
+ export const quadSwapDiagonal = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_SWAP_DIAGONAL ).setParameterLength( 1 );
519
527
 
520
528
  /**
521
529
  * Broadcasts e from the invocation whose subgroup_invocation_id matches id, to all active invocations.
@@ -526,7 +534,7 @@ export const quadSwapDiagonal = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionN
526
534
  * @param {number} id - The subgroup invocation to broadcast from.
527
535
  * @return {number} The broadcast value.
528
536
  */
529
- export const subgroupBroadcast = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BROADCAST ).setParameterLength( 2 );
537
+ export const subgroupBroadcast = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BROADCAST ).setParameterLength( 2 );
530
538
 
531
539
  /**
532
540
  * Returns v from the active invocation whose subgroup_invocation_id matches id
@@ -537,7 +545,7 @@ export const subgroupBroadcast = /*@__PURE__*/ nodeProxyIntent( SubgroupFunction
537
545
  * @param {number} id - The subgroup invocation which returns the value v.
538
546
  * @return {number} The broadcast value.
539
547
  */
540
- export const subgroupShuffle = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE ).setParameterLength( 2 );
548
+ export const subgroupShuffle = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE ).setParameterLength( 2 );
541
549
 
542
550
  /**
543
551
  * Returns v from the active invocation whose subgroup_invocation_id matches subgroup_invocation_id ^ mask.
@@ -548,7 +556,7 @@ export const subgroupShuffle = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNo
548
556
  * @param {number} mask - A bitmask that determines the target invocation via a XOR operation.
549
557
  * @return {number} The broadcast value.
550
558
  */
551
- export const subgroupShuffleXor = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE_XOR ).setParameterLength( 2 );
559
+ export const subgroupShuffleXor = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE_XOR ).setParameterLength( 2 );
552
560
 
553
561
  /**
554
562
  * Returns v from the active invocation whose subgroup_invocation_id matches subgroup_invocation_id - delta
@@ -559,7 +567,7 @@ export const subgroupShuffleXor = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctio
559
567
  * @param {number} delta - A value that offsets the current in.
560
568
  * @return {number} The broadcast value.
561
569
  */
562
- export const subgroupShuffleUp = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE_UP ).setParameterLength( 2 );
570
+ export const subgroupShuffleUp = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE_UP ).setParameterLength( 2 );
563
571
 
564
572
  /**
565
573
  * Returns v from the active invocation whose subgroup_invocation_id matches subgroup_invocation_id + delta
@@ -570,7 +578,7 @@ export const subgroupShuffleUp = /*@__PURE__*/ nodeProxyIntent( SubgroupFunction
570
578
  * @param {number} delta - A value that offsets the current subgroup invocation.
571
579
  * @return {number} The broadcast value.
572
580
  */
573
- export const subgroupShuffleDown = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE_DOWN ).setParameterLength( 2 );
581
+ export const subgroupShuffleDown = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE_DOWN ).setParameterLength( 2 );
574
582
 
575
583
  /**
576
584
  * Broadcasts e from the quad invocation with id equal to id.
@@ -578,6 +586,7 @@ export const subgroupShuffleDown = /*@__PURE__*/ nodeProxyIntent( SubgroupFuncti
578
586
  * @tsl
579
587
  * @method
580
588
  * @param {number} e - The value to broadcast.
589
+ * @param {number} id - The quad invocation id to broadcast from.
581
590
  * @return {number} The broadcast value.
582
591
  */
583
- export const quadBroadcast = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_BROADCAST ).setParameterLength( 1 );
592
+ export const quadBroadcast = /*@__PURE__*/ nodeProxyAssignable( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_BROADCAST ).setParameterLength( 2 );
@@ -135,6 +135,12 @@ class WorkgroupInfoNode extends Node {
135
135
 
136
136
  }
137
137
 
138
+ isCacheable( /*builder*/ ) {
139
+
140
+ return false;
141
+
142
+ }
143
+
138
144
  /**
139
145
  * Sets the name of this node.
140
146
  *
@@ -127,21 +127,16 @@ class AnalyticLightNode extends LightingNode {
127
127
  */
128
128
  disposeShadow() {
129
129
 
130
- if ( this.shadowNode !== null ) {
131
-
132
- this.shadowNode.dispose();
133
- this.shadowNode = null;
134
-
135
- }
130
+ if ( this.shadowNode === null ) return;
136
131
 
132
+ this.shadowNode.dispose();
133
+ this.shadowNode = null;
137
134
  this.shadowColorNode = null;
138
135
 
139
- if ( this.baseColorNode !== null ) {
140
-
141
- this.colorNode = this.baseColorNode;
142
- this.baseColorNode = null;
136
+ this.colorNode = this.baseColorNode;
137
+ this.baseColorNode = null;
143
138
 
144
- }
139
+ this.needsUpdate = true;
145
140
 
146
141
  }
147
142
 
@@ -266,9 +261,7 @@ class AnalyticLightNode extends LightingNode {
266
261
 
267
262
  } else if ( this.shadowNode !== null ) {
268
263
 
269
- this.shadowNode.dispose();
270
- this.shadowNode = null;
271
- this.shadowColorNode = null;
264
+ this.disposeShadow();
272
265
 
273
266
  }
274
267
 
@@ -1,5 +1,6 @@
1
1
  import LightingNode from './LightingNode.js';
2
2
  import { cubeMapNode } from '../utils/CubeMapNode.js';
3
+ import { materialEnvRotation } from '../accessors/MaterialProperties.js';
3
4
 
4
5
  /**
5
6
  * Represents a basic model for Image-based lighting (IBL). The environment
@@ -40,7 +41,10 @@ class BasicEnvironmentNode extends LightingNode {
40
41
 
41
42
  // environment property is used in the finish() method of BasicLightingModel
42
43
 
43
- builder.context.environment = cubeMapNode( this.envNode );
44
+ builder.context.environment = cubeMapNode( this.envNode ).context( {
45
+ getUV: ( textureNode ) => materialEnvRotation.mul( textureNode.uvNode || textureNode.getDefaultUV() ),
46
+ forceUVContext: true
47
+ } );
44
48
 
45
49
  }
46
50