super-three 0.181.0 → 0.185.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (693) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +21332 -19201
  4. package/build/three.core.js +20908 -19853
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1947 -862
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +37 -16
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +33628 -25197
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +33394 -25000
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +14 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +13 -6
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +127 -86
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +102 -17
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMFrustum.js +31 -6
  26. package/examples/jsm/csm/CSMShadowNode.js +10 -3
  27. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  28. package/examples/jsm/effects/AsciiEffect.js +14 -1
  29. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  30. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  31. package/examples/jsm/exporters/DRACOExporter.js +27 -6
  32. package/examples/jsm/exporters/EXRExporter.js +1 -1
  33. package/examples/jsm/exporters/GLTFExporter.js +266 -21
  34. package/examples/jsm/exporters/PLYExporter.js +286 -73
  35. package/examples/jsm/exporters/USDZExporter.js +353 -99
  36. package/examples/jsm/generators/CityGenerator.js +346 -0
  37. package/examples/jsm/generators/ForestGenerator.js +347 -0
  38. package/examples/jsm/generators/TerrainGenerator.js +504 -0
  39. package/examples/jsm/generators/TreeGenerator.js +377 -0
  40. package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
  41. package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
  42. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  43. package/examples/jsm/geometries/LoftGeometry.js +355 -0
  44. package/examples/jsm/geometries/TextGeometry.js +18 -0
  45. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  46. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  47. package/examples/jsm/helpers/LightProbeHelper.js +5 -4
  48. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  49. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  50. package/examples/jsm/helpers/ViewHelper.js +83 -14
  51. package/examples/jsm/inspector/Extension.js +13 -0
  52. package/examples/jsm/inspector/Inspector.js +244 -91
  53. package/examples/jsm/inspector/RendererInspector.js +165 -39
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  55. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  56. package/examples/jsm/inspector/tabs/Console.js +241 -25
  57. package/examples/jsm/inspector/tabs/Memory.js +136 -0
  58. package/examples/jsm/inspector/tabs/Parameters.js +115 -7
  59. package/examples/jsm/inspector/tabs/Performance.js +24 -9
  60. package/examples/jsm/inspector/tabs/Settings.js +306 -0
  61. package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
  62. package/examples/jsm/inspector/tabs/Viewer.js +723 -9
  63. package/examples/jsm/inspector/ui/Graph.js +162 -25
  64. package/examples/jsm/inspector/ui/Item.js +92 -13
  65. package/examples/jsm/inspector/ui/List.js +2 -2
  66. package/examples/jsm/inspector/ui/Profiler.js +1991 -44
  67. package/examples/jsm/inspector/ui/Style.js +1943 -543
  68. package/examples/jsm/inspector/ui/Tab.js +226 -5
  69. package/examples/jsm/inspector/ui/Values.js +126 -8
  70. package/examples/jsm/inspector/ui/utils.js +143 -10
  71. package/examples/jsm/interaction/InteractionManager.js +226 -0
  72. package/examples/jsm/libs/basis/README.md +0 -1
  73. package/examples/jsm/libs/demuxer_mp4.js +3 -3
  74. package/examples/jsm/libs/draco/README.md +0 -1
  75. package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
  76. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  77. package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
  78. package/examples/jsm/libs/mikktspace.module.js +34 -9
  79. package/examples/jsm/lighting/ClusteredLighting.js +55 -0
  80. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  81. package/examples/jsm/lighting/LightProbeGrid.js +681 -0
  82. package/examples/jsm/lines/LineMaterial.js +45 -16
  83. package/examples/jsm/lines/LineSegments2.js +8 -0
  84. package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
  85. package/examples/jsm/loaders/3DMLoader.js +6 -5
  86. package/examples/jsm/loaders/3MFLoader.js +2 -2
  87. package/examples/jsm/loaders/AMFLoader.js +2 -2
  88. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  89. package/examples/jsm/loaders/DRACOLoader.js +51 -18
  90. package/examples/jsm/loaders/EXRLoader.js +701 -90
  91. package/examples/jsm/loaders/FBXLoader.js +235 -37
  92. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  93. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  94. package/examples/jsm/loaders/HDRLoader.js +7 -30
  95. package/examples/jsm/loaders/KMZLoader.js +5 -5
  96. package/examples/jsm/loaders/KTX2Loader.js +58 -17
  97. package/examples/jsm/loaders/LDrawLoader.js +49 -58
  98. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  99. package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
  100. package/examples/jsm/loaders/LWOLoader.js +11 -39
  101. package/examples/jsm/loaders/LottieLoader.js +1 -1
  102. package/examples/jsm/loaders/MaterialXLoader.js +31 -9
  103. package/examples/jsm/loaders/NRRDLoader.js +5 -5
  104. package/examples/jsm/loaders/PCDLoader.js +11 -9
  105. package/examples/jsm/loaders/PLYLoader.js +218 -55
  106. package/examples/jsm/loaders/SVGLoader.js +549 -497
  107. package/examples/jsm/loaders/TDSLoader.js +0 -2
  108. package/examples/jsm/loaders/TGALoader.js +0 -2
  109. package/examples/jsm/loaders/TTFLoader.js +1 -1
  110. package/examples/jsm/loaders/USDLoader.js +127 -43
  111. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  112. package/examples/jsm/loaders/VOXLoader.js +660 -117
  113. package/examples/jsm/loaders/VRMLLoader.js +80 -3
  114. package/examples/jsm/loaders/VTKLoader.js +42 -25
  115. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  116. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  117. package/examples/jsm/loaders/usd/USDAParser.js +504 -344
  118. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  119. package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
  120. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  121. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  122. package/examples/jsm/math/Octree.js +131 -1
  123. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  124. package/examples/jsm/misc/RollerCoaster.js +42 -4
  125. package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
  126. package/examples/jsm/misc/Volume.js +2 -3
  127. package/examples/jsm/misc/VolumeSlice.js +0 -1
  128. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  129. package/examples/jsm/objects/GroundedSkybox.js +1 -1
  130. package/examples/jsm/objects/LensflareMesh.js +1 -1
  131. package/examples/jsm/objects/Reflector.js +72 -25
  132. package/examples/jsm/objects/Sky.js +90 -6
  133. package/examples/jsm/objects/SkyMesh.js +150 -16
  134. package/examples/jsm/objects/Water.js +4 -3
  135. package/examples/jsm/objects/Water2.js +5 -3
  136. package/examples/jsm/objects/Water2Mesh.js +1 -1
  137. package/examples/jsm/objects/WaterMesh.js +5 -7
  138. package/examples/jsm/physics/AmmoPhysics.js +27 -15
  139. package/examples/jsm/physics/JoltPhysics.js +10 -6
  140. package/examples/jsm/physics/RapierPhysics.js +36 -7
  141. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  142. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  143. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  144. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  145. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  146. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  147. package/examples/jsm/renderers/Projector.js +246 -28
  148. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  149. package/examples/jsm/shaders/GTAOShader.js +19 -6
  150. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  151. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  152. package/examples/jsm/shaders/SAOShader.js +17 -4
  153. package/examples/jsm/shaders/SSAOShader.js +11 -1
  154. package/examples/jsm/shaders/SSRShader.js +6 -5
  155. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  156. package/examples/jsm/shaders/VignetteShader.js +1 -1
  157. package/examples/jsm/shaders/VolumeShader.js +31 -44
  158. package/examples/jsm/transpiler/AST.js +44 -0
  159. package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
  160. package/examples/jsm/transpiler/Linker.js +1 -1
  161. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  162. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  163. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  164. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  165. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  166. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  167. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  168. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  169. package/examples/jsm/tsl/display/BloomNode.js +75 -25
  170. package/examples/jsm/tsl/display/CRT.js +150 -0
  171. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  172. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  173. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  174. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  175. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  176. package/examples/jsm/tsl/display/FXAANode.js +13 -14
  177. package/examples/jsm/tsl/display/GTAONode.js +40 -17
  178. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  179. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  180. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
  181. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  182. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  183. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  184. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  185. package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
  186. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  187. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
  188. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  189. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  190. package/examples/jsm/tsl/display/SSAAPassNode.js +15 -27
  191. package/examples/jsm/tsl/display/SSGINode.js +96 -62
  192. package/examples/jsm/tsl/display/SSRNode.js +831 -134
  193. package/examples/jsm/tsl/display/SSSNode.js +8 -6
  194. package/examples/jsm/tsl/display/Shape.js +29 -0
  195. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  196. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  197. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  198. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  199. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  200. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  201. package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
  202. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  203. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  204. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  205. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
  206. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  207. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  208. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  209. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  210. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  211. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  212. package/examples/jsm/tsl/math/Bayer.js +53 -3
  213. package/examples/jsm/tsl/math/curlNoise.js +107 -0
  214. package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
  215. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
  216. package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
  217. package/examples/jsm/tsl/utils/RNoise.js +51 -0
  218. package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
  219. package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
  220. package/examples/jsm/utils/ColorUtils.js +76 -0
  221. package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
  222. package/examples/jsm/utils/LDrawUtils.js +1 -1
  223. package/examples/jsm/utils/SceneOptimizer.js +1 -1
  224. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  225. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  226. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  227. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  228. package/examples/jsm/webxr/ARButton.js +1 -1
  229. package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
  230. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
  231. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  232. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  233. package/package.json +28 -34
  234. package/src/Three.Core.js +3 -1
  235. package/src/Three.TSL.js +35 -14
  236. package/src/Three.WebGPU.Nodes.js +5 -0
  237. package/src/Three.WebGPU.js +13 -0
  238. package/src/Three.js +1 -0
  239. package/src/animation/AnimationAction.js +18 -4
  240. package/src/animation/AnimationClip.js +0 -139
  241. package/src/animation/AnimationMixer.js +6 -0
  242. package/src/animation/AnimationUtils.js +1 -12
  243. package/src/animation/KeyframeTrack.js +47 -8
  244. package/src/animation/PropertyBinding.js +2 -2
  245. package/src/animation/PropertyMixer.js +4 -4
  246. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  247. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  248. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  249. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  250. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  251. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  252. package/src/audio/Audio.js +1 -1
  253. package/src/audio/AudioContext.js +2 -2
  254. package/src/audio/AudioListener.js +5 -3
  255. package/src/cameras/Camera.js +34 -4
  256. package/src/cameras/CubeCamera.js +20 -0
  257. package/src/cameras/StereoCamera.js +5 -2
  258. package/src/constants.js +90 -5
  259. package/src/core/BufferAttribute.js +13 -1
  260. package/src/core/BufferGeometry.js +43 -9
  261. package/src/core/Clock.js +7 -0
  262. package/src/core/Object3D.js +69 -11
  263. package/src/core/Raycaster.js +3 -3
  264. package/src/core/RenderTarget.js +19 -6
  265. package/src/extras/PMREMGenerator.js +13 -22
  266. package/src/extras/TextureUtils.js +6 -2
  267. package/src/extras/core/ShapePath.js +149 -160
  268. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  269. package/src/geometries/ExtrudeGeometry.js +2 -2
  270. package/src/geometries/PolyhedronGeometry.js +1 -1
  271. package/src/geometries/SphereGeometry.js +8 -3
  272. package/src/geometries/TorusGeometry.js +8 -3
  273. package/src/helpers/CameraHelper.js +3 -0
  274. package/src/helpers/DirectionalLightHelper.js +6 -1
  275. package/src/helpers/HemisphereLightHelper.js +5 -0
  276. package/src/helpers/PointLightHelper.js +3 -25
  277. package/src/helpers/SpotLightHelper.js +4 -1
  278. package/src/lights/DirectionalLight.js +13 -0
  279. package/src/lights/HemisphereLight.js +10 -0
  280. package/src/lights/Light.js +1 -11
  281. package/src/lights/LightProbe.js +0 -15
  282. package/src/lights/LightShadow.js +15 -6
  283. package/src/lights/PointLight.js +15 -0
  284. package/src/lights/PointLightShadow.js +0 -86
  285. package/src/lights/SpotLight.js +22 -1
  286. package/src/lights/webgpu/IESSpotLight.js +2 -1
  287. package/src/loaders/AudioLoader.js +11 -1
  288. package/src/loaders/Cache.js +28 -0
  289. package/src/loaders/DataTextureLoader.js +75 -42
  290. package/src/loaders/FileLoader.js +2 -3
  291. package/src/loaders/ImageBitmapLoader.js +12 -9
  292. package/src/loaders/Loader.js +6 -0
  293. package/src/loaders/LoadingManager.js +5 -0
  294. package/src/loaders/MaterialLoader.js +37 -266
  295. package/src/loaders/ObjectLoader.js +48 -6
  296. package/src/loaders/nodes/NodeLoader.js +2 -2
  297. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  298. package/src/materials/LineBasicMaterial.js +4 -0
  299. package/src/materials/Material.js +198 -1
  300. package/src/materials/MeshBasicMaterial.js +24 -0
  301. package/src/materials/MeshDepthMaterial.js +10 -0
  302. package/src/materials/MeshDistanceMaterial.js +10 -0
  303. package/src/materials/MeshLambertMaterial.js +49 -1
  304. package/src/materials/MeshMatcapMaterial.js +25 -1
  305. package/src/materials/MeshNormalMaterial.js +9 -1
  306. package/src/materials/MeshPhongMaterial.js +49 -1
  307. package/src/materials/MeshPhysicalMaterial.js +38 -0
  308. package/src/materials/MeshStandardMaterial.js +42 -1
  309. package/src/materials/MeshToonMaterial.js +35 -2
  310. package/src/materials/PointsMaterial.js +7 -0
  311. package/src/materials/ShaderMaterial.js +106 -1
  312. package/src/materials/SpriteMaterial.js +7 -0
  313. package/src/materials/nodes/Line2NodeMaterial.js +380 -297
  314. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  315. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  316. package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
  317. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
  318. package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
  319. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
  320. package/src/materials/nodes/NodeMaterial.js +153 -89
  321. package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
  322. package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
  323. package/src/math/Box3.js +5 -0
  324. package/src/math/FrustumArray.js +103 -133
  325. package/src/math/Interpolant.js +1 -1
  326. package/src/math/Line3.js +6 -5
  327. package/src/math/MathUtils.js +12 -12
  328. package/src/math/Matrix2.js +13 -9
  329. package/src/math/Matrix3.js +24 -9
  330. package/src/math/Matrix4.js +112 -74
  331. package/src/math/Plane.js +4 -3
  332. package/src/math/Quaternion.js +3 -29
  333. package/src/math/Sphere.js +1 -1
  334. package/src/math/Triangle.js +1 -1
  335. package/src/math/Vector2.js +13 -9
  336. package/src/math/Vector3.js +17 -15
  337. package/src/math/Vector4.js +15 -11
  338. package/src/math/interpolants/BezierInterpolant.js +106 -0
  339. package/src/nodes/Nodes.js +86 -71
  340. package/src/nodes/TSL.js +15 -13
  341. package/src/nodes/accessors/Arrays.js +5 -5
  342. package/src/nodes/accessors/Batch.js +108 -0
  343. package/src/nodes/accessors/Bitangent.js +7 -7
  344. package/src/nodes/accessors/BufferAttributeNode.js +120 -17
  345. package/src/nodes/accessors/BufferNode.js +29 -2
  346. package/src/nodes/accessors/Camera.js +149 -28
  347. package/src/nodes/accessors/ClippingNode.js +5 -5
  348. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  349. package/src/nodes/accessors/Instance.js +264 -0
  350. package/src/nodes/accessors/MaterialNode.js +27 -3
  351. package/src/nodes/accessors/MaterialProperties.js +6 -8
  352. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  353. package/src/nodes/accessors/ModelNode.js +1 -1
  354. package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
  355. package/src/nodes/accessors/Normal.js +24 -24
  356. package/src/nodes/accessors/Object3DNode.js +1 -1
  357. package/src/nodes/accessors/Position.js +39 -3
  358. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  359. package/src/nodes/accessors/ReferenceNode.js +9 -8
  360. package/src/nodes/accessors/ReflectVector.js +3 -3
  361. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  362. package/src/nodes/accessors/SceneProperties.js +47 -0
  363. package/src/nodes/accessors/Skinning.js +263 -0
  364. package/src/nodes/accessors/StorageBufferNode.js +16 -27
  365. package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
  366. package/src/nodes/accessors/StorageTextureNode.js +74 -11
  367. package/src/nodes/accessors/Tangent.js +8 -18
  368. package/src/nodes/accessors/Texture3DNode.js +32 -35
  369. package/src/nodes/accessors/TextureNode.js +124 -25
  370. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  371. package/src/nodes/accessors/UserDataNode.js +1 -2
  372. package/src/nodes/accessors/VertexColorNode.js +1 -2
  373. package/src/nodes/code/FunctionCallNode.js +1 -1
  374. package/src/nodes/code/FunctionNode.js +4 -19
  375. package/src/nodes/core/ArrayNode.js +21 -2
  376. package/src/nodes/core/AssignNode.js +3 -3
  377. package/src/nodes/core/AttributeNode.js +3 -3
  378. package/src/nodes/core/BypassNode.js +1 -1
  379. package/src/nodes/core/ContextNode.js +104 -5
  380. package/src/nodes/core/IndexNode.js +2 -1
  381. package/src/nodes/core/InputNode.js +1 -1
  382. package/src/nodes/core/InspectorNode.js +1 -1
  383. package/src/nodes/core/IsolateNode.js +1 -1
  384. package/src/nodes/core/MRTNode.js +55 -4
  385. package/src/nodes/core/Node.js +151 -17
  386. package/src/nodes/core/NodeBuilder.js +479 -101
  387. package/src/nodes/core/NodeError.js +28 -0
  388. package/src/nodes/core/NodeFrame.js +12 -4
  389. package/src/nodes/core/NodeUtils.js +20 -18
  390. package/src/nodes/core/OutputStructNode.js +13 -11
  391. package/src/nodes/core/OverrideContextNode.js +153 -0
  392. package/src/nodes/core/ParameterNode.js +4 -4
  393. package/src/nodes/core/PropertyNode.js +66 -4
  394. package/src/nodes/core/StackNode.js +91 -20
  395. package/src/nodes/core/StackTrace.js +139 -0
  396. package/src/nodes/core/StructNode.js +20 -8
  397. package/src/nodes/core/StructTypeNode.js +17 -23
  398. package/src/nodes/core/SubBuildNode.js +2 -2
  399. package/src/nodes/core/UniformGroupNode.js +36 -6
  400. package/src/nodes/core/UniformNode.js +21 -5
  401. package/src/nodes/core/VarNode.js +56 -23
  402. package/src/nodes/core/VaryingNode.js +14 -21
  403. package/src/nodes/display/BlendModes.js +1 -105
  404. package/src/nodes/display/BumpMapNode.js +6 -1
  405. package/src/nodes/display/ColorAdjustment.js +27 -9
  406. package/src/nodes/display/ColorSpaceNode.js +3 -3
  407. package/src/nodes/display/FrontFacingNode.js +38 -9
  408. package/src/nodes/display/NormalMapNode.js +41 -6
  409. package/src/nodes/display/PassNode.js +157 -56
  410. package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
  411. package/src/nodes/display/RenderOutputNode.js +19 -10
  412. package/src/nodes/display/ScreenNode.js +4 -2
  413. package/src/nodes/display/ToneMappingNode.js +1 -1
  414. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  415. package/src/nodes/display/ViewportDepthNode.js +52 -4
  416. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  417. package/src/nodes/display/ViewportTextureNode.js +39 -11
  418. package/src/nodes/fog/Fog.js +18 -35
  419. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  420. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  421. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  422. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  423. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  424. package/src/nodes/functions/VolumetricLightingModel.js +40 -7
  425. package/src/nodes/geometry/RangeNode.js +5 -3
  426. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  427. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  428. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  429. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  430. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  431. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
  432. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  433. package/src/nodes/lighting/EnvironmentNode.js +30 -5
  434. package/src/nodes/lighting/IESSpotLightNode.js +40 -2
  435. package/src/nodes/lighting/LightingContextNode.js +10 -2
  436. package/src/nodes/lighting/LightsNode.js +97 -65
  437. package/src/nodes/lighting/PointShadowNode.js +166 -148
  438. package/src/nodes/lighting/ShadowFilterNode.js +74 -117
  439. package/src/nodes/lighting/ShadowNode.js +149 -51
  440. package/src/nodes/materialx/lib/mx_noise.js +2 -2
  441. package/src/nodes/math/BitcastNode.js +1 -1
  442. package/src/nodes/math/BitcountNode.js +433 -0
  443. package/src/nodes/math/ConditionalNode.js +6 -6
  444. package/src/nodes/math/MathNode.js +115 -52
  445. package/src/nodes/math/OperatorNode.js +24 -23
  446. package/src/nodes/math/PackFloatNode.js +98 -0
  447. package/src/nodes/math/UnpackFloatNode.js +96 -0
  448. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  449. package/src/nodes/pmrem/PMREMNode.js +34 -3
  450. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  451. package/src/nodes/tsl/TSLBase.js +1 -1
  452. package/src/nodes/tsl/TSLCore.js +99 -33
  453. package/src/nodes/utils/ArrayElementNode.js +14 -1
  454. package/src/nodes/utils/ConvertNode.js +1 -1
  455. package/src/nodes/utils/DebugNode.js +12 -12
  456. package/src/nodes/utils/EquirectUV.js +30 -5
  457. package/src/nodes/utils/EventNode.js +31 -2
  458. package/src/nodes/utils/FlipNode.js +1 -1
  459. package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
  460. package/src/nodes/utils/JoinNode.js +3 -3
  461. package/src/nodes/utils/LoopNode.js +1 -1
  462. package/src/nodes/utils/MemberNode.js +2 -2
  463. package/src/nodes/utils/Packing.js +48 -5
  464. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  465. package/src/nodes/utils/RTTNode.js +41 -25
  466. package/src/nodes/utils/ReflectorNode.js +4 -4
  467. package/src/nodes/utils/Remap.js +48 -0
  468. package/src/nodes/utils/RotateNode.js +1 -1
  469. package/src/nodes/utils/SampleNode.js +1 -1
  470. package/src/nodes/utils/SetNode.js +1 -1
  471. package/src/nodes/utils/SplitNode.js +1 -1
  472. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  473. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  474. package/src/nodes/utils/UVUtils.js +28 -0
  475. package/src/objects/BatchedMesh.js +66 -30
  476. package/src/objects/InstancedMesh.js +19 -3
  477. package/src/objects/Line.js +1 -1
  478. package/src/objects/Mesh.js +1 -1
  479. package/src/objects/Points.js +1 -1
  480. package/src/objects/SkinnedMesh.js +26 -9
  481. package/src/renderers/WebGLRenderer.js +344 -156
  482. package/src/renderers/common/Animation.js +3 -3
  483. package/src/renderers/common/Attributes.js +15 -1
  484. package/src/renderers/common/Backend.js +78 -13
  485. package/src/renderers/common/Background.js +26 -13
  486. package/src/renderers/common/BindGroup.js +1 -16
  487. package/src/renderers/common/Binding.js +11 -0
  488. package/src/renderers/common/Bindings.js +141 -57
  489. package/src/renderers/common/BlendMode.js +143 -0
  490. package/src/renderers/common/Buffer.js +49 -0
  491. package/src/renderers/common/BundleGroup.js +1 -1
  492. package/src/renderers/common/ChainMap.js +30 -6
  493. package/src/renderers/common/ClippingContext.js +10 -2
  494. package/src/renderers/common/ComputePipeline.js +1 -1
  495. package/src/renderers/common/CubeRenderTarget.js +51 -7
  496. package/src/renderers/common/Geometries.js +29 -3
  497. package/src/renderers/common/Info.js +374 -4
  498. package/src/renderers/common/InspectorBase.js +6 -1
  499. package/src/renderers/common/Lighting.js +51 -19
  500. package/src/renderers/common/Pipelines.js +40 -7
  501. package/src/renderers/common/PostProcessing.js +8 -206
  502. package/src/renderers/common/ReadbackBuffer.js +78 -0
  503. package/src/renderers/common/RenderBundle.js +3 -1
  504. package/src/renderers/common/RenderBundles.js +7 -3
  505. package/src/renderers/common/RenderContext.js +16 -0
  506. package/src/renderers/common/RenderContexts.js +33 -49
  507. package/src/renderers/common/RenderList.js +41 -4
  508. package/src/renderers/common/RenderLists.js +2 -1
  509. package/src/renderers/common/RenderObject.js +88 -16
  510. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  511. package/src/renderers/common/RenderObjects.js +21 -5
  512. package/src/renderers/common/RenderPipeline.js +232 -17
  513. package/src/renderers/common/Renderer.js +700 -163
  514. package/src/renderers/common/Sampler.js +16 -48
  515. package/src/renderers/common/StorageBuffer.js +13 -1
  516. package/src/renderers/common/Textures.js +121 -9
  517. package/src/renderers/common/TimestampQueryPool.js +6 -4
  518. package/src/renderers/common/Uniform.js +8 -0
  519. package/src/renderers/common/UniformsGroup.js +84 -1
  520. package/src/renderers/common/XRManager.js +377 -51
  521. package/src/renderers/common/extras/PMREMGenerator.js +40 -61
  522. package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
  523. package/src/renderers/common/nodes/NodeLibrary.js +4 -4
  524. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
  525. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  526. package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
  527. package/src/renderers/shaders/DFGLUTData.js +19 -34
  528. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  529. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  530. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  531. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  532. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  533. package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
  534. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
  535. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  536. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
  537. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
  538. package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
  539. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  540. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  541. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  542. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  543. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +3 -1
  544. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  545. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  546. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
  547. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  548. package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
  549. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  550. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  551. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  552. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  553. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  554. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
  555. package/src/renderers/shaders/ShaderChunk.js +5 -3
  556. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  557. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  558. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
  559. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  560. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  561. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  562. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  563. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  564. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  565. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  566. package/src/renderers/shaders/ShaderLib.js +7 -6
  567. package/src/renderers/shaders/UniformsLib.js +7 -5
  568. package/src/renderers/shaders/UniformsUtils.js +27 -5
  569. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  570. package/src/renderers/webgl/WebGLBackground.js +15 -15
  571. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  572. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  573. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  574. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  575. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  576. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  577. package/src/renderers/webgl/WebGLLights.js +18 -1
  578. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  579. package/src/renderers/webgl/WebGLObjects.js +3 -1
  580. package/src/renderers/webgl/WebGLOutput.js +271 -0
  581. package/src/renderers/webgl/WebGLProgram.js +54 -113
  582. package/src/renderers/webgl/WebGLPrograms.js +74 -55
  583. package/src/renderers/webgl/WebGLRenderLists.js +24 -1
  584. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  585. package/src/renderers/webgl/WebGLShaderCache.js +5 -11
  586. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  587. package/src/renderers/webgl/WebGLState.js +75 -37
  588. package/src/renderers/webgl/WebGLTextures.js +230 -56
  589. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  590. package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
  591. package/src/renderers/webgl/WebGLUtils.js +6 -2
  592. package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
  593. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  594. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
  595. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  596. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  597. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  598. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
  599. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  600. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
  601. package/src/renderers/webgpu/WebGPUBackend.js +733 -302
  602. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  603. package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
  604. package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
  605. package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
  606. package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
  607. package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
  608. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
  609. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
  610. package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
  611. package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
  612. package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
  613. package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
  614. package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
  615. package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
  616. package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
  617. package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
  618. package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
  619. package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
  620. package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
  621. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
  622. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
  623. package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
  624. package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
  625. package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
  626. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
  627. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
  628. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
  629. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
  630. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
  631. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  632. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  633. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
  634. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
  635. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
  636. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
  637. package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
  638. package/src/renderers/webxr/WebXRController.js +12 -0
  639. package/src/renderers/webxr/WebXRManager.js +4 -2
  640. package/src/textures/CubeDepthTexture.js +76 -0
  641. package/src/textures/DepthTexture.js +1 -1
  642. package/src/textures/ExternalTexture.js +0 -3
  643. package/src/textures/HTMLTexture.js +74 -0
  644. package/src/textures/Source.js +2 -2
  645. package/src/textures/Texture.js +16 -5
  646. package/src/utils.js +280 -3
  647. package/examples/fonts/LICENSE +0 -13
  648. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  649. package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
  650. package/examples/fonts/README.md +0 -11
  651. package/examples/fonts/droid/NOTICE +0 -190
  652. package/examples/fonts/droid/README.txt +0 -18
  653. package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
  654. package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
  655. package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
  656. package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
  657. package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
  658. package/examples/fonts/gentilis_bold.typeface.json +0 -1
  659. package/examples/fonts/gentilis_regular.typeface.json +0 -1
  660. package/examples/fonts/helvetiker_bold.typeface.json +0 -1
  661. package/examples/fonts/helvetiker_regular.typeface.json +0 -1
  662. package/examples/fonts/optimer_bold.typeface.json +0 -1
  663. package/examples/fonts/optimer_regular.typeface.json +0 -1
  664. package/examples/fonts/ttf/README.md +0 -9
  665. package/examples/fonts/ttf/kenpixel.ttf +0 -0
  666. package/examples/jsm/libs/ammo.wasm.js +0 -822
  667. package/examples/jsm/libs/ammo.wasm.wasm +0 -0
  668. package/examples/jsm/libs/draco/draco_encoder.js +0 -33
  669. package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
  670. package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
  671. package/examples/jsm/libs/opentype.module.js +0 -14506
  672. package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
  673. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
  674. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  675. package/examples/jsm/lighting/TiledLighting.js +0 -42
  676. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  677. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  678. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  679. package/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
  680. package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
  681. package/src/nodes/accessors/BatchNode.js +0 -163
  682. package/src/nodes/accessors/InstanceNode.js +0 -244
  683. package/src/nodes/accessors/InstancedMeshNode.js +0 -50
  684. package/src/nodes/accessors/SceneNode.js +0 -145
  685. package/src/nodes/accessors/SkinningNode.js +0 -327
  686. package/src/nodes/code/ScriptableNode.js +0 -726
  687. package/src/nodes/code/ScriptableValueNode.js +0 -253
  688. package/src/nodes/display/PosterizeNode.js +0 -65
  689. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  690. package/src/nodes/utils/RemapNode.js +0 -125
  691. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  692. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  693. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -4,17 +4,41 @@ import {
4
4
  import { ColorManagement } from '../../../math/ColorManagement.js';
5
5
 
6
6
  import WebGPUTexturePassUtils from './WebGPUTexturePassUtils.js';
7
+ import { submit } from './WebGPUUtils.js';
8
+ import GPUBufferDescriptor from '../descriptors/GPUBufferDescriptor.js';
9
+ import GPUCommandEncoderDescriptor from '../descriptors/GPUCommandEncoderDescriptor.js';
10
+ import GPUSamplerDescriptor from '../descriptors/GPUSamplerDescriptor.js';
11
+ import GPUTexelCopyTextureInfo from '../descriptors/GPUTexelCopyTextureInfo.js';
12
+ import GPUTexelCopyBufferInfo from '../descriptors/GPUTexelCopyBufferInfo.js';
13
+ import GPUTexelCopyBufferLayout from '../descriptors/GPUTexelCopyBufferLayout.js';
14
+ import GPUCopyExternalImageSourceInfo from '../descriptors/GPUCopyExternalImageSourceInfo.js';
15
+ import GPUCopyExternalImageDestInfo from '../descriptors/GPUCopyExternalImageDestInfo.js';
16
+ import GPUTextureDescriptor from '../descriptors/GPUTextureDescriptor.js';
17
+ import GPUExtent3D from '../descriptors/GPUExtent3D.js';
18
+
19
+ const _bufferDescriptor = new GPUBufferDescriptor();
20
+ const _commandEncoderDescriptor = new GPUCommandEncoderDescriptor();
21
+ const _samplerDescriptor = new GPUSamplerDescriptor();
22
+ const _texelCopyTextureInfo = new GPUTexelCopyTextureInfo();
23
+ const _texelCopyBufferInfo = new GPUTexelCopyBufferInfo();
24
+ const _texelCopyBufferLayout = new GPUTexelCopyBufferLayout();
25
+ const _copyExternalImageSourceInfo = new GPUCopyExternalImageSourceInfo();
26
+ const _copyExternalImageDestInfo = new GPUCopyExternalImageDestInfo();
27
+ const _textureDescriptor = new GPUTextureDescriptor();
28
+ const _extent3D = new GPUExtent3D();
7
29
 
8
30
  import {
9
31
  ByteType, ShortType,
10
- NearestFilter, NearestMipmapNearestFilter, NearestMipmapLinearFilter,
32
+ NearestFilter, NearestMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter,
11
33
  RepeatWrapping, MirroredRepeatWrapping,
12
34
  RGB_ETC2_Format, RGBA_ETC2_EAC_Format,
13
35
  RGBAFormat, RGBFormat, RedFormat, RGFormat, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, UnsignedByteType, FloatType, HalfFloatType, SRGBTransfer, DepthFormat, DepthStencilFormat,
14
36
  RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format,
15
37
  RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, UnsignedIntType, UnsignedShortType, UnsignedInt248Type, UnsignedInt5999Type,
16
38
  NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, IntType, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat,
17
- UnsignedInt101111Type, RGBA_BPTC_Format, RGB_ETC1_Format, RGB_S3TC_DXT1_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format
39
+ UnsignedInt101111Type, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RGB_ETC1_Format, RGB_S3TC_DXT1_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format,
40
+ SIGNED_RED_GREEN_RGTC2_Format, R11_EAC_Format, SIGNED_R11_EAC_Format, RG11_EAC_Format, SIGNED_RG11_EAC_Format,
41
+ Compatibility
18
42
  } from '../../../constants.js';
19
43
  import { CubeTexture } from '../../../textures/CubeTexture.js';
20
44
  import { Texture } from '../../../textures/Texture.js';
@@ -33,6 +57,32 @@ const _compareToWebGPU = {
33
57
 
34
58
  const _flipMap = [ 0, 1, 3, 2, 4, 5 ];
35
59
 
60
+ function writeTextureLayer( device, textureGPU, mipLevel, layerIndex, mipmap, bytesPerImage, bytesPerRow, rowsPerImage, textureWidth, textureHeight ) {
61
+
62
+ _texelCopyTextureInfo.texture = textureGPU;
63
+ _texelCopyTextureInfo.mipLevel = mipLevel;
64
+ _texelCopyTextureInfo.origin.z = layerIndex;
65
+
66
+ _texelCopyBufferLayout.offset = layerIndex * bytesPerImage;
67
+ _texelCopyBufferLayout.bytesPerRow = bytesPerRow;
68
+ _texelCopyBufferLayout.rowsPerImage = rowsPerImage;
69
+
70
+ _extent3D.width = textureWidth;
71
+ _extent3D.height = textureHeight;
72
+
73
+ device.queue.writeTexture(
74
+ _texelCopyTextureInfo,
75
+ mipmap.data,
76
+ _texelCopyBufferLayout,
77
+ _extent3D
78
+ );
79
+
80
+ _texelCopyTextureInfo.reset();
81
+ _texelCopyBufferLayout.reset();
82
+ _extent3D.reset();
83
+
84
+ }
85
+
36
86
  /**
37
87
  * A WebGPU backend utility module for managing textures.
38
88
  *
@@ -98,46 +148,57 @@ class WebGPUTextureUtils {
98
148
  /**
99
149
  * Creates a GPU sampler for the given texture.
100
150
  *
101
- * @param {Texture} texture - The texture to create the sampler for.
151
+ * @param {Sampler} binding - The sampler binding to update.
102
152
  * @return {string} The current sampler key.
103
153
  */
104
- updateSampler( texture ) {
154
+ updateSampler( binding ) {
105
155
 
106
156
  const backend = this.backend;
157
+ const texture = binding.texture;
158
+ const textureNode = binding.textureNode;
107
159
 
108
160
  const samplerKey = texture.minFilter + '-' + texture.magFilter + '-' +
109
161
  texture.wrapS + '-' + texture.wrapT + '-' + ( texture.wrapR || '0' ) + '-' +
110
- texture.anisotropy + '-' + ( texture.compareFunction || 0 );
162
+ texture.anisotropy + '-' + ( texture.isDepthTexture === true ? 1 : 0 ) + '-' +
163
+ ( texture.compareFunction !== null && textureNode.compareNode !== null ? texture.compareFunction : 0 );
111
164
 
112
165
  let samplerData = this._samplerCache.get( samplerKey );
113
166
 
114
167
  if ( samplerData === undefined ) {
115
168
 
116
- const samplerDescriptorGPU = {
117
- addressModeU: this._convertAddressMode( texture.wrapS ),
118
- addressModeV: this._convertAddressMode( texture.wrapT ),
119
- addressModeW: this._convertAddressMode( texture.wrapR ),
120
- magFilter: this._convertFilterMode( texture.magFilter ),
121
- minFilter: this._convertFilterMode( texture.minFilter ),
122
- mipmapFilter: this._convertFilterMode( texture.minFilter ),
123
- maxAnisotropy: 1
124
- };
169
+ _samplerDescriptor.addressModeU = this._convertAddressMode( texture.wrapS );
170
+ _samplerDescriptor.addressModeV = this._convertAddressMode( texture.wrapT );
171
+ _samplerDescriptor.addressModeW = this._convertAddressMode( texture.wrapR );
172
+ _samplerDescriptor.magFilter = this._convertFilterMode( texture.magFilter );
173
+ _samplerDescriptor.minFilter = this._convertFilterMode( texture.minFilter );
174
+ _samplerDescriptor.mipmapFilter = this._convertMipmapFilterMode( texture.minFilter );
175
+
176
+ // Depth textures without compare function must use non-filtering (nearest) sampling
177
+ if ( texture.isDepthTexture && ( texture.compareFunction === null || textureNode.compareNode === null ) ) {
178
+
179
+ _samplerDescriptor.magFilter = GPUFilterMode.Nearest;
180
+ _samplerDescriptor.minFilter = GPUFilterMode.Nearest;
181
+ _samplerDescriptor.mipmapFilter = GPUFilterMode.Nearest;
182
+
183
+ }
125
184
 
126
185
  // anisotropy can only be used when all filter modes are set to linear.
127
186
 
128
- if ( samplerDescriptorGPU.magFilter === GPUFilterMode.Linear && samplerDescriptorGPU.minFilter === GPUFilterMode.Linear && samplerDescriptorGPU.mipmapFilter === GPUFilterMode.Linear ) {
187
+ if ( _samplerDescriptor.magFilter === GPUFilterMode.Linear && _samplerDescriptor.minFilter === GPUFilterMode.Linear && _samplerDescriptor.mipmapFilter === GPUFilterMode.Linear ) {
129
188
 
130
- samplerDescriptorGPU.maxAnisotropy = texture.anisotropy;
189
+ _samplerDescriptor.maxAnisotropy = texture.anisotropy;
131
190
 
132
191
  }
133
192
 
134
- if ( texture.isDepthTexture && texture.compareFunction !== null ) {
193
+ if ( texture.isDepthTexture && texture.compareFunction !== null && textureNode.compareNode !== null && backend.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {
135
194
 
136
- samplerDescriptorGPU.compare = _compareToWebGPU[ texture.compareFunction ];
195
+ _samplerDescriptor.compare = _compareToWebGPU[ texture.compareFunction ];
137
196
 
138
197
  }
139
198
 
140
- const sampler = backend.device.createSampler( samplerDescriptorGPU );
199
+ const sampler = backend.device.createSampler( _samplerDescriptor );
200
+
201
+ _samplerDescriptor.reset();
141
202
 
142
203
  samplerData = { sampler, usedTimes: 0 };
143
204
 
@@ -145,35 +206,62 @@ class WebGPUTextureUtils {
145
206
 
146
207
  }
147
208
 
148
- const textureData = backend.get( texture );
209
+ const bindingData = backend.get( binding );
149
210
 
150
- if ( textureData.sampler !== samplerData.sampler ) {
211
+ if ( bindingData.sampler !== samplerData.sampler ) {
151
212
 
152
- // check if previous sampler is unused so it can be deleted
213
+ // release the previous sampler (if any) so it can be deleted when unused
153
214
 
154
- if ( textureData.sampler !== undefined ) {
215
+ this._releaseSampler( bindingData );
155
216
 
156
- const oldSamplerData = this._samplerCache.get( textureData.samplerKey );
157
- oldSamplerData.usedTimes --;
217
+ // update to new sampler data
158
218
 
159
- if ( oldSamplerData.usedTimes === 0 ) {
219
+ bindingData.samplerKey = samplerKey;
220
+ bindingData.sampler = samplerData.sampler;
160
221
 
161
- this._samplerCache.delete( textureData.samplerKey );
222
+ samplerData.usedTimes ++;
162
223
 
163
- }
224
+ }
164
225
 
165
- }
226
+ return samplerKey;
166
227
 
167
- // update to new sampler data
228
+ }
229
+
230
+ /**
231
+ * Frees the GPU sampler referenced by the given sampler binding.
232
+ *
233
+ * @param {Sampler} binding - The sampler binding to free.
234
+ */
235
+ destroySampler( binding ) {
168
236
 
169
- textureData.samplerKey = samplerKey;
170
- textureData.sampler = samplerData.sampler;
237
+ this._releaseSampler( this.backend.get( binding ) );
171
238
 
172
- samplerData.usedTimes ++;
239
+ }
173
240
 
174
- }
241
+ /**
242
+ * Releases the pooled sampler referenced by the given binding data and
243
+ * removes it from the cache when no binding references it anymore.
244
+ *
245
+ * @private
246
+ * @param {Object} bindingData - The binding data holding the sampler reference.
247
+ */
248
+ _releaseSampler( bindingData ) {
175
249
 
176
- return samplerKey;
250
+ if ( bindingData.sampler !== undefined ) {
251
+
252
+ const samplerData = this._samplerCache.get( bindingData.samplerKey );
253
+ samplerData.usedTimes --;
254
+
255
+ if ( samplerData.usedTimes === 0 ) {
256
+
257
+ this._samplerCache.delete( bindingData.samplerKey );
258
+
259
+ }
260
+
261
+ bindingData.sampler = undefined;
262
+ bindingData.samplerKey = undefined;
263
+
264
+ }
177
265
 
178
266
  }
179
267
 
@@ -187,7 +275,7 @@ class WebGPUTextureUtils {
187
275
 
188
276
  let textureGPU;
189
277
 
190
- const format = getFormat( texture );
278
+ const format = getFormat( texture, this.backend.device );
191
279
 
192
280
  if ( texture.isCubeTexture ) {
193
281
 
@@ -216,7 +304,14 @@ class WebGPUTextureUtils {
216
304
 
217
305
  if ( textureData.initialized ) {
218
306
 
219
- throw new Error( 'WebGPUTextureUtils: Texture already initialized.' );
307
+ // Skip creation for external XR textures - they are already set up
308
+ if ( textureData.externalTexture === true ) {
309
+
310
+ return;
311
+
312
+ }
313
+
314
+ throw new Error( 'THREE.WebGPUTextureUtils: Texture already initialized.' );
220
315
 
221
316
  }
222
317
 
@@ -270,19 +365,16 @@ class WebGPUTextureUtils {
270
365
 
271
366
  }
272
367
 
273
- const textureDescriptorGPU = {
274
- label: texture.name,
275
- size: {
276
- width: width,
277
- height: height,
278
- depthOrArrayLayers: depth,
279
- },
280
- mipLevelCount: levels,
281
- sampleCount: primarySamples,
282
- dimension: dimension,
283
- format: format,
284
- usage: usage
285
- };
368
+ const textureDescriptorGPU = new GPUTextureDescriptor();
369
+ textureDescriptorGPU.label = texture.name;
370
+ textureDescriptorGPU.size.width = width;
371
+ textureDescriptorGPU.size.height = height;
372
+ textureDescriptorGPU.size.depthOrArrayLayers = depth;
373
+ textureDescriptorGPU.mipLevelCount = levels;
374
+ textureDescriptorGPU.sampleCount = primarySamples;
375
+ textureDescriptorGPU.dimension = dimension;
376
+ textureDescriptorGPU.format = format;
377
+ textureDescriptorGPU.usage = usage;
286
378
 
287
379
  // texture creation
288
380
 
@@ -301,7 +393,17 @@ class WebGPUTextureUtils {
301
393
 
302
394
  }
303
395
 
304
- textureData.texture = backend.device.createTexture( textureDescriptorGPU );
396
+ try {
397
+
398
+ textureData.texture = backend.device.createTexture( textureDescriptorGPU );
399
+
400
+ } catch ( e ) {
401
+
402
+ warn( 'WebGPURenderer: Failed to create texture with descriptor:', textureDescriptorGPU );
403
+ this.createDefaultTexture( texture );
404
+ return;
405
+
406
+ }
305
407
 
306
408
  if ( isMSAA ) {
307
409
 
@@ -332,7 +434,7 @@ class WebGPUTextureUtils {
332
434
  const backend = this.backend;
333
435
  const textureData = backend.get( texture );
334
436
 
335
- if ( textureData.texture !== undefined && isDefaultTexture === false ) textureData.texture.destroy();
437
+ if ( textureData.texture !== undefined && isDefaultTexture === false && texture.isExternalTexture !== true ) textureData.texture.destroy();
336
438
 
337
439
  if ( textureData.msaaTexture !== undefined ) textureData.msaaTexture.destroy();
338
440
 
@@ -350,25 +452,7 @@ class WebGPUTextureUtils {
350
452
 
351
453
  const textureData = this.backend.get( texture );
352
454
 
353
- if ( texture.isCubeTexture ) {
354
-
355
- for ( let i = 0; i < 6; i ++ ) {
356
-
357
- this._generateMipmaps( textureData.texture, textureData.textureDescriptorGPU, i, encoder );
358
-
359
- }
360
-
361
- } else {
362
-
363
- const depth = texture.image.depth || 1;
364
-
365
- for ( let i = 0; i < depth; i ++ ) {
366
-
367
- this._generateMipmaps( textureData.texture, textureData.textureDescriptorGPU, i, encoder );
368
-
369
- }
370
-
371
- }
455
+ this._generateMipmaps( textureData.texture, encoder );
372
456
 
373
457
  }
374
458
 
@@ -400,17 +484,16 @@ class WebGPUTextureUtils {
400
484
 
401
485
  if ( colorBuffer ) colorBuffer.destroy();
402
486
 
403
- colorBuffer = backend.device.createTexture( {
404
- label: 'colorBuffer',
405
- size: {
406
- width: width,
407
- height: height,
408
- depthOrArrayLayers: 1
409
- },
410
- sampleCount: backend.utils.getSampleCount( backend.renderer.currentSamples ),
411
- format: backend.utils.getPreferredCanvasFormat(),
412
- usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC
413
- } );
487
+ _textureDescriptor.label = 'colorBuffer';
488
+ _textureDescriptor.size.width = width;
489
+ _textureDescriptor.size.height = height;
490
+ _textureDescriptor.sampleCount = backend.utils.getSampleCount( backend.renderer.currentSamples );
491
+ _textureDescriptor.format = backend.utils.getPreferredCanvasFormat();
492
+ _textureDescriptor.usage = GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC;
493
+
494
+ colorBuffer = backend.device.createTexture( _textureDescriptor );
495
+
496
+ _textureDescriptor.reset();
414
497
 
415
498
  //
416
499
 
@@ -460,12 +543,12 @@ class WebGPUTextureUtils {
460
543
  if ( stencil ) {
461
544
 
462
545
  format = DepthStencilFormat;
463
- type = UnsignedInt248Type;
546
+ type = backend.renderer.reversedDepthBuffer === true ? FloatType : UnsignedInt248Type;
464
547
 
465
548
  } else if ( depth ) {
466
549
 
467
550
  format = DepthFormat;
468
- type = UnsignedIntType;
551
+ type = backend.renderer.reversedDepthBuffer === true ? FloatType : UnsignedIntType;
469
552
 
470
553
  }
471
554
 
@@ -535,20 +618,94 @@ class WebGPUTextureUtils {
535
618
 
536
619
  } else if ( texture.isArrayTexture || texture.isDataArrayTexture || texture.isData3DTexture ) {
537
620
 
538
- for ( let i = 0; i < options.image.depth; i ++ ) {
621
+ if ( texture.layerUpdates && texture.layerUpdates.size > 0 ) {
539
622
 
540
- this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, i, texture.flipY, i );
623
+ for ( const layerIndex of texture.layerUpdates ) {
624
+
625
+ this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, layerIndex, texture.flipY, layerIndex );
626
+
627
+ }
628
+
629
+ texture.clearLayerUpdates();
630
+
631
+ } else {
632
+
633
+ for ( let i = 0; i < options.image.depth; i ++ ) {
634
+
635
+ this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, i, texture.flipY, i );
636
+
637
+ }
541
638
 
542
639
  }
543
640
 
544
641
  } else if ( texture.isCompressedTexture || texture.isCompressedArrayTexture ) {
545
642
 
546
- this._copyCompressedBufferToTexture( texture.mipmaps, textureData.texture, textureDescriptorGPU );
643
+ if ( texture.isCompressedArrayTexture && texture.layerUpdates.size > 0 ) {
644
+
645
+ this._copyCompressedBufferToTexture( texture.mipmaps, textureData.texture, textureDescriptorGPU, texture.layerUpdates );
646
+
647
+ texture.clearLayerUpdates();
648
+
649
+ } else {
650
+
651
+ this._copyCompressedBufferToTexture( texture.mipmaps, textureData.texture, textureDescriptorGPU );
652
+
653
+ }
547
654
 
548
655
  } else if ( texture.isCubeTexture ) {
549
656
 
550
657
  this._copyCubeMapToTexture( texture, textureData.texture, textureDescriptorGPU );
551
658
 
659
+ } else if ( texture.isHTMLTexture ) {
660
+
661
+ const device = this.backend.device;
662
+ const canvas = this.backend.renderer.domElement;
663
+ const image = texture.image;
664
+
665
+ if ( typeof device.queue.copyElementImageToTexture !== 'function' ) return;
666
+
667
+ // Skip the first frame — the element needs a paint record first.
668
+ if ( ! textureData.hasPaintCallback ) {
669
+
670
+ textureData.hasPaintCallback = true;
671
+ canvas.requestPaint();
672
+ return;
673
+
674
+ }
675
+
676
+ const width = textureDescriptorGPU.size.width;
677
+ const height = textureDescriptorGPU.size.height;
678
+
679
+ if ( device.queue.copyElementImageToTexture.length === 2 ) {
680
+
681
+ // Chrome 150+
682
+
683
+ device.queue.copyElementImageToTexture(
684
+ { source: image },
685
+ {
686
+ destination: { texture: textureData.texture },
687
+ width: width,
688
+ height: height
689
+ }
690
+ );
691
+
692
+ } else {
693
+
694
+ // Chrome 138 - 149
695
+
696
+ device.queue.copyElementImageToTexture(
697
+ image, width, height,
698
+ { texture: textureData.texture }
699
+ );
700
+
701
+ }
702
+
703
+ if ( texture.flipY ) {
704
+
705
+ this._flipY( textureData.texture, textureDescriptorGPU );
706
+
707
+ }
708
+
552
709
  } else {
553
710
 
554
711
  if ( mipmaps.length > 0 ) {
@@ -600,38 +757,45 @@ class WebGPUTextureUtils {
600
757
  let bytesPerRow = width * bytesPerTexel;
601
758
  bytesPerRow = Math.ceil( bytesPerRow / 256 ) * 256; // Align to 256 bytes
602
759
 
603
- const readBuffer = device.createBuffer(
604
- {
605
- size: ( ( height - 1 ) * bytesPerRow ) + ( width * bytesPerTexel ), // see https://github.com/mrdoob/three.js/issues/31658#issuecomment-3229442010
606
- usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ
607
- }
608
- );
760
+ _bufferDescriptor.size = ( ( height - 1 ) * bytesPerRow ) + ( width * bytesPerTexel ); // see https://github.com/mrdoob/three.js/issues/31658#issuecomment-3229442010
761
+ _bufferDescriptor.usage = GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ;
609
762
 
610
- const encoder = device.createCommandEncoder();
763
+ const readBuffer = device.createBuffer( _bufferDescriptor );
611
764
 
612
- encoder.copyTextureToBuffer(
613
- {
614
- texture: textureGPU,
615
- origin: { x, y, z: faceIndex },
616
- },
617
- {
618
- buffer: readBuffer,
619
- bytesPerRow: bytesPerRow
620
- },
621
- {
622
- width: width,
623
- height: height
624
- }
765
+ _bufferDescriptor.reset();
766
+
767
+ const encoder = device.createCommandEncoder( _commandEncoderDescriptor );
768
+
769
+ _texelCopyTextureInfo.texture = textureGPU;
770
+ _texelCopyTextureInfo.origin.x = x;
771
+ _texelCopyTextureInfo.origin.y = y;
772
+ _texelCopyTextureInfo.origin.z = faceIndex;
773
+
774
+ _texelCopyBufferInfo.buffer = readBuffer;
775
+ _texelCopyBufferInfo.bytesPerRow = bytesPerRow;
776
+
777
+ _extent3D.width = width;
778
+ _extent3D.height = height;
625
779
 
780
+ encoder.copyTextureToBuffer(
781
+ _texelCopyTextureInfo,
782
+ _texelCopyBufferInfo,
783
+ _extent3D
626
784
  );
627
785
 
786
+ _texelCopyTextureInfo.reset();
787
+ _texelCopyBufferInfo.reset();
788
+ _extent3D.reset();
789
+
628
790
  const typedArrayType = this._getTypedArrayType( format );
629
791
 
630
- device.queue.submit( [ encoder.finish() ] );
792
+ submit( device, encoder.finish() );
631
793
 
632
794
  await readBuffer.mapAsync( GPUMapMode.READ );
633
795
 
634
- const buffer = readBuffer.getMappedRange();
796
+ const buffer = readBuffer.getMappedRange().slice();
797
+
798
+ readBuffer.destroy();
635
799
 
636
800
  return new typedArrayType( buffer );
637
801
 
@@ -682,7 +846,7 @@ class WebGPUTextureUtils {
682
846
  */
683
847
  _getDefaultCubeTextureGPU( format ) {
684
848
 
685
- let defaultCubeTexture = this.defaultTexture[ format ];
849
+ let defaultCubeTexture = this.defaultCubeTexture[ format ];
686
850
 
687
851
  if ( defaultCubeTexture === undefined ) {
688
852
 
@@ -770,21 +934,36 @@ class WebGPUTextureUtils {
770
934
  const width = ( mipLevel > 0 ) ? image.width : textureDescriptorGPU.size.width;
771
935
  const height = ( mipLevel > 0 ) ? image.height : textureDescriptorGPU.size.height;
772
936
 
773
- device.queue.copyExternalImageToTexture(
774
- {
775
- source: image,
776
- flipY: flipY
777
- }, {
778
- texture: textureGPU,
779
- mipLevel: mipLevel,
780
- origin: { x: 0, y: 0, z: originDepth },
781
- premultipliedAlpha: premultiplyAlpha
782
- }, {
783
- width: width,
784
- height: height,
785
- depthOrArrayLayers: 1
786
- }
787
- );
937
+ _copyExternalImageSourceInfo.source = image;
938
+ _copyExternalImageSourceInfo.flipY = flipY;
939
+
940
+ _copyExternalImageDestInfo.texture = textureGPU;
941
+ _copyExternalImageDestInfo.mipLevel = mipLevel;
942
+ _copyExternalImageDestInfo.origin.z = originDepth;
943
+ _copyExternalImageDestInfo.premultipliedAlpha = premultiplyAlpha;
944
+
945
+ _extent3D.width = width;
946
+ _extent3D.height = height;
947
+
948
+ try {
949
+
950
+ device.queue.copyExternalImageToTexture(
951
+ _copyExternalImageSourceInfo,
952
+ _copyExternalImageDestInfo,
953
+ _extent3D
954
+ );
955
+
956
+ // try/catch has been added to fix bad video frame data on certain devices, see #32391
957
+
958
+ } catch ( _ ) {
959
+
960
+ } finally {
961
+
962
+ _copyExternalImageSourceInfo.reset();
963
+ _copyExternalImageDestInfo.reset();
964
+ _extent3D.reset();
965
+
966
+ }
788
967
 
789
968
  }
790
969
 
@@ -813,13 +992,11 @@ class WebGPUTextureUtils {
813
992
  *
814
993
  * @private
815
994
  * @param {GPUTexture} textureGPU - The GPU texture object.
816
- * @param {Object} textureDescriptorGPU - The texture descriptor.
817
- * @param {number} [baseArrayLayer=0] - The index of the first array layer accessible to the texture view.
818
995
  * @param {?GPUCommandEncoder} [encoder=null] - An optional command encoder used to generate mipmaps.
819
996
  */
820
- _generateMipmaps( textureGPU, textureDescriptorGPU, baseArrayLayer = 0, encoder = null ) {
997
+ _generateMipmaps( textureGPU, encoder = null ) {
821
998
 
822
- this._getPassUtils().generateMipmaps( textureGPU, textureDescriptorGPU, baseArrayLayer, encoder );
999
+ this._getPassUtils().generateMipmaps( textureGPU, encoder );
823
1000
 
824
1001
  }
825
1002
 
@@ -861,22 +1038,26 @@ class WebGPUTextureUtils {
861
1038
  const bytesPerTexel = this._getBytesPerTexel( textureDescriptorGPU.format );
862
1039
  const bytesPerRow = image.width * bytesPerTexel;
863
1040
 
1041
+ _texelCopyTextureInfo.texture = textureGPU;
1042
+ _texelCopyTextureInfo.mipLevel = mipLevel;
1043
+ _texelCopyTextureInfo.origin.z = originDepth;
1044
+
1045
+ _texelCopyBufferLayout.offset = image.width * image.height * bytesPerTexel * depth;
1046
+ _texelCopyBufferLayout.bytesPerRow = bytesPerRow;
1047
+
1048
+ _extent3D.width = image.width;
1049
+ _extent3D.height = image.height;
1050
+
864
1051
  device.queue.writeTexture(
865
- {
866
- texture: textureGPU,
867
- mipLevel: mipLevel,
868
- origin: { x: 0, y: 0, z: originDepth }
869
- },
1052
+ _texelCopyTextureInfo,
870
1053
  data,
871
- {
872
- offset: image.width * image.height * bytesPerTexel * depth,
873
- bytesPerRow
874
- },
875
- {
876
- width: image.width,
877
- height: image.height,
878
- depthOrArrayLayers: 1
879
- } );
1054
+ _texelCopyBufferLayout,
1055
+ _extent3D
1056
+ );
1057
+
1058
+ _texelCopyTextureInfo.reset();
1059
+ _texelCopyBufferLayout.reset();
1060
+ _extent3D.reset();
880
1061
 
881
1062
  if ( flipY === true ) {
882
1063
 
@@ -893,8 +1074,9 @@ class WebGPUTextureUtils {
893
1074
  * @param {Array<Object>} mipmaps - An array with mipmap data.
894
1075
  * @param {GPUTexture} textureGPU - The GPU texture.
895
1076
  * @param {Object} textureDescriptorGPU - The GPU texture descriptor.
1077
+ * @param {?Set<number>} [layerUpdates=null] - The layer indices to update.
896
1078
  */
897
- _copyCompressedBufferToTexture( mipmaps, textureGPU, textureDescriptorGPU ) {
1079
+ _copyCompressedBufferToTexture( mipmaps, textureGPU, textureDescriptorGPU, layerUpdates = null ) {
898
1080
 
899
1081
  // @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()
900
1082
 
@@ -902,6 +1084,7 @@ class WebGPUTextureUtils {
902
1084
 
903
1085
  const blockData = this._getBlockData( textureDescriptorGPU.format );
904
1086
  const isArrayTexture = textureDescriptorGPU.size.depthOrArrayLayers > 1;
1087
+ const activeLayerUpdates = layerUpdates && layerUpdates.size > 0 ? layerUpdates : null;
905
1088
 
906
1089
  for ( let i = 0; i < mipmaps.length; i ++ ) {
907
1090
 
@@ -912,28 +1095,26 @@ class WebGPUTextureUtils {
912
1095
  const depth = isArrayTexture ? textureDescriptorGPU.size.depthOrArrayLayers : 1;
913
1096
 
914
1097
  const bytesPerRow = Math.ceil( width / blockData.width ) * blockData.byteLength;
915
- const bytesPerImage = bytesPerRow * Math.ceil( height / blockData.height );
1098
+ const rowsPerImage = Math.ceil( height / blockData.height );
1099
+ const bytesPerImage = bytesPerRow * rowsPerImage;
1100
+ const textureWidth = Math.ceil( width / blockData.width ) * blockData.width;
1101
+ const textureHeight = rowsPerImage * blockData.height;
916
1102
 
917
- for ( let j = 0; j < depth; j ++ ) {
1103
+ if ( activeLayerUpdates !== null ) {
918
1104
 
919
- device.queue.writeTexture(
920
- {
921
- texture: textureGPU,
922
- mipLevel: i,
923
- origin: { x: 0, y: 0, z: j }
924
- },
925
- mipmap.data,
926
- {
927
- offset: j * bytesPerImage,
928
- bytesPerRow,
929
- rowsPerImage: Math.ceil( height / blockData.height )
930
- },
931
- {
932
- width: Math.ceil( width / blockData.width ) * blockData.width,
933
- height: Math.ceil( height / blockData.height ) * blockData.height,
934
- depthOrArrayLayers: 1
935
- }
936
- );
1105
+ for ( const layerIndex of activeLayerUpdates ) {
1106
+
1107
+ writeTextureLayer( device, textureGPU, i, layerIndex, mipmap, bytesPerImage, bytesPerRow, rowsPerImage, textureWidth, textureHeight );
1108
+
1109
+ }
1110
+
1111
+ } else {
1112
+
1113
+ for ( let layerIndex = 0; layerIndex < depth; layerIndex ++ ) {
1114
+
1115
+ writeTextureLayer( device, textureGPU, i, layerIndex, mipmap, bytesPerImage, bytesPerRow, rowsPerImage, textureWidth, textureHeight );
1116
+
1117
+ }
937
1118
 
938
1119
  }
939
1120
 
@@ -1030,6 +1211,27 @@ class WebGPUTextureUtils {
1030
1211
 
1031
1212
  }
1032
1213
 
1214
+ /**
1215
+ * Converts the three.js filter constants to a GPU mipmap filter constant.
1216
+ * Unlike `_convertFilterMode`, this extracts the between-mip-level filtering
1217
+ * axis from the combined three.js constant rather than the within-level axis.
1218
+ *
1219
+ * @private
1220
+ * @param {number} value - The three.js constant defining a filter mode.
1221
+ * @return {string} The GPU mipmap filter mode.
1222
+ */
1223
+ _convertMipmapFilterMode( value ) {
1224
+
1225
+ if ( value === NearestMipmapLinearFilter || value === LinearMipmapLinearFilter ) {
1226
+
1227
+ return GPUFilterMode.Linear;
1228
+
1229
+ }
1230
+
1231
+ return GPUFilterMode.Nearest;
1232
+
1233
+ }
1234
+
1033
1235
  /**
1034
1236
  * Returns the bytes-per-texel value for the given GPU texture format.
1035
1237
  *
@@ -1052,7 +1254,9 @@ class WebGPUTextureUtils {
1052
1254
  format === GPUTextureFormat.RG8Unorm ||
1053
1255
  format === GPUTextureFormat.RG8Snorm ||
1054
1256
  format === GPUTextureFormat.RG8Uint ||
1055
- format === GPUTextureFormat.RG8Sint ) return 2;
1257
+ format === GPUTextureFormat.RG8Sint ||
1258
+ format === GPUTextureFormat.R16Unorm ||
1259
+ format === GPUTextureFormat.R16Snorm ) return 2;
1056
1260
 
1057
1261
  // 32-bit formats
1058
1262
  if ( format === GPUTextureFormat.R32Uint ||
@@ -1068,6 +1272,8 @@ class WebGPUTextureUtils {
1068
1272
  format === GPUTextureFormat.RGBA8Sint ||
1069
1273
  format === GPUTextureFormat.BGRA8Unorm ||
1070
1274
  format === GPUTextureFormat.BGRA8UnormSRGB ||
1275
+ format === GPUTextureFormat.RG16Unorm ||
1276
+ format === GPUTextureFormat.RG16Snorm ||
1071
1277
  // Packed 32-bit formats
1072
1278
  format === GPUTextureFormat.RGB9E5UFloat ||
1073
1279
  format === GPUTextureFormat.RGB10A2Unorm ||
@@ -1083,7 +1289,9 @@ class WebGPUTextureUtils {
1083
1289
  format === GPUTextureFormat.RG32Float ||
1084
1290
  format === GPUTextureFormat.RGBA16Uint ||
1085
1291
  format === GPUTextureFormat.RGBA16Sint ||
1086
- format === GPUTextureFormat.RGBA16Float ) return 8;
1292
+ format === GPUTextureFormat.RGBA16Float ||
1293
+ format === GPUTextureFormat.RGBA16Unorm ||
1294
+ format === GPUTextureFormat.RGBA16Snorm ) return 8;
1087
1295
 
1088
1296
  // 128-bit formats
1089
1297
  if ( format === GPUTextureFormat.RGBA32Uint ||
@@ -1126,6 +1334,12 @@ class WebGPUTextureUtils {
1126
1334
  if ( format === GPUTextureFormat.RG16Float ) return Uint16Array;
1127
1335
  if ( format === GPUTextureFormat.RGBA16Float ) return Uint16Array;
1128
1336
 
1337
+ if ( format === GPUTextureFormat.R16Unorm ) return Uint16Array;
1338
+ if ( format === GPUTextureFormat.R16Snorm ) return Int16Array;
1339
+ if ( format === GPUTextureFormat.RG16Unorm ) return Uint16Array;
1340
+ if ( format === GPUTextureFormat.RG16Snorm ) return Int16Array;
1341
+ if ( format === GPUTextureFormat.RGBA16Unorm ) return Uint16Array;
1342
+ if ( format === GPUTextureFormat.RGBA16Snorm ) return Int16Array;
1129
1343
 
1130
1344
  if ( format === GPUTextureFormat.R32Uint ) return Uint32Array;
1131
1345
  if ( format === GPUTextureFormat.R32Sint ) return Int32Array;
@@ -1180,19 +1394,33 @@ class WebGPUTextureUtils {
1180
1394
  * Returns the GPU format for the given texture.
1181
1395
  *
1182
1396
  * @param {Texture} texture - The texture.
1183
- * @param {?GPUDevice} [device=null] - The GPU device which is used for feature detection.
1184
- * It is not necessary to apply the device for most formats.
1397
+ * @param {GPUDevice} [device] - The GPU device which is used for feature detection.
1185
1398
  * @return {string} The GPU format.
1186
1399
  */
1187
- export function getFormat( texture, device = null ) {
1400
+ export function getFormat( texture, device ) {
1188
1401
 
1189
1402
  const format = texture.format;
1190
1403
  const type = texture.type;
1404
+ const normalized = texture.normalized;
1191
1405
  const colorSpace = texture.colorSpace;
1192
1406
  const transfer = ColorManagement.getTransfer( colorSpace );
1193
1407
 
1194
1408
  let formatGPU;
1195
1409
 
1410
+ let textureFormatsTier1 = false;
1411
+
1412
+ if ( normalized ) {
1413
+
1414
+ textureFormatsTier1 = device.features.has( GPUFeatureName.TextureFormatsTier1 );
1415
+
1416
+ if ( textureFormatsTier1 === false ) {
1417
+
1418
+ warn( 'WebGPURenderer: Unable to use normalized textures without texture-formats-tier1 feature.' );
1419
+
1420
+ }
1421
+
1422
+ }
1423
+
1196
1424
  if ( texture.isCompressedTexture === true || texture.isCompressedArrayTexture === true ) {
1197
1425
 
1198
1426
  switch ( format ) {
@@ -1230,6 +1458,14 @@ export function getFormat( texture, device = null ) {
1230
1458
  formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC7RGBAUnormSRGB : GPUTextureFormat.BC7RGBAUnorm;
1231
1459
  break;
1232
1460
 
1461
+ case RGB_BPTC_SIGNED_Format:
1462
+ formatGPU = GPUTextureFormat.BC6HRGBFloat;
1463
+ break;
1464
+
1465
+ case RGB_BPTC_UNSIGNED_Format:
1466
+ formatGPU = GPUTextureFormat.BC6HRGBUFloat;
1467
+ break;
1468
+
1233
1469
  case RGB_ETC2_Format:
1234
1470
  case RGB_ETC1_Format:
1235
1471
  formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ETC2RGB8UnormSRGB : GPUTextureFormat.ETC2RGB8Unorm;
@@ -1239,6 +1475,22 @@ export function getFormat( texture, device = null ) {
1239
1475
  formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ETC2RGBA8UnormSRGB : GPUTextureFormat.ETC2RGBA8Unorm;
1240
1476
  break;
1241
1477
 
1478
+ case R11_EAC_Format:
1479
+ formatGPU = GPUTextureFormat.EACR11Unorm;
1480
+ break;
1481
+
1482
+ case SIGNED_R11_EAC_Format:
1483
+ formatGPU = GPUTextureFormat.EACR11Snorm;
1484
+ break;
1485
+
1486
+ case RG11_EAC_Format:
1487
+ formatGPU = GPUTextureFormat.EACRG11Unorm;
1488
+ break;
1489
+
1490
+ case SIGNED_RG11_EAC_Format:
1491
+ formatGPU = GPUTextureFormat.EACRG11Snorm;
1492
+ break;
1493
+
1242
1494
  case RGBA_ASTC_4x4_Format:
1243
1495
  formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC4x4UnormSRGB : GPUTextureFormat.ASTC4x4Unorm;
1244
1496
  break;
@@ -1317,12 +1569,13 @@ export function getFormat( texture, device = null ) {
1317
1569
  break;
1318
1570
 
1319
1571
  case ShortType:
1320
- formatGPU = GPUTextureFormat.RGBA16Sint;
1572
+ formatGPU = textureFormatsTier1 ? GPUTextureFormat.RGBA16Snorm : GPUTextureFormat.RGBA16Sint;
1321
1573
  break;
1322
1574
 
1323
1575
  case UnsignedShortType:
1324
- formatGPU = GPUTextureFormat.RGBA16Uint;
1576
+ formatGPU = textureFormatsTier1 ? GPUTextureFormat.RGBA16Unorm : GPUTextureFormat.RGBA16Uint;
1325
1577
  break;
1578
+
1326
1579
  case UnsignedIntType:
1327
1580
  formatGPU = GPUTextureFormat.RGBA32Uint;
1328
1581
  break;
@@ -1378,11 +1631,11 @@ export function getFormat( texture, device = null ) {
1378
1631
  break;
1379
1632
 
1380
1633
  case ShortType:
1381
- formatGPU = GPUTextureFormat.R16Sint;
1634
+ formatGPU = textureFormatsTier1 ? GPUTextureFormat.R16Snorm : GPUTextureFormat.R16Sint;
1382
1635
  break;
1383
1636
 
1384
1637
  case UnsignedShortType:
1385
- formatGPU = GPUTextureFormat.R16Uint;
1638
+ formatGPU = textureFormatsTier1 ? GPUTextureFormat.R16Unorm : GPUTextureFormat.R16Uint;
1386
1639
  break;
1387
1640
 
1388
1641
  case UnsignedIntType:
@@ -1421,11 +1674,11 @@ export function getFormat( texture, device = null ) {
1421
1674
  break;
1422
1675
 
1423
1676
  case ShortType:
1424
- formatGPU = GPUTextureFormat.RG16Sint;
1677
+ formatGPU = textureFormatsTier1 ? GPUTextureFormat.RG16Snorm : GPUTextureFormat.RG16Sint;
1425
1678
  break;
1426
1679
 
1427
1680
  case UnsignedShortType:
1428
- formatGPU = GPUTextureFormat.RG16Uint;
1681
+ formatGPU = textureFormatsTier1 ? GPUTextureFormat.RG16Unorm : GPUTextureFormat.RG16Uint;
1429
1682
  break;
1430
1683
 
1431
1684
  case UnsignedIntType: