@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
@@ -83,59 +83,46 @@ class VarNode extends Node {
83
83
  this.parents = true;
84
84
 
85
85
  /**
86
- * This flag is used to indicate that this node is used for intent.
86
+ * Whether this node can be generated as an expression until it is assigned.
87
87
  *
88
88
  * @type {boolean}
89
89
  * @default false
90
90
  */
91
- this.intent = false;
91
+ this.assignable = false;
92
92
 
93
93
  }
94
94
 
95
- /**
96
- * Sets the intent flag for this node.
97
- *
98
- * This flag is used to indicate that this node is used for intent
99
- * and should not be built directly. Instead, it is used to indicate that
100
- * the node should be treated as a variable intent.
101
- *
102
- * It's useful for assigning variables without needing creating a new variable node.
103
- *
104
- * @param {boolean} value - The value to set for the intent flag.
105
- * @returns {VarNode} This node.
106
- */
107
- setIntent( value ) {
108
-
109
- this.intent = value;
95
+ isCacheable( /*builder*/ ) {
110
96
 
111
- return this;
97
+ return false;
112
98
 
113
99
  }
114
100
 
115
101
  /**
116
- * Checks if this node is used for intent.
102
+ * Sets the assignable flag for this node.
103
+ *
104
+ * An assignable node is generated as an expression until it is assigned,
105
+ * at which point it is declared as a variable.
117
106
  *
118
- * @param {NodeBuilder} builder - The node builder.
119
- * @returns {boolean} Whether this node is used for intent.
107
+ * @param {boolean} value - The value to set for the assignable flag.
108
+ * @returns {VarNode} This node.
120
109
  */
121
- isIntent( builder ) {
122
-
123
- const data = builder.getDataFromNode( this );
110
+ setAssignable( value ) {
124
111
 
125
- if ( data.forceDeclaration === true ) return false;
112
+ this.assignable = value;
126
113
 
127
- return this.intent;
114
+ return this;
128
115
 
129
116
  }
130
117
 
131
118
  /**
132
- * Returns the intent flag of this node.
119
+ * Returns the assignable flag of this node.
133
120
  *
134
- * @return {boolean} The intent flag.
121
+ * @return {boolean} The assignable flag.
135
122
  */
136
- getIntent() {
123
+ getAssignable() {
137
124
 
138
- return this.intent;
125
+ return this.assignable;
139
126
 
140
127
  }
141
128
 
@@ -163,104 +150,55 @@ class VarNode extends Node {
163
150
 
164
151
  }
165
152
 
166
- isAssign( builder ) {
153
+ _declaresAssignable() {
167
154
 
168
- const data = builder.getDataFromNode( this );
169
-
170
- return data.assign;
155
+ return false;
171
156
 
172
157
  }
173
158
 
174
- build( ...params ) {
175
-
176
- const builder = params[ 0 ];
177
-
178
- const refNode = this.getShared( builder );
179
-
180
- if ( this !== refNode ) {
181
-
182
- return refNode.build( ...params );
183
-
184
- }
185
-
186
- if ( this._hasStack( builder ) === false && builder.buildStage === 'setup' ) {
187
-
188
- if ( builder.context.nodeLoop || builder.context.nodeBlock ) {
189
-
190
- let addBefore = false;
191
-
192
- if ( this.node.isShaderCallNodeInternal && this.node.shaderNode.getLayout() === null ) {
193
-
194
- if ( builder.fnCall && builder.fnCall.shaderNode ) {
195
-
196
- const shaderNodeData = builder.getDataFromNode( this.node.shaderNode );
197
-
198
- if ( shaderNodeData.hasLoop ) {
199
-
200
- const data = builder.getDataFromNode( this );
201
- data.forceDeclaration = true;
202
-
203
- addBefore = true;
204
-
205
- }
206
-
207
- }
159
+ _isFunctionScope() {
208
160
 
209
- }
161
+ // see `generate()`, a read-only or local variable is declared where it is generated
162
+ return this.readOnly === false && this.assignable === false;
210
163
 
211
- const baseStack = builder.getBaseStack();
212
-
213
- if ( addBefore ) {
164
+ }
214
165
 
215
- baseStack.addToStackBefore( this );
166
+ build( builder, output = null ) {
216
167
 
217
- } else {
168
+ this._setupInspector( builder );
218
169
 
219
- baseStack.addToStack( this );
170
+ const refNode = this.getShared( builder );
220
171
 
221
- }
172
+ if ( this !== refNode ) {
222
173
 
223
- }
174
+ return refNode.build( builder, output );
224
175
 
225
176
  }
226
177
 
227
- if ( this.isIntent( builder ) ) {
178
+ const data = builder.getDataFromNode( this );
228
179
 
229
- if ( this.isAssign( builder ) !== true ) {
180
+ this._updateAssignable( builder, data, this.node );
230
181
 
231
- return this.node.build( ...params );
182
+ // An assignable node that is not assigned is just its value.
183
+ if ( this.assignable && data.forceDeclaration !== true && data.assign !== true ) {
232
184
 
233
- }
185
+ return this.node.build( builder, output );
234
186
 
235
187
  }
236
188
 
237
- return super.build( ...params );
189
+ return super.build( builder, output );
238
190
 
239
191
  }
240
192
 
241
193
  generate( builder ) {
242
194
 
243
195
  const { node, name, readOnly } = this;
244
- const { renderer } = builder;
245
-
246
- const isWebGPUBackend = renderer.backend.isWebGPUBackend === true;
247
-
248
- let isDeterministic = false;
249
- let shouldTreatAsReadOnly = false;
250
-
251
- if ( readOnly ) {
252
-
253
- isDeterministic = builder.isDeterministic( node );
254
-
255
- shouldTreatAsReadOnly = isWebGPUBackend ? readOnly : isDeterministic;
256
-
257
- }
258
196
 
259
197
  const nodeType = this.getNodeType( builder );
260
198
 
261
199
  if ( nodeType == 'void' ) {
262
200
 
263
- if ( this.isIntent( builder ) !== true ) {
201
+ if ( this.isAssignable( builder ) !== true ) {
264
202
 
265
203
  error( 'TSL: ".toVar()" can not be used with void type.', this.stackTrace );
266
204
 
@@ -275,27 +213,23 @@ class VarNode extends Node {
275
213
  const vectorType = builder.getVectorType( nodeType );
276
214
  const snippet = node.build( builder, vectorType );
277
215
 
278
- const nodeVar = builder.getVarFromNode( this, name, vectorType, undefined, shouldTreatAsReadOnly );
216
+ const nodeVar = builder.getVarFromNode( this, name, vectorType, undefined, readOnly, this.assignable );
279
217
 
280
218
  const propertyName = builder.getPropertyName( nodeVar );
281
219
 
282
220
  let declarationPrefix = propertyName;
283
221
 
284
- if ( shouldTreatAsReadOnly ) {
285
-
286
- if ( isWebGPUBackend ) {
222
+ if ( nodeVar.readOnly ) {
287
223
 
288
- declarationPrefix = isDeterministic
289
- ? `const ${ propertyName }`
290
- : `let ${ propertyName }`;
224
+ const count = node.getArrayCount( builder );
291
225
 
292
- } else {
226
+ declarationPrefix = builder.isDeterministic( node )
227
+ ? builder.generateConstStatement( nodeVar.type, propertyName, count )
228
+ : builder.generateLetStatement( nodeVar.type, propertyName, count );
293
229
 
294
- const count = node.getArrayCount( builder );
230
+ } else if ( nodeVar.local ) {
295
231
 
296
- declarationPrefix = `const ${ builder.getVar( nodeVar.type, propertyName, count ) }`;
297
-
298
- }
232
+ declarationPrefix = builder.generateVarStatement( nodeVar.type, propertyName, nodeVar.count );
299
233
 
300
234
  }
301
235
 
@@ -305,14 +239,6 @@ class VarNode extends Node {
305
239
 
306
240
  }
307
241
 
308
- _hasStack( builder ) {
309
-
310
- const nodeData = builder.getDataFromNode( this );
311
-
312
- return nodeData.stack !== undefined;
313
-
314
- }
315
-
316
242
  }
317
243
 
318
244
  export default VarNode;
@@ -350,25 +276,7 @@ export const Var = ( node, name = null ) => createVar( node, name ).toStack();
350
276
  */
351
277
  export const Const = ( node, name = null ) => createVar( node, name, true ).toStack();
352
278
 
353
- //
354
- //
355
-
356
- /**
357
- * TSL function for creating a var intent node.
358
- *
359
- * @tsl
360
- * @function
361
- * @param {Node} node - The node for which a variable should be created.
362
- * @returns {VarNode}
363
- */
364
- export const VarIntent = ( node ) => {
365
-
366
- return createVar( node ).setIntent( true ).toStack();
367
-
368
- };
369
-
370
279
  // Method chaining
371
280
 
372
281
  addMethodChaining( 'toVar', Var );
373
282
  addMethodChaining( 'toConst', Const );
374
- addMethodChaining( 'toVarIntent', VarIntent );
@@ -82,6 +82,12 @@ class VaryingNode extends Node {
82
82
 
83
83
  }
84
84
 
85
+ isCacheable( /*builder*/ ) {
86
+
87
+ return false;
88
+
89
+ }
90
+
85
91
  /**
86
92
  * Defines the interpolation type of the varying.
87
93
  *
@@ -145,6 +151,20 @@ class VaryingNode extends Node {
145
151
 
146
152
  setup( builder ) {
147
153
 
154
+ // the context can evaluate varyings directly in the fragment stage, e.g. if the surface is reconstructed per fragment.
155
+ // indices and attributes create their own varyings in the fragment stage, so their varyings are kept unless the
156
+ // context provides the attribute
157
+
158
+ if ( builder.context.inlineVaryings === true && builder.shaderStage === 'fragment' ) {
159
+
160
+ let node = this.node;
161
+
162
+ while ( node.isSubBuildNode === true ) node = node.node;
163
+
164
+ if ( node.isIndexNode !== true && ( node.isAttributeNode !== true || node.getContextAttribute( builder ) ) ) return this.node;
165
+
166
+ }
167
+
148
168
  this.setupVarying( builder );
149
169
 
150
170
  builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, this.node );
@@ -153,6 +173,10 @@ class VaryingNode extends Node {
153
173
 
154
174
  analyze( builder ) {
155
175
 
176
+ // TODO: Node.build() could pass through the output node of setup() directly, so overrides of analyze() and generate() don't need to handle it twice
177
+
178
+ if ( builder.getNodeProperties( this ).outputNode ) return super.analyze( builder );
179
+
156
180
  this.setupVarying( builder );
157
181
 
158
182
  builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, this.node );
@@ -161,11 +185,18 @@ class VaryingNode extends Node {
161
185
 
162
186
  generate( builder ) {
163
187
 
188
+ const { outputNode } = builder.getNodeProperties( this );
189
+
190
+ if ( outputNode ) return outputNode.build( builder, this.getNodeType( builder ) );
191
+
164
192
  const propertyKey = builder.getSubBuildProperty( 'property', builder.currentStack );
165
193
  const properties = builder.getNodeProperties( this );
166
194
  const varying = this.setupVarying( builder );
167
195
 
168
- if ( properties[ propertyKey ] === undefined ) {
196
+ // The vertex assignment is emitted once per block, from the fragment stage it is emitted outside of any block.
197
+ const flowBlock = builder.shaderStage === NodeShaderStage.VERTEX ? builder.flowBlock : null;
198
+
199
+ if ( properties[ propertyKey ] !== flowBlock ) {
169
200
 
170
201
  const type = this.getNodeType( builder );
171
202
  const propertyName = builder.getPropertyName( varying, NodeShaderStage.VERTEX );
@@ -183,7 +214,7 @@ class VaryingNode extends Node {
183
214
 
184
215
  }
185
216
 
186
- properties[ propertyKey ] = propertyName;
217
+ properties[ propertyKey ] = flowBlock;
187
218
 
188
219
  }
189
220
 
@@ -18,14 +18,7 @@ export const blendBurn = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
18
18
 
19
19
  return min( 1.0, base.oneMinus().div( blend ) ).oneMinus();
20
20
 
21
- } ).setLayout( {
22
- name: 'blendBurn',
23
- type: 'vec3',
24
- inputs: [
25
- { name: 'base', type: 'vec3' },
26
- { name: 'blend', type: 'vec3' }
27
- ]
28
- } );
21
+ }, { base: 'vec3', blend: 'vec3', return: 'vec3' } );
29
22
 
30
23
  /**
31
24
  * Represents a "Color Dodge" blend mode.
@@ -44,14 +37,7 @@ export const blendDodge = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
44
37
 
45
38
  return min( base.div( blend.oneMinus() ), 1.0 );
46
39
 
47
- } ).setLayout( {
48
- name: 'blendDodge',
49
- type: 'vec3',
50
- inputs: [
51
- { name: 'base', type: 'vec3' },
52
- { name: 'blend', type: 'vec3' }
53
- ]
54
- } );
40
+ }, { base: 'vec3', blend: 'vec3', return: 'vec3' } );
55
41
 
56
42
  /**
57
43
  * Represents a "Screen" blend mode.
@@ -70,14 +56,7 @@ export const blendScreen = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
70
56
 
71
57
  return base.oneMinus().mul( blend.oneMinus() ).oneMinus();
72
58
 
73
- } ).setLayout( {
74
- name: 'blendScreen',
75
- type: 'vec3',
76
- inputs: [
77
- { name: 'base', type: 'vec3' },
78
- { name: 'blend', type: 'vec3' }
79
- ]
80
- } );
59
+ }, { base: 'vec3', blend: 'vec3', return: 'vec3' } );
81
60
 
82
61
  /**
83
62
  * Represents a "Overlay" blend mode.
@@ -96,14 +75,7 @@ export const blendOverlay = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
96
75
 
97
76
  return mix( base.mul( 2.0 ).mul( blend ), base.oneMinus().mul( 2.0 ).mul( blend.oneMinus() ).oneMinus(), step( 0.5, base ) );
98
77
 
99
- } ).setLayout( {
100
- name: 'blendOverlay',
101
- type: 'vec3',
102
- inputs: [
103
- { name: 'base', type: 'vec3' },
104
- { name: 'blend', type: 'vec3' }
105
- ]
106
- } );
78
+ }, { base: 'vec3', blend: 'vec3', return: 'vec3' } );
107
79
 
108
80
  /**
109
81
  * This function blends two color based on their alpha values by replicating the behavior of `THREE.NormalBlending`.
@@ -121,11 +93,4 @@ export const blendColor = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
121
93
 
122
94
  return vec4( blend.rgb.mul( blend.a ).add( base.rgb.mul( base.a ).mul( blend.a.oneMinus() ) ).div( outAlpha ), outAlpha );
123
95
 
124
- } ).setLayout( {
125
- name: 'blendColor',
126
- type: 'vec4',
127
- inputs: [
128
- { name: 'base', type: 'vec4' },
129
- { name: 'blend', type: 'vec4' }
130
- ]
131
- } );
96
+ }, { base: 'vec4', blend: 'vec4', return: 'vec4' } );
@@ -1,4 +1,4 @@
1
- import TempNode from '../core/TempNode.js';
1
+ import Node from '../core/Node.js';
2
2
  import { uv } from '../accessors/UV.js';
3
3
  import { normalView } from '../accessors/Normal.js';
4
4
  import { positionView } from '../accessors/Position.js';
@@ -51,9 +51,9 @@ const perturbNormalArb = /*@__PURE__*/ Fn( ( inputs ) => {
51
51
  * material.normalNode = bumpMap( texture( bumpTex ) );
52
52
  * ```
53
53
  *
54
- * @augments TempNode
54
+ * @augments Node
55
55
  */
56
- class BumpMapNode extends TempNode {
56
+ class BumpMapNode extends Node {
57
57
 
58
58
  static get type() {
59
59
 
@@ -66,8 +66,9 @@ class BumpMapNode extends TempNode {
66
66
  *
67
67
  * @param {Node<float>} textureNode - Represents the bump map data.
68
68
  * @param {?Node<float>} [scaleNode=null] - Controls the intensity of the bump effect.
69
+ * @param {Node<vec3>} [normalNode=normalView] - The view-space normal to perturb.
69
70
  */
70
- constructor( textureNode, scaleNode = null ) {
71
+ constructor( textureNode, scaleNode = null, normalNode = normalView ) {
71
72
 
72
73
  super( 'vec3' );
73
74
 
@@ -86,6 +87,14 @@ class BumpMapNode extends TempNode {
86
87
  */
87
88
  this.scaleNode = scaleNode;
88
89
 
90
+ /**
91
+ * The view-space normal to perturb.
92
+ *
93
+ * @type {Node<vec3>}
94
+ * @default normalView
95
+ */
96
+ this.normalNode = normalNode;
97
+
89
98
  }
90
99
 
91
100
  setup( builder ) {
@@ -93,14 +102,14 @@ class BumpMapNode extends TempNode {
93
102
  // Screen-space derivatives are unreliable on thin lines, so the bump
94
103
  // effect is disabled for wireframe rendering.
95
104
 
96
- if ( builder.material.wireframe === true ) return normalView;
105
+ if ( builder.material.wireframe === true ) return this.normalNode;
97
106
 
98
107
  const bumpScale = this.scaleNode !== null ? this.scaleNode : 1;
99
108
  const dHdxy = dHdxy_fwd( { textureNode: this.textureNode, bumpScale } );
100
109
 
101
110
  return perturbNormalArb( {
102
111
  surf_pos: positionView,
103
- surf_norm: normalView,
112
+ surf_norm: this.normalNode,
104
113
  dHdxy
105
114
  } );
106
115
 
@@ -117,6 +126,7 @@ export default BumpMapNode;
117
126
  * @function
118
127
  * @param {Node<float>} textureNode - Represents the bump map data.
119
128
  * @param {?Node<float>} [scaleNode=null] - Controls the intensity of the bump effect.
129
+ * @param {Node<vec3>} [normalNode=normalView] - The view-space normal to perturb.
120
130
  * @returns {BumpMapNode}
121
131
  */
122
- export const bumpMap = /*@__PURE__*/ nodeProxy( BumpMapNode ).setParameterLength( 1, 2 );
132
+ export const bumpMap = /*@__PURE__*/ nodeProxy( BumpMapNode ).setParameterLength( 1, 3 );
@@ -5,19 +5,30 @@ import { ColorManagement } from '../../math/ColorManagement.js';
5
5
  import { Vector3 } from '../../math/Vector3.js';
6
6
  import { LinearSRGBColorSpace } from '../../constants.js';
7
7
 
8
+ /**
9
+ * TSL object that represents the luminance coefficients of the current working color space.
10
+ * It is evaluated once per build, so it can also be used as the default value of a parameter
11
+ * of a function with layout.
12
+ *
13
+ * @tsl
14
+ * @type {VarNode<vec3>}
15
+ */
16
+ export const workingLuminanceCoefficients = /*@__PURE__*/ Fn( () => vec3( ColorManagement.getLuminanceCoefficients( new Vector3() ) ) ).once()().toVar( 'workingLuminanceCoefficients' );
17
+
8
18
  /**
9
19
  * Computes a grayscale value for the given RGB color value.
10
20
  *
11
21
  * @tsl
12
22
  * @function
13
23
  * @param {Node<vec3>} color - The color value to compute the grayscale for.
14
- * @return {Node<vec3>} The grayscale color.
24
+ * @param {Node<vec3>} [luminanceCoefficients] - The luminance coefficients. By default predefined values of the current working color space are used.
25
+ * @return {Node<float>} The grayscale value.
15
26
  */
16
- export const grayscale = /*@__PURE__*/ Fn( ( [ color ] ) => {
27
+ export const grayscale = /*@__PURE__*/ Fn( ( [ color, luminanceCoefficients = workingLuminanceCoefficients ] ) => {
17
28
 
18
- return luminance( color.rgb );
29
+ return luminance( color.rgb, luminanceCoefficients );
19
30
 
20
- } );
31
+ }, { color: 'vec3', luminanceCoefficients: 'vec3', return: 'float' } );
21
32
 
22
33
  /**
23
34
  * Super-saturates or desaturates the given RGB color.
@@ -26,13 +37,14 @@ export const grayscale = /*@__PURE__*/ Fn( ( [ color ] ) => {
26
37
  * @function
27
38
  * @param {Node<vec3>} color - The input color.
28
39
  * @param {Node<float>} [adjustment=1] - Specifies the amount of the conversion. A value under `1` desaturates the color, a value over `1` super-saturates it.
40
+ * @param {Node<vec3>} [luminanceCoefficients] - The luminance coefficients. By default predefined values of the current working color space are used.
29
41
  * @return {Node<vec3>} The saturated color.
30
42
  */
31
- export const saturation = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
43
+ export const saturation = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ), luminanceCoefficients = workingLuminanceCoefficients ] ) => {
32
44
 
33
- return adjustment.mix( luminance( color.rgb ), color.rgb ).max( 0.0 );
45
+ return adjustment.mix( luminance( color.rgb, luminanceCoefficients ), color.rgb ).max( 0.0 );
34
46
 
35
- } );
47
+ }, { color: 'vec3', adjustment: 'float', luminanceCoefficients: 'vec3', return: 'vec3' } );
36
48
 
37
49
  /**
38
50
  * Selectively enhance the intensity of less saturated RGB colors. Can result
@@ -54,7 +66,7 @@ export const vibrance = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 0 ) ] )
54
66
 
55
67
  return mix( color.rgb, mx, amt ).max( 0.0 );
56
68
 
57
- } );
69
+ }, { color: 'vec3', adjustment: 'float', return: 'vec3' } );
58
70
 
59
71
  /**
60
72
  * Updates the hue component of the given RGB color while preserving its luminance and saturation.
@@ -73,7 +85,7 @@ export const hue = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
73
85
 
74
86
  return vec3( color.rgb.mul( cosAngle ).add( k.cross( color.rgb ).mul( adjustment.sin() ).add( k.mul( dot( k, color.rgb ).mul( cosAngle.oneMinus() ) ) ) ) ).max( 0.0 );
75
87
 
76
- } );
88
+ }, { color: 'vec3', adjustment: 'float', return: 'vec3' } );
77
89
 
78
90
  /**
79
91
  * Computes the luminance for the given RGB color value.
@@ -139,7 +151,7 @@ export const cdl = /*@__PURE__*/ Fn( ( [
139
151
 
140
152
  return vec4( v.rgb, color.a );
141
153
 
142
- } );
154
+ }, { color: 'vec4', slope: 'vec3', offset: 'vec3', power: 'vec3', saturation: 'float', luminanceCoefficients: 'vec3', return: 'vec4' } );
143
155
 
144
156
  /**
145
157
  * TSL function for creating a posterize effect which reduces the number of colors
@@ -19,13 +19,7 @@ export const sRGBTransferEOTF = /*@__PURE__*/ Fn( ( [ color ] ) => {
19
19
 
20
20
  return rgbResult;
21
21
 
22
- } ).setLayout( {
23
- name: 'sRGBTransferEOTF',
24
- type: 'vec3',
25
- inputs: [
26
- { name: 'color', type: 'vec3' }
27
- ]
28
- } );
22
+ }, { color: 'vec3', return: 'vec3' } );
29
23
 
30
24
  /**
31
25
  * Converts the given color value from linear-sRGB to sRGB color space.
@@ -45,10 +39,4 @@ export const sRGBTransferOETF = /*@__PURE__*/ Fn( ( [ color ] ) => {
45
39
 
46
40
  return rgbResult;
47
41
 
48
- } ).setLayout( {
49
- name: 'sRGBTransferOETF',
50
- type: 'vec3',
51
- inputs: [
52
- { name: 'color', type: 'vec3' }
53
- ]
54
- } );
42
+ }, { color: 'vec3', return: 'vec3' } );
@@ -1,4 +1,4 @@
1
- import TempNode from '../core/TempNode.js';
1
+ import Node from '../core/Node.js';
2
2
  import { addMethodChaining, mat3, nodeObject, vec4 } from '../tsl/TSLCore.js';
3
3
 
4
4
  import { SRGBTransfer } from '../../constants.js';
@@ -13,9 +13,9 @@ const OUTPUT_COLOR_SPACE = 'OutputColorSpace';
13
13
  * This node represents a color space conversion. Meaning it converts
14
14
  * a color value from a source to a target color space.
15
15
  *
16
- * @augments TempNode
16
+ * @augments Node
17
17
  */
18
- class ColorSpaceNode extends TempNode {
18
+ class ColorSpaceNode extends Node {
19
19
 
20
20
  static get type() {
21
21
 
@@ -35,6 +35,12 @@ class FrontFacingNode extends Node {
35
35
 
36
36
  }
37
37
 
38
+ isCacheable( /*builder*/ ) {
39
+
40
+ return false;
41
+
42
+ }
43
+
38
44
  generate( builder ) {
39
45
 
40
46
  if ( builder.shaderStage !== 'fragment' ) return 'true';
@@ -1,4 +1,4 @@
1
- import TempNode from '../core/TempNode.js';
1
+ import Node from '../core/Node.js';
2
2
 
3
3
  import { normalView, transformNormalToView } from '../accessors/Normal.js';
4
4
  import { TBNViewMatrix } from '../accessors/AccessorsUtils.js';
@@ -16,9 +16,9 @@ import { error } from '../../utils.js';
16
16
  * material.normalNode = normalMap( texture( normalTex ) );
17
17
  * ```
18
18
  *
19
- * @augments TempNode
19
+ * @augments Node
20
20
  */
21
- class NormalMapNode extends TempNode {
21
+ class NormalMapNode extends Node {
22
22
 
23
23
  static get type() {
24
24