@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,5 +1,5 @@
1
- import { abs, atan, bool, convertToTexture, cos, cross, Discard, dot, EPSILON, exp, float, Fn, getScreenPosition, getViewPosition, If, int, log, Loop, luminance, mat2, max, mix, nodeObject, NodeUpdateType, normalize, passTexture, PI, property, reflect, sin, smoothstep, sqrt, tan, texture, uniform, unpackRGBToNormal, uv, vec2, vec3, vec4, context } from 'three/tsl';
2
- import { HalfFloatType, MathUtils, Matrix4, NodeMaterial, QuadMesh, RendererUtils, RenderTarget, TempNode, Vector2 } from 'three/webgpu';
1
+ import { abs, atan, bool, convertToTexture, cos, cross, Discard, dot, EPSILON, exp, float, Fn, getScreenPosition, getViewPosition, If, int, log, Loop, luminance, mat2, max, mix, nodeObject, NodeUpdateType, normalize, passTexture, PI, property, reflect, sin, smoothstep, sqrt, tan, texture, uniform, unpackRGBToNormal, uv, vec2, vec3, vec4, context, isBackgroundDepth } from 'three/tsl';
2
+ import { HalfFloatType, MathUtils, Matrix4, NodeMaterial, QuadMesh, RendererUtils, RenderTarget, Node, Vector2 } from 'three/webgpu';
3
3
  import { bindAnalyticNoise } from '../utils/RNoise.js';
4
4
  import { ENV_RAY_LENGTH_THRESHOLD } from '../utils/SpecularHelpers.js';
5
5
 
@@ -32,14 +32,7 @@ const vogelDisk = Fn( ( [ i, radius ] ) => {
32
32
  const r = radius.mul( sqrt( i.add( 0.5 ).div( sampleCount ) ) );
33
33
  return vec2( cos( theta ), sin( theta ) ).mul( r );
34
34
 
35
- } ).setLayout( {
36
- name: 'vogelDisk',
37
- type: 'vec2',
38
- inputs: [
39
- { name: 'i', type: 'float' },
40
- { name: 'radius', type: 'float' }
41
- ]
42
- } );
35
+ }, { i: 'float', radius: 'float', return: 'vec2' } );
43
36
 
44
37
  /**
45
38
  * Chromatic color-similarity distance between two linear base colors (albedo).
@@ -66,24 +59,9 @@ const diffuseColorDistance = Fn( ( [ a, b, compressLuma ] ) => {
66
59
 
67
60
  return dLuma.add( dChroma.mul( DIFFUSE_CHROMA_WEIGHT ) );
68
61
 
69
- } ).setLayout( {
70
- name: 'diffuseColorDistance',
71
- type: 'float',
72
- inputs: [
73
- { name: 'a', type: 'vec3' },
74
- { name: 'b', type: 'vec3' },
75
- { name: 'compressLuma', type: 'float' }
76
- ]
77
- } );
62
+ }, { a: 'vec3', b: 'vec3', compressLuma: 'float', return: 'float' } );
78
63
 
79
- const _temporalWeight = Fn( ( [ x, strength ] ) => float( 1 ).div( x.pow( strength ) ) ).setLayout( {
80
- name: 'temporalWeight',
81
- type: 'float',
82
- inputs: [
83
- { name: 'x', type: 'float' },
84
- { name: 'strength', type: 'float' }
85
- ]
86
- } );
64
+ const _temporalWeight = Fn( ( [ x, strength ] ) => float( 1 ).div( x.pow( strength ) ), { x: 'float', strength: 'float', return: 'float' } );
87
65
 
88
66
  /**
89
67
  * Temporal accumulation variance factor in `[0, 1]`. Higher values mean more history confidence.
@@ -94,14 +72,7 @@ const getTemporalVarianceFactor = Fn( ( [ frameNum, strength ] ) => {
94
72
 
95
73
  return _temporalWeight( frameNum, strength ).max( 0.05 );
96
74
 
97
- } ).setLayout( {
98
- name: 'getTemporalVarianceFactor',
99
- type: 'float',
100
- inputs: [
101
- { name: 'frameNum', type: 'float' },
102
- { name: 'strength', type: 'float' }
103
- ]
104
- } );
75
+ }, { frameNum: 'float', strength: 'float', return: 'float' } );
105
76
 
106
77
  /**
107
78
  * World-space frustum height at `viewZ`. Algorithm originally from REBLUR (NRD).
@@ -113,14 +84,7 @@ const computeFrustumSize = Fn( ( [ viewZ, tanHalfFovY ] ) => {
113
84
 
114
85
  return float( 2 ).mul( viewZ ).mul( tanHalfFovY );
115
86
 
116
- } ).setLayout( {
117
- name: 'computeFrustumSize',
118
- type: 'float',
119
- inputs: [
120
- { name: 'viewZ', type: 'float' },
121
- { name: 'tanHalfFovY', type: 'float' }
122
- ]
123
- } );
87
+ }, { viewZ: 'float', tanHalfFovY: 'float', return: 'float' } );
124
88
 
125
89
  /**
126
90
  * Maps world-space SSR ray length to `[0, 1]`. Environment rays (`worldRayLength == 0`) map to `1`.
@@ -131,26 +95,18 @@ const computeFrustumSize = Fn( ( [ viewZ, tanHalfFovY ] ) => {
131
95
  const computeHitDistFactor = Fn( ( [ worldRayLength, viewZ, tanHalfFovY ] ) => {
132
96
 
133
97
  const frustumSize = computeFrustumSize( viewZ, tanHalfFovY );
134
- const factor = worldRayLength.div( frustumSize.max( 1e-6 ) ).clamp( 0, 1 );
98
+ const factor = worldRayLength.div( frustumSize.max( EPSILON ) ).clamp( 0, 1 );
135
99
 
136
100
  return factor;
137
101
 
138
- } ).setLayout( {
139
- name: 'computeHitDistFactor',
140
- type: 'float',
141
- inputs: [
142
- { name: 'worldRayLength', type: 'float' },
143
- { name: 'viewZ', type: 'float' },
144
- { name: 'tanHalfFovY', type: 'float' }
145
- ]
146
- } );
102
+ }, { worldRayLength: 'float', viewZ: 'float', tanHalfFovY: 'float', return: 'float' } );
147
103
 
148
104
  /**
149
105
  * Maps an AO factor for edge-stopping comparisons.
150
106
  *
151
107
  * @tsl
152
108
  */
153
- const mapAo = Fn( ( [ aoVal ] ) => aoVal.pow( 0.1 ) );
109
+ const mapAo = Fn( ( [ aoVal ] ) => aoVal.pow( 0.1 ), { aoVal: 'float', return: 'float' } );
154
110
 
155
111
  /**
156
112
  * Specular dominant direction — smooth surfaces lean toward reflection, rough toward normal.
@@ -161,15 +117,7 @@ const getSpecularDominantDirection = Fn( ( [ N, V, roughness ] ) => {
161
117
 
162
118
  return normalize( mix( N, reflect( V.negate(), N ), roughness.oneMinus() ) );
163
119
 
164
- } ).setLayout( {
165
- name: 'getSpecularDominantDirection',
166
- type: 'vec3',
167
- inputs: [
168
- { name: 'N', type: 'vec3' },
169
- { name: 'V', type: 'vec3' },
170
- { name: 'roughness', type: 'float' }
171
- ]
172
- } );
120
+ }, { N: 'vec3', V: 'vec3', roughness: 'float', return: 'vec3' } );
173
121
 
174
122
  /**
175
123
  * GGX inverse-CDF: half-angle tangent enclosing `percent` of the specular lobe volume.
@@ -180,16 +128,9 @@ const getSpecularDominantDirection = Fn( ( [ N, V, roughness ] ) => {
180
128
  const specularLobeTanHalfAngle = Fn( ( [ roughness, percent ] ) => {
181
129
 
182
130
  const alpha = roughness.mul( roughness );
183
- return alpha.mul( sqrt( percent.div( float( 1 ).sub( percent ).max( 1e-6 ) ) ) );
184
-
185
- } ).setLayout( {
186
- name: 'specularLobeTanHalfAngle',
187
- type: 'float',
188
- inputs: [
189
- { name: 'roughness', type: 'float' },
190
- { name: 'percent', type: 'float' }
191
- ]
192
- } );
131
+ return alpha.mul( sqrt( percent.div( float( 1 ).sub( percent ).max( EPSILON ) ) ) );
132
+
133
+ }, { roughness: 'float', percent: 'float', return: 'float' } );
193
134
 
194
135
  const EXP_WEIGHT_SCALE = 4;
195
136
  const NORMAL_ENCODING_ERROR = 1.5 / 255;
@@ -211,15 +152,7 @@ const lobeNormalFalloff = Fn( ( [ roughness, aggressivity, invNormalPhi ] ) => {
211
152
  const invHalfAngle = float( 1 ).div( lobeHalfAngle );
212
153
  return invHalfAngle.mul( invHalfAngle ).mul( 2 * EXP_WEIGHT_SCALE );
213
154
 
214
- } ).setLayout( {
215
- name: 'lobeNormalFalloff',
216
- type: 'float',
217
- inputs: [
218
- { name: 'roughness', type: 'float' },
219
- { name: 'aggressivity', type: 'float' },
220
- { name: 'invNormalPhi', type: 'float' }
221
- ]
222
- } );
155
+ }, { roughness: 'float', aggressivity: 'float', invNormalPhi: 'float', return: 'float' } );
223
156
 
224
157
  /**
225
158
  * Adaptive lobe normal edge-stopping weight
@@ -237,15 +170,7 @@ const lobeNormalWeight = Fn( ( [ viewNormal, nNormalV, lobeFalloff ] ) => {
237
170
 
238
171
  return exp( cosA.sub( 1 ).mul( lobeFalloff ) );
239
172
 
240
- } ).setLayout( {
241
- name: 'lobeNormalWeight',
242
- type: 'float',
243
- inputs: [
244
- { name: 'viewNormal', type: 'vec3' },
245
- { name: 'nNormalV', type: 'vec3' },
246
- { name: 'lobeFalloff', type: 'float' }
247
- ]
248
- } );
173
+ }, { viewNormal: 'vec3', nNormalV: 'vec3', lobeFalloff: 'float', return: 'float' } );
249
174
 
250
175
  /**
251
176
  * View-space plane distance between two surface points (edge-stopping geometry term).
@@ -256,15 +181,7 @@ const planeDistance = Fn( ( [ position, nPosition, normal ] ) => {
256
181
 
257
182
  return abs( dot( position.sub( nPosition ), normal ) );
258
183
 
259
- } ).setLayout( {
260
- name: 'planeDistance',
261
- type: 'float',
262
- inputs: [
263
- { name: 'position', type: 'vec3' },
264
- { name: 'nPosition', type: 'vec3' },
265
- { name: 'normal', type: 'vec3' },
266
- ]
267
- } );
184
+ }, { position: 'vec3', nPosition: 'vec3', normal: 'vec3', return: 'float' } );
268
185
 
269
186
  /**
270
187
  * Inverse-luminance temporal blend with optional adaptive trust (Karis-style).
@@ -286,18 +203,6 @@ const karisTemporalBlend = Fn( ( [ denoisedRgb, denoisedRaw, a, flickerSuppressi
286
203
  const wRaw = aTrust.div( luminance( denoisedRaw ).mul( effFlicker ).mul( 10 ).add( 1 ) );
287
204
  return denoisedRgb.mul( wHist ).add( denoisedRaw.mul( wRaw ) ).div( wHist.add( wRaw ).max( EPSILON ) );
288
205
 
289
- } ).setLayout( {
290
- name: 'karisTemporalBlend',
291
- type: 'vec3',
292
- inputs: [
293
- { name: 'denoisedRgb', type: 'vec3' },
294
- { name: 'denoisedRaw', type: 'vec3' },
295
- { name: 'a', type: 'float' },
296
- { name: 'flickerSuppression', type: 'float' },
297
- { name: 'adaptiveTrust', type: 'float' },
298
- { name: 'nbhdMeanLuma', type: 'float' },
299
- { name: 'nbhdStddevLuma', type: 'float' }
300
- ]
301
206
  } );
302
207
 
303
208
  const toTextureNode = ( value ) => {
@@ -337,10 +242,10 @@ const toTextureNode = ( value ) => {
337
242
  * The denoising kernel is selected at construction time via `mode`:
338
243
  * `'diffuse'` (SSGI) or `'specular'` (SSR). The kernel uses a fixed 8-sample Vogel disk.
339
244
  *
340
- * @augments TempNode
245
+ * @augments Node
341
246
  * @three_import import { recurrentDenoise } from 'three/addons/tsl/display/RecurrentDenoiseNode.js';
342
247
  */
343
- class RecurrentDenoiseNode extends TempNode {
248
+ class RecurrentDenoiseNode extends Node {
344
249
 
345
250
  static get type() {
346
251
 
@@ -496,7 +401,6 @@ class RecurrentDenoiseNode extends TempNode {
496
401
 
497
402
  if ( needsRestart === true ) {
498
403
 
499
- renderer.initRenderTarget( this._renderTarget );
500
404
  renderer.setRenderTarget( this._renderTarget );
501
405
  renderer.clear();
502
406
  renderer.setRenderTarget( null );
@@ -522,7 +426,7 @@ class RecurrentDenoiseNode extends TempNode {
522
426
  const angle = r.mul( 2 ).mul( PI );
523
427
  return mat2( cos( angle ), sin( angle ).negate(), sin( angle ), cos( angle ) );
524
428
 
525
- } );
429
+ }, { r: 'float', return: 'mat2' } );
526
430
 
527
431
  const sampleTexture = ( uvCoord ) => texture( this.textureNode, uvCoord ).max( 0 );
528
432
  const sampleRaw = ( uvCoord ) => this.rawNode?.sample( uvCoord )?.max( 0 ) ?? vec3( 0 ).max( 0 );
@@ -588,13 +492,6 @@ class RecurrentDenoiseNode extends TempNode {
588
492
  // vec3( avgRayLength, meanLuma, stddevLuma )
589
493
  return vec4( avgRayLength, meanLuma, stddevLuma, hasEnvRay.toFloat() );
590
494
 
591
- } ).setLayout( {
592
- name: 'getNeighborhoodStats',
593
- type: 'vec4',
594
- inputs: [
595
- { name: 'uvCoord', type: 'vec2' },
596
- { name: 'centerSample', type: 'vec4' }
597
- ]
598
495
  } );
599
496
 
600
497
  const denoiseFn = Fn( ( [ uvCoord ] ) => {
@@ -870,7 +767,7 @@ class RecurrentDenoiseNode extends TempNode {
870
767
 
871
768
  };
872
769
 
873
- If( depth.greaterThanEqual( 1.0 ), () => {
770
+ If( isBackgroundDepth( depth ), () => {
874
771
 
875
772
  Discard();
876
773
 
@@ -908,8 +805,8 @@ export default RecurrentDenoiseNode;
908
805
  * @param {RecurrentDenoiseNodeOptions} [options={}]
909
806
  * @returns {RecurrentDenoiseNode}
910
807
  */
911
- export const recurrentDenoise = ( inputTexture, camera, options = {} ) => nodeObject( new RecurrentDenoiseNode(
808
+ export const recurrentDenoise = ( inputTexture, camera, options = {} ) => new RecurrentDenoiseNode(
912
809
  toTextureNode( inputTexture ),
913
810
  camera,
914
811
  options
915
- ) );
812
+ );
@@ -1,4 +1,4 @@
1
- import { HalfFloatType, LinearFilter, NearestFilter, RenderTarget, Texture, Vector2, QuadMesh, NodeMaterial, TempNode, RendererUtils } from 'three/webgpu';
1
+ import { HalfFloatType, LinearFilter, NearestFilter, RenderTarget, Texture, Vector2, QuadMesh, NodeMaterial, Node, RendererUtils } from 'three/webgpu';
2
2
  import { abs, Fn, NodeUpdateType, uv, uniform, convertToTexture, vec2, vec4, passTexture, max, step, dot, float, texture, If, Loop, int, Break, sqrt, sign, mix, context } from 'three/tsl';
3
3
 
4
4
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
@@ -14,10 +14,10 @@ let _rendererState;
14
14
  * Used Preset: SMAA 1x Medium (with color edge detection)
15
15
  * Reference: {@link https://github.com/iryoku/smaa/releases/tag/v2.8}.
16
16
  *
17
- * @augments TempNode
17
+ * @augments Node
18
18
  * @three_import import { smaa } from 'three/addons/tsl/display/SMAANode.js';
19
19
  */
20
- class SMAANode extends TempNode {
20
+ class SMAANode extends Node {
21
21
 
22
22
  static get type() {
23
23
 
@@ -1,5 +1,5 @@
1
- import { RenderTarget, Vector2, TempNode, QuadMesh, NodeMaterial, RendererUtils, RedFormat } from 'three/webgpu';
2
- import { reference, logarithmicDepthToViewZ, viewZToPerspectiveDepth, getViewPosition, getScreenPositionFromClip, vogelDiskSample, interleavedGradientNoise, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, vec4, int, dot, max, clamp, length, screenCoordinate, PI2, texture, passTexture, context } from 'three/tsl';
1
+ import { RenderTarget, Vector2, Node, QuadMesh, NodeMaterial, RendererUtils, RedFormat } from 'three/webgpu';
2
+ import { reference, getViewPosition, getScreenPositionFromClip, vogelDiskSample, interleavedGradientNoise, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, vec4, int, dot, max, clamp, length, screenCoordinate, PI2, texture, passTexture, context, isBackgroundDepth, projectionDepth } from 'three/tsl';
3
3
  import { depthAwareBlur } from './depthAwareBlur.js';
4
4
 
5
5
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
@@ -26,10 +26,10 @@ let _rendererState;
26
26
  * renderPipeline.outputNode = scenePassColor.mul( aoPass.r );
27
27
  * ```
28
28
  *
29
- * @augments TempNode
29
+ * @augments Node
30
30
  * @three_import import { ssao } from 'three/addons/tsl/display/SSAONode.js';
31
31
  */
32
- class SSAONode extends TempNode {
32
+ class SSAONode extends Node {
33
33
 
34
34
  static get type() {
35
35
 
@@ -320,21 +320,7 @@ class SSAONode extends TempNode {
320
320
 
321
321
  const uvNode = uv();
322
322
 
323
- const sampleDepth = ( uv ) => {
324
-
325
- const depth = this.depthNode.sample( uv ).r;
326
-
327
- if ( builder.renderer.logarithmicDepthBuffer === true ) {
328
-
329
- const viewZ = logarithmicDepthToViewZ( depth, this._cameraNear, this._cameraFar );
330
-
331
- return viewZToPerspectiveDepth( viewZ, this._cameraNear, this._cameraFar );
332
-
333
- }
334
-
335
- return depth;
336
-
337
- };
323
+ const sampleDepth = ( uv ) => projectionDepth( this.depthNode.sample( uv ).r, this._cameraNear, this._cameraFar );
338
324
 
339
325
  // ambient occlusion
340
326
 
@@ -342,7 +328,7 @@ class SSAONode extends TempNode {
342
328
 
343
329
  const depth = sampleDepth( uvNode ).toVar();
344
330
 
345
- depth.greaterThanEqual( 1.0 ).discard();
331
+ isBackgroundDepth( depth ).discard();
346
332
 
347
333
  const viewPosition = getViewPosition( uvNode, depth, this._cameraProjectionMatrixInverse ).toVar();
348
334
  const viewNormal = this.normalNode.sample( uvNode ).rgb.normalize().toVar();
@@ -1,5 +1,5 @@
1
- import { RenderTarget, Vector2, TempNode, QuadMesh, NodeMaterial, RendererUtils, MathUtils, RGBFormat, RedFormat, UnsignedInt101111Type, UnsignedByteType } from 'three/webgpu';
2
- import { clamp, normalize, reference, Fn, NodeUpdateType, uniform, vec4, passTexture, uv, logarithmicDepthToViewZ, viewZToPerspectiveDepth, getViewPosition, screenCoordinate, float, sub, fract, dot, vec2, rand, vec3, Loop, mul, PI, cos, sin, uint, cross, acos, sign, pow, luminance, If, max, abs, Break, sqrt, HALF_PI, div, ceil, shiftRight, convertToTexture, bool, getNormalFromDepth, countOneBits, interleavedGradientNoise, property, outputStruct, context } from 'three/tsl';
1
+ import { RenderTarget, Vector2, Node, QuadMesh, NodeMaterial, RendererUtils, MathUtils, RGBFormat, RedFormat, UnsignedInt101111Type, UnsignedByteType } from 'three/webgpu';
2
+ import { clamp, normalize, reference, Fn, NodeUpdateType, uniform, vec4, passTexture, uv, getViewPosition, screenCoordinate, float, sub, fract, dot, vec2, rand, vec3, Loop, mul, PI, cos, sin, uint, cross, acos, sign, pow, luminance, If, max, abs, Break, sqrt, HALF_PI, div, ceil, shiftRight, convertToTexture, bool, getNormalFromDepth, countOneBits, interleavedGradientNoise, property, outputStruct, context, isBackgroundDepth, min, projectionDepth } from 'three/tsl';
3
3
 
4
4
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
5
5
  const _size = /*@__PURE__*/ new Vector2();
@@ -37,10 +37,10 @@ let _rendererState;
37
37
  * - Medium: `sliceCount` of `3`, `stepCount` of `8`.
38
38
  * - High: `sliceCount` of `4`, `stepCount` of `12`.
39
39
  *
40
- * @augments TempNode
40
+ * @augments Node
41
41
  * @three_import import { ssgi } from 'three/addons/tsl/display/SSGINode.js';
42
42
  */
43
- class SSGINode extends TempNode {
43
+ class SSGINode extends Node {
44
44
 
45
45
  static get type() {
46
46
 
@@ -83,6 +83,16 @@ class SSGINode extends TempNode {
83
83
  */
84
84
  this.normalNode = normalNode;
85
85
 
86
+ /**
87
+ * The resolution scale. Values towards `0.5` noticeably increase noise, so it's
88
+ * recommended to lower the renderer's pixel ratio first. Use this property only
89
+ * for fine-tuning performance.
90
+ *
91
+ * @type {number}
92
+ * @default 1
93
+ */
94
+ this.resolutionScale = 1;
95
+
86
96
  /**
87
97
  * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
88
98
  * its effect once per frame in `updateBefore()`.
@@ -226,6 +236,14 @@ class SSGINode extends TempNode {
226
236
  */
227
237
  this._temporalOffset = uniform( 0 );
228
238
 
239
+ /**
240
+ * Resolution scale uniform.
241
+ *
242
+ * @private
243
+ * @type {UniformNode<float>}
244
+ */
245
+ this._resolutionScale = uniform( 0 );
246
+
229
247
  /**
230
248
  * Represents the projection matrix of the scene's camera.
231
249
  *
@@ -342,6 +360,10 @@ class SSGINode extends TempNode {
342
360
  */
343
361
  setSize( width, height ) {
344
362
 
363
+ width = Math.round( this.resolutionScale * width );
364
+ height = Math.round( this.resolutionScale * height );
365
+
366
+ this._resolutionScale.value = this.resolutionScale;
345
367
  this._resolution.value.set( width, height );
346
368
  this._ssgiRenderTarget.setSize( width, height );
347
369
 
@@ -421,19 +443,16 @@ class SSGINode extends TempNode {
421
443
  const MAX_RAY = uint( 32 );
422
444
  const globalOccludedBitfield = uint( 0 );
423
445
 
424
- const sampleDepth = ( uv ) => {
446
+ const sampleDepth = ( uv ) => projectionDepth( this.depthNode.sample( uv ).r, this._cameraNear, this._cameraFar );
425
447
 
426
- const depth = this.depthNode.sample( uv ).r;
448
+ const sampleCenterDepth = ( uv ) => {
427
449
 
428
- if ( builder.renderer.logarithmicDepthBuffer === true ) {
450
+ // Sidestep the nearest-rounding during depth access for the unjittered center pixel to avoid banding
429
451
 
430
- const viewZ = logarithmicDepthToViewZ( depth, this._cameraNear, this._cameraFar );
452
+ const g = this.depthNode.gather().sample( uv );
453
+ const depth = builder.renderer.reversedDepthBuffer === true ? max( max( g.x, g.y ), max( g.z, g.w ) ) : min( min( g.x, g.y ), min( g.z, g.w ) );
431
454
 
432
- return viewZToPerspectiveDepth( viewZ, this._cameraNear, this._cameraFar );
433
-
434
- }
435
-
436
- return depth;
455
+ return projectionDepth( depth, this._cameraNear, this._cameraFar );
437
456
 
438
457
  };
439
458
 
@@ -446,13 +465,7 @@ class SSGINode extends TempNode {
446
465
 
447
466
  return float( 0.25 ).mul( sub( position.y, position.x ).bitAnd( 3 ) );
448
467
 
449
- } ).setLayout( {
450
- name: 'spatialOffsets',
451
- type: 'float',
452
- inputs: [
453
- { name: 'position', type: 'vec2' }
454
- ]
455
- } );
468
+ }, { position: 'vec2', return: 'float' } );
456
469
 
457
470
  const GTAOFastAcos = Fn( ( [ value ] ) => {
458
471
 
@@ -464,13 +477,7 @@ class SSGINode extends TempNode {
464
477
 
465
478
  return vec2( x, y );
466
479
 
467
- } ).setLayout( {
468
- name: 'GTAOFastAcos',
469
- type: 'vec2',
470
- inputs: [
471
- { name: 'value', type: 'vec2' }
472
- ]
473
- } );
480
+ }, { value: 'vec2', return: 'vec2' } );
474
481
 
475
482
  const horizonSampling = Fn( ( [ directionIsRight, stepRadius, radiusVS, viewPosition, slideDirTexelSize, initialRayStep, uvNode, viewDir, viewNormal, n ] ) => {
476
483
 
@@ -563,9 +570,9 @@ class SSGINode extends TempNode {
563
570
 
564
571
  const gi = Fn( () => {
565
572
 
566
- const depth = sampleDepth( uvNode ).toVar();
573
+ const depth = this._resolutionScale.lessThan( 1 ).select( sampleCenterDepth( uvNode ), sampleDepth( uvNode ) ).toConst();
567
574
 
568
- depth.greaterThanEqual( 1.0 ).discard();
575
+ isBackgroundDepth( depth ).discard();
569
576
 
570
577
  const viewPosition = getViewPosition( uvNode, depth, this._cameraProjectionMatrixInverse ).toVar();
571
578
  const viewNormal = sampleNormal( uvNode ).toVar();