@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
@@ -17,7 +17,7 @@ import { BokehShader } from '../shaders/BokehShader.js';
17
17
  *
18
18
  * ```js
19
19
  * const bokehPass = new BokehPass( scene, camera, {
20
- * focus: 500
20
+ * focus: 500,
21
21
  * aperture: 5,
22
22
  * maxblur: 0.01
23
23
  * } );
@@ -250,7 +250,7 @@ class GTAOPass extends Pass {
250
250
  this.height = height;
251
251
 
252
252
  this.gtaoRenderTarget.setSize( width, height );
253
- this.normalRenderTarget.setSize( width, height );
253
+ if ( this.normalRenderTarget ) this.normalRenderTarget.setSize( width, height );
254
254
  this.pdRenderTarget.setSize( width, height );
255
255
 
256
256
  this.gtaoMaterial.uniforms.resolution.value.set( width, height );
@@ -270,7 +270,7 @@ class GTAOPass extends Pass {
270
270
 
271
271
  this.gtaoNoiseTexture.dispose();
272
272
  this.pdNoiseTexture.dispose();
273
- this.normalRenderTarget.dispose();
273
+ if ( this.normalRenderTarget ) this.normalRenderTarget.dispose();
274
274
  this.gtaoRenderTarget.dispose();
275
275
  this.pdRenderTarget.dispose();
276
276
  this.normalMaterial.dispose();
@@ -296,10 +296,13 @@ class GTAOPass extends Pass {
296
296
  /**
297
297
  * Configures the GBuffer of this pass. If no arguments are passed,
298
298
  * the pass creates an internal render target for holding depth
299
- * and normal data.
299
+ * and normal data. External depth and normal data must use separate
300
+ * textures and remain owned by the caller.
301
+ * If no normal texture is supplied, normals are reconstructed from depth
302
+ * for AO and denoising, and the normal output displays black.
300
303
  *
301
304
  * @param {DepthTexture} [depthTexture] - The depth texture.
302
- * @param {DepthTexture} [normalTexture] - The normal texture.
305
+ * @param {Texture} [normalTexture] - The normal texture.
303
306
  */
304
307
  setGBuffer( depthTexture, normalTexture ) {
305
308
 
@@ -311,34 +314,39 @@ class GTAOPass extends Pass {
311
314
 
312
315
  } else {
313
316
 
314
- this.depthTexture = new DepthTexture();
315
- this.depthTexture.format = DepthStencilFormat;
316
- this.depthTexture.type = UnsignedInt248Type;
317
- this.normalRenderTarget = new WebGLRenderTarget( this.width, this.height, {
318
- minFilter: NearestFilter,
319
- magFilter: NearestFilter,
320
- type: HalfFloatType,
321
- depthTexture: this.depthTexture
322
- } );
317
+ if ( this.normalRenderTarget === undefined ) {
318
+
319
+ const depthTexture = new DepthTexture();
320
+ depthTexture.format = DepthStencilFormat;
321
+ depthTexture.type = UnsignedInt248Type;
322
+ this.normalRenderTarget = new WebGLRenderTarget( this.width, this.height, {
323
+ minFilter: NearestFilter,
324
+ magFilter: NearestFilter,
325
+ type: HalfFloatType,
326
+ depthTexture: depthTexture
327
+ } );
328
+
329
+ }
330
+
331
+ this.depthTexture = this.normalRenderTarget.depthTexture;
323
332
  this.normalTexture = this.normalRenderTarget.texture;
324
333
  this._renderGBuffer = true;
325
334
 
326
335
  }
327
336
 
328
337
  const normalVectorType = ( this.normalTexture ) ? 1 : 0;
329
- const depthValueSource = ( this.depthTexture === this.normalTexture ) ? 'w' : 'x';
330
338
 
331
339
  this.gtaoMaterial.defines.NORMAL_VECTOR_TYPE = normalVectorType;
332
- this.gtaoMaterial.defines.DEPTH_SWIZZLING = depthValueSource;
340
+ this.gtaoMaterial.needsUpdate = true;
333
341
  this.gtaoMaterial.uniforms.tNormal.value = this.normalTexture;
334
342
  this.gtaoMaterial.uniforms.tDepth.value = this.depthTexture;
335
343
 
336
344
  this.pdMaterial.defines.NORMAL_VECTOR_TYPE = normalVectorType;
337
- this.pdMaterial.defines.DEPTH_SWIZZLING = depthValueSource;
345
+ this.pdMaterial.needsUpdate = true;
338
346
  this.pdMaterial.uniforms.tNormal.value = this.normalTexture;
339
347
  this.pdMaterial.uniforms.tDepth.value = this.depthTexture;
340
348
 
341
- this.depthRenderMaterial.uniforms.tDepth.value = this.normalRenderTarget.depthTexture;
349
+ this.depthRenderMaterial.uniforms.tDepth.value = this.depthTexture;
342
350
 
343
351
  }
344
352
 
@@ -562,7 +570,7 @@ class GTAOPass extends Pass {
562
570
 
563
571
  case GTAOPass.OUTPUT.Normal:
564
572
 
565
- this.copyMaterial.uniforms.tDiffuse.value = this.normalRenderTarget.texture;
573
+ this.copyMaterial.uniforms.tDiffuse.value = this.normalTexture || null;
566
574
  this.copyMaterial.blending = NoBlending;
567
575
  this._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
568
576
 
@@ -108,6 +108,7 @@ class SVGRenderer {
108
108
  _clearColor = new Color(),
109
109
 
110
110
  _vector3 = new Vector3(), // Needed for PointLight
111
+ _vector3b = new Vector3(), // Needed for DirectionalLight
111
112
  _centroid = new Vector3(),
112
113
  _normal = new Vector3(),
113
114
  _normalViewMatrix = new Matrix3(),
@@ -532,9 +533,9 @@ class SVGRenderer {
532
533
 
533
534
  if ( light.isDirectionalLight ) {
534
535
 
535
- const lightPosition = _vector3.setFromMatrixPosition( light.matrixWorld ).normalize();
536
+ const lightDirection = _vector3.setFromMatrixPosition( light.matrixWorld ).sub( _vector3b.setFromMatrixPosition( light.target.matrixWorld ) ).normalize();
536
537
 
537
- let amount = normal.dot( lightPosition );
538
+ let amount = normal.dot( lightDirection );
538
539
 
539
540
  if ( amount <= 0 ) continue;
540
541
 
@@ -29,7 +29,6 @@ const GTAOShader = {
29
29
  PERSPECTIVE_CAMERA: 1,
30
30
  SAMPLES: 16,
31
31
  NORMAL_VECTOR_TYPE: 1,
32
- DEPTH_SWIZZLING: 'x',
33
32
  SCREEN_SPACE_RADIUS: 0,
34
33
  SCREEN_SPACE_RADIUS_SCALE: 100.0,
35
34
  SCENE_CLIP_BOX: 0,
@@ -102,11 +101,11 @@ const GTAOShader = {
102
101
  }
103
102
 
104
103
  float getDepth(const vec2 uv) {
105
- return textureLod(tDepth, uv.xy, 0.0).DEPTH_SWIZZLING;
104
+ return textureLod(tDepth, uv.xy, 0.0).r;
106
105
  }
107
106
 
108
107
  float fetchDepth(const ivec2 uv) {
109
- return texelFetch(tDepth, uv.xy, 0).DEPTH_SWIZZLING;
108
+ return texelFetch(tDepth, uv.xy, 0).r;
110
109
  }
111
110
 
112
111
  float getViewZ(const in float depth) {
@@ -208,7 +207,11 @@ const GTAOShader = {
208
207
  vec4 sampleDir = vec4(cos(angle), sin(angle), 0., 0.5 + 0.5 * noiseTexel.w);
209
208
  sampleDir.xyz = normalize(kernelMatrix * sampleDir.xyz);
210
209
 
211
- vec3 viewDir = normalize(-viewPos.xyz);
210
+ #if PERSPECTIVE_CAMERA == 1
211
+ vec3 viewDir = normalize(-viewPos.xyz);
212
+ #else
213
+ vec3 viewDir = vec3(0., 0., 1.);
214
+ #endif
212
215
  vec3 sliceBitangent = normalize(cross(sampleDir.xyz, viewDir));
213
216
  vec3 sliceTangent = cross(sliceBitangent, viewDir);
214
217
  vec3 normalInSlice = normalize(viewNormal - sliceBitangent * dot(viewNormal, sliceBitangent));
@@ -27,7 +27,6 @@ const PoissonDenoiseShader = {
27
27
  'SAMPLES': 16,
28
28
  'SAMPLE_VECTORS': generatePdSamplePointInitializer( 16, 2, 1 ),
29
29
  'NORMAL_VECTOR_TYPE': 1,
30
- 'DEPTH_VALUE_SOURCE': 0,
31
30
  },
32
31
 
33
32
  uniforms: {
@@ -97,19 +96,11 @@ const PoissonDenoiseShader = {
97
96
  }
98
97
 
99
98
  float getDepth(const vec2 uv) {
100
- #if DEPTH_VALUE_SOURCE == 1
101
- return textureLod(tDepth, uv.xy, 0.0).a;
102
- #else
103
99
  return textureLod(tDepth, uv.xy, 0.0).r;
104
- #endif
105
100
  }
106
101
 
107
102
  float fetchDepth(const ivec2 uv) {
108
- #if DEPTH_VALUE_SOURCE == 1
109
- return texelFetch(tDepth, uv.xy, 0).a;
110
- #else
111
- return texelFetch(tDepth, uv.xy, 0).r;
112
- #endif
103
+ return texelFetch(tDepth, uv.xy, 0).r;
113
104
  }
114
105
 
115
106
  vec3 computeNormalFromDepth(const vec2 uv) {
@@ -5,6 +5,7 @@ import {
5
5
  Color,
6
6
  UniformsLib,
7
7
  UniformsUtils,
8
+ PMREMGenerator,
8
9
  } from 'three';
9
10
  import {
10
11
  context,
@@ -24,6 +25,7 @@ import {
24
25
  GLSLNodeBuilder,
25
26
  BasicNodeLibrary,
26
27
  WebGLCapabilities,
28
+ PMREMNode,
27
29
  } from 'three/webgpu';
28
30
 
29
31
  // Limitations
@@ -60,7 +62,7 @@ function generateUniformsList( program, uniforms ) {
60
62
 
61
63
  }
62
64
 
63
- // overrides shadow nodes to use the built in shadow textures
65
+ // Adapts nodes to use WebGLRenderer resources.
64
66
  class WebGLNodeBuilder extends GLSLNodeBuilder {
65
67
 
66
68
  addNode( node ) {
@@ -79,6 +81,10 @@ class WebGLNodeBuilder extends GLSLNodeBuilder {
79
81
 
80
82
  };
81
83
 
84
+ } else if ( node instanceof PMREMNode && node._generator === null ) {
85
+
86
+ node._generator = new PMREMGenerator( this.renderer._renderer );
87
+
82
88
  }
83
89
 
84
90
  super.addNode( node );
@@ -184,6 +190,8 @@ class RendererProxy {
184
190
 
185
191
  constructor( renderer ) {
186
192
 
193
+ this._renderer = renderer;
194
+
187
195
  const backend = {
188
196
  isWebGPUBackend: false,
189
197
  extensions: renderer.extensions,
@@ -531,6 +539,7 @@ export class WebGLNodesHandler {
531
539
  fogColor: { value: new Color() },
532
540
  fogNear: { value: 0 },
533
541
  fogFar: { value: 0 },
542
+ fogDensity: { value: 0 },
534
543
  envMapIntensity: { value: 0 },
535
544
  ...UniformsUtils.clone( UniformsLib.lights )
536
545
  };
@@ -560,16 +569,19 @@ export class WebGLNodesHandler {
560
569
  }
561
570
 
562
571
  // init uniforms
563
- const builderUniforms = [ ...builder.uniforms.vertex, ...builder.uniforms.fragment ];
564
- for ( const uniform of builderUniforms ) {
572
+ for ( const shaderStage of [ 'vertex', 'fragment' ] ) {
573
+
574
+ for ( const uniform of builder.uniforms[ shaderStage ] ) {
565
575
 
566
- if ( uniform.type === 'buffer' ) {
576
+ if ( uniform.type === 'buffer' ) {
567
577
 
568
- // buffer uniforms are all nested in groups
569
- const group = new UniformsGroup();
570
- group.name = uniform.node.name;
571
- group.uniforms = [ uniform ];
572
- uniformsGroups.push( group );
578
+ // buffer uniforms are all nested in groups
579
+ const group = new UniformsGroup();
580
+ group.name = builder.getUniformBufferName( uniform, shaderStage );
581
+ group.uniforms = [ uniform ];
582
+ uniformsGroups.push( group );
583
+
584
+ }
573
585
 
574
586
  }
575
587
 
@@ -1,4 +1,4 @@
1
- import { RenderTarget, Vector2, QuadMesh, NodeMaterial, RendererUtils, TempNode, NodeUpdateType } from 'three/webgpu';
1
+ import { RenderTarget, Vector2, QuadMesh, NodeMaterial, RendererUtils, Node, NodeUpdateType } from 'three/webgpu';
2
2
  import { nodeObject, Fn, float, uv, texture, passTexture, sign, max, convertToTexture } from 'three/tsl';
3
3
 
4
4
  const _size = /*@__PURE__*/ new Vector2();
@@ -9,10 +9,10 @@ let _rendererState;
9
9
  /**
10
10
  * Post processing node for creating an after image effect.
11
11
  *
12
- * @augments TempNode
12
+ * @augments Node
13
13
  * @three_import import { afterImage } from 'three/addons/tsl/display/AfterImageNode.js';
14
14
  */
15
- class AfterImageNode extends TempNode {
15
+ class AfterImageNode extends Node {
16
16
 
17
17
  static get type() {
18
18
 
@@ -1,4 +1,4 @@
1
- import { RenderTarget, Vector2, NodeMaterial, RendererUtils, QuadMesh, TempNode, NodeUpdateType } from 'three/webgpu';
1
+ import { RenderTarget, Vector2, NodeMaterial, RendererUtils, QuadMesh, Node, NodeUpdateType } from 'three/webgpu';
2
2
  import { Fn, float, uv, uniform, convertToTexture, vec2, vec4, passTexture, luminance, abs, exp, max, context } from 'three/tsl';
3
3
 
4
4
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
@@ -16,10 +16,10 @@ let _rendererState;
16
16
  *
17
17
  * Reference: {@link https://en.wikipedia.org/wiki/Bilateral_filter}
18
18
  *
19
- * @augments TempNode
19
+ * @augments Node
20
20
  * @three_import import { bilateralBlur } from 'three/addons/tsl/display/BilateralBlurNode.js';
21
21
  */
22
- class BilateralBlurNode extends TempNode {
22
+ class BilateralBlurNode extends Node {
23
23
 
24
24
  static get type() {
25
25
 
@@ -1,4 +1,4 @@
1
- import { HalfFloatType, RenderTarget, Vector2, Vector3, TempNode, QuadMesh, NodeMaterial, RendererUtils, NodeUpdateType } from 'three/webgpu';
1
+ import { HalfFloatType, RenderTarget, Vector2, Vector3, Node, QuadMesh, NodeMaterial, RendererUtils, NodeUpdateType } from 'three/webgpu';
2
2
  import { nodeObject, Fn, float, uv, passTexture, uniform, Loop, texture, luminance, smoothstep, mix, vec4, uniformArray, add, int, array, context } from 'three/tsl';
3
3
 
4
4
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
@@ -48,10 +48,10 @@ const luminosityHighPass = Fn( ( { input, threshold, smoothWidth } ) => {
48
48
  * const bloomPass = bloom( emissivePass );
49
49
  * renderPipeline.outputNode = scenePassColor.add( bloomPass );
50
50
  * ```
51
- * @augments TempNode
51
+ * @augments Node
52
52
  * @three_import import { bloom } from 'three/addons/tsl/display/BloomNode.js';
53
53
  */
54
- class BloomNode extends TempNode {
54
+ class BloomNode extends Node {
55
55
 
56
56
  static get type() {
57
57
 
@@ -1,4 +1,4 @@
1
- import { TempNode } from 'three/webgpu';
1
+ import { Node } from 'three/webgpu';
2
2
  import {
3
3
  nodeObject,
4
4
  Fn,
@@ -13,10 +13,10 @@ import {
13
13
  * This effect simulates the color fringing that occurs in real camera lenses
14
14
  * by separating and offsetting the red, green, and blue channels.
15
15
  *
16
- * @augments TempNode
16
+ * @augments Node
17
17
  * @three_import import { chromaticAberration } from 'three/addons/tsl/display/ChromaticAberrationNode.js';
18
18
  */
19
- class ChromaticAberrationNode extends TempNode {
19
+ class ChromaticAberrationNode extends Node {
20
20
 
21
21
  static get type() {
22
22
 
@@ -117,15 +117,6 @@ class ChromaticAberrationNode extends TempNode {
117
117
 
118
118
  return vec4( r, g, b, a );
119
119
 
120
- } ).setLayout( {
121
- name: 'ChromaticAberrationShader',
122
- type: 'vec4',
123
- inputs: [
124
- { name: 'uv', type: 'vec2' },
125
- { name: 'strength', type: 'float' },
126
- { name: 'center', type: 'vec2' },
127
- { name: 'scale', type: 'float' }
128
- ]
129
120
  } );
130
121
 
131
122
  const chromaticAberrationFn = Fn( () => {
@@ -162,13 +153,11 @@ export default ChromaticAberrationNode;
162
153
  */
163
154
  export const chromaticAberration = ( node, strength = 1.0, center = null, scale = 1.1 ) => {
164
155
 
165
- return nodeObject(
166
- new ChromaticAberrationNode(
167
- convertToTexture( node ),
168
- nodeObject( strength ),
169
- nodeObject( center ),
170
- nodeObject( scale )
171
- )
156
+ return new ChromaticAberrationNode(
157
+ convertToTexture( node ),
158
+ nodeObject( strength ),
159
+ nodeObject( center ),
160
+ nodeObject( scale )
172
161
  );
173
162
 
174
163
  };
@@ -1,5 +1,5 @@
1
- import { DataTexture, RepeatWrapping, Vector2, Vector3, TempNode } from 'three/webgpu';
2
- import { texture, getNormalFromDepth, getViewPosition, convertToTexture, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, luminance, vec2, vec3, vec4, uniformArray, int, dot, max, pow, abs, If, textureSize, sin, cos, mat2, PI, property } from 'three/tsl';
1
+ import { DataTexture, RepeatWrapping, Vector2, Vector3, Node } from 'three/webgpu';
2
+ import { texture, getNormalFromDepth, getViewPosition, convertToTexture, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, luminance, vec2, vec3, vec4, uniformArray, int, dot, max, pow, abs, If, textureSize, sin, cos, mat2, PI, property, isBackgroundDepth } from 'three/tsl';
3
3
  import { SimplexNoise } from '../../math/SimplexNoise.js';
4
4
 
5
5
  /**
@@ -10,10 +10,10 @@ import { SimplexNoise } from '../../math/SimplexNoise.js';
10
10
  *
11
11
  * Reference: {@link https://openaccess.thecvf.com/content/WACV2021/papers/Khademi_Self-Supervised_Poisson-Gaussian_Denoising_WACV_2021_paper.pdf}.
12
12
  *
13
- * @augments TempNode
13
+ * @augments Node
14
14
  * @three_import import { denoise } from 'three/addons/tsl/display/DenoiseNode.js';
15
15
  */
16
- class DenoiseNode extends TempNode {
16
+ class DenoiseNode extends Node {
17
17
 
18
18
  static get type() {
19
19
 
@@ -197,7 +197,7 @@ class DenoiseNode extends TempNode {
197
197
  const texel = sampleTexture( uvNode ).toVar();
198
198
  const result = property( 'vec4' );
199
199
 
200
- If( depth.greaterThanEqual( 1.0 ).or( dot( viewNormal, viewNormal ).equal( 0.0 ) ), () => {
200
+ If( isBackgroundDepth( depth ).or( dot( viewNormal, viewNormal ).equal( 0.0 ) ), () => {
201
201
 
202
202
  result.assign( texel );
203
203
 
@@ -1,4 +1,4 @@
1
- import { TempNode, NodeMaterial, NodeUpdateType, RenderTarget, Vector2, HalfFloatType, RedFormat, QuadMesh, RendererUtils } from 'three/webgpu';
1
+ import { Node, NodeMaterial, NodeUpdateType, RenderTarget, Vector2, HalfFloatType, RedFormat, QuadMesh, RendererUtils } from 'three/webgpu';
2
2
  import { convertToTexture, nodeObject, Fn, uniform, smoothstep, step, texture, max, uniformArray, outputStruct, property, vec4, vec3, uv, Loop, min, mix, float, context } from 'three/tsl';
3
3
  import { gaussianBlur } from './GaussianBlurNode.js';
4
4
 
@@ -12,10 +12,10 @@ let _rendererState;
12
12
  * - {@link https://pixelmischiefblog.wordpress.com/2016/11/25/bokeh-depth-of-field/}
13
13
  * - {@link https://www.adriancourreges.com/blog/2016/09/09/doom-2016-graphics-study/}
14
14
  *
15
- * @augments TempNode
15
+ * @augments Node
16
16
  * @three_import import { dof } from 'three/addons/tsl/display/DepthOfFieldNode.js';
17
17
  */
18
- class DepthOfFieldNode extends TempNode {
18
+ class DepthOfFieldNode extends Node {
19
19
 
20
20
  static get type() {
21
21
 
@@ -1,13 +1,13 @@
1
- import { TempNode } from 'three/webgpu';
1
+ import { Node } from 'three/webgpu';
2
2
  import { nodeObject, Fn, uv, vec2, vec3, sin, cos, add, vec4, screenSize } from 'three/tsl';
3
3
 
4
4
  /**
5
5
  * Post processing node for creating dot-screen effect.
6
6
  *
7
- * @augments TempNode
7
+ * @augments Node
8
8
  * @three_import import { dotScreen } from 'three/addons/tsl/display/DotScreenNode.js';
9
9
  */
10
- class DotScreenNode extends TempNode {
10
+ class DotScreenNode extends Node {
11
11
 
12
12
  static get type() {
13
13
 
@@ -1,4 +1,4 @@
1
- import { HalfFloatType, RenderTarget, Vector2, NodeMaterial, RendererUtils, QuadMesh, TempNode, NodeUpdateType } from 'three/webgpu';
1
+ import { HalfFloatType, RenderTarget, Vector2, NodeMaterial, RendererUtils, QuadMesh, Node, NodeUpdateType } from 'three/webgpu';
2
2
  import { Fn, float, vec2, vec3, vec4, ivec2, int, uv, floor, fract, abs, max, min, clamp, saturate, sqrt, select, exp2, nodeObject, passTexture, textureSize, textureLoad, convertToTexture, context } from 'three/tsl';
3
3
 
4
4
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
@@ -23,10 +23,10 @@ let _rendererState;
23
23
  *
24
24
  * Reference: {@link https://gpuopen.com/fidelityfx-superresolution/}.
25
25
  *
26
- * @augments TempNode
26
+ * @augments Node
27
27
  * @three_import import { fsr1 } from 'three/addons/tsl/display/fsr1/FSR1Node.js';
28
28
  */
29
- class FSR1Node extends TempNode {
29
+ class FSR1Node extends Node {
30
30
 
31
31
  static get type() {
32
32
 
@@ -1,14 +1,14 @@
1
- import { Vector2, TempNode } from 'three/webgpu';
1
+ import { Vector2, Node } from 'three/webgpu';
2
2
  import { Fn, uniformArray, select, float, NodeUpdateType, uv, dot, clamp, uniform, convertToTexture, smoothstep, bool, vec2, vec3, If, Loop, max, min, Break, abs } from 'three/tsl';
3
3
 
4
4
  /**
5
5
  * Post processing node for applying FXAA. This node requires sRGB input
6
6
  * so tone mapping and color space conversion must happen before the anti-aliasing.
7
7
  *
8
- * @augments TempNode
8
+ * @augments Node
9
9
  * @three_import import { fxaa } from 'three/addons/tsl/display/FXAANode.js';
10
10
  */
11
- class FXAANode extends TempNode {
11
+ class FXAANode extends Node {
12
12
 
13
13
  static get type() {
14
14
 
@@ -328,13 +328,6 @@ class FXAANode extends TempNode {
328
328
 
329
329
  return Sample( finalUv );
330
330
 
331
- } ).setLayout( {
332
- name: 'FxaaPixelShader',
333
- type: 'vec4',
334
- inputs: [
335
- { name: 'uv', type: 'vec2' },
336
- { name: 'texSize', type: 'vec2' },
337
- ]
338
331
  } );
339
332
 
340
333
  const fxaa = Fn( () => {
@@ -1,13 +1,13 @@
1
- import { TempNode } from 'three/webgpu';
1
+ import { Node } from 'three/webgpu';
2
2
  import { rand, Fn, fract, time, uv, clamp, mix, vec4, nodeProxy } from 'three/tsl';
3
3
 
4
4
  /**
5
5
  * Post processing node for creating a film grain effect.
6
6
  *
7
- * @augments TempNode
7
+ * @augments Node
8
8
  * @three_import import { film } from 'three/addons/tsl/display/FilmNode.js';
9
9
  */
10
- class FilmNode extends TempNode {
10
+ class FilmNode extends Node {
11
11
 
12
12
  static get type() {
13
13
 
@@ -1,5 +1,5 @@
1
- import { DataTexture, RenderTarget, RepeatWrapping, Vector2, Vector3, TempNode, QuadMesh, NodeMaterial, RendererUtils, RedFormat } from 'three/webgpu';
2
- import { reference, logarithmicDepthToViewZ, viewZToPerspectiveDepth, getNormalFromDepth, getViewPosition, getScreenPositionFromClip, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, vec2, vec3, vec4, int, dot, max, min, pow, abs, If, textureSize, sin, cos, PI, texture, passTexture, mat3, normalize, cross, mix, acos, clamp, interleavedGradientNoise, screenCoordinate, rand, context } from 'three/tsl';
1
+ import { DataTexture, RenderTarget, RepeatWrapping, Vector2, Vector3, Node, QuadMesh, NodeMaterial, RendererUtils, RedFormat } from 'three/webgpu';
2
+ import { reference, getNormalFromDepth, getViewPosition, getScreenPositionFromClip, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, vec2, vec3, vec4, int, dot, max, min, pow, abs, If, textureSize, sin, cos, PI, texture, passTexture, mat3, normalize, cross, mix, acos, clamp, interleavedGradientNoise, screenCoordinate, rand, context, isBackgroundDepth, projectionDepth } from 'three/tsl';
3
3
 
4
4
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
5
5
  const _size = /*@__PURE__*/ new Vector2();
@@ -43,10 +43,10 @@ let _rendererState;
43
43
  *
44
44
  * Reference: [Practical Real-Time Strategies for Accurate Indirect Occlusion](https://www.activision.com/cdn/research/Practical_Real_Time_Strategies_for_Accurate_Indirect_Occlusion_NEW%20VERSION_COLOR.pdf).
45
45
  *
46
- * @augments TempNode
46
+ * @augments Node
47
47
  * @three_import import { ao } from 'three/addons/tsl/display/GTAONode.js';
48
48
  */
49
- class GTAONode extends TempNode {
49
+ class GTAONode extends Node {
50
50
 
51
51
  static get type() {
52
52
 
@@ -228,6 +228,14 @@ class GTAONode extends TempNode {
228
228
  */
229
229
  this._cameraFar = reference( 'far', 'float', camera );
230
230
 
231
+ /**
232
+ * A reference to the scene's camera.
233
+ *
234
+ * @private
235
+ * @type {Camera}
236
+ */
237
+ this._camera = camera;
238
+
231
239
  /**
232
240
  * Temporal direction that influences the rotation angle for each slice.
233
241
  *
@@ -397,48 +405,48 @@ class GTAONode extends TempNode {
397
405
 
398
406
  const uvNode = uv();
399
407
 
400
- const linearizeDepth = ( depth ) => {
401
-
402
- if ( builder.renderer.logarithmicDepthBuffer === true ) {
403
-
404
- const viewZ = logarithmicDepthToViewZ( depth, this._cameraNear, this._cameraFar );
405
-
406
- return viewZToPerspectiveDepth( viewZ, this._cameraNear, this._cameraFar );
407
-
408
- }
409
-
410
- return depth;
411
-
412
- };
413
-
414
- const sampleDepth = ( uv ) => linearizeDepth( this.depthNode.sample( uv ).r );
408
+ const sampleDepth = ( uv ) => projectionDepth( this.depthNode.sample( uv ).r, this._cameraNear, this._cameraFar );
415
409
 
416
410
  const sampleCenterDepth = ( uv ) => {
417
411
 
418
412
  // Sidestep the nearest-rounding during depth access for the unjittered center pixel to avoid banding
419
413
 
420
414
  const g = this.depthNode.gather().sample( uv );
421
- const depth = min( min( g.x, g.y ), min( g.z, g.w ) );
415
+ 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 ) );
422
416
 
423
- return linearizeDepth( depth );
417
+ return projectionDepth( depth, this._cameraNear, this._cameraFar );
424
418
 
425
419
  };
426
420
 
427
421
  const sampleNoise = ( uv ) => this._noiseNode.sample( uv );
428
422
  const sampleNormal = ( uv ) => ( this.normalNode !== null ) ? this.normalNode.sample( uv ).rgb.normalize() : getNormalFromDepth( uv, this.depthNode.value, this._cameraProjectionMatrixInverse );
429
423
 
424
+ const isValidSample = Fn( ( [ uv, centerTexel, size ] ) => {
425
+
426
+ const texel = uv.mul( size ).floor().toConst();
427
+
428
+ // rejects off-screen samples and samples that fall into the center texel
429
+
430
+ return uv.x.greaterThan( 0 ).and( uv.x.lessThan( 1 ) ).and( uv.y.greaterThan( 0 ) ).and( uv.y.lessThan( 1 ) )
431
+ .and( texel.x.notEqual( centerTexel.x ).or( texel.y.notEqual( centerTexel.y ) ) );
432
+
433
+ }, { uv: 'vec2', centerTexel: 'vec2', size: 'vec2', return: 'bool' } );
434
+
430
435
  this._ao = Fn( () => {
431
436
 
432
437
  const depth = this._resolutionScale.lessThan( 1 ).select( sampleCenterDepth( uvNode ), sampleDepth( uvNode ) ).toConst();
433
438
 
434
- depth.greaterThanEqual( 1.0 ).discard();
439
+ isBackgroundDepth( depth ).discard();
440
+
441
+ const depthSize = vec2( textureSize( this.depthNode, 0 ) ).toConst();
442
+ const centerTexel = uvNode.mul( depthSize ).floor().toConst();
435
443
 
436
444
  const viewPosition = getViewPosition( uvNode, depth, this._cameraProjectionMatrixInverse ).toConst();
437
445
  const viewNormal = sampleNormal( uvNode ).toConst();
438
446
 
439
447
  const radius = this.radius;
440
448
  const invRadius = radius.reciprocal().toConst();
441
- const viewDir = normalize( viewPosition.xyz.negate() ).toConst();
449
+ const viewDir = ( this._camera.isPerspectiveCamera === true ) ? normalize( viewPosition.xyz.negate() ).toConst() : vec3( 0, 0, 1 ).toConst();
442
450
  const clipPosition = this._cameraProjectionMatrix.mul( vec4( viewPosition, 1.0 ) ).toConst();
443
451
 
444
452
  const noiseResolution = textureSize( this._noiseNode, 0 );
@@ -522,7 +530,7 @@ class GTAONode extends TempNode {
522
530
  const distFacX = min( lenX.mul( invRadius ), 1 );
523
531
  const distFacSqX = distFacX.mul( distFacX );
524
532
 
525
- If( abs( viewDeltaX.z ).lessThan( this.thickness ), () => {
533
+ If( isValidSample( sampleScreenPositionX, centerTexel, depthSize ).and( abs( viewDeltaX.z ).lessThan( this.thickness ) ), () => {
526
534
 
527
535
  cosHorizons.x.assign( mix( max( cosHorizons.x, sHX ), cosHorizons.x, distFacSqX ) );
528
536
 
@@ -541,7 +549,7 @@ class GTAONode extends TempNode {
541
549
  const distFacY = min( lenY.mul( invRadius ), 1 );
542
550
  const distFacSqY = distFacY.mul( distFacY );
543
551
 
544
- If( abs( viewDeltaY.z ).lessThan( this.thickness ), () => {
552
+ If( isValidSample( sampleScreenPositionY, centerTexel, depthSize ).and( abs( viewDeltaY.z ).lessThan( this.thickness ) ), () => {
545
553
 
546
554
  cosHorizons.y.assign( mix( max( cosHorizons.y, sHY ), cosHorizons.y, distFacSqY ) );
547
555
 
@@ -1,4 +1,4 @@
1
- import { RenderTarget, Vector2, NodeMaterial, RendererUtils, QuadMesh, TempNode, NodeUpdateType, warnOnce } from 'three/webgpu';
1
+ import { RenderTarget, Vector2, NodeMaterial, RendererUtils, QuadMesh, Node, NodeUpdateType, warnOnce } from 'three/webgpu';
2
2
  import { Fn, float, uv, uniform, convertToTexture, vec2, vec4, passTexture, premultiplyAlpha, unpremultiplyAlpha, context, texture } from 'three/tsl';
3
3
 
4
4
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
@@ -8,10 +8,10 @@ let _rendererState;
8
8
  /**
9
9
  * Post processing node for creating a gaussian blur effect.
10
10
  *
11
- * @augments TempNode
11
+ * @augments Node
12
12
  * @three_import import { gaussianBlur, premultipliedGaussianBlur } from 'three/addons/tsl/display/GaussianBlurNode.js';
13
13
  */
14
- class GaussianBlurNode extends TempNode {
14
+ class GaussianBlurNode extends Node {
15
15
 
16
16
  static get type() {
17
17