super-three 0.181.0 → 0.185.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 (693) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +21332 -19201
  4. package/build/three.core.js +20908 -19853
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1947 -862
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +37 -16
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +33628 -25197
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +33394 -25000
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +14 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +13 -6
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +127 -86
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +102 -17
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMFrustum.js +31 -6
  26. package/examples/jsm/csm/CSMShadowNode.js +10 -3
  27. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  28. package/examples/jsm/effects/AsciiEffect.js +14 -1
  29. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  30. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  31. package/examples/jsm/exporters/DRACOExporter.js +27 -6
  32. package/examples/jsm/exporters/EXRExporter.js +1 -1
  33. package/examples/jsm/exporters/GLTFExporter.js +266 -21
  34. package/examples/jsm/exporters/PLYExporter.js +286 -73
  35. package/examples/jsm/exporters/USDZExporter.js +353 -99
  36. package/examples/jsm/generators/CityGenerator.js +346 -0
  37. package/examples/jsm/generators/ForestGenerator.js +347 -0
  38. package/examples/jsm/generators/TerrainGenerator.js +504 -0
  39. package/examples/jsm/generators/TreeGenerator.js +377 -0
  40. package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
  41. package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
  42. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  43. package/examples/jsm/geometries/LoftGeometry.js +355 -0
  44. package/examples/jsm/geometries/TextGeometry.js +18 -0
  45. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  46. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  47. package/examples/jsm/helpers/LightProbeHelper.js +5 -4
  48. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  49. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  50. package/examples/jsm/helpers/ViewHelper.js +83 -14
  51. package/examples/jsm/inspector/Extension.js +13 -0
  52. package/examples/jsm/inspector/Inspector.js +244 -91
  53. package/examples/jsm/inspector/RendererInspector.js +165 -39
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  55. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  56. package/examples/jsm/inspector/tabs/Console.js +241 -25
  57. package/examples/jsm/inspector/tabs/Memory.js +136 -0
  58. package/examples/jsm/inspector/tabs/Parameters.js +115 -7
  59. package/examples/jsm/inspector/tabs/Performance.js +24 -9
  60. package/examples/jsm/inspector/tabs/Settings.js +306 -0
  61. package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
  62. package/examples/jsm/inspector/tabs/Viewer.js +723 -9
  63. package/examples/jsm/inspector/ui/Graph.js +162 -25
  64. package/examples/jsm/inspector/ui/Item.js +92 -13
  65. package/examples/jsm/inspector/ui/List.js +2 -2
  66. package/examples/jsm/inspector/ui/Profiler.js +1991 -44
  67. package/examples/jsm/inspector/ui/Style.js +1943 -543
  68. package/examples/jsm/inspector/ui/Tab.js +226 -5
  69. package/examples/jsm/inspector/ui/Values.js +126 -8
  70. package/examples/jsm/inspector/ui/utils.js +143 -10
  71. package/examples/jsm/interaction/InteractionManager.js +226 -0
  72. package/examples/jsm/libs/basis/README.md +0 -1
  73. package/examples/jsm/libs/demuxer_mp4.js +3 -3
  74. package/examples/jsm/libs/draco/README.md +0 -1
  75. package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
  76. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  77. package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
  78. package/examples/jsm/libs/mikktspace.module.js +34 -9
  79. package/examples/jsm/lighting/ClusteredLighting.js +55 -0
  80. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  81. package/examples/jsm/lighting/LightProbeGrid.js +681 -0
  82. package/examples/jsm/lines/LineMaterial.js +45 -16
  83. package/examples/jsm/lines/LineSegments2.js +8 -0
  84. package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
  85. package/examples/jsm/loaders/3DMLoader.js +6 -5
  86. package/examples/jsm/loaders/3MFLoader.js +2 -2
  87. package/examples/jsm/loaders/AMFLoader.js +2 -2
  88. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  89. package/examples/jsm/loaders/DRACOLoader.js +51 -18
  90. package/examples/jsm/loaders/EXRLoader.js +701 -90
  91. package/examples/jsm/loaders/FBXLoader.js +235 -37
  92. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  93. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  94. package/examples/jsm/loaders/HDRLoader.js +7 -30
  95. package/examples/jsm/loaders/KMZLoader.js +5 -5
  96. package/examples/jsm/loaders/KTX2Loader.js +58 -17
  97. package/examples/jsm/loaders/LDrawLoader.js +49 -58
  98. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  99. package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
  100. package/examples/jsm/loaders/LWOLoader.js +11 -39
  101. package/examples/jsm/loaders/LottieLoader.js +1 -1
  102. package/examples/jsm/loaders/MaterialXLoader.js +31 -9
  103. package/examples/jsm/loaders/NRRDLoader.js +5 -5
  104. package/examples/jsm/loaders/PCDLoader.js +11 -9
  105. package/examples/jsm/loaders/PLYLoader.js +218 -55
  106. package/examples/jsm/loaders/SVGLoader.js +549 -497
  107. package/examples/jsm/loaders/TDSLoader.js +0 -2
  108. package/examples/jsm/loaders/TGALoader.js +0 -2
  109. package/examples/jsm/loaders/TTFLoader.js +1 -1
  110. package/examples/jsm/loaders/USDLoader.js +127 -43
  111. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  112. package/examples/jsm/loaders/VOXLoader.js +660 -117
  113. package/examples/jsm/loaders/VRMLLoader.js +80 -3
  114. package/examples/jsm/loaders/VTKLoader.js +42 -25
  115. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  116. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  117. package/examples/jsm/loaders/usd/USDAParser.js +504 -344
  118. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  119. package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
  120. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  121. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  122. package/examples/jsm/math/Octree.js +131 -1
  123. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  124. package/examples/jsm/misc/RollerCoaster.js +42 -4
  125. package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
  126. package/examples/jsm/misc/Volume.js +2 -3
  127. package/examples/jsm/misc/VolumeSlice.js +0 -1
  128. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  129. package/examples/jsm/objects/GroundedSkybox.js +1 -1
  130. package/examples/jsm/objects/LensflareMesh.js +1 -1
  131. package/examples/jsm/objects/Reflector.js +72 -25
  132. package/examples/jsm/objects/Sky.js +90 -6
  133. package/examples/jsm/objects/SkyMesh.js +150 -16
  134. package/examples/jsm/objects/Water.js +4 -3
  135. package/examples/jsm/objects/Water2.js +5 -3
  136. package/examples/jsm/objects/Water2Mesh.js +1 -1
  137. package/examples/jsm/objects/WaterMesh.js +5 -7
  138. package/examples/jsm/physics/AmmoPhysics.js +27 -15
  139. package/examples/jsm/physics/JoltPhysics.js +10 -6
  140. package/examples/jsm/physics/RapierPhysics.js +36 -7
  141. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  142. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  143. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  144. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  145. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  146. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  147. package/examples/jsm/renderers/Projector.js +246 -28
  148. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  149. package/examples/jsm/shaders/GTAOShader.js +19 -6
  150. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  151. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  152. package/examples/jsm/shaders/SAOShader.js +17 -4
  153. package/examples/jsm/shaders/SSAOShader.js +11 -1
  154. package/examples/jsm/shaders/SSRShader.js +6 -5
  155. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  156. package/examples/jsm/shaders/VignetteShader.js +1 -1
  157. package/examples/jsm/shaders/VolumeShader.js +31 -44
  158. package/examples/jsm/transpiler/AST.js +44 -0
  159. package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
  160. package/examples/jsm/transpiler/Linker.js +1 -1
  161. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  162. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  163. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  164. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  165. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  166. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  167. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  168. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  169. package/examples/jsm/tsl/display/BloomNode.js +75 -25
  170. package/examples/jsm/tsl/display/CRT.js +150 -0
  171. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  172. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  173. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  174. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  175. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  176. package/examples/jsm/tsl/display/FXAANode.js +13 -14
  177. package/examples/jsm/tsl/display/GTAONode.js +40 -17
  178. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  179. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  180. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
  181. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  182. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  183. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  184. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  185. package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
  186. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  187. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
  188. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  189. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  190. package/examples/jsm/tsl/display/SSAAPassNode.js +15 -27
  191. package/examples/jsm/tsl/display/SSGINode.js +96 -62
  192. package/examples/jsm/tsl/display/SSRNode.js +831 -134
  193. package/examples/jsm/tsl/display/SSSNode.js +8 -6
  194. package/examples/jsm/tsl/display/Shape.js +29 -0
  195. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  196. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  197. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  198. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  199. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  200. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  201. package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
  202. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  203. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  204. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  205. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
  206. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  207. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  208. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  209. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  210. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  211. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  212. package/examples/jsm/tsl/math/Bayer.js +53 -3
  213. package/examples/jsm/tsl/math/curlNoise.js +107 -0
  214. package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
  215. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
  216. package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
  217. package/examples/jsm/tsl/utils/RNoise.js +51 -0
  218. package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
  219. package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
  220. package/examples/jsm/utils/ColorUtils.js +76 -0
  221. package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
  222. package/examples/jsm/utils/LDrawUtils.js +1 -1
  223. package/examples/jsm/utils/SceneOptimizer.js +1 -1
  224. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  225. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  226. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  227. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  228. package/examples/jsm/webxr/ARButton.js +1 -1
  229. package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
  230. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
  231. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  232. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  233. package/package.json +28 -34
  234. package/src/Three.Core.js +3 -1
  235. package/src/Three.TSL.js +35 -14
  236. package/src/Three.WebGPU.Nodes.js +5 -0
  237. package/src/Three.WebGPU.js +13 -0
  238. package/src/Three.js +1 -0
  239. package/src/animation/AnimationAction.js +18 -4
  240. package/src/animation/AnimationClip.js +0 -139
  241. package/src/animation/AnimationMixer.js +6 -0
  242. package/src/animation/AnimationUtils.js +1 -12
  243. package/src/animation/KeyframeTrack.js +47 -8
  244. package/src/animation/PropertyBinding.js +2 -2
  245. package/src/animation/PropertyMixer.js +4 -4
  246. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  247. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  248. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  249. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  250. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  251. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  252. package/src/audio/Audio.js +1 -1
  253. package/src/audio/AudioContext.js +2 -2
  254. package/src/audio/AudioListener.js +5 -3
  255. package/src/cameras/Camera.js +34 -4
  256. package/src/cameras/CubeCamera.js +20 -0
  257. package/src/cameras/StereoCamera.js +5 -2
  258. package/src/constants.js +90 -5
  259. package/src/core/BufferAttribute.js +13 -1
  260. package/src/core/BufferGeometry.js +43 -9
  261. package/src/core/Clock.js +7 -0
  262. package/src/core/Object3D.js +69 -11
  263. package/src/core/Raycaster.js +3 -3
  264. package/src/core/RenderTarget.js +19 -6
  265. package/src/extras/PMREMGenerator.js +13 -22
  266. package/src/extras/TextureUtils.js +6 -2
  267. package/src/extras/core/ShapePath.js +149 -160
  268. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  269. package/src/geometries/ExtrudeGeometry.js +2 -2
  270. package/src/geometries/PolyhedronGeometry.js +1 -1
  271. package/src/geometries/SphereGeometry.js +8 -3
  272. package/src/geometries/TorusGeometry.js +8 -3
  273. package/src/helpers/CameraHelper.js +3 -0
  274. package/src/helpers/DirectionalLightHelper.js +6 -1
  275. package/src/helpers/HemisphereLightHelper.js +5 -0
  276. package/src/helpers/PointLightHelper.js +3 -25
  277. package/src/helpers/SpotLightHelper.js +4 -1
  278. package/src/lights/DirectionalLight.js +13 -0
  279. package/src/lights/HemisphereLight.js +10 -0
  280. package/src/lights/Light.js +1 -11
  281. package/src/lights/LightProbe.js +0 -15
  282. package/src/lights/LightShadow.js +15 -6
  283. package/src/lights/PointLight.js +15 -0
  284. package/src/lights/PointLightShadow.js +0 -86
  285. package/src/lights/SpotLight.js +22 -1
  286. package/src/lights/webgpu/IESSpotLight.js +2 -1
  287. package/src/loaders/AudioLoader.js +11 -1
  288. package/src/loaders/Cache.js +28 -0
  289. package/src/loaders/DataTextureLoader.js +75 -42
  290. package/src/loaders/FileLoader.js +2 -3
  291. package/src/loaders/ImageBitmapLoader.js +12 -9
  292. package/src/loaders/Loader.js +6 -0
  293. package/src/loaders/LoadingManager.js +5 -0
  294. package/src/loaders/MaterialLoader.js +37 -266
  295. package/src/loaders/ObjectLoader.js +48 -6
  296. package/src/loaders/nodes/NodeLoader.js +2 -2
  297. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  298. package/src/materials/LineBasicMaterial.js +4 -0
  299. package/src/materials/Material.js +198 -1
  300. package/src/materials/MeshBasicMaterial.js +24 -0
  301. package/src/materials/MeshDepthMaterial.js +10 -0
  302. package/src/materials/MeshDistanceMaterial.js +10 -0
  303. package/src/materials/MeshLambertMaterial.js +49 -1
  304. package/src/materials/MeshMatcapMaterial.js +25 -1
  305. package/src/materials/MeshNormalMaterial.js +9 -1
  306. package/src/materials/MeshPhongMaterial.js +49 -1
  307. package/src/materials/MeshPhysicalMaterial.js +38 -0
  308. package/src/materials/MeshStandardMaterial.js +42 -1
  309. package/src/materials/MeshToonMaterial.js +35 -2
  310. package/src/materials/PointsMaterial.js +7 -0
  311. package/src/materials/ShaderMaterial.js +106 -1
  312. package/src/materials/SpriteMaterial.js +7 -0
  313. package/src/materials/nodes/Line2NodeMaterial.js +380 -297
  314. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  315. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  316. package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
  317. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
  318. package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
  319. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
  320. package/src/materials/nodes/NodeMaterial.js +153 -89
  321. package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
  322. package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
  323. package/src/math/Box3.js +5 -0
  324. package/src/math/FrustumArray.js +103 -133
  325. package/src/math/Interpolant.js +1 -1
  326. package/src/math/Line3.js +6 -5
  327. package/src/math/MathUtils.js +12 -12
  328. package/src/math/Matrix2.js +13 -9
  329. package/src/math/Matrix3.js +24 -9
  330. package/src/math/Matrix4.js +112 -74
  331. package/src/math/Plane.js +4 -3
  332. package/src/math/Quaternion.js +3 -29
  333. package/src/math/Sphere.js +1 -1
  334. package/src/math/Triangle.js +1 -1
  335. package/src/math/Vector2.js +13 -9
  336. package/src/math/Vector3.js +17 -15
  337. package/src/math/Vector4.js +15 -11
  338. package/src/math/interpolants/BezierInterpolant.js +106 -0
  339. package/src/nodes/Nodes.js +86 -71
  340. package/src/nodes/TSL.js +15 -13
  341. package/src/nodes/accessors/Arrays.js +5 -5
  342. package/src/nodes/accessors/Batch.js +108 -0
  343. package/src/nodes/accessors/Bitangent.js +7 -7
  344. package/src/nodes/accessors/BufferAttributeNode.js +120 -17
  345. package/src/nodes/accessors/BufferNode.js +29 -2
  346. package/src/nodes/accessors/Camera.js +149 -28
  347. package/src/nodes/accessors/ClippingNode.js +5 -5
  348. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  349. package/src/nodes/accessors/Instance.js +264 -0
  350. package/src/nodes/accessors/MaterialNode.js +27 -3
  351. package/src/nodes/accessors/MaterialProperties.js +6 -8
  352. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  353. package/src/nodes/accessors/ModelNode.js +1 -1
  354. package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
  355. package/src/nodes/accessors/Normal.js +24 -24
  356. package/src/nodes/accessors/Object3DNode.js +1 -1
  357. package/src/nodes/accessors/Position.js +39 -3
  358. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  359. package/src/nodes/accessors/ReferenceNode.js +9 -8
  360. package/src/nodes/accessors/ReflectVector.js +3 -3
  361. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  362. package/src/nodes/accessors/SceneProperties.js +47 -0
  363. package/src/nodes/accessors/Skinning.js +263 -0
  364. package/src/nodes/accessors/StorageBufferNode.js +16 -27
  365. package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
  366. package/src/nodes/accessors/StorageTextureNode.js +74 -11
  367. package/src/nodes/accessors/Tangent.js +8 -18
  368. package/src/nodes/accessors/Texture3DNode.js +32 -35
  369. package/src/nodes/accessors/TextureNode.js +124 -25
  370. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  371. package/src/nodes/accessors/UserDataNode.js +1 -2
  372. package/src/nodes/accessors/VertexColorNode.js +1 -2
  373. package/src/nodes/code/FunctionCallNode.js +1 -1
  374. package/src/nodes/code/FunctionNode.js +4 -19
  375. package/src/nodes/core/ArrayNode.js +21 -2
  376. package/src/nodes/core/AssignNode.js +3 -3
  377. package/src/nodes/core/AttributeNode.js +3 -3
  378. package/src/nodes/core/BypassNode.js +1 -1
  379. package/src/nodes/core/ContextNode.js +104 -5
  380. package/src/nodes/core/IndexNode.js +2 -1
  381. package/src/nodes/core/InputNode.js +1 -1
  382. package/src/nodes/core/InspectorNode.js +1 -1
  383. package/src/nodes/core/IsolateNode.js +1 -1
  384. package/src/nodes/core/MRTNode.js +55 -4
  385. package/src/nodes/core/Node.js +151 -17
  386. package/src/nodes/core/NodeBuilder.js +479 -101
  387. package/src/nodes/core/NodeError.js +28 -0
  388. package/src/nodes/core/NodeFrame.js +12 -4
  389. package/src/nodes/core/NodeUtils.js +20 -18
  390. package/src/nodes/core/OutputStructNode.js +13 -11
  391. package/src/nodes/core/OverrideContextNode.js +153 -0
  392. package/src/nodes/core/ParameterNode.js +4 -4
  393. package/src/nodes/core/PropertyNode.js +66 -4
  394. package/src/nodes/core/StackNode.js +91 -20
  395. package/src/nodes/core/StackTrace.js +139 -0
  396. package/src/nodes/core/StructNode.js +20 -8
  397. package/src/nodes/core/StructTypeNode.js +17 -23
  398. package/src/nodes/core/SubBuildNode.js +2 -2
  399. package/src/nodes/core/UniformGroupNode.js +36 -6
  400. package/src/nodes/core/UniformNode.js +21 -5
  401. package/src/nodes/core/VarNode.js +56 -23
  402. package/src/nodes/core/VaryingNode.js +14 -21
  403. package/src/nodes/display/BlendModes.js +1 -105
  404. package/src/nodes/display/BumpMapNode.js +6 -1
  405. package/src/nodes/display/ColorAdjustment.js +27 -9
  406. package/src/nodes/display/ColorSpaceNode.js +3 -3
  407. package/src/nodes/display/FrontFacingNode.js +38 -9
  408. package/src/nodes/display/NormalMapNode.js +41 -6
  409. package/src/nodes/display/PassNode.js +157 -56
  410. package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
  411. package/src/nodes/display/RenderOutputNode.js +19 -10
  412. package/src/nodes/display/ScreenNode.js +4 -2
  413. package/src/nodes/display/ToneMappingNode.js +1 -1
  414. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  415. package/src/nodes/display/ViewportDepthNode.js +52 -4
  416. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  417. package/src/nodes/display/ViewportTextureNode.js +39 -11
  418. package/src/nodes/fog/Fog.js +18 -35
  419. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  420. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  421. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  422. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  423. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  424. package/src/nodes/functions/VolumetricLightingModel.js +40 -7
  425. package/src/nodes/geometry/RangeNode.js +5 -3
  426. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  427. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  428. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  429. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  430. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  431. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
  432. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  433. package/src/nodes/lighting/EnvironmentNode.js +30 -5
  434. package/src/nodes/lighting/IESSpotLightNode.js +40 -2
  435. package/src/nodes/lighting/LightingContextNode.js +10 -2
  436. package/src/nodes/lighting/LightsNode.js +97 -65
  437. package/src/nodes/lighting/PointShadowNode.js +166 -148
  438. package/src/nodes/lighting/ShadowFilterNode.js +74 -117
  439. package/src/nodes/lighting/ShadowNode.js +149 -51
  440. package/src/nodes/materialx/lib/mx_noise.js +2 -2
  441. package/src/nodes/math/BitcastNode.js +1 -1
  442. package/src/nodes/math/BitcountNode.js +433 -0
  443. package/src/nodes/math/ConditionalNode.js +6 -6
  444. package/src/nodes/math/MathNode.js +115 -52
  445. package/src/nodes/math/OperatorNode.js +24 -23
  446. package/src/nodes/math/PackFloatNode.js +98 -0
  447. package/src/nodes/math/UnpackFloatNode.js +96 -0
  448. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  449. package/src/nodes/pmrem/PMREMNode.js +34 -3
  450. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  451. package/src/nodes/tsl/TSLBase.js +1 -1
  452. package/src/nodes/tsl/TSLCore.js +99 -33
  453. package/src/nodes/utils/ArrayElementNode.js +14 -1
  454. package/src/nodes/utils/ConvertNode.js +1 -1
  455. package/src/nodes/utils/DebugNode.js +12 -12
  456. package/src/nodes/utils/EquirectUV.js +30 -5
  457. package/src/nodes/utils/EventNode.js +31 -2
  458. package/src/nodes/utils/FlipNode.js +1 -1
  459. package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
  460. package/src/nodes/utils/JoinNode.js +3 -3
  461. package/src/nodes/utils/LoopNode.js +1 -1
  462. package/src/nodes/utils/MemberNode.js +2 -2
  463. package/src/nodes/utils/Packing.js +48 -5
  464. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  465. package/src/nodes/utils/RTTNode.js +41 -25
  466. package/src/nodes/utils/ReflectorNode.js +4 -4
  467. package/src/nodes/utils/Remap.js +48 -0
  468. package/src/nodes/utils/RotateNode.js +1 -1
  469. package/src/nodes/utils/SampleNode.js +1 -1
  470. package/src/nodes/utils/SetNode.js +1 -1
  471. package/src/nodes/utils/SplitNode.js +1 -1
  472. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  473. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  474. package/src/nodes/utils/UVUtils.js +28 -0
  475. package/src/objects/BatchedMesh.js +66 -30
  476. package/src/objects/InstancedMesh.js +19 -3
  477. package/src/objects/Line.js +1 -1
  478. package/src/objects/Mesh.js +1 -1
  479. package/src/objects/Points.js +1 -1
  480. package/src/objects/SkinnedMesh.js +26 -9
  481. package/src/renderers/WebGLRenderer.js +344 -156
  482. package/src/renderers/common/Animation.js +3 -3
  483. package/src/renderers/common/Attributes.js +15 -1
  484. package/src/renderers/common/Backend.js +78 -13
  485. package/src/renderers/common/Background.js +26 -13
  486. package/src/renderers/common/BindGroup.js +1 -16
  487. package/src/renderers/common/Binding.js +11 -0
  488. package/src/renderers/common/Bindings.js +141 -57
  489. package/src/renderers/common/BlendMode.js +143 -0
  490. package/src/renderers/common/Buffer.js +49 -0
  491. package/src/renderers/common/BundleGroup.js +1 -1
  492. package/src/renderers/common/ChainMap.js +30 -6
  493. package/src/renderers/common/ClippingContext.js +10 -2
  494. package/src/renderers/common/ComputePipeline.js +1 -1
  495. package/src/renderers/common/CubeRenderTarget.js +51 -7
  496. package/src/renderers/common/Geometries.js +29 -3
  497. package/src/renderers/common/Info.js +374 -4
  498. package/src/renderers/common/InspectorBase.js +6 -1
  499. package/src/renderers/common/Lighting.js +51 -19
  500. package/src/renderers/common/Pipelines.js +40 -7
  501. package/src/renderers/common/PostProcessing.js +8 -206
  502. package/src/renderers/common/ReadbackBuffer.js +78 -0
  503. package/src/renderers/common/RenderBundle.js +3 -1
  504. package/src/renderers/common/RenderBundles.js +7 -3
  505. package/src/renderers/common/RenderContext.js +16 -0
  506. package/src/renderers/common/RenderContexts.js +33 -49
  507. package/src/renderers/common/RenderList.js +41 -4
  508. package/src/renderers/common/RenderLists.js +2 -1
  509. package/src/renderers/common/RenderObject.js +88 -16
  510. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  511. package/src/renderers/common/RenderObjects.js +21 -5
  512. package/src/renderers/common/RenderPipeline.js +232 -17
  513. package/src/renderers/common/Renderer.js +700 -163
  514. package/src/renderers/common/Sampler.js +16 -48
  515. package/src/renderers/common/StorageBuffer.js +13 -1
  516. package/src/renderers/common/Textures.js +121 -9
  517. package/src/renderers/common/TimestampQueryPool.js +6 -4
  518. package/src/renderers/common/Uniform.js +8 -0
  519. package/src/renderers/common/UniformsGroup.js +84 -1
  520. package/src/renderers/common/XRManager.js +377 -51
  521. package/src/renderers/common/extras/PMREMGenerator.js +40 -61
  522. package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
  523. package/src/renderers/common/nodes/NodeLibrary.js +4 -4
  524. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
  525. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  526. package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
  527. package/src/renderers/shaders/DFGLUTData.js +19 -34
  528. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  529. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  530. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  531. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  532. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  533. package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
  534. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
  535. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  536. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
  537. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
  538. package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
  539. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  540. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  541. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  542. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  543. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +3 -1
  544. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  545. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  546. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
  547. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  548. package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
  549. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  550. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  551. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  552. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  553. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  554. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
  555. package/src/renderers/shaders/ShaderChunk.js +5 -3
  556. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  557. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  558. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
  559. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  560. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  561. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  562. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  563. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  564. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  565. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  566. package/src/renderers/shaders/ShaderLib.js +7 -6
  567. package/src/renderers/shaders/UniformsLib.js +7 -5
  568. package/src/renderers/shaders/UniformsUtils.js +27 -5
  569. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  570. package/src/renderers/webgl/WebGLBackground.js +15 -15
  571. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  572. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  573. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  574. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  575. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  576. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  577. package/src/renderers/webgl/WebGLLights.js +18 -1
  578. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  579. package/src/renderers/webgl/WebGLObjects.js +3 -1
  580. package/src/renderers/webgl/WebGLOutput.js +271 -0
  581. package/src/renderers/webgl/WebGLProgram.js +54 -113
  582. package/src/renderers/webgl/WebGLPrograms.js +74 -55
  583. package/src/renderers/webgl/WebGLRenderLists.js +24 -1
  584. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  585. package/src/renderers/webgl/WebGLShaderCache.js +5 -11
  586. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  587. package/src/renderers/webgl/WebGLState.js +75 -37
  588. package/src/renderers/webgl/WebGLTextures.js +230 -56
  589. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  590. package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
  591. package/src/renderers/webgl/WebGLUtils.js +6 -2
  592. package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
  593. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  594. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
  595. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  596. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  597. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  598. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
  599. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  600. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
  601. package/src/renderers/webgpu/WebGPUBackend.js +733 -302
  602. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  603. package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
  604. package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
  605. package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
  606. package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
  607. package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
  608. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
  609. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
  610. package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
  611. package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
  612. package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
  613. package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
  614. package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
  615. package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
  616. package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
  617. package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
  618. package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
  619. package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
  620. package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
  621. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
  622. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
  623. package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
  624. package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
  625. package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
  626. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
  627. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
  628. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
  629. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
  630. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
  631. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  632. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  633. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
  634. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
  635. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
  636. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
  637. package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
  638. package/src/renderers/webxr/WebXRController.js +12 -0
  639. package/src/renderers/webxr/WebXRManager.js +4 -2
  640. package/src/textures/CubeDepthTexture.js +76 -0
  641. package/src/textures/DepthTexture.js +1 -1
  642. package/src/textures/ExternalTexture.js +0 -3
  643. package/src/textures/HTMLTexture.js +74 -0
  644. package/src/textures/Source.js +2 -2
  645. package/src/textures/Texture.js +16 -5
  646. package/src/utils.js +280 -3
  647. package/examples/fonts/LICENSE +0 -13
  648. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  649. package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
  650. package/examples/fonts/README.md +0 -11
  651. package/examples/fonts/droid/NOTICE +0 -190
  652. package/examples/fonts/droid/README.txt +0 -18
  653. package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
  654. package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
  655. package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
  656. package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
  657. package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
  658. package/examples/fonts/gentilis_bold.typeface.json +0 -1
  659. package/examples/fonts/gentilis_regular.typeface.json +0 -1
  660. package/examples/fonts/helvetiker_bold.typeface.json +0 -1
  661. package/examples/fonts/helvetiker_regular.typeface.json +0 -1
  662. package/examples/fonts/optimer_bold.typeface.json +0 -1
  663. package/examples/fonts/optimer_regular.typeface.json +0 -1
  664. package/examples/fonts/ttf/README.md +0 -9
  665. package/examples/fonts/ttf/kenpixel.ttf +0 -0
  666. package/examples/jsm/libs/ammo.wasm.js +0 -822
  667. package/examples/jsm/libs/ammo.wasm.wasm +0 -0
  668. package/examples/jsm/libs/draco/draco_encoder.js +0 -33
  669. package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
  670. package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
  671. package/examples/jsm/libs/opentype.module.js +0 -14506
  672. package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
  673. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
  674. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  675. package/examples/jsm/lighting/TiledLighting.js +0 -42
  676. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  677. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  678. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  679. package/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
  680. package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
  681. package/src/nodes/accessors/BatchNode.js +0 -163
  682. package/src/nodes/accessors/InstanceNode.js +0 -244
  683. package/src/nodes/accessors/InstancedMeshNode.js +0 -50
  684. package/src/nodes/accessors/SceneNode.js +0 -145
  685. package/src/nodes/accessors/SkinningNode.js +0 -327
  686. package/src/nodes/code/ScriptableNode.js +0 -726
  687. package/src/nodes/code/ScriptableValueNode.js +0 -253
  688. package/src/nodes/display/PosterizeNode.js +0 -65
  689. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  690. package/src/nodes/utils/RemapNode.js +0 -125
  691. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  692. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  693. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -5,7 +5,7 @@ import BasicLightMapNode from '../../nodes/lighting/BasicLightMapNode.js';
5
5
  import BasicLightingModel from '../../nodes/functions/BasicLightingModel.js';
6
6
  import { normalViewGeometry } from '../../nodes/accessors/Normal.js';
7
7
  import { diffuseColor } from '../../nodes/core/PropertyNode.js';
8
- import { directionToFaceDirection } from '../../nodes/display/FrontFacingNode.js';
8
+ import { negateOnBackSide } from '../../nodes/display/FrontFacingNode.js';
9
9
 
10
10
  import { MeshBasicMaterial } from '../MeshBasicMaterial.js';
11
11
 
@@ -66,7 +66,7 @@ class MeshBasicNodeMaterial extends NodeMaterial {
66
66
  */
67
67
  setupNormal() {
68
68
 
69
- return directionToFaceDirection( normalViewGeometry ); // see #28839
69
+ return negateOnBackSide( normalViewGeometry ); // see #28839
70
70
 
71
71
  }
72
72
 
@@ -1,6 +1,6 @@
1
1
  import NodeMaterial from './NodeMaterial.js';
2
2
  import { diffuseColor } from '../../nodes/core/PropertyNode.js';
3
- import { directionToColor } from '../../nodes/utils/Packing.js';
3
+ import { packNormalToRGB } from '../../nodes/utils/Packing.js';
4
4
  import { materialOpacity } from '../../nodes/accessors/MaterialNode.js';
5
5
  import { normalView } from '../../nodes/accessors/Normal.js';
6
6
  import { colorSpaceToWorking } from '../../nodes/display/ColorSpaceNode.js';
@@ -58,7 +58,7 @@ class MeshNormalNodeMaterial extends NodeMaterial {
58
58
 
59
59
  // By convention, a normal packed to RGB is in sRGB color space. Convert it to working color space.
60
60
 
61
- diffuseColor.assign( colorSpaceToWorking( vec4( directionToColor( normalView ), opacityNode ), SRGBColorSpace ) );
61
+ diffuseColor.assign( colorSpaceToWorking( vec4( packNormalToRGB( normalView ), opacityNode ), SRGBColorSpace ) );
62
62
 
63
63
  }
64
64
 
@@ -127,15 +127,6 @@ class MeshPhongNodeMaterial extends NodeMaterial {
127
127
 
128
128
  }
129
129
 
130
- copy( source ) {
131
-
132
- this.shininessNode = source.shininessNode;
133
- this.specularNode = source.specularNode;
134
-
135
- return super.copy( source );
136
-
137
- }
138
-
139
130
  }
140
131
 
141
132
  export default MeshPhongNodeMaterial;
@@ -1,4 +1,4 @@
1
- import { clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, specularColor, specularF90, diffuseColor, metalness, roughness, anisotropy, alphaT, anisotropyT, anisotropyB, ior, transmission, thickness, attenuationDistance, attenuationColor, dispersion } from '../../nodes/core/PropertyNode.js';
1
+ import { clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, specularColor, specularColorBlended, specularF90, diffuseColor, metalness, roughness, anisotropy, alphaT, anisotropyT, anisotropyB, ior, transmission, thickness, attenuationDistance, attenuationColor, dispersion } from '../../nodes/core/PropertyNode.js';
2
2
  import { materialClearcoat, materialClearcoatRoughness, materialClearcoatNormal, materialSheen, materialSheenRoughness, materialIridescence, materialIridescenceIOR, materialIridescenceThickness, materialSpecularIntensity, materialSpecularColor, materialAnisotropy, materialIOR, materialTransmission, materialThickness, materialAttenuationDistance, materialAttenuationColor, materialDispersion } from '../../nodes/accessors/MaterialNode.js';
3
3
  import { float, vec2, vec3, If } from '../../nodes/tsl/TSLBase.js';
4
4
  import getRoughness from '../../nodes/functions/material/getRoughness.js';
@@ -350,7 +350,8 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
350
350
  const iorNode = this.iorNode ? float( this.iorNode ) : materialIOR;
351
351
 
352
352
  ior.assign( iorNode );
353
- specularColor.assign( mix( min( pow2( ior.sub( 1.0 ).div( ior.add( 1.0 ) ) ).mul( materialSpecularColor ), vec3( 1.0 ) ).mul( materialSpecularIntensity ), diffuseColor.rgb, metalness ) );
353
+ specularColor.assign( min( pow2( ior.sub( 1.0 ).div( ior.add( 1.0 ) ) ).mul( materialSpecularColor ), vec3( 1.0 ) ).mul( materialSpecularIntensity ) );
354
+ specularColorBlended.assign( mix( specularColor, diffuseColor.rgb, metalness ) );
354
355
  specularF90.assign( mix( materialSpecularIntensity, 1.0, metalness ) );
355
356
 
356
357
  }
@@ -485,34 +486,6 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
485
486
 
486
487
  }
487
488
 
488
- copy( source ) {
489
-
490
- this.clearcoatNode = source.clearcoatNode;
491
- this.clearcoatRoughnessNode = source.clearcoatRoughnessNode;
492
- this.clearcoatNormalNode = source.clearcoatNormalNode;
493
-
494
- this.sheenNode = source.sheenNode;
495
- this.sheenRoughnessNode = source.sheenRoughnessNode;
496
-
497
- this.iridescenceNode = source.iridescenceNode;
498
- this.iridescenceIORNode = source.iridescenceIORNode;
499
- this.iridescenceThicknessNode = source.iridescenceThicknessNode;
500
-
501
- this.specularIntensityNode = source.specularIntensityNode;
502
- this.specularColorNode = source.specularColorNode;
503
-
504
- this.transmissionNode = source.transmissionNode;
505
- this.thicknessNode = source.thicknessNode;
506
- this.attenuationDistanceNode = source.attenuationDistanceNode;
507
- this.attenuationColorNode = source.attenuationColorNode;
508
- this.dispersionNode = source.dispersionNode;
509
-
510
- this.anisotropyNode = source.anisotropyNode;
511
-
512
- return super.copy( source );
513
-
514
- }
515
-
516
489
  }
517
490
 
518
491
  export default MeshPhysicalNodeMaterial;
@@ -157,19 +157,6 @@ class MeshSSSNodeMaterial extends MeshPhysicalNodeMaterial {
157
157
 
158
158
  }
159
159
 
160
- copy( source ) {
161
-
162
- this.thicknessColorNode = source.thicknessColorNode;
163
- this.thicknessDistortionNode = source.thicknessDistortionNode;
164
- this.thicknessAmbientNode = source.thicknessAmbientNode;
165
- this.thicknessAttenuationNode = source.thicknessAttenuationNode;
166
- this.thicknessPowerNode = source.thicknessPowerNode;
167
- this.thicknessScaleNode = source.thicknessScaleNode;
168
-
169
- return super.copy( source );
170
-
171
- }
172
-
173
160
  }
174
161
 
175
162
  export default MeshSSSNodeMaterial;
@@ -1,11 +1,11 @@
1
1
  import NodeMaterial from './NodeMaterial.js';
2
- import { diffuseColor, metalness, roughness, specularColor, specularF90 } from '../../nodes/core/PropertyNode.js';
2
+ import { diffuseColor, diffuseContribution, metalness, roughness, specularColor, specularColorBlended, specularF90 } from '../../nodes/core/PropertyNode.js';
3
3
  import { mix } from '../../nodes/math/MathNode.js';
4
4
  import { materialRoughness, materialMetalness } from '../../nodes/accessors/MaterialNode.js';
5
5
  import getRoughness from '../../nodes/functions/material/getRoughness.js';
6
6
  import PhysicalLightingModel from '../../nodes/functions/PhysicalLightingModel.js';
7
7
  import EnvironmentNode from '../../nodes/lighting/EnvironmentNode.js';
8
- import { float, vec3, vec4 } from '../../nodes/tsl/TSLBase.js';
8
+ import { float, vec3 } from '../../nodes/tsl/TSLBase.js';
9
9
 
10
10
  import { MeshStandardMaterial } from '../MeshStandardMaterial.js';
11
11
 
@@ -135,7 +135,8 @@ class MeshStandardNodeMaterial extends NodeMaterial {
135
135
 
136
136
  const specularColorNode = mix( vec3( 0.04 ), diffuseColor.rgb, metalness );
137
137
 
138
- specularColor.assign( specularColorNode );
138
+ specularColor.assign( vec3( 0.04 ) );
139
+ specularColorBlended.assign( specularColorNode );
139
140
  specularF90.assign( 1.0 );
140
141
 
141
142
  }
@@ -166,18 +167,7 @@ class MeshStandardNodeMaterial extends NodeMaterial {
166
167
 
167
168
  // DIFFUSE COLOR
168
169
 
169
- diffuseColor.assign( vec4( diffuseColor.rgb.mul( metalnessNode.oneMinus() ), diffuseColor.a ) );
170
-
171
- }
172
-
173
- copy( source ) {
174
-
175
- this.emissiveNode = source.emissiveNode;
176
-
177
- this.metalnessNode = source.metalnessNode;
178
- this.roughnessNode = source.roughnessNode;
179
-
180
- return super.copy( source );
170
+ diffuseContribution.assign( diffuseColor.rgb.mul( metalnessNode.oneMinus() ) );
181
171
 
182
172
  }
183
173
 
@@ -1,16 +1,16 @@
1
1
  import { Material } from '../Material.js';
2
2
 
3
3
  import { hashArray, hashString } from '../../nodes/core/NodeUtils.js';
4
- import { output, diffuseColor, emissive, varyingProperty } from '../../nodes/core/PropertyNode.js';
4
+ import { output, diffuseColor, ambientOcclusion, emissive } from '../../nodes/core/PropertyNode.js';
5
5
  import { materialAlphaTest, materialColor, materialOpacity, materialEmissive, materialNormal, materialLightMap, materialAO } from '../../nodes/accessors/MaterialNode.js';
6
6
  import { modelViewProjection } from '../../nodes/accessors/ModelViewProjectionNode.js';
7
7
  import { normalLocal } from '../../nodes/accessors/Normal.js';
8
- import { instancedMesh } from '../../nodes/accessors/InstancedMeshNode.js';
9
- import { batch } from '../../nodes/accessors/BatchNode.js';
8
+ import { instancedMesh, instanceColor } from '../../nodes/accessors/Instance.js';
9
+ import { batch, batchColor } from '../../nodes/accessors/Batch.js';
10
10
  import { materialReference } from '../../nodes/accessors/MaterialReferenceNode.js';
11
11
  import { positionLocal, positionView } from '../../nodes/accessors/Position.js';
12
- import { skinning } from '../../nodes/accessors/SkinningNode.js';
13
- import { morphReference } from '../../nodes/accessors/MorphNode.js';
12
+ import { skinning } from '../../nodes/accessors/Skinning.js';
13
+ import { morphReference } from '../../nodes/accessors/Morph.js';
14
14
  import { fwidth, mix, smoothstep } from '../../nodes/math/MathNode.js';
15
15
  import { float, vec3, vec4, bool } from '../../nodes/tsl/TSLBase.js';
16
16
  import AONode from '../../nodes/lighting/AONode.js';
@@ -23,9 +23,8 @@ import NodeMaterialObserver from './manager/NodeMaterialObserver.js';
23
23
  import getAlphaHashThreshold from '../../nodes/functions/material/getAlphaHashThreshold.js';
24
24
  import { modelViewMatrix } from '../../nodes/accessors/ModelNode.js';
25
25
  import { vertexColor } from '../../nodes/accessors/VertexColorNode.js';
26
- import { premultiplyAlpha } from '../../nodes/display/BlendModes.js';
26
+ import { premultiplyAlpha } from '../../nodes/display/PremultiplyAlphaFunctions.js';
27
27
  import { subBuild } from '../../nodes/core/SubBuildNode.js';
28
- import { warn } from '../../utils.js';
29
28
 
30
29
  /**
31
30
  * Base class for all node materials.
@@ -85,16 +84,6 @@ class NodeMaterial extends Material {
85
84
  */
86
85
  this.lights = false;
87
86
 
88
- /**
89
- * Whether this material uses hardware clipping or not.
90
- * This property is managed by the engine and should not be
91
- * modified by apps.
92
- *
93
- * @type {boolean}
94
- * @default false
95
- */
96
- this.hardwareClipping = false;
97
-
98
87
  /**
99
88
  * Node materials which set their `lights` property to `true`
100
89
  * are affected by all lights of the scene. Sometimes selective
@@ -240,6 +229,14 @@ class NodeMaterial extends Material {
240
229
  */
241
230
  this.maskNode = null;
242
231
 
232
+ /**
233
+ * This node can be used to implement a shadow mask for the material.
234
+ *
235
+ * @type {?Node<bool>}
236
+ * @default null
237
+ */
238
+ this.maskShadowNode = null;
239
+
243
240
  /**
244
241
  * The local vertex positions are computed based on multiple factors like the
245
242
  * attribute data, morphing or skinning. This node property allows to overwrite
@@ -382,25 +379,13 @@ class NodeMaterial extends Material {
382
379
  */
383
380
  this.vertexNode = null;
384
381
 
385
- // Deprecated properties
386
-
387
- Object.defineProperty( this, 'shadowPositionNode', { // @deprecated, r176
388
-
389
- get: () => {
390
-
391
- return this.receivedShadowPositionNode;
392
-
393
- },
394
-
395
- set: ( value ) => {
396
-
397
- warn( 'NodeMaterial: ".shadowPositionNode" was renamed to ".receivedShadowPositionNode".' );
398
-
399
- this.receivedShadowPositionNode = value;
400
-
401
- }
402
-
403
- } );
382
+ /**
383
+ * This node can be used as a global context management component for this material.
384
+ *
385
+ * @type {?ContextNode}
386
+ * @default null
387
+ */
388
+ this.contextNode = null;
404
389
 
405
390
  }
406
391
 
@@ -493,9 +478,11 @@ class NodeMaterial extends Material {
493
478
 
494
479
  builder.addStack();
495
480
 
496
- const mvp = subBuild( this.setupVertex( builder ), 'VERTEX' );
481
+ const mvp = this.setupVertex( builder );
482
+
483
+ const vertexNode = subBuild( this.vertexNode || mvp, 'VERTEX' );
497
484
 
498
- const vertexNode = this.vertexNode || mvp;
485
+ builder.context.clipSpace = vertexNode;
499
486
 
500
487
  builder.stack.outputNode = vertexNode;
501
488
 
@@ -536,6 +523,7 @@ class NodeMaterial extends Material {
536
523
  if ( this.fragmentNode === null ) {
537
524
 
538
525
  this.setupDiffuseColor( builder );
526
+ this.setupAmbientOcclusion( builder );
539
527
  this.setupVariants( builder );
540
528
 
541
529
  const outgoingLightNode = this.setupLighting( builder );
@@ -558,6 +546,14 @@ class NodeMaterial extends Material {
558
546
 
559
547
  if ( isCustomOutput ) resultNode = this.outputNode;
560
548
 
549
+ //
550
+
551
+ if ( builder.context.getOutput ) {
552
+
553
+ resultNode = builder.context.getOutput( resultNode, builder );
554
+
555
+ }
556
+
561
557
  // MRT
562
558
 
563
559
  if ( renderTarget !== null ) {
@@ -591,7 +587,7 @@ class NodeMaterial extends Material {
591
587
 
592
588
  if ( fragmentNode.isOutputStructNode !== true ) {
593
589
 
594
- fragmentNode = vec4( fragmentNode );
590
+ fragmentNode = fragmentNode.convert( builder.getOutputType() );
595
591
 
596
592
  }
597
593
 
@@ -651,7 +647,7 @@ class NodeMaterial extends Material {
651
647
  */
652
648
  setupHardwareClipping( builder ) {
653
649
 
654
- this.hardwareClipping = false;
650
+ builder.hardwareClipping = false;
655
651
 
656
652
  if ( builder.clippingContext === null ) return;
657
653
 
@@ -663,7 +659,7 @@ class NodeMaterial extends Material {
663
659
 
664
660
  builder.stack.addToStack( hardwareClipping() );
665
661
 
666
- this.hardwareClipping = true;
662
+ builder.hardwareClipping = true;
667
663
 
668
664
  }
669
665
 
@@ -753,7 +749,7 @@ class NodeMaterial extends Material {
753
749
 
754
750
  this.setupPosition( builder );
755
751
 
756
- builder.context.vertex = builder.removeStack();
752
+ builder.context.position = builder.removeStack();
757
753
 
758
754
  return modelViewProjection;
759
755
 
@@ -771,13 +767,13 @@ class NodeMaterial extends Material {
771
767
 
772
768
  if ( geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color ) {
773
769
 
774
- morphReference( object ).toStack();
770
+ morphReference( object );
775
771
 
776
772
  }
777
773
 
778
774
  if ( object.isSkinnedMesh === true ) {
779
775
 
780
- skinning( object ).toStack();
776
+ skinning( object );
781
777
 
782
778
  }
783
779
 
@@ -793,13 +789,13 @@ class NodeMaterial extends Material {
793
789
 
794
790
  if ( object.isBatchedMesh ) {
795
791
 
796
- batch( object ).toStack();
792
+ batch( object );
797
793
 
798
794
  }
799
795
 
800
796
  if ( ( object.isInstancedMesh && object.instanceMatrix && object.instanceMatrix.isInstancedBufferAttribute === true ) ) {
801
797
 
802
- instancedMesh( object ).toStack();
798
+ instancedMesh( object );
803
799
 
804
800
  }
805
801
 
@@ -849,16 +845,12 @@ class NodeMaterial extends Material {
849
845
 
850
846
  if ( object.instanceColor ) {
851
847
 
852
- const instanceColor = varyingProperty( 'vec3', 'vInstanceColor' );
853
-
854
848
  colorNode = instanceColor.mul( colorNode );
855
849
 
856
850
  }
857
851
 
858
852
  if ( object.isBatchedMesh && object._colorsTexture ) {
859
853
 
860
- const batchColor = varyingProperty( 'vec3', 'vBatchColor' );
861
-
862
854
  colorNode = batchColor.mul( colorNode );
863
855
 
864
856
  }
@@ -994,12 +986,18 @@ class NodeMaterial extends Material {
994
986
  * Setups the lights node based on the scene, environment and material.
995
987
  *
996
988
  * @param {NodeBuilder} builder - The current node builder.
997
- * @return {LightsNode} The lights node.
989
+ * @return {LightingNode<Array>} The lights node.
998
990
  */
999
- setupLights( builder ) {
991
+ setupMaterialLightings( builder ) {
1000
992
 
1001
993
  const materialLightsNode = [];
1002
994
 
995
+ if ( builder.renderer.lighting.enabled === false ) {
996
+
997
+ return materialLightsNode;
998
+
999
+ }
1000
+
1003
1001
  //
1004
1002
 
1005
1003
  const envNode = this.setupEnvironment( builder );
@@ -1018,23 +1016,45 @@ class NodeMaterial extends Material {
1018
1016
 
1019
1017
  }
1020
1018
 
1021
- if ( this.aoNode !== null || builder.material.aoMap ) {
1022
-
1023
- const aoNode = this.aoNode !== null ? this.aoNode : materialAO;
1019
+ if ( builder.context.ambientOcclusion ) {
1024
1020
 
1025
- materialLightsNode.push( new AONode( aoNode ) );
1021
+ materialLightsNode.push( new AONode( builder.context.ambientOcclusion ) );
1026
1022
 
1027
1023
  }
1028
1024
 
1029
- let lightsN = this.lightsNode || builder.lightsNode;
1025
+ return materialLightsNode;
1026
+
1027
+ }
1028
+
1029
+ /**
1030
+ * Setups the ambient occlusion node from the material.
1031
+ *
1032
+ * @param {NodeBuilder} builder - The current node builder.
1033
+ * @return {Node} The ambient occlusion node.
1034
+ */
1035
+ setupAmbientOcclusion( builder ) {
1036
+
1037
+ let aoNode = this.aoNode;
1030
1038
 
1031
- if ( materialLightsNode.length > 0 ) {
1039
+ if ( aoNode === null && builder.material.aoMap ) {
1032
1040
 
1033
- lightsN = builder.renderer.lighting.createNode( [ ...lightsN.getLights(), ...materialLightsNode ] );
1041
+ aoNode = materialAO;
1034
1042
 
1035
1043
  }
1036
1044
 
1037
- return lightsN;
1045
+ if ( builder.context.getAO ) {
1046
+
1047
+ aoNode = builder.context.getAO( aoNode, builder );
1048
+
1049
+ }
1050
+
1051
+ if ( aoNode !== null ) {
1052
+
1053
+ ambientOcclusion.assign( aoNode );
1054
+
1055
+ builder.context.ambientOcclusion = ambientOcclusion;
1056
+
1057
+ }
1038
1058
 
1039
1059
  }
1040
1060
 
@@ -1067,15 +1087,16 @@ class NodeMaterial extends Material {
1067
1087
 
1068
1088
  const lights = this.lights === true || this.lightsNode !== null;
1069
1089
 
1070
- const lightsNode = lights ? this.setupLights( builder ) : null;
1090
+ const materialLightings = this.lights === true ? this.setupMaterialLightings( builder ) : [];
1091
+ const lightsNode = lights ? ( this.lightsNode || builder.lightsNode ) : null;
1071
1092
 
1072
1093
  let outgoingLightNode = this.setupOutgoingLight( builder );
1073
1094
 
1074
- if ( lightsNode && lightsNode.getScope().hasLights ) {
1095
+ if ( lightsNode && ( materialLightings.length > 0 || lightsNode.getScope().hasLights ) ) {
1075
1096
 
1076
1097
  const lightingModel = this.setupLightingModel( builder ) || null;
1077
1098
 
1078
- outgoingLightNode = lightingContext( lightsNode, lightingModel, backdropNode, backdropAlphaNode );
1099
+ outgoingLightNode = lightingContext( lightsNode, lightingModel, materialLightings, backdropNode, backdropAlphaNode );
1079
1100
 
1080
1101
  } else if ( backdropNode !== null ) {
1081
1102
 
@@ -1136,6 +1157,26 @@ class NodeMaterial extends Material {
1136
1157
  /**
1137
1158
  * Setups the output node.
1138
1159
  *
1160
+ * This method can be implemented by derived materials to extend the functionality
1161
+ * of the material's output or replace it altogether.
1162
+ *
1163
+ * ```js
1164
+ * class ColoredShadowMaterial extends MeshPhongNodeMaterial {
1165
+ * constructor( parameters ) {
1166
+ * super( parameters );
1167
+ * this._shadeColor = uniform( new Color( parameters.shadeColor ?? 0xff0000 ) );
1168
+ * }
1169
+ *
1170
+ * setupOutput( builder, outputNode ) {
1171
+ * // Modify the native output of the MeshPhongNodeMaterial fragment shader
1172
+ * const brightness = min( outputNode.r, 1.0 );
1173
+ * const mixedColor = mix( this._shadeColor, diffuseColor.rgb, brightness );
1174
+ * // Return new output back into NodeMaterial flow
1175
+ * return super.setupOutput( builder, vec4( mixedColor, outputNode.a ) );
1176
+ * }
1177
+ * }
1178
+ * ```
1179
+ *
1139
1180
  * @param {NodeBuilder} builder - The current node builder.
1140
1181
  * @param {Node<vec4>} outputNode - The existing output node.
1141
1182
  * @return {Node<vec4>} The output node.
@@ -1192,8 +1233,7 @@ class NodeMaterial extends Material {
1192
1233
 
1193
1234
  for ( const key in descriptors ) {
1194
1235
 
1195
- if ( Object.getOwnPropertyDescriptor( this.constructor.prototype, key ) === undefined &&
1196
- descriptors[ key ].get !== undefined ) {
1236
+ if ( Object.getOwnPropertyDescriptor( this.constructor.prototype, key ) === undefined && descriptors[ key ].get !== undefined ) {
1197
1237
 
1198
1238
  Object.defineProperty( this.constructor.prototype, key, descriptors[ key ] );
1199
1239
 
@@ -1267,41 +1307,65 @@ class NodeMaterial extends Material {
1267
1307
  }
1268
1308
 
1269
1309
  /**
1270
- * Copies the properties of the given node material to this instance.
1310
+ * Copies the common properties of the given material to this instance.
1271
1311
  *
1272
- * @param {NodeMaterial} source - The material to copy.
1312
+ * @param {Material} source - The material to copy.
1273
1313
  * @return {NodeMaterial} A reference to this node material.
1274
1314
  */
1275
1315
  copy( source ) {
1276
1316
 
1277
- this.lightsNode = source.lightsNode;
1278
- this.envNode = source.envNode;
1279
- this.aoNode = source.aoNode;
1317
+ const descriptors = Object.getOwnPropertyDescriptors( this.constructor.prototype );
1318
+
1319
+ for ( const property in descriptors ) {
1280
1320
 
1281
- this.colorNode = source.colorNode;
1282
- this.normalNode = source.normalNode;
1283
- this.opacityNode = source.opacityNode;
1284
- this.backdropNode = source.backdropNode;
1285
- this.backdropAlphaNode = source.backdropAlphaNode;
1286
- this.alphaTestNode = source.alphaTestNode;
1287
- this.maskNode = source.maskNode;
1321
+ if ( descriptors[ property ].set !== undefined && source[ property ] !== undefined ) {
1322
+
1323
+ const value = source[ property ];
1324
+
1325
+ if ( this[ property ] && this[ property ].copy !== undefined ) {
1326
+
1327
+ this[ property ].copy( value );
1328
+
1329
+ } else {
1288
1330
 
1289
- this.positionNode = source.positionNode;
1290
- this.geometryNode = source.geometryNode;
1331
+ this[ property ] = value;
1291
1332
 
1292
- this.depthNode = source.depthNode;
1293
- this.receivedShadowPositionNode = source.receivedShadowPositionNode;
1294
- this.castShadowPositionNode = source.castShadowPositionNode;
1295
- this.receivedShadowNode = source.receivedShadowNode;
1296
- this.castShadowNode = source.castShadowNode;
1333
+ }
1334
+
1335
+ }
1336
+
1337
+ }
1338
+
1339
+ for ( const property in this ) {
1340
+
1341
+ // Skip internal/private properties (starting with '_'), flags (starting with 'is' + uppercase),
1342
+ // and properties that are handled separately or should not be copied (id, uuid, version, type, userData, clippingPlanes).
1343
+
1344
+ if ( /^(?:is[A-Z]|_)|^(?:id|uuid|version|type|userData|clippingPlanes)$/.test( property ) ) continue;
1345
+
1346
+ if ( this[ property ] !== undefined && source[ property ] !== undefined ) {
1347
+
1348
+ const value = source[ property ];
1349
+
1350
+ if ( this[ property ] && this[ property ].copy !== undefined ) {
1351
+
1352
+ this[ property ].copy( value );
1353
+
1354
+ } else {
1355
+
1356
+ this[ property ] = value;
1357
+
1358
+ }
1359
+
1360
+ }
1361
+
1362
+ }
1297
1363
 
1298
- this.outputNode = source.outputNode;
1299
- this.mrtNode = source.mrtNode;
1364
+ this.clippingPlanes = source.clippingPlanes ? source.clippingPlanes.map( ( plane ) => plane.clone() ) : null;
1300
1365
 
1301
- this.fragmentNode = source.fragmentNode;
1302
- this.vertexNode = source.vertexNode;
1366
+ this.userData = JSON.parse( JSON.stringify( source.userData ) );
1303
1367
 
1304
- return super.copy( source );
1368
+ return this;
1305
1369
 
1306
1370
  }
1307
1371
 
@@ -148,16 +148,6 @@ class SpriteNodeMaterial extends NodeMaterial {
148
148
 
149
149
  }
150
150
 
151
- copy( source ) {
152
-
153
- this.positionNode = source.positionNode;
154
- this.rotationNode = source.rotationNode;
155
- this.scaleNode = source.scaleNode;
156
-
157
- return super.copy( source );
158
-
159
- }
160
-
161
151
  /**
162
152
  * Whether to use size attenuation or not.
163
153
  *