@plastic-software/three 0.167.3 → 0.174.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 (748) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +36277 -24023
  4. package/build/three.core.js +48830 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +10175 -46743
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +550 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +44348 -50670
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +70301 -0
  13. package/build/three.webgpu.nodes.min.js +6 -0
  14. package/examples/jsm/Addons.js +3 -15
  15. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  16. package/examples/jsm/animation/CCDIKSolver.js +61 -11
  17. package/examples/jsm/capabilities/WebGL.js +27 -21
  18. package/examples/jsm/capabilities/WebGPU.js +1 -10
  19. package/examples/jsm/controls/ArcballControls.js +262 -231
  20. package/examples/jsm/controls/DragControls.js +1 -1
  21. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  22. package/examples/jsm/controls/FlyControls.js +194 -188
  23. package/examples/jsm/controls/OrbitControls.js +801 -777
  24. package/examples/jsm/controls/PointerLockControls.js +26 -20
  25. package/examples/jsm/controls/TrackballControls.js +469 -448
  26. package/examples/jsm/controls/TransformControls.js +119 -68
  27. package/examples/jsm/csm/CSM.js +2 -2
  28. package/examples/jsm/csm/CSMFrustum.js +7 -4
  29. package/examples/jsm/csm/CSMHelper.js +2 -0
  30. package/examples/jsm/csm/CSMShadowNode.js +442 -0
  31. package/examples/jsm/curves/NURBSCurve.js +33 -2
  32. package/examples/jsm/curves/NURBSUtils.js +3 -0
  33. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  34. package/examples/jsm/effects/OutlineEffect.js +1 -1
  35. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  36. package/examples/jsm/effects/StereoEffect.js +6 -1
  37. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  38. package/examples/jsm/exporters/EXRExporter.js +19 -11
  39. package/examples/jsm/exporters/GLTFExporter.js +181 -109
  40. package/examples/jsm/exporters/KTX2Exporter.js +54 -23
  41. package/examples/jsm/exporters/OBJExporter.js +5 -1
  42. package/examples/jsm/exporters/PLYExporter.js +11 -9
  43. package/examples/jsm/exporters/USDZExporter.js +50 -11
  44. package/examples/jsm/geometries/DecalGeometry.js +73 -21
  45. package/examples/jsm/geometries/TextGeometry.js +1 -12
  46. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  47. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  48. package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
  49. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  50. package/examples/jsm/interactive/HTMLMesh.js +1 -0
  51. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  52. package/examples/jsm/interactive/SelectionHelper.js +3 -1
  53. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  54. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  55. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  56. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  57. package/examples/jsm/lighting/TiledLighting.js +18 -0
  58. package/examples/jsm/lights/LightProbeGenerator.js +26 -12
  59. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  60. package/examples/jsm/lines/LineGeometry.js +25 -0
  61. package/examples/jsm/lines/LineMaterial.js +0 -1
  62. package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
  63. package/examples/jsm/lines/webgpu/Line2.js +2 -1
  64. package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
  65. package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
  66. package/examples/jsm/loaders/3DMLoader.js +1 -0
  67. package/examples/jsm/loaders/3MFLoader.js +104 -2
  68. package/examples/jsm/loaders/BVHLoader.js +1 -1
  69. package/examples/jsm/loaders/ColladaLoader.js +15 -12
  70. package/examples/jsm/loaders/DDSLoader.js +42 -0
  71. package/examples/jsm/loaders/DRACOLoader.js +3 -1
  72. package/examples/jsm/loaders/FBXLoader.js +71 -22
  73. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  74. package/examples/jsm/loaders/GLTFLoader.js +29 -14
  75. package/examples/jsm/loaders/KTX2Loader.js +160 -58
  76. package/examples/jsm/loaders/KTXLoader.js +4 -4
  77. package/examples/jsm/loaders/LDrawLoader.js +22 -136
  78. package/examples/jsm/loaders/LottieLoader.js +2 -1
  79. package/examples/jsm/loaders/MTLLoader.js +27 -7
  80. package/examples/jsm/loaders/MaterialXLoader.js +40 -14
  81. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  82. package/examples/jsm/loaders/OBJLoader.js +5 -3
  83. package/examples/jsm/loaders/PCDLoader.js +14 -13
  84. package/examples/jsm/loaders/PDBLoader.js +3 -2
  85. package/examples/jsm/loaders/PLYLoader.js +15 -12
  86. package/examples/jsm/loaders/PVRLoader.js +1 -1
  87. package/examples/jsm/loaders/STLLoader.js +3 -2
  88. package/examples/jsm/loaders/SVGLoader.js +2 -2
  89. package/examples/jsm/loaders/TDSLoader.js +17 -18
  90. package/examples/jsm/loaders/VRMLLoader.js +17 -17
  91. package/examples/jsm/loaders/VTKLoader.js +4 -3
  92. package/examples/jsm/loaders/XYZLoader.js +3 -2
  93. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  94. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
  95. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
  96. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  97. package/examples/jsm/math/ColorSpaces.js +76 -0
  98. package/examples/jsm/math/ConvexHull.js +1 -1
  99. package/examples/jsm/math/OBB.js +17 -0
  100. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  101. package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
  102. package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
  103. package/examples/jsm/misc/Timer.js +27 -12
  104. package/examples/jsm/misc/Volume.js +28 -18
  105. package/examples/jsm/misc/VolumeSlice.js +19 -16
  106. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  107. package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
  108. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  109. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  110. package/examples/jsm/objects/LensflareMesh.js +324 -0
  111. package/examples/jsm/objects/Reflector.js +5 -2
  112. package/examples/jsm/objects/Sky.js +2 -2
  113. package/examples/jsm/objects/SkyMesh.js +14 -14
  114. package/examples/jsm/objects/Water2.js +1 -1
  115. package/examples/jsm/objects/Water2Mesh.js +11 -9
  116. package/examples/jsm/objects/WaterMesh.js +38 -33
  117. package/examples/jsm/physics/JoltPhysics.js +8 -8
  118. package/examples/jsm/physics/RapierPhysics.js +5 -5
  119. package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
  120. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  121. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  122. package/examples/jsm/postprocessing/OutlinePass.js +37 -51
  123. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  124. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  125. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  126. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  127. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  128. package/examples/jsm/postprocessing/SSRPass.js +8 -4
  129. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  130. package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
  131. package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
  132. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  133. package/examples/jsm/shaders/BokehShader2.js +1 -1
  134. package/examples/jsm/shaders/FXAAShader.js +225 -224
  135. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  136. package/examples/jsm/shaders/OutputShader.js +6 -2
  137. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  138. package/examples/jsm/transpiler/AST.js +12 -2
  139. package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
  140. package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
  141. package/examples/jsm/transpiler/TSLEncoder.js +96 -21
  142. package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
  143. package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
  144. package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
  145. package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
  146. package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
  147. package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
  148. package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
  149. package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
  150. package/examples/jsm/tsl/display/FXAANode.js +364 -0
  151. package/examples/jsm/tsl/display/FilmNode.js +100 -0
  152. package/examples/jsm/tsl/display/GTAONode.js +521 -0
  153. package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
  154. package/examples/jsm/tsl/display/LensflareNode.js +278 -0
  155. package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
  156. package/examples/jsm/tsl/display/MotionBlur.js +33 -0
  157. package/examples/jsm/tsl/display/OutlineNode.js +750 -0
  158. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
  159. package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
  160. package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
  161. package/examples/jsm/tsl/display/SMAANode.js +767 -0
  162. package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
  163. package/examples/jsm/tsl/display/SSRNode.js +538 -0
  164. package/examples/jsm/tsl/display/Sepia.js +24 -0
  165. package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
  166. package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
  167. package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
  168. package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
  169. package/examples/jsm/tsl/display/TransitionNode.js +140 -0
  170. package/examples/jsm/tsl/display/hashBlur.js +34 -0
  171. package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
  172. package/examples/jsm/tsl/math/Bayer.js +18 -0
  173. package/examples/jsm/tsl/utils/Raymarching.js +65 -0
  174. package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
  175. package/examples/jsm/utils/CameraUtils.js +4 -1
  176. package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
  177. package/examples/jsm/utils/GeometryUtils.js +22 -19
  178. package/examples/jsm/utils/SceneOptimizer.js +410 -0
  179. package/examples/jsm/utils/SceneUtils.js +2 -2
  180. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  181. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  182. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  183. package/examples/jsm/utils/UVsDebug.js +1 -1
  184. package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
  185. package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
  186. package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
  187. package/examples/jsm/webxr/Text2D.js +6 -6
  188. package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
  189. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  190. package/package.json +14 -9
  191. package/src/Three.Core.js +182 -0
  192. package/src/Three.Legacy.js +0 -21
  193. package/src/Three.TSL.js +543 -0
  194. package/src/Three.WebGPU.Nodes.js +23 -0
  195. package/src/Three.WebGPU.js +13 -184
  196. package/src/Three.js +1 -176
  197. package/src/animation/AnimationClip.js +2 -2
  198. package/src/animation/AnimationObjectGroup.js +2 -2
  199. package/src/animation/AnimationUtils.js +1 -1
  200. package/src/animation/PropertyBinding.js +2 -2
  201. package/src/audio/Audio.js +379 -2
  202. package/src/audio/AudioAnalyser.js +58 -1
  203. package/src/audio/AudioContext.js +15 -0
  204. package/src/audio/AudioListener.js +76 -0
  205. package/src/audio/PositionalAudio.js +107 -0
  206. package/src/cameras/ArrayCamera.js +29 -0
  207. package/src/cameras/Camera.js +47 -0
  208. package/src/cameras/CubeCamera.js +66 -0
  209. package/src/cameras/OrthographicCamera.js +109 -0
  210. package/src/cameras/PerspectiveCamera.js +173 -34
  211. package/src/cameras/StereoCamera.js +48 -2
  212. package/src/constants.js +6 -6
  213. package/src/core/BufferAttribute.js +4 -9
  214. package/src/core/BufferGeometry.js +48 -8
  215. package/src/core/Clock.js +1 -1
  216. package/src/core/EventDispatcher.js +52 -8
  217. package/src/core/InterleavedBuffer.js +4 -13
  218. package/src/core/Object3D.js +573 -3
  219. package/src/core/RenderTarget.js +22 -4
  220. package/src/core/RenderTarget3D.js +22 -0
  221. package/src/core/RenderTargetArray.js +22 -0
  222. package/src/extras/Controls.js +104 -0
  223. package/src/extras/DataUtils.js +48 -8
  224. package/src/extras/Earcut.js +18 -7
  225. package/src/extras/ImageUtils.js +18 -11
  226. package/src/extras/PMREMGenerator.js +40 -9
  227. package/src/extras/ShapeUtils.js +24 -2
  228. package/src/extras/TextureUtils.js +96 -10
  229. package/src/extras/core/Curve.js +153 -53
  230. package/src/extras/core/CurvePath.js +63 -22
  231. package/src/extras/core/Interpolations.js +29 -3
  232. package/src/extras/core/Path.js +134 -1
  233. package/src/extras/core/Shape.js +66 -3
  234. package/src/extras/core/ShapePath.js +76 -0
  235. package/src/extras/curves/ArcCurve.js +22 -0
  236. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  237. package/src/extras/curves/CubicBezierCurve.js +67 -0
  238. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  239. package/src/extras/curves/EllipseCurve.js +102 -0
  240. package/src/extras/curves/LineCurve.js +36 -0
  241. package/src/extras/curves/LineCurve3.js +36 -0
  242. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  243. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  244. package/src/extras/curves/SplineCurve.js +48 -0
  245. package/src/geometries/BoxGeometry.js +38 -0
  246. package/src/geometries/CapsuleGeometry.js +34 -0
  247. package/src/geometries/CircleGeometry.js +40 -0
  248. package/src/geometries/ConeGeometry.js +38 -0
  249. package/src/geometries/CylinderGeometry.js +50 -4
  250. package/src/geometries/DodecahedronGeometry.js +32 -0
  251. package/src/geometries/EdgesGeometry.js +30 -2
  252. package/src/geometries/ExtrudeGeometry.js +52 -0
  253. package/src/geometries/IcosahedronGeometry.js +32 -0
  254. package/src/geometries/LatheGeometry.js +43 -3
  255. package/src/geometries/OctahedronGeometry.js +32 -0
  256. package/src/geometries/PlaneGeometry.js +34 -0
  257. package/src/geometries/PolyhedronGeometry.js +29 -0
  258. package/src/geometries/RingGeometry.js +36 -0
  259. package/src/geometries/ShapeGeometry.js +37 -0
  260. package/src/geometries/SphereGeometry.js +37 -0
  261. package/src/geometries/TetrahedronGeometry.js +32 -0
  262. package/src/geometries/TorusGeometry.js +35 -0
  263. package/src/geometries/TorusKnotGeometry.js +38 -0
  264. package/src/geometries/TubeGeometry.js +49 -0
  265. package/src/geometries/WireframeGeometry.js +32 -0
  266. package/src/helpers/ArrowHelper.js +60 -3
  267. package/src/helpers/AxesHelper.js +28 -0
  268. package/src/helpers/Box3Helper.js +28 -0
  269. package/src/helpers/BoxHelper.js +43 -7
  270. package/src/helpers/CameraHelper.js +61 -18
  271. package/src/helpers/DirectionalLightHelper.js +52 -0
  272. package/src/helpers/GridHelper.js +26 -0
  273. package/src/helpers/HemisphereLightHelper.js +39 -0
  274. package/src/helpers/PlaneHelper.js +33 -0
  275. package/src/helpers/PointLightHelper.js +43 -0
  276. package/src/helpers/PolarGridHelper.js +30 -0
  277. package/src/helpers/SkeletonHelper.js +39 -2
  278. package/src/helpers/SpotLightHelper.js +40 -0
  279. package/src/lights/AmbientLight.js +25 -0
  280. package/src/lights/DirectionalLight.js +57 -0
  281. package/src/lights/DirectionalLightShadow.js +15 -0
  282. package/src/lights/HemisphereLight.js +32 -0
  283. package/src/lights/Light.js +36 -0
  284. package/src/lights/LightProbe.js +43 -0
  285. package/src/lights/LightShadow.js +159 -0
  286. package/src/lights/PointLight.js +59 -0
  287. package/src/lights/PointLightShadow.js +21 -0
  288. package/src/lights/RectAreaLight.js +59 -0
  289. package/src/lights/SpotLight.js +102 -0
  290. package/src/lights/SpotLightShadow.js +24 -2
  291. package/src/lights/webgpu/IESSpotLight.js +21 -0
  292. package/src/loaders/Loader.js +132 -0
  293. package/src/loaders/MaterialLoader.js +7 -1
  294. package/src/loaders/nodes/NodeLoader.js +189 -0
  295. package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
  296. package/src/loaders/nodes/NodeObjectLoader.js +151 -0
  297. package/src/materials/LineDashedMaterial.js +0 -1
  298. package/src/materials/Material.js +469 -7
  299. package/src/materials/MeshPhongMaterial.js +1 -1
  300. package/src/materials/MeshPhysicalMaterial.js +2 -2
  301. package/src/materials/MeshStandardMaterial.js +2 -2
  302. package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
  303. package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
  304. package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
  305. package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
  306. package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
  307. package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
  308. package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
  309. package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
  310. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
  311. package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
  312. package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
  313. package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
  314. package/src/materials/nodes/NodeMaterial.js +1180 -0
  315. package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
  316. package/src/materials/nodes/PointsNodeMaterial.js +153 -0
  317. package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
  318. package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
  319. package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
  320. package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
  321. package/src/math/Box2.js +177 -0
  322. package/src/math/Box3.js +243 -0
  323. package/src/math/Color.js +343 -0
  324. package/src/math/ColorManagement.js +143 -102
  325. package/src/math/Cylindrical.js +65 -6
  326. package/src/math/Euler.js +137 -4
  327. package/src/math/Frustum.js +83 -0
  328. package/src/math/Interpolant.js +87 -8
  329. package/src/math/Line3.js +96 -2
  330. package/src/math/MathUtils.js +182 -19
  331. package/src/math/Matrix2.js +70 -0
  332. package/src/math/Matrix3.js +229 -4
  333. package/src/math/Matrix4.js +368 -3
  334. package/src/math/Plane.js +164 -2
  335. package/src/math/Quaternion.js +265 -9
  336. package/src/math/Ray.js +160 -0
  337. package/src/math/Sphere.js +147 -0
  338. package/src/math/Spherical.js +73 -11
  339. package/src/math/SphericalHarmonics3.js +112 -14
  340. package/src/math/Triangle.js +230 -2
  341. package/src/math/Vector2.js +396 -10
  342. package/src/math/Vector3.js +550 -13
  343. package/src/math/Vector4.js +415 -9
  344. package/src/math/interpolants/CubicInterpolant.js +10 -1
  345. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  346. package/src/math/interpolants/LinearInterpolant.js +13 -0
  347. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  348. package/src/nodes/Nodes.js +84 -166
  349. package/src/nodes/TSL.js +167 -0
  350. package/src/nodes/accessors/AccessorsUtils.js +39 -10
  351. package/src/nodes/accessors/Arrays.js +68 -0
  352. package/src/nodes/accessors/BatchNode.js +93 -26
  353. package/src/nodes/accessors/Bitangent.js +54 -0
  354. package/src/nodes/accessors/BufferAttributeNode.js +189 -11
  355. package/src/nodes/accessors/BufferNode.js +70 -5
  356. package/src/nodes/accessors/BuiltinNode.js +63 -0
  357. package/src/nodes/accessors/Camera.js +129 -0
  358. package/src/nodes/accessors/ClippingNode.js +152 -43
  359. package/src/nodes/accessors/CubeTextureNode.js +76 -13
  360. package/src/nodes/accessors/InstanceNode.js +118 -35
  361. package/src/nodes/accessors/InstancedMeshNode.js +50 -0
  362. package/src/nodes/accessors/Lights.js +129 -0
  363. package/src/nodes/accessors/MaterialNode.js +394 -58
  364. package/src/nodes/accessors/MaterialProperties.js +57 -1
  365. package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
  366. package/src/nodes/accessors/ModelNode.js +159 -12
  367. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
  368. package/src/nodes/accessors/MorphNode.js +60 -13
  369. package/src/nodes/accessors/Normal.js +156 -0
  370. package/src/nodes/accessors/Object3DNode.js +154 -35
  371. package/src/nodes/accessors/PointUVNode.js +35 -6
  372. package/src/nodes/accessors/Position.js +64 -0
  373. package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
  374. package/src/nodes/accessors/ReferenceNode.js +243 -6
  375. package/src/nodes/accessors/ReflectVector.js +36 -0
  376. package/src/nodes/accessors/RendererReferenceNode.js +57 -7
  377. package/src/nodes/accessors/SceneNode.js +98 -6
  378. package/src/nodes/accessors/SkinningNode.js +214 -21
  379. package/src/nodes/accessors/StorageBufferNode.js +288 -28
  380. package/src/nodes/accessors/StorageTextureNode.js +139 -12
  381. package/src/nodes/accessors/Tangent.js +62 -0
  382. package/src/nodes/accessors/Texture3DNode.js +98 -12
  383. package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
  384. package/src/nodes/accessors/TextureNode.js +347 -34
  385. package/src/nodes/accessors/TextureSizeNode.js +51 -9
  386. package/src/nodes/accessors/UV.js +11 -0
  387. package/src/nodes/accessors/UniformArrayNode.js +241 -32
  388. package/src/nodes/accessors/UserDataNode.js +55 -7
  389. package/src/nodes/accessors/VelocityNode.js +223 -0
  390. package/src/nodes/accessors/VertexColorNode.js +45 -6
  391. package/src/nodes/code/CodeNode.js +108 -8
  392. package/src/nodes/code/ExpressionNode.js +38 -7
  393. package/src/nodes/code/FunctionCallNode.js +62 -11
  394. package/src/nodes/code/FunctionNode.js +54 -24
  395. package/src/nodes/code/ScriptableNode.js +241 -17
  396. package/src/nodes/code/ScriptableValueNode.js +93 -8
  397. package/src/nodes/core/ArrayNode.js +142 -0
  398. package/src/nodes/core/AssignNode.js +60 -12
  399. package/src/nodes/core/AttributeNode.js +55 -22
  400. package/src/nodes/core/BypassNode.js +59 -11
  401. package/src/nodes/core/CacheNode.js +64 -10
  402. package/src/nodes/core/ConstNode.js +38 -3
  403. package/src/nodes/core/ContextNode.js +87 -12
  404. package/src/nodes/core/IndexNode.js +102 -10
  405. package/src/nodes/core/InputNode.js +55 -3
  406. package/src/nodes/core/LightingModel.js +65 -5
  407. package/src/nodes/core/MRTNode.js +81 -7
  408. package/src/nodes/core/Node.js +368 -50
  409. package/src/nodes/core/NodeAttribute.js +38 -0
  410. package/src/nodes/core/NodeBuilder.js +1317 -83
  411. package/src/nodes/core/NodeCache.js +41 -2
  412. package/src/nodes/core/NodeCode.js +31 -0
  413. package/src/nodes/core/NodeFrame.js +123 -2
  414. package/src/nodes/core/NodeFunction.js +46 -0
  415. package/src/nodes/core/NodeFunctionInput.js +44 -0
  416. package/src/nodes/core/NodeParser.js +11 -0
  417. package/src/nodes/core/NodeUniform.js +52 -0
  418. package/src/nodes/core/NodeUtils.js +226 -6
  419. package/src/nodes/core/NodeVar.js +47 -1
  420. package/src/nodes/core/NodeVarying.js +28 -0
  421. package/src/nodes/core/OutputStructNode.js +61 -17
  422. package/src/nodes/core/ParameterNode.js +34 -4
  423. package/src/nodes/core/PropertyNode.js +296 -32
  424. package/src/nodes/core/StackNode.js +108 -8
  425. package/src/nodes/core/StructNode.js +120 -0
  426. package/src/nodes/core/StructType.js +13 -0
  427. package/src/nodes/core/StructTypeNode.js +116 -9
  428. package/src/nodes/core/TempNode.js +37 -7
  429. package/src/nodes/core/UniformGroupNode.js +98 -17
  430. package/src/nodes/core/UniformNode.js +72 -4
  431. package/src/nodes/core/VarNode.js +170 -13
  432. package/src/nodes/core/VaryingNode.js +109 -8
  433. package/src/nodes/core/constants.js +40 -0
  434. package/src/nodes/display/BlendModes.js +193 -0
  435. package/src/nodes/display/BumpMapNode.js +47 -10
  436. package/src/nodes/display/ColorAdjustment.js +141 -0
  437. package/src/nodes/display/ColorSpaceFunctions.js +54 -0
  438. package/src/nodes/display/ColorSpaceNode.js +147 -68
  439. package/src/nodes/display/FrontFacingNode.js +39 -6
  440. package/src/nodes/display/NormalMapNode.js +55 -13
  441. package/src/nodes/display/PassNode.js +420 -19
  442. package/src/nodes/display/PosterizeNode.js +40 -7
  443. package/src/nodes/display/RenderOutputNode.js +81 -13
  444. package/src/nodes/display/ScreenNode.js +286 -0
  445. package/src/nodes/display/ToneMappingFunctions.js +242 -0
  446. package/src/nodes/display/ToneMappingNode.js +68 -175
  447. package/src/nodes/display/ToonOutlinePassNode.js +183 -0
  448. package/src/nodes/display/ViewportDepthNode.js +210 -36
  449. package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
  450. package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
  451. package/src/nodes/display/ViewportTextureNode.js +68 -11
  452. package/src/nodes/fog/Fog.js +113 -0
  453. package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  454. package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  455. package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  456. package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
  457. package/src/nodes/functions/BSDF/D_GGX.js +2 -2
  458. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  459. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  460. package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
  461. package/src/nodes/functions/BSDF/LTC.js +50 -6
  462. package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  463. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  464. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  465. package/src/nodes/functions/BasicLightingModel.js +27 -6
  466. package/src/nodes/functions/PhongLightingModel.js +38 -8
  467. package/src/nodes/functions/PhysicalLightingModel.js +215 -51
  468. package/src/nodes/functions/ShadowMaskModel.js +24 -1
  469. package/src/nodes/functions/ToonLightingModel.js +24 -5
  470. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  471. package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  472. package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
  473. package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  474. package/src/nodes/functions/material/getRoughness.js +2 -2
  475. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  476. package/src/nodes/geometry/RangeNode.js +62 -7
  477. package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
  478. package/src/nodes/gpgpu/BarrierNode.js +89 -0
  479. package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
  480. package/src/nodes/gpgpu/ComputeNode.js +124 -9
  481. package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
  482. package/src/nodes/lighting/AONode.js +24 -3
  483. package/src/nodes/lighting/AmbientLightNode.js +16 -8
  484. package/src/nodes/lighting/AnalyticLightNode.js +151 -231
  485. package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
  486. package/src/nodes/lighting/BasicLightMapNode.js +25 -5
  487. package/src/nodes/lighting/DirectionalLightNode.js +19 -20
  488. package/src/nodes/lighting/EnvironmentNode.js +34 -17
  489. package/src/nodes/lighting/HemisphereLightNode.js +42 -11
  490. package/src/nodes/lighting/IESSpotLightNode.js +18 -9
  491. package/src/nodes/lighting/IrradianceNode.js +23 -3
  492. package/src/nodes/lighting/LightProbeNode.js +29 -36
  493. package/src/nodes/lighting/LightUtils.js +12 -4
  494. package/src/nodes/lighting/LightingContextNode.js +70 -21
  495. package/src/nodes/lighting/LightingNode.js +22 -9
  496. package/src/nodes/lighting/LightsNode.js +309 -86
  497. package/src/nodes/lighting/PointLightNode.js +66 -32
  498. package/src/nodes/lighting/PointShadowNode.js +306 -0
  499. package/src/nodes/lighting/RectAreaLightNode.js +61 -25
  500. package/src/nodes/lighting/ShadowBaseNode.js +92 -0
  501. package/src/nodes/lighting/ShadowNode.js +812 -0
  502. package/src/nodes/lighting/SpotLightNode.js +73 -31
  503. package/src/nodes/materialx/MaterialXNodes.js +2 -2
  504. package/src/nodes/materialx/lib/mx_hsv.js +27 -22
  505. package/src/nodes/materialx/lib/mx_noise.js +70 -70
  506. package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
  507. package/src/nodes/math/ConditionalNode.js +230 -0
  508. package/src/nodes/math/Hash.js +21 -0
  509. package/src/nodes/math/MathNode.js +812 -131
  510. package/src/nodes/math/MathUtils.js +47 -8
  511. package/src/nodes/math/OperatorNode.js +410 -66
  512. package/src/nodes/math/TriNoise3D.js +32 -32
  513. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  514. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  515. package/src/nodes/pmrem/PMREMNode.js +188 -28
  516. package/src/nodes/pmrem/PMREMUtils.js +24 -24
  517. package/src/nodes/procedural/Checker.js +22 -0
  518. package/src/nodes/shapes/Shapes.js +32 -0
  519. package/src/nodes/tsl/TSLBase.js +31 -0
  520. package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
  521. package/src/nodes/utils/ArrayElementNode.js +45 -5
  522. package/src/nodes/utils/ConvertNode.js +39 -4
  523. package/src/nodes/utils/CubeMapNode.js +88 -8
  524. package/src/nodes/utils/Discard.js +24 -0
  525. package/src/nodes/utils/EquirectUVNode.js +39 -7
  526. package/src/nodes/utils/FlipNode.js +106 -0
  527. package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
  528. package/src/nodes/utils/JoinNode.js +31 -3
  529. package/src/nodes/utils/LoopNode.js +95 -9
  530. package/src/nodes/utils/MatcapUVNode.js +27 -8
  531. package/src/nodes/utils/MaxMipLevelNode.js +57 -6
  532. package/src/nodes/utils/MemberNode.js +68 -0
  533. package/src/nodes/utils/Oscillators.js +41 -0
  534. package/src/nodes/utils/Packing.js +21 -0
  535. package/src/nodes/utils/PostProcessingUtils.js +95 -0
  536. package/src/nodes/utils/RTTNode.js +141 -9
  537. package/src/nodes/utils/ReflectorNode.js +295 -21
  538. package/src/nodes/utils/RemapNode.js +93 -10
  539. package/src/nodes/utils/RotateNode.js +48 -13
  540. package/src/nodes/utils/SetNode.js +50 -4
  541. package/src/nodes/utils/SplitNode.js +62 -6
  542. package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
  543. package/src/nodes/utils/SpriteUtils.js +21 -5
  544. package/src/nodes/utils/StorageArrayElementNode.js +64 -12
  545. package/src/nodes/utils/Timer.js +73 -0
  546. package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
  547. package/src/nodes/utils/UVUtils.js +27 -9
  548. package/src/nodes/utils/ViewportUtils.js +16 -4
  549. package/src/objects/BatchedMesh.js +808 -281
  550. package/src/objects/Bone.js +24 -0
  551. package/src/objects/ClippingGroup.js +68 -0
  552. package/src/objects/Group.js +24 -0
  553. package/src/objects/InstancedMesh.js +120 -2
  554. package/src/objects/LOD.js +120 -5
  555. package/src/objects/Line.js +89 -6
  556. package/src/objects/LineLoop.js +20 -0
  557. package/src/objects/LineSegments.js +18 -0
  558. package/src/objects/Mesh.js +82 -23
  559. package/src/objects/Points.js +62 -0
  560. package/src/objects/Skeleton.js +107 -2
  561. package/src/objects/SkinnedMesh.js +99 -5
  562. package/src/objects/Sprite.js +54 -0
  563. package/src/renderers/WebGLRenderer.js +274 -157
  564. package/src/renderers/common/Animation.js +109 -12
  565. package/src/renderers/common/Attributes.js +40 -0
  566. package/src/renderers/common/Backend.js +504 -44
  567. package/src/renderers/common/Background.js +67 -9
  568. package/src/renderers/common/BindGroup.js +45 -1
  569. package/src/renderers/common/Binding.js +35 -0
  570. package/src/renderers/common/Bindings.js +136 -19
  571. package/src/renderers/common/Buffer.js +49 -0
  572. package/src/renderers/common/BufferUtils.js +25 -0
  573. package/src/renderers/common/BundleGroup.js +83 -0
  574. package/src/renderers/common/ChainMap.js +45 -6
  575. package/src/renderers/common/ClippingContext.js +175 -80
  576. package/src/renderers/common/Color4.js +40 -0
  577. package/src/renderers/common/ComputePipeline.js +24 -0
  578. package/src/renderers/common/Constants.js +2 -1
  579. package/src/renderers/common/CubeRenderTarget.js +22 -3
  580. package/src/renderers/common/DataMap.js +37 -1
  581. package/src/renderers/common/Geometries.js +111 -14
  582. package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  583. package/src/renderers/common/Info.js +78 -35
  584. package/src/renderers/common/Lighting.js +73 -0
  585. package/src/renderers/common/Pipeline.js +22 -0
  586. package/src/renderers/common/Pipelines.js +148 -5
  587. package/src/renderers/common/PostProcessing.js +112 -11
  588. package/src/renderers/common/ProgrammableStage.js +60 -2
  589. package/src/renderers/common/QuadMesh.js +56 -5
  590. package/src/renderers/common/RenderBundle.js +14 -8
  591. package/src/renderers/common/RenderBundles.js +39 -10
  592. package/src/renderers/common/RenderContext.js +205 -7
  593. package/src/renderers/common/RenderContexts.js +59 -6
  594. package/src/renderers/common/RenderList.js +230 -21
  595. package/src/renderers/common/RenderLists.js +45 -6
  596. package/src/renderers/common/RenderObject.js +552 -41
  597. package/src/renderers/common/RenderObjects.js +118 -9
  598. package/src/renderers/common/RenderPipeline.js +24 -0
  599. package/src/renderers/common/Renderer.js +1537 -239
  600. package/src/renderers/common/RendererUtils.js +191 -0
  601. package/src/renderers/common/SampledTexture.js +132 -3
  602. package/src/renderers/common/Sampler.js +30 -0
  603. package/src/renderers/common/StorageBuffer.js +24 -0
  604. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  605. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  606. package/src/renderers/common/StorageTexture.js +38 -0
  607. package/src/renderers/common/Textures.js +142 -32
  608. package/src/renderers/common/TimestampQueryPool.js +98 -0
  609. package/src/renderers/common/Uniform.js +225 -3
  610. package/src/renderers/common/UniformBuffer.js +19 -0
  611. package/src/renderers/common/UniformsGroup.js +157 -6
  612. package/src/renderers/common/XRManager.js +1185 -0
  613. package/src/renderers/common/XRRenderTarget.js +74 -0
  614. package/src/renderers/common/extras/PMREMGenerator.js +211 -53
  615. package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
  616. package/src/renderers/common/nodes/NodeLibrary.js +194 -0
  617. package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
  618. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  619. package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
  620. package/src/renderers/common/nodes/NodeUniform.js +285 -2
  621. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  622. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  623. package/src/renderers/common/nodes/Nodes.js +390 -70
  624. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
  625. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  626. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  627. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
  628. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  629. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  630. package/src/renderers/shaders/ShaderLib/points.glsl.js +2 -0
  631. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  632. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  633. package/src/renderers/webgl/WebGLBackground.js +24 -1
  634. package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
  635. package/src/renderers/webgl/WebGLCapabilities.js +2 -0
  636. package/src/renderers/webgl/WebGLGeometries.js +0 -28
  637. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
  638. package/src/renderers/webgl/WebGLProgram.js +27 -29
  639. package/src/renderers/webgl/WebGLPrograms.js +24 -16
  640. package/src/renderers/webgl/WebGLState.js +68 -11
  641. package/src/renderers/webgl/WebGLTextures.js +49 -10
  642. package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
  643. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
  644. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
  645. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
  646. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  647. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  648. package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
  649. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
  650. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
  651. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  652. package/src/renderers/webgpu/WebGPUBackend.js +816 -236
  653. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
  654. package/src/renderers/webgpu/WebGPURenderer.js +45 -6
  655. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
  656. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
  657. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
  658. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
  659. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  660. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
  661. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
  662. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
  663. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
  664. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
  665. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
  666. package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
  667. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  668. package/src/renderers/webxr/WebXRManager.js +54 -32
  669. package/src/scenes/Fog.js +60 -0
  670. package/src/scenes/FogExp2.js +51 -0
  671. package/src/scenes/Scene.js +87 -0
  672. package/src/textures/Data3DTexture.js +2 -2
  673. package/src/textures/DepthTexture.js +2 -0
  674. package/src/textures/Source.js +2 -2
  675. package/src/textures/Texture.js +368 -5
  676. package/src/textures/VideoFrameTexture.js +35 -0
  677. package/src/utils.js +33 -1
  678. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  679. package/examples/jsm/animation/MMDPhysics.js +0 -1406
  680. package/examples/jsm/cameras/CinematicCamera.js +0 -208
  681. package/examples/jsm/controls/Controls.js +0 -32
  682. package/examples/jsm/exporters/MMDExporter.js +0 -217
  683. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  684. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  685. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  686. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  687. package/examples/jsm/loaders/MMDLoader.js +0 -2295
  688. package/examples/jsm/loaders/TiltLoader.js +0 -520
  689. package/examples/jsm/objects/InstancedPoints.js +0 -21
  690. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  691. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  692. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  693. package/src/nodes/accessors/BitangentNode.js +0 -13
  694. package/src/nodes/accessors/CameraNode.js +0 -19
  695. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  696. package/src/nodes/accessors/NormalNode.js +0 -14
  697. package/src/nodes/accessors/PositionNode.js +0 -10
  698. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  699. package/src/nodes/accessors/TangentNode.js +0 -23
  700. package/src/nodes/accessors/UVNode.js +0 -3
  701. package/src/nodes/core/NodeKeywords.js +0 -80
  702. package/src/nodes/core/UniformGroup.js +0 -13
  703. package/src/nodes/display/AfterImageNode.js +0 -152
  704. package/src/nodes/display/AnamorphicNode.js +0 -145
  705. package/src/nodes/display/BlendModeNode.js +0 -128
  706. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  707. package/src/nodes/display/DenoiseNode.js +0 -198
  708. package/src/nodes/display/DotScreenNode.js +0 -75
  709. package/src/nodes/display/FXAANode.js +0 -327
  710. package/src/nodes/display/FilmNode.js +0 -52
  711. package/src/nodes/display/GTAONode.js +0 -324
  712. package/src/nodes/display/GaussianBlurNode.js +0 -207
  713. package/src/nodes/display/Lut3DNode.js +0 -53
  714. package/src/nodes/display/RGBShiftNode.js +0 -49
  715. package/src/nodes/display/SepiaNode.js +0 -18
  716. package/src/nodes/display/TransitionNode.js +0 -76
  717. package/src/nodes/display/ViewportNode.js +0 -137
  718. package/src/nodes/fog/FogExp2Node.js +0 -34
  719. package/src/nodes/fog/FogNode.js +0 -48
  720. package/src/nodes/fog/FogRangeNode.js +0 -35
  721. package/src/nodes/lighting/LightNode.js +0 -57
  722. package/src/nodes/loaders/NodeLoader.js +0 -110
  723. package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
  724. package/src/nodes/loaders/NodeObjectLoader.js +0 -71
  725. package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  726. package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
  727. package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
  728. package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
  729. package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
  730. package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
  731. package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  732. package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
  733. package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
  734. package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
  735. package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
  736. package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
  737. package/src/nodes/materials/NodeMaterial.js +0 -680
  738. package/src/nodes/materials/PointsNodeMaterial.js +0 -39
  739. package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
  740. package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
  741. package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
  742. package/src/nodes/math/CondNode.js +0 -139
  743. package/src/nodes/math/HashNode.js +0 -34
  744. package/src/nodes/procedural/CheckerNode.js +0 -42
  745. package/src/nodes/utils/DiscardNode.js +0 -28
  746. package/src/nodes/utils/OscNode.js +0 -81
  747. package/src/nodes/utils/PackingNode.js +0 -55
  748. package/src/nodes/utils/TimerNode.js +0 -94
@@ -1,33 +1,100 @@
1
1
  import DataMap from '../DataMap.js';
2
2
  import ChainMap from '../ChainMap.js';
3
3
  import NodeBuilderState from './NodeBuilderState.js';
4
- import { NodeFrame, objectGroup, renderGroup, frameGroup, cubeTexture, texture, rangeFog, densityFog, reference, viewportBottomLeft, normalWorld, pmremTexture, viewportTopLeft } from '../../../nodes/Nodes.js';
5
-
6
- import { EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../../constants.js';
7
-
8
- const outputNodeMap = new WeakMap();
9
-
4
+ import { cubeMapNode } from '../../../nodes/utils/CubeMapNode.js';
5
+ import { NodeFrame } from '../../../nodes/Nodes.js';
6
+ import { objectGroup, renderGroup, frameGroup, cubeTexture, texture, fog, rangeFogFactor, densityFogFactor, reference, pmremTexture, screenUV } from '../../../nodes/TSL.js';
7
+
8
+ import { CubeUVReflectionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../../constants.js';
9
+ import { hashArray } from '../../../nodes/core/NodeUtils.js';
10
+
11
+ const _outputNodeMap = new WeakMap();
12
+ const _chainKeys = [];
13
+ const _cacheKeyValues = [];
14
+
15
+ /**
16
+ * This renderer module manages node-related objects and is the
17
+ * primary interface between the renderer and the node system.
18
+ *
19
+ * @private
20
+ * @augments DataMap
21
+ */
10
22
  class Nodes extends DataMap {
11
23
 
24
+ /**
25
+ * Constructs a new nodes management component.
26
+ *
27
+ * @param {Renderer} renderer - The renderer.
28
+ * @param {Backend} backend - The renderer's backend.
29
+ */
12
30
  constructor( renderer, backend ) {
13
31
 
14
32
  super();
15
33
 
34
+ /**
35
+ * The renderer.
36
+ *
37
+ * @type {Renderer}
38
+ */
16
39
  this.renderer = renderer;
40
+
41
+ /**
42
+ * The renderer's backend.
43
+ *
44
+ * @type {Backend}
45
+ */
17
46
  this.backend = backend;
47
+
48
+ /**
49
+ * The node frame.
50
+ *
51
+ * @type {Renderer}
52
+ */
18
53
  this.nodeFrame = new NodeFrame();
54
+
55
+ /**
56
+ * A cache for managing node builder states.
57
+ *
58
+ * @type {Map<number,NodeBuilderState>}
59
+ */
19
60
  this.nodeBuilderCache = new Map();
61
+
62
+ /**
63
+ * A cache for managing data cache key data.
64
+ *
65
+ * @type {ChainMap}
66
+ */
20
67
  this.callHashCache = new ChainMap();
68
+
69
+ /**
70
+ * A cache for managing node uniforms group data.
71
+ *
72
+ * @type {ChainMap}
73
+ */
21
74
  this.groupsData = new ChainMap();
22
75
 
76
+ /**
77
+ * A cache for managing node objects of
78
+ * scene properties like fog or environments.
79
+ *
80
+ * @type {Object<string,WeakMap>}
81
+ */
82
+ this.cacheLib = {};
83
+
23
84
  }
24
85
 
86
+ /**
87
+ * Returns `true` if the given node uniforms group must be updated or not.
88
+ *
89
+ * @param {NodeUniformsGroup} nodeUniformsGroup - The node uniforms group.
90
+ * @return {boolean} Whether the node uniforms group requires an update or not.
91
+ */
25
92
  updateGroup( nodeUniformsGroup ) {
26
93
 
27
94
  const groupNode = nodeUniformsGroup.groupNode;
28
95
  const name = groupNode.name;
29
96
 
30
- // objectGroup is every updated
97
+ // objectGroup is always updated
31
98
 
32
99
  if ( name === objectGroup.name ) return true;
33
100
 
@@ -71,10 +138,13 @@ class Nodes extends DataMap {
71
138
 
72
139
  // other groups are updated just when groupNode.needsUpdate is true
73
140
 
74
- const groupChain = [ groupNode, nodeUniformsGroup ];
141
+ _chainKeys[ 0 ] = groupNode;
142
+ _chainKeys[ 1 ] = nodeUniformsGroup;
75
143
 
76
- let groupData = this.groupsData.get( groupChain );
77
- if ( groupData === undefined ) this.groupsData.set( groupChain, groupData = {} );
144
+ let groupData = this.groupsData.get( _chainKeys );
145
+ if ( groupData === undefined ) this.groupsData.set( _chainKeys, groupData = {} );
146
+
147
+ _chainKeys.length = 0;
78
148
 
79
149
  if ( groupData.version !== groupNode.version ) {
80
150
 
@@ -88,12 +158,24 @@ class Nodes extends DataMap {
88
158
 
89
159
  }
90
160
 
161
+ /**
162
+ * Returns the cache key for the given render object.
163
+ *
164
+ * @param {RenderObject} renderObject - The render object.
165
+ * @return {number} The cache key.
166
+ */
91
167
  getForRenderCacheKey( renderObject ) {
92
168
 
93
169
  return renderObject.initialCacheKey;
94
170
 
95
171
  }
96
172
 
173
+ /**
174
+ * Returns a node builder state for the given render object.
175
+ *
176
+ * @param {RenderObject} renderObject - The render object.
177
+ * @return {NodeBuilderState} The node builder state.
178
+ */
97
179
  getForRender( renderObject ) {
98
180
 
99
181
  const renderObjectData = this.get( renderObject );
@@ -137,6 +219,12 @@ class Nodes extends DataMap {
137
219
 
138
220
  }
139
221
 
222
+ /**
223
+ * Deletes the given object from the internal data map
224
+ *
225
+ * @param {any} object - The object to delete.
226
+ * @return {?Object} The deleted dictionary.
227
+ */
140
228
  delete( object ) {
141
229
 
142
230
  if ( object.isRenderObject ) {
@@ -156,6 +244,12 @@ class Nodes extends DataMap {
156
244
 
157
245
  }
158
246
 
247
+ /**
248
+ * Returns a node builder state for the given compute node.
249
+ *
250
+ * @param {Node} computeNode - The compute node.
251
+ * @return {NodeBuilderState} The node builder state.
252
+ */
159
253
  getForCompute( computeNode ) {
160
254
 
161
255
  const computeData = this.get( computeNode );
@@ -177,6 +271,13 @@ class Nodes extends DataMap {
177
271
 
178
272
  }
179
273
 
274
+ /**
275
+ * Creates a node builder state for the given node builder.
276
+ *
277
+ * @private
278
+ * @param {NodeBuilder} nodeBuilder - The node builder.
279
+ * @return {NodeBuilderState} The node builder state.
280
+ */
180
281
  _createNodeBuilderState( nodeBuilder ) {
181
282
 
182
283
  return new NodeBuilderState(
@@ -188,75 +289,155 @@ class Nodes extends DataMap {
188
289
  nodeBuilder.updateNodes,
189
290
  nodeBuilder.updateBeforeNodes,
190
291
  nodeBuilder.updateAfterNodes,
191
- nodeBuilder.instanceBindGroups,
292
+ nodeBuilder.observer,
192
293
  nodeBuilder.transforms
193
294
  );
194
295
 
195
296
  }
196
297
 
298
+ /**
299
+ * Returns an environment node for the current configured
300
+ * scene environment.
301
+ *
302
+ * @param {Scene} scene - The scene.
303
+ * @return {Node} A node representing the current scene environment.
304
+ */
197
305
  getEnvironmentNode( scene ) {
198
306
 
199
- return scene.environmentNode || this.get( scene ).environmentNode || null;
307
+ this.updateEnvironment( scene );
308
+
309
+ let environmentNode = null;
310
+
311
+ if ( scene.environmentNode && scene.environmentNode.isNode ) {
312
+
313
+ environmentNode = scene.environmentNode;
314
+
315
+ } else {
316
+
317
+ const sceneData = this.get( scene );
318
+
319
+ if ( sceneData.environmentNode ) {
320
+
321
+ environmentNode = sceneData.environmentNode;
322
+
323
+ }
324
+
325
+ }
326
+
327
+ return environmentNode;
200
328
 
201
329
  }
202
330
 
331
+ /**
332
+ * Returns a background node for the current configured
333
+ * scene background.
334
+ *
335
+ * @param {Scene} scene - The scene.
336
+ * @return {Node} A node representing the current scene background.
337
+ */
203
338
  getBackgroundNode( scene ) {
204
339
 
205
- return scene.backgroundNode || this.get( scene ).backgroundNode || null;
340
+ this.updateBackground( scene );
341
+
342
+ let backgroundNode = null;
343
+
344
+ if ( scene.backgroundNode && scene.backgroundNode.isNode ) {
345
+
346
+ backgroundNode = scene.backgroundNode;
347
+
348
+ } else {
349
+
350
+ const sceneData = this.get( scene );
351
+
352
+ if ( sceneData.backgroundNode ) {
353
+
354
+ backgroundNode = sceneData.backgroundNode;
355
+
356
+ }
357
+
358
+ }
359
+
360
+ return backgroundNode;
206
361
 
207
362
  }
208
363
 
364
+ /**
365
+ * Returns a fog node for the current configured scene fog.
366
+ *
367
+ * @param {Scene} scene - The scene.
368
+ * @return {Node} A node representing the current scene fog.
369
+ */
209
370
  getFogNode( scene ) {
210
371
 
372
+ this.updateFog( scene );
373
+
211
374
  return scene.fogNode || this.get( scene ).fogNode || null;
212
375
 
213
376
  }
214
377
 
378
+ /**
379
+ * Returns a cache key for the given scene and lights node.
380
+ * This key is used by `RenderObject` as a part of the dynamic
381
+ * cache key (a key that must be checked every time the render
382
+ * objects is drawn).
383
+ *
384
+ * @param {Scene} scene - The scene.
385
+ * @param {LightsNode} lightsNode - The lights node.
386
+ * @return {number} The cache key.
387
+ */
215
388
  getCacheKey( scene, lightsNode ) {
216
389
 
217
- const chain = [ scene, lightsNode ];
390
+ _chainKeys[ 0 ] = scene;
391
+ _chainKeys[ 1 ] = lightsNode;
392
+
218
393
  const callId = this.renderer.info.calls;
219
394
 
220
- let cacheKeyData = this.callHashCache.get( chain );
395
+ const cacheKeyData = this.callHashCache.get( _chainKeys ) || {};
221
396
 
222
- if ( cacheKeyData === undefined || cacheKeyData.callId !== callId ) {
397
+ if ( cacheKeyData.callId !== callId ) {
223
398
 
224
399
  const environmentNode = this.getEnvironmentNode( scene );
225
400
  const fogNode = this.getFogNode( scene );
226
401
 
227
- const cacheKey = [];
402
+ if ( lightsNode ) _cacheKeyValues.push( lightsNode.getCacheKey( true ) );
403
+ if ( environmentNode ) _cacheKeyValues.push( environmentNode.getCacheKey() );
404
+ if ( fogNode ) _cacheKeyValues.push( fogNode.getCacheKey() );
228
405
 
229
- if ( lightsNode ) cacheKey.push( lightsNode.getCacheKey( true ) );
230
- if ( environmentNode ) cacheKey.push( environmentNode.getCacheKey() );
231
- if ( fogNode ) cacheKey.push( fogNode.getCacheKey() );
406
+ _cacheKeyValues.push( this.renderer.shadowMap.enabled ? 1 : 0 );
232
407
 
233
- cacheKeyData = {
234
- callId,
235
- cacheKey: cacheKey.join( ',' )
236
- };
408
+ cacheKeyData.callId = callId;
409
+ cacheKeyData.cacheKey = hashArray( _cacheKeyValues );
237
410
 
238
- this.callHashCache.set( chain, cacheKeyData );
239
-
240
- }
411
+ this.callHashCache.set( _chainKeys, cacheKeyData );
241
412
 
242
- return cacheKeyData.cacheKey;
413
+ _cacheKeyValues.length = 0;
243
414
 
244
- }
415
+ }
245
416
 
246
- updateScene( scene ) {
417
+ _chainKeys.length = 0;
247
418
 
248
- this.updateEnvironment( scene );
249
- this.updateFog( scene );
250
- this.updateBackground( scene );
419
+ return cacheKeyData.cacheKey;
251
420
 
252
421
  }
253
422
 
423
+ /**
424
+ * A boolean that indicates whether tone mapping should be enabled
425
+ * or not.
426
+ *
427
+ * @type {boolean}
428
+ */
254
429
  get isToneMappingState() {
255
430
 
256
431
  return this.renderer.getRenderTarget() ? false : true;
257
432
 
258
433
  }
259
434
 
435
+ /**
436
+ * If a scene background is configured, this method makes sure to
437
+ * represent the background with a corresponding node-based implementation.
438
+ *
439
+ * @param {Scene} scene - The scene.
440
+ */
260
441
  updateBackground( scene ) {
261
442
 
262
443
  const sceneData = this.get( scene );
@@ -264,26 +445,51 @@ class Nodes extends DataMap {
264
445
 
265
446
  if ( background ) {
266
447
 
267
- if ( sceneData.background !== background ) {
448
+ const forceUpdate = ( scene.backgroundBlurriness === 0 && sceneData.backgroundBlurriness > 0 ) || ( scene.backgroundBlurriness > 0 && sceneData.backgroundBlurriness === 0 );
449
+
450
+ if ( sceneData.background !== background || forceUpdate ) {
451
+
452
+ const backgroundNode = this.getCacheNode( 'background', background, () => {
453
+
454
+ if ( background.isCubeTexture === true || ( background.mapping === EquirectangularReflectionMapping || background.mapping === EquirectangularRefractionMapping || background.mapping === CubeUVReflectionMapping ) ) {
455
+
456
+ if ( scene.backgroundBlurriness > 0 || background.mapping === CubeUVReflectionMapping ) {
268
457
 
269
- let backgroundNode = null;
458
+ return pmremTexture( background );
270
459
 
271
- if ( background.isCubeTexture === true || ( background.mapping === EquirectangularReflectionMapping || background.mapping === EquirectangularRefractionMapping ) ) {
460
+ } else {
272
461
 
273
- backgroundNode = pmremTexture( background, normalWorld );
462
+ let envMap;
274
463
 
275
- } else if ( background.isTexture === true ) {
464
+ if ( background.isCubeTexture === true ) {
276
465
 
277
- backgroundNode = texture( background, viewportBottomLeft ).setUpdateMatrix( true );
466
+ envMap = cubeTexture( background );
278
467
 
279
- } else if ( background.isColor !== true ) {
468
+ } else {
280
469
 
281
- console.error( 'WebGPUNodes: Unsupported background configuration.', background );
470
+ envMap = texture( background );
282
471
 
283
- }
472
+ }
473
+
474
+ return cubeMapNode( envMap );
475
+
476
+ }
477
+
478
+ } else if ( background.isTexture === true ) {
479
+
480
+ return texture( background, screenUV.flipY() ).setUpdateMatrix( true );
481
+
482
+ } else if ( background.isColor !== true ) {
483
+
484
+ console.error( 'WebGPUNodes: Unsupported background configuration.', background );
485
+
486
+ }
487
+
488
+ }, forceUpdate );
284
489
 
285
490
  sceneData.backgroundNode = backgroundNode;
286
491
  sceneData.background = background;
492
+ sceneData.backgroundBlurriness = scene.backgroundBlurriness;
287
493
 
288
494
  }
289
495
 
@@ -296,33 +502,75 @@ class Nodes extends DataMap {
296
502
 
297
503
  }
298
504
 
505
+ /**
506
+ * This method is part of the caching of nodes which are used to represents the
507
+ * scene's background, fog or environment.
508
+ *
509
+ * @param {string} type - The type of object to cache.
510
+ * @param {Object} object - The object.
511
+ * @param {Function} callback - A callback that produces a node representation for the given object.
512
+ * @param {boolean} [forceUpdate=false] - Whether an update should be enforced or not.
513
+ * @return {Node} The node representation.
514
+ */
515
+ getCacheNode( type, object, callback, forceUpdate = false ) {
516
+
517
+ const nodeCache = this.cacheLib[ type ] || ( this.cacheLib[ type ] = new WeakMap() );
518
+
519
+ let node = nodeCache.get( object );
520
+
521
+ if ( node === undefined || forceUpdate ) {
522
+
523
+ node = callback();
524
+ nodeCache.set( object, node );
525
+
526
+ }
527
+
528
+ return node;
529
+
530
+ }
531
+
532
+ /**
533
+ * If a scene fog is configured, this method makes sure to
534
+ * represent the fog with a corresponding node-based implementation.
535
+ *
536
+ * @param {Scene} scene - The scene.
537
+ */
299
538
  updateFog( scene ) {
300
539
 
301
540
  const sceneData = this.get( scene );
302
- const fog = scene.fog;
541
+ const sceneFog = scene.fog;
542
+
543
+ if ( sceneFog ) {
544
+
545
+ if ( sceneData.fog !== sceneFog ) {
303
546
 
304
- if ( fog ) {
547
+ const fogNode = this.getCacheNode( 'fog', sceneFog, () => {
305
548
 
306
- if ( sceneData.fog !== fog ) {
549
+ if ( sceneFog.isFogExp2 ) {
307
550
 
308
- let fogNode = null;
551
+ const color = reference( 'color', 'color', sceneFog ).setGroup( renderGroup );
552
+ const density = reference( 'density', 'float', sceneFog ).setGroup( renderGroup );
309
553
 
310
- if ( fog.isFogExp2 ) {
554
+ return fog( color, densityFogFactor( density ) );
311
555
 
312
- fogNode = densityFog( reference( 'color', 'color', fog ), reference( 'density', 'float', fog ) );
556
+ } else if ( sceneFog.isFog ) {
313
557
 
314
- } else if ( fog.isFog ) {
558
+ const color = reference( 'color', 'color', sceneFog ).setGroup( renderGroup );
559
+ const near = reference( 'near', 'float', sceneFog ).setGroup( renderGroup );
560
+ const far = reference( 'far', 'float', sceneFog ).setGroup( renderGroup );
315
561
 
316
- fogNode = rangeFog( reference( 'color', 'color', fog ), reference( 'near', 'float', fog ), reference( 'far', 'float', fog ) );
562
+ return fog( color, rangeFogFactor( near, far ) );
317
563
 
318
- } else {
564
+ } else {
319
565
 
320
- console.error( 'WebGPUNodes: Unsupported fog configuration.', fog );
566
+ console.error( 'THREE.Renderer: Unsupported fog configuration.', sceneFog );
321
567
 
322
- }
568
+ }
569
+
570
+ } );
323
571
 
324
572
  sceneData.fogNode = fogNode;
325
- sceneData.fog = fog;
573
+ sceneData.fog = sceneFog;
326
574
 
327
575
  }
328
576
 
@@ -335,6 +583,12 @@ class Nodes extends DataMap {
335
583
 
336
584
  }
337
585
 
586
+ /**
587
+ * If a scene environment is configured, this method makes sure to
588
+ * represent the environment with a corresponding node-based implementation.
589
+ *
590
+ * @param {Scene} scene - The scene.
591
+ */
338
592
  updateEnvironment( scene ) {
339
593
 
340
594
  const sceneData = this.get( scene );
@@ -344,21 +598,23 @@ class Nodes extends DataMap {
344
598
 
345
599
  if ( sceneData.environment !== environment ) {
346
600
 
347
- let environmentNode = null;
601
+ const environmentNode = this.getCacheNode( 'environment', environment, () => {
602
+
603
+ if ( environment.isCubeTexture === true ) {
348
604
 
349
- if ( environment.isCubeTexture === true ) {
605
+ return cubeTexture( environment );
350
606
 
351
- environmentNode = cubeTexture( environment );
607
+ } else if ( environment.isTexture === true ) {
352
608
 
353
- } else if ( environment.isTexture === true ) {
609
+ return texture( environment );
354
610
 
355
- environmentNode = texture( environment );
611
+ } else {
356
612
 
357
- } else {
613
+ console.error( 'Nodes: Unsupported environment configuration.', environment );
358
614
 
359
- console.error( 'Nodes: Unsupported environment configuration.', environment );
615
+ }
360
616
 
361
- }
617
+ } );
362
618
 
363
619
  sceneData.environmentNode = environmentNode;
364
620
  sceneData.environment = environment;
@@ -393,6 +649,11 @@ class Nodes extends DataMap {
393
649
 
394
650
  }
395
651
 
652
+ /**
653
+ * Returns the current output cache key.
654
+ *
655
+ * @return {string} The output cache key.
656
+ */
396
657
  getOutputCacheKey() {
397
658
 
398
659
  const renderer = this.renderer;
@@ -401,53 +662,87 @@ class Nodes extends DataMap {
401
662
 
402
663
  }
403
664
 
665
+ /**
666
+ * Checks if the output configuration (tone mapping and color space) for
667
+ * the given target has changed.
668
+ *
669
+ * @param {Texture} outputTarget - The output target.
670
+ * @return {boolean} Whether the output configuration has changed or not.
671
+ */
404
672
  hasOutputChange( outputTarget ) {
405
673
 
406
- const cacheKey = outputNodeMap.get( outputTarget );
674
+ const cacheKey = _outputNodeMap.get( outputTarget );
407
675
 
408
676
  return cacheKey !== this.getOutputCacheKey();
409
677
 
410
678
  }
411
679
 
412
- getOutputNode( outputTexture ) {
680
+ /**
681
+ * Returns a node that represents the output configuration (tone mapping and
682
+ * color space) for the current target.
683
+ *
684
+ * @param {Texture} outputTarget - The output target.
685
+ * @return {Node} The output node.
686
+ */
687
+ getOutputNode( outputTarget ) {
413
688
 
414
689
  const renderer = this.renderer;
415
690
  const cacheKey = this.getOutputCacheKey();
416
691
 
417
- const output = texture( outputTexture, viewportTopLeft ).renderOutput( renderer.toneMapping, renderer.currentColorSpace );
692
+ const output = texture( outputTarget, screenUV ).renderOutput( renderer.toneMapping, renderer.currentColorSpace );
418
693
 
419
- outputNodeMap.set( outputTexture, cacheKey );
694
+ _outputNodeMap.set( outputTarget, cacheKey );
420
695
 
421
696
  return output;
422
697
 
423
698
  }
424
699
 
700
+ /**
701
+ * Triggers the call of `updateBefore()` methods
702
+ * for all nodes of the given render object.
703
+ *
704
+ * @param {RenderObject} renderObject - The render object.
705
+ */
425
706
  updateBefore( renderObject ) {
426
707
 
427
- const nodeFrame = this.getNodeFrameForRender( renderObject );
428
708
  const nodeBuilder = renderObject.getNodeBuilderState();
429
709
 
430
710
  for ( const node of nodeBuilder.updateBeforeNodes ) {
431
711
 
432
- nodeFrame.updateBeforeNode( node );
712
+ // update frame state for each node
713
+
714
+ this.getNodeFrameForRender( renderObject ).updateBeforeNode( node );
433
715
 
434
716
  }
435
717
 
436
718
  }
437
719
 
720
+ /**
721
+ * Triggers the call of `updateAfter()` methods
722
+ * for all nodes of the given render object.
723
+ *
724
+ * @param {RenderObject} renderObject - The render object.
725
+ */
438
726
  updateAfter( renderObject ) {
439
727
 
440
- const nodeFrame = this.getNodeFrameForRender( renderObject );
441
728
  const nodeBuilder = renderObject.getNodeBuilderState();
442
729
 
443
730
  for ( const node of nodeBuilder.updateAfterNodes ) {
444
731
 
445
- nodeFrame.updateAfterNode( node );
732
+ // update frame state for each node
733
+
734
+ this.getNodeFrameForRender( renderObject ).updateAfterNode( node );
446
735
 
447
736
  }
448
737
 
449
738
  }
450
739
 
740
+ /**
741
+ * Triggers the call of `update()` methods
742
+ * for all nodes of the given compute node.
743
+ *
744
+ * @param {Node} computeNode - The compute node.
745
+ */
451
746
  updateForCompute( computeNode ) {
452
747
 
453
748
  const nodeFrame = this.getNodeFrame();
@@ -461,6 +756,12 @@ class Nodes extends DataMap {
461
756
 
462
757
  }
463
758
 
759
+ /**
760
+ * Triggers the call of `update()` methods
761
+ * for all nodes of the given compute node.
762
+ *
763
+ * @param {RenderObject} renderObject - The render object.
764
+ */
464
765
  updateForRender( renderObject ) {
465
766
 
466
767
  const nodeFrame = this.getNodeFrameForRender( renderObject );
@@ -474,12 +775,31 @@ class Nodes extends DataMap {
474
775
 
475
776
  }
476
777
 
778
+ /**
779
+ * Returns `true` if the given render object requires a refresh.
780
+ *
781
+ * @param {RenderObject} renderObject - The render object.
782
+ * @return {boolean} Whether the given render object requires a refresh or not.
783
+ */
784
+ needsRefresh( renderObject ) {
785
+
786
+ const nodeFrame = this.getNodeFrameForRender( renderObject );
787
+ const monitor = renderObject.getMonitor();
788
+
789
+ return monitor.needsRefresh( renderObject, nodeFrame );
790
+
791
+ }
792
+
793
+ /**
794
+ * Frees the internal resources.
795
+ */
477
796
  dispose() {
478
797
 
479
798
  super.dispose();
480
799
 
481
800
  this.nodeFrame = new NodeFrame();
482
801
  this.nodeBuilderCache = new Map();
802
+ this.cacheLib = {};
483
803
 
484
804
  }
485
805