super-three 0.181.0 → 0.184.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +13152 -11354
  4. package/build/three.core.js +12319 -11539
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1808 -781
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +27 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +10523 -6263
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +10484 -6262
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +11 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +7 -4
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +58 -54
  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 +34 -2
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  26. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  27. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  28. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  29. package/examples/jsm/exporters/EXRExporter.js +1 -1
  30. package/examples/jsm/exporters/GLTFExporter.js +152 -9
  31. package/examples/jsm/exporters/USDZExporter.js +22 -3
  32. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  33. package/examples/jsm/geometries/TextGeometry.js +18 -0
  34. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  36. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  37. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  38. package/examples/jsm/helpers/ViewHelper.js +67 -8
  39. package/examples/jsm/inspector/Extension.js +13 -0
  40. package/examples/jsm/inspector/Inspector.js +203 -88
  41. package/examples/jsm/inspector/RendererInspector.js +14 -4
  42. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  43. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  44. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  45. package/examples/jsm/inspector/tabs/Console.js +41 -7
  46. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  47. package/examples/jsm/inspector/tabs/Parameters.js +51 -3
  48. package/examples/jsm/inspector/tabs/Performance.js +4 -4
  49. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  50. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  51. package/examples/jsm/inspector/tabs/Viewer.js +107 -5
  52. package/examples/jsm/inspector/ui/Graph.js +2 -2
  53. package/examples/jsm/inspector/ui/List.js +1 -1
  54. package/examples/jsm/inspector/ui/Profiler.js +1936 -34
  55. package/examples/jsm/inspector/ui/Style.js +1044 -31
  56. package/examples/jsm/inspector/ui/Tab.js +222 -3
  57. package/examples/jsm/inspector/ui/Values.js +55 -2
  58. package/examples/jsm/inspector/ui/utils.js +13 -0
  59. package/examples/jsm/interaction/InteractionManager.js +226 -0
  60. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  61. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  62. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  63. package/examples/jsm/lines/LineMaterial.js +7 -1
  64. package/examples/jsm/loaders/3DMLoader.js +5 -4
  65. package/examples/jsm/loaders/3MFLoader.js +2 -2
  66. package/examples/jsm/loaders/AMFLoader.js +2 -2
  67. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  68. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  69. package/examples/jsm/loaders/EXRLoader.js +687 -48
  70. package/examples/jsm/loaders/FBXLoader.js +235 -37
  71. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  72. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  73. package/examples/jsm/loaders/HDRLoader.js +1 -2
  74. package/examples/jsm/loaders/KMZLoader.js +5 -5
  75. package/examples/jsm/loaders/KTX2Loader.js +27 -5
  76. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  77. package/examples/jsm/loaders/LWOLoader.js +7 -39
  78. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  79. package/examples/jsm/loaders/PCDLoader.js +4 -2
  80. package/examples/jsm/loaders/SVGLoader.js +2 -2
  81. package/examples/jsm/loaders/TDSLoader.js +0 -2
  82. package/examples/jsm/loaders/TGALoader.js +0 -2
  83. package/examples/jsm/loaders/USDLoader.js +100 -40
  84. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  85. package/examples/jsm/loaders/VOXLoader.js +660 -117
  86. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  87. package/examples/jsm/loaders/VTKLoader.js +42 -25
  88. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  89. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  90. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  91. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  92. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  93. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  94. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  95. package/examples/jsm/math/Octree.js +131 -1
  96. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  97. package/examples/jsm/misc/RollerCoaster.js +42 -4
  98. package/examples/jsm/misc/Volume.js +0 -1
  99. package/examples/jsm/misc/VolumeSlice.js +0 -1
  100. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  101. package/examples/jsm/objects/LensflareMesh.js +1 -1
  102. package/examples/jsm/objects/Reflector.js +73 -25
  103. package/examples/jsm/objects/Sky.js +90 -6
  104. package/examples/jsm/objects/SkyMesh.js +150 -16
  105. package/examples/jsm/objects/Water.js +4 -3
  106. package/examples/jsm/objects/Water2.js +5 -3
  107. package/examples/jsm/objects/WaterMesh.js +5 -7
  108. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  109. package/examples/jsm/physics/JoltPhysics.js +10 -6
  110. package/examples/jsm/physics/RapierPhysics.js +9 -5
  111. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  112. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  113. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  114. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  115. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  116. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  117. package/examples/jsm/renderers/Projector.js +246 -28
  118. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  119. package/examples/jsm/shaders/GTAOShader.js +19 -6
  120. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  122. package/examples/jsm/shaders/SAOShader.js +17 -4
  123. package/examples/jsm/shaders/SSAOShader.js +11 -1
  124. package/examples/jsm/shaders/SSRShader.js +6 -5
  125. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  126. package/examples/jsm/shaders/VignetteShader.js +1 -1
  127. package/examples/jsm/transpiler/AST.js +44 -0
  128. package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  130. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  131. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  132. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  133. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  134. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  135. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  136. package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
  137. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  138. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  139. package/examples/jsm/tsl/display/CRT.js +150 -0
  140. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  141. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  142. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  143. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  144. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  145. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  146. package/examples/jsm/tsl/display/GTAONode.js +6 -4
  147. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  148. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  149. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  150. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  151. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  152. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  153. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  154. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  155. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  156. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  157. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  158. package/examples/jsm/tsl/display/SSGINode.js +8 -24
  159. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  160. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  161. package/examples/jsm/tsl/display/Shape.js +29 -0
  162. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  163. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  164. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  165. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  166. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  167. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  168. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  169. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  170. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  171. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  172. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  173. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  174. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  175. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  176. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  177. package/examples/jsm/tsl/math/Bayer.js +53 -3
  178. package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
  179. package/examples/jsm/utils/ColorUtils.js +76 -0
  180. package/examples/jsm/utils/LDrawUtils.js +1 -1
  181. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  182. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  183. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  186. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  187. package/package.json +24 -30
  188. package/src/Three.Core.js +3 -1
  189. package/src/Three.TSL.js +25 -11
  190. package/src/Three.WebGPU.Nodes.js +5 -0
  191. package/src/Three.WebGPU.js +9 -0
  192. package/src/Three.js +1 -0
  193. package/src/animation/AnimationAction.js +12 -2
  194. package/src/animation/AnimationClip.js +1 -1
  195. package/src/animation/AnimationMixer.js +6 -0
  196. package/src/animation/AnimationUtils.js +1 -12
  197. package/src/animation/KeyframeTrack.js +47 -8
  198. package/src/animation/PropertyMixer.js +4 -4
  199. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  200. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  201. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  202. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  203. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  204. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  205. package/src/audio/Audio.js +1 -1
  206. package/src/audio/AudioContext.js +2 -2
  207. package/src/audio/AudioListener.js +5 -3
  208. package/src/cameras/Camera.js +32 -2
  209. package/src/cameras/CubeCamera.js +20 -0
  210. package/src/constants.js +90 -5
  211. package/src/core/BufferAttribute.js +13 -1
  212. package/src/core/BufferGeometry.js +14 -2
  213. package/src/core/Clock.js +7 -0
  214. package/src/core/Object3D.js +52 -4
  215. package/src/core/Raycaster.js +2 -2
  216. package/src/core/RenderTarget.js +4 -4
  217. package/src/extras/PMREMGenerator.js +7 -18
  218. package/src/extras/TextureUtils.js +5 -1
  219. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  220. package/src/geometries/ExtrudeGeometry.js +2 -2
  221. package/src/geometries/PolyhedronGeometry.js +1 -1
  222. package/src/geometries/TorusGeometry.js +8 -3
  223. package/src/helpers/CameraHelper.js +3 -0
  224. package/src/helpers/DirectionalLightHelper.js +4 -1
  225. package/src/helpers/HemisphereLightHelper.js +3 -0
  226. package/src/helpers/PointLightHelper.js +1 -25
  227. package/src/helpers/SpotLightHelper.js +3 -0
  228. package/src/lights/DirectionalLight.js +13 -0
  229. package/src/lights/HemisphereLight.js +10 -0
  230. package/src/lights/Light.js +1 -11
  231. package/src/lights/LightProbe.js +0 -15
  232. package/src/lights/LightShadow.js +15 -6
  233. package/src/lights/PointLight.js +15 -0
  234. package/src/lights/PointLightShadow.js +0 -86
  235. package/src/lights/SpotLight.js +22 -1
  236. package/src/lights/webgpu/IESSpotLight.js +2 -1
  237. package/src/loaders/AudioLoader.js +11 -1
  238. package/src/loaders/Cache.js +28 -0
  239. package/src/loaders/DataTextureLoader.js +6 -4
  240. package/src/loaders/FileLoader.js +2 -3
  241. package/src/loaders/ImageBitmapLoader.js +12 -9
  242. package/src/loaders/Loader.js +6 -0
  243. package/src/loaders/MaterialLoader.js +3 -2
  244. package/src/loaders/ObjectLoader.js +46 -6
  245. package/src/loaders/nodes/NodeLoader.js +2 -2
  246. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  247. package/src/materials/Material.js +2 -0
  248. package/src/materials/MeshLambertMaterial.js +9 -0
  249. package/src/materials/MeshPhongMaterial.js +9 -0
  250. package/src/materials/MeshToonMaterial.js +1 -1
  251. package/src/materials/ShaderMaterial.js +20 -1
  252. package/src/materials/nodes/Line2NodeMaterial.js +34 -7
  253. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  254. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  255. package/src/materials/nodes/NodeMaterial.js +45 -25
  256. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
  257. package/src/math/Line3.js +6 -5
  258. package/src/math/MathUtils.js +10 -10
  259. package/src/math/Matrix2.js +13 -9
  260. package/src/math/Matrix3.js +13 -9
  261. package/src/math/Matrix4.js +87 -74
  262. package/src/math/Plane.js +4 -3
  263. package/src/math/Quaternion.js +3 -29
  264. package/src/math/Sphere.js +1 -1
  265. package/src/math/Triangle.js +1 -1
  266. package/src/math/Vector2.js +11 -7
  267. package/src/math/Vector3.js +15 -13
  268. package/src/math/Vector4.js +13 -9
  269. package/src/math/interpolants/BezierInterpolant.js +108 -0
  270. package/src/nodes/Nodes.js +86 -68
  271. package/src/nodes/TSL.js +7 -7
  272. package/src/nodes/accessors/Arrays.js +1 -1
  273. package/src/nodes/accessors/BatchNode.js +10 -10
  274. package/src/nodes/accessors/Bitangent.js +5 -5
  275. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  276. package/src/nodes/accessors/BufferNode.js +29 -2
  277. package/src/nodes/accessors/Camera.js +149 -28
  278. package/src/nodes/accessors/ClippingNode.js +4 -4
  279. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  280. package/src/nodes/accessors/InstanceNode.js +148 -43
  281. package/src/nodes/accessors/MaterialNode.js +9 -1
  282. package/src/nodes/accessors/MaterialProperties.js +2 -5
  283. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  284. package/src/nodes/accessors/ModelNode.js +1 -1
  285. package/src/nodes/accessors/Normal.js +11 -11
  286. package/src/nodes/accessors/Object3DNode.js +1 -1
  287. package/src/nodes/accessors/Position.js +34 -2
  288. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  289. package/src/nodes/accessors/ReferenceNode.js +8 -8
  290. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  291. package/src/nodes/accessors/SceneProperties.js +47 -0
  292. package/src/nodes/accessors/SkinningNode.js +27 -26
  293. package/src/nodes/accessors/StorageBufferNode.js +14 -25
  294. package/src/nodes/accessors/StorageTextureNode.js +40 -9
  295. package/src/nodes/accessors/Tangent.js +4 -14
  296. package/src/nodes/accessors/Texture3DNode.js +32 -35
  297. package/src/nodes/accessors/TextureNode.js +67 -23
  298. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  299. package/src/nodes/accessors/UserDataNode.js +1 -2
  300. package/src/nodes/accessors/VertexColorNode.js +1 -2
  301. package/src/nodes/code/FunctionCallNode.js +1 -1
  302. package/src/nodes/code/FunctionNode.js +2 -3
  303. package/src/nodes/core/ArrayNode.js +21 -2
  304. package/src/nodes/core/AssignNode.js +3 -3
  305. package/src/nodes/core/AttributeNode.js +3 -3
  306. package/src/nodes/core/BypassNode.js +1 -1
  307. package/src/nodes/core/ContextNode.js +104 -5
  308. package/src/nodes/core/IndexNode.js +2 -1
  309. package/src/nodes/core/InputNode.js +1 -1
  310. package/src/nodes/core/InspectorNode.js +1 -1
  311. package/src/nodes/core/IsolateNode.js +1 -1
  312. package/src/nodes/core/MRTNode.js +48 -2
  313. package/src/nodes/core/Node.js +112 -15
  314. package/src/nodes/core/NodeBuilder.js +284 -66
  315. package/src/nodes/core/NodeError.js +28 -0
  316. package/src/nodes/core/NodeFrame.js +12 -4
  317. package/src/nodes/core/NodeUtils.js +11 -9
  318. package/src/nodes/core/OutputStructNode.js +12 -10
  319. package/src/nodes/core/ParameterNode.js +4 -4
  320. package/src/nodes/core/PropertyNode.js +19 -3
  321. package/src/nodes/core/StackNode.js +66 -17
  322. package/src/nodes/core/StackTrace.js +139 -0
  323. package/src/nodes/core/StructNode.js +17 -3
  324. package/src/nodes/core/StructTypeNode.js +12 -18
  325. package/src/nodes/core/SubBuildNode.js +2 -2
  326. package/src/nodes/core/UniformGroupNode.js +36 -6
  327. package/src/nodes/core/UniformNode.js +21 -5
  328. package/src/nodes/core/VarNode.js +48 -23
  329. package/src/nodes/core/VaryingNode.js +2 -19
  330. package/src/nodes/display/BlendModes.js +0 -64
  331. package/src/nodes/display/ColorAdjustment.js +17 -0
  332. package/src/nodes/display/ColorSpaceNode.js +3 -3
  333. package/src/nodes/display/NormalMapNode.js +39 -4
  334. package/src/nodes/display/PassNode.js +125 -16
  335. package/src/nodes/display/RenderOutputNode.js +7 -7
  336. package/src/nodes/display/ScreenNode.js +4 -2
  337. package/src/nodes/display/ToneMappingNode.js +1 -1
  338. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  339. package/src/nodes/display/ViewportDepthNode.js +52 -4
  340. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  341. package/src/nodes/display/ViewportTextureNode.js +39 -11
  342. package/src/nodes/fog/Fog.js +18 -35
  343. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  344. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  345. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  346. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  347. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  348. package/src/nodes/geometry/RangeNode.js +5 -3
  349. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  350. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  351. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  352. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  353. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  354. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  355. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  356. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  357. package/src/nodes/lighting/LightsNode.js +7 -28
  358. package/src/nodes/lighting/PointShadowNode.js +162 -149
  359. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  360. package/src/nodes/lighting/ShadowNode.js +120 -42
  361. package/src/nodes/math/BitcastNode.js +1 -1
  362. package/src/nodes/math/BitcountNode.js +433 -0
  363. package/src/nodes/math/ConditionalNode.js +3 -3
  364. package/src/nodes/math/MathNode.js +76 -41
  365. package/src/nodes/math/OperatorNode.js +3 -2
  366. package/src/nodes/math/PackFloatNode.js +98 -0
  367. package/src/nodes/math/UnpackFloatNode.js +96 -0
  368. package/src/nodes/pmrem/PMREMNode.js +1 -1
  369. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  370. package/src/nodes/tsl/TSLBase.js +1 -1
  371. package/src/nodes/tsl/TSLCore.js +38 -17
  372. package/src/nodes/utils/ArrayElementNode.js +14 -1
  373. package/src/nodes/utils/ConvertNode.js +1 -1
  374. package/src/nodes/utils/DebugNode.js +12 -12
  375. package/src/nodes/utils/EventNode.js +31 -2
  376. package/src/nodes/utils/FlipNode.js +1 -1
  377. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  378. package/src/nodes/utils/JoinNode.js +3 -3
  379. package/src/nodes/utils/LoopNode.js +1 -1
  380. package/src/nodes/utils/MemberNode.js +2 -2
  381. package/src/nodes/utils/Packing.js +13 -1
  382. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  383. package/src/nodes/utils/RTTNode.js +1 -1
  384. package/src/nodes/utils/ReflectorNode.js +3 -4
  385. package/src/nodes/utils/Remap.js +48 -0
  386. package/src/nodes/utils/RotateNode.js +1 -1
  387. package/src/nodes/utils/SampleNode.js +1 -1
  388. package/src/nodes/utils/SetNode.js +1 -1
  389. package/src/nodes/utils/SplitNode.js +1 -1
  390. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  391. package/src/nodes/utils/UVUtils.js +28 -0
  392. package/src/objects/BatchedMesh.js +44 -16
  393. package/src/objects/InstancedMesh.js +30 -3
  394. package/src/objects/Line.js +1 -1
  395. package/src/objects/Mesh.js +1 -1
  396. package/src/objects/Points.js +1 -1
  397. package/src/objects/Skeleton.js +9 -0
  398. package/src/objects/SkinnedMesh.js +26 -9
  399. package/src/renderers/WebGLRenderer.js +329 -145
  400. package/src/renderers/common/Animation.js +3 -3
  401. package/src/renderers/common/Attributes.js +15 -1
  402. package/src/renderers/common/Backend.js +29 -8
  403. package/src/renderers/common/Background.js +26 -13
  404. package/src/renderers/common/BindGroup.js +1 -16
  405. package/src/renderers/common/Binding.js +11 -0
  406. package/src/renderers/common/Bindings.js +29 -14
  407. package/src/renderers/common/BlendMode.js +143 -0
  408. package/src/renderers/common/Buffer.js +40 -0
  409. package/src/renderers/common/BundleGroup.js +1 -1
  410. package/src/renderers/common/ChainMap.js +30 -6
  411. package/src/renderers/common/ComputePipeline.js +1 -1
  412. package/src/renderers/common/CubeRenderTarget.js +51 -7
  413. package/src/renderers/common/Geometries.js +29 -3
  414. package/src/renderers/common/Info.js +333 -4
  415. package/src/renderers/common/InspectorBase.js +6 -1
  416. package/src/renderers/common/Lighting.js +5 -21
  417. package/src/renderers/common/Pipelines.js +40 -7
  418. package/src/renderers/common/PostProcessing.js +8 -206
  419. package/src/renderers/common/ReadbackBuffer.js +78 -0
  420. package/src/renderers/common/RenderBundle.js +3 -1
  421. package/src/renderers/common/RenderBundles.js +7 -3
  422. package/src/renderers/common/RenderContext.js +16 -0
  423. package/src/renderers/common/RenderContexts.js +33 -49
  424. package/src/renderers/common/RenderLists.js +2 -1
  425. package/src/renderers/common/RenderObject.js +17 -5
  426. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  427. package/src/renderers/common/RenderObjects.js +21 -5
  428. package/src/renderers/common/RenderPipeline.js +232 -17
  429. package/src/renderers/common/Renderer.js +481 -117
  430. package/src/renderers/common/Sampler.js +4 -4
  431. package/src/renderers/common/StorageBuffer.js +13 -1
  432. package/src/renderers/common/Textures.js +89 -4
  433. package/src/renderers/common/TimestampQueryPool.js +5 -3
  434. package/src/renderers/common/Uniform.js +8 -0
  435. package/src/renderers/common/UniformsGroup.js +62 -1
  436. package/src/renderers/common/XRManager.js +37 -29
  437. package/src/renderers/common/extras/PMREMGenerator.js +25 -23
  438. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  439. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
  440. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  441. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  442. package/src/renderers/shaders/DFGLUTData.js +19 -34
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  444. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  445. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  446. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  447. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  448. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  449. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  450. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  451. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  452. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  453. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  454. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  455. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  456. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  457. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  458. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  459. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  461. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  462. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  463. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  464. package/src/renderers/shaders/ShaderChunk.js +5 -3
  465. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  466. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  467. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  468. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  469. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  470. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  472. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  473. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  474. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  475. package/src/renderers/shaders/ShaderLib.js +7 -6
  476. package/src/renderers/shaders/UniformsLib.js +7 -5
  477. package/src/renderers/shaders/UniformsUtils.js +27 -5
  478. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  479. package/src/renderers/webgl/WebGLBackground.js +15 -15
  480. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  481. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  482. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  483. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  484. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  485. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  486. package/src/renderers/webgl/WebGLLights.js +18 -1
  487. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  488. package/src/renderers/webgl/WebGLObjects.js +3 -1
  489. package/src/renderers/webgl/WebGLOutput.js +270 -0
  490. package/src/renderers/webgl/WebGLProgram.js +49 -109
  491. package/src/renderers/webgl/WebGLPrograms.js +63 -51
  492. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  493. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  494. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  495. package/src/renderers/webgl/WebGLState.js +75 -37
  496. package/src/renderers/webgl/WebGLTextures.js +215 -54
  497. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  498. package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
  499. package/src/renderers/webgl/WebGLUtils.js +6 -2
  500. package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
  501. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  504. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
  507. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  508. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  509. package/src/renderers/webgpu/WebGPUBackend.js +260 -140
  510. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  511. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
  512. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
  513. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  514. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  515. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  516. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  517. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
  519. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  520. package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
  521. package/src/renderers/webxr/WebXRController.js +12 -0
  522. package/src/renderers/webxr/WebXRManager.js +4 -2
  523. package/src/textures/CubeDepthTexture.js +76 -0
  524. package/src/textures/HTMLTexture.js +74 -0
  525. package/src/textures/Source.js +2 -2
  526. package/src/textures/Texture.js +16 -5
  527. package/src/utils.js +280 -3
  528. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  529. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  530. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  531. package/src/nodes/accessors/SceneNode.js +0 -145
  532. package/src/nodes/code/ScriptableNode.js +0 -726
  533. package/src/nodes/code/ScriptableValueNode.js +0 -253
  534. package/src/nodes/display/PosterizeNode.js +0 -65
  535. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  536. package/src/nodes/utils/RemapNode.js +0 -125
  537. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  538. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  539. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -35,7 +35,7 @@ class Sampler extends Binding {
35
35
  this._onTextureDispose = () => {
36
36
 
37
37
  this.generation = null;
38
- this.version = 0;
38
+ this.version = - 1;
39
39
 
40
40
  };
41
41
 
@@ -47,7 +47,7 @@ class Sampler extends Binding {
47
47
  *
48
48
  * @type {number}
49
49
  */
50
- this.version = texture ? texture.version : 0;
50
+ this.version = texture ? texture.version : - 1;
51
51
 
52
52
  /**
53
53
  * The binding's generation which is an additional version
@@ -95,7 +95,7 @@ class Sampler extends Binding {
95
95
  this._texture = value;
96
96
 
97
97
  this.generation = null;
98
- this.version = 0;
98
+ this.version = - 1;
99
99
 
100
100
  if ( this._texture ) {
101
101
 
@@ -150,7 +150,7 @@ class Sampler extends Binding {
150
150
  clonedSampler._onTextureDispose = () => {
151
151
 
152
152
  clonedSampler.generation = null;
153
- clonedSampler.version = 0;
153
+ clonedSampler.version = - 1;
154
154
 
155
155
  };
156
156
 
@@ -21,9 +21,10 @@ class StorageBuffer extends Buffer {
21
21
  /**
22
22
  * This flag can be used for type testing.
23
23
  *
24
+ * @private
24
25
  * @type {BufferAttribute}
25
26
  */
26
- this.attribute = attribute;
27
+ this._attribute = attribute;
27
28
 
28
29
  /**
29
30
  * This flag can be used for type testing.
@@ -36,6 +37,17 @@ class StorageBuffer extends Buffer {
36
37
 
37
38
  }
38
39
 
40
+ /**
41
+ * The storage buffer attribute.
42
+ *
43
+ * @type {BufferAttribute}
44
+ */
45
+ get attribute() {
46
+
47
+ return this._attribute;
48
+
49
+ }
50
+
39
51
  }
40
52
 
41
53
  export default StorageBuffer;
@@ -48,6 +48,13 @@ class Textures extends DataMap {
48
48
  */
49
49
  this.info = info;
50
50
 
51
+ /**
52
+ * A set of HTMLTextures that need paint updates.
53
+ *
54
+ * @type {Set<HTMLTexture>}
55
+ */
56
+ this._htmlTextures = new Set();
57
+
51
58
  }
52
59
 
53
60
  /**
@@ -162,6 +169,8 @@ class Textures extends DataMap {
162
169
 
163
170
  renderTargetData.initialized = true;
164
171
 
172
+ this.info.memory.renderTargets ++;
173
+
165
174
  // dispose
166
175
 
167
176
  renderTargetData.onDispose = () => {
@@ -218,6 +227,56 @@ class Textures extends DataMap {
218
227
 
219
228
  }
220
229
 
230
+ // Ensure HTMLTexture elements are in the canvas before measuring size.
231
+
232
+ if ( texture.isHTMLTexture && texture.image ) {
233
+
234
+ const canvas = this.renderer.domElement;
235
+
236
+ if ( 'requestPaint' in canvas ) {
237
+
238
+ if ( ! canvas.hasAttribute( 'layoutsubtree' ) ) {
239
+
240
+ canvas.setAttribute( 'layoutsubtree', 'true' );
241
+
242
+ }
243
+
244
+ if ( texture.image.parentNode !== canvas ) {
245
+
246
+ canvas.appendChild( texture.image );
247
+
248
+ }
249
+
250
+ // Set up shared paint callback for all HTMLTextures.
251
+
252
+ if ( this._htmlTextures.size === 0 ) {
253
+
254
+ const htmlTextures = this._htmlTextures;
255
+
256
+ canvas.onpaint = ( event ) => {
257
+
258
+ const changed = event && event.changedElements;
259
+
260
+ for ( const t of htmlTextures ) {
261
+
262
+ if ( ! changed || changed.includes( t.image ) ) {
263
+
264
+ t.needsUpdate = true;
265
+
266
+ }
267
+
268
+ }
269
+
270
+ };
271
+
272
+ }
273
+
274
+ this._htmlTextures.add( texture );
275
+
276
+ }
277
+
278
+ }
279
+
221
280
  //
222
281
 
223
282
  const { width, height, depth } = this.getSize( texture );
@@ -318,14 +377,15 @@ class Textures extends DataMap {
318
377
 
319
378
  textureData.initialized = true;
320
379
  textureData.generation = texture.version;
380
+ textureData.bindGroups = new Set();
321
381
 
322
382
  //
323
383
 
324
- this.info.memory.textures ++;
384
+ this.info.createTexture( texture );
325
385
 
326
386
  //
327
387
 
328
- if ( texture.isVideoTexture && ColorManagement.getTransfer( texture.colorSpace ) !== SRGBTransfer ) {
388
+ if ( texture.isVideoTexture && ColorManagement.enabled === true && ColorManagement.getTransfer( texture.colorSpace ) !== SRGBTransfer ) {
329
389
 
330
390
  warn( 'WebGPURenderer: Video textures must use a color space with a sRGB transfer function, e.g. SRGBColorSpace.' );
331
391
 
@@ -387,7 +447,13 @@ class Textures extends DataMap {
387
447
 
388
448
  if ( image.image !== undefined ) image = image.image;
389
449
 
390
- if ( ( typeof HTMLVideoElement !== 'undefined' ) && ( image instanceof HTMLVideoElement ) ) {
450
+ if ( texture.isHTMLTexture ) {
451
+
452
+ target.width = image.offsetWidth || 1;
453
+ target.height = image.offsetHeight || 1;
454
+ target.depth = 1;
455
+
456
+ } else if ( ( typeof HTMLVideoElement !== 'undefined' ) && ( image instanceof HTMLVideoElement ) ) {
391
457
 
392
458
  target.width = image.videoWidth || 1;
393
459
  target.height = image.videoHeight || 1;
@@ -503,6 +569,8 @@ class Textures extends DataMap {
503
569
  this.delete( renderTarget );
504
570
  this.backend.delete( renderTarget );
505
571
 
572
+ this.info.memory.renderTargets --;
573
+
506
574
  }
507
575
 
508
576
  }
@@ -531,9 +599,26 @@ class Textures extends DataMap {
531
599
  const isDefaultTexture = textureData.isDefaultTexture;
532
600
  this.backend.destroyTexture( texture, isDefaultTexture );
533
601
 
602
+ // delete cached bind groups so they don't point to destroyed textures
603
+
604
+ if ( textureData.bindGroups ) {
605
+
606
+ for ( const bindGroup of textureData.bindGroups ) {
607
+
608
+ const bindingsData = this.backend.get( bindGroup );
609
+
610
+ bindingsData.groups = undefined;
611
+ bindingsData.versions = undefined;
612
+
613
+ }
614
+
615
+ }
616
+
617
+ this._htmlTextures.delete( texture );
618
+
534
619
  this.delete( texture );
535
620
 
536
- this.info.memory.textures --;
621
+ this.info.destroyTexture( texture );
537
622
 
538
623
  }
539
624
 
@@ -54,7 +54,7 @@ class TimestampQueryPool {
54
54
  this.isDisposed = false;
55
55
 
56
56
  /**
57
- * TODO
57
+ * The total frame duration until the next update.
58
58
  *
59
59
  * @type {number}
60
60
  * @default 0
@@ -69,9 +69,11 @@ class TimestampQueryPool {
69
69
  this.frames = [];
70
70
 
71
71
  /**
72
- * TODO
72
+ * This property is used to avoid multiple concurrent resolve operations.
73
+ * The WebGL backend uses it as a boolean flag. In context of WebGPU, it holds
74
+ * the promise of the current resolve operation.
73
75
  *
74
- * @type {boolean}
76
+ * @type {boolean|Promise<number>}
75
77
  * @default false
76
78
  */
77
79
  this.pendingResolve = false;
@@ -61,6 +61,14 @@ class Uniform {
61
61
  */
62
62
  this.offset = 0;
63
63
 
64
+ /**
65
+ * This property is set by {@link UniformsGroup} and marks
66
+ * the index position in the uniform array.
67
+ *
68
+ * @type {number}
69
+ */
70
+ this.index = - 1;
71
+
64
72
  }
65
73
 
66
74
  /**
@@ -47,6 +47,51 @@ class UniformsGroup extends UniformBuffer {
47
47
  */
48
48
  this.uniforms = [];
49
49
 
50
+ /**
51
+ * A cache for the uniform update ranges.
52
+ *
53
+ * @private
54
+ * @type {Map<number, {start: number, count: number}>}
55
+ */
56
+ this._updateRangeCache = new Map();
57
+
58
+ }
59
+
60
+ /**
61
+ * Adds a uniform's update range to this buffer.
62
+ *
63
+ * @param {Uniform} uniform - The uniform.
64
+ */
65
+ addUniformUpdateRange( uniform ) {
66
+
67
+ const index = uniform.index;
68
+
69
+ if ( this._updateRangeCache.has( index ) !== true ) {
70
+
71
+ const updateRanges = this.updateRanges;
72
+
73
+ const start = uniform.offset;
74
+ const count = uniform.itemSize;
75
+
76
+ const range = { start, count };
77
+
78
+ updateRanges.push( range );
79
+
80
+ this._updateRangeCache.set( index, range );
81
+
82
+ }
83
+
84
+ }
85
+
86
+ /**
87
+ * Clears all update ranges of this buffer.
88
+ */
89
+ clearUpdateRanges() {
90
+
91
+ this._updateRangeCache.clear();
92
+
93
+ super.clearUpdateRanges();
94
+
50
95
  }
51
96
 
52
97
  /**
@@ -156,6 +201,7 @@ class UniformsGroup extends UniformBuffer {
156
201
  }
157
202
 
158
203
  uniform.offset = offset / bytesPerElement;
204
+ uniform.index = i;
159
205
 
160
206
  offset += itemSize;
161
207
 
@@ -235,6 +281,8 @@ class UniformsGroup extends UniformBuffer {
235
281
  b[ offset ] = a[ offset ] = v;
236
282
  updated = true;
237
283
 
284
+ this.addUniformUpdateRange( uniform );
285
+
238
286
  }
239
287
 
240
288
  return updated;
@@ -265,6 +313,8 @@ class UniformsGroup extends UniformBuffer {
265
313
 
266
314
  updated = true;
267
315
 
316
+ this.addUniformUpdateRange( uniform );
317
+
268
318
  }
269
319
 
270
320
  return updated;
@@ -296,6 +346,8 @@ class UniformsGroup extends UniformBuffer {
296
346
 
297
347
  updated = true;
298
348
 
349
+ this.addUniformUpdateRange( uniform );
350
+
299
351
  }
300
352
 
301
353
  return updated;
@@ -317,7 +369,7 @@ class UniformsGroup extends UniformBuffer {
317
369
  const offset = uniform.offset;
318
370
  const type = uniform.getType();
319
371
 
320
- if ( a[ offset + 0 ] !== v.x || a[ offset + 1 ] !== v.y || a[ offset + 2 ] !== v.z || a[ offset + 4 ] !== v.w ) {
372
+ if ( a[ offset + 0 ] !== v.x || a[ offset + 1 ] !== v.y || a[ offset + 2 ] !== v.z || a[ offset + 3 ] !== v.w ) {
321
373
 
322
374
  const b = this._getBufferForType( type );
323
375
 
@@ -328,6 +380,8 @@ class UniformsGroup extends UniformBuffer {
328
380
 
329
381
  updated = true;
330
382
 
383
+ this.addUniformUpdateRange( uniform );
384
+
331
385
  }
332
386
 
333
387
  return updated;
@@ -358,6 +412,8 @@ class UniformsGroup extends UniformBuffer {
358
412
 
359
413
  updated = true;
360
414
 
415
+ this.addUniformUpdateRange( uniform );
416
+
361
417
  }
362
418
 
363
419
  return updated;
@@ -396,6 +452,8 @@ class UniformsGroup extends UniformBuffer {
396
452
 
397
453
  updated = true;
398
454
 
455
+ this.addUniformUpdateRange( uniform );
456
+
399
457
  }
400
458
 
401
459
  return updated;
@@ -423,6 +481,8 @@ class UniformsGroup extends UniformBuffer {
423
481
  setArray( a, e, offset );
424
482
  updated = true;
425
483
 
484
+ this.addUniformUpdateRange( uniform );
485
+
426
486
  }
427
487
 
428
488
  return updated;
@@ -432,6 +492,7 @@ class UniformsGroup extends UniformBuffer {
432
492
  /**
433
493
  * Returns a typed array that matches the given data type.
434
494
  *
495
+ * @private
435
496
  * @param {string} type - The data type.
436
497
  * @return {TypedArray} The typed array.
437
498
  */
@@ -11,16 +11,17 @@ import { AddEquation, BackSide, CustomBlending, DepthFormat, DepthStencilFormat,
11
11
  import { DepthTexture } from '../../textures/DepthTexture.js';
12
12
  import { XRRenderTarget } from './XRRenderTarget.js';
13
13
  import { CylinderGeometry } from '../../geometries/CylinderGeometry.js';
14
- import QuadMesh from './QuadMesh.js';
15
- import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
16
14
  import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
17
15
  import { MeshBasicMaterial } from '../../materials/MeshBasicMaterial.js';
18
16
  import { Mesh } from '../../objects/Mesh.js';
19
17
  import { warn } from '../../utils.js';
18
+ import { renderOutput } from '../../nodes/display/RenderOutputNode.js';
20
19
 
21
20
  const _cameraLPos = /*@__PURE__*/ new Vector3();
22
21
  const _cameraRPos = /*@__PURE__*/ new Vector3();
23
22
 
23
+ const _contextNodeLib = /*@__PURE__*/ new WeakMap();
24
+
24
25
  /**
25
26
  * The XR manager is built on top of the WebXR Device API to
26
27
  * manage XR sessions with `WebGPURenderer`.
@@ -167,6 +168,7 @@ class XRManager extends EventDispatcher {
167
168
  /**
168
169
  * Whether the XR session uses layers.
169
170
  *
171
+ * @private
170
172
  * @type {boolean}
171
173
  * @default false
172
174
  */
@@ -181,8 +183,6 @@ class XRManager extends EventDispatcher {
181
183
  */
182
184
  this._supportsGlBinding = typeof XRWebGLBinding !== 'undefined';
183
185
 
184
- this._frameBufferTargets = null;
185
-
186
186
  /**
187
187
  * Helper function to create native WebXR Layer.
188
188
  *
@@ -829,19 +829,23 @@ class XRManager extends EventDispatcher {
829
829
  const renderer = this._renderer;
830
830
 
831
831
  const wasPresenting = this.isPresenting;
832
- const rendererOutputTarget = renderer.getOutputRenderTarget();
833
- const rendererFramebufferTarget = renderer._frameBufferTarget;
832
+
834
833
  this.isPresenting = false;
835
834
 
836
835
  const rendererSize = new Vector2();
837
836
  renderer.getSize( rendererSize );
838
- const rendererQuad = renderer._quad;
837
+
838
+ const currentRenderTarget = renderer.getRenderTarget();
839
839
 
840
840
  for ( const layer of this._layers ) {
841
841
 
842
842
  layer.renderTarget.isXRRenderTarget = this._session !== null;
843
843
  layer.renderTarget._hasExternalTextures = layer.renderTarget.isXRRenderTarget;
844
844
 
845
+ const currentContextNode = renderer.contextNode;
846
+
847
+ let contextNode;
848
+
845
849
  if ( layer.renderTarget.isXRRenderTarget && this._sessionUsesLayers ) {
846
850
 
847
851
  layer.xrlayer.transform = new XRRigidTransform( layer.plane.getWorldPosition( translationObject ), layer.plane.getWorldQuaternion( quaternionObject ) );
@@ -853,42 +857,46 @@ class XRManager extends EventDispatcher {
853
857
  undefined );
854
858
 
855
859
  renderer._setXRLayerSize( layer.renderTarget.width, layer.renderTarget.height );
856
- renderer.setOutputRenderTarget( layer.renderTarget );
857
- renderer.setRenderTarget( null );
858
- renderer._frameBufferTarget = null;
859
860
 
860
- this._frameBufferTargets || ( this._frameBufferTargets = new WeakMap() );
861
- const { frameBufferTarget, quad } = this._frameBufferTargets.get( layer.renderTarget ) || { frameBufferTarget: null, quad: null };
862
- if ( ! frameBufferTarget ) {
861
+ contextNode = _contextNodeLib.get( currentContextNode );
863
862
 
864
- renderer._quad = new QuadMesh( new NodeMaterial() );
865
- this._frameBufferTargets.set( layer.renderTarget, { frameBufferTarget: renderer._getFrameBufferTarget(), quad: renderer._quad } );
863
+ if ( contextNode === undefined ) {
866
864
 
867
- } else {
865
+ // Apply ToneMapping and OutputColorSpace directly in the material shader
868
866
 
869
- renderer._frameBufferTarget = frameBufferTarget;
870
- renderer._quad = quad;
867
+ contextNode = currentContextNode.context( {
871
868
 
872
- }
869
+ getOutput: ( outputNode ) => {
870
+
871
+ return renderOutput( outputNode, renderer.toneMapping, renderer.outputColorSpace );
873
872
 
874
- layer.rendercall();
873
+ }
875
874
 
876
- renderer._frameBufferTarget = null;
875
+ } );
876
+
877
+ _contextNodeLib.set( currentContextNode, contextNode );
878
+
879
+ }
877
880
 
878
881
  } else {
879
882
 
880
- renderer.setRenderTarget( layer.renderTarget );
881
- layer.rendercall();
883
+ contextNode = currentContextNode;
882
884
 
883
885
  }
884
886
 
887
+ renderer.contextNode = contextNode;
888
+
889
+ renderer.setRenderTarget( layer.renderTarget );
890
+
891
+ layer.rendercall();
892
+
893
+ renderer.contextNode = currentContextNode;
894
+
885
895
  }
886
896
 
887
- renderer.setRenderTarget( null );
888
- renderer.setOutputRenderTarget( rendererOutputTarget );
889
- renderer._frameBufferTarget = rendererFramebufferTarget;
897
+ renderer.setRenderTarget( currentRenderTarget );
890
898
  renderer._setXRLayerSize( rendererSize.x, rendererSize.y );
891
- renderer._quad = rendererQuad;
899
+
892
900
  this.isPresenting = wasPresenting;
893
901
 
894
902
  }
@@ -1130,8 +1138,8 @@ class XRManager extends EventDispatcher {
1130
1138
 
1131
1139
  // inherit camera layers and enable eye layers (1 = left, 2 = right)
1132
1140
  cameraXR.layers.mask = camera.layers.mask | 0b110;
1133
- cameraL.layers.mask = cameraXR.layers.mask & 0b011;
1134
- cameraR.layers.mask = cameraXR.layers.mask & 0b101;
1141
+ cameraL.layers.mask = cameraXR.layers.mask & ~ 0b100;
1142
+ cameraR.layers.mask = cameraXR.layers.mask & ~ 0b010;
1135
1143
 
1136
1144
 
1137
1145
  const parent = camera.parent;
@@ -410,7 +410,7 @@ class PMREMGenerator {
410
410
 
411
411
  this._renderer.setRenderTarget( _oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel );
412
412
  outputTarget.scissorTest = false;
413
- _setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );
413
+ this._setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );
414
414
 
415
415
  }
416
416
 
@@ -459,6 +459,7 @@ class PMREMGenerator {
459
459
  ( { lodMeshes: this._lodMeshes, sizeLods: this._sizeLods, sigmas: this._sigmas } = _createPlanes( _lodMax ) );
460
460
 
461
461
  this._blurMaterial = _getBlurShader( _lodMax, renderTarget.width, renderTarget.height );
462
+ this._ggxMaterial = _getGGXShader( _lodMax, renderTarget.width, renderTarget.height );
462
463
 
463
464
  }
464
465
 
@@ -565,7 +566,7 @@ class PMREMGenerator {
565
566
 
566
567
  const size = this._cubeSize;
567
568
 
568
- _setViewport( cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size );
569
+ this._setViewport( cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size );
569
570
 
570
571
  renderer.render( scene, cubeCamera );
571
572
 
@@ -607,9 +608,7 @@ class PMREMGenerator {
607
608
  mesh.material = material;
608
609
 
609
610
  const size = this._cubeSize;
610
-
611
- _setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size );
612
-
611
+ this._setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size );
613
612
  renderer.setRenderTarget( cubeUVRenderTarget );
614
613
  renderer.render( mesh, _flatCamera );
615
614
 
@@ -650,13 +649,6 @@ class PMREMGenerator {
650
649
  const renderer = this._renderer;
651
650
  const pingPongRenderTarget = this._pingPongRenderTarget;
652
651
 
653
- // Lazy create GGX material only when first used
654
- if ( this._ggxMaterial === null ) {
655
-
656
- this._ggxMaterial = _getGGXShader( this._lodMax, this._pingPongRenderTarget.width, this._pingPongRenderTarget.height );
657
-
658
- }
659
-
660
652
  const ggxMaterial = this._ggxMaterial;
661
653
  const ggxMesh = this._lodMeshes[ lodOut ];
662
654
  ggxMesh.material = ggxMaterial;
@@ -669,7 +661,7 @@ class PMREMGenerator {
669
661
  const incrementalRoughness = Math.sqrt( targetRoughness * targetRoughness - sourceRoughness * sourceRoughness );
670
662
 
671
663
  // Apply blur strength mapping for better quality across the roughness range
672
- const blurStrength = 0.05 + targetRoughness * 0.95;
664
+ const blurStrength = 0.0 + targetRoughness * 1.25;
673
665
  const adjustedRoughness = incrementalRoughness * blurStrength;
674
666
 
675
667
  // Calculate viewport position based on output LOD level
@@ -684,7 +676,7 @@ class PMREMGenerator {
684
676
  ggxUniforms.roughness.value = adjustedRoughness;
685
677
  ggxUniforms.mipInt.value = _lodMax - lodIn; // Sample from input LOD
686
678
 
687
- _setViewport( pingPongRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
679
+ this._setViewport( pingPongRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
688
680
  renderer.setRenderTarget( pingPongRenderTarget );
689
681
  renderer.render( ggxMesh, _flatCamera );
690
682
 
@@ -694,7 +686,7 @@ class PMREMGenerator {
694
686
  ggxUniforms.roughness.value = 0.0; // Direct copy
695
687
  ggxUniforms.mipInt.value = _lodMax - lodOut; // Read from the level we just wrote
696
688
 
697
- _setViewport( cubeUVRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
689
+ this._setViewport( cubeUVRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
698
690
  renderer.setRenderTarget( cubeUVRenderTarget );
699
691
  renderer.render( ggxMesh, _flatCamera );
700
692
 
@@ -820,12 +812,29 @@ class PMREMGenerator {
820
812
  const x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );
821
813
  const y = 4 * ( this._cubeSize - outputSize );
822
814
 
823
- _setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );
815
+ this._setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );
824
816
  renderer.setRenderTarget( targetOut );
825
817
  renderer.render( blurMesh, _flatCamera );
826
818
 
827
819
  }
828
820
 
821
+ _setViewport( target, x, y, width, height ) {
822
+
823
+ if ( this._renderer.isWebGLRenderer ) {
824
+
825
+ target.viewport.set( x, target.height - height - y, width, height );
826
+ target.scissor.set( x, target.height - height - y, width, height );
827
+
828
+ } else {
829
+
830
+ target.viewport.set( x, y, width, height );
831
+ target.scissor.set( x, y, width, height );
832
+
833
+ }
834
+
835
+ }
836
+
837
+
829
838
  }
830
839
 
831
840
  function _createPlanes( lodMax ) {
@@ -931,13 +940,6 @@ function _createRenderTarget( width, height ) {
931
940
 
932
941
  }
933
942
 
934
- function _setViewport( target, x, y, width, height ) {
935
-
936
- target.viewport.set( x, y, width, height );
937
- target.scissor.set( x, y, width, height );
938
-
939
- }
940
-
941
943
  function _getMaterial( type ) {
942
944
 
943
945
  const material = new NodeMaterial();
@@ -126,7 +126,7 @@ class NodeBuilderState {
126
126
 
127
127
  if ( shared !== true ) {
128
128
 
129
- const bindingsGroup = new BindGroup( instanceGroup.name, [], instanceGroup.index, instanceGroup.bindingsReference );
129
+ const bindingsGroup = new BindGroup( instanceGroup.name, [] );
130
130
  bindings.push( bindingsGroup );
131
131
 
132
132
  for ( const instanceBinding of instanceGroup.bindings ) {