super-three 0.177.0 → 0.181.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 (501) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +1994 -749
  3. package/build/three.core.js +1358 -506
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +631 -247
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +113 -33
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +9571 -3424
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +9397 -3426
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  14. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  15. package/examples/jsm/Addons.js +2 -3
  16. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  17. package/examples/jsm/capabilities/WebGL.js +0 -27
  18. package/examples/jsm/capabilities/WebGPU.js +1 -1
  19. package/examples/jsm/controls/ArcballControls.js +9 -9
  20. package/examples/jsm/controls/DragControls.js +7 -57
  21. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  22. package/examples/jsm/controls/FlyControls.js +1 -1
  23. package/examples/jsm/controls/OrbitControls.js +2 -2
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +1 -1
  26. package/examples/jsm/controls/TransformControls.js +62 -15
  27. package/examples/jsm/csm/CSMShadowNode.js +4 -4
  28. package/examples/jsm/effects/AsciiEffect.js +8 -8
  29. package/examples/jsm/environments/RoomEnvironment.js +8 -3
  30. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  31. package/examples/jsm/exporters/EXRExporter.js +1 -1
  32. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  33. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  34. package/examples/jsm/exporters/PLYExporter.js +1 -1
  35. package/examples/jsm/exporters/USDZExporter.js +683 -299
  36. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  37. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  38. package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
  39. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  40. package/examples/jsm/geometries/TextGeometry.js +3 -2
  41. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  42. package/examples/jsm/helpers/ViewHelper.js +43 -5
  43. package/examples/jsm/inspector/Inspector.js +427 -0
  44. package/examples/jsm/inspector/RendererInspector.js +415 -0
  45. package/examples/jsm/inspector/tabs/Console.js +204 -0
  46. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  47. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  48. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  49. package/examples/jsm/inspector/ui/Graph.js +95 -0
  50. package/examples/jsm/inspector/ui/Item.js +170 -0
  51. package/examples/jsm/inspector/ui/List.js +75 -0
  52. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  53. package/examples/jsm/inspector/ui/Style.js +654 -0
  54. package/examples/jsm/inspector/ui/Tab.js +46 -0
  55. package/examples/jsm/inspector/ui/Values.js +423 -0
  56. package/examples/jsm/inspector/ui/utils.js +56 -0
  57. package/examples/jsm/interactive/HTMLMesh.js +11 -13
  58. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  59. package/examples/jsm/interactive/SelectionBox.js +30 -0
  60. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  61. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  62. package/examples/jsm/lights/LightProbeGenerator.js +14 -3
  63. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  64. package/examples/jsm/lines/Line2.js +3 -3
  65. package/examples/jsm/lines/LineGeometry.js +1 -1
  66. package/examples/jsm/lines/LineSegments2.js +2 -2
  67. package/examples/jsm/lines/Wireframe.js +2 -2
  68. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  69. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  70. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  71. package/examples/jsm/loaders/3MFLoader.js +1 -1
  72. package/examples/jsm/loaders/ColladaLoader.js +4 -4
  73. package/examples/jsm/loaders/DDSLoader.js +1 -1
  74. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  75. package/examples/jsm/loaders/EXRLoader.js +210 -22
  76. package/examples/jsm/loaders/FBXLoader.js +4 -4
  77. package/examples/jsm/loaders/FontLoader.js +23 -5
  78. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  79. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  80. package/examples/jsm/loaders/HDRLoader.js +486 -0
  81. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  82. package/examples/jsm/loaders/KTXLoader.js +2 -2
  83. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  84. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  85. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  86. package/examples/jsm/loaders/LWOLoader.js +2 -2
  87. package/examples/jsm/loaders/MaterialXLoader.js +233 -34
  88. package/examples/jsm/loaders/OBJLoader.js +1 -1
  89. package/examples/jsm/loaders/PDBLoader.js +1 -1
  90. package/examples/jsm/loaders/RGBELoader.js +7 -473
  91. package/examples/jsm/loaders/SVGLoader.js +2 -2
  92. package/examples/jsm/loaders/TTFLoader.js +13 -1
  93. package/examples/jsm/loaders/USDLoader.js +219 -0
  94. package/examples/jsm/loaders/USDZLoader.js +4 -892
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  96. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  97. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  98. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  99. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  100. package/examples/jsm/math/ColorSpaces.js +19 -1
  101. package/examples/jsm/math/ConvexHull.js +3 -3
  102. package/examples/jsm/math/ImprovedNoise.js +1 -1
  103. package/examples/jsm/math/Lut.js +2 -2
  104. package/examples/jsm/math/SimplexNoise.js +1 -1
  105. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  106. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  107. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  108. package/examples/jsm/misc/TubePainter.js +383 -40
  109. package/examples/jsm/misc/Volume.js +1 -1
  110. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  111. package/examples/jsm/objects/LensflareMesh.js +3 -3
  112. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  113. package/examples/jsm/objects/Sky.js +1 -1
  114. package/examples/jsm/objects/SkyMesh.js +3 -3
  115. package/examples/jsm/objects/Water.js +3 -3
  116. package/examples/jsm/objects/WaterMesh.js +6 -6
  117. package/examples/jsm/physics/RapierPhysics.js +95 -16
  118. package/examples/jsm/postprocessing/GTAOPass.js +10 -9
  119. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  120. package/examples/jsm/postprocessing/OutlinePass.js +17 -17
  121. package/examples/jsm/postprocessing/SSAOPass.js +10 -9
  122. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  123. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  124. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  125. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  126. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  127. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  128. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  129. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  130. package/examples/jsm/shaders/BokehShader.js +1 -1
  131. package/examples/jsm/shaders/BokehShader2.js +1 -1
  132. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  133. package/examples/jsm/shaders/FocusShader.js +1 -1
  134. package/examples/jsm/shaders/GTAOShader.js +2 -2
  135. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  136. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  137. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  138. package/examples/jsm/shaders/SSRShader.js +1 -1
  139. package/examples/jsm/shaders/SepiaShader.js +1 -1
  140. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  141. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  142. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
  143. package/examples/jsm/shaders/VignetteShader.js +1 -1
  144. package/examples/jsm/transpiler/AST.js +381 -30
  145. package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
  146. package/examples/jsm/transpiler/Linker.js +327 -0
  147. package/examples/jsm/transpiler/TSLEncoder.js +196 -92
  148. package/examples/jsm/transpiler/Transpiler.js +17 -1
  149. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  150. package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  151. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  152. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  153. package/examples/jsm/tsl/display/BloomNode.js +11 -6
  154. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  155. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  156. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  157. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  158. package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
  159. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  160. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  161. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  162. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  163. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  164. package/examples/jsm/tsl/display/TRAANode.js +578 -0
  165. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  166. package/examples/jsm/tsl/display/hashBlur.js +18 -20
  167. package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
  168. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  169. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  170. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  171. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  172. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  173. package/package.json +5 -10
  174. package/src/Three.Core.js +5 -2
  175. package/src/Three.TSL.js +112 -32
  176. package/src/Three.WebGPU.Nodes.js +2 -0
  177. package/src/Three.WebGPU.js +4 -0
  178. package/src/animation/AnimationClip.js +20 -4
  179. package/src/animation/AnimationMixer.js +3 -3
  180. package/src/animation/AnimationObjectGroup.js +2 -1
  181. package/src/animation/KeyframeTrack.js +8 -7
  182. package/src/animation/PropertyBinding.js +12 -11
  183. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  184. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  185. package/src/audio/Audio.js +10 -9
  186. package/src/audio/PositionalAudio.js +1 -1
  187. package/src/cameras/Camera.js +14 -0
  188. package/src/cameras/OrthographicCamera.js +2 -2
  189. package/src/cameras/PerspectiveCamera.js +2 -2
  190. package/src/cameras/StereoCamera.js +2 -2
  191. package/src/constants.js +13 -5
  192. package/src/core/BufferAttribute.js +3 -3
  193. package/src/core/BufferGeometry.js +10 -10
  194. package/src/core/Clock.js +2 -8
  195. package/src/core/EventDispatcher.js +1 -1
  196. package/src/core/GLBufferAttribute.js +13 -1
  197. package/src/core/InterleavedBuffer.js +1 -1
  198. package/src/core/InterleavedBufferAttribute.js +3 -2
  199. package/src/core/Object3D.js +4 -3
  200. package/src/core/Raycaster.js +2 -1
  201. package/src/core/RenderTarget.js +10 -1
  202. package/{examples/jsm/misc → src/core}/Timer.js +4 -42
  203. package/src/extras/Controls.js +5 -4
  204. package/src/extras/DataUtils.js +2 -1
  205. package/src/extras/Earcut.js +6 -0
  206. package/src/extras/ImageUtils.js +2 -2
  207. package/src/extras/PMREMGenerator.js +279 -55
  208. package/src/extras/TextureUtils.js +2 -1
  209. package/src/extras/core/Curve.js +2 -1
  210. package/src/extras/core/Interpolations.js +7 -1
  211. package/src/extras/core/Path.js +22 -22
  212. package/src/extras/core/ShapePath.js +4 -4
  213. package/src/extras/lib/earcut.js +8 -8
  214. package/src/geometries/BoxGeometry.js +1 -0
  215. package/src/geometries/CapsuleGeometry.js +1 -0
  216. package/src/geometries/CircleGeometry.js +1 -0
  217. package/src/geometries/ConeGeometry.js +1 -0
  218. package/src/geometries/CylinderGeometry.js +1 -0
  219. package/src/geometries/DodecahedronGeometry.js +1 -0
  220. package/src/geometries/ExtrudeGeometry.js +8 -6
  221. package/src/geometries/IcosahedronGeometry.js +1 -0
  222. package/src/geometries/LatheGeometry.js +1 -0
  223. package/src/geometries/OctahedronGeometry.js +1 -0
  224. package/src/geometries/PlaneGeometry.js +1 -0
  225. package/src/geometries/RingGeometry.js +1 -0
  226. package/src/geometries/ShapeGeometry.js +1 -0
  227. package/src/geometries/SphereGeometry.js +1 -0
  228. package/src/geometries/TetrahedronGeometry.js +1 -0
  229. package/src/geometries/TorusGeometry.js +1 -0
  230. package/src/geometries/TorusKnotGeometry.js +1 -0
  231. package/src/geometries/TubeGeometry.js +1 -0
  232. package/src/helpers/CameraHelper.js +42 -12
  233. package/src/helpers/SkeletonHelper.js +35 -6
  234. package/src/lights/LightShadow.js +21 -8
  235. package/src/lights/PointLightShadow.js +1 -1
  236. package/src/lights/webgpu/ProjectorLight.js +1 -1
  237. package/src/loaders/AnimationLoader.js +2 -1
  238. package/src/loaders/AudioLoader.js +2 -1
  239. package/src/loaders/BufferGeometryLoader.js +2 -2
  240. package/src/loaders/Cache.js +2 -2
  241. package/src/loaders/DataTextureLoader.js +1 -1
  242. package/src/loaders/FileLoader.js +29 -5
  243. package/src/loaders/ImageBitmapLoader.js +32 -8
  244. package/src/loaders/ImageLoader.js +56 -9
  245. package/src/loaders/Loader.js +17 -3
  246. package/src/loaders/LoadingManager.js +45 -0
  247. package/src/loaders/MaterialLoader.js +3 -2
  248. package/src/loaders/ObjectLoader.js +13 -13
  249. package/src/loaders/TextureLoader.js +1 -1
  250. package/src/loaders/nodes/NodeLoader.js +3 -2
  251. package/src/materials/Material.js +16 -3
  252. package/src/materials/MeshBasicMaterial.js +2 -1
  253. package/src/materials/MeshDepthMaterial.js +1 -0
  254. package/src/materials/MeshDistanceMaterial.js +1 -1
  255. package/src/materials/MeshLambertMaterial.js +2 -1
  256. package/src/materials/MeshMatcapMaterial.js +22 -0
  257. package/src/materials/MeshNormalMaterial.js +1 -0
  258. package/src/materials/MeshPhongMaterial.js +2 -1
  259. package/src/materials/MeshPhysicalMaterial.js +2 -1
  260. package/src/materials/MeshStandardMaterial.js +8 -7
  261. package/src/materials/MeshToonMaterial.js +1 -0
  262. package/src/materials/PointsMaterial.js +1 -1
  263. package/src/materials/ShaderMaterial.js +2 -2
  264. package/src/materials/nodes/Line2NodeMaterial.js +2 -10
  265. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  266. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  267. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  268. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  269. package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
  270. package/src/materials/nodes/NodeMaterial.js +90 -27
  271. package/src/materials/nodes/PointsNodeMaterial.js +86 -28
  272. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  273. package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
  274. package/src/math/Color.js +6 -5
  275. package/src/math/ColorManagement.js +9 -3
  276. package/src/math/Cylindrical.js +1 -1
  277. package/src/math/Euler.js +2 -1
  278. package/src/math/Frustum.js +25 -9
  279. package/src/math/FrustumArray.js +10 -5
  280. package/src/math/Line3.js +129 -2
  281. package/src/math/MathUtils.js +13 -11
  282. package/src/math/Matrix2.js +1 -1
  283. package/src/math/Matrix3.js +2 -2
  284. package/src/math/Matrix4.js +55 -34
  285. package/src/math/Plane.js +1 -1
  286. package/src/math/Quaternion.js +69 -67
  287. package/src/math/Spherical.js +3 -3
  288. package/src/nodes/Nodes.js +6 -4
  289. package/src/nodes/TSL.js +9 -4
  290. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  291. package/src/nodes/accessors/Bitangent.js +31 -25
  292. package/src/nodes/accessors/BufferNode.js +1 -1
  293. package/src/nodes/accessors/Camera.js +142 -16
  294. package/src/nodes/accessors/ClippingNode.js +6 -5
  295. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  296. package/src/nodes/accessors/InstanceNode.js +25 -5
  297. package/src/nodes/accessors/Lights.js +10 -0
  298. package/src/nodes/accessors/Normal.js +97 -30
  299. package/src/nodes/accessors/Object3DNode.js +2 -2
  300. package/src/nodes/accessors/Position.js +25 -9
  301. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  302. package/src/nodes/accessors/ReferenceNode.js +20 -4
  303. package/src/nodes/accessors/ReflectVector.js +3 -3
  304. package/src/nodes/accessors/SceneNode.js +3 -2
  305. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  306. package/src/nodes/accessors/StorageTextureNode.js +23 -1
  307. package/src/nodes/accessors/Tangent.js +25 -17
  308. package/src/nodes/accessors/TangentUtils.js +46 -0
  309. package/src/nodes/accessors/Texture3DNode.js +14 -1
  310. package/src/nodes/accessors/TextureBicubic.js +21 -3
  311. package/src/nodes/accessors/TextureNode.js +142 -44
  312. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  313. package/src/nodes/code/FunctionCallNode.js +24 -4
  314. package/src/nodes/code/FunctionNode.js +23 -0
  315. package/src/nodes/core/ArrayNode.js +13 -0
  316. package/src/nodes/core/AssignNode.js +6 -2
  317. package/src/nodes/core/AttributeNode.js +2 -1
  318. package/src/nodes/core/ContextNode.js +48 -10
  319. package/src/nodes/core/IndexNode.js +2 -2
  320. package/src/nodes/core/InputNode.js +2 -1
  321. package/src/nodes/core/InspectorNode.js +128 -0
  322. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
  323. package/src/nodes/core/Node.js +167 -34
  324. package/src/nodes/core/NodeBuilder.js +404 -120
  325. package/src/nodes/core/NodeFrame.js +21 -21
  326. package/src/nodes/core/NodeFunction.js +2 -1
  327. package/src/nodes/core/NodeParser.js +2 -1
  328. package/src/nodes/core/NodeUniform.js +1 -1
  329. package/src/nodes/core/NodeUtils.js +17 -88
  330. package/src/nodes/core/ParameterNode.js +31 -0
  331. package/src/nodes/core/PropertyNode.js +7 -0
  332. package/src/nodes/core/StackNode.js +77 -30
  333. package/src/nodes/core/StructNode.js +5 -5
  334. package/src/nodes/core/StructTypeNode.js +1 -0
  335. package/src/nodes/core/SubBuildNode.js +89 -0
  336. package/src/nodes/core/UniformNode.js +80 -14
  337. package/src/nodes/core/VarNode.js +142 -16
  338. package/src/nodes/core/VaryingNode.js +9 -6
  339. package/src/nodes/display/BlendModes.js +7 -6
  340. package/src/nodes/display/BumpMapNode.js +1 -1
  341. package/src/nodes/display/ColorAdjustment.js +1 -1
  342. package/src/nodes/display/FrontFacingNode.js +35 -7
  343. package/src/nodes/display/NormalMapNode.js +20 -50
  344. package/src/nodes/display/PassNode.js +206 -17
  345. package/src/nodes/display/RenderOutputNode.js +28 -2
  346. package/src/nodes/display/ScreenNode.js +44 -40
  347. package/src/nodes/display/ToneMappingNode.js +31 -4
  348. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  349. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  350. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  351. package/src/nodes/display/ViewportTextureNode.js +94 -4
  352. package/src/nodes/fog/Fog.js +3 -2
  353. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  354. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  355. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  356. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  357. package/src/nodes/functions/BasicLightingModel.js +2 -1
  358. package/src/nodes/functions/PhongLightingModel.js +3 -3
  359. package/src/nodes/functions/PhysicalLightingModel.js +19 -18
  360. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  361. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  362. package/src/nodes/geometry/RangeNode.js +40 -4
  363. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  364. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  365. package/src/nodes/gpgpu/ComputeNode.js +81 -25
  366. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  367. package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
  368. package/src/nodes/lighting/EnvironmentNode.js +11 -11
  369. package/src/nodes/lighting/LightsNode.js +7 -8
  370. package/src/nodes/lighting/PointShadowNode.js +6 -0
  371. package/src/nodes/lighting/ProjectorLightNode.js +19 -6
  372. package/src/nodes/lighting/ShadowFilterNode.js +3 -1
  373. package/src/nodes/lighting/ShadowNode.js +77 -10
  374. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  375. package/src/nodes/materialx/lib/mx_noise.js +165 -1
  376. package/src/nodes/math/BitcastNode.js +156 -0
  377. package/src/nodes/math/ConditionalNode.js +25 -27
  378. package/src/nodes/math/MathNode.js +106 -65
  379. package/src/nodes/math/OperatorNode.js +28 -43
  380. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  381. package/src/nodes/shapes/Shapes.js +1 -1
  382. package/src/nodes/tsl/TSLBase.js +6 -2
  383. package/src/nodes/tsl/TSLCore.js +546 -186
  384. package/src/nodes/utils/DebugNode.js +3 -2
  385. package/src/nodes/utils/EquirectUV.js +27 -0
  386. package/src/nodes/utils/EventNode.js +119 -0
  387. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  388. package/src/nodes/utils/JoinNode.js +6 -3
  389. package/src/nodes/utils/LoopNode.js +20 -41
  390. package/src/nodes/utils/MatcapUV.js +22 -0
  391. package/src/nodes/utils/MemberNode.js +59 -7
  392. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  393. package/src/nodes/utils/RTTNode.js +33 -6
  394. package/src/nodes/utils/ReflectorNode.js +68 -10
  395. package/src/nodes/utils/SampleNode.js +91 -0
  396. package/src/nodes/utils/SplitNode.js +11 -0
  397. package/src/nodes/utils/Timer.js +0 -47
  398. package/src/nodes/utils/TriplanarTextures.js +65 -0
  399. package/src/objects/BatchedMesh.js +6 -4
  400. package/src/objects/LOD.js +1 -1
  401. package/src/objects/Line.js +2 -1
  402. package/src/objects/LineSegments.js +2 -1
  403. package/src/objects/Skeleton.js +3 -2
  404. package/src/objects/SkinnedMesh.js +3 -1
  405. package/src/objects/Sprite.js +4 -3
  406. package/src/renderers/WebGLRenderer.js +77 -66
  407. package/src/renderers/common/Animation.js +13 -1
  408. package/src/renderers/common/Attributes.js +1 -1
  409. package/src/renderers/common/Backend.js +108 -27
  410. package/src/renderers/common/Background.js +4 -3
  411. package/src/renderers/common/Bindings.js +76 -19
  412. package/src/renderers/common/CanvasTarget.js +341 -0
  413. package/src/renderers/common/ChainMap.js +1 -1
  414. package/src/renderers/common/Color4.js +2 -2
  415. package/src/renderers/common/CubeRenderTarget.js +1 -1
  416. package/src/renderers/common/DataMap.js +1 -1
  417. package/src/renderers/common/Geometries.js +26 -0
  418. package/src/renderers/common/Info.js +4 -2
  419. package/src/renderers/common/InspectorBase.js +146 -0
  420. package/src/renderers/common/Pipelines.js +1 -1
  421. package/src/renderers/common/PostProcessing.js +61 -25
  422. package/src/renderers/common/QuadMesh.js +7 -1
  423. package/src/renderers/common/RenderContext.js +2 -2
  424. package/src/renderers/common/RenderList.js +7 -3
  425. package/src/renderers/common/RenderObject.js +84 -5
  426. package/src/renderers/common/RenderObjects.js +1 -1
  427. package/src/renderers/common/Renderer.js +486 -255
  428. package/src/renderers/common/RendererUtils.js +9 -0
  429. package/src/renderers/common/SampledTexture.js +8 -68
  430. package/src/renderers/common/Sampler.js +117 -0
  431. package/src/renderers/common/Storage3DTexture.js +100 -0
  432. package/src/renderers/common/StorageArrayTexture.js +84 -0
  433. package/src/renderers/common/StorageTexture.js +27 -0
  434. package/src/renderers/common/Textures.js +138 -46
  435. package/src/renderers/common/TimestampQueryPool.js +65 -3
  436. package/src/renderers/common/UniformsGroup.js +2 -1
  437. package/src/renderers/common/XRManager.js +63 -24
  438. package/src/renderers/common/XRRenderTarget.js +21 -4
  439. package/src/renderers/common/extras/PMREMGenerator.js +161 -66
  440. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  441. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  442. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  443. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  444. package/src/renderers/common/nodes/Nodes.js +38 -16
  445. package/src/renderers/shaders/DFGLUTData.js +64 -0
  446. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  447. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  449. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  450. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  451. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  454. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
  455. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  456. package/src/renderers/shaders/UniformsLib.js +1 -0
  457. package/src/renderers/shaders/UniformsUtils.js +25 -4
  458. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  459. package/src/renderers/webgl/WebGLCapabilities.js +4 -3
  460. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  461. package/src/renderers/webgl/WebGLInfo.js +3 -1
  462. package/src/renderers/webgl/WebGLProgram.js +25 -18
  463. package/src/renderers/webgl/WebGLPrograms.js +9 -6
  464. package/src/renderers/webgl/WebGLShadowMap.js +13 -2
  465. package/src/renderers/webgl/WebGLState.js +17 -16
  466. package/src/renderers/webgl/WebGLTextures.js +38 -21
  467. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  468. package/src/renderers/webgl/WebGLUtils.js +3 -2
  469. package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
  470. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
  471. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  472. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  473. package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
  474. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
  475. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  476. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  477. package/src/renderers/webgpu/WebGPUBackend.js +205 -128
  478. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  479. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  480. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
  481. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
  482. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
  483. package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
  484. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
  485. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  486. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
  487. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  488. package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
  489. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  490. package/src/renderers/webxr/WebXRManager.js +89 -13
  491. package/src/textures/ExternalTexture.js +56 -0
  492. package/src/textures/FramebufferTexture.js +2 -2
  493. package/src/textures/Source.js +14 -3
  494. package/src/textures/Texture.js +3 -2
  495. package/src/textures/VideoTexture.js +29 -2
  496. package/src/utils.js +67 -3
  497. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  498. package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
  499. package/src/nodes/utils/EquirectUVNode.js +0 -65
  500. package/src/nodes/utils/MatcapUVNode.js +0 -49
  501. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -0,0 +1,146 @@
1
+ /**
2
+ * InspectorBase is the base class for all inspectors.
3
+ *
4
+ * @class InspectorBase
5
+ */
6
+ class InspectorBase {
7
+
8
+ /**
9
+ * Creates a new InspectorBase.
10
+ */
11
+ constructor() {
12
+
13
+ /**
14
+ * The renderer associated with this inspector.
15
+ *
16
+ * @type {WebGLRenderer}
17
+ * @private
18
+ */
19
+ this._renderer = null;
20
+
21
+ /**
22
+ * The current frame being processed.
23
+ *
24
+ * @type {Object}
25
+ */
26
+ this.currentFrame = null;
27
+
28
+ }
29
+
30
+ /**
31
+ * Returns the node frame for the current renderer.
32
+ *
33
+ * @return {Object} The node frame.
34
+ */
35
+ get nodeFrame() {
36
+
37
+ return this._renderer._nodes.nodeFrame;
38
+
39
+ }
40
+
41
+ /**
42
+ * Sets the renderer for this inspector.
43
+ *
44
+ * @param {WebGLRenderer} renderer - The renderer to associate with this inspector.
45
+ * @return {InspectorBase} This inspector instance.
46
+ */
47
+ setRenderer( renderer ) {
48
+
49
+ this._renderer = renderer;
50
+
51
+ return this;
52
+
53
+ }
54
+
55
+ /**
56
+ * Returns the renderer associated with this inspector.
57
+ *
58
+ * @return {WebGLRenderer} The associated renderer.
59
+ */
60
+ getRenderer() {
61
+
62
+ return this._renderer;
63
+
64
+ }
65
+
66
+ /**
67
+ * Initializes the inspector.
68
+ */
69
+ init() { }
70
+
71
+ /**
72
+ * Called when a frame begins.
73
+ */
74
+ begin() { }
75
+
76
+ /**
77
+ * Called when a frame ends.
78
+ */
79
+ finish() { }
80
+
81
+ /**
82
+ * Inspects a node.
83
+ *
84
+ * @param {Node} node - The node to inspect.
85
+ */
86
+ inspect( /*node*/ ) { }
87
+
88
+ /**
89
+ * When a compute operation is performed.
90
+ *
91
+ * @param {ComputeNode} computeNode - The compute node being executed.
92
+ * @param {number|Array<number>} dispatchSizeOrCount - The dispatch size or count.
93
+ */
94
+ computeAsync( /*computeNode, dispatchSizeOrCount*/ ) { }
95
+
96
+ /**
97
+ * Called when a compute operation begins.
98
+ *
99
+ * @param {string} uid - A unique identifier for the render context.
100
+ * @param {ComputeNode} computeNode - The compute node being executed.
101
+ */
102
+ beginCompute( /*uid, computeNode*/ ) { }
103
+
104
+ /**
105
+ * Called when a compute operation ends.
106
+ *
107
+ * @param {string} uid - A unique identifier for the render context.
108
+ * @param {ComputeNode} computeNode - The compute node being executed.
109
+ */
110
+ finishCompute( /*uid*/ ) { }
111
+
112
+ /**
113
+ * Called when a render operation begins.
114
+ *
115
+ * @param {string} uid - A unique identifier for the render context.
116
+ * @param {Scene} scene - The scene being rendered.
117
+ * @param {Camera} camera - The camera being used for rendering.
118
+ * @param {?WebGLRenderTarget} renderTarget - The render target, if any.
119
+ */
120
+ beginRender( /*uid, scene, camera, renderTarget*/ ) { }
121
+
122
+ /**
123
+ * Called when an animation loop ends.
124
+ *
125
+ * @param {string} uid - A unique identifier for the render context.
126
+ */
127
+ finishRender( /*uid*/ ) { }
128
+
129
+ /**
130
+ * Called when a texture copy operation is performed.
131
+ *
132
+ * @param {Texture} srcTexture - The source texture.
133
+ * @param {Texture} dstTexture - The destination texture.
134
+ */
135
+ copyTextureToTexture( /*srcTexture, dstTexture*/ ) { }
136
+
137
+ /**
138
+ * Called when a framebuffer copy operation is performed.
139
+ *
140
+ * @param {Texture} framebufferTexture - The texture associated with the framebuffer.
141
+ */
142
+ copyFramebufferToTexture( /*framebufferTexture*/ ) { }
143
+
144
+ }
145
+
146
+ export default InspectorBase;
@@ -58,7 +58,7 @@ class Pipelines extends DataMap {
58
58
  * fragment and compute) the programmable stage objects which
59
59
  * represent the actual shader code.
60
60
  *
61
- * @type {Object<string,Map>}
61
+ * @type {Object<string,Map<string, ProgrammableStage>>}
62
62
  */
63
63
  this.programs = {
64
64
  vertex: new Map(),
@@ -1,7 +1,9 @@
1
1
  import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
2
+ import { ColorManagement } from '../../math/ColorManagement.js';
2
3
  import { vec4, renderOutput } from '../../nodes/TSL.js';
3
- import { LinearSRGBColorSpace, NoToneMapping } from '../../constants.js';
4
+ import { NoToneMapping } from '../../constants.js';
4
5
  import QuadMesh from '../../renderers/common/QuadMesh.js';
6
+ import { warnOnce } from '../../utils.js';
5
7
 
6
8
  /**
7
9
  * This module is responsible to manage the post processing setups in apps.
@@ -81,6 +83,16 @@ class PostProcessing {
81
83
  * @type {QuadMesh}
82
84
  */
83
85
  this._quadMesh = new QuadMesh( material );
86
+ this._quadMesh.name = 'Post-Processing';
87
+
88
+ /**
89
+ * The context of the post processing stack.
90
+ *
91
+ * @private
92
+ * @type {?Object}
93
+ * @default null
94
+ */
95
+ this._context = null;
84
96
 
85
97
  }
86
98
 
@@ -91,15 +103,17 @@ class PostProcessing {
91
103
  */
92
104
  render() {
93
105
 
106
+ const renderer = this.renderer;
107
+
94
108
  this._update();
95
109
 
96
- const renderer = this.renderer;
110
+ if ( this._context.onBeforePostProcessing !== null ) this._context.onBeforePostProcessing();
97
111
 
98
112
  const toneMapping = renderer.toneMapping;
99
113
  const outputColorSpace = renderer.outputColorSpace;
100
114
 
101
115
  renderer.toneMapping = NoToneMapping;
102
- renderer.outputColorSpace = LinearSRGBColorSpace;
116
+ renderer.outputColorSpace = ColorManagement.workingColorSpace;
103
117
 
104
118
  //
105
119
 
@@ -115,6 +129,20 @@ class PostProcessing {
115
129
  renderer.toneMapping = toneMapping;
116
130
  renderer.outputColorSpace = outputColorSpace;
117
131
 
132
+ if ( this._context.onAfterPostProcessing !== null ) this._context.onAfterPostProcessing();
133
+
134
+ }
135
+
136
+ /**
137
+ * Returns the current context of the post processing stack.
138
+ *
139
+ * @readonly
140
+ * @type {?Object}
141
+ */
142
+ get context() {
143
+
144
+ return this._context;
145
+
118
146
  }
119
147
 
120
148
  /**
@@ -140,7 +168,32 @@ class PostProcessing {
140
168
  const toneMapping = renderer.toneMapping;
141
169
  const outputColorSpace = renderer.outputColorSpace;
142
170
 
143
- this._quadMesh.material.fragmentNode = this.outputColorTransform === true ? renderOutput( this.outputNode, toneMapping, outputColorSpace ) : this.outputNode.context( { toneMapping, outputColorSpace } );
171
+ const context = {
172
+ postProcessing: this,
173
+ onBeforePostProcessing: null,
174
+ onAfterPostProcessing: null
175
+ };
176
+
177
+ let outputNode = this.outputNode;
178
+
179
+ if ( this.outputColorTransform === true ) {
180
+
181
+ outputNode = outputNode.context( context );
182
+
183
+ outputNode = renderOutput( outputNode, toneMapping, outputColorSpace );
184
+
185
+ } else {
186
+
187
+ context.toneMapping = toneMapping;
188
+ context.outputColorSpace = outputColorSpace;
189
+
190
+ outputNode = outputNode.context( context );
191
+
192
+ }
193
+
194
+ this._context = context;
195
+
196
+ this._quadMesh.material.fragmentNode = outputNode;
144
197
  this._quadMesh.material.needsUpdate = true;
145
198
 
146
199
  this.needsUpdate = false;
@@ -155,33 +208,16 @@ class PostProcessing {
155
208
  * its animation loop (not the one from the renderer).
156
209
  *
157
210
  * @async
211
+ * @deprecated
158
212
  * @return {Promise} A Promise that resolves when the render has been finished.
159
213
  */
160
214
  async renderAsync() {
161
215
 
162
- this._update();
163
-
164
- const renderer = this.renderer;
165
-
166
- const toneMapping = renderer.toneMapping;
167
- const outputColorSpace = renderer.outputColorSpace;
168
-
169
- renderer.toneMapping = NoToneMapping;
170
- renderer.outputColorSpace = LinearSRGBColorSpace;
171
-
172
- //
173
-
174
- const currentXR = renderer.xr.enabled;
175
- renderer.xr.enabled = false;
216
+ warnOnce( 'PostProcessing: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.' ); // @deprecated r181
176
217
 
177
- await this._quadMesh.renderAsync( renderer );
218
+ await this.renderer.init();
178
219
 
179
- renderer.xr.enabled = currentXR;
180
-
181
- //
182
-
183
- renderer.toneMapping = toneMapping;
184
- renderer.outputColorSpace = outputColorSpace;
220
+ this.render();
185
221
 
186
222
  }
187
223
 
@@ -2,6 +2,7 @@ import { BufferGeometry } from '../../core/BufferGeometry.js';
2
2
  import { Float32BufferAttribute } from '../../core/BufferAttribute.js';
3
3
  import { Mesh } from '../../objects/Mesh.js';
4
4
  import { OrthographicCamera } from '../../cameras/OrthographicCamera.js';
5
+ import { warnOnce } from '../../utils.js';
5
6
 
6
7
  const _camera = /*@__PURE__*/ new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
7
8
 
@@ -81,12 +82,17 @@ class QuadMesh extends Mesh {
81
82
  * Async version of `render()`.
82
83
  *
83
84
  * @async
85
+ * @deprecated
84
86
  * @param {Renderer} renderer - The renderer.
85
87
  * @return {Promise} A Promise that resolves when the render has been finished.
86
88
  */
87
89
  async renderAsync( renderer ) {
88
90
 
89
- return renderer.renderAsync( this, _camera );
91
+ warnOnce( 'QuadMesh: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.' ); // @deprecated r181
92
+
93
+ await renderer.init();
94
+
95
+ renderer.render( this, _camera );
90
96
 
91
97
  }
92
98
 
@@ -248,9 +248,9 @@ class RenderContext {
248
248
  */
249
249
  export function getCacheKey( renderContext ) {
250
250
 
251
- const { textures, activeCubeFace } = renderContext;
251
+ const { textures, activeCubeFace, activeMipmapLevel } = renderContext;
252
252
 
253
- const values = [ activeCubeFace ];
253
+ const values = [ activeCubeFace, activeMipmapLevel ];
254
254
 
255
255
  for ( const texture of textures ) {
256
256
 
@@ -72,7 +72,7 @@ function reversePainterSortStable( a, b ) {
72
72
  */
73
73
  function needsDoublePass( material ) {
74
74
 
75
- const hasTransmission = material.transmission > 0 || material.transmissionNode;
75
+ const hasTransmission = material.transmission > 0 || ( material.transmissionNode && material.transmissionNode.isNode );
76
76
 
77
77
  return hasTransmission && material.side === DoubleSide && material.forceSinglePass === false;
78
78
 
@@ -283,7 +283,9 @@ class RenderList {
283
283
 
284
284
  if ( object.occlusionTest === true ) this.occlusionQueryCount ++;
285
285
 
286
- if ( material.transparent === true || material.transmission > 0 ) {
286
+ if ( material.transparent === true || material.transmission > 0 ||
287
+ ( material.transmissionNode && material.transmissionNode.isNode ) ||
288
+ ( material.backdropNode && material.backdropNode.isNode ) ) {
287
289
 
288
290
  if ( needsDoublePass( material ) ) this.transparentDoublePass.push( renderItem );
289
291
 
@@ -313,7 +315,9 @@ class RenderList {
313
315
 
314
316
  const renderItem = this.getNextRenderItem( object, geometry, material, groupOrder, z, group, clippingContext );
315
317
 
316
- if ( material.transparent === true || material.transmission > 0 ) {
318
+ if ( material.transparent === true || material.transmission > 0 ||
319
+ ( material.transmissionNode && material.transmissionNode.isNode ) ||
320
+ ( material.backdropNode && material.backdropNode.isNode ) ) {
317
321
 
318
322
  if ( needsDoublePass( material ) ) this.transparentDoublePass.unshift( renderItem );
319
323
 
@@ -171,6 +171,16 @@ class RenderObject {
171
171
  */
172
172
  this.attributes = null;
173
173
 
174
+ /**
175
+ * An object holding the version of the
176
+ * attributes. The keys are the attribute names
177
+ * and the values are the attribute versions.
178
+ *
179
+ * @type {?Object<string, number>}
180
+ * @default null
181
+ */
182
+ this.attributesId = null;
183
+
174
184
  /**
175
185
  * A reference to a render pipeline the render
176
186
  * object is processed with.
@@ -290,7 +300,7 @@ class RenderObject {
290
300
 
291
301
  /**
292
302
  * An event listener which is executed when `dispose()` is called on
293
- * the render object's material.
303
+ * the material of this render object.
294
304
  *
295
305
  * @method
296
306
  */
@@ -300,7 +310,23 @@ class RenderObject {
300
310
 
301
311
  };
302
312
 
313
+ /**
314
+ * An event listener which is executed when `dispose()` is called on
315
+ * the geometry of this render object.
316
+ *
317
+ * @method
318
+ */
319
+ this.onGeometryDispose = () => {
320
+
321
+ // clear geometry cache attributes
322
+
323
+ this.attributes = null;
324
+ this.attributesId = null;
325
+
326
+ };
327
+
303
328
  this.material.addEventListener( 'dispose', this.onMaterialDispose );
329
+ this.geometry.addEventListener( 'dispose', this.onGeometryDispose );
304
330
 
305
331
  }
306
332
 
@@ -439,6 +465,7 @@ class RenderObject {
439
465
 
440
466
  this.geometry = geometry;
441
467
  this.attributes = null;
468
+ this.attributesId = null;
442
469
 
443
470
  }
444
471
 
@@ -458,9 +485,25 @@ class RenderObject {
458
485
  const attributes = [];
459
486
  const vertexBuffers = new Set();
460
487
 
488
+ const attributesId = {};
489
+
461
490
  for ( const nodeAttribute of nodeAttributes ) {
462
491
 
463
- const attribute = nodeAttribute.node && nodeAttribute.node.attribute ? nodeAttribute.node.attribute : geometry.getAttribute( nodeAttribute.name );
492
+ let attribute;
493
+
494
+ if ( nodeAttribute.node && nodeAttribute.node.attribute ) {
495
+
496
+ // node attribute
497
+ attribute = nodeAttribute.node.attribute;
498
+
499
+ } else {
500
+
501
+ // geometry attribute
502
+ attribute = geometry.getAttribute( nodeAttribute.name );
503
+
504
+ attributesId[ nodeAttribute.name ] = attribute.version;
505
+
506
+ }
464
507
 
465
508
  if ( attribute === undefined ) continue;
466
509
 
@@ -472,6 +515,7 @@ class RenderObject {
472
515
  }
473
516
 
474
517
  this.attributes = attributes;
518
+ this.attributesId = attributesId;
475
519
  this.vertexBuffers = Array.from( vertexBuffers.values() );
476
520
 
477
521
  return attributes;
@@ -638,7 +682,7 @@ class RenderObject {
638
682
  */
639
683
  getMaterialCacheKey() {
640
684
 
641
- const { object, material } = this;
685
+ const { object, material, renderer } = this;
642
686
 
643
687
  let cacheKey = material.customProgramCacheKey();
644
688
 
@@ -668,6 +712,18 @@ class RenderObject {
668
712
 
669
713
  valueKey += value.mapping;
670
714
 
715
+ // WebGPU must honor the sampler data because they are part of the bindings
716
+
717
+ if ( renderer.backend.isWebGPUBackend === true ) {
718
+
719
+ valueKey += value.magFilter;
720
+ valueKey += value.minFilter;
721
+ valueKey += value.wrapS;
722
+ valueKey += value.wrapT;
723
+ valueKey += value.wrapR;
724
+
725
+ }
726
+
671
727
  }
672
728
 
673
729
  valueKey += '}';
@@ -714,7 +770,7 @@ class RenderObject {
714
770
 
715
771
  }
716
772
 
717
- if ( object.count > 1 ) {
773
+ if ( object.isInstancedMesh || object.count > 1 || Array.isArray( object.morphTargetInfluences ) ) {
718
774
 
719
775
  // TODO: https://github.com/mrdoob/three.js/pull/29066#issuecomment-2269400850
720
776
 
@@ -736,7 +792,27 @@ class RenderObject {
736
792
  */
737
793
  get needsGeometryUpdate() {
738
794
 
739
- return this.geometry.id !== this.object.geometry.id;
795
+ if ( this.geometry.id !== this.object.geometry.id ) return true;
796
+
797
+ if ( this.attributes !== null ) {
798
+
799
+ const attributesId = this.attributesId;
800
+
801
+ for ( const name in attributesId ) {
802
+
803
+ const attribute = this.geometry.getAttribute( name );
804
+
805
+ if ( attribute === undefined || attributesId[ name ] !== attribute.id ) {
806
+
807
+ return true;
808
+
809
+ }
810
+
811
+ }
812
+
813
+ }
814
+
815
+ return false;
740
816
 
741
817
  }
742
818
 
@@ -793,6 +869,8 @@ class RenderObject {
793
869
 
794
870
  }
795
871
 
872
+ cacheKey = hash( cacheKey, this.camera.id );
873
+
796
874
  return cacheKey;
797
875
 
798
876
  }
@@ -814,6 +892,7 @@ class RenderObject {
814
892
  dispose() {
815
893
 
816
894
  this.material.removeEventListener( 'dispose', this.onMaterialDispose );
895
+ this.geometry.removeEventListener( 'dispose', this.onGeometryDispose );
817
896
 
818
897
  this.onDispose();
819
898
 
@@ -185,7 +185,7 @@ class RenderObjects {
185
185
  renderObject.onDispose = () => {
186
186
 
187
187
  this.pipelines.delete( renderObject );
188
- this.bindings.delete( renderObject );
188
+ this.bindings.deleteForRender( renderObject );
189
189
  this.nodes.delete( renderObject );
190
190
 
191
191
  chainMap.delete( renderObject.getChainArray() );