super-three 0.179.0 → 0.184.0

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 (696) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +14522 -12207
  4. package/build/three.core.js +12005 -10954
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +2270 -1005
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +63 -18
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +16573 -7890
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +16533 -7888
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  15. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  16. package/examples/jsm/Addons.js +12 -4
  17. package/examples/jsm/animation/CCDIKSolver.js +8 -4
  18. package/examples/jsm/controls/ArcballControls.js +15 -12
  19. package/examples/jsm/controls/DragControls.js +9 -59
  20. package/examples/jsm/controls/FirstPersonControls.js +61 -57
  21. package/examples/jsm/controls/FlyControls.js +5 -1
  22. package/examples/jsm/controls/MapControls.js +55 -1
  23. package/examples/jsm/controls/OrbitControls.js +113 -10
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +9 -9
  26. package/examples/jsm/controls/TransformControls.js +35 -3
  27. package/examples/jsm/csm/CSM.js +2 -1
  28. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  29. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  30. package/examples/jsm/effects/AsciiEffect.js +8 -8
  31. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  32. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  33. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  34. package/examples/jsm/exporters/EXRExporter.js +2 -2
  35. package/examples/jsm/exporters/GLTFExporter.js +185 -34
  36. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  37. package/examples/jsm/exporters/PLYExporter.js +1 -1
  38. package/examples/jsm/exporters/USDZExporter.js +31 -5
  39. package/examples/jsm/geometries/DecalGeometry.js +3 -3
  40. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  41. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  42. package/examples/jsm/geometries/TextGeometry.js +21 -2
  43. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  44. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  45. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  46. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  47. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  48. package/examples/jsm/helpers/ViewHelper.js +110 -13
  49. package/examples/jsm/inspector/Extension.js +13 -0
  50. package/examples/jsm/inspector/Inspector.js +542 -0
  51. package/examples/jsm/inspector/RendererInspector.js +425 -0
  52. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  53. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  55. package/examples/jsm/inspector/tabs/Console.js +238 -0
  56. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  57. package/examples/jsm/inspector/tabs/Parameters.js +380 -0
  58. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  59. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  60. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  61. package/examples/jsm/inspector/tabs/Viewer.js +268 -0
  62. package/examples/jsm/inspector/ui/Graph.js +95 -0
  63. package/examples/jsm/inspector/ui/Item.js +170 -0
  64. package/examples/jsm/inspector/ui/List.js +75 -0
  65. package/examples/jsm/inspector/ui/Profiler.js +2072 -0
  66. package/examples/jsm/inspector/ui/Style.js +1667 -0
  67. package/examples/jsm/inspector/ui/Tab.js +265 -0
  68. package/examples/jsm/inspector/ui/Values.js +476 -0
  69. package/examples/jsm/inspector/ui/utils.js +69 -0
  70. package/examples/jsm/interaction/InteractionManager.js +226 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  73. package/examples/jsm/interactive/SelectionBox.js +30 -0
  74. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  75. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  76. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  77. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  79. package/examples/jsm/lines/Line2.js +3 -3
  80. package/examples/jsm/lines/LineGeometry.js +1 -1
  81. package/examples/jsm/lines/LineMaterial.js +7 -1
  82. package/examples/jsm/lines/LineSegments2.js +2 -2
  83. package/examples/jsm/lines/Wireframe.js +2 -2
  84. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  85. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  86. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  87. package/examples/jsm/loaders/3DMLoader.js +5 -4
  88. package/examples/jsm/loaders/3MFLoader.js +3 -3
  89. package/examples/jsm/loaders/AMFLoader.js +2 -2
  90. package/examples/jsm/loaders/ColladaLoader.js +27 -4029
  91. package/examples/jsm/loaders/DDSLoader.js +1 -1
  92. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  93. package/examples/jsm/loaders/EXRLoader.js +692 -53
  94. package/examples/jsm/loaders/FBXLoader.js +237 -39
  95. package/examples/jsm/loaders/FontLoader.js +23 -5
  96. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  97. package/examples/jsm/loaders/GLTFLoader.js +159 -185
  98. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  99. package/examples/jsm/loaders/HDRLoader.js +485 -0
  100. package/examples/jsm/loaders/KMZLoader.js +5 -5
  101. package/examples/jsm/loaders/KTX2Loader.js +162 -53
  102. package/examples/jsm/loaders/KTXLoader.js +2 -2
  103. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  104. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  105. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  106. package/examples/jsm/loaders/LWOLoader.js +9 -41
  107. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  108. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  109. package/examples/jsm/loaders/OBJLoader.js +1 -1
  110. package/examples/jsm/loaders/PCDLoader.js +4 -2
  111. package/examples/jsm/loaders/PDBLoader.js +1 -1
  112. package/examples/jsm/loaders/RGBELoader.js +7 -473
  113. package/examples/jsm/loaders/SVGLoader.js +4 -4
  114. package/examples/jsm/loaders/TDSLoader.js +0 -2
  115. package/examples/jsm/loaders/TGALoader.js +0 -2
  116. package/examples/jsm/loaders/TTFLoader.js +4 -4
  117. package/examples/jsm/loaders/USDLoader.js +100 -40
  118. package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
  119. package/examples/jsm/loaders/VOXLoader.js +660 -117
  120. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  121. package/examples/jsm/loaders/VTKLoader.js +42 -25
  122. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  123. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  124. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  125. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  126. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  127. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  128. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  129. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  130. package/examples/jsm/math/ColorSpaces.js +19 -1
  131. package/examples/jsm/math/ConvexHull.js +3 -3
  132. package/examples/jsm/math/ImprovedNoise.js +1 -1
  133. package/examples/jsm/math/Lut.js +2 -2
  134. package/examples/jsm/math/Octree.js +131 -1
  135. package/examples/jsm/math/SimplexNoise.js +1 -1
  136. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  137. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  138. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  139. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  140. package/examples/jsm/misc/RollerCoaster.js +42 -4
  141. package/examples/jsm/misc/TubePainter.js +383 -40
  142. package/examples/jsm/misc/Volume.js +1 -2
  143. package/examples/jsm/misc/VolumeSlice.js +0 -1
  144. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  145. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  146. package/examples/jsm/objects/LensflareMesh.js +1 -1
  147. package/examples/jsm/objects/Reflector.js +73 -25
  148. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  149. package/examples/jsm/objects/Sky.js +91 -7
  150. package/examples/jsm/objects/SkyMesh.js +151 -17
  151. package/examples/jsm/objects/Water.js +7 -6
  152. package/examples/jsm/objects/Water2.js +5 -3
  153. package/examples/jsm/objects/WaterMesh.js +11 -13
  154. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  155. package/examples/jsm/physics/JoltPhysics.js +10 -6
  156. package/examples/jsm/physics/RapierPhysics.js +9 -5
  157. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  158. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  159. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  160. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  161. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  162. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  163. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  164. package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
  165. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  166. package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
  167. package/examples/jsm/renderers/Projector.js +246 -28
  168. package/examples/jsm/renderers/SVGRenderer.js +175 -61
  169. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  170. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  171. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  172. package/examples/jsm/shaders/BokehShader.js +1 -1
  173. package/examples/jsm/shaders/BokehShader2.js +1 -1
  174. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  175. package/examples/jsm/shaders/FocusShader.js +1 -1
  176. package/examples/jsm/shaders/GTAOShader.js +21 -8
  177. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  178. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  179. package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
  180. package/examples/jsm/shaders/SAOShader.js +17 -4
  181. package/examples/jsm/shaders/SSAOShader.js +11 -1
  182. package/examples/jsm/shaders/SSRShader.js +7 -6
  183. package/examples/jsm/shaders/SepiaShader.js +1 -1
  184. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  185. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  186. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
  187. package/examples/jsm/shaders/VignetteShader.js +1 -1
  188. package/examples/jsm/transpiler/AST.js +44 -0
  189. package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
  190. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  191. package/examples/jsm/transpiler/TSLEncoder.js +52 -10
  192. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  193. package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
  194. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  195. package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
  196. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  197. package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
  198. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  199. package/examples/jsm/tsl/display/BloomNode.js +23 -9
  200. package/examples/jsm/tsl/display/CRT.js +150 -0
  201. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
  202. package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
  203. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  204. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  205. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  206. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  207. package/examples/jsm/tsl/display/GTAONode.js +59 -9
  208. package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
  209. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  210. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  211. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  212. package/examples/jsm/tsl/display/OutlineNode.js +81 -20
  213. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  214. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  215. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  216. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  217. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  218. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  219. package/examples/jsm/tsl/display/SSGINode.js +638 -0
  220. package/examples/jsm/tsl/display/SSRNode.js +186 -69
  221. package/examples/jsm/tsl/display/SSSNode.js +490 -0
  222. package/examples/jsm/tsl/display/Shape.js +29 -0
  223. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  224. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  225. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  226. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  227. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  228. package/examples/jsm/tsl/display/TRAANode.js +381 -75
  229. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  230. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  231. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  232. package/examples/jsm/tsl/display/hashBlur.js +16 -18
  233. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  234. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  235. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  236. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  237. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  238. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  239. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  240. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  241. package/examples/jsm/tsl/math/Bayer.js +53 -3
  242. package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
  243. package/examples/jsm/utils/ColorUtils.js +76 -0
  244. package/examples/jsm/utils/LDrawUtils.js +1 -1
  245. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  246. package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
  247. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  248. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  249. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  250. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  251. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  252. package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
  253. package/package.json +27 -38
  254. package/src/Three.Core.js +7 -3
  255. package/src/Three.TSL.js +61 -16
  256. package/src/Three.WebGPU.Nodes.js +7 -0
  257. package/src/Three.WebGPU.js +11 -0
  258. package/src/Three.js +1 -0
  259. package/src/animation/AnimationAction.js +12 -2
  260. package/src/animation/AnimationClip.js +21 -5
  261. package/src/animation/AnimationMixer.js +9 -3
  262. package/src/animation/AnimationObjectGroup.js +2 -1
  263. package/src/animation/AnimationUtils.js +1 -12
  264. package/src/animation/KeyframeTrack.js +54 -14
  265. package/src/animation/PropertyBinding.js +12 -11
  266. package/src/animation/PropertyMixer.js +4 -4
  267. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  268. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  269. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  270. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  271. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  272. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  273. package/src/audio/Audio.js +11 -10
  274. package/src/audio/AudioContext.js +2 -2
  275. package/src/audio/AudioListener.js +5 -3
  276. package/src/audio/PositionalAudio.js +1 -1
  277. package/src/cameras/Camera.js +32 -2
  278. package/src/cameras/CubeCamera.js +20 -0
  279. package/src/cameras/OrthographicCamera.js +1 -1
  280. package/src/cameras/PerspectiveCamera.js +1 -1
  281. package/src/cameras/StereoCamera.js +2 -2
  282. package/src/constants.js +100 -7
  283. package/src/core/BufferAttribute.js +13 -1
  284. package/src/core/BufferGeometry.js +24 -12
  285. package/src/core/Clock.js +7 -0
  286. package/src/core/EventDispatcher.js +1 -1
  287. package/src/core/InterleavedBuffer.js +1 -1
  288. package/src/core/InterleavedBufferAttribute.js +3 -2
  289. package/src/core/Object3D.js +55 -6
  290. package/src/core/Raycaster.js +4 -3
  291. package/src/core/RenderTarget.js +14 -5
  292. package/src/extras/Controls.js +5 -4
  293. package/src/extras/DataUtils.js +2 -1
  294. package/src/extras/Earcut.js +6 -0
  295. package/src/extras/ImageUtils.js +2 -2
  296. package/src/extras/PMREMGenerator.js +259 -57
  297. package/src/extras/TextureUtils.js +6 -1
  298. package/src/extras/core/Curve.js +2 -1
  299. package/src/extras/core/Interpolations.js +7 -1
  300. package/src/extras/core/ShapePath.js +4 -4
  301. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  302. package/src/extras/lib/earcut.js +8 -8
  303. package/src/geometries/BoxGeometry.js +1 -0
  304. package/src/geometries/CapsuleGeometry.js +1 -0
  305. package/src/geometries/CircleGeometry.js +1 -0
  306. package/src/geometries/ConeGeometry.js +1 -0
  307. package/src/geometries/CylinderGeometry.js +1 -0
  308. package/src/geometries/DodecahedronGeometry.js +1 -0
  309. package/src/geometries/ExtrudeGeometry.js +10 -8
  310. package/src/geometries/IcosahedronGeometry.js +1 -0
  311. package/src/geometries/LatheGeometry.js +1 -0
  312. package/src/geometries/OctahedronGeometry.js +1 -0
  313. package/src/geometries/PlaneGeometry.js +1 -0
  314. package/src/geometries/PolyhedronGeometry.js +1 -1
  315. package/src/geometries/RingGeometry.js +1 -0
  316. package/src/geometries/ShapeGeometry.js +1 -0
  317. package/src/geometries/SphereGeometry.js +1 -0
  318. package/src/geometries/TetrahedronGeometry.js +1 -0
  319. package/src/geometries/TorusGeometry.js +9 -3
  320. package/src/geometries/TorusKnotGeometry.js +1 -0
  321. package/src/geometries/TubeGeometry.js +1 -0
  322. package/src/helpers/CameraHelper.js +4 -1
  323. package/src/helpers/DirectionalLightHelper.js +4 -1
  324. package/src/helpers/HemisphereLightHelper.js +3 -0
  325. package/src/helpers/PointLightHelper.js +1 -25
  326. package/src/helpers/SpotLightHelper.js +3 -0
  327. package/src/lights/DirectionalLight.js +13 -0
  328. package/src/lights/HemisphereLight.js +10 -0
  329. package/src/lights/Light.js +1 -11
  330. package/src/lights/LightProbe.js +0 -15
  331. package/src/lights/LightShadow.js +15 -6
  332. package/src/lights/PointLight.js +15 -0
  333. package/src/lights/PointLightShadow.js +0 -86
  334. package/src/lights/SpotLight.js +22 -1
  335. package/src/lights/webgpu/IESSpotLight.js +2 -1
  336. package/src/lights/webgpu/ProjectorLight.js +1 -1
  337. package/src/loaders/AnimationLoader.js +2 -1
  338. package/src/loaders/AudioLoader.js +13 -2
  339. package/src/loaders/BufferGeometryLoader.js +2 -2
  340. package/src/loaders/Cache.js +30 -2
  341. package/src/loaders/DataTextureLoader.js +6 -4
  342. package/src/loaders/FileLoader.js +4 -4
  343. package/src/loaders/ImageBitmapLoader.js +17 -13
  344. package/src/loaders/ImageLoader.js +1 -1
  345. package/src/loaders/Loader.js +9 -3
  346. package/src/loaders/LoadingManager.js +25 -3
  347. package/src/loaders/MaterialLoader.js +6 -4
  348. package/src/loaders/ObjectLoader.js +57 -17
  349. package/src/loaders/TextureLoader.js +1 -1
  350. package/src/loaders/nodes/NodeLoader.js +5 -4
  351. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  352. package/src/materials/Material.js +18 -3
  353. package/src/materials/MeshBasicMaterial.js +1 -0
  354. package/src/materials/MeshDepthMaterial.js +1 -0
  355. package/src/materials/MeshDistanceMaterial.js +1 -1
  356. package/src/materials/MeshLambertMaterial.js +11 -1
  357. package/src/materials/MeshMatcapMaterial.js +22 -0
  358. package/src/materials/MeshNormalMaterial.js +1 -0
  359. package/src/materials/MeshPhongMaterial.js +11 -1
  360. package/src/materials/MeshPhysicalMaterial.js +2 -1
  361. package/src/materials/MeshStandardMaterial.js +8 -7
  362. package/src/materials/MeshToonMaterial.js +2 -1
  363. package/src/materials/PointsMaterial.js +1 -1
  364. package/src/materials/ShaderMaterial.js +22 -3
  365. package/src/materials/nodes/Line2NodeMaterial.js +36 -9
  366. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  367. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  368. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  369. package/src/materials/nodes/NodeMaterial.js +95 -35
  370. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  371. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  372. package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
  373. package/src/math/Color.js +6 -5
  374. package/src/math/ColorManagement.js +9 -3
  375. package/src/math/Cylindrical.js +1 -1
  376. package/src/math/Euler.js +2 -1
  377. package/src/math/Line3.js +6 -5
  378. package/src/math/MathUtils.js +23 -21
  379. package/src/math/Matrix2.js +14 -10
  380. package/src/math/Matrix3.js +15 -11
  381. package/src/math/Matrix4.js +94 -81
  382. package/src/math/Plane.js +5 -4
  383. package/src/math/Quaternion.js +60 -84
  384. package/src/math/Sphere.js +1 -1
  385. package/src/math/Spherical.js +1 -1
  386. package/src/math/Triangle.js +1 -1
  387. package/src/math/Vector2.js +11 -7
  388. package/src/math/Vector3.js +15 -13
  389. package/src/math/Vector4.js +13 -9
  390. package/src/math/interpolants/BezierInterpolant.js +108 -0
  391. package/src/nodes/Nodes.js +86 -65
  392. package/src/nodes/TSL.js +11 -8
  393. package/src/nodes/accessors/Arrays.js +1 -1
  394. package/src/nodes/accessors/BatchNode.js +10 -10
  395. package/src/nodes/accessors/Bitangent.js +5 -5
  396. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  397. package/src/nodes/accessors/BufferNode.js +30 -3
  398. package/src/nodes/accessors/Camera.js +260 -13
  399. package/src/nodes/accessors/ClippingNode.js +10 -9
  400. package/src/nodes/accessors/CubeTextureNode.js +32 -6
  401. package/src/nodes/accessors/InstanceNode.js +164 -39
  402. package/src/nodes/accessors/Lights.js +10 -0
  403. package/src/nodes/accessors/MaterialNode.js +9 -1
  404. package/src/nodes/accessors/MaterialProperties.js +2 -5
  405. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  406. package/src/nodes/accessors/ModelNode.js +1 -1
  407. package/src/nodes/accessors/Normal.js +16 -15
  408. package/src/nodes/accessors/Object3DNode.js +2 -2
  409. package/src/nodes/accessors/Position.js +51 -3
  410. package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
  411. package/src/nodes/accessors/ReferenceNode.js +11 -10
  412. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  413. package/src/nodes/accessors/SceneProperties.js +47 -0
  414. package/src/nodes/accessors/SkinningNode.js +27 -26
  415. package/src/nodes/accessors/StorageBufferNode.js +14 -24
  416. package/src/nodes/accessors/StorageTextureNode.js +62 -9
  417. package/src/nodes/accessors/Tangent.js +4 -14
  418. package/src/nodes/accessors/Texture3DNode.js +41 -31
  419. package/src/nodes/accessors/TextureNode.js +193 -63
  420. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  421. package/src/nodes/accessors/UserDataNode.js +1 -2
  422. package/src/nodes/accessors/VertexColorNode.js +1 -2
  423. package/src/nodes/code/FunctionCallNode.js +25 -5
  424. package/src/nodes/code/FunctionNode.js +25 -3
  425. package/src/nodes/core/ArrayNode.js +22 -2
  426. package/src/nodes/core/AssignNode.js +6 -5
  427. package/src/nodes/core/AttributeNode.js +5 -4
  428. package/src/nodes/core/BypassNode.js +1 -1
  429. package/src/nodes/core/ContextNode.js +133 -15
  430. package/src/nodes/core/IndexNode.js +4 -3
  431. package/src/nodes/core/InputNode.js +3 -2
  432. package/src/nodes/core/InspectorNode.js +128 -0
  433. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
  434. package/src/nodes/core/MRTNode.js +48 -2
  435. package/src/nodes/core/Node.js +264 -46
  436. package/src/nodes/core/NodeBuilder.js +453 -87
  437. package/src/nodes/core/NodeError.js +28 -0
  438. package/src/nodes/core/NodeFrame.js +31 -23
  439. package/src/nodes/core/NodeFunction.js +2 -1
  440. package/src/nodes/core/NodeParser.js +2 -1
  441. package/src/nodes/core/NodeUniform.js +1 -1
  442. package/src/nodes/core/NodeUtils.js +25 -97
  443. package/src/nodes/core/OutputStructNode.js +12 -10
  444. package/src/nodes/core/ParameterNode.js +34 -3
  445. package/src/nodes/core/PropertyNode.js +26 -3
  446. package/src/nodes/core/StackNode.js +99 -23
  447. package/src/nodes/core/StackTrace.js +139 -0
  448. package/src/nodes/core/StructNode.js +22 -8
  449. package/src/nodes/core/StructTypeNode.js +13 -18
  450. package/src/nodes/core/SubBuildNode.js +4 -4
  451. package/src/nodes/core/UniformGroupNode.js +36 -6
  452. package/src/nodes/core/UniformNode.js +37 -13
  453. package/src/nodes/core/VarNode.js +96 -34
  454. package/src/nodes/core/VaryingNode.js +2 -18
  455. package/src/nodes/display/BlendModes.js +0 -63
  456. package/src/nodes/display/BumpMapNode.js +1 -1
  457. package/src/nodes/display/ColorAdjustment.js +18 -1
  458. package/src/nodes/display/ColorSpaceNode.js +3 -3
  459. package/src/nodes/display/FrontFacingNode.js +4 -8
  460. package/src/nodes/display/NormalMapNode.js +41 -5
  461. package/src/nodes/display/PassNode.js +175 -25
  462. package/src/nodes/display/RenderOutputNode.js +35 -9
  463. package/src/nodes/display/ScreenNode.js +47 -15
  464. package/src/nodes/display/ToneMappingNode.js +32 -5
  465. package/src/nodes/display/ToonOutlinePassNode.js +10 -2
  466. package/src/nodes/display/ViewportDepthNode.js +52 -4
  467. package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
  468. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  469. package/src/nodes/display/ViewportTextureNode.js +72 -14
  470. package/src/nodes/fog/Fog.js +18 -34
  471. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  472. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  473. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  474. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  475. package/src/nodes/functions/BasicLightingModel.js +2 -1
  476. package/src/nodes/functions/PhysicalLightingModel.js +128 -46
  477. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  478. package/src/nodes/geometry/RangeNode.js +44 -6
  479. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  480. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  481. package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
  482. package/src/nodes/gpgpu/ComputeNode.js +76 -38
  483. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  484. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
  485. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  486. package/src/nodes/lighting/EnvironmentNode.js +34 -9
  487. package/src/nodes/lighting/LightsNode.js +10 -32
  488. package/src/nodes/lighting/PointShadowNode.js +167 -148
  489. package/src/nodes/lighting/ShadowFilterNode.js +55 -65
  490. package/src/nodes/lighting/ShadowNode.js +189 -44
  491. package/src/nodes/math/BitcastNode.js +156 -0
  492. package/src/nodes/math/BitcountNode.js +433 -0
  493. package/src/nodes/math/ConditionalNode.js +25 -8
  494. package/src/nodes/math/MathNode.js +98 -57
  495. package/src/nodes/math/OperatorNode.js +8 -5
  496. package/src/nodes/math/PackFloatNode.js +98 -0
  497. package/src/nodes/math/UnpackFloatNode.js +96 -0
  498. package/src/nodes/pmrem/PMREMNode.js +1 -1
  499. package/src/nodes/pmrem/PMREMUtils.js +111 -2
  500. package/src/nodes/shapes/Shapes.js +1 -1
  501. package/src/nodes/tsl/TSLBase.js +6 -3
  502. package/src/nodes/tsl/TSLCore.js +488 -166
  503. package/src/nodes/utils/ArrayElementNode.js +14 -1
  504. package/src/nodes/utils/ConvertNode.js +1 -1
  505. package/src/nodes/utils/DebugNode.js +14 -13
  506. package/src/nodes/utils/EventNode.js +67 -2
  507. package/src/nodes/utils/FlipNode.js +1 -1
  508. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  509. package/src/nodes/utils/JoinNode.js +7 -4
  510. package/src/nodes/utils/LoopNode.js +20 -24
  511. package/src/nodes/utils/MemberNode.js +60 -8
  512. package/src/nodes/utils/Packing.js +13 -1
  513. package/src/nodes/utils/PostProcessingUtils.js +60 -1
  514. package/src/nodes/utils/RTTNode.js +14 -4
  515. package/src/nodes/utils/ReflectorNode.js +61 -11
  516. package/src/nodes/utils/Remap.js +48 -0
  517. package/src/nodes/utils/RotateNode.js +1 -1
  518. package/src/nodes/utils/SampleNode.js +12 -2
  519. package/src/nodes/utils/SetNode.js +1 -1
  520. package/src/nodes/utils/SplitNode.js +12 -1
  521. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  522. package/src/nodes/utils/Timer.js +0 -47
  523. package/src/nodes/utils/UVUtils.js +28 -0
  524. package/src/objects/BatchedMesh.js +46 -18
  525. package/src/objects/InstancedMesh.js +30 -3
  526. package/src/objects/LOD.js +1 -1
  527. package/src/objects/Line.js +3 -2
  528. package/src/objects/LineSegments.js +2 -1
  529. package/src/objects/Mesh.js +1 -1
  530. package/src/objects/Points.js +1 -1
  531. package/src/objects/Skeleton.js +12 -2
  532. package/src/objects/SkinnedMesh.js +29 -10
  533. package/src/objects/Sprite.js +4 -3
  534. package/src/renderers/WebGLRenderer.js +372 -179
  535. package/src/renderers/common/Animation.js +16 -4
  536. package/src/renderers/common/Attributes.js +16 -2
  537. package/src/renderers/common/Backend.js +137 -35
  538. package/src/renderers/common/Background.js +28 -14
  539. package/src/renderers/common/BindGroup.js +1 -16
  540. package/src/renderers/common/Binding.js +11 -0
  541. package/src/renderers/common/Bindings.js +83 -12
  542. package/src/renderers/common/BlendMode.js +143 -0
  543. package/src/renderers/common/Buffer.js +40 -0
  544. package/src/renderers/common/BundleGroup.js +1 -1
  545. package/src/renderers/common/CanvasTarget.js +341 -0
  546. package/src/renderers/common/ChainMap.js +30 -6
  547. package/src/renderers/common/ComputePipeline.js +1 -1
  548. package/src/renderers/common/CubeRenderTarget.js +51 -7
  549. package/src/renderers/common/DataMap.js +1 -1
  550. package/src/renderers/common/Geometries.js +55 -3
  551. package/src/renderers/common/Info.js +337 -6
  552. package/src/renderers/common/InspectorBase.js +151 -0
  553. package/src/renderers/common/Lighting.js +5 -21
  554. package/src/renderers/common/Pipelines.js +41 -8
  555. package/src/renderers/common/PostProcessing.js +9 -226
  556. package/src/renderers/common/QuadMesh.js +7 -1
  557. package/src/renderers/common/ReadbackBuffer.js +78 -0
  558. package/src/renderers/common/RenderBundle.js +3 -1
  559. package/src/renderers/common/RenderBundles.js +7 -3
  560. package/src/renderers/common/RenderContext.js +18 -2
  561. package/src/renderers/common/RenderContexts.js +33 -49
  562. package/src/renderers/common/RenderList.js +7 -3
  563. package/src/renderers/common/RenderLists.js +2 -1
  564. package/src/renderers/common/RenderObject.js +32 -6
  565. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  566. package/src/renderers/common/RenderObjects.js +22 -6
  567. package/src/renderers/common/RenderPipeline.js +232 -17
  568. package/src/renderers/common/Renderer.js +927 -335
  569. package/src/renderers/common/RendererUtils.js +9 -0
  570. package/src/renderers/common/SampledTexture.js +9 -1
  571. package/src/renderers/common/Sampler.js +52 -14
  572. package/src/renderers/common/StorageBuffer.js +13 -1
  573. package/src/renderers/common/StorageTexture.js +9 -1
  574. package/src/renderers/common/Textures.js +208 -47
  575. package/src/renderers/common/TimestampQueryPool.js +70 -6
  576. package/src/renderers/common/Uniform.js +8 -0
  577. package/src/renderers/common/UniformsGroup.js +64 -2
  578. package/src/renderers/common/XRManager.js +79 -51
  579. package/src/renderers/common/extras/PMREMGenerator.js +176 -79
  580. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  581. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  582. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
  583. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  584. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  585. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  586. package/src/renderers/shaders/DFGLUTData.js +49 -0
  587. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  588. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  589. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  590. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  591. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  592. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  593. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
  594. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  595. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  596. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  597. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  598. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  599. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  600. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  601. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  602. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
  603. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  604. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  605. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  606. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  607. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  608. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  609. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  610. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
  611. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  612. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  613. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  614. package/src/renderers/shaders/ShaderChunk.js +5 -3
  615. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  616. package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
  617. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  618. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  619. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  620. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  621. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  622. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  623. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  624. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  625. package/src/renderers/shaders/ShaderLib.js +7 -6
  626. package/src/renderers/shaders/UniformsLib.js +8 -5
  627. package/src/renderers/shaders/UniformsUtils.js +52 -9
  628. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  629. package/src/renderers/webgl/WebGLBackground.js +15 -15
  630. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  631. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  632. package/src/renderers/webgl/WebGLCapabilities.js +11 -5
  633. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  634. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  635. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  636. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  637. package/src/renderers/webgl/WebGLInfo.js +3 -1
  638. package/src/renderers/webgl/WebGLLights.js +18 -1
  639. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  640. package/src/renderers/webgl/WebGLObjects.js +3 -1
  641. package/src/renderers/webgl/WebGLOutput.js +270 -0
  642. package/src/renderers/webgl/WebGLProgram.js +63 -122
  643. package/src/renderers/webgl/WebGLPrograms.js +65 -52
  644. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  645. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  646. package/src/renderers/webgl/WebGLShadowMap.js +191 -26
  647. package/src/renderers/webgl/WebGLState.js +79 -40
  648. package/src/renderers/webgl/WebGLTextures.js +234 -68
  649. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  650. package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
  651. package/src/renderers/webgl/WebGLUtils.js +8 -3
  652. package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
  653. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  654. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
  655. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  656. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  657. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  658. package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
  659. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
  660. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
  661. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
  662. package/src/renderers/webgpu/WebGPUBackend.js +403 -253
  663. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  664. package/src/renderers/webgpu/WebGPURenderer.js +5 -3
  665. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
  666. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
  667. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
  668. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  669. package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
  670. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
  671. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
  672. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
  673. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
  674. package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
  675. package/src/renderers/webxr/WebXRController.js +12 -0
  676. package/src/renderers/webxr/WebXRManager.js +45 -29
  677. package/src/textures/CubeDepthTexture.js +76 -0
  678. package/src/textures/ExternalTexture.js +15 -4
  679. package/src/textures/HTMLTexture.js +74 -0
  680. package/src/textures/Source.js +5 -4
  681. package/src/textures/Texture.js +19 -7
  682. package/src/textures/VideoTexture.js +2 -3
  683. package/src/utils.js +344 -3
  684. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  685. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  686. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  687. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  688. package/src/nodes/accessors/SceneNode.js +0 -144
  689. package/src/nodes/code/ScriptableNode.js +0 -726
  690. package/src/nodes/code/ScriptableValueNode.js +0 -253
  691. package/src/nodes/display/PosterizeNode.js +0 -65
  692. package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
  693. package/src/nodes/utils/RemapNode.js +0 -125
  694. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  695. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  696. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -1,5 +1,5 @@
1
- import { DepthTexture, FloatType, RenderTarget, Vector2, TempNode, QuadMesh, NodeMaterial, RendererUtils, NodeUpdateType } from 'three/webgpu';
2
- import { Loop, int, exp, min, float, mul, uv, vec2, vec3, Fn, textureSize, orthographicDepthToViewZ, screenUV, nodeObject, uniform, vec4, passTexture, texture, perspectiveDepthToViewZ, positionView, reference } from 'three/tsl';
1
+ import { DepthTexture, FloatType, RenderTarget, Vector2, TempNode, QuadMesh, NodeMaterial, SpriteNodeMaterial, RendererUtils, NodeUpdateType } from 'three/webgpu';
2
+ import { Loop, int, exp, min, float, mul, uv, vec2, vec3, Fn, textureSize, orthographicDepthToViewZ, screenUV, nodeObject, uniform, vec4, passTexture, texture, perspectiveDepthToViewZ, positionView, reference, color } from 'three/tsl';
3
3
 
4
4
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
5
5
  const _size = /*@__PURE__*/ new Vector2();
@@ -13,7 +13,7 @@ let _rendererState;
13
13
  * gives you great flexibility in composing the final outline look depending on
14
14
  * your requirements.
15
15
  * ```js
16
- * const postProcessing = new THREE.PostProcessing( renderer );
16
+ * const renderPipeline = new THREE.RenderPipeline( renderer );
17
17
  *
18
18
  * const scenePass = pass( scene, camera );
19
19
  *
@@ -36,7 +36,7 @@ let _rendererState;
36
36
  * const { visibleEdge, hiddenEdge } = outlinePass;
37
37
  * const outlineColor = visibleEdge.mul( visibleEdgeColor ).add( hiddenEdge.mul( hiddenEdgeColor ) ).mul( edgeStrength );
38
38
  *
39
- * postProcessing.outputNode = outlineColor.add( scenePass );
39
+ * renderPipeline.outputNode = outlineColor.add( scenePass );
40
40
  * ```
41
41
  *
42
42
  * @augments TempNode
@@ -56,7 +56,7 @@ class OutlineNode extends TempNode {
56
56
  * @param {Scene} scene - A reference to the scene.
57
57
  * @param {Camera} camera - The camera the scene is rendered with.
58
58
  * @param {Object} params - The configuration parameters.
59
- * @param {Array<Object3D>} params.selectedObjects - An array of selected objects.
59
+ * @param {Array<Object3D>} [params.selectedObjects] - An array of selected objects.
60
60
  * @param {Node<float>} [params.edgeThickness=float(1)] - The thickness of the edges.
61
61
  * @param {Node<float>} [params.edgeGlow=float(0)] - Can be used for an animated glow/pulse effects.
62
62
  * @param {number} [params.downSampleRatio=2] - The downsample ratio.
@@ -293,9 +293,13 @@ class OutlineNode extends TempNode {
293
293
  * @type {NodeMaterial}
294
294
  */
295
295
  this._depthMaterial = new NodeMaterial();
296
- this._depthMaterial.fragmentNode = vec4( 0, 0, 0, 1 );
296
+ this._depthMaterial.colorNode = color( 0, 0, 0 );
297
297
  this._depthMaterial.name = 'OutlineNode.depth';
298
298
 
299
+ this._depthSpriteMaterial = new SpriteNodeMaterial();
300
+ this._depthSpriteMaterial.colorNode = color( 0, 0, 0 );
301
+ this._depthSpriteMaterial.name = 'OutlineNode.depthSprite';
302
+
299
303
  /**
300
304
  * The material for preparing the mask.
301
305
  *
@@ -305,6 +309,9 @@ class OutlineNode extends TempNode {
305
309
  this._prepareMaskMaterial = new NodeMaterial();
306
310
  this._prepareMaskMaterial.name = 'OutlineNode.prepareMask';
307
311
 
312
+ this._prepareMaskSpriteMaterial = new SpriteNodeMaterial();
313
+ this._prepareMaskSpriteMaterial.name = 'OutlineNode.prepareMaskSprite';
314
+
308
315
  /**
309
316
  * The copy material
310
317
  *
@@ -358,6 +365,17 @@ class OutlineNode extends TempNode {
358
365
  */
359
366
  this._selectionCache = new Set();
360
367
 
368
+ /**
369
+ * The number of selected objects from the previous frame. Used to detect
370
+ * the transition to an empty selection so the composite render target can
371
+ * be cleared once and avoid leaving a stale outline on screen.
372
+ *
373
+ * @private
374
+ * @type {number}
375
+ * @default 0
376
+ */
377
+ this._lastSelectionCount = 0;
378
+
361
379
  /**
362
380
  * The result of the effect is represented as a separate texture node.
363
381
  *
@@ -442,6 +460,35 @@ class OutlineNode extends TempNode {
442
460
  const { renderer } = frame;
443
461
  const { camera, scene } = this;
444
462
 
463
+ this._updateSelectionCache();
464
+
465
+ // If no objects are selected, all subsequent passes can be skipped since
466
+ // the outline would be empty anyway. The composite render target is cleared
467
+ // once when transitioning to an empty selection so a previously rendered
468
+ // outline does not linger on screen.
469
+
470
+ if ( this._selectionCache.size === 0 ) {
471
+
472
+ if ( this._lastSelectionCount > 0 ) {
473
+
474
+ _rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
475
+
476
+ renderer.setRenderTarget( this._renderTargetComposite );
477
+ renderer.setClearColor( 0x000000, 0 );
478
+ renderer.clear();
479
+
480
+ RendererUtils.restoreRendererState( renderer, _rendererState );
481
+
482
+ this._lastSelectionCount = 0;
483
+
484
+ }
485
+
486
+ return;
487
+
488
+ }
489
+
490
+ this._lastSelectionCount = this._selectionCache.size;
491
+
445
492
  _rendererState = RendererUtils.resetRendererAndSceneState( renderer, scene, _rendererState );
446
493
 
447
494
  //
@@ -453,40 +500,42 @@ class OutlineNode extends TempNode {
453
500
 
454
501
  renderer.setClearColor( 0xffffff, 1 );
455
502
 
456
- this._updateSelectionCache();
503
+ const currentSceneName = scene.name;
457
504
 
458
505
  // 1. Draw non-selected objects in the depth buffer
459
506
 
460
- scene.overrideMaterial = this._depthMaterial;
461
-
462
507
  renderer.setRenderTarget( this._renderTargetDepthBuffer );
463
- renderer.setRenderObjectFunction( ( object, ...params ) => {
508
+ renderer.setRenderObjectFunction( ( object, scene, camera, geometry, material, group, lightsNode, clippingContext ) => {
464
509
 
465
510
  if ( this._selectionCache.has( object ) === false ) {
466
511
 
467
- renderer.renderObject( object, ...params );
512
+ const overrideMaterial = object.isSprite ? this._depthSpriteMaterial : this._depthMaterial;
513
+
514
+ renderer.renderObject( object, scene, camera, geometry, overrideMaterial, group, lightsNode, clippingContext );
468
515
 
469
516
  }
470
517
 
471
518
  } );
472
519
 
520
+ scene.name = 'Outline [ Non-Selected Objects Pass ]';
473
521
  renderer.render( scene, camera );
474
522
 
475
523
  // 2. Draw only the selected objects by comparing the depth buffer of non-selected objects
476
524
 
477
- scene.overrideMaterial = this._prepareMaskMaterial;
478
-
479
525
  renderer.setRenderTarget( this._renderTargetMaskBuffer );
480
- renderer.setRenderObjectFunction( ( object, ...params ) => {
526
+ renderer.setRenderObjectFunction( ( object, scene, camera, geometry, material, group, lightsNode, clippingContext ) => {
481
527
 
482
528
  if ( this._selectionCache.has( object ) === true ) {
483
529
 
484
- renderer.renderObject( object, ...params );
530
+ const overrideMaterial = object.isSprite ? this._prepareMaskSpriteMaterial : this._prepareMaskMaterial;
531
+
532
+ renderer.renderObject( object, scene, camera, geometry, overrideMaterial, group, lightsNode, clippingContext );
485
533
 
486
534
  }
487
535
 
488
536
  } );
489
537
 
538
+ scene.name = 'Outline [ Selected Objects Pass ]';
490
539
  renderer.render( scene, camera );
491
540
 
492
541
  //
@@ -495,15 +544,19 @@ class OutlineNode extends TempNode {
495
544
 
496
545
  this._selectionCache.clear();
497
546
 
547
+ scene.name = currentSceneName;
548
+
498
549
  // 3. Downsample to (at least) half resolution
499
550
 
500
551
  _quadMesh.material = this._materialCopy;
552
+ _quadMesh.name = 'Outline [ Downsample ]';
501
553
  renderer.setRenderTarget( this._renderTargetMaskDownSampleBuffer );
502
554
  _quadMesh.render( renderer );
503
555
 
504
556
  // 4. Perform edge detection (half resolution)
505
557
 
506
558
  _quadMesh.material = this._edgeDetectionMaterial;
559
+ _quadMesh.name = 'Outline [ Edge Detection ]';
507
560
  renderer.setRenderTarget( this._renderTargetEdgeBuffer1 );
508
561
  _quadMesh.render( renderer );
509
562
 
@@ -513,6 +566,7 @@ class OutlineNode extends TempNode {
513
566
  this._blurDirection.value.copy( _BLUR_DIRECTION_X );
514
567
 
515
568
  _quadMesh.material = this._separableBlurMaterial;
569
+ _quadMesh.name = 'Outline [ Blur Half Resolution ]';
516
570
  renderer.setRenderTarget( this._renderTargetBlurBuffer1 );
517
571
  _quadMesh.render( renderer );
518
572
 
@@ -528,6 +582,7 @@ class OutlineNode extends TempNode {
528
582
  this._blurDirection.value.copy( _BLUR_DIRECTION_X );
529
583
 
530
584
  _quadMesh.material = this._separableBlurMaterial2;
585
+ _quadMesh.name = 'Outline [ Blur Quarter Resolution ]';
531
586
  renderer.setRenderTarget( this._renderTargetBlurBuffer2 );
532
587
  _quadMesh.render( renderer );
533
588
 
@@ -540,6 +595,7 @@ class OutlineNode extends TempNode {
540
595
  // 7. Composite
541
596
 
542
597
  _quadMesh.material = this._compositeMaterial;
598
+ _quadMesh.name = 'Outline [ Blur Quarter Resolution ]';
543
599
  renderer.setRenderTarget( this._renderTargetComposite );
544
600
  _quadMesh.render( renderer );
545
601
 
@@ -576,13 +632,16 @@ class OutlineNode extends TempNode {
576
632
  }
577
633
 
578
634
  const depthTest = positionView.z.lessThanEqual( viewZNode ).select( 1, 0 );
579
- return vec4( 0.0, depthTest, 1.0, 1.0 );
635
+ return vec3( 0.0, depthTest, 1.0 );
580
636
 
581
637
  };
582
638
 
583
- this._prepareMaskMaterial.fragmentNode = prepareMask();
639
+ this._prepareMaskMaterial.colorNode = prepareMask();
584
640
  this._prepareMaskMaterial.needsUpdate = true;
585
641
 
642
+ this._prepareMaskSpriteMaterial.colorNode = prepareMask();
643
+ this._prepareMaskSpriteMaterial.needsUpdate = true;
644
+
586
645
  // copy material
587
646
 
588
647
  this._materialCopy.fragmentNode = this._maskTextureUniform;
@@ -701,7 +760,9 @@ class OutlineNode extends TempNode {
701
760
  this._renderTargetComposite.dispose();
702
761
 
703
762
  this._depthMaterial.dispose();
763
+ this._depthSpriteMaterial.dispose();
704
764
  this._prepareMaskMaterial.dispose();
765
+ this._prepareMaskSpriteMaterial.dispose();
705
766
  this._materialCopy.dispose();
706
767
  this._edgeDetectionMaterial.dispose();
707
768
  this._separableBlurMaterial.dispose();
@@ -722,7 +783,7 @@ class OutlineNode extends TempNode {
722
783
  const selectedObject = this.selectedObjects[ i ];
723
784
  selectedObject.traverse( ( object ) => {
724
785
 
725
- if ( object.isMesh ) this._selectionCache.add( object );
786
+ if ( object.isMesh || object.isSprite ) this._selectionCache.add( object );
726
787
 
727
788
  } );
728
789
 
@@ -742,10 +803,10 @@ export default OutlineNode;
742
803
  * @param {Scene} scene - A reference to the scene.
743
804
  * @param {Camera} camera - The camera the scene is rendered with.
744
805
  * @param {Object} params - The configuration parameters.
745
- * @param {Array<Object3D>} params.selectedObjects - An array of selected objects.
806
+ * @param {Array<Object3D>} [params.selectedObjects] - An array of selected objects.
746
807
  * @param {Node<float>} [params.edgeThickness=float(1)] - The thickness of the edges.
747
808
  * @param {Node<float>} [params.edgeGlow=float(0)] - Can be used for animated glow/pulse effects.
748
809
  * @param {number} [params.downSampleRatio=2] - The downsample ratio.
749
810
  * @returns {OutlineNode}
750
811
  */
751
- export const outline = ( scene, camera, params ) => nodeObject( new OutlineNode( scene, camera, params ) );
812
+ export const outline = ( scene, camera, params ) => new OutlineNode( scene, camera, params );
@@ -1,5 +1,5 @@
1
1
  import { NodeMaterial } from 'three/webgpu';
2
- import { nodeObject, Fn, vec4, uv, If, mod, screenCoordinate } from 'three/tsl';
2
+ import { Fn, vec4, uv, If, mod, screenCoordinate } from 'three/tsl';
3
3
  import StereoCompositePassNode from './StereoCompositePassNode.js';
4
4
 
5
5
  /**
@@ -86,4 +86,4 @@ export default ParallaxBarrierPassNode;
86
86
  * @param {Camera} camera - The camera to render the scene with.
87
87
  * @returns {ParallaxBarrierPassNode}
88
88
  */
89
- export const parallaxBarrierPass = ( scene, camera ) => nodeObject( new ParallaxBarrierPassNode( scene, camera ) );
89
+ export const parallaxBarrierPass = ( scene, camera ) => new ParallaxBarrierPassNode( scene, camera );
@@ -74,18 +74,19 @@ class PixelationNode extends TempNode {
74
74
  /**
75
75
  * Uniform node that represents the resolution.
76
76
  *
77
+ * @private
77
78
  * @type {Node<vec4>}
78
79
  */
79
80
  this._resolution = uniform( new Vector4() );
80
81
 
81
82
  /**
82
- * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node updates
83
+ * The `updateType` is set to `NodeUpdateType.FRAME` since the node updates
83
84
  * its internal uniforms once per frame in `updateBefore()`.
84
85
  *
85
86
  * @type {string}
86
87
  * @default 'frame'
87
88
  */
88
- this.updateBeforeType = NodeUpdateType.FRAME;
89
+ this.updateType = NodeUpdateType.FRAME;
89
90
 
90
91
  }
91
92
 
@@ -94,7 +95,7 @@ class PixelationNode extends TempNode {
94
95
  *
95
96
  * @param {NodeFrame} frame - The current node frame.
96
97
  */
97
- updateBefore() {
98
+ update() {
98
99
 
99
100
  const map = this.textureNode.value;
100
101
 
@@ -193,7 +194,7 @@ class PixelationNode extends TempNode {
193
194
 
194
195
  const nei = property( 'float', 'nei' );
195
196
 
196
- If( this.normalEdgeStrength.greaterThan( 0.0 ), () => {
197
+ If( this.normalEdgeStrength.greaterThan( 0.0 ).and( normal.length().greaterThan( 0 ) ), () => {
197
198
 
198
199
  nei.assign( normalEdgeIndicator( depth, normal ) );
199
200
 
@@ -213,7 +214,7 @@ class PixelationNode extends TempNode {
213
214
 
214
215
  }
215
216
 
216
- const pixelation = ( node, depthNode, normalNode, pixelSize = 6, normalEdgeStrength = 0.3, depthEdgeStrength = 0.4 ) => nodeObject( new PixelationNode( convertToTexture( node ), convertToTexture( depthNode ), convertToTexture( normalNode ), nodeObject( pixelSize ), nodeObject( normalEdgeStrength ), nodeObject( depthEdgeStrength ) ) );
217
+ const pixelation = ( node, depthNode, normalNode, pixelSize = 6, normalEdgeStrength = 0.3, depthEdgeStrength = 0.4 ) => new PixelationNode( convertToTexture( node ), convertToTexture( depthNode ), convertToTexture( normalNode ), nodeObject( pixelSize ), nodeObject( normalEdgeStrength ), nodeObject( depthEdgeStrength ) );
217
218
 
218
219
  /**
219
220
  * A special render pass node that renders the scene with a pixelation effect.
@@ -329,6 +330,6 @@ class PixelationPassNode extends PassNode {
329
330
  * @param {Node<float> | number} [depthEdgeStrength=0.4] - The depth edge strength.
330
331
  * @returns {PixelationPassNode}
331
332
  */
332
- export const pixelationPass = ( scene, camera, pixelSize, normalEdgeStrength, depthEdgeStrength ) => nodeObject( new PixelationPassNode( scene, camera, pixelSize, normalEdgeStrength, depthEdgeStrength ) );
333
+ export const pixelationPass = ( scene, camera, pixelSize, normalEdgeStrength, depthEdgeStrength ) => new PixelationPassNode( scene, camera, pixelSize, normalEdgeStrength, depthEdgeStrength );
333
334
 
334
335
  export default PixelationPassNode;
@@ -1,5 +1,5 @@
1
1
  import { TempNode } from 'three/webgpu';
2
- import { nodeObject, Fn, uv, uniform, vec2, sin, cos, vec4, convertToTexture } from 'three/tsl';
2
+ import { Fn, uv, uniform, vec2, sin, cos, vec4, convertToTexture } from 'three/tsl';
3
3
 
4
4
  /**
5
5
  * Post processing node for shifting/splitting RGB color channels. The effect
@@ -93,4 +93,4 @@ export default RGBShiftNode;
93
93
  * @param {number} [angle=0] - Defines in which direction colors are shifted.
94
94
  * @returns {RGBShiftNode}
95
95
  */
96
- export const rgbShift = ( node, amount, angle ) => nodeObject( new RGBShiftNode( convertToTexture( node ), amount, angle ) );
96
+ export const rgbShift = ( node, amount, angle ) => new RGBShiftNode( convertToTexture( node ), amount, angle );
@@ -0,0 +1,263 @@
1
+ import { MeshBasicNodeMaterial, PassNode, UnsignedByteType, NearestFilter, CubeMapNode, MeshPhongNodeMaterial } from 'three/webgpu';
2
+ import { float, vec2, vec4, Fn, uv, varying, cameraProjectionMatrix, cameraViewMatrix, positionWorld, screenSize, materialColor, uint, texture, uniform, context, reflectVector } from 'three/tsl';
3
+
4
+ const _affineUv = varying( vec2() );
5
+ const _w = varying( float() );
6
+
7
+ const _clipSpaceRetro = Fn( () => {
8
+
9
+ const defaultPosition = cameraProjectionMatrix
10
+ .mul( cameraViewMatrix )
11
+ .mul( positionWorld );
12
+
13
+ const roundedPosition = defaultPosition.xy
14
+ .div( defaultPosition.w.mul( 2 ) )
15
+ .mul( screenSize.xy )
16
+ .round()
17
+ .div( screenSize.xy )
18
+ .mul( defaultPosition.w.mul( 2 ) );
19
+
20
+ _affineUv.assign( uv().mul( defaultPosition.w ) );
21
+ _w.assign( defaultPosition.w );
22
+
23
+ return vec4( roundedPosition.xy, defaultPosition.zw );
24
+
25
+ } )();
26
+
27
+ /**
28
+ * A post-processing pass that applies a retro PS1-style effect to the scene.
29
+ *
30
+ * This node renders the scene with classic PlayStation 1 visual characteristics:
31
+ * - **Vertex snapping**: Vertices are snapped to screen pixels, creating the iconic "wobbly" geometry
32
+ * - **Affine texture mapping**: Textures are sampled without perspective correction, resulting in distortion effects
33
+ * - **Low resolution**: Default 0.25 scale (typical 320x240 equivalent)
34
+ * - **Nearest-neighbor filtering**: Sharp pixelated textures without smoothing
35
+ *
36
+ * @augments PassNode
37
+ */
38
+ class RetroPassNode extends PassNode {
39
+
40
+ /**
41
+ * Creates a new RetroPassNode instance.
42
+ *
43
+ * @param {Scene} scene - The scene to render.
44
+ * @param {Camera} camera - The camera to render from.
45
+ * @param {Object} [options={}] - Additional options for the retro pass.
46
+ * @param {Node} [options.affineDistortion=null] - An optional node to apply affine distortion to UVs.
47
+ */
48
+ constructor( scene, camera, options = {} ) {
49
+
50
+ super( PassNode.COLOR, scene, camera );
51
+
52
+ const {
53
+ affineDistortion = null,
54
+ filterTextures = false
55
+ } = options;
56
+
57
+ this.setResolutionScale( .25 );
58
+
59
+ this.renderTarget.texture.type = UnsignedByteType;
60
+ this.renderTarget.texture.magFilter = NearestFilter;
61
+ this.renderTarget.texture.minFilter = NearestFilter;
62
+
63
+ this.affineDistortionNode = affineDistortion;
64
+
65
+ this.filterTextures = filterTextures;
66
+
67
+ this._materialCache = new Map();
68
+
69
+ }
70
+
71
+ /**
72
+ * Updates the retro pass before rendering.
73
+ *
74
+ * @override
75
+ * @param {Frame} frame - The current frame information.
76
+ * @returns {void}
77
+ */
78
+ updateBefore( frame ) {
79
+
80
+ const renderer = frame.renderer;
81
+
82
+ const currentRenderObjectFunction = renderer.getRenderObjectFunction();
83
+
84
+ renderer.setRenderObjectFunction( ( object, scene, camera, geometry, material, ...params ) => {
85
+
86
+ const retroMaterialData = this._materialCache.get( material );
87
+
88
+ let retroMaterial;
89
+
90
+ if ( retroMaterialData === undefined || retroMaterialData.version !== material.version ) {
91
+
92
+ if ( retroMaterialData !== undefined ) {
93
+
94
+ retroMaterialData.material.dispose();
95
+
96
+ }
97
+
98
+ if ( material.isMeshBasicMaterial || material.isMeshBasicNodeMaterial ) {
99
+
100
+ retroMaterial = new MeshBasicNodeMaterial();
101
+
102
+ } else {
103
+
104
+ retroMaterial = new MeshPhongNodeMaterial();
105
+
106
+ }
107
+
108
+ retroMaterial.colorNode = material.colorNode || null;
109
+ retroMaterial.opacityNode = material.opacityNode || null;
110
+ retroMaterial.positionNode = material.positionNode || null;
111
+ retroMaterial.vertexNode = material.vertexNode || _clipSpaceRetro;
112
+
113
+ let colorNode = material.colorNode || materialColor;
114
+
115
+ if ( material.isMeshStandardNodeMaterial || material.isMeshStandardMaterial ) {
116
+
117
+ const envMap = material.envMap || scene.environment;
118
+
119
+ if ( envMap ) {
120
+
121
+ const reflection = new CubeMapNode( texture( envMap ) );
122
+
123
+ let metalness;
124
+
125
+ if ( material.metalnessNode ) {
126
+
127
+ metalness = material.metalnessNode;
128
+
129
+ } else {
130
+
131
+ metalness = uniform( material.metalness ).onRenderUpdate( ( { material } ) => material.metalness );
132
+
133
+ if ( material.metalnessMap ) {
134
+
135
+ const textureUniform = texture( material.metalnessMap ).onRenderUpdate( ( { material } ) => material.metalnessMap );
136
+
137
+ metalness = metalness.mul( textureUniform.b );
138
+
139
+ }
140
+
141
+ }
142
+
143
+ colorNode = metalness.mix( colorNode, reflection );
144
+
145
+ }
146
+
147
+ }
148
+
149
+ retroMaterial.colorNode = colorNode;
150
+
151
+ //
152
+
153
+ const contextData = {};
154
+
155
+ if ( this.affineDistortionNode ) {
156
+
157
+ contextData.getUV = ( texture ) => {
158
+
159
+ let finalUV;
160
+
161
+ if ( texture.isCubeTextureNode ) {
162
+
163
+ finalUV = reflectVector;
164
+
165
+ } else {
166
+
167
+ finalUV = this.affineDistortionNode.mix( uv(), _affineUv.div( _w ) );
168
+
169
+ }
170
+
171
+ return finalUV;
172
+
173
+ };
174
+
175
+ }
176
+
177
+ if ( this.filterTextures !== true ) {
178
+
179
+ contextData.getTextureLevel = () => uint( 0 );
180
+
181
+ }
182
+
183
+ retroMaterial.contextNode = context( contextData );
184
+
185
+ //
186
+
187
+ this._materialCache.set( material, {
188
+ material: retroMaterial,
189
+ version: material.version
190
+ } );
191
+
192
+ } else {
193
+
194
+ retroMaterial = retroMaterialData.material;
195
+
196
+ }
197
+
198
+ for ( const property in material ) {
199
+
200
+ if ( retroMaterial[ property ] === undefined ) continue;
201
+
202
+ retroMaterial[ property ] = material[ property ];
203
+
204
+ }
205
+
206
+ renderer.renderObject( object, scene, camera, geometry, retroMaterial, ...params );
207
+
208
+ } );
209
+
210
+ super.updateBefore( frame );
211
+
212
+ renderer.setRenderObjectFunction( currentRenderObjectFunction );
213
+
214
+ }
215
+
216
+ /**
217
+ * Disposes the retro pass and its internal resources.
218
+ *
219
+ * @override
220
+ * @returns {void}
221
+ */
222
+ dispose() {
223
+
224
+ super.dispose();
225
+
226
+ this._materialCache.forEach( ( data ) => {
227
+
228
+ data.material.dispose();
229
+
230
+ } );
231
+
232
+ this._materialCache.clear();
233
+
234
+ }
235
+
236
+ }
237
+
238
+ export default RetroPassNode;
239
+
240
+ /**
241
+ * Creates a new RetroPassNode instance for PS1-style rendering.
242
+ *
243
+ * The retro pass applies vertex snapping, affine texture mapping, and low-resolution
244
+ * rendering to achieve an authentic PlayStation 1 aesthetic. Combine with other
245
+ * post-processing effects like dithering, posterization, and scanlines for full retro look.
246
+ *
247
+ * ```js
248
+ * // Combined with other effects
249
+ * let pipeline = retroPass( scene, camera );
250
+ * pipeline = bayerDither( pipeline, 32 );
251
+ * pipeline = posterize( pipeline, 32 );
252
+ * renderPipeline.outputNode = pipeline;
253
+ * ```
254
+ *
255
+ * @tsl
256
+ * @function
257
+ * @param {Scene} scene - The scene to render.
258
+ * @param {Camera} camera - The camera to render from.
259
+ * @param {Object} [options={}] - Additional options for the retro pass.
260
+ * @param {Node} [options.affineDistortion=null] - An optional node to apply affine distortion to UVs.
261
+ * @return {RetroPassNode} A new RetroPassNode instance.
262
+ */
263
+ export const retroPass = ( scene, camera, options = {} ) => new RetroPassNode( scene, camera, options );
@@ -1,5 +1,5 @@
1
1
  import { HalfFloatType, LinearFilter, NearestFilter, RenderTarget, Texture, Vector2, QuadMesh, NodeMaterial, TempNode, RendererUtils } from 'three/webgpu';
2
- import { abs, nodeObject, Fn, NodeUpdateType, uv, uniform, convertToTexture, varyingProperty, vec2, vec4, modelViewProjection, passTexture, max, step, dot, float, texture, If, Loop, int, Break, sqrt, sign, mix } from 'three/tsl';
2
+ import { abs, Fn, NodeUpdateType, uv, uniform, convertToTexture, varyingProperty, vec2, vec4, modelViewProjection, passTexture, max, step, dot, float, texture, If, Loop, int, Break, sqrt, sign, mix } from 'three/tsl';
3
3
 
4
4
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
5
5
  const _size = /*@__PURE__*/ new Vector2();
@@ -765,4 +765,4 @@ export default SMAANode;
765
765
  * @param {Node<vec4>} node - The node that represents the input of the effect.
766
766
  * @returns {SMAANode}
767
767
  */
768
- export const smaa = ( node ) => nodeObject( new SMAANode( convertToTexture( node ) ) );
768
+ export const smaa = ( node ) => new SMAANode( convertToTexture( node ) );
@@ -1,5 +1,5 @@
1
1
  import { AdditiveBlending, Color, Vector2, RendererUtils, PassNode, QuadMesh, NodeMaterial } from 'three/webgpu';
2
- import { nodeObject, uniform, mrt, texture, getTextureIndex, unpremultiplyAlpha } from 'three/tsl';
2
+ import { uniform, mrt, texture, getTextureIndex, unpremultiplyAlpha } from 'three/tsl';
3
3
 
4
4
  const _size = /*@__PURE__*/ new Vector2();
5
5
 
@@ -355,4 +355,4 @@ const _JitterVectors = [
355
355
  * @param {Camera} camera - The camera to render the scene with.
356
356
  * @returns {SSAAPassNode}
357
357
  */
358
- export const ssaaPass = ( scene, camera ) => nodeObject( new SSAAPassNode( scene, camera ) );
358
+ export const ssaaPass = ( scene, camera ) => new SSAAPassNode( scene, camera );