@needle-tools/three 0.169.20-experimental.0 → 0.183.2-canary.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 (1051) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +5 -6
  3. package/build/three.cjs +54184 -56703
  4. package/build/three.core.js +59506 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +11645 -73000
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +648 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +53912 -51652
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +53888 -51806
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  15. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  16. package/examples/jsm/Addons.js +5 -15
  17. package/examples/jsm/animation/AnimationClipCreator.js +58 -6
  18. package/examples/jsm/animation/CCDIKSolver.js +152 -45
  19. package/examples/jsm/capabilities/WebGL.js +28 -29
  20. package/examples/jsm/capabilities/WebGPU.js +19 -17
  21. package/examples/jsm/controls/ArcballControls.js +474 -178
  22. package/examples/jsm/controls/DragControls.js +100 -58
  23. package/examples/jsm/controls/FirstPersonControls.js +116 -6
  24. package/examples/jsm/controls/FlyControls.js +50 -2
  25. package/examples/jsm/controls/MapControls.js +96 -8
  26. package/examples/jsm/controls/OrbitControls.js +496 -57
  27. package/examples/jsm/controls/PointerLockControls.js +115 -22
  28. package/examples/jsm/controls/TrackballControls.js +166 -14
  29. package/examples/jsm/controls/TransformControls.js +336 -26
  30. package/examples/jsm/csm/CSM.js +232 -18
  31. package/examples/jsm/csm/CSMFrustum.js +61 -4
  32. package/examples/jsm/csm/CSMHelper.js +50 -0
  33. package/examples/jsm/csm/CSMShader.js +13 -1
  34. package/examples/jsm/csm/CSMShadowNode.js +599 -0
  35. package/examples/jsm/curves/CurveExtras.js +303 -31
  36. package/examples/jsm/curves/NURBSCurve.js +91 -16
  37. package/examples/jsm/curves/NURBSSurface.js +52 -6
  38. package/examples/jsm/curves/NURBSUtils.js +102 -112
  39. package/examples/jsm/curves/NURBSVolume.js +24 -4
  40. package/examples/jsm/effects/AnaglyphEffect.js +134 -7
  41. package/examples/jsm/effects/AsciiEffect.js +69 -22
  42. package/examples/jsm/effects/OutlineEffect.js +61 -111
  43. package/examples/jsm/effects/ParallaxBarrierEffect.js +30 -0
  44. package/examples/jsm/effects/StereoEffect.js +31 -0
  45. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  46. package/examples/jsm/environments/DebugEnvironment.js +50 -0
  47. package/examples/jsm/environments/RoomEnvironment.js +83 -42
  48. package/examples/jsm/exporters/DRACOExporter.js +56 -14
  49. package/examples/jsm/exporters/EXRExporter.js +40 -9
  50. package/examples/jsm/exporters/GLTFExporter.js +502 -169
  51. package/examples/jsm/exporters/OBJExporter.js +21 -1
  52. package/examples/jsm/exporters/PLYExporter.js +44 -12
  53. package/examples/jsm/exporters/STLExporter.js +27 -5
  54. package/examples/jsm/exporters/USDZExporter.js +781 -291
  55. package/examples/jsm/geometries/BoxLineGeometry.js +23 -0
  56. package/examples/jsm/geometries/ConvexGeometry.js +19 -0
  57. package/examples/jsm/geometries/DecalGeometry.js +91 -30
  58. package/examples/jsm/geometries/ParametricFunctions.js +100 -0
  59. package/examples/jsm/geometries/ParametricGeometry.js +38 -5
  60. package/examples/jsm/geometries/RoundedBoxGeometry.js +68 -7
  61. package/examples/jsm/geometries/TeapotGeometry.js +23 -38
  62. package/examples/jsm/geometries/TextGeometry.js +48 -29
  63. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  64. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  65. package/examples/jsm/helpers/LightProbeHelper.js +36 -0
  66. package/examples/jsm/helpers/LightProbeHelperGPU.js +38 -1
  67. package/examples/jsm/helpers/OctreeHelper.js +36 -0
  68. package/examples/jsm/helpers/PositionalAudioHelper.js +60 -0
  69. package/examples/jsm/helpers/RapierHelper.js +59 -0
  70. package/examples/jsm/helpers/RectAreaLightHelper.js +36 -3
  71. package/examples/jsm/helpers/TextureHelper.js +28 -0
  72. package/examples/jsm/helpers/TextureHelperGPU.js +214 -0
  73. package/examples/jsm/helpers/VertexNormalsHelper.js +61 -2
  74. package/examples/jsm/helpers/VertexTangentsHelper.js +47 -2
  75. package/examples/jsm/helpers/ViewHelper.js +181 -9
  76. package/examples/jsm/inspector/Inspector.js +487 -0
  77. package/examples/jsm/inspector/RendererInspector.js +425 -0
  78. package/examples/jsm/inspector/tabs/Console.js +238 -0
  79. package/examples/jsm/inspector/tabs/Parameters.js +348 -0
  80. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  81. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  82. package/examples/jsm/inspector/ui/Graph.js +95 -0
  83. package/examples/jsm/inspector/ui/Item.js +170 -0
  84. package/examples/jsm/inspector/ui/List.js +75 -0
  85. package/examples/jsm/inspector/ui/Profiler.js +1975 -0
  86. package/examples/jsm/inspector/ui/Style.js +1613 -0
  87. package/examples/jsm/inspector/ui/Tab.js +233 -0
  88. package/examples/jsm/inspector/ui/Values.js +439 -0
  89. package/examples/jsm/inspector/ui/utils.js +56 -0
  90. package/examples/jsm/interactive/HTMLMesh.js +43 -12
  91. package/examples/jsm/interactive/InteractiveGroup.js +170 -52
  92. package/examples/jsm/interactive/SelectionBox.js +106 -9
  93. package/examples/jsm/interactive/SelectionHelper.js +76 -30
  94. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  95. package/examples/jsm/libs/meshopt_decoder.module.js +76 -58
  96. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  97. package/examples/jsm/lighting/TiledLighting.js +42 -0
  98. package/examples/jsm/lights/LightProbeGenerator.js +44 -7
  99. package/examples/jsm/lights/RectAreaLightTexturesLib.js +50 -14
  100. package/examples/jsm/lights/RectAreaLightUniformsLib.js +16 -0
  101. package/examples/jsm/lines/Line2.js +41 -4
  102. package/examples/jsm/lines/LineGeometry.js +80 -2
  103. package/examples/jsm/lines/LineMaterial.js +105 -5
  104. package/examples/jsm/lines/LineSegments2.js +54 -4
  105. package/examples/jsm/lines/LineSegmentsGeometry.js +65 -8
  106. package/examples/jsm/lines/Wireframe.js +41 -4
  107. package/examples/jsm/lines/WireframeGeometry2.js +27 -2
  108. package/examples/jsm/lines/webgpu/Line2.js +28 -2
  109. package/examples/jsm/lines/webgpu/LineSegments2.js +59 -24
  110. package/examples/jsm/lines/webgpu/Wireframe.js +86 -0
  111. package/examples/jsm/loaders/3DMLoader.js +78 -6
  112. package/examples/jsm/loaders/3MFLoader.js +148 -7
  113. package/examples/jsm/loaders/AMFLoader.js +34 -14
  114. package/examples/jsm/loaders/BVHLoader.js +59 -12
  115. package/examples/jsm/loaders/ColladaLoader.js +61 -4027
  116. package/examples/jsm/loaders/DDSLoader.js +68 -1
  117. package/examples/jsm/loaders/DRACOLoader.js +146 -22
  118. package/examples/jsm/loaders/EXRLoader.js +255 -34
  119. package/examples/jsm/loaders/FBXLoader.js +80 -42
  120. package/examples/jsm/loaders/FontLoader.js +83 -6
  121. package/examples/jsm/loaders/GCodeLoader.js +71 -14
  122. package/examples/jsm/loaders/GLTFLoader.js +381 -263
  123. package/examples/jsm/loaders/HDRCubeTextureLoader.js +52 -3
  124. package/examples/jsm/loaders/HDRLoader.js +485 -0
  125. package/examples/jsm/loaders/IESLoader.js +42 -0
  126. package/examples/jsm/loaders/KMZLoader.js +39 -6
  127. package/examples/jsm/loaders/KTX2Loader.js +124 -48
  128. package/examples/jsm/loaders/KTXLoader.js +31 -10
  129. package/examples/jsm/loaders/LDrawLoader.js +192 -145
  130. package/examples/jsm/loaders/LUT3dlLoader.js +47 -10
  131. package/examples/jsm/loaders/LUTCubeLoader.js +46 -9
  132. package/examples/jsm/loaders/LUTImageLoader.js +79 -38
  133. package/examples/jsm/loaders/LWOLoader.js +54 -59
  134. package/examples/jsm/loaders/LottieLoader.js +54 -1
  135. package/examples/jsm/loaders/MD2Loader.js +37 -1
  136. package/examples/jsm/loaders/MDDLoader.js +57 -12
  137. package/examples/jsm/loaders/MTLLoader.js +60 -35
  138. package/examples/jsm/loaders/MaterialXLoader.js +268 -34
  139. package/examples/jsm/loaders/NRRDLoader.js +40 -8
  140. package/examples/jsm/loaders/OBJLoader.js +51 -2
  141. package/examples/jsm/loaders/PCDLoader.js +173 -21
  142. package/examples/jsm/loaders/PDBLoader.js +41 -2
  143. package/examples/jsm/loaders/PLYLoader.js +70 -39
  144. package/examples/jsm/loaders/PVRLoader.js +25 -6
  145. package/examples/jsm/loaders/RGBELoader.js +6 -438
  146. package/examples/jsm/loaders/STLLoader.js +48 -38
  147. package/examples/jsm/loaders/SVGLoader.js +119 -25
  148. package/examples/jsm/loaders/TDSLoader.js +92 -74
  149. package/examples/jsm/loaders/TGALoader.js +23 -2
  150. package/examples/jsm/loaders/TIFFLoader.js +23 -0
  151. package/examples/jsm/loaders/TTFLoader.js +50 -3
  152. package/examples/jsm/loaders/USDLoader.js +279 -0
  153. package/examples/jsm/loaders/USDZLoader.js +4 -858
  154. package/examples/jsm/loaders/UltraHDRLoader.js +338 -166
  155. package/examples/jsm/loaders/VOXLoader.js +688 -87
  156. package/examples/jsm/loaders/VRMLLoader.js +121 -12
  157. package/examples/jsm/loaders/VTKLoader.js +77 -25
  158. package/examples/jsm/loaders/XYZLoader.js +36 -0
  159. package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
  160. package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
  161. package/examples/jsm/loaders/lwo/IFFParser.js +77 -77
  162. package/examples/jsm/loaders/usd/USDAParser.js +822 -0
  163. package/examples/jsm/loaders/usd/USDCParser.js +1852 -0
  164. package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
  165. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +183 -0
  166. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +154 -0
  167. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  168. package/examples/jsm/math/Capsule.js +91 -14
  169. package/examples/jsm/math/ColorConverter.js +22 -0
  170. package/examples/jsm/math/ColorSpaces.js +74 -2
  171. package/examples/jsm/math/ConvexHull.js +517 -93
  172. package/examples/jsm/math/ImprovedNoise.js +32 -15
  173. package/examples/jsm/math/Lut.js +113 -0
  174. package/examples/jsm/math/MeshSurfaceSampler.js +78 -13
  175. package/examples/jsm/math/OBB.js +141 -29
  176. package/examples/jsm/math/Octree.js +283 -7
  177. package/examples/jsm/math/SimplexNoise.js +68 -42
  178. package/examples/jsm/misc/ConvexObjectBreaker.js +45 -25
  179. package/examples/jsm/misc/GPUComputationRenderer.js +96 -20
  180. package/examples/jsm/misc/Gyroscope.js +12 -0
  181. package/examples/jsm/misc/MD2Character.js +117 -2
  182. package/examples/jsm/misc/MD2CharacterComplex.js +175 -11
  183. package/examples/jsm/misc/MorphAnimMesh.js +44 -0
  184. package/examples/jsm/misc/MorphBlendMesh.js +103 -0
  185. package/examples/jsm/misc/ProgressiveLightMap.js +100 -54
  186. package/examples/jsm/misc/ProgressiveLightMapGPU.js +322 -0
  187. package/examples/jsm/misc/RollerCoaster.js +57 -0
  188. package/examples/jsm/misc/TubePainter.js +437 -40
  189. package/examples/jsm/misc/Volume.js +123 -76
  190. package/examples/jsm/misc/VolumeSlice.js +95 -49
  191. package/examples/jsm/modifiers/CurveModifier.js +66 -38
  192. package/examples/jsm/modifiers/CurveModifierGPU.js +42 -19
  193. package/examples/jsm/modifiers/EdgeSplitModifier.js +20 -0
  194. package/examples/jsm/modifiers/SimplifyModifier.js +24 -10
  195. package/examples/jsm/modifiers/TessellateModifier.js +35 -2
  196. package/examples/jsm/objects/GroundedSkybox.js +25 -6
  197. package/examples/jsm/objects/Lensflare.js +94 -2
  198. package/examples/jsm/objects/LensflareMesh.js +64 -10
  199. package/examples/jsm/objects/MarchingCubes.js +90 -5
  200. package/examples/jsm/objects/Reflector.js +76 -2
  201. package/examples/jsm/objects/ReflectorForSSRPass.js +41 -0
  202. package/examples/jsm/objects/Refractor.js +62 -0
  203. package/examples/jsm/objects/ShadowMesh.js +54 -4
  204. package/examples/jsm/objects/Sky.js +106 -16
  205. package/examples/jsm/objects/SkyMesh.js +211 -38
  206. package/examples/jsm/objects/Water.js +49 -8
  207. package/examples/jsm/objects/Water2.js +49 -7
  208. package/examples/jsm/objects/Water2Mesh.js +50 -9
  209. package/examples/jsm/objects/WaterMesh.js +136 -43
  210. package/examples/jsm/physics/AmmoPhysics.js +60 -7
  211. package/examples/jsm/physics/JoltPhysics.js +65 -12
  212. package/examples/jsm/physics/RapierPhysics.js +217 -21
  213. package/examples/jsm/postprocessing/AfterimagePass.js +110 -29
  214. package/examples/jsm/postprocessing/BloomPass.js +128 -26
  215. package/examples/jsm/postprocessing/BokehPass.js +99 -22
  216. package/examples/jsm/postprocessing/ClearPass.js +54 -3
  217. package/examples/jsm/postprocessing/CubeTexturePass.js +82 -21
  218. package/examples/jsm/postprocessing/DotScreenPass.js +59 -10
  219. package/examples/jsm/postprocessing/EffectComposer.js +140 -6
  220. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  221. package/examples/jsm/postprocessing/FilmPass.js +54 -5
  222. package/examples/jsm/postprocessing/GTAOPass.js +202 -57
  223. package/examples/jsm/postprocessing/GlitchPass.js +86 -34
  224. package/examples/jsm/postprocessing/HalftonePass.js +65 -10
  225. package/examples/jsm/postprocessing/LUTPass.js +38 -8
  226. package/examples/jsm/postprocessing/MaskPass.js +91 -0
  227. package/examples/jsm/postprocessing/OutlinePass.js +272 -135
  228. package/examples/jsm/postprocessing/OutputPass.js +65 -14
  229. package/examples/jsm/postprocessing/Pass.js +100 -4
  230. package/examples/jsm/postprocessing/RenderPass.js +94 -0
  231. package/examples/jsm/postprocessing/RenderPixelatedPass.js +124 -45
  232. package/examples/jsm/postprocessing/RenderTransitionPass.js +120 -21
  233. package/examples/jsm/postprocessing/SAOPass.js +128 -55
  234. package/examples/jsm/postprocessing/SMAAPass.js +106 -75
  235. package/examples/jsm/postprocessing/SSAARenderPass.js +118 -35
  236. package/examples/jsm/postprocessing/SSAOPass.js +173 -60
  237. package/examples/jsm/postprocessing/SSRPass.js +268 -53
  238. package/examples/jsm/postprocessing/SavePass.js +69 -16
  239. package/examples/jsm/postprocessing/ShaderPass.js +65 -7
  240. package/examples/jsm/postprocessing/TAARenderPass.js +79 -24
  241. package/examples/jsm/postprocessing/TexturePass.js +72 -8
  242. package/examples/jsm/postprocessing/UnrealBloomPass.js +168 -59
  243. package/examples/jsm/renderers/CSS2DRenderer.js +98 -5
  244. package/examples/jsm/renderers/CSS3DRenderer.js +111 -7
  245. package/examples/jsm/renderers/Projector.js +288 -32
  246. package/examples/jsm/renderers/SVGRenderer.js +323 -61
  247. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +3 -1
  248. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  249. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +5 -1
  250. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +12 -5
  251. package/examples/jsm/shaders/AfterimageShader.js +8 -3
  252. package/examples/jsm/shaders/BasicShader.js +8 -1
  253. package/examples/jsm/shaders/BleachBypassShader.js +10 -3
  254. package/examples/jsm/shaders/BlendShader.js +8 -1
  255. package/examples/jsm/shaders/BokehShader.js +9 -3
  256. package/examples/jsm/shaders/BokehShader2.js +11 -4
  257. package/examples/jsm/shaders/BrightnessContrastShader.js +10 -4
  258. package/examples/jsm/shaders/ColorCorrectionShader.js +8 -1
  259. package/examples/jsm/shaders/ColorifyShader.js +8 -1
  260. package/examples/jsm/shaders/ConvolutionShader.js +9 -38
  261. package/examples/jsm/shaders/CopyShader.js +8 -1
  262. package/examples/jsm/shaders/DOFMipMapShader.js +10 -3
  263. package/examples/jsm/shaders/DepthLimitedBlurShader.js +10 -1
  264. package/examples/jsm/shaders/DigitalGlitch.js +10 -7
  265. package/examples/jsm/shaders/DotScreenShader.js +8 -3
  266. package/examples/jsm/shaders/ExposureShader.js +8 -1
  267. package/examples/jsm/shaders/FXAAShader.js +233 -221
  268. package/examples/jsm/shaders/FilmShader.js +13 -0
  269. package/examples/jsm/shaders/FocusShader.js +8 -3
  270. package/examples/jsm/shaders/FreiChenShader.js +10 -3
  271. package/examples/jsm/shaders/GTAOShader.js +55 -45
  272. package/examples/jsm/shaders/GammaCorrectionShader.js +11 -2
  273. package/examples/jsm/shaders/HalftoneShader.js +24 -4
  274. package/examples/jsm/shaders/HorizontalBlurShader.js +12 -3
  275. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +9 -2
  276. package/examples/jsm/shaders/HueSaturationShader.js +10 -3
  277. package/examples/jsm/shaders/KaleidoShader.js +11 -4
  278. package/examples/jsm/shaders/LuminosityHighPassShader.js +8 -4
  279. package/examples/jsm/shaders/LuminosityShader.js +8 -2
  280. package/examples/jsm/shaders/MirrorShader.js +10 -4
  281. package/examples/jsm/shaders/NormalMapShader.js +7 -2
  282. package/examples/jsm/shaders/OutputShader.js +19 -1
  283. package/examples/jsm/shaders/PoissonDenoiseShader.js +30 -17
  284. package/examples/jsm/shaders/RGBShiftShader.js +8 -1
  285. package/examples/jsm/shaders/SAOShader.js +27 -5
  286. package/examples/jsm/shaders/SMAAShader.js +24 -1
  287. package/examples/jsm/shaders/SSAOShader.js +37 -6
  288. package/examples/jsm/shaders/SSRShader.js +32 -6
  289. package/examples/jsm/shaders/SepiaShader.js +8 -3
  290. package/examples/jsm/shaders/SobelOperatorShader.js +9 -3
  291. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +13 -8
  292. package/examples/jsm/shaders/TechnicolorShader.js +10 -4
  293. package/examples/jsm/shaders/ToonShader.js +29 -6
  294. package/examples/jsm/shaders/TriangleBlurShader.js +9 -4
  295. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +19 -6
  296. package/examples/jsm/shaders/VelocityShader.js +8 -1
  297. package/examples/jsm/shaders/VerticalBlurShader.js +9 -2
  298. package/examples/jsm/shaders/VerticalTiltShiftShader.js +8 -1
  299. package/examples/jsm/shaders/VignetteShader.js +8 -3
  300. package/examples/jsm/shaders/VolumeShader.js +11 -2
  301. package/examples/jsm/shaders/WaterRefractionShader.js +11 -0
  302. package/examples/jsm/textures/FlakesTexture.js +14 -0
  303. package/examples/jsm/transpiler/AST.js +436 -31
  304. package/examples/jsm/transpiler/GLSLDecoder.js +380 -135
  305. package/examples/jsm/transpiler/Linker.js +327 -0
  306. package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -1
  307. package/examples/jsm/transpiler/TSLEncoder.js +363 -97
  308. package/examples/jsm/transpiler/Transpiler.js +50 -1
  309. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  310. package/examples/jsm/transpiler/WGSLEncoder.js +839 -0
  311. package/examples/jsm/tsl/display/AfterImageNode.js +244 -0
  312. package/examples/jsm/tsl/display/AnaglyphPassNode.js +549 -0
  313. package/examples/jsm/tsl/display/AnamorphicNode.js +282 -0
  314. package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
  315. package/{src/nodes → examples/jsm/tsl}/display/BleachBypass.js +11 -4
  316. package/examples/jsm/tsl/display/BloomNode.js +534 -0
  317. package/examples/jsm/tsl/display/CRT.js +150 -0
  318. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  319. package/examples/jsm/tsl/display/DenoiseNode.js +334 -0
  320. package/examples/jsm/tsl/display/DepthOfFieldNode.js +554 -0
  321. package/examples/jsm/tsl/display/DotScreenNode.js +104 -0
  322. package/examples/jsm/tsl/display/FXAANode.js +365 -0
  323. package/examples/jsm/tsl/display/FilmNode.js +101 -0
  324. package/examples/jsm/tsl/display/GTAONode.js +571 -0
  325. package/examples/jsm/tsl/display/GaussianBlurNode.js +389 -0
  326. package/examples/jsm/tsl/display/GodraysNode.js +624 -0
  327. package/examples/jsm/tsl/display/LensflareNode.js +279 -0
  328. package/examples/jsm/tsl/display/Lut3DNode.js +109 -0
  329. package/examples/jsm/tsl/display/MotionBlur.js +33 -0
  330. package/examples/jsm/tsl/display/OutlineNode.js +762 -0
  331. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +89 -0
  332. package/examples/jsm/tsl/display/PixelationPassNode.js +335 -0
  333. package/examples/jsm/tsl/display/RGBShiftNode.js +96 -0
  334. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  335. package/examples/jsm/tsl/display/SMAANode.js +768 -0
  336. package/{src/nodes → examples/jsm/tsl}/display/SSAAPassNode.js +120 -49
  337. package/examples/jsm/tsl/display/SSGINode.js +642 -0
  338. package/examples/jsm/tsl/display/SSRNode.js +656 -0
  339. package/examples/jsm/tsl/display/SSSNode.js +490 -0
  340. package/{src/nodes → examples/jsm/tsl}/display/Sepia.js +9 -2
  341. package/examples/jsm/tsl/display/Shape.js +29 -0
  342. package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +61 -19
  343. package/examples/jsm/tsl/display/StereoCompositePassNode.js +192 -0
  344. package/{src/nodes → examples/jsm/tsl}/display/StereoPassNode.js +48 -12
  345. package/examples/jsm/tsl/display/TRAANode.js +726 -0
  346. package/examples/jsm/tsl/display/TransitionNode.js +141 -0
  347. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  348. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  349. package/examples/jsm/tsl/display/hashBlur.js +54 -0
  350. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  351. package/examples/jsm/tsl/lighting/TiledLightsNode.js +442 -0
  352. package/examples/jsm/tsl/math/Bayer.js +73 -0
  353. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  354. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  355. package/examples/jsm/tsl/utils/Raymarching.js +70 -0
  356. package/examples/jsm/utils/BufferGeometryUtils.js +91 -29
  357. package/examples/jsm/utils/CameraUtils.js +15 -6
  358. package/examples/jsm/utils/GeometryCompressionUtils.js +23 -30
  359. package/examples/jsm/utils/GeometryUtils.js +32 -27
  360. package/examples/jsm/utils/LDrawUtils.js +14 -5
  361. package/examples/jsm/utils/SceneOptimizer.js +458 -0
  362. package/examples/jsm/utils/SceneUtils.js +53 -3
  363. package/examples/jsm/utils/ShadowMapViewer.js +72 -33
  364. package/examples/jsm/utils/ShadowMapViewerGPU.js +61 -29
  365. package/examples/jsm/utils/SkeletonUtils.js +48 -0
  366. package/examples/jsm/utils/SortUtils.js +17 -5
  367. package/examples/jsm/utils/UVsDebug.js +12 -4
  368. package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +16 -0
  369. package/examples/jsm/utils/{TextureUtilsGPU.js → WebGPUTextureUtils.js} +20 -2
  370. package/examples/jsm/utils/WorkerPool.js +67 -2
  371. package/examples/jsm/webxr/ARButton.js +19 -0
  372. package/examples/jsm/webxr/OculusHandModel.js +84 -0
  373. package/examples/jsm/webxr/OculusHandPointerModel.js +148 -22
  374. package/examples/jsm/webxr/Text2D.js +20 -6
  375. package/examples/jsm/webxr/VRButton.js +31 -0
  376. package/examples/jsm/webxr/XRButton.js +23 -0
  377. package/examples/jsm/webxr/XRControllerModelFactory.js +94 -3
  378. package/examples/jsm/webxr/XREstimatedLight.js +35 -4
  379. package/examples/jsm/webxr/XRHandMeshModel.js +37 -0
  380. package/examples/jsm/webxr/XRHandModelFactory.js +96 -6
  381. package/examples/jsm/webxr/XRHandPrimitiveModel.js +44 -0
  382. package/examples/jsm/webxr/XRPlanes.js +18 -0
  383. package/package.json +29 -37
  384. package/src/Three.Core.js +198 -0
  385. package/src/Three.Legacy.js +0 -21
  386. package/src/Three.TSL.js +641 -0
  387. package/src/Three.WebGPU.Nodes.js +14 -186
  388. package/src/Three.WebGPU.js +16 -186
  389. package/src/Three.js +2 -197
  390. package/src/animation/AnimationAction.js +263 -31
  391. package/src/animation/AnimationClip.js +162 -7
  392. package/src/animation/AnimationMixer.js +105 -15
  393. package/src/animation/AnimationObjectGroup.js +45 -21
  394. package/src/animation/AnimationUtils.js +163 -24
  395. package/src/animation/KeyframeTrack.js +191 -17
  396. package/src/animation/PropertyBinding.js +91 -16
  397. package/src/animation/PropertyMixer.js +72 -5
  398. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  399. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  400. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  401. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  402. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  403. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  404. package/src/audio/Audio.js +386 -8
  405. package/src/audio/AudioAnalyser.js +58 -1
  406. package/src/audio/AudioContext.js +15 -0
  407. package/src/audio/AudioListener.js +94 -13
  408. package/src/audio/PositionalAudio.js +107 -0
  409. package/src/cameras/ArrayCamera.js +37 -0
  410. package/src/cameras/Camera.js +61 -0
  411. package/src/cameras/CubeCamera.js +86 -0
  412. package/src/cameras/OrthographicCamera.js +110 -1
  413. package/src/cameras/PerspectiveCamera.js +174 -35
  414. package/src/cameras/StereoCamera.js +48 -2
  415. package/src/constants.js +1546 -11
  416. package/src/core/BufferAttribute.js +417 -3
  417. package/src/core/BufferGeometry.js +407 -22
  418. package/src/core/Clock.js +69 -8
  419. package/src/core/EventDispatcher.js +52 -8
  420. package/src/core/GLBufferAttribute.js +113 -2
  421. package/src/core/InstancedBufferAttribute.js +29 -0
  422. package/src/core/InstancedBufferGeometry.js +20 -0
  423. package/src/core/InstancedInterleavedBuffer.js +26 -0
  424. package/src/core/InterleavedBuffer.js +141 -7
  425. package/src/core/InterleavedBufferAttribute.js +200 -2
  426. package/src/core/Layers.js +71 -10
  427. package/src/core/Object3D.js +673 -26
  428. package/src/core/Raycaster.js +136 -2
  429. package/src/core/RenderTarget.js +256 -27
  430. package/src/core/RenderTarget3D.js +48 -0
  431. package/src/core/Timer.js +184 -0
  432. package/src/core/Uniform.js +29 -0
  433. package/src/core/UniformsGroup.js +84 -2
  434. package/src/extras/Controls.js +89 -1
  435. package/src/extras/DataUtils.js +50 -9
  436. package/src/extras/Earcut.js +18 -779
  437. package/src/extras/ImageUtils.js +22 -14
  438. package/src/extras/PMREMGenerator.js +316 -67
  439. package/src/extras/ShapeUtils.js +24 -2
  440. package/src/extras/TextureUtils.js +101 -15
  441. package/src/extras/core/Curve.js +156 -55
  442. package/src/extras/core/CurvePath.js +63 -22
  443. package/src/extras/core/Interpolations.js +34 -2
  444. package/src/extras/core/Path.js +134 -1
  445. package/src/extras/core/Shape.js +66 -3
  446. package/src/extras/core/ShapePath.js +80 -4
  447. package/src/extras/curves/ArcCurve.js +22 -0
  448. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  449. package/src/extras/curves/CubicBezierCurve.js +67 -0
  450. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  451. package/src/extras/curves/EllipseCurve.js +102 -0
  452. package/src/extras/curves/LineCurve.js +36 -0
  453. package/src/extras/curves/LineCurve3.js +36 -0
  454. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  455. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  456. package/src/extras/curves/SplineCurve.js +48 -0
  457. package/src/extras/lib/earcut.js +685 -0
  458. package/src/geometries/BoxGeometry.js +39 -0
  459. package/src/geometries/CapsuleGeometry.js +196 -11
  460. package/src/geometries/CircleGeometry.js +41 -0
  461. package/src/geometries/ConeGeometry.js +39 -0
  462. package/src/geometries/CylinderGeometry.js +42 -2
  463. package/src/geometries/DodecahedronGeometry.js +33 -0
  464. package/src/geometries/EdgesGeometry.js +30 -2
  465. package/src/geometries/ExtrudeGeometry.js +148 -52
  466. package/src/geometries/IcosahedronGeometry.js +33 -0
  467. package/src/geometries/LatheGeometry.js +44 -3
  468. package/src/geometries/OctahedronGeometry.js +33 -0
  469. package/src/geometries/PlaneGeometry.js +35 -0
  470. package/src/geometries/PolyhedronGeometry.js +30 -1
  471. package/src/geometries/RingGeometry.js +37 -0
  472. package/src/geometries/ShapeGeometry.js +38 -0
  473. package/src/geometries/SphereGeometry.js +38 -0
  474. package/src/geometries/TetrahedronGeometry.js +33 -0
  475. package/src/geometries/TorusGeometry.js +44 -3
  476. package/src/geometries/TorusKnotGeometry.js +39 -0
  477. package/src/geometries/TubeGeometry.js +50 -0
  478. package/src/geometries/WireframeGeometry.js +32 -0
  479. package/src/helpers/ArrowHelper.js +62 -5
  480. package/src/helpers/AxesHelper.js +28 -0
  481. package/src/helpers/Box3Helper.js +28 -0
  482. package/src/helpers/BoxHelper.js +43 -7
  483. package/src/helpers/CameraHelper.js +103 -27
  484. package/src/helpers/DirectionalLightHelper.js +55 -0
  485. package/src/helpers/GridHelper.js +26 -0
  486. package/src/helpers/HemisphereLightHelper.js +42 -0
  487. package/src/helpers/PlaneHelper.js +33 -0
  488. package/src/helpers/PointLightHelper.js +43 -24
  489. package/src/helpers/PolarGridHelper.js +30 -0
  490. package/src/helpers/SkeletonHelper.js +73 -7
  491. package/src/helpers/SpotLightHelper.js +43 -0
  492. package/src/lights/AmbientLight.js +25 -0
  493. package/src/lights/DirectionalLight.js +70 -0
  494. package/src/lights/DirectionalLightShadow.js +15 -0
  495. package/src/lights/HemisphereLight.js +42 -0
  496. package/src/lights/Light.js +37 -11
  497. package/src/lights/LightProbe.js +37 -9
  498. package/src/lights/LightShadow.js +202 -7
  499. package/src/lights/PointLight.js +74 -0
  500. package/src/lights/PointLightShadow.js +15 -80
  501. package/src/lights/RectAreaLight.js +59 -0
  502. package/src/lights/SpotLight.js +124 -1
  503. package/src/lights/SpotLightShadow.js +33 -3
  504. package/src/lights/webgpu/IESSpotLight.js +22 -0
  505. package/src/lights/webgpu/ProjectorLight.js +46 -0
  506. package/src/loaders/AnimationLoader.js +34 -2
  507. package/src/loaders/AudioLoader.js +34 -2
  508. package/src/loaders/BufferGeometryLoader.js +38 -13
  509. package/src/loaders/Cache.js +75 -2
  510. package/src/loaders/CompressedTextureLoader.js +36 -3
  511. package/src/loaders/CubeTextureLoader.js +45 -0
  512. package/src/loaders/DataTextureLoader.js +45 -4
  513. package/src/loaders/FileLoader.js +85 -5
  514. package/src/loaders/ImageBitmapLoader.js +113 -11
  515. package/src/loaders/ImageLoader.js +85 -8
  516. package/src/loaders/Loader.js +150 -0
  517. package/src/loaders/LoaderUtils.js +18 -36
  518. package/src/loaders/LoadingManager.js +187 -0
  519. package/src/loaders/MaterialLoader.js +62 -3
  520. package/src/loaders/ObjectLoader.js +131 -31
  521. package/src/loaders/TextureLoader.js +33 -0
  522. package/src/loaders/nodes/NodeLoader.js +68 -4
  523. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  524. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  525. package/src/materials/LineBasicMaterial.js +74 -1
  526. package/src/materials/LineDashedMaterial.js +52 -1
  527. package/src/materials/Material.js +502 -8
  528. package/src/materials/MeshBasicMaterial.js +168 -2
  529. package/src/materials/MeshDepthMaterial.js +94 -0
  530. package/src/materials/MeshDistanceMaterial.js +76 -0
  531. package/src/materials/MeshLambertMaterial.js +283 -0
  532. package/src/materials/MeshMatcapMaterial.js +164 -0
  533. package/src/materials/MeshNormalMaterial.js +114 -0
  534. package/src/materials/MeshPhongMaterial.js +298 -0
  535. package/src/materials/MeshPhysicalMaterial.js +296 -4
  536. package/src/materials/MeshStandardMaterial.js +300 -2
  537. package/src/materials/MeshToonMaterial.js +219 -0
  538. package/src/materials/PointsMaterial.js +89 -0
  539. package/src/materials/RawShaderMaterial.js +25 -0
  540. package/src/materials/ShaderMaterial.js +234 -6
  541. package/src/materials/ShadowMaterial.js +54 -0
  542. package/src/materials/SpriteMaterial.js +82 -0
  543. package/src/materials/nodes/Line2NodeMaterial.js +158 -53
  544. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  545. package/src/materials/nodes/LineDashedNodeMaterial.js +81 -6
  546. package/src/materials/nodes/MeshBasicNodeMaterial.js +59 -2
  547. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  548. package/src/materials/nodes/MeshMatcapNodeMaterial.js +23 -3
  549. package/src/materials/nodes/MeshNormalNodeMaterial.js +27 -4
  550. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  551. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +276 -3
  552. package/src/materials/nodes/MeshSSSNodeMaterial.js +98 -10
  553. package/src/materials/nodes/MeshStandardNodeMaterial.js +83 -4
  554. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  555. package/src/materials/nodes/NodeMaterial.js +789 -74
  556. package/src/materials/nodes/NodeMaterials.js +0 -1
  557. package/src/materials/nodes/PointsNodeMaterial.js +180 -11
  558. package/src/materials/nodes/ShadowNodeMaterial.js +38 -0
  559. package/src/materials/nodes/SpriteNodeMaterial.js +86 -23
  560. package/src/materials/nodes/VolumeNodeMaterial.js +57 -84
  561. package/src/materials/nodes/manager/NodeMaterialObserver.js +329 -12
  562. package/src/math/Box2.js +177 -0
  563. package/src/math/Box3.js +271 -0
  564. package/src/math/Color.js +355 -11
  565. package/src/math/ColorManagement.js +158 -92
  566. package/src/math/Cylindrical.js +65 -6
  567. package/src/math/Euler.js +139 -5
  568. package/src/math/Frustum.js +108 -9
  569. package/src/math/FrustumArray.js +258 -0
  570. package/src/math/Interpolant.js +87 -8
  571. package/src/math/Line3.js +221 -2
  572. package/src/math/MathUtils.js +408 -20
  573. package/src/math/Matrix2.js +70 -0
  574. package/src/math/Matrix3.js +229 -4
  575. package/src/math/Matrix4.js +489 -94
  576. package/src/math/Plane.js +164 -2
  577. package/src/math/Quaternion.js +322 -90
  578. package/src/math/Ray.js +162 -0
  579. package/src/math/Sphere.js +175 -0
  580. package/src/math/Spherical.js +73 -11
  581. package/src/math/SphericalHarmonics3.js +112 -14
  582. package/src/math/Triangle.js +206 -2
  583. package/src/math/Vector2.js +396 -10
  584. package/src/math/Vector3.js +550 -15
  585. package/src/math/Vector4.js +415 -9
  586. package/src/math/interpolants/BezierInterpolant.js +108 -0
  587. package/src/math/interpolants/CubicInterpolant.js +10 -1
  588. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  589. package/src/math/interpolants/LinearInterpolant.js +13 -0
  590. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  591. package/src/nodes/Nodes.js +91 -88
  592. package/src/nodes/TSL.js +32 -38
  593. package/src/nodes/accessors/AccessorsUtils.js +37 -9
  594. package/src/nodes/accessors/Arrays.js +68 -0
  595. package/src/nodes/accessors/BatchNode.js +49 -14
  596. package/src/nodes/accessors/Bitangent.js +82 -13
  597. package/src/nodes/accessors/BufferAttributeNode.js +269 -8
  598. package/src/nodes/accessors/BufferNode.js +91 -2
  599. package/src/nodes/accessors/BuiltinNode.js +63 -0
  600. package/src/nodes/accessors/Camera.js +400 -10
  601. package/src/nodes/accessors/ClippingNode.js +149 -45
  602. package/src/nodes/accessors/CubeTextureNode.js +137 -7
  603. package/src/nodes/accessors/InstanceNode.js +245 -40
  604. package/src/nodes/accessors/InstancedMeshNode.js +50 -0
  605. package/src/nodes/accessors/Lights.js +88 -0
  606. package/src/nodes/accessors/MaterialNode.js +355 -13
  607. package/src/nodes/accessors/MaterialProperties.js +57 -1
  608. package/src/nodes/accessors/MaterialReferenceNode.js +52 -14
  609. package/src/nodes/accessors/ModelNode.js +117 -5
  610. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -39
  611. package/src/nodes/accessors/MorphNode.js +73 -26
  612. package/src/nodes/accessors/Normal.js +174 -19
  613. package/src/nodes/accessors/Object3DNode.js +146 -12
  614. package/src/nodes/accessors/PointUVNode.js +25 -0
  615. package/src/nodes/accessors/Position.js +119 -7
  616. package/src/nodes/accessors/ReferenceBaseNode.js +190 -4
  617. package/src/nodes/accessors/ReferenceNode.js +223 -8
  618. package/src/nodes/accessors/ReflectVector.js +29 -3
  619. package/src/nodes/accessors/RendererReferenceNode.js +45 -2
  620. package/src/nodes/accessors/SceneProperties.js +53 -0
  621. package/src/nodes/accessors/SkinningNode.js +180 -43
  622. package/src/nodes/accessors/StorageBufferNode.js +278 -26
  623. package/src/nodes/accessors/StorageTextureNode.js +205 -12
  624. package/src/nodes/accessors/Tangent.js +48 -10
  625. package/src/nodes/accessors/TangentUtils.js +46 -0
  626. package/src/nodes/accessors/Texture3DNode.js +104 -11
  627. package/src/nodes/accessors/TextureBicubic.js +31 -4
  628. package/src/nodes/accessors/TextureNode.js +564 -52
  629. package/src/nodes/accessors/TextureSizeNode.js +42 -1
  630. package/src/nodes/accessors/UV.js +9 -1
  631. package/src/nodes/accessors/UniformArrayNode.js +226 -34
  632. package/src/nodes/accessors/UserDataNode.js +46 -2
  633. package/src/nodes/accessors/VelocityNode.js +93 -3
  634. package/src/nodes/accessors/VertexColorNode.js +39 -4
  635. package/src/nodes/code/CodeNode.js +101 -8
  636. package/src/nodes/code/ExpressionNode.js +29 -2
  637. package/src/nodes/code/FunctionCallNode.js +98 -10
  638. package/src/nodes/code/FunctionNode.js +69 -2
  639. package/src/nodes/core/ArrayNode.js +174 -0
  640. package/src/nodes/core/AssignNode.js +80 -9
  641. package/src/nodes/core/AttributeNode.js +47 -4
  642. package/src/nodes/core/BypassNode.js +47 -3
  643. package/src/nodes/core/ConstNode.js +32 -0
  644. package/src/nodes/core/ContextNode.js +220 -14
  645. package/src/nodes/core/IndexNode.js +72 -7
  646. package/src/nodes/core/InputNode.js +50 -1
  647. package/src/nodes/core/InspectorNode.js +128 -0
  648. package/src/nodes/core/IsolateNode.js +133 -0
  649. package/src/nodes/core/LightingModel.js +65 -5
  650. package/src/nodes/core/MRTNode.js +113 -2
  651. package/src/nodes/core/Node.js +595 -36
  652. package/src/nodes/core/NodeAttribute.js +38 -0
  653. package/src/nodes/core/NodeBuilder.js +1840 -121
  654. package/src/nodes/core/NodeCache.js +41 -2
  655. package/src/nodes/core/NodeCode.js +31 -0
  656. package/src/nodes/core/NodeError.js +28 -0
  657. package/src/nodes/core/NodeFrame.js +153 -24
  658. package/src/nodes/core/NodeFunction.js +48 -1
  659. package/src/nodes/core/NodeFunctionInput.js +44 -0
  660. package/src/nodes/core/NodeParser.js +13 -1
  661. package/src/nodes/core/NodeUniform.js +53 -1
  662. package/src/nodes/core/NodeUtils.js +201 -51
  663. package/src/nodes/core/NodeVar.js +47 -1
  664. package/src/nodes/core/NodeVarying.js +47 -1
  665. package/src/nodes/core/OutputStructNode.js +54 -12
  666. package/src/nodes/core/ParameterNode.js +60 -2
  667. package/src/nodes/core/PropertyNode.js +286 -7
  668. package/src/nodes/core/StackNode.js +337 -20
  669. package/src/nodes/core/StackTrace.js +139 -0
  670. package/src/nodes/core/StructNode.js +134 -0
  671. package/src/nodes/core/StructType.js +13 -0
  672. package/src/nodes/core/StructTypeNode.js +126 -6
  673. package/src/nodes/core/SubBuildNode.js +89 -0
  674. package/src/nodes/core/TempNode.js +31 -5
  675. package/src/nodes/core/UniformGroupNode.js +85 -7
  676. package/src/nodes/core/UniformNode.js +163 -16
  677. package/src/nodes/core/VarNode.js +317 -10
  678. package/src/nodes/core/VaryingNode.js +115 -13
  679. package/src/nodes/core/constants.js +40 -0
  680. package/src/nodes/display/BlendModes.js +171 -0
  681. package/src/nodes/display/BumpMapNode.js +38 -2
  682. package/src/nodes/display/ColorAdjustment.js +118 -6
  683. package/src/nodes/display/ColorSpaceFunctions.js +22 -6
  684. package/src/nodes/display/ColorSpaceNode.js +97 -47
  685. package/src/nodes/display/FrontFacingNode.js +64 -7
  686. package/src/nodes/display/NormalMapNode.js +101 -54
  687. package/src/nodes/display/PassNode.js +690 -33
  688. package/src/nodes/display/RenderOutputNode.js +94 -4
  689. package/src/nodes/display/ScreenNode.js +138 -27
  690. package/src/nodes/display/ToneMappingFunctions.js +62 -10
  691. package/src/nodes/display/ToneMappingNode.js +88 -8
  692. package/src/nodes/display/ToonOutlinePassNode.js +84 -4
  693. package/src/nodes/display/ViewportDepthNode.js +227 -10
  694. package/src/nodes/display/ViewportDepthTextureNode.js +39 -5
  695. package/src/nodes/display/ViewportSharedTextureNode.js +35 -1
  696. package/src/nodes/display/ViewportTextureNode.js +171 -7
  697. package/src/nodes/fog/Fog.js +97 -0
  698. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  699. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  700. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  701. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  702. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  703. package/src/nodes/functions/BSDF/LTC.js +45 -1
  704. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
  705. package/src/nodes/functions/BasicLightingModel.js +28 -6
  706. package/src/nodes/functions/PhongLightingModel.js +36 -6
  707. package/src/nodes/functions/PhysicalLightingModel.js +336 -91
  708. package/src/nodes/functions/ShadowMaskModel.js +30 -3
  709. package/src/nodes/functions/ToonLightingModel.js +21 -2
  710. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  711. package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  712. package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
  713. package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  714. package/src/nodes/geometry/RangeNode.js +97 -8
  715. package/src/nodes/gpgpu/AtomicFunctionNode.js +198 -23
  716. package/src/nodes/gpgpu/BarrierNode.js +52 -3
  717. package/src/nodes/gpgpu/ComputeBuiltinNode.js +135 -6
  718. package/src/nodes/gpgpu/ComputeNode.js +212 -16
  719. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  720. package/src/nodes/gpgpu/WorkgroupInfoNode.js +143 -9
  721. package/src/nodes/lighting/AONode.js +18 -0
  722. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  723. package/src/nodes/lighting/AnalyticLightNode.js +186 -399
  724. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  725. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  726. package/src/nodes/lighting/DirectionalLightNode.js +12 -11
  727. package/src/nodes/lighting/EnvironmentNode.js +59 -19
  728. package/src/nodes/lighting/HemisphereLightNode.js +33 -2
  729. package/src/nodes/lighting/IESSpotLightNode.js +13 -1
  730. package/src/nodes/lighting/IrradianceNode.js +17 -0
  731. package/src/nodes/lighting/LightProbeNode.js +20 -0
  732. package/src/nodes/lighting/LightUtils.js +11 -3
  733. package/src/nodes/lighting/LightingContextNode.js +52 -4
  734. package/src/nodes/lighting/LightingNode.js +15 -6
  735. package/src/nodes/lighting/LightsNode.js +238 -35
  736. package/src/nodes/lighting/PointLightNode.js +60 -25
  737. package/src/nodes/lighting/PointShadowNode.js +325 -0
  738. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  739. package/src/nodes/lighting/RectAreaLightNode.js +50 -14
  740. package/src/nodes/lighting/ShadowBaseNode.js +81 -0
  741. package/src/nodes/lighting/ShadowFilterNode.js +264 -0
  742. package/src/nodes/lighting/ShadowNode.js +867 -0
  743. package/src/nodes/lighting/SpotLightNode.js +99 -18
  744. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  745. package/src/nodes/materialx/lib/mx_noise.js +166 -2
  746. package/src/nodes/math/BitcastNode.js +156 -0
  747. package/src/nodes/math/BitcountNode.js +433 -0
  748. package/src/nodes/math/ConditionalNode.js +110 -21
  749. package/src/nodes/math/Hash.js +8 -0
  750. package/src/nodes/math/MathNode.js +820 -97
  751. package/src/nodes/math/MathUtils.js +47 -1
  752. package/src/nodes/math/OperatorNode.js +517 -84
  753. package/src/nodes/math/PackFloatNode.js +98 -0
  754. package/src/nodes/math/TriNoise3D.js +17 -7
  755. package/src/nodes/math/UnpackFloatNode.js +96 -0
  756. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  757. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  758. package/src/nodes/pmrem/PMREMNode.js +180 -23
  759. package/src/nodes/pmrem/PMREMUtils.js +114 -5
  760. package/src/nodes/procedural/Checker.js +8 -0
  761. package/src/nodes/shapes/Shapes.js +33 -0
  762. package/src/nodes/tsl/TSLBase.js +10 -4
  763. package/src/nodes/tsl/TSLCore.js +732 -160
  764. package/src/nodes/utils/ArrayElementNode.js +55 -4
  765. package/src/nodes/utils/ConvertNode.js +31 -0
  766. package/src/nodes/utils/CubeMapNode.js +79 -2
  767. package/src/nodes/utils/DebugNode.js +83 -0
  768. package/src/nodes/utils/Discard.js +18 -2
  769. package/src/nodes/utils/EquirectUV.js +27 -0
  770. package/src/nodes/utils/EventNode.js +118 -0
  771. package/src/nodes/utils/FlipNode.js +38 -0
  772. package/src/nodes/utils/FunctionOverloadingNode.js +91 -22
  773. package/src/nodes/utils/JoinNode.js +57 -4
  774. package/src/nodes/utils/LoopNode.js +193 -55
  775. package/src/nodes/utils/MatcapUV.js +22 -0
  776. package/src/nodes/utils/MaxMipLevelNode.js +49 -1
  777. package/src/nodes/utils/MemberNode.js +120 -0
  778. package/src/nodes/utils/Oscillators.js +41 -0
  779. package/src/nodes/utils/Packing.js +30 -1
  780. package/src/nodes/utils/PostProcessingUtils.js +154 -0
  781. package/src/nodes/utils/RTTNode.js +165 -9
  782. package/src/nodes/utils/ReflectorNode.js +407 -21
  783. package/src/nodes/utils/RemapNode.js +81 -2
  784. package/src/nodes/utils/RotateNode.js +41 -1
  785. package/src/nodes/utils/SampleNode.js +91 -0
  786. package/src/nodes/utils/SetNode.js +44 -1
  787. package/src/nodes/utils/SplitNode.js +66 -3
  788. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  789. package/src/nodes/utils/SpriteUtils.js +16 -0
  790. package/src/nodes/utils/StorageArrayElementNode.js +56 -3
  791. package/src/nodes/utils/Timer.js +26 -0
  792. package/src/nodes/utils/TriplanarTextures.js +65 -0
  793. package/src/nodes/utils/UVUtils.js +48 -0
  794. package/src/nodes/utils/ViewportUtils.js +12 -0
  795. package/src/objects/BatchedMesh.js +798 -309
  796. package/src/objects/Bone.js +24 -0
  797. package/src/objects/ClippingGroup.js +68 -0
  798. package/src/objects/Group.js +24 -0
  799. package/src/objects/InstancedMesh.js +131 -2
  800. package/src/objects/LOD.js +99 -5
  801. package/src/objects/Line.js +90 -7
  802. package/src/objects/LineLoop.js +20 -0
  803. package/src/objects/LineSegments.js +20 -1
  804. package/src/objects/Mesh.js +84 -0
  805. package/src/objects/Points.js +60 -0
  806. package/src/objects/Skeleton.js +120 -5
  807. package/src/objects/SkinnedMesh.js +102 -6
  808. package/src/objects/Sprite.js +65 -1
  809. package/src/renderers/WebGL3DRenderTarget.js +26 -0
  810. package/src/renderers/WebGLArrayRenderTarget.js +26 -0
  811. package/src/renderers/WebGLCubeRenderTarget.js +41 -5
  812. package/src/renderers/WebGLRenderTarget.js +19 -0
  813. package/src/renderers/WebGLRenderer.js +1016 -278
  814. package/src/renderers/common/Animation.js +123 -14
  815. package/src/renderers/common/Attributes.js +41 -1
  816. package/src/renderers/common/Backend.js +623 -44
  817. package/src/renderers/common/Background.js +99 -16
  818. package/src/renderers/common/BindGroup.js +37 -2
  819. package/src/renderers/common/Binding.js +46 -0
  820. package/src/renderers/common/Bindings.js +211 -20
  821. package/src/renderers/common/BlendMode.js +143 -0
  822. package/src/renderers/common/Buffer.js +89 -0
  823. package/src/renderers/common/BufferUtils.js +25 -0
  824. package/src/renderers/common/BundleGroup.js +57 -0
  825. package/src/renderers/common/CanvasTarget.js +341 -0
  826. package/src/renderers/common/ChainMap.js +73 -10
  827. package/src/renderers/common/ClippingContext.js +172 -87
  828. package/src/renderers/common/Color4.js +40 -0
  829. package/src/renderers/common/ComputePipeline.js +24 -0
  830. package/src/renderers/common/Constants.js +2 -1
  831. package/src/renderers/common/CubeRenderTarget.js +77 -7
  832. package/src/renderers/common/DataMap.js +37 -1
  833. package/src/renderers/common/Geometries.js +163 -14
  834. package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  835. package/src/renderers/common/Info.js +81 -36
  836. package/src/renderers/common/InspectorBase.js +146 -0
  837. package/src/renderers/common/Lighting.js +57 -0
  838. package/src/renderers/common/Pipeline.js +22 -0
  839. package/src/renderers/common/Pipelines.js +150 -7
  840. package/src/renderers/common/PostProcessing.js +22 -84
  841. package/src/renderers/common/ProgrammableStage.js +60 -2
  842. package/src/renderers/common/QuadMesh.js +63 -6
  843. package/src/renderers/common/RenderBundle.js +14 -8
  844. package/src/renderers/common/RenderBundles.js +40 -10
  845. package/src/renderers/common/RenderContext.js +219 -4
  846. package/src/renderers/common/RenderContexts.js +54 -17
  847. package/src/renderers/common/RenderList.js +233 -24
  848. package/src/renderers/common/RenderLists.js +46 -6
  849. package/src/renderers/common/RenderObject.js +548 -46
  850. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  851. package/src/renderers/common/RenderObjects.js +133 -15
  852. package/src/renderers/common/RenderPipeline.js +216 -6
  853. package/src/renderers/common/Renderer.js +2155 -332
  854. package/src/renderers/common/RendererUtils.js +200 -0
  855. package/src/renderers/common/SampledTexture.js +99 -39
  856. package/src/renderers/common/Sampler.js +148 -1
  857. package/src/renderers/common/Storage3DTexture.js +100 -0
  858. package/src/renderers/common/StorageArrayTexture.js +84 -0
  859. package/src/renderers/common/StorageBuffer.js +38 -2
  860. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  861. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  862. package/src/renderers/common/StorageTexture.js +65 -0
  863. package/src/renderers/common/Textures.js +273 -57
  864. package/src/renderers/common/TimestampQueryPool.js +163 -0
  865. package/src/renderers/common/Uniform.js +233 -3
  866. package/src/renderers/common/UniformBuffer.js +19 -0
  867. package/src/renderers/common/UniformsGroup.js +235 -26
  868. package/src/renderers/common/XRManager.js +1677 -0
  869. package/src/renderers/common/XRRenderTarget.js +91 -0
  870. package/src/renderers/common/extras/PMREMGenerator.js +371 -108
  871. package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
  872. package/src/renderers/common/nodes/NodeLibrary.js +95 -17
  873. package/src/renderers/common/nodes/NodeManager.js +852 -0
  874. package/src/renderers/common/nodes/NodeSampledTexture.js +84 -8
  875. package/src/renderers/common/nodes/NodeSampler.js +41 -1
  876. package/src/renderers/common/nodes/NodeStorageBuffer.js +48 -3
  877. package/src/renderers/common/nodes/NodeUniform.js +285 -2
  878. package/src/renderers/common/nodes/NodeUniformBuffer.js +81 -0
  879. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  880. package/src/renderers/shaders/DFGLUTData.js +49 -0
  881. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  882. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  883. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  884. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  885. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  886. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
  887. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  888. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  889. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  890. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
  891. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  892. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
  893. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  894. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  895. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  896. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +154 -59
  897. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  898. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  899. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  900. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  901. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
  902. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  903. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  904. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +230 -181
  905. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  906. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  907. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  908. package/src/renderers/shaders/ShaderChunk.js +3 -3
  909. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  910. package/src/renderers/shaders/ShaderLib/depth.glsl.js +14 -2
  911. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  912. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  913. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  914. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  915. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  916. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  917. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  918. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  919. package/src/renderers/shaders/ShaderLib.js +7 -5
  920. package/src/renderers/shaders/UniformsLib.js +2 -7
  921. package/src/renderers/shaders/UniformsUtils.js +21 -2
  922. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  923. package/src/renderers/webgl/WebGLBackground.js +30 -5
  924. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  925. package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
  926. package/src/renderers/webgl/WebGLCapabilities.js +7 -14
  927. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  928. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  929. package/src/renderers/webgl/WebGLGeometries.js +10 -35
  930. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
  931. package/src/renderers/webgl/WebGLInfo.js +3 -1
  932. package/src/renderers/webgl/WebGLLights.js +18 -1
  933. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  934. package/src/renderers/webgl/WebGLObjects.js +3 -1
  935. package/src/renderers/webgl/WebGLOutput.js +267 -0
  936. package/src/renderers/webgl/WebGLProgram.js +87 -148
  937. package/src/renderers/webgl/WebGLPrograms.js +53 -51
  938. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  939. package/src/renderers/webgl/WebGLShadowMap.js +204 -28
  940. package/src/renderers/webgl/WebGLState.js +88 -56
  941. package/src/renderers/webgl/WebGLTextures.js +293 -59
  942. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  943. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  944. package/src/renderers/webgl/WebGLUtils.js +7 -5
  945. package/src/renderers/webgl-fallback/WebGLBackend.js +1416 -293
  946. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
  947. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +785 -92
  948. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +62 -1
  949. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  950. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +3 -3
  951. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  952. package/src/renderers/webgl-fallback/utils/WebGLState.js +584 -20
  953. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +468 -80
  954. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +396 -0
  955. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +72 -24
  956. package/src/renderers/webgpu/WebGPUBackend.js +1517 -428
  957. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +31 -4
  958. package/src/renderers/webgpu/WebGPURenderer.js +55 -4
  959. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +23 -16
  960. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +37 -42
  961. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +1335 -241
  962. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +32 -4
  963. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  964. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +144 -20
  965. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +460 -116
  966. package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -4
  967. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +283 -69
  968. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +225 -178
  969. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +583 -191
  970. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +310 -0
  971. package/src/renderers/webgpu/utils/WebGPUUtils.js +150 -28
  972. package/src/renderers/webxr/WebXRController.js +87 -2
  973. package/src/renderers/webxr/WebXRDepthSensing.js +52 -7
  974. package/src/renderers/webxr/WebXRManager.js +275 -15
  975. package/src/scenes/Fog.js +60 -0
  976. package/src/scenes/FogExp2.js +51 -0
  977. package/src/scenes/Scene.js +88 -0
  978. package/src/textures/CanvasTexture.js +28 -0
  979. package/src/textures/CompressedArrayTexture.js +57 -0
  980. package/src/textures/CompressedCubeTexture.js +29 -0
  981. package/src/textures/CompressedTexture.js +64 -6
  982. package/src/textures/CubeDepthTexture.js +76 -0
  983. package/src/textures/CubeTexture.js +52 -4
  984. package/src/textures/Data3DTexture.js +79 -2
  985. package/src/textures/DataArrayTexture.js +93 -0
  986. package/src/textures/DataTexture.js +65 -0
  987. package/src/textures/DepthTexture.js +59 -11
  988. package/src/textures/ExternalTexture.js +56 -0
  989. package/src/textures/FramebufferTexture.js +62 -0
  990. package/src/textures/Source.js +106 -4
  991. package/src/textures/Texture.js +488 -6
  992. package/src/textures/VideoFrameTexture.js +72 -0
  993. package/src/textures/VideoTexture.js +78 -6
  994. package/src/utils.js +322 -3
  995. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  996. package/examples/jsm/animation/MMDPhysics.js +0 -1406
  997. package/examples/jsm/cameras/CinematicCamera.js +0 -208
  998. package/examples/jsm/effects/PeppersGhostEffect.js +0 -153
  999. package/examples/jsm/exporters/MMDExporter.js +0 -217
  1000. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  1001. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
  1002. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  1003. package/examples/jsm/loaders/GLTFLoaderAnimationPointer.js +0 -729
  1004. package/examples/jsm/loaders/MMDLoader.js +0 -2295
  1005. package/examples/jsm/loaders/RGBMLoader.js +0 -1081
  1006. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -432
  1007. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -144
  1008. package/examples/jsm/misc/Timer.js +0 -128
  1009. package/examples/jsm/objects/InstancedPoints.js +0 -21
  1010. package/examples/jsm/shaders/GodRaysShader.js +0 -321
  1011. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  1012. package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
  1013. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
  1014. package/src/nodes/accessors/SceneNode.js +0 -55
  1015. package/src/nodes/code/ScriptableNode.js +0 -505
  1016. package/src/nodes/code/ScriptableValueNode.js +0 -170
  1017. package/src/nodes/core/CacheNode.js +0 -50
  1018. package/src/nodes/core/UniformGroup.js +0 -13
  1019. package/src/nodes/display/AfterImageNode.js +0 -158
  1020. package/src/nodes/display/AnaglyphPassNode.js +0 -67
  1021. package/src/nodes/display/AnamorphicNode.js +0 -151
  1022. package/src/nodes/display/BlendMode.js +0 -54
  1023. package/src/nodes/display/BloomNode.js +0 -341
  1024. package/src/nodes/display/DenoiseNode.js +0 -204
  1025. package/src/nodes/display/DepthOfFieldNode.js +0 -124
  1026. package/src/nodes/display/DotScreenNode.js +0 -66
  1027. package/src/nodes/display/FXAANode.js +0 -332
  1028. package/src/nodes/display/FilmNode.js +0 -56
  1029. package/src/nodes/display/GTAONode.js +0 -331
  1030. package/src/nodes/display/GaussianBlurNode.js +0 -213
  1031. package/src/nodes/display/Lut3DNode.js +0 -57
  1032. package/src/nodes/display/MotionBlur.js +0 -25
  1033. package/src/nodes/display/ParallaxBarrierPassNode.js +0 -58
  1034. package/src/nodes/display/PixelationPassNode.js +0 -213
  1035. package/src/nodes/display/PosterizeNode.js +0 -33
  1036. package/src/nodes/display/RGBShiftNode.js +0 -53
  1037. package/src/nodes/display/StereoCompositePassNode.js +0 -110
  1038. package/src/nodes/display/TransitionNode.js +0 -80
  1039. package/src/nodes/fog/FogExp2Node.js +0 -35
  1040. package/src/nodes/fog/FogNode.js +0 -50
  1041. package/src/nodes/fog/FogRangeNode.js +0 -36
  1042. package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
  1043. package/src/nodes/utils/EquirectUVNode.js +0 -36
  1044. package/src/nodes/utils/MatcapUVNode.js +0 -33
  1045. package/src/nodes/utils/OscNode.js +0 -85
  1046. package/src/nodes/utils/SpriteSheetUVNode.js +0 -45
  1047. package/src/nodes/utils/TimerNode.js +0 -97
  1048. package/src/nodes/utils/TriplanarTexturesNode.js +0 -64
  1049. package/src/renderers/common/nodes/Nodes.js +0 -534
  1050. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  1051. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -136
@@ -1,6 +1,7 @@
1
1
  import {
2
- GPUTextureFormat, GPUAddressMode, GPUFilterMode, GPUTextureDimension, GPUFeatureName
2
+ GPUTextureFormat, GPUAddressMode, GPUFilterMode, GPUTextureDimension, GPUFeatureName, GPUTextureViewDimension
3
3
  } from './WebGPUConstants.js';
4
+ import { ColorManagement } from '../../../math/ColorManagement.js';
4
5
 
5
6
  import WebGPUTexturePassUtils from './WebGPUTexturePassUtils.js';
6
7
 
@@ -9,15 +10,17 @@ import {
9
10
  NearestFilter, NearestMipmapNearestFilter, NearestMipmapLinearFilter,
10
11
  RepeatWrapping, MirroredRepeatWrapping,
11
12
  RGB_ETC2_Format, RGBA_ETC2_EAC_Format,
12
- RGBAFormat, RGBFormat, RedFormat, RGFormat, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, UnsignedByteType, FloatType, HalfFloatType, SRGBColorSpace, DepthFormat, DepthStencilFormat,
13
+ RGBAFormat, RGBFormat, RedFormat, RGFormat, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, UnsignedByteType, FloatType, HalfFloatType, SRGBTransfer, DepthFormat, DepthStencilFormat,
13
14
  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,
14
15
  RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, UnsignedIntType, UnsignedShortType, UnsignedInt248Type, UnsignedInt5999Type,
15
16
  NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, IntType, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat,
16
- CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping
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,
18
+ R11_EAC_Format, SIGNED_R11_EAC_Format, RG11_EAC_Format, SIGNED_RG11_EAC_Format,
19
+ Compatibility
17
20
  } from '../../../constants.js';
18
21
  import { CubeTexture } from '../../../textures/CubeTexture.js';
19
- import { DepthTexture } from '../../../textures/DepthTexture.js';
20
22
  import { Texture } from '../../../textures/Texture.js';
23
+ import { warn, error } from '../../../utils.js';
21
24
 
22
25
  const _compareToWebGPU = {
23
26
  [ NeverCompare ]: 'never',
@@ -32,52 +35,165 @@ const _compareToWebGPU = {
32
35
 
33
36
  const _flipMap = [ 0, 1, 3, 2, 4, 5 ];
34
37
 
38
+ /**
39
+ * A WebGPU backend utility module for managing textures.
40
+ *
41
+ * @private
42
+ */
35
43
  class WebGPUTextureUtils {
36
44
 
45
+ /**
46
+ * Constructs a new utility object.
47
+ *
48
+ * @param {WebGPUBackend} backend - The WebGPU backend.
49
+ */
37
50
  constructor( backend ) {
38
51
 
52
+ /**
53
+ * A reference to the WebGPU backend.
54
+ *
55
+ * @type {WebGPUBackend}
56
+ */
39
57
  this.backend = backend;
40
58
 
59
+ /**
60
+ * A reference to the pass utils.
61
+ *
62
+ * @type {?WebGPUTexturePassUtils}
63
+ * @default null
64
+ */
41
65
  this._passUtils = null;
42
66
 
67
+ /**
68
+ * A dictionary for managing default textures. The key
69
+ * is the texture format, the value the texture object.
70
+ *
71
+ * @type {Object<string,Texture>}
72
+ */
43
73
  this.defaultTexture = {};
74
+
75
+ /**
76
+ * A dictionary for managing default cube textures. The key
77
+ * is the texture format, the value the texture object.
78
+ *
79
+ * @type {Object<string,CubeTexture>}
80
+ */
44
81
  this.defaultCubeTexture = {};
45
- this.defaultVideoFrame = null;
46
82
 
47
- this.colorBuffer = null;
83
+ /**
84
+ * A default video frame.
85
+ *
86
+ * @type {?VideoFrame}
87
+ * @default null
88
+ */
89
+ this.defaultVideoFrame = null;
48
90
 
49
- this.depthTexture = new DepthTexture();
50
- this.depthTexture.name = 'depthBuffer';
91
+ /**
92
+ * A cache of shared texture samplers.
93
+ *
94
+ * @type {Map<string, Object>}
95
+ */
96
+ this._samplerCache = new Map();
51
97
 
52
98
  }
53
99
 
54
- createSampler( texture ) {
100
+ /**
101
+ * Creates a GPU sampler for the given texture.
102
+ *
103
+ * @param {Texture} texture - The texture to create the sampler for.
104
+ * @return {string} The current sampler key.
105
+ */
106
+ updateSampler( texture ) {
55
107
 
56
108
  const backend = this.backend;
57
- const device = backend.device;
58
-
59
- const textureGPU = backend.get( texture );
60
-
61
- const samplerDescriptorGPU = {
62
- addressModeU: this._convertAddressMode( texture.wrapS ),
63
- addressModeV: this._convertAddressMode( texture.wrapT ),
64
- addressModeW: this._convertAddressMode( texture.wrapR ),
65
- magFilter: this._convertFilterMode( texture.magFilter ),
66
- minFilter: this._convertFilterMode( texture.minFilter ),
67
- mipmapFilter: this._convertFilterMode( texture.minFilter ),
68
- maxAnisotropy: texture.anisotropy
69
- };
70
109
 
71
- if ( texture.isDepthTexture && texture.compareFunction !== null ) {
110
+ const samplerKey = texture.minFilter + '-' + texture.magFilter + '-' +
111
+ texture.wrapS + '-' + texture.wrapT + '-' + ( texture.wrapR || '0' ) + '-' +
112
+ texture.anisotropy + '-' + ( texture.compareFunction || 0 );
113
+
114
+ let samplerData = this._samplerCache.get( samplerKey );
115
+
116
+ if ( samplerData === undefined ) {
117
+
118
+ const samplerDescriptorGPU = {
119
+ addressModeU: this._convertAddressMode( texture.wrapS ),
120
+ addressModeV: this._convertAddressMode( texture.wrapT ),
121
+ addressModeW: this._convertAddressMode( texture.wrapR ),
122
+ magFilter: this._convertFilterMode( texture.magFilter ),
123
+ minFilter: this._convertFilterMode( texture.minFilter ),
124
+ mipmapFilter: this._convertFilterMode( texture.minFilter ),
125
+ maxAnisotropy: 1
126
+ };
127
+
128
+ // Depth textures without compare function must use non-filtering (nearest) sampling
129
+ if ( texture.isDepthTexture && texture.compareFunction === null ) {
130
+
131
+ samplerDescriptorGPU.magFilter = GPUFilterMode.Nearest;
132
+ samplerDescriptorGPU.minFilter = GPUFilterMode.Nearest;
133
+ samplerDescriptorGPU.mipmapFilter = GPUFilterMode.Nearest;
134
+
135
+ }
136
+
137
+ // anisotropy can only be used when all filter modes are set to linear.
138
+
139
+ if ( samplerDescriptorGPU.magFilter === GPUFilterMode.Linear && samplerDescriptorGPU.minFilter === GPUFilterMode.Linear && samplerDescriptorGPU.mipmapFilter === GPUFilterMode.Linear ) {
140
+
141
+ samplerDescriptorGPU.maxAnisotropy = texture.anisotropy;
142
+
143
+ }
144
+
145
+ if ( texture.isDepthTexture && texture.compareFunction !== null && backend.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {
146
+
147
+ samplerDescriptorGPU.compare = _compareToWebGPU[ texture.compareFunction ];
148
+
149
+ }
150
+
151
+ const sampler = backend.device.createSampler( samplerDescriptorGPU );
152
+
153
+ samplerData = { sampler, usedTimes: 0 };
72
154
 
73
- samplerDescriptorGPU.compare = _compareToWebGPU[ texture.compareFunction ];
155
+ this._samplerCache.set( samplerKey, samplerData );
74
156
 
75
157
  }
76
158
 
77
- textureGPU.sampler = device.createSampler( samplerDescriptorGPU );
159
+ const textureData = backend.get( texture );
160
+
161
+ if ( textureData.sampler !== samplerData.sampler ) {
162
+
163
+ // check if previous sampler is unused so it can be deleted
164
+
165
+ if ( textureData.sampler !== undefined ) {
166
+
167
+ const oldSamplerData = this._samplerCache.get( textureData.samplerKey );
168
+ oldSamplerData.usedTimes --;
169
+
170
+ if ( oldSamplerData.usedTimes === 0 ) {
171
+
172
+ this._samplerCache.delete( textureData.samplerKey );
173
+
174
+ }
175
+
176
+ }
177
+
178
+ // update to new sampler data
179
+
180
+ textureData.samplerKey = samplerKey;
181
+ textureData.sampler = samplerData.sampler;
182
+
183
+ samplerData.usedTimes ++;
184
+
185
+ }
186
+
187
+ return samplerKey;
78
188
 
79
189
  }
80
190
 
191
+ /**
192
+ * Creates a default texture for the given texture that can be used
193
+ * as a placeholder until the actual texture is ready for usage.
194
+ *
195
+ * @param {Texture} texture - The texture to create a default texture for.
196
+ */
81
197
  createDefaultTexture( texture ) {
82
198
 
83
199
  let textureGPU;
@@ -88,10 +204,6 @@ class WebGPUTextureUtils {
88
204
 
89
205
  textureGPU = this._getDefaultCubeTextureGPU( format );
90
206
 
91
- } else if ( texture.isVideoTexture ) {
92
-
93
- this.backend.get( texture ).externalTexture = this._getDefaultVideoFrame();
94
-
95
207
  } else {
96
208
 
97
209
  textureGPU = this._getDefaultTextureGPU( format );
@@ -102,6 +214,12 @@ class WebGPUTextureUtils {
102
214
 
103
215
  }
104
216
 
217
+ /**
218
+ * Defines a texture on the GPU for the given texture object.
219
+ *
220
+ * @param {Texture} texture - The texture.
221
+ * @param {Object} [options={}] - Optional configuration parameter.
222
+ */
105
223
  createTexture( texture, options = {} ) {
106
224
 
107
225
  const backend = this.backend;
@@ -113,22 +231,41 @@ class WebGPUTextureUtils {
113
231
 
114
232
  }
115
233
 
234
+ if ( texture.isExternalTexture ) {
235
+
236
+ textureData.texture = texture.sourceTexture;
237
+ textureData.initialized = true;
238
+
239
+ return;
240
+
241
+ }
242
+
116
243
  if ( options.needsMipmaps === undefined ) options.needsMipmaps = false;
117
244
  if ( options.levels === undefined ) options.levels = 1;
118
245
  if ( options.depth === undefined ) options.depth = 1;
119
246
 
120
247
  const { width, height, depth, levels } = options;
121
248
 
249
+ if ( texture.isFramebufferTexture ) {
250
+
251
+ if ( options.renderTarget ) {
252
+
253
+ options.format = this.backend.utils.getCurrentColorFormat( options.renderTarget );
254
+
255
+ } else {
256
+
257
+ options.format = this.backend.utils.getPreferredCanvasFormat();
258
+
259
+ }
260
+
261
+ }
262
+
122
263
  const dimension = this._getDimension( texture );
123
264
  const format = texture.internalFormat || options.format || getFormat( texture, backend.device );
124
265
 
125
266
  textureData.format = format;
126
267
 
127
- let sampleCount = options.sampleCount !== undefined ? options.sampleCount : 1;
128
-
129
- sampleCount = backend.utils.getSampleCount( sampleCount );
130
-
131
- const primarySampleCount = texture.isRenderTargetTexture && ! texture.isMultisampleRenderTargetTexture ? 1 : sampleCount;
268
+ const { samples, primarySamples, isMSAA } = backend.utils.getTextureSampleData( texture );
132
269
 
133
270
  let usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC;
134
271
 
@@ -138,7 +275,7 @@ class WebGPUTextureUtils {
138
275
 
139
276
  }
140
277
 
141
- if ( texture.isCompressedTexture !== true && texture.isCompressedArrayTexture !== true ) {
278
+ if ( texture.isCompressedTexture !== true && texture.isCompressedArrayTexture !== true && format !== GPUTextureFormat.RGB9E5UFloat ) {
142
279
 
143
280
  usage |= GPUTextureUsage.RENDER_ATTACHMENT;
144
281
 
@@ -152,7 +289,7 @@ class WebGPUTextureUtils {
152
289
  depthOrArrayLayers: depth,
153
290
  },
154
291
  mipLevelCount: levels,
155
- sampleCount: primarySampleCount,
292
+ sampleCount: primarySamples,
156
293
  dimension: dimension,
157
294
  format: format,
158
295
  usage: usage
@@ -160,38 +297,40 @@ class WebGPUTextureUtils {
160
297
 
161
298
  // texture creation
162
299
 
163
- if ( texture.isVideoTexture ) {
300
+ if ( format === undefined ) {
164
301
 
165
- const video = texture.source.data;
166
- const videoFrame = new VideoFrame( video );
302
+ warn( 'WebGPURenderer: Texture format not supported.' );
167
303
 
168
- textureDescriptorGPU.size.width = videoFrame.displayWidth;
169
- textureDescriptorGPU.size.height = videoFrame.displayHeight;
304
+ this.createDefaultTexture( texture );
305
+ return;
170
306
 
171
- videoFrame.close();
307
+ }
172
308
 
173
- textureData.externalTexture = video;
309
+ if ( texture.isCubeTexture ) {
174
310
 
175
- } else {
311
+ textureDescriptorGPU.textureBindingViewDimension = GPUTextureViewDimension.Cube;
176
312
 
177
- if ( format === undefined ) {
313
+ }
178
314
 
179
- console.warn( 'WebGPURenderer: Texture format not supported.' );
315
+ try {
180
316
 
181
- return this.createDefaultTexture( texture );
317
+ textureData.texture = backend.device.createTexture( textureDescriptorGPU );
182
318
 
183
- }
319
+ } catch ( e ) {
184
320
 
185
- textureData.texture = backend.device.createTexture( textureDescriptorGPU );
321
+ warn( 'WebGPURenderer: Failed to create texture with descriptor:', textureDescriptorGPU );
322
+ this.createDefaultTexture( texture );
323
+ return;
186
324
 
187
325
  }
188
326
 
189
- if ( texture.isRenderTargetTexture && sampleCount > 1 && ! texture.isMultisampleRenderTargetTexture ) {
327
+ if ( isMSAA ) {
190
328
 
191
329
  const msaaTextureDescriptorGPU = Object.assign( {}, textureDescriptorGPU );
192
330
 
193
331
  msaaTextureDescriptorGPU.label = msaaTextureDescriptorGPU.label + '-msaa';
194
- msaaTextureDescriptorGPU.sampleCount = sampleCount;
332
+ msaaTextureDescriptorGPU.sampleCount = samples;
333
+ msaaTextureDescriptorGPU.mipLevelCount = 1; // See https://www.w3.org/TR/webgpu/#texture-creation
195
334
 
196
335
  textureData.msaaTexture = backend.device.createTexture( msaaTextureDescriptorGPU );
197
336
 
@@ -203,12 +342,18 @@ class WebGPUTextureUtils {
203
342
 
204
343
  }
205
344
 
206
- destroyTexture( texture ) {
345
+ /**
346
+ * Destroys the GPU data for the given texture object.
347
+ *
348
+ * @param {Texture} texture - The texture.
349
+ * @param {boolean} [isDefaultTexture=false] - Whether the texture uses a default GPU texture or not.
350
+ */
351
+ destroyTexture( texture, isDefaultTexture = false ) {
207
352
 
208
353
  const backend = this.backend;
209
354
  const textureData = backend.get( texture );
210
355
 
211
- textureData.texture.destroy();
356
+ if ( textureData.texture !== undefined && isDefaultTexture === false ) textureData.texture.destroy();
212
357
 
213
358
  if ( textureData.msaaTexture !== undefined ) textureData.msaaTexture.destroy();
214
359
 
@@ -216,70 +361,101 @@ class WebGPUTextureUtils {
216
361
 
217
362
  }
218
363
 
219
- destroySampler( texture ) {
220
-
221
- const backend = this.backend;
222
- const textureData = backend.get( texture );
223
-
224
- delete textureData.sampler;
225
-
226
- }
227
-
228
- generateMipmaps( texture ) {
364
+ /**
365
+ * Generates mipmaps for the given texture.
366
+ *
367
+ * @param {Texture} texture - The texture.
368
+ * @param {?GPUCommandEncoder} [encoder=null] - An optional command encoder used to generate mipmaps.
369
+ */
370
+ generateMipmaps( texture, encoder = null ) {
229
371
 
230
372
  const textureData = this.backend.get( texture );
231
373
 
232
- if ( texture.isCubeTexture ) {
233
-
234
- for ( let i = 0; i < 6; i ++ ) {
235
-
236
- this._generateMipmaps( textureData.texture, textureData.textureDescriptorGPU, i );
374
+ this._generateMipmaps( textureData.texture, encoder );
237
375
 
238
- }
376
+ }
239
377
 
240
- } else {
378
+ /**
379
+ * Returns the color buffer representing the color
380
+ * attachment of the default framebuffer.
381
+ *
382
+ * @return {GPUTexture} The color buffer.
383
+ */
384
+ getColorBuffer() {
241
385
 
242
- const depth = texture.image.depth || 1;
386
+ const backend = this.backend;
387
+ const canvasTarget = backend.renderer.getCanvasTarget();
388
+ const { width, height } = backend.getDrawingBufferSize();
389
+ const samples = backend.renderer.currentSamples;
243
390
 
244
- for ( let i = 0; i < depth; i ++ ) {
391
+ const colorTexture = canvasTarget.colorTexture;
392
+ const colorTextureData = backend.get( colorTexture );
245
393
 
246
- this._generateMipmaps( textureData.texture, textureData.textureDescriptorGPU, i );
394
+ if ( colorTexture.width === width && colorTexture.height === height && colorTexture.samples === samples ) {
247
395
 
248
- }
396
+ return colorTextureData.texture;
249
397
 
250
398
  }
251
399
 
252
- }
400
+ // recreate
253
401
 
254
- getColorBuffer() {
402
+ let colorBuffer = colorTextureData.texture;
255
403
 
256
- if ( this.colorBuffer ) this.colorBuffer.destroy();
257
-
258
- const backend = this.backend;
259
- const { width, height } = backend.getDrawingBufferSize();
404
+ if ( colorBuffer ) colorBuffer.destroy();
260
405
 
261
- this.colorBuffer = backend.device.createTexture( {
406
+ colorBuffer = backend.device.createTexture( {
262
407
  label: 'colorBuffer',
263
408
  size: {
264
409
  width: width,
265
410
  height: height,
266
411
  depthOrArrayLayers: 1
267
412
  },
268
- sampleCount: backend.utils.getSampleCount( backend.renderer.samples ),
413
+ sampleCount: backend.utils.getSampleCount( backend.renderer.currentSamples ),
269
414
  format: backend.utils.getPreferredCanvasFormat(),
270
415
  usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC
271
416
  } );
272
417
 
273
- return this.colorBuffer;
418
+ //
419
+
420
+ colorTexture.source.width = width;
421
+ colorTexture.source.height = height;
422
+ colorTexture.samples = samples;
423
+
424
+ colorTextureData.texture = colorBuffer;
425
+
426
+ return colorBuffer;
274
427
 
275
428
  }
276
429
 
430
+ /**
431
+ * Returns the depth buffer representing the depth
432
+ * attachment of the default framebuffer.
433
+ *
434
+ * @param {boolean} [depth=true] - Whether depth is enabled or not.
435
+ * @param {boolean} [stencil=false] - Whether stencil is enabled or not.
436
+ * @return {GPUTexture} The depth buffer.
437
+ */
277
438
  getDepthBuffer( depth = true, stencil = false ) {
278
439
 
279
440
  const backend = this.backend;
441
+ const canvasTarget = backend.renderer.getCanvasTarget();
280
442
  const { width, height } = backend.getDrawingBufferSize();
443
+ const samples = backend.renderer.currentSamples;
444
+
445
+ const depthTexture = canvasTarget.depthTexture;
446
+
447
+ if ( depthTexture.width === width &&
448
+ depthTexture.height === height &&
449
+ depthTexture.samples === samples &&
450
+ depthTexture.depth === depth &&
451
+ depthTexture.stencil === stencil ) {
452
+
453
+ return backend.get( depthTexture ).texture;
454
+
455
+ }
456
+
457
+ //
281
458
 
282
- const depthTexture = this.depthTexture;
283
459
  const depthTextureGPU = backend.get( depthTexture ).texture;
284
460
 
285
461
  let format, type;
@@ -298,7 +474,7 @@ class WebGPUTextureUtils {
298
474
 
299
475
  if ( depthTextureGPU !== undefined ) {
300
476
 
301
- if ( depthTexture.image.width === width && depthTexture.image.height === height && depthTexture.format === format && depthTexture.type === type ) {
477
+ if ( depthTexture.image.width === width && depthTexture.image.height === height && depthTexture.format === format && depthTexture.type === type && depthTexture.samples === samples ) {
302
478
 
303
479
  return depthTextureGPU;
304
480
 
@@ -308,21 +484,31 @@ class WebGPUTextureUtils {
308
484
 
309
485
  }
310
486
 
487
+ // recreate
488
+
311
489
  depthTexture.name = 'depthBuffer';
312
490
  depthTexture.format = format;
313
491
  depthTexture.type = type;
314
492
  depthTexture.image.width = width;
315
493
  depthTexture.image.height = height;
494
+ depthTexture.samples = samples;
316
495
 
317
- this.createTexture( depthTexture, { sampleCount: backend.utils.getSampleCount( backend.renderer.samples ), width, height } );
496
+ this.createTexture( depthTexture, { width, height } );
318
497
 
319
498
  return backend.get( depthTexture ).texture;
320
499
 
321
500
  }
322
501
 
502
+ /**
503
+ * Uploads the updated texture data to the GPU.
504
+ *
505
+ * @param {Texture} texture - The texture.
506
+ * @param {Object} [options={}] - Optional configuration parameter.
507
+ */
323
508
  updateTexture( texture, options ) {
324
509
 
325
510
  const textureData = this.backend.get( texture );
511
+ const mipmaps = texture.mipmaps;
326
512
 
327
513
  const { textureDescriptorGPU } = textureData;
328
514
 
@@ -333,9 +519,24 @@ class WebGPUTextureUtils {
333
519
 
334
520
  if ( texture.isDataTexture ) {
335
521
 
336
- this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY );
522
+ if ( mipmaps.length > 0 ) {
523
+
524
+ for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
525
+
526
+ const mipmap = mipmaps[ i ];
527
+
528
+ this._copyBufferToTexture( mipmap, textureData.texture, textureDescriptorGPU, 0, texture.flipY, 0, i );
529
+
530
+ }
337
531
 
338
- } else if ( texture.isDataArrayTexture || texture.isData3DTexture ) {
532
+
533
+ } else {
534
+
535
+ this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY );
536
+
537
+ }
538
+
539
+ } else if ( texture.isArrayTexture || texture.isDataArrayTexture || texture.isData3DTexture ) {
339
540
 
340
541
  for ( let i = 0; i < options.image.depth; i ++ ) {
341
542
 
@@ -349,17 +550,26 @@ class WebGPUTextureUtils {
349
550
 
350
551
  } else if ( texture.isCubeTexture ) {
351
552
 
352
- this._copyCubeMapToTexture( options.images, textureData.texture, textureDescriptorGPU, texture.flipY );
553
+ this._copyCubeMapToTexture( texture, textureData.texture, textureDescriptorGPU );
353
554
 
354
- } else if ( texture.isVideoTexture ) {
555
+ } else {
355
556
 
356
- const video = texture.source.data;
557
+ if ( mipmaps.length > 0 ) {
357
558
 
358
- textureData.externalTexture = video;
559
+ for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
359
560
 
360
- } else {
561
+ const mipmap = mipmaps[ i ];
562
+
563
+ this._copyImageToTexture( mipmap, textureData.texture, textureDescriptorGPU, 0, texture.flipY, texture.premultiplyAlpha, i );
564
+
565
+ }
361
566
 
362
- this._copyImageToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY );
567
+
568
+ } else {
569
+
570
+ this._copyImageToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY, texture.premultiplyAlpha );
571
+
572
+ }
363
573
 
364
574
  }
365
575
 
@@ -367,10 +577,20 @@ class WebGPUTextureUtils {
367
577
 
368
578
  textureData.version = texture.version;
369
579
 
370
- if ( texture.onUpdate ) texture.onUpdate( texture );
371
-
372
580
  }
373
581
 
582
+ /**
583
+ * Returns texture data as a typed array.
584
+ *
585
+ * @async
586
+ * @param {Texture} texture - The texture to copy.
587
+ * @param {number} x - The x coordinate of the copy origin.
588
+ * @param {number} y - The y coordinate of the copy origin.
589
+ * @param {number} width - The width of the copy.
590
+ * @param {number} height - The height of the copy.
591
+ * @param {number} faceIndex - The face index.
592
+ * @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.
593
+ */
374
594
  async copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {
375
595
 
376
596
  const device = this.backend.device;
@@ -385,7 +605,7 @@ class WebGPUTextureUtils {
385
605
 
386
606
  const readBuffer = device.createBuffer(
387
607
  {
388
- size: width * height * bytesPerTexel,
608
+ size: ( ( height - 1 ) * bytesPerRow ) + ( width * bytesPerTexel ), // see https://github.com/mrdoob/three.js/issues/31658#issuecomment-3229442010
389
609
  usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ
390
610
  }
391
611
  );
@@ -420,14 +640,22 @@ class WebGPUTextureUtils {
420
640
 
421
641
  }
422
642
 
423
- _isEnvironmentTexture( texture ) {
424
-
425
- const mapping = texture.mapping;
643
+ /**
644
+ * Frees all internal resources.
645
+ */
646
+ dispose() {
426
647
 
427
- return ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) || ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );
648
+ this._samplerCache.clear();
428
649
 
429
650
  }
430
651
 
652
+ /**
653
+ * Returns the default GPU texture for the given format.
654
+ *
655
+ * @private
656
+ * @param {string} format - The GPU format.
657
+ * @return {GPUTexture} The GPU texture.
658
+ */
431
659
  _getDefaultTextureGPU( format ) {
432
660
 
433
661
  let defaultTexture = this.defaultTexture[ format ];
@@ -448,9 +676,16 @@ class WebGPUTextureUtils {
448
676
 
449
677
  }
450
678
 
679
+ /**
680
+ * Returns the default GPU cube texture for the given format.
681
+ *
682
+ * @private
683
+ * @param {string} format - The GPU format.
684
+ * @return {GPUTexture} The GPU texture.
685
+ */
451
686
  _getDefaultCubeTextureGPU( format ) {
452
687
 
453
- let defaultCubeTexture = this.defaultTexture[ format ];
688
+ let defaultCubeTexture = this.defaultCubeTexture[ format ];
454
689
 
455
690
  if ( defaultCubeTexture === undefined ) {
456
691
 
@@ -468,42 +703,50 @@ class WebGPUTextureUtils {
468
703
 
469
704
  }
470
705
 
471
- _getDefaultVideoFrame() {
706
+ /**
707
+ * Uploads cube texture image data to the GPU memory.
708
+ *
709
+ * @private
710
+ * @param {CubeTexture} texture - The cube texture.
711
+ * @param {GPUTexture} textureGPU - The GPU texture.
712
+ * @param {Object} textureDescriptorGPU - The GPU texture descriptor.
713
+ */
714
+ _copyCubeMapToTexture( texture, textureGPU, textureDescriptorGPU ) {
472
715
 
473
- let defaultVideoFrame = this.defaultVideoFrame;
716
+ const images = texture.images;
717
+ const mipmaps = texture.mipmaps;
474
718
 
475
- if ( defaultVideoFrame === null ) {
719
+ for ( let i = 0; i < 6; i ++ ) {
476
720
 
477
- const init = {
478
- timestamp: 0,
479
- codedWidth: 1,
480
- codedHeight: 1,
481
- format: 'RGBA',
482
- };
721
+ const image = images[ i ];
483
722
 
484
- this.defaultVideoFrame = defaultVideoFrame = new VideoFrame( new Uint8Array( [ 0, 0, 0, 0xff ] ), init );
723
+ const flipIndex = texture.flipY === true ? _flipMap[ i ] : i;
485
724
 
486
- }
725
+ if ( image.isDataTexture ) {
487
726
 
488
- return defaultVideoFrame;
727
+ this._copyBufferToTexture( image.image, textureGPU, textureDescriptorGPU, flipIndex, texture.flipY );
489
728
 
490
- }
729
+ } else {
491
730
 
492
- _copyCubeMapToTexture( images, textureGPU, textureDescriptorGPU, flipY ) {
731
+ this._copyImageToTexture( image, textureGPU, textureDescriptorGPU, flipIndex, texture.flipY, texture.premultiplyAlpha );
493
732
 
494
- for ( let i = 0; i < 6; i ++ ) {
733
+ }
495
734
 
496
- const image = images[ i ];
735
+ for ( let j = 0; j < mipmaps.length; j ++ ) {
497
736
 
498
- const flipIndex = flipY === true ? _flipMap[ i ] : i;
737
+ const mipmap = mipmaps[ j ];
738
+ const image = mipmap.images[ i ];
499
739
 
500
- if ( image.isDataTexture ) {
740
+ if ( image.isDataTexture ) {
501
741
 
502
- this._copyBufferToTexture( image.image, textureGPU, textureDescriptorGPU, flipIndex, flipY );
742
+ this._copyBufferToTexture( image.image, textureGPU, textureDescriptorGPU, flipIndex, texture.flipY, 0, j + 1 );
503
743
 
504
- } else {
744
+ } else {
745
+
746
+ this._copyImageToTexture( image, textureGPU, textureDescriptorGPU, flipIndex, texture.flipY, texture.premultiplyAlpha, j + 1 );
747
+
748
+ }
505
749
 
506
- this._copyImageToTexture( image, textureGPU, textureDescriptorGPU, flipIndex, flipY );
507
750
 
508
751
  }
509
752
 
@@ -511,32 +754,55 @@ class WebGPUTextureUtils {
511
754
 
512
755
  }
513
756
 
514
- _copyImageToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY ) {
757
+ /**
758
+ * Uploads texture image data to the GPU memory.
759
+ *
760
+ * @private
761
+ * @param {HTMLImageElement|ImageBitmap|HTMLCanvasElement} image - The image data.
762
+ * @param {GPUTexture} textureGPU - The GPU texture.
763
+ * @param {Object} textureDescriptorGPU - The GPU texture descriptor.
764
+ * @param {number} originDepth - The origin depth.
765
+ * @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.
766
+ * @param {boolean} premultiplyAlpha - Whether the texture should have its RGB channels premultiplied by the alpha channel or not.
767
+ * @param {number} [mipLevel=0] - The mip level where the data should be copied to.
768
+ */
769
+ _copyImageToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, premultiplyAlpha, mipLevel = 0 ) {
515
770
 
516
771
  const device = this.backend.device;
517
772
 
518
- device.queue.copyExternalImageToTexture(
519
- {
520
- source: image
521
- }, {
522
- texture: textureGPU,
523
- mipLevel: 0,
524
- origin: { x: 0, y: 0, z: originDepth }
525
- }, {
526
- width: image.width,
527
- height: image.height,
528
- depthOrArrayLayers: 1
529
- }
530
- );
773
+ const width = ( mipLevel > 0 ) ? image.width : textureDescriptorGPU.size.width;
774
+ const height = ( mipLevel > 0 ) ? image.height : textureDescriptorGPU.size.height;
775
+
776
+ try {
777
+
778
+ device.queue.copyExternalImageToTexture(
779
+ {
780
+ source: image,
781
+ flipY: flipY
782
+ }, {
783
+ texture: textureGPU,
784
+ mipLevel: mipLevel,
785
+ origin: { x: 0, y: 0, z: originDepth },
786
+ premultipliedAlpha: premultiplyAlpha
787
+ }, {
788
+ width: width,
789
+ height: height,
790
+ depthOrArrayLayers: 1
791
+ }
792
+ );
531
793
 
532
- if ( flipY === true ) {
794
+ // try/catch has been added to fix bad video frame data on certain devices, see #32391
533
795
 
534
- this._flipY( textureGPU, textureDescriptorGPU, originDepth );
535
-
536
- }
796
+ } catch ( _ ) {}
537
797
 
538
798
  }
539
799
 
800
+ /**
801
+ * Returns the pass utils singleton.
802
+ *
803
+ * @private
804
+ * @return {WebGPUTexturePassUtils} The utils instance.
805
+ */
540
806
  _getPassUtils() {
541
807
 
542
808
  let passUtils = this._passUtils;
@@ -551,19 +817,46 @@ class WebGPUTextureUtils {
551
817
 
552
818
  }
553
819
 
554
- _generateMipmaps( textureGPU, textureDescriptorGPU, baseArrayLayer = 0 ) {
820
+ /**
821
+ * Generates mipmaps for the given GPU texture.
822
+ *
823
+ * @private
824
+ * @param {GPUTexture} textureGPU - The GPU texture object.
825
+ * @param {?GPUCommandEncoder} [encoder=null] - An optional command encoder used to generate mipmaps.
826
+ */
827
+ _generateMipmaps( textureGPU, encoder = null ) {
555
828
 
556
- this._getPassUtils().generateMipmaps( textureGPU, textureDescriptorGPU, baseArrayLayer );
829
+ this._getPassUtils().generateMipmaps( textureGPU, encoder );
557
830
 
558
831
  }
559
832
 
833
+ /**
834
+ * Flip the contents of the given GPU texture along its vertical axis.
835
+ *
836
+ * @private
837
+ * @param {GPUTexture} textureGPU - The GPU texture object.
838
+ * @param {Object} textureDescriptorGPU - The texture descriptor.
839
+ * @param {number} [originDepth=0] - The origin depth.
840
+ */
560
841
  _flipY( textureGPU, textureDescriptorGPU, originDepth = 0 ) {
561
842
 
562
843
  this._getPassUtils().flipY( textureGPU, textureDescriptorGPU, originDepth );
563
844
 
564
845
  }
565
846
 
566
- _copyBufferToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, depth = 0 ) {
847
+ /**
848
+ * Uploads texture buffer data to the GPU memory.
849
+ *
850
+ * @private
851
+ * @param {Object} image - An object defining the image buffer data.
852
+ * @param {GPUTexture} textureGPU - The GPU texture.
853
+ * @param {Object} textureDescriptorGPU - The GPU texture descriptor.
854
+ * @param {number} originDepth - The origin depth.
855
+ * @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.
856
+ * @param {number} [depth=0] - The depth offset when copying array or 3D texture data.
857
+ * @param {number} [mipLevel=0] - The mip level where the data should be copied to.
858
+ */
859
+ _copyBufferToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, depth = 0, mipLevel = 0 ) {
567
860
 
568
861
  // @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()
569
862
  // @TODO: Consider to support valid buffer layouts with other formats like RGB
@@ -578,7 +871,7 @@ class WebGPUTextureUtils {
578
871
  device.queue.writeTexture(
579
872
  {
580
873
  texture: textureGPU,
581
- mipLevel: 0,
874
+ mipLevel: mipLevel,
582
875
  origin: { x: 0, y: 0, z: originDepth }
583
876
  },
584
877
  data,
@@ -600,6 +893,14 @@ class WebGPUTextureUtils {
600
893
 
601
894
  }
602
895
 
896
+ /**
897
+ * Uploads compressed texture data to the GPU memory.
898
+ *
899
+ * @private
900
+ * @param {Array<Object>} mipmaps - An array with mipmap data.
901
+ * @param {GPUTexture} textureGPU - The GPU texture.
902
+ * @param {Object} textureDescriptorGPU - The GPU texture descriptor.
903
+ */
603
904
  _copyCompressedBufferToTexture( mipmaps, textureGPU, textureDescriptorGPU ) {
604
905
 
605
906
  // @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()
@@ -607,7 +908,7 @@ class WebGPUTextureUtils {
607
908
  const device = this.backend.device;
608
909
 
609
910
  const blockData = this._getBlockData( textureDescriptorGPU.format );
610
- const isTextureArray = textureDescriptorGPU.size.depthOrArrayLayers > 1;
911
+ const isArrayTexture = textureDescriptorGPU.size.depthOrArrayLayers > 1;
611
912
 
612
913
  for ( let i = 0; i < mipmaps.length; i ++ ) {
613
914
 
@@ -615,7 +916,7 @@ class WebGPUTextureUtils {
615
916
 
616
917
  const width = mipmap.width;
617
918
  const height = mipmap.height;
618
- const depth = isTextureArray ? textureDescriptorGPU.size.depthOrArrayLayers : 1;
919
+ const depth = isArrayTexture ? textureDescriptorGPU.size.depthOrArrayLayers : 1;
619
920
 
620
921
  const bytesPerRow = Math.ceil( width / blockData.width ) * blockData.byteLength;
621
922
  const bytesPerImage = bytesPerRow * Math.ceil( height / blockData.height );
@@ -647,14 +948,20 @@ class WebGPUTextureUtils {
647
948
 
648
949
  }
649
950
 
951
+ /**
952
+ * This method is only relevant for compressed texture formats. It returns a block
953
+ * data descriptor for the given GPU compressed texture format.
954
+ *
955
+ * @private
956
+ * @param {string} format - The GPU compressed texture format.
957
+ * @return {Object} The block data descriptor.
958
+ */
650
959
  _getBlockData( format ) {
651
960
 
652
- // this method is only relevant for compressed texture formats
653
-
654
961
  if ( format === GPUTextureFormat.BC1RGBAUnorm || format === GPUTextureFormat.BC1RGBAUnormSRGB ) return { byteLength: 8, width: 4, height: 4 }; // DXT1
655
962
  if ( format === GPUTextureFormat.BC2RGBAUnorm || format === GPUTextureFormat.BC2RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // DXT3
656
963
  if ( format === GPUTextureFormat.BC3RGBAUnorm || format === GPUTextureFormat.BC3RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // DXT5
657
- if ( format === GPUTextureFormat.BC4RUnorm || format === GPUTextureFormat.BC4RSNorm ) return { byteLength: 8, width: 4, height: 4 }; // RGTC1
964
+ if ( format === GPUTextureFormat.BC4RUnorm || format === GPUTextureFormat.BC4RSnorm ) return { byteLength: 8, width: 4, height: 4 }; // RGTC1
658
965
  if ( format === GPUTextureFormat.BC5RGUnorm || format === GPUTextureFormat.BC5RGSnorm ) return { byteLength: 16, width: 4, height: 4 }; // RGTC2
659
966
  if ( format === GPUTextureFormat.BC6HRGBUFloat || format === GPUTextureFormat.BC6HRGBFloat ) return { byteLength: 16, width: 4, height: 4 }; // BPTC (float)
660
967
  if ( format === GPUTextureFormat.BC7RGBAUnorm || format === GPUTextureFormat.BC7RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // BPTC (unorm)
@@ -684,6 +991,13 @@ class WebGPUTextureUtils {
684
991
 
685
992
  }
686
993
 
994
+ /**
995
+ * Converts the three.js uv wrapping constants to GPU address mode constants.
996
+ *
997
+ * @private
998
+ * @param {number} value - The three.js constant defining a uv wrapping mode.
999
+ * @return {string} The GPU address mode.
1000
+ */
687
1001
  _convertAddressMode( value ) {
688
1002
 
689
1003
  let addressMode = GPUAddressMode.ClampToEdge;
@@ -702,6 +1016,13 @@ class WebGPUTextureUtils {
702
1016
 
703
1017
  }
704
1018
 
1019
+ /**
1020
+ * Converts the three.js filter constants to GPU filter constants.
1021
+ *
1022
+ * @private
1023
+ * @param {number} value - The three.js constant defining a filter mode.
1024
+ * @return {string} The GPU filter mode.
1025
+ */
705
1026
  _convertFilterMode( value ) {
706
1027
 
707
1028
  let filterMode = GPUFilterMode.Linear;
@@ -716,6 +1037,13 @@ class WebGPUTextureUtils {
716
1037
 
717
1038
  }
718
1039
 
1040
+ /**
1041
+ * Returns the bytes-per-texel value for the given GPU texture format.
1042
+ *
1043
+ * @private
1044
+ * @param {string} format - The GPU texture format.
1045
+ * @return {number} The bytes-per-texel.
1046
+ */
719
1047
  _getBytesPerTexel( format ) {
720
1048
 
721
1049
  // 8-bit formats
@@ -772,6 +1100,13 @@ class WebGPUTextureUtils {
772
1100
 
773
1101
  }
774
1102
 
1103
+ /**
1104
+ * Returns the corresponding typed array type for the given GPU texture format.
1105
+ *
1106
+ * @private
1107
+ * @param {string} format - The GPU texture format.
1108
+ * @return {TypedArray.constructor} The typed array type.
1109
+ */
775
1110
  _getTypedArrayType( format ) {
776
1111
 
777
1112
  if ( format === GPUTextureFormat.R8Uint ) return Uint8Array;
@@ -784,7 +1119,7 @@ class WebGPUTextureUtils {
784
1119
  if ( format === GPUTextureFormat.RG8Snorm ) return Int8Array;
785
1120
  if ( format === GPUTextureFormat.RGBA8Uint ) return Uint8Array;
786
1121
  if ( format === GPUTextureFormat.RGBA8Sint ) return Int8Array;
787
- if ( format === GPUTextureFormat.RGBA8Unorm ) return Uint8Array;
1122
+ if ( format === GPUTextureFormat.RGBA8Unorm || format === GPUTextureFormat.RGBA8UnormSRGB ) return Uint8Array;
788
1123
  if ( format === GPUTextureFormat.RGBA8Snorm ) return Int8Array;
789
1124
 
790
1125
 
@@ -809,8 +1144,7 @@ class WebGPUTextureUtils {
809
1144
  if ( format === GPUTextureFormat.RGBA32Sint ) return Int32Array;
810
1145
  if ( format === GPUTextureFormat.RGBA32Float ) return Float32Array;
811
1146
 
812
- if ( format === GPUTextureFormat.BGRA8Unorm ) return Uint8Array;
813
- if ( format === GPUTextureFormat.BGRA8UnormSRGB ) return Uint8Array;
1147
+ if ( format === GPUTextureFormat.BGRA8Unorm || format === GPUTextureFormat.BGRA8UnormSRGB ) return Uint8Array;
814
1148
  if ( format === GPUTextureFormat.RGB10A2Unorm ) return Uint32Array;
815
1149
  if ( format === GPUTextureFormat.RGB9E5UFloat ) return Uint32Array;
816
1150
  if ( format === GPUTextureFormat.RG11B10UFloat ) return Uint32Array;
@@ -822,11 +1156,18 @@ class WebGPUTextureUtils {
822
1156
 
823
1157
  }
824
1158
 
1159
+ /**
1160
+ * Returns the GPU dimensions for the given texture.
1161
+ *
1162
+ * @private
1163
+ * @param {Texture} texture - The texture.
1164
+ * @return {string} The GPU dimension.
1165
+ */
825
1166
  _getDimension( texture ) {
826
1167
 
827
1168
  let dimension;
828
1169
 
829
- if ( texture.isData3DTexture ) {
1170
+ if ( texture.is3DTexture || texture.isData3DTexture ) {
830
1171
 
831
1172
  dimension = GPUTextureDimension.ThreeD;
832
1173
 
@@ -842,100 +1183,147 @@ class WebGPUTextureUtils {
842
1183
 
843
1184
  }
844
1185
 
1186
+ /**
1187
+ * Returns the GPU format for the given texture.
1188
+ *
1189
+ * @param {Texture} texture - The texture.
1190
+ * @param {?GPUDevice} [device=null] - The GPU device which is used for feature detection.
1191
+ * It is not necessary to apply the device for most formats.
1192
+ * @return {string} The GPU format.
1193
+ */
845
1194
  export function getFormat( texture, device = null ) {
846
1195
 
847
1196
  const format = texture.format;
848
1197
  const type = texture.type;
849
1198
  const colorSpace = texture.colorSpace;
1199
+ const transfer = ColorManagement.getTransfer( colorSpace );
850
1200
 
851
1201
  let formatGPU;
852
1202
 
853
- if ( texture.isFramebufferTexture === true && texture.type === UnsignedByteType ) {
854
-
855
- formatGPU = GPUTextureFormat.BGRA8Unorm;
856
-
857
- } else if ( texture.isCompressedTexture === true || texture.isCompressedArrayTexture === true ) {
1203
+ if ( texture.isCompressedTexture === true || texture.isCompressedArrayTexture === true ) {
858
1204
 
859
1205
  switch ( format ) {
860
1206
 
1207
+ case RGB_S3TC_DXT1_Format:
861
1208
  case RGBA_S3TC_DXT1_Format:
862
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.BC1RGBAUnormSRGB : GPUTextureFormat.BC1RGBAUnorm;
1209
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC1RGBAUnormSRGB : GPUTextureFormat.BC1RGBAUnorm;
863
1210
  break;
864
1211
 
865
1212
  case RGBA_S3TC_DXT3_Format:
866
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.BC2RGBAUnormSRGB : GPUTextureFormat.BC2RGBAUnorm;
1213
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC2RGBAUnormSRGB : GPUTextureFormat.BC2RGBAUnorm;
867
1214
  break;
868
1215
 
869
1216
  case RGBA_S3TC_DXT5_Format:
870
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.BC3RGBAUnormSRGB : GPUTextureFormat.BC3RGBAUnorm;
1217
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC3RGBAUnormSRGB : GPUTextureFormat.BC3RGBAUnorm;
1218
+ break;
1219
+
1220
+ case RED_RGTC1_Format:
1221
+ formatGPU = GPUTextureFormat.BC4RUnorm;
1222
+ break;
1223
+
1224
+ case SIGNED_RED_RGTC1_Format:
1225
+ formatGPU = GPUTextureFormat.BC4RSnorm;
1226
+ break;
1227
+
1228
+ case RED_GREEN_RGTC2_Format:
1229
+ formatGPU = GPUTextureFormat.BC5RGUnorm;
1230
+ break;
1231
+
1232
+ case SIGNED_RED_GREEN_RGTC2_Format:
1233
+ formatGPU = GPUTextureFormat.BC5RGSnorm;
1234
+ break;
1235
+
1236
+ case RGBA_BPTC_Format:
1237
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC7RGBAUnormSRGB : GPUTextureFormat.BC7RGBAUnorm;
871
1238
  break;
872
1239
 
873
1240
  case RGB_ETC2_Format:
874
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ETC2RGB8UnormSRGB : GPUTextureFormat.ETC2RGB8Unorm;
1241
+ case RGB_ETC1_Format:
1242
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ETC2RGB8UnormSRGB : GPUTextureFormat.ETC2RGB8Unorm;
875
1243
  break;
876
1244
 
877
1245
  case RGBA_ETC2_EAC_Format:
878
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ETC2RGBA8UnormSRGB : GPUTextureFormat.ETC2RGBA8Unorm;
1246
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ETC2RGBA8UnormSRGB : GPUTextureFormat.ETC2RGBA8Unorm;
1247
+ break;
1248
+
1249
+ case R11_EAC_Format:
1250
+ formatGPU = GPUTextureFormat.EACR11Unorm;
1251
+ break;
1252
+
1253
+ case SIGNED_R11_EAC_Format:
1254
+ formatGPU = GPUTextureFormat.EACR11Snorm;
1255
+ break;
1256
+
1257
+ case RG11_EAC_Format:
1258
+ formatGPU = GPUTextureFormat.EACRG11Unorm;
1259
+ break;
1260
+
1261
+ case SIGNED_RG11_EAC_Format:
1262
+ formatGPU = GPUTextureFormat.EACRG11Snorm;
879
1263
  break;
880
1264
 
881
1265
  case RGBA_ASTC_4x4_Format:
882
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC4x4UnormSRGB : GPUTextureFormat.ASTC4x4Unorm;
1266
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC4x4UnormSRGB : GPUTextureFormat.ASTC4x4Unorm;
883
1267
  break;
884
1268
 
885
1269
  case RGBA_ASTC_5x4_Format:
886
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC5x4UnormSRGB : GPUTextureFormat.ASTC5x4Unorm;
1270
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC5x4UnormSRGB : GPUTextureFormat.ASTC5x4Unorm;
887
1271
  break;
888
1272
 
889
1273
  case RGBA_ASTC_5x5_Format:
890
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC5x5UnormSRGB : GPUTextureFormat.ASTC5x5Unorm;
1274
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC5x5UnormSRGB : GPUTextureFormat.ASTC5x5Unorm;
891
1275
  break;
892
1276
 
893
1277
  case RGBA_ASTC_6x5_Format:
894
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC6x5UnormSRGB : GPUTextureFormat.ASTC6x5Unorm;
1278
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC6x5UnormSRGB : GPUTextureFormat.ASTC6x5Unorm;
895
1279
  break;
896
1280
 
897
1281
  case RGBA_ASTC_6x6_Format:
898
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC6x6UnormSRGB : GPUTextureFormat.ASTC6x6Unorm;
1282
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC6x6UnormSRGB : GPUTextureFormat.ASTC6x6Unorm;
899
1283
  break;
900
1284
 
901
1285
  case RGBA_ASTC_8x5_Format:
902
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC8x5UnormSRGB : GPUTextureFormat.ASTC8x5Unorm;
1286
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC8x5UnormSRGB : GPUTextureFormat.ASTC8x5Unorm;
903
1287
  break;
904
1288
 
905
1289
  case RGBA_ASTC_8x6_Format:
906
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC8x6UnormSRGB : GPUTextureFormat.ASTC8x6Unorm;
1290
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC8x6UnormSRGB : GPUTextureFormat.ASTC8x6Unorm;
907
1291
  break;
908
1292
 
909
1293
  case RGBA_ASTC_8x8_Format:
910
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC8x8UnormSRGB : GPUTextureFormat.ASTC8x8Unorm;
1294
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC8x8UnormSRGB : GPUTextureFormat.ASTC8x8Unorm;
911
1295
  break;
912
1296
 
913
1297
  case RGBA_ASTC_10x5_Format:
914
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC10x5UnormSRGB : GPUTextureFormat.ASTC10x5Unorm;
1298
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC10x5UnormSRGB : GPUTextureFormat.ASTC10x5Unorm;
915
1299
  break;
916
1300
 
917
1301
  case RGBA_ASTC_10x6_Format:
918
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC10x6UnormSRGB : GPUTextureFormat.ASTC10x6Unorm;
1302
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC10x6UnormSRGB : GPUTextureFormat.ASTC10x6Unorm;
919
1303
  break;
920
1304
 
921
1305
  case RGBA_ASTC_10x8_Format:
922
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC10x8UnormSRGB : GPUTextureFormat.ASTC10x8Unorm;
1306
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC10x8UnormSRGB : GPUTextureFormat.ASTC10x8Unorm;
923
1307
  break;
924
1308
 
925
1309
  case RGBA_ASTC_10x10_Format:
926
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC10x10UnormSRGB : GPUTextureFormat.ASTC10x10Unorm;
1310
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC10x10UnormSRGB : GPUTextureFormat.ASTC10x10Unorm;
927
1311
  break;
928
1312
 
929
1313
  case RGBA_ASTC_12x10_Format:
930
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC12x10UnormSRGB : GPUTextureFormat.ASTC12x10Unorm;
1314
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC12x10UnormSRGB : GPUTextureFormat.ASTC12x10Unorm;
931
1315
  break;
932
1316
 
933
1317
  case RGBA_ASTC_12x12_Format:
934
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC12x12UnormSRGB : GPUTextureFormat.ASTC12x12Unorm;
1318
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC12x12UnormSRGB : GPUTextureFormat.ASTC12x12Unorm;
1319
+ break;
1320
+
1321
+ case RGBAFormat:
1322
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.RGBA8UnormSRGB : GPUTextureFormat.RGBA8Unorm;
935
1323
  break;
936
1324
 
937
1325
  default:
938
- console.error( 'WebGPURenderer: Unsupported texture format.', format );
1326
+ error( 'WebGPURenderer: Unsupported texture format.', format );
939
1327
 
940
1328
  }
941
1329
 
@@ -967,7 +1355,7 @@ export function getFormat( texture, device = null ) {
967
1355
  break;
968
1356
 
969
1357
  case UnsignedByteType:
970
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.RGBA8UnormSRGB : GPUTextureFormat.RGBA8Unorm;
1358
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.RGBA8UnormSRGB : GPUTextureFormat.RGBA8Unorm;
971
1359
  break;
972
1360
 
973
1361
  case HalfFloatType:
@@ -979,7 +1367,7 @@ export function getFormat( texture, device = null ) {
979
1367
  break;
980
1368
 
981
1369
  default:
982
- console.error( 'WebGPURenderer: Unsupported texture type with RGBAFormat.', type );
1370
+ error( 'WebGPURenderer: Unsupported texture type with RGBAFormat.', type );
983
1371
 
984
1372
  }
985
1373
 
@@ -993,8 +1381,12 @@ export function getFormat( texture, device = null ) {
993
1381
  formatGPU = GPUTextureFormat.RGB9E5UFloat;
994
1382
  break;
995
1383
 
1384
+ case UnsignedInt101111Type:
1385
+ formatGPU = GPUTextureFormat.RG11B10UFloat;
1386
+ break;
1387
+
996
1388
  default:
997
- console.error( 'WebGPURenderer: Unsupported texture type with RGBFormat.', type );
1389
+ error( 'WebGPURenderer: Unsupported texture type with RGBFormat.', type );
998
1390
 
999
1391
  }
1000
1392
 
@@ -1037,7 +1429,7 @@ export function getFormat( texture, device = null ) {
1037
1429
  break;
1038
1430
 
1039
1431
  default:
1040
- console.error( 'WebGPURenderer: Unsupported texture type with RedFormat.', type );
1432
+ error( 'WebGPURenderer: Unsupported texture type with RedFormat.', type );
1041
1433
 
1042
1434
  }
1043
1435
 
@@ -1080,7 +1472,7 @@ export function getFormat( texture, device = null ) {
1080
1472
  break;
1081
1473
 
1082
1474
  default:
1083
- console.error( 'WebGPURenderer: Unsupported texture type with RGFormat.', type );
1475
+ error( 'WebGPURenderer: Unsupported texture type with RGFormat.', type );
1084
1476
 
1085
1477
  }
1086
1478
 
@@ -1103,7 +1495,7 @@ export function getFormat( texture, device = null ) {
1103
1495
  break;
1104
1496
 
1105
1497
  default:
1106
- console.error( 'WebGPURenderer: Unsupported texture type with DepthFormat.', type );
1498
+ error( 'WebGPURenderer: Unsupported texture type with DepthFormat.', type );
1107
1499
 
1108
1500
  }
1109
1501
 
@@ -1121,7 +1513,7 @@ export function getFormat( texture, device = null ) {
1121
1513
 
1122
1514
  if ( device && device.features.has( GPUFeatureName.Depth32FloatStencil8 ) === false ) {
1123
1515
 
1124
- console.error( 'WebGPURenderer: Depth textures with DepthStencilFormat + FloatType can only be used with the "depth32float-stencil8" GPU feature.' );
1516
+ error( 'WebGPURenderer: Depth textures with DepthStencilFormat + FloatType can only be used with the "depth32float-stencil8" GPU feature.' );
1125
1517
 
1126
1518
  }
1127
1519
 
@@ -1130,7 +1522,7 @@ export function getFormat( texture, device = null ) {
1130
1522
  break;
1131
1523
 
1132
1524
  default:
1133
- console.error( 'WebGPURenderer: Unsupported texture type with DepthStencilFormat.', type );
1525
+ error( 'WebGPURenderer: Unsupported texture type with DepthStencilFormat.', type );
1134
1526
 
1135
1527
  }
1136
1528
 
@@ -1149,7 +1541,7 @@ export function getFormat( texture, device = null ) {
1149
1541
  break;
1150
1542
 
1151
1543
  default:
1152
- console.error( 'WebGPURenderer: Unsupported texture type with RedIntegerFormat.', type );
1544
+ error( 'WebGPURenderer: Unsupported texture type with RedIntegerFormat.', type );
1153
1545
 
1154
1546
  }
1155
1547
 
@@ -1168,7 +1560,7 @@ export function getFormat( texture, device = null ) {
1168
1560
  break;
1169
1561
 
1170
1562
  default:
1171
- console.error( 'WebGPURenderer: Unsupported texture type with RGIntegerFormat.', type );
1563
+ error( 'WebGPURenderer: Unsupported texture type with RGIntegerFormat.', type );
1172
1564
 
1173
1565
  }
1174
1566
 
@@ -1187,14 +1579,14 @@ export function getFormat( texture, device = null ) {
1187
1579
  break;
1188
1580
 
1189
1581
  default:
1190
- console.error( 'WebGPURenderer: Unsupported texture type with RGBAIntegerFormat.', type );
1582
+ error( 'WebGPURenderer: Unsupported texture type with RGBAIntegerFormat.', type );
1191
1583
 
1192
1584
  }
1193
1585
 
1194
1586
  break;
1195
1587
 
1196
1588
  default:
1197
- console.error( 'WebGPURenderer: Unsupported texture format.', format );
1589
+ error( 'WebGPURenderer: Unsupported texture format.', format );
1198
1590
 
1199
1591
  }
1200
1592