@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,11 +1,12 @@
1
- import TempNode from '../core/TempNode.js';
1
+ import Node from '../core/Node.js';
2
2
  import { default as TextureNode/*, texture*/ } from '../accessors/TextureNode.js';
3
3
  import { NodeUpdateType } from '../core/constants.js';
4
4
  import { context } from '../tsl/TSLBase.js';
5
+ import { mergeContext } from '../core/NodeUtils.js';
5
6
  import { uniform } from '../core/UniformNode.js';
6
7
  import { viewZToOrthographicDepth, perspectiveDepthToViewZ } from './ViewportDepthNode.js';
7
8
 
8
- import { HalfFloatType, FloatType } from '../../constants.js';
9
+ import { HalfFloatType, FloatType, DepthStencilFormat, UnsignedInt248Type } from '../../constants.js';
9
10
  import { Vector2 } from '../../math/Vector2.js';
10
11
  import { Vector4 } from '../../math/Vector4.js';
11
12
  import { DepthTexture } from '../../textures/DepthTexture.js';
@@ -57,6 +58,12 @@ class PassTextureNode extends TextureNode {
57
58
 
58
59
  }
59
60
 
61
+ isCacheable( /*builder*/ ) {
62
+
63
+ return true;
64
+
65
+ }
66
+
60
67
  setup( builder ) {
61
68
 
62
69
  const properties = builder.getNodeProperties( this );
@@ -177,9 +184,9 @@ class PassMultipleTextureNode extends PassTextureNode {
177
184
  * postProcessing.outputNode = scenePass;
178
185
  * ```
179
186
  *
180
- * @augments TempNode
187
+ * @augments Node
181
188
  */
182
- class PassNode extends TempNode {
189
+ class PassNode extends Node {
183
190
 
184
191
  static get type() {
185
192
 
@@ -250,7 +257,23 @@ class PassNode extends TempNode {
250
257
 
251
258
  if ( this.scope === PassNode.DEPTH || options.depthBuffer !== false ) {
252
259
 
253
- depthTexture = options.depthTexture || new DepthTexture();
260
+ if ( options.depthTexture !== undefined ) {
261
+
262
+ depthTexture = options.depthTexture;
263
+
264
+ } else {
265
+
266
+ depthTexture = new DepthTexture();
267
+
268
+ if ( renderTarget.stencilBuffer === true ) {
269
+
270
+ depthTexture.format = DepthStencilFormat;
271
+ depthTexture.type = UnsignedInt248Type;
272
+
273
+ }
274
+
275
+ }
276
+
254
277
  depthTexture.isRenderTargetTexture = true;
255
278
  //depthTexture.type = FloatType;
256
279
  depthTexture.name = 'depth';
@@ -277,7 +300,7 @@ class PassNode extends TempNode {
277
300
  * Whether the pass is transparent.
278
301
  *
279
302
  * @type {boolean}
280
- * @default false
303
+ * @default true
281
304
  */
282
305
  this.transparent = true;
283
306
 
@@ -487,6 +510,12 @@ class PassNode extends TempNode {
487
510
 
488
511
  }
489
512
 
513
+ isCacheable( /*builder*/ ) {
514
+
515
+ return false;
516
+
517
+ }
518
+
490
519
  /**
491
520
  * Sets the resolution scale for the pass.
492
521
  * The resolution scale is a factor that is multiplied with the renderer's width and height.
@@ -785,13 +814,25 @@ class PassNode extends TempNode {
785
814
  const currentRenderTarget = renderer.getRenderTarget();
786
815
  const currentMRT = renderer.getMRT();
787
816
 
817
+ const currentContextNode = renderer.contextNode;
818
+
819
+ // the render target is configured like in setup() and updateBefore(), so the pipelines match the ones of the render
820
+
821
+ this.renderTarget.samples = this.options.samples === undefined ? renderer.samples : this.options.samples;
822
+
823
+ renderer.getDrawingBufferSize( _size );
824
+ this.setSize( _size.width, _size.height );
825
+
788
826
  renderer.setRenderTarget( this.renderTarget );
789
827
  renderer.setMRT( this._mrt );
790
828
 
829
+ if ( this.contextNode !== null ) renderer.contextNode = this._getContextNode( renderer );
830
+
791
831
  await renderer.compileAsync( this.scene, this.camera );
792
832
 
793
833
  renderer.setRenderTarget( currentRenderTarget );
794
834
  renderer.setMRT( currentMRT );
835
+ renderer.contextNode = currentContextNode;
795
836
 
796
837
  }
797
838
 
@@ -889,16 +930,7 @@ class PassNode extends TempNode {
889
930
 
890
931
  if ( this.contextNode !== null ) {
891
932
 
892
- if ( this._contextNodeCache === null || this._contextNodeCache.version !== this.version ) {
893
-
894
- this._contextNodeCache = {
895
- version: this.version,
896
- context: context( { ...renderer.contextNode.getFlowContextData(), ...this.contextNode.getFlowContextData() } )
897
- };
898
-
899
- }
900
-
901
- renderer.contextNode = this._contextNodeCache.context;
933
+ renderer.contextNode = this._getContextNode( renderer );
902
934
 
903
935
  }
904
936
 
@@ -926,6 +958,33 @@ class PassNode extends TempNode {
926
958
 
927
959
  }
928
960
 
961
+ /**
962
+ * Returns the context node of the pass merged with the context node of the renderer.
963
+ *
964
+ * @private
965
+ * @param {Renderer} renderer - The renderer.
966
+ * @return {ContextNode} The context node.
967
+ */
968
+ _getContextNode( renderer ) {
969
+
970
+ const rendererContextNode = renderer.contextNode;
971
+ const cache = this._contextNodeCache;
972
+
973
+ if ( cache === null || cache.version !== this.version || cache.rendererContextNode !== rendererContextNode || cache.rendererVersion !== rendererContextNode.version ) {
974
+
975
+ this._contextNodeCache = {
976
+ version: this.version,
977
+ rendererContextNode,
978
+ rendererVersion: rendererContextNode.version,
979
+ context: context( mergeContext( rendererContextNode.getFlowContextData(), this.contextNode.getFlowContextData() ) )
980
+ };
981
+
982
+ }
983
+
984
+ return this._contextNodeCache.context;
985
+
986
+ }
987
+
929
988
  /**
930
989
  * Sets the size of the pass's render target. Honors the pixel ratio.
931
990
  *
@@ -1,4 +1,4 @@
1
- import TempNode from '../core/TempNode.js';
1
+ import Node from '../core/Node.js';
2
2
  import { addMethodChaining, nodeObject, vec4 } from '../tsl/TSLCore.js';
3
3
  import { premultiplyAlpha, unpremultiplyAlpha } from './PremultiplyAlphaFunctions.js';
4
4
 
@@ -26,9 +26,9 @@ import { ColorManagement } from '../../math/ColorManagement.js';
26
26
  * postProcessing.outputNode = outputPass;
27
27
  * ```
28
28
  *
29
- * @augments TempNode
29
+ * @augments Node
30
30
  */
31
- class RenderOutputNode extends TempNode {
31
+ class RenderOutputNode extends Node {
32
32
 
33
33
  static get type() {
34
34
 
@@ -69,6 +69,15 @@ class RenderOutputNode extends TempNode {
69
69
  */
70
70
  this.outputColorSpace = outputColorSpace;
71
71
 
72
+ /**
73
+ * Whether the color node uses premultiplied alpha. The output
74
+ * uses the same alpha mode.
75
+ *
76
+ * @type {boolean}
77
+ * @default true
78
+ */
79
+ this.premultipliedAlpha = true;
80
+
72
81
  /**
73
82
  * This flag can be used for type testing.
74
83
  *
@@ -113,7 +122,11 @@ class RenderOutputNode extends TempNode {
113
122
  outputNode = vec4( outputNode.rgb, outputNode.a.clamp( 0.0, 1.0 ) );
114
123
 
115
124
  // unpremultiply
116
- outputNode = unpremultiplyAlpha( outputNode );
125
+ if ( this.premultipliedAlpha === true ) {
126
+
127
+ outputNode = unpremultiplyAlpha( outputNode );
128
+
129
+ }
117
130
 
118
131
  // tone mapping
119
132
  const toneMapping = ( this._toneMapping !== null ? this._toneMapping : context.toneMapping ) || NoToneMapping;
@@ -134,7 +147,11 @@ class RenderOutputNode extends TempNode {
134
147
  }
135
148
 
136
149
  // premultiply in output color space
137
- outputNode = premultiplyAlpha( outputNode );
150
+ if ( this.premultipliedAlpha === true ) {
151
+
152
+ outputNode = premultiplyAlpha( outputNode );
153
+
154
+ }
138
155
 
139
156
  return outputNode;
140
157
 
@@ -55,6 +55,12 @@ class ScreenNode extends Node {
55
55
 
56
56
  }
57
57
 
58
+ isCacheable( /*builder*/ ) {
59
+
60
+ return false;
61
+
62
+ }
63
+
58
64
  /**
59
65
  * This method is overwritten since the node type depends on the selected scope.
60
66
  *
@@ -16,14 +16,7 @@ export const linearToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
16
16
 
17
17
  return color.mul( exposure ).clamp();
18
18
 
19
- } ).setLayout( {
20
- name: 'linearToneMapping',
21
- type: 'vec3',
22
- inputs: [
23
- { name: 'color', type: 'vec3' },
24
- { name: 'exposure', type: 'float' }
25
- ]
26
- } );
19
+ }, { color: 'vec3', exposure: 'float', return: 'vec3' } );
27
20
 
28
21
  /**
29
22
  * Reinhard tone mapping.
@@ -42,14 +35,7 @@ export const reinhardToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) =>
42
35
 
43
36
  return color.div( color.add( 1.0 ) ).clamp();
44
37
 
45
- } ).setLayout( {
46
- name: 'reinhardToneMapping',
47
- type: 'vec3',
48
- inputs: [
49
- { name: 'color', type: 'vec3' },
50
- { name: 'exposure', type: 'float' }
51
- ]
52
- } );
38
+ }, { color: 'vec3', exposure: 'float', return: 'vec3' } );
53
39
 
54
40
  /**
55
41
  * Cineon tone mapping.
@@ -73,25 +59,18 @@ export const cineonToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
73
59
 
74
60
  return a.div( b ).pow( 2.2 );
75
61
 
76
- } ).setLayout( {
77
- name: 'cineonToneMapping',
78
- type: 'vec3',
79
- inputs: [
80
- { name: 'color', type: 'vec3' },
81
- { name: 'exposure', type: 'float' }
82
- ]
83
- } );
62
+ }, { color: 'vec3', exposure: 'float', return: 'vec3' } );
84
63
 
85
64
  // source: https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs
86
65
 
87
66
  const RRTAndODTFit = /*@__PURE__*/ Fn( ( [ color ] ) => {
88
67
 
89
68
  const a = color.mul( color.add( 0.0245786 ) ).sub( 0.000090537 );
90
- const b = color.mul( color.add( 0.4329510 ).mul( 0.983729 ) ).add( 0.238081 );
69
+ const b = color.mul( color.mul( 0.983729 ).add( 0.4329510 ) ).add( 0.238081 );
91
70
 
92
71
  return a.div( b );
93
72
 
94
- } );
73
+ }, { color: 'vec3', return: 'vec3' } );
95
74
 
96
75
  /**
97
76
  * ACESFilmic tone mapping.
@@ -132,14 +111,7 @@ export const acesFilmicToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) =
132
111
  // Clamp to [0, 1]
133
112
  return color.clamp();
134
113
 
135
- } ).setLayout( {
136
- name: 'acesFilmicToneMapping',
137
- type: 'vec3',
138
- inputs: [
139
- { name: 'color', type: 'vec3' },
140
- { name: 'exposure', type: 'float' }
141
- ]
142
- } );
114
+ }, { color: 'vec3', exposure: 'float', return: 'vec3' } );
143
115
 
144
116
  const LINEAR_REC2020_TO_LINEAR_SRGB = /*@__PURE__*/ mat3( vec3( 1.6605, - 0.1246, - 0.0182 ), vec3( - 0.5876, 1.1329, - 0.1006 ), vec3( - 0.0728, - 0.0083, 1.1187 ) );
145
117
  const LINEAR_SRGB_TO_LINEAR_REC2020 = /*@__PURE__*/ mat3( vec3( 0.6274, 0.0691, 0.0164 ), vec3( 0.3293, 0.9195, 0.0880 ), vec3( 0.0433, 0.0113, 0.8956 ) );
@@ -152,7 +124,7 @@ const agxDefaultContrastApprox = /*@__PURE__*/ Fn( ( [ x_immutable ] ) => {
152
124
 
153
125
  return float( 15.5 ).mul( x4.mul( x2 ) ).sub( mul( 40.14, x4.mul( x ) ) ).add( mul( 31.96, x4 ).sub( mul( 6.868, x2.mul( x ) ) ).add( mul( 0.4298, x2 ).add( mul( 0.1191, x ).sub( 0.00232 ) ) ) );
154
126
 
155
- } );
127
+ }, { x: 'vec3', return: 'vec3' } );
156
128
 
157
129
  /**
158
130
  * AgX tone mapping.
@@ -185,14 +157,7 @@ export const agxToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
185
157
 
186
158
  return colortone;
187
159
 
188
- } ).setLayout( {
189
- name: 'agxToneMapping',
190
- type: 'vec3',
191
- inputs: [
192
- { name: 'color', type: 'vec3' },
193
- { name: 'exposure', type: 'float' }
194
- ]
195
- } );
160
+ }, { color: 'vec3', exposure: 'float', return: 'vec3' } );
196
161
 
197
162
  /**
198
163
  * Neutral tone mapping.
@@ -232,11 +197,4 @@ export const neutralToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
232
197
 
233
198
  return mix( color, vec3( newPeak ), g );
234
199
 
235
- } ).setLayout( {
236
- name: 'neutralToneMapping',
237
- type: 'vec3',
238
- inputs: [
239
- { name: 'color', type: 'vec3' },
240
- { name: 'exposure', type: 'float' }
241
- ]
242
- } );
200
+ }, { color: 'vec3', exposure: 'float', return: 'vec3' } );
@@ -1,4 +1,4 @@
1
- import TempNode from '../core/TempNode.js';
1
+ import Node from '../core/Node.js';
2
2
  import { addMethodChaining, nodeObject, vec4 } from '../tsl/TSLCore.js';
3
3
  import { rendererReference } from '../accessors/RendererReferenceNode.js';
4
4
 
@@ -9,9 +9,9 @@ import { error } from '../../utils.js';
9
9
  /**
10
10
  * This node represents a tone mapping operation.
11
11
  *
12
- * @augments TempNode
12
+ * @augments Node
13
13
  */
14
- class ToneMappingNode extends TempNode {
14
+ class ToneMappingNode extends Node {
15
15
 
16
16
  static get type() {
17
17
 
@@ -64,13 +64,38 @@ class ToonOutlinePassNode extends PassNode {
64
64
  */
65
65
  this.alphaNode = alphaNode;
66
66
 
67
+ /**
68
+ * The outline material for toon materials without node modifications.
69
+ *
70
+ * @private
71
+ * @type {NodeMaterial}
72
+ */
73
+ this._outlineMaterial = this._createMaterial();
74
+
67
75
  /**
68
76
  * An internal material cache.
69
77
  *
70
78
  * @private
71
- * @type {WeakMap<Material, NodeMaterial>}
79
+ * @type {Map<Material, NodeMaterial>}
80
+ */
81
+ this._materialCache = new Map();
82
+
83
+ /**
84
+ * Disposes the outline material of a disposed toon material.
85
+ *
86
+ * @private
87
+ * @type {Function}
72
88
  */
73
- this._materialCache = new WeakMap();
89
+ this._onMaterialDispose = ( event ) => {
90
+
91
+ const originalMaterial = event.target;
92
+
93
+ originalMaterial.removeEventListener( 'dispose', this._onMaterialDispose );
94
+
95
+ this._materialCache.get( originalMaterial ).dispose();
96
+ this._materialCache.delete( originalMaterial );
97
+
98
+ };
74
99
 
75
100
  /**
76
101
  * The name of this pass.
@@ -115,6 +140,27 @@ class ToonOutlinePassNode extends PassNode {
115
140
 
116
141
  }
117
142
 
143
+ /**
144
+ * Frees internal resources. Should be called when the node is no longer in use.
145
+ */
146
+ dispose() {
147
+
148
+ super.dispose();
149
+
150
+ this._outlineMaterial.dispose();
151
+
152
+ for ( const [ originalMaterial, outlineMaterial ] of this._materialCache ) {
153
+
154
+ originalMaterial.removeEventListener( 'dispose', this._onMaterialDispose );
155
+
156
+ outlineMaterial.dispose();
157
+
158
+ }
159
+
160
+ this._materialCache.clear();
161
+
162
+ }
163
+
118
164
  /**
119
165
  * Creates the material used for outline rendering.
120
166
  *
@@ -158,14 +204,32 @@ class ToonOutlinePassNode extends PassNode {
158
204
  */
159
205
  _getOutlineMaterial( originalMaterial ) {
160
206
 
207
+ if ( ! originalMaterial.positionNode ) return this._outlineMaterial; // early out if there are no node modifications
208
+
209
+ let force = false;
161
210
  let outlineMaterial = this._materialCache.get( originalMaterial );
162
211
 
212
+ // create
213
+
163
214
  if ( outlineMaterial === undefined ) {
164
215
 
165
216
  outlineMaterial = this._createMaterial();
166
217
 
167
218
  this._materialCache.set( originalMaterial, outlineMaterial );
168
219
 
220
+ originalMaterial.addEventListener( 'dispose', this._onMaterialDispose );
221
+
222
+ force = true;
223
+
224
+ }
225
+
226
+ // update
227
+
228
+ if ( outlineMaterial.version !== originalMaterial.version || force === true ) {
229
+
230
+ outlineMaterial.positionNode = originalMaterial.positionNode || null;
231
+ outlineMaterial.version = originalMaterial.version;
232
+
169
233
  }
170
234
 
171
235
  return outlineMaterial;
@@ -1,5 +1,5 @@
1
1
  import Node from '../core/Node.js';
2
- import { float, Fn, log, log2, nodeImmutable, nodeProxy } from '../tsl/TSLBase.js';
2
+ import { EPSILON, float, Fn, log, log2, nodeImmutable, nodeProxy } from '../tsl/TSLBase.js';
3
3
  import { cameraNear, cameraFar } from '../accessors/Camera.js';
4
4
  import { positionView } from '../accessors/Position.js';
5
5
  import { viewportDepthTexture } from './ViewportDepthTextureNode.js';
@@ -61,6 +61,12 @@ class ViewportDepthNode extends Node {
61
61
 
62
62
  }
63
63
 
64
+ isCacheable( /*builder*/ ) {
65
+
66
+ return false;
67
+
68
+ }
69
+
64
70
  generate( builder ) {
65
71
 
66
72
  const { scope } = this;
@@ -92,7 +98,7 @@ class ViewportDepthNode extends Node {
92
98
 
93
99
  } else if ( scope === ViewportDepthNode.DEPTH ) {
94
100
 
95
- if ( camera.isPerspectiveCamera ) {
101
+ if ( camera.isOrthographicCamera !== true ) {
96
102
 
97
103
  node = viewZToPerspectiveDepth( positionView.z, cameraNear, cameraFar );
98
104
 
@@ -106,7 +112,7 @@ class ViewportDepthNode extends Node {
106
112
 
107
113
  if ( value !== null ) {
108
114
 
109
- if ( camera.isPerspectiveCamera ) {
115
+ if ( camera.isOrthographicCamera !== true ) {
110
116
 
111
117
  const viewZ = perspectiveDepthToViewZ( value, cameraNear, cameraFar );
112
118
 
@@ -276,7 +282,7 @@ export const viewZToLogarithmicDepth = ( viewZ, near, far ) => {
276
282
  // we modify the formula here to use 'viewZ' instead of 'w'. The other functions expect a negative viewZ,
277
283
  // so we do the same here, hence the 'viewZ.negate()' call.
278
284
  // For visual representation of this depth curve, see https://www.desmos.com/calculator/uyqk0vex1u
279
- near = near.max( 1e-6 ).toVar();
285
+ near = near.max( EPSILON ).toVar();
280
286
  const numerator = log2( viewZ.negate().div( near ) );
281
287
  const denominator = log2( far.div( near ) );
282
288
  return numerator.div( denominator );
@@ -303,6 +309,30 @@ export const logarithmicDepthToViewZ = ( depth, near, far ) => {
303
309
 
304
310
  };
305
311
 
312
+ /**
313
+ * TSL function for retrieving the depth value as produced by the camera's projection matrix.
314
+ *
315
+ * @tsl
316
+ * @function
317
+ * @param {Node<float>} depth - The depth value.
318
+ * @param {Node<float>} near - The camera's near value.
319
+ * @param {Node<float>} far - The camera's far value.
320
+ * @returns {Node<float>}
321
+ */
322
+ export const projectionDepth = /*@__PURE__*/ Fn( ( [ depth, near, far ], builder ) => {
323
+
324
+ if ( builder.renderer.logarithmicDepthBuffer === true ) {
325
+
326
+ const viewZ = logarithmicDepthToViewZ( depth, near, far );
327
+
328
+ return viewZToPerspectiveDepth( viewZ, near, far );
329
+
330
+ }
331
+
332
+ return depth;
333
+
334
+ } );
335
+
306
336
  /**
307
337
  * TSL function for defining a value for the current fragment's depth.
308
338
  *
@@ -0,0 +1,65 @@
1
+ import { normalView as NormalView } from '../../accessors/Normal.js';
2
+ import { positionViewDirection } from '../../accessors/Position.js';
3
+ import { Fn } from '../../tsl/TSLBase.js';
4
+
5
+ const EON_EPSILON = 1e-7;
6
+ const FON_A_COEFFICIENT = 0.5 - 2 / ( 3 * Math.PI );
7
+ const FON_AVERAGE_ALBEDO_COEFFICIENT = 2 / 3 - 28 / ( 15 * Math.PI );
8
+
9
+ const FON_DirectionalAlbedo = /*@__PURE__*/ Fn( ( { mu, roughness, A } ) => {
10
+
11
+ const muComp = mu.oneMinus();
12
+ const gOverPi = muComp.mul(
13
+ muComp.mul(
14
+ muComp.mul(
15
+ muComp.mul( 0.0714429953 ).sub( 0.332181442 )
16
+ ).add( 0.491881867 )
17
+ ).add( 0.0571085289 )
18
+ );
19
+
20
+ return A.mul( roughness.mul( gOverPi ).add( 1.0 ) );
21
+
22
+ }, { mu: 'float', roughness: 'float', A: 'float', return: 'float' } );
23
+
24
+ // Portsmouth et al. 2025, "EON: A Practical Energy-Preserving Rough Diffuse BRDF"
25
+ // https://jcgt.org/published/0014/01/06/
26
+ const BRDF_EON = /*@__PURE__*/ Fn( ( { lightDirection, diffuseColor, roughness, normalView = NormalView, viewDirection = positionViewDirection } ) => {
27
+
28
+ const rho = diffuseColor.clamp();
29
+ const dotNL = normalView.dot( lightDirection ).clamp();
30
+ const dotNV = normalView.dot( viewDirection ).clamp();
31
+ const s = lightDirection.dot( viewDirection ).sub( dotNL.mul( dotNV ) );
32
+ const sOverT = s.greaterThan( 0.0 ).select( s.div( dotNL.max( dotNV ).max( EON_EPSILON ) ), s );
33
+
34
+ const A = roughness.mul( FON_A_COEFFICIENT ).add( 1.0 ).reciprocal();
35
+ const singleScatter = rho.mul( 1 / Math.PI, A, roughness.mul( sOverT ).add( 1.0 ) );
36
+
37
+ const averageAlbedo = A.mul( roughness.mul( FON_AVERAGE_ALBEDO_COEFFICIENT ).add( 1.0 ) );
38
+ const albedoV = FON_DirectionalAlbedo( { mu: dotNV, roughness, A } );
39
+ const albedoL = FON_DirectionalAlbedo( { mu: dotNL, roughness, A } );
40
+ const rhoMultiScatter = rho.mul( rho, averageAlbedo ).div( rho.mul( averageAlbedo.oneMinus() ).oneMinus().max( EON_EPSILON ) );
41
+ const multiScatter = rhoMultiScatter.mul(
42
+ 1 / Math.PI,
43
+ albedoV.oneMinus().max( EON_EPSILON ),
44
+ albedoL.oneMinus().max( EON_EPSILON )
45
+ ).div( averageAlbedo.oneMinus().max( EON_EPSILON ) );
46
+ const eon = singleScatter.add( multiScatter );
47
+
48
+ return roughness.lessThanEqual( EON_EPSILON ).select( rho.mul( 1 / Math.PI ), eon );
49
+
50
+ } );
51
+
52
+ export const EON_DirectionalAlbedo = /*@__PURE__*/ Fn( ( { diffuseColor, roughness, dotNV } ) => {
53
+
54
+ const rho = diffuseColor.clamp();
55
+ const A = roughness.mul( FON_A_COEFFICIENT ).add( 1.0 ).reciprocal();
56
+ const directionalAlbedo = FON_DirectionalAlbedo( { mu: dotNV.clamp(), roughness, A } );
57
+ const averageAlbedo = A.mul( roughness.mul( FON_AVERAGE_ALBEDO_COEFFICIENT ).add( 1.0 ) );
58
+ const rhoMultiScatter = rho.mul( rho, averageAlbedo ).div( rho.mul( averageAlbedo.oneMinus() ).oneMinus().max( EON_EPSILON ) );
59
+ const eonAlbedo = rho.mul( directionalAlbedo ).add( rhoMultiScatter.mul( directionalAlbedo.oneMinus() ) );
60
+
61
+ return roughness.lessThanEqual( EON_EPSILON ).select( rho, eonAlbedo );
62
+
63
+ }, { diffuseColor: 'vec3', roughness: 'float', dotNV: 'float', return: 'vec3' } );
64
+
65
+ export default BRDF_EON;
@@ -11,7 +11,7 @@ import { Fn, defined } from '../../tsl/TSLBase.js';
11
11
  // GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility
12
12
  const BRDF_GGX = /*@__PURE__*/ Fn( ( { lightDirection, f0, f90, roughness, f, normalView = NormalView, viewDirection = positionViewDirection, USE_IRIDESCENCE, USE_ANISOTROPY } ) => {
13
13
 
14
- const alpha = roughness.pow2(); // UE4's roughness
14
+ const alpha = roughness.max( 0.045 ).pow2(); // punctual lights need a minimum roughness to show a highlight
15
15
 
16
16
  const halfDir = lightDirection.add( viewDirection ).normalize();
17
17
 
@@ -38,8 +38,10 @@ const BRDF_GGX = /*@__PURE__*/ Fn( ( { lightDirection, f0, f90, roughness, f, no
38
38
  const dotBV = anisotropyB.dot( viewDirection );
39
39
  const dotBH = anisotropyB.dot( halfDir );
40
40
 
41
- V = V_GGX_SmithCorrelated_Anisotropic( { alphaT, alphaB: alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL } );
42
- D = D_GGX_Anisotropic( { alphaT, alphaB: alpha, dotNH, dotTH, dotBH } );
41
+ const clampedAlphaT = alphaT.max( alpha );
42
+
43
+ V = V_GGX_SmithCorrelated_Anisotropic( { alphaT: clampedAlphaT, alphaB: alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL } );
44
+ D = D_GGX_Anisotropic( { alphaT: clampedAlphaT, alphaB: alpha, dotNH, dotTH, dotBH } );
43
45
 
44
46
  } else {
45
47
 
@@ -15,14 +15,7 @@ const D_Charlie = /*@__PURE__*/ Fn( ( { roughness, dotNH } ) => {
15
15
 
16
16
  return float( 2.0 ).add( invAlpha ).mul( sin2h.pow( invAlpha.mul( 0.5 ) ) ).div( 2.0 * Math.PI );
17
17
 
18
- } ).setLayout( {
19
- name: 'D_Charlie',
20
- type: 'float',
21
- inputs: [
22
- { name: 'roughness', type: 'float' },
23
- { name: 'dotNH', type: 'float' }
24
- ]
25
- } );
18
+ }, { roughness: 'float', dotNH: 'float', return: 'float' } );
26
19
 
27
20
  // https://github.com/google/filament/blob/master/shaders/src/brdf.fs
28
21
  const V_Neubelt = /*@__PURE__*/ Fn( ( { dotNV, dotNL } ) => {
@@ -30,14 +23,7 @@ const V_Neubelt = /*@__PURE__*/ Fn( ( { dotNV, dotNL } ) => {
30
23
  // Neubelt and Pettineo 2013, "Crafting a Next-gen Material Pipeline for The Order: 1886"
31
24
  return float( 1.0 ).div( float( 4.0 ).mul( dotNL.add( dotNV ).sub( dotNL.mul( dotNV ) ) ) ).clamp();
32
25
 
33
- } ).setLayout( {
34
- name: 'V_Neubelt',
35
- type: 'float',
36
- inputs: [
37
- { name: 'dotNV', type: 'float' },
38
- { name: 'dotNL', type: 'float' }
39
- ]
40
- } );
26
+ }, { dotNV: 'float', dotNL: 'float', return: 'float' } );
41
27
 
42
28
  const BRDF_Sheen = /*@__PURE__*/ Fn( ( { lightDirection } ) => {
43
29
 
@@ -11,13 +11,6 @@ const D_GGX = /*@__PURE__*/ Fn( ( { alpha, dotNH } ) => {
11
11
 
12
12
  return a2.div( denom.pow2() ).mul( 1 / Math.PI );
13
13
 
14
- } ).setLayout( {
15
- name: 'D_GGX',
16
- type: 'float',
17
- inputs: [
18
- { name: 'alpha', type: 'float' },
19
- { name: 'dotNH', type: 'float' }
20
- ]
21
- } ); // validated
14
+ }, { alpha: 'float', dotNH: 'float', return: 'float' } ); // validated
22
15
 
23
16
  export default D_GGX;