@plastic-software/three 0.167.4 → 0.174.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 (747) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +36217 -23964
  4. package/build/three.core.js +48830 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +10175 -46744
  7. package/build/three.module.min.js +2 -3
  8. package/build/three.tsl.js +550 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +44348 -50671
  11. package/build/three.webgpu.min.js +2 -3
  12. package/build/three.webgpu.nodes.js +70301 -0
  13. package/build/three.webgpu.nodes.min.js +6 -0
  14. package/examples/jsm/Addons.js +3 -15
  15. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  16. package/examples/jsm/animation/CCDIKSolver.js +61 -11
  17. package/examples/jsm/capabilities/WebGL.js +27 -21
  18. package/examples/jsm/capabilities/WebGPU.js +1 -10
  19. package/examples/jsm/controls/ArcballControls.js +262 -231
  20. package/examples/jsm/controls/DragControls.js +1 -1
  21. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  22. package/examples/jsm/controls/FlyControls.js +194 -188
  23. package/examples/jsm/controls/OrbitControls.js +801 -777
  24. package/examples/jsm/controls/PointerLockControls.js +26 -20
  25. package/examples/jsm/controls/TrackballControls.js +469 -448
  26. package/examples/jsm/controls/TransformControls.js +119 -68
  27. package/examples/jsm/csm/CSM.js +2 -2
  28. package/examples/jsm/csm/CSMFrustum.js +7 -4
  29. package/examples/jsm/csm/CSMHelper.js +2 -0
  30. package/examples/jsm/csm/CSMShadowNode.js +442 -0
  31. package/examples/jsm/curves/NURBSCurve.js +33 -2
  32. package/examples/jsm/curves/NURBSUtils.js +3 -0
  33. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  34. package/examples/jsm/effects/OutlineEffect.js +1 -1
  35. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  36. package/examples/jsm/effects/StereoEffect.js +6 -1
  37. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  38. package/examples/jsm/exporters/EXRExporter.js +19 -11
  39. package/examples/jsm/exporters/GLTFExporter.js +181 -109
  40. package/examples/jsm/exporters/KTX2Exporter.js +54 -23
  41. package/examples/jsm/exporters/OBJExporter.js +5 -1
  42. package/examples/jsm/exporters/PLYExporter.js +11 -9
  43. package/examples/jsm/exporters/USDZExporter.js +50 -11
  44. package/examples/jsm/geometries/DecalGeometry.js +73 -21
  45. package/examples/jsm/geometries/TextGeometry.js +1 -12
  46. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  47. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  48. package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
  49. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  50. package/examples/jsm/interactive/HTMLMesh.js +1 -0
  51. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  52. package/examples/jsm/interactive/SelectionHelper.js +3 -1
  53. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  54. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  55. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  56. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  57. package/examples/jsm/lighting/TiledLighting.js +18 -0
  58. package/examples/jsm/lights/LightProbeGenerator.js +26 -12
  59. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  60. package/examples/jsm/lines/LineGeometry.js +25 -0
  61. package/examples/jsm/lines/LineMaterial.js +0 -1
  62. package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
  63. package/examples/jsm/lines/webgpu/Line2.js +2 -1
  64. package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
  65. package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
  66. package/examples/jsm/loaders/3DMLoader.js +1 -0
  67. package/examples/jsm/loaders/3MFLoader.js +104 -2
  68. package/examples/jsm/loaders/BVHLoader.js +1 -1
  69. package/examples/jsm/loaders/ColladaLoader.js +15 -12
  70. package/examples/jsm/loaders/DDSLoader.js +42 -0
  71. package/examples/jsm/loaders/DRACOLoader.js +3 -1
  72. package/examples/jsm/loaders/FBXLoader.js +71 -22
  73. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  74. package/examples/jsm/loaders/GLTFLoader.js +29 -14
  75. package/examples/jsm/loaders/KTX2Loader.js +160 -58
  76. package/examples/jsm/loaders/KTXLoader.js +4 -4
  77. package/examples/jsm/loaders/LDrawLoader.js +22 -136
  78. package/examples/jsm/loaders/LottieLoader.js +2 -1
  79. package/examples/jsm/loaders/MTLLoader.js +27 -7
  80. package/examples/jsm/loaders/MaterialXLoader.js +40 -14
  81. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  82. package/examples/jsm/loaders/OBJLoader.js +5 -3
  83. package/examples/jsm/loaders/PCDLoader.js +14 -13
  84. package/examples/jsm/loaders/PDBLoader.js +3 -2
  85. package/examples/jsm/loaders/PLYLoader.js +15 -12
  86. package/examples/jsm/loaders/PVRLoader.js +1 -1
  87. package/examples/jsm/loaders/STLLoader.js +3 -2
  88. package/examples/jsm/loaders/SVGLoader.js +2 -2
  89. package/examples/jsm/loaders/TDSLoader.js +17 -18
  90. package/examples/jsm/loaders/VRMLLoader.js +17 -17
  91. package/examples/jsm/loaders/VTKLoader.js +4 -3
  92. package/examples/jsm/loaders/XYZLoader.js +3 -2
  93. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  94. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
  95. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
  96. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  97. package/examples/jsm/math/ColorSpaces.js +76 -0
  98. package/examples/jsm/math/ConvexHull.js +1 -1
  99. package/examples/jsm/math/OBB.js +17 -0
  100. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  101. package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
  102. package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
  103. package/examples/jsm/misc/Timer.js +27 -12
  104. package/examples/jsm/misc/Volume.js +28 -18
  105. package/examples/jsm/misc/VolumeSlice.js +19 -16
  106. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  107. package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
  108. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  109. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  110. package/examples/jsm/objects/LensflareMesh.js +324 -0
  111. package/examples/jsm/objects/Reflector.js +5 -2
  112. package/examples/jsm/objects/Sky.js +2 -2
  113. package/examples/jsm/objects/SkyMesh.js +14 -14
  114. package/examples/jsm/objects/Water2.js +1 -1
  115. package/examples/jsm/objects/Water2Mesh.js +11 -9
  116. package/examples/jsm/objects/WaterMesh.js +38 -33
  117. package/examples/jsm/physics/JoltPhysics.js +8 -8
  118. package/examples/jsm/physics/RapierPhysics.js +5 -5
  119. package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
  120. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  121. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  122. package/examples/jsm/postprocessing/OutlinePass.js +37 -51
  123. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  124. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  125. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  126. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  127. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  128. package/examples/jsm/postprocessing/SSRPass.js +8 -4
  129. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  130. package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
  131. package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
  132. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  133. package/examples/jsm/shaders/BokehShader2.js +1 -1
  134. package/examples/jsm/shaders/FXAAShader.js +225 -224
  135. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  136. package/examples/jsm/shaders/OutputShader.js +6 -2
  137. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  138. package/examples/jsm/transpiler/AST.js +12 -2
  139. package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
  140. package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
  141. package/examples/jsm/transpiler/TSLEncoder.js +96 -21
  142. package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
  143. package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
  144. package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
  145. package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
  146. package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
  147. package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
  148. package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
  149. package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
  150. package/examples/jsm/tsl/display/FXAANode.js +364 -0
  151. package/examples/jsm/tsl/display/FilmNode.js +100 -0
  152. package/examples/jsm/tsl/display/GTAONode.js +521 -0
  153. package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
  154. package/examples/jsm/tsl/display/LensflareNode.js +278 -0
  155. package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
  156. package/examples/jsm/tsl/display/MotionBlur.js +33 -0
  157. package/examples/jsm/tsl/display/OutlineNode.js +750 -0
  158. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
  159. package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
  160. package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
  161. package/examples/jsm/tsl/display/SMAANode.js +767 -0
  162. package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
  163. package/examples/jsm/tsl/display/SSRNode.js +538 -0
  164. package/examples/jsm/tsl/display/Sepia.js +24 -0
  165. package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
  166. package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
  167. package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
  168. package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
  169. package/examples/jsm/tsl/display/TransitionNode.js +140 -0
  170. package/examples/jsm/tsl/display/hashBlur.js +34 -0
  171. package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
  172. package/examples/jsm/tsl/math/Bayer.js +18 -0
  173. package/examples/jsm/tsl/utils/Raymarching.js +65 -0
  174. package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
  175. package/examples/jsm/utils/CameraUtils.js +4 -1
  176. package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
  177. package/examples/jsm/utils/GeometryUtils.js +22 -19
  178. package/examples/jsm/utils/SceneOptimizer.js +410 -0
  179. package/examples/jsm/utils/SceneUtils.js +2 -2
  180. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  181. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  182. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  183. package/examples/jsm/utils/UVsDebug.js +1 -1
  184. package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
  185. package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
  186. package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
  187. package/examples/jsm/webxr/Text2D.js +6 -6
  188. package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
  189. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  190. package/package.json +14 -9
  191. package/src/Three.Core.js +182 -0
  192. package/src/Three.Legacy.js +0 -21
  193. package/src/Three.TSL.js +543 -0
  194. package/src/Three.WebGPU.Nodes.js +23 -0
  195. package/src/Three.WebGPU.js +13 -184
  196. package/src/Three.js +1 -176
  197. package/src/animation/AnimationClip.js +2 -2
  198. package/src/animation/AnimationObjectGroup.js +2 -2
  199. package/src/animation/AnimationUtils.js +1 -1
  200. package/src/animation/PropertyBinding.js +2 -2
  201. package/src/audio/Audio.js +379 -2
  202. package/src/audio/AudioAnalyser.js +58 -1
  203. package/src/audio/AudioContext.js +15 -0
  204. package/src/audio/AudioListener.js +76 -0
  205. package/src/audio/PositionalAudio.js +107 -0
  206. package/src/cameras/ArrayCamera.js +29 -0
  207. package/src/cameras/Camera.js +47 -0
  208. package/src/cameras/CubeCamera.js +66 -0
  209. package/src/cameras/OrthographicCamera.js +109 -0
  210. package/src/cameras/PerspectiveCamera.js +173 -34
  211. package/src/cameras/StereoCamera.js +48 -2
  212. package/src/constants.js +6 -6
  213. package/src/core/BufferAttribute.js +4 -9
  214. package/src/core/BufferGeometry.js +48 -8
  215. package/src/core/Clock.js +1 -1
  216. package/src/core/EventDispatcher.js +52 -8
  217. package/src/core/InterleavedBuffer.js +4 -13
  218. package/src/core/Object3D.js +573 -3
  219. package/src/core/RenderTarget.js +22 -4
  220. package/src/core/RenderTarget3D.js +22 -0
  221. package/src/core/RenderTargetArray.js +22 -0
  222. package/src/extras/Controls.js +104 -0
  223. package/src/extras/DataUtils.js +48 -8
  224. package/src/extras/Earcut.js +18 -7
  225. package/src/extras/ImageUtils.js +18 -11
  226. package/src/extras/PMREMGenerator.js +40 -9
  227. package/src/extras/ShapeUtils.js +24 -2
  228. package/src/extras/TextureUtils.js +96 -10
  229. package/src/extras/core/Curve.js +153 -53
  230. package/src/extras/core/CurvePath.js +63 -22
  231. package/src/extras/core/Interpolations.js +29 -3
  232. package/src/extras/core/Path.js +134 -1
  233. package/src/extras/core/Shape.js +66 -3
  234. package/src/extras/core/ShapePath.js +76 -0
  235. package/src/extras/curves/ArcCurve.js +22 -0
  236. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  237. package/src/extras/curves/CubicBezierCurve.js +67 -0
  238. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  239. package/src/extras/curves/EllipseCurve.js +102 -0
  240. package/src/extras/curves/LineCurve.js +36 -0
  241. package/src/extras/curves/LineCurve3.js +36 -0
  242. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  243. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  244. package/src/extras/curves/SplineCurve.js +48 -0
  245. package/src/geometries/BoxGeometry.js +38 -0
  246. package/src/geometries/CapsuleGeometry.js +34 -0
  247. package/src/geometries/CircleGeometry.js +40 -0
  248. package/src/geometries/ConeGeometry.js +38 -0
  249. package/src/geometries/CylinderGeometry.js +50 -4
  250. package/src/geometries/DodecahedronGeometry.js +32 -0
  251. package/src/geometries/EdgesGeometry.js +30 -2
  252. package/src/geometries/ExtrudeGeometry.js +52 -0
  253. package/src/geometries/IcosahedronGeometry.js +32 -0
  254. package/src/geometries/LatheGeometry.js +43 -3
  255. package/src/geometries/OctahedronGeometry.js +32 -0
  256. package/src/geometries/PlaneGeometry.js +34 -0
  257. package/src/geometries/PolyhedronGeometry.js +29 -0
  258. package/src/geometries/RingGeometry.js +36 -0
  259. package/src/geometries/ShapeGeometry.js +37 -0
  260. package/src/geometries/SphereGeometry.js +37 -0
  261. package/src/geometries/TetrahedronGeometry.js +32 -0
  262. package/src/geometries/TorusGeometry.js +35 -0
  263. package/src/geometries/TorusKnotGeometry.js +38 -0
  264. package/src/geometries/TubeGeometry.js +49 -0
  265. package/src/geometries/WireframeGeometry.js +32 -0
  266. package/src/helpers/ArrowHelper.js +60 -3
  267. package/src/helpers/AxesHelper.js +28 -0
  268. package/src/helpers/Box3Helper.js +28 -0
  269. package/src/helpers/BoxHelper.js +43 -7
  270. package/src/helpers/CameraHelper.js +61 -18
  271. package/src/helpers/DirectionalLightHelper.js +52 -0
  272. package/src/helpers/GridHelper.js +26 -0
  273. package/src/helpers/HemisphereLightHelper.js +39 -0
  274. package/src/helpers/PlaneHelper.js +33 -0
  275. package/src/helpers/PointLightHelper.js +43 -0
  276. package/src/helpers/PolarGridHelper.js +30 -0
  277. package/src/helpers/SkeletonHelper.js +39 -2
  278. package/src/helpers/SpotLightHelper.js +40 -0
  279. package/src/lights/AmbientLight.js +25 -0
  280. package/src/lights/DirectionalLight.js +57 -0
  281. package/src/lights/DirectionalLightShadow.js +15 -0
  282. package/src/lights/HemisphereLight.js +32 -0
  283. package/src/lights/Light.js +36 -0
  284. package/src/lights/LightProbe.js +43 -0
  285. package/src/lights/LightShadow.js +159 -0
  286. package/src/lights/PointLight.js +59 -0
  287. package/src/lights/PointLightShadow.js +21 -0
  288. package/src/lights/RectAreaLight.js +59 -0
  289. package/src/lights/SpotLight.js +102 -0
  290. package/src/lights/SpotLightShadow.js +24 -2
  291. package/src/lights/webgpu/IESSpotLight.js +21 -0
  292. package/src/loaders/Loader.js +132 -0
  293. package/src/loaders/MaterialLoader.js +7 -1
  294. package/src/loaders/nodes/NodeLoader.js +189 -0
  295. package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
  296. package/src/loaders/nodes/NodeObjectLoader.js +151 -0
  297. package/src/materials/LineDashedMaterial.js +0 -1
  298. package/src/materials/Material.js +469 -7
  299. package/src/materials/MeshPhongMaterial.js +1 -1
  300. package/src/materials/MeshPhysicalMaterial.js +2 -2
  301. package/src/materials/MeshStandardMaterial.js +2 -2
  302. package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
  303. package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
  304. package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
  305. package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
  306. package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
  307. package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
  308. package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
  309. package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
  310. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
  311. package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
  312. package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
  313. package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
  314. package/src/materials/nodes/NodeMaterial.js +1180 -0
  315. package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
  316. package/src/materials/nodes/PointsNodeMaterial.js +153 -0
  317. package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
  318. package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
  319. package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
  320. package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
  321. package/src/math/Box2.js +177 -0
  322. package/src/math/Box3.js +243 -0
  323. package/src/math/Color.js +343 -0
  324. package/src/math/ColorManagement.js +143 -102
  325. package/src/math/Cylindrical.js +65 -6
  326. package/src/math/Euler.js +137 -4
  327. package/src/math/Frustum.js +83 -0
  328. package/src/math/Interpolant.js +87 -8
  329. package/src/math/Line3.js +96 -2
  330. package/src/math/MathUtils.js +182 -19
  331. package/src/math/Matrix2.js +70 -0
  332. package/src/math/Matrix3.js +229 -4
  333. package/src/math/Matrix4.js +368 -3
  334. package/src/math/Plane.js +164 -2
  335. package/src/math/Quaternion.js +265 -9
  336. package/src/math/Ray.js +160 -0
  337. package/src/math/Sphere.js +147 -0
  338. package/src/math/Spherical.js +73 -11
  339. package/src/math/SphericalHarmonics3.js +112 -14
  340. package/src/math/Triangle.js +230 -2
  341. package/src/math/Vector2.js +396 -10
  342. package/src/math/Vector3.js +550 -13
  343. package/src/math/Vector4.js +415 -9
  344. package/src/math/interpolants/CubicInterpolant.js +10 -1
  345. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  346. package/src/math/interpolants/LinearInterpolant.js +13 -0
  347. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  348. package/src/nodes/Nodes.js +84 -166
  349. package/src/nodes/TSL.js +167 -0
  350. package/src/nodes/accessors/AccessorsUtils.js +39 -10
  351. package/src/nodes/accessors/Arrays.js +68 -0
  352. package/src/nodes/accessors/BatchNode.js +93 -26
  353. package/src/nodes/accessors/Bitangent.js +54 -0
  354. package/src/nodes/accessors/BufferAttributeNode.js +189 -11
  355. package/src/nodes/accessors/BufferNode.js +70 -5
  356. package/src/nodes/accessors/BuiltinNode.js +63 -0
  357. package/src/nodes/accessors/Camera.js +129 -0
  358. package/src/nodes/accessors/ClippingNode.js +152 -43
  359. package/src/nodes/accessors/CubeTextureNode.js +76 -13
  360. package/src/nodes/accessors/InstanceNode.js +118 -35
  361. package/src/nodes/accessors/InstancedMeshNode.js +50 -0
  362. package/src/nodes/accessors/Lights.js +129 -0
  363. package/src/nodes/accessors/MaterialNode.js +394 -58
  364. package/src/nodes/accessors/MaterialProperties.js +57 -1
  365. package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
  366. package/src/nodes/accessors/ModelNode.js +159 -12
  367. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
  368. package/src/nodes/accessors/MorphNode.js +60 -13
  369. package/src/nodes/accessors/Normal.js +156 -0
  370. package/src/nodes/accessors/Object3DNode.js +154 -35
  371. package/src/nodes/accessors/PointUVNode.js +35 -6
  372. package/src/nodes/accessors/Position.js +64 -0
  373. package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
  374. package/src/nodes/accessors/ReferenceNode.js +243 -6
  375. package/src/nodes/accessors/ReflectVector.js +36 -0
  376. package/src/nodes/accessors/RendererReferenceNode.js +57 -7
  377. package/src/nodes/accessors/SceneNode.js +98 -6
  378. package/src/nodes/accessors/SkinningNode.js +214 -21
  379. package/src/nodes/accessors/StorageBufferNode.js +288 -28
  380. package/src/nodes/accessors/StorageTextureNode.js +139 -12
  381. package/src/nodes/accessors/Tangent.js +62 -0
  382. package/src/nodes/accessors/Texture3DNode.js +98 -12
  383. package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
  384. package/src/nodes/accessors/TextureNode.js +347 -34
  385. package/src/nodes/accessors/TextureSizeNode.js +51 -9
  386. package/src/nodes/accessors/UV.js +11 -0
  387. package/src/nodes/accessors/UniformArrayNode.js +241 -32
  388. package/src/nodes/accessors/UserDataNode.js +55 -7
  389. package/src/nodes/accessors/VelocityNode.js +223 -0
  390. package/src/nodes/accessors/VertexColorNode.js +45 -6
  391. package/src/nodes/code/CodeNode.js +108 -8
  392. package/src/nodes/code/ExpressionNode.js +38 -7
  393. package/src/nodes/code/FunctionCallNode.js +62 -11
  394. package/src/nodes/code/FunctionNode.js +54 -24
  395. package/src/nodes/code/ScriptableNode.js +241 -17
  396. package/src/nodes/code/ScriptableValueNode.js +93 -8
  397. package/src/nodes/core/ArrayNode.js +142 -0
  398. package/src/nodes/core/AssignNode.js +60 -12
  399. package/src/nodes/core/AttributeNode.js +55 -22
  400. package/src/nodes/core/BypassNode.js +59 -11
  401. package/src/nodes/core/CacheNode.js +64 -10
  402. package/src/nodes/core/ConstNode.js +38 -3
  403. package/src/nodes/core/ContextNode.js +87 -12
  404. package/src/nodes/core/IndexNode.js +102 -10
  405. package/src/nodes/core/InputNode.js +55 -3
  406. package/src/nodes/core/LightingModel.js +65 -5
  407. package/src/nodes/core/MRTNode.js +81 -7
  408. package/src/nodes/core/Node.js +368 -50
  409. package/src/nodes/core/NodeAttribute.js +38 -0
  410. package/src/nodes/core/NodeBuilder.js +1317 -83
  411. package/src/nodes/core/NodeCache.js +41 -2
  412. package/src/nodes/core/NodeCode.js +31 -0
  413. package/src/nodes/core/NodeFrame.js +123 -2
  414. package/src/nodes/core/NodeFunction.js +46 -0
  415. package/src/nodes/core/NodeFunctionInput.js +44 -0
  416. package/src/nodes/core/NodeParser.js +11 -0
  417. package/src/nodes/core/NodeUniform.js +52 -0
  418. package/src/nodes/core/NodeUtils.js +226 -6
  419. package/src/nodes/core/NodeVar.js +47 -1
  420. package/src/nodes/core/NodeVarying.js +28 -0
  421. package/src/nodes/core/OutputStructNode.js +61 -17
  422. package/src/nodes/core/ParameterNode.js +34 -4
  423. package/src/nodes/core/PropertyNode.js +296 -32
  424. package/src/nodes/core/StackNode.js +108 -8
  425. package/src/nodes/core/StructNode.js +120 -0
  426. package/src/nodes/core/StructType.js +13 -0
  427. package/src/nodes/core/StructTypeNode.js +116 -9
  428. package/src/nodes/core/TempNode.js +37 -7
  429. package/src/nodes/core/UniformGroupNode.js +98 -17
  430. package/src/nodes/core/UniformNode.js +72 -4
  431. package/src/nodes/core/VarNode.js +170 -13
  432. package/src/nodes/core/VaryingNode.js +109 -8
  433. package/src/nodes/core/constants.js +40 -0
  434. package/src/nodes/display/BlendModes.js +193 -0
  435. package/src/nodes/display/BumpMapNode.js +47 -10
  436. package/src/nodes/display/ColorAdjustment.js +141 -0
  437. package/src/nodes/display/ColorSpaceFunctions.js +54 -0
  438. package/src/nodes/display/ColorSpaceNode.js +147 -68
  439. package/src/nodes/display/FrontFacingNode.js +39 -6
  440. package/src/nodes/display/NormalMapNode.js +55 -13
  441. package/src/nodes/display/PassNode.js +420 -19
  442. package/src/nodes/display/PosterizeNode.js +40 -7
  443. package/src/nodes/display/RenderOutputNode.js +81 -13
  444. package/src/nodes/display/ScreenNode.js +286 -0
  445. package/src/nodes/display/ToneMappingFunctions.js +242 -0
  446. package/src/nodes/display/ToneMappingNode.js +68 -175
  447. package/src/nodes/display/ToonOutlinePassNode.js +183 -0
  448. package/src/nodes/display/ViewportDepthNode.js +210 -36
  449. package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
  450. package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
  451. package/src/nodes/display/ViewportTextureNode.js +68 -11
  452. package/src/nodes/fog/Fog.js +113 -0
  453. package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  454. package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  455. package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  456. package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
  457. package/src/nodes/functions/BSDF/D_GGX.js +2 -2
  458. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  459. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  460. package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
  461. package/src/nodes/functions/BSDF/LTC.js +50 -6
  462. package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  463. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  464. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  465. package/src/nodes/functions/BasicLightingModel.js +27 -6
  466. package/src/nodes/functions/PhongLightingModel.js +38 -8
  467. package/src/nodes/functions/PhysicalLightingModel.js +215 -51
  468. package/src/nodes/functions/ShadowMaskModel.js +24 -1
  469. package/src/nodes/functions/ToonLightingModel.js +24 -5
  470. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  471. package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  472. package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
  473. package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  474. package/src/nodes/functions/material/getRoughness.js +2 -2
  475. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  476. package/src/nodes/geometry/RangeNode.js +62 -7
  477. package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
  478. package/src/nodes/gpgpu/BarrierNode.js +89 -0
  479. package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
  480. package/src/nodes/gpgpu/ComputeNode.js +124 -9
  481. package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
  482. package/src/nodes/lighting/AONode.js +24 -3
  483. package/src/nodes/lighting/AmbientLightNode.js +16 -8
  484. package/src/nodes/lighting/AnalyticLightNode.js +151 -231
  485. package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
  486. package/src/nodes/lighting/BasicLightMapNode.js +25 -5
  487. package/src/nodes/lighting/DirectionalLightNode.js +19 -20
  488. package/src/nodes/lighting/EnvironmentNode.js +34 -17
  489. package/src/nodes/lighting/HemisphereLightNode.js +42 -11
  490. package/src/nodes/lighting/IESSpotLightNode.js +18 -9
  491. package/src/nodes/lighting/IrradianceNode.js +23 -3
  492. package/src/nodes/lighting/LightProbeNode.js +29 -36
  493. package/src/nodes/lighting/LightUtils.js +12 -4
  494. package/src/nodes/lighting/LightingContextNode.js +70 -21
  495. package/src/nodes/lighting/LightingNode.js +22 -9
  496. package/src/nodes/lighting/LightsNode.js +309 -86
  497. package/src/nodes/lighting/PointLightNode.js +66 -32
  498. package/src/nodes/lighting/PointShadowNode.js +306 -0
  499. package/src/nodes/lighting/RectAreaLightNode.js +61 -25
  500. package/src/nodes/lighting/ShadowBaseNode.js +92 -0
  501. package/src/nodes/lighting/ShadowNode.js +812 -0
  502. package/src/nodes/lighting/SpotLightNode.js +73 -31
  503. package/src/nodes/materialx/MaterialXNodes.js +2 -2
  504. package/src/nodes/materialx/lib/mx_hsv.js +27 -22
  505. package/src/nodes/materialx/lib/mx_noise.js +70 -70
  506. package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
  507. package/src/nodes/math/ConditionalNode.js +230 -0
  508. package/src/nodes/math/Hash.js +21 -0
  509. package/src/nodes/math/MathNode.js +812 -131
  510. package/src/nodes/math/MathUtils.js +47 -8
  511. package/src/nodes/math/OperatorNode.js +410 -66
  512. package/src/nodes/math/TriNoise3D.js +32 -32
  513. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  514. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  515. package/src/nodes/pmrem/PMREMNode.js +188 -28
  516. package/src/nodes/pmrem/PMREMUtils.js +24 -24
  517. package/src/nodes/procedural/Checker.js +22 -0
  518. package/src/nodes/shapes/Shapes.js +32 -0
  519. package/src/nodes/tsl/TSLBase.js +31 -0
  520. package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
  521. package/src/nodes/utils/ArrayElementNode.js +45 -5
  522. package/src/nodes/utils/ConvertNode.js +39 -4
  523. package/src/nodes/utils/CubeMapNode.js +88 -8
  524. package/src/nodes/utils/Discard.js +24 -0
  525. package/src/nodes/utils/EquirectUVNode.js +39 -7
  526. package/src/nodes/utils/FlipNode.js +106 -0
  527. package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
  528. package/src/nodes/utils/JoinNode.js +31 -3
  529. package/src/nodes/utils/LoopNode.js +95 -9
  530. package/src/nodes/utils/MatcapUVNode.js +27 -8
  531. package/src/nodes/utils/MaxMipLevelNode.js +57 -6
  532. package/src/nodes/utils/MemberNode.js +68 -0
  533. package/src/nodes/utils/Oscillators.js +41 -0
  534. package/src/nodes/utils/Packing.js +21 -0
  535. package/src/nodes/utils/PostProcessingUtils.js +95 -0
  536. package/src/nodes/utils/RTTNode.js +141 -9
  537. package/src/nodes/utils/ReflectorNode.js +295 -21
  538. package/src/nodes/utils/RemapNode.js +93 -10
  539. package/src/nodes/utils/RotateNode.js +48 -13
  540. package/src/nodes/utils/SetNode.js +50 -4
  541. package/src/nodes/utils/SplitNode.js +62 -6
  542. package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
  543. package/src/nodes/utils/SpriteUtils.js +21 -5
  544. package/src/nodes/utils/StorageArrayElementNode.js +64 -12
  545. package/src/nodes/utils/Timer.js +73 -0
  546. package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
  547. package/src/nodes/utils/UVUtils.js +27 -9
  548. package/src/nodes/utils/ViewportUtils.js +16 -4
  549. package/src/objects/BatchedMesh.js +808 -281
  550. package/src/objects/Bone.js +24 -0
  551. package/src/objects/ClippingGroup.js +68 -0
  552. package/src/objects/Group.js +24 -0
  553. package/src/objects/InstancedMesh.js +120 -2
  554. package/src/objects/LOD.js +120 -5
  555. package/src/objects/Line.js +89 -6
  556. package/src/objects/LineLoop.js +20 -0
  557. package/src/objects/LineSegments.js +18 -0
  558. package/src/objects/Mesh.js +82 -23
  559. package/src/objects/Points.js +62 -0
  560. package/src/objects/Skeleton.js +107 -2
  561. package/src/objects/SkinnedMesh.js +99 -5
  562. package/src/objects/Sprite.js +54 -0
  563. package/src/renderers/WebGLRenderer.js +274 -157
  564. package/src/renderers/common/Animation.js +109 -12
  565. package/src/renderers/common/Attributes.js +40 -0
  566. package/src/renderers/common/Backend.js +504 -44
  567. package/src/renderers/common/Background.js +67 -9
  568. package/src/renderers/common/BindGroup.js +45 -1
  569. package/src/renderers/common/Binding.js +35 -0
  570. package/src/renderers/common/Bindings.js +136 -19
  571. package/src/renderers/common/Buffer.js +49 -0
  572. package/src/renderers/common/BufferUtils.js +25 -0
  573. package/src/renderers/common/BundleGroup.js +83 -0
  574. package/src/renderers/common/ChainMap.js +45 -6
  575. package/src/renderers/common/ClippingContext.js +175 -80
  576. package/src/renderers/common/Color4.js +40 -0
  577. package/src/renderers/common/ComputePipeline.js +24 -0
  578. package/src/renderers/common/Constants.js +2 -1
  579. package/src/renderers/common/CubeRenderTarget.js +22 -3
  580. package/src/renderers/common/DataMap.js +37 -1
  581. package/src/renderers/common/Geometries.js +111 -14
  582. package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  583. package/src/renderers/common/Info.js +78 -35
  584. package/src/renderers/common/Lighting.js +73 -0
  585. package/src/renderers/common/Pipeline.js +22 -0
  586. package/src/renderers/common/Pipelines.js +148 -5
  587. package/src/renderers/common/PostProcessing.js +112 -11
  588. package/src/renderers/common/ProgrammableStage.js +60 -2
  589. package/src/renderers/common/QuadMesh.js +56 -5
  590. package/src/renderers/common/RenderBundle.js +14 -8
  591. package/src/renderers/common/RenderBundles.js +39 -10
  592. package/src/renderers/common/RenderContext.js +205 -7
  593. package/src/renderers/common/RenderContexts.js +59 -6
  594. package/src/renderers/common/RenderList.js +230 -21
  595. package/src/renderers/common/RenderLists.js +45 -6
  596. package/src/renderers/common/RenderObject.js +552 -41
  597. package/src/renderers/common/RenderObjects.js +118 -9
  598. package/src/renderers/common/RenderPipeline.js +24 -0
  599. package/src/renderers/common/Renderer.js +1537 -239
  600. package/src/renderers/common/RendererUtils.js +191 -0
  601. package/src/renderers/common/SampledTexture.js +132 -3
  602. package/src/renderers/common/Sampler.js +30 -0
  603. package/src/renderers/common/StorageBuffer.js +24 -0
  604. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  605. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  606. package/src/renderers/common/StorageTexture.js +38 -0
  607. package/src/renderers/common/Textures.js +142 -32
  608. package/src/renderers/common/TimestampQueryPool.js +98 -0
  609. package/src/renderers/common/Uniform.js +225 -3
  610. package/src/renderers/common/UniformBuffer.js +19 -0
  611. package/src/renderers/common/UniformsGroup.js +157 -6
  612. package/src/renderers/common/XRManager.js +1185 -0
  613. package/src/renderers/common/XRRenderTarget.js +74 -0
  614. package/src/renderers/common/extras/PMREMGenerator.js +211 -53
  615. package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
  616. package/src/renderers/common/nodes/NodeLibrary.js +194 -0
  617. package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
  618. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  619. package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
  620. package/src/renderers/common/nodes/NodeUniform.js +285 -2
  621. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  622. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  623. package/src/renderers/common/nodes/Nodes.js +390 -70
  624. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
  625. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  626. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  627. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
  628. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  629. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  630. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  631. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  632. package/src/renderers/webgl/WebGLBackground.js +24 -1
  633. package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
  634. package/src/renderers/webgl/WebGLCapabilities.js +2 -0
  635. package/src/renderers/webgl/WebGLGeometries.js +0 -28
  636. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
  637. package/src/renderers/webgl/WebGLProgram.js +27 -29
  638. package/src/renderers/webgl/WebGLPrograms.js +24 -16
  639. package/src/renderers/webgl/WebGLState.js +68 -11
  640. package/src/renderers/webgl/WebGLTextures.js +49 -10
  641. package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
  642. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
  643. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
  644. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
  645. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  646. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  647. package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
  648. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
  649. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
  650. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  651. package/src/renderers/webgpu/WebGPUBackend.js +816 -236
  652. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
  653. package/src/renderers/webgpu/WebGPURenderer.js +45 -6
  654. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
  655. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
  656. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
  657. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
  658. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  659. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
  660. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
  661. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
  662. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
  663. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
  664. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
  665. package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
  666. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  667. package/src/renderers/webxr/WebXRManager.js +54 -32
  668. package/src/scenes/Fog.js +60 -0
  669. package/src/scenes/FogExp2.js +51 -0
  670. package/src/scenes/Scene.js +87 -0
  671. package/src/textures/Data3DTexture.js +2 -2
  672. package/src/textures/DepthTexture.js +2 -0
  673. package/src/textures/Source.js +2 -2
  674. package/src/textures/Texture.js +368 -5
  675. package/src/textures/VideoFrameTexture.js +35 -0
  676. package/src/utils.js +33 -1
  677. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  678. package/examples/jsm/animation/MMDPhysics.js +0 -1406
  679. package/examples/jsm/cameras/CinematicCamera.js +0 -208
  680. package/examples/jsm/controls/Controls.js +0 -32
  681. package/examples/jsm/exporters/MMDExporter.js +0 -217
  682. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  683. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  684. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  685. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  686. package/examples/jsm/loaders/MMDLoader.js +0 -2295
  687. package/examples/jsm/loaders/TiltLoader.js +0 -520
  688. package/examples/jsm/objects/InstancedPoints.js +0 -21
  689. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  690. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  691. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  692. package/src/nodes/accessors/BitangentNode.js +0 -13
  693. package/src/nodes/accessors/CameraNode.js +0 -19
  694. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  695. package/src/nodes/accessors/NormalNode.js +0 -14
  696. package/src/nodes/accessors/PositionNode.js +0 -10
  697. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  698. package/src/nodes/accessors/TangentNode.js +0 -23
  699. package/src/nodes/accessors/UVNode.js +0 -3
  700. package/src/nodes/core/NodeKeywords.js +0 -80
  701. package/src/nodes/core/UniformGroup.js +0 -13
  702. package/src/nodes/display/AfterImageNode.js +0 -152
  703. package/src/nodes/display/AnamorphicNode.js +0 -145
  704. package/src/nodes/display/BlendModeNode.js +0 -128
  705. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  706. package/src/nodes/display/DenoiseNode.js +0 -198
  707. package/src/nodes/display/DotScreenNode.js +0 -75
  708. package/src/nodes/display/FXAANode.js +0 -327
  709. package/src/nodes/display/FilmNode.js +0 -52
  710. package/src/nodes/display/GTAONode.js +0 -324
  711. package/src/nodes/display/GaussianBlurNode.js +0 -207
  712. package/src/nodes/display/Lut3DNode.js +0 -53
  713. package/src/nodes/display/RGBShiftNode.js +0 -49
  714. package/src/nodes/display/SepiaNode.js +0 -18
  715. package/src/nodes/display/TransitionNode.js +0 -76
  716. package/src/nodes/display/ViewportNode.js +0 -137
  717. package/src/nodes/fog/FogExp2Node.js +0 -34
  718. package/src/nodes/fog/FogNode.js +0 -48
  719. package/src/nodes/fog/FogRangeNode.js +0 -35
  720. package/src/nodes/lighting/LightNode.js +0 -57
  721. package/src/nodes/loaders/NodeLoader.js +0 -110
  722. package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
  723. package/src/nodes/loaders/NodeObjectLoader.js +0 -71
  724. package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  725. package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
  726. package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
  727. package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
  728. package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
  729. package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
  730. package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  731. package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
  732. package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
  733. package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
  734. package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
  735. package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
  736. package/src/nodes/materials/NodeMaterial.js +0 -680
  737. package/src/nodes/materials/PointsNodeMaterial.js +0 -39
  738. package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
  739. package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
  740. package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
  741. package/src/nodes/math/CondNode.js +0 -139
  742. package/src/nodes/math/HashNode.js +0 -34
  743. package/src/nodes/procedural/CheckerNode.js +0 -42
  744. package/src/nodes/utils/DiscardNode.js +0 -28
  745. package/src/nodes/utils/OscNode.js +0 -81
  746. package/src/nodes/utils/PackingNode.js +0 -55
  747. package/src/nodes/utils/TimerNode.js +0 -94
@@ -32,25 +32,82 @@ const _compareToWebGPU = {
32
32
 
33
33
  const _flipMap = [ 0, 1, 3, 2, 4, 5 ];
34
34
 
35
+ /**
36
+ * A WebGPU backend utility module for managing textures.
37
+ *
38
+ * @private
39
+ */
35
40
  class WebGPUTextureUtils {
36
41
 
42
+ /**
43
+ * Constructs a new utility object.
44
+ *
45
+ * @param {WebGPUBackend} backend - The WebGPU backend.
46
+ */
37
47
  constructor( backend ) {
38
48
 
49
+ /**
50
+ * A reference to the WebGPU backend.
51
+ *
52
+ * @type {WebGPUBackend}
53
+ */
39
54
  this.backend = backend;
40
55
 
56
+ /**
57
+ * A reference to the pass utils.
58
+ *
59
+ * @type {?WebGPUTexturePassUtils}
60
+ * @default null
61
+ */
41
62
  this._passUtils = null;
42
63
 
64
+ /**
65
+ * A dictionary for managing default textures. The key
66
+ * is the texture format, the value the texture object.
67
+ *
68
+ * @type {Object<string,Texture>}
69
+ */
43
70
  this.defaultTexture = {};
71
+
72
+ /**
73
+ * A dictionary for managing default cube textures. The key
74
+ * is the texture format, the value the texture object.
75
+ *
76
+ * @type {Object<string,CubeTexture>}
77
+ */
44
78
  this.defaultCubeTexture = {};
79
+
80
+ /**
81
+ * A default video frame.
82
+ *
83
+ * @type {?VideoFrame}
84
+ * @default null
85
+ */
45
86
  this.defaultVideoFrame = null;
46
87
 
88
+ /**
89
+ * Represents the color attachment of the default framebuffer.
90
+ *
91
+ * @type {?GPUTexture}
92
+ * @default null
93
+ */
47
94
  this.colorBuffer = null;
48
95
 
96
+ /**
97
+ * Represents the depth attachment of the default framebuffer.
98
+ *
99
+ * @type {DepthTexture}
100
+ */
49
101
  this.depthTexture = new DepthTexture();
50
102
  this.depthTexture.name = 'depthBuffer';
51
103
 
52
104
  }
53
105
 
106
+ /**
107
+ * Creates a GPU sampler for the given texture.
108
+ *
109
+ * @param {Texture} texture - The texture to create the sampler for.
110
+ */
54
111
  createSampler( texture ) {
55
112
 
56
113
  const backend = this.backend;
@@ -65,9 +122,17 @@ class WebGPUTextureUtils {
65
122
  magFilter: this._convertFilterMode( texture.magFilter ),
66
123
  minFilter: this._convertFilterMode( texture.minFilter ),
67
124
  mipmapFilter: this._convertFilterMode( texture.minFilter ),
68
- maxAnisotropy: texture.anisotropy
125
+ maxAnisotropy: 1
69
126
  };
70
127
 
128
+ // anisotropy can only be used when all filter modes are set to linear.
129
+
130
+ if ( samplerDescriptorGPU.magFilter === GPUFilterMode.Linear && samplerDescriptorGPU.minFilter === GPUFilterMode.Linear && samplerDescriptorGPU.mipmapFilter === GPUFilterMode.Linear ) {
131
+
132
+ samplerDescriptorGPU.maxAnisotropy = texture.anisotropy;
133
+
134
+ }
135
+
71
136
  if ( texture.isDepthTexture && texture.compareFunction !== null ) {
72
137
 
73
138
  samplerDescriptorGPU.compare = _compareToWebGPU[ texture.compareFunction ];
@@ -78,6 +143,12 @@ class WebGPUTextureUtils {
78
143
 
79
144
  }
80
145
 
146
+ /**
147
+ * Creates a default texture for the given texture that can be used
148
+ * as a placeholder until the actual texture is ready for usage.
149
+ *
150
+ * @param {Texture} texture - The texture to create a default texture for.
151
+ */
81
152
  createDefaultTexture( texture ) {
82
153
 
83
154
  let textureGPU;
@@ -102,6 +173,12 @@ class WebGPUTextureUtils {
102
173
 
103
174
  }
104
175
 
176
+ /**
177
+ * Defines a texture on the GPU for the given texture object.
178
+ *
179
+ * @param {Texture} texture - The texture.
180
+ * @param {Object} [options={}] - Optional configuration parameter.
181
+ */
105
182
  createTexture( texture, options = {} ) {
106
183
 
107
184
  const backend = this.backend;
@@ -119,14 +196,26 @@ class WebGPUTextureUtils {
119
196
 
120
197
  const { width, height, depth, levels } = options;
121
198
 
199
+ if ( texture.isFramebufferTexture ) {
200
+
201
+ if ( options.renderTarget ) {
202
+
203
+ options.format = this.backend.utils.getCurrentColorFormat( options.renderTarget );
204
+
205
+ } else {
206
+
207
+ options.format = this.backend.utils.getPreferredCanvasFormat();
208
+
209
+ }
210
+
211
+ }
212
+
122
213
  const dimension = this._getDimension( texture );
123
214
  const format = texture.internalFormat || options.format || getFormat( texture, backend.device );
124
215
 
125
- let sampleCount = options.sampleCount !== undefined ? options.sampleCount : 1;
216
+ textureData.format = format;
126
217
 
127
- sampleCount = backend.utils.getSampleCount( sampleCount );
128
-
129
- const primarySampleCount = texture.isRenderTargetTexture && ! texture.isMultisampleRenderTargetTexture ? 1 : sampleCount;
218
+ const { samples, primarySamples, isMSAA } = backend.utils.getTextureSampleData( texture );
130
219
 
131
220
  let usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC;
132
221
 
@@ -136,7 +225,7 @@ class WebGPUTextureUtils {
136
225
 
137
226
  }
138
227
 
139
- if ( texture.isCompressedTexture !== true ) {
228
+ if ( texture.isCompressedTexture !== true && texture.isCompressedArrayTexture !== true ) {
140
229
 
141
230
  usage |= GPUTextureUsage.RENDER_ATTACHMENT;
142
231
 
@@ -150,7 +239,7 @@ class WebGPUTextureUtils {
150
239
  depthOrArrayLayers: depth,
151
240
  },
152
241
  mipLevelCount: levels,
153
- sampleCount: primarySampleCount,
242
+ sampleCount: primarySamples,
154
243
  dimension: dimension,
155
244
  format: format,
156
245
  usage: usage
@@ -176,7 +265,8 @@ class WebGPUTextureUtils {
176
265
 
177
266
  console.warn( 'WebGPURenderer: Texture format not supported.' );
178
267
 
179
- return this.createDefaultTexture( texture );
268
+ this.createDefaultTexture( texture );
269
+ return;
180
270
 
181
271
  }
182
272
 
@@ -184,12 +274,12 @@ class WebGPUTextureUtils {
184
274
 
185
275
  }
186
276
 
187
- if ( texture.isRenderTargetTexture && sampleCount > 1 && ! texture.isMultisampleRenderTargetTexture ) {
277
+ if ( isMSAA ) {
188
278
 
189
279
  const msaaTextureDescriptorGPU = Object.assign( {}, textureDescriptorGPU );
190
280
 
191
281
  msaaTextureDescriptorGPU.label = msaaTextureDescriptorGPU.label + '-msaa';
192
- msaaTextureDescriptorGPU.sampleCount = sampleCount;
282
+ msaaTextureDescriptorGPU.sampleCount = samples;
193
283
 
194
284
  textureData.msaaTexture = backend.device.createTexture( msaaTextureDescriptorGPU );
195
285
 
@@ -201,12 +291,17 @@ class WebGPUTextureUtils {
201
291
 
202
292
  }
203
293
 
294
+ /**
295
+ * Destroys the GPU data for the given texture object.
296
+ *
297
+ * @param {Texture} texture - The texture.
298
+ */
204
299
  destroyTexture( texture ) {
205
300
 
206
301
  const backend = this.backend;
207
302
  const textureData = backend.get( texture );
208
303
 
209
- textureData.texture.destroy();
304
+ if ( textureData.texture !== undefined ) textureData.texture.destroy();
210
305
 
211
306
  if ( textureData.msaaTexture !== undefined ) textureData.msaaTexture.destroy();
212
307
 
@@ -214,6 +309,11 @@ class WebGPUTextureUtils {
214
309
 
215
310
  }
216
311
 
312
+ /**
313
+ * Destroys the GPU sampler for the given texture.
314
+ *
315
+ * @param {Texture} texture - The texture to destroy the sampler for.
316
+ */
217
317
  destroySampler( texture ) {
218
318
 
219
319
  const backend = this.backend;
@@ -223,6 +323,11 @@ class WebGPUTextureUtils {
223
323
 
224
324
  }
225
325
 
326
+ /**
327
+ * Generates mipmaps for the given texture.
328
+ *
329
+ * @param {Texture} texture - The texture.
330
+ */
226
331
  generateMipmaps( texture ) {
227
332
 
228
333
  const textureData = this.backend.get( texture );
@@ -237,12 +342,24 @@ class WebGPUTextureUtils {
237
342
 
238
343
  } else {
239
344
 
240
- this._generateMipmaps( textureData.texture, textureData.textureDescriptorGPU );
345
+ const depth = texture.image.depth || 1;
346
+
347
+ for ( let i = 0; i < depth; i ++ ) {
348
+
349
+ this._generateMipmaps( textureData.texture, textureData.textureDescriptorGPU, i );
350
+
351
+ }
241
352
 
242
353
  }
243
354
 
244
355
  }
245
356
 
357
+ /**
358
+ * Returns the color buffer representing the color
359
+ * attachment of the default framebuffer.
360
+ *
361
+ * @return {GPUTexture} The color buffer.
362
+ */
246
363
  getColorBuffer() {
247
364
 
248
365
  if ( this.colorBuffer ) this.colorBuffer.destroy();
@@ -258,7 +375,7 @@ class WebGPUTextureUtils {
258
375
  depthOrArrayLayers: 1
259
376
  },
260
377
  sampleCount: backend.utils.getSampleCount( backend.renderer.samples ),
261
- format: GPUTextureFormat.BGRA8Unorm,
378
+ format: backend.utils.getPreferredCanvasFormat(),
262
379
  usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC
263
380
  } );
264
381
 
@@ -266,6 +383,14 @@ class WebGPUTextureUtils {
266
383
 
267
384
  }
268
385
 
386
+ /**
387
+ * Returns the depth buffer representing the depth
388
+ * attachment of the default framebuffer.
389
+ *
390
+ * @param {boolean} [depth=true] - Whether depth is enabled or not.
391
+ * @param {boolean} [stencil=false] - Whether stencil is enabled or not.
392
+ * @return {GPUTexture} The depth buffer.
393
+ */
269
394
  getDepthBuffer( depth = true, stencil = false ) {
270
395
 
271
396
  const backend = this.backend;
@@ -306,12 +431,18 @@ class WebGPUTextureUtils {
306
431
  depthTexture.image.width = width;
307
432
  depthTexture.image.height = height;
308
433
 
309
- this.createTexture( depthTexture, { sampleCount: backend.utils.getSampleCount( backend.renderer.samples ), width, height } );
434
+ this.createTexture( depthTexture, { width, height } );
310
435
 
311
436
  return backend.get( depthTexture ).texture;
312
437
 
313
438
  }
314
439
 
440
+ /**
441
+ * Uploads the updated texture data to the GPU.
442
+ *
443
+ * @param {Texture} texture - The texture.
444
+ * @param {Object} [options={}] - Optional configuration parameter.
445
+ */
315
446
  updateTexture( texture, options ) {
316
447
 
317
448
  const textureData = this.backend.get( texture );
@@ -335,7 +466,7 @@ class WebGPUTextureUtils {
335
466
 
336
467
  }
337
468
 
338
- } else if ( texture.isCompressedTexture ) {
469
+ } else if ( texture.isCompressedTexture || texture.isCompressedArrayTexture ) {
339
470
 
340
471
  this._copyCompressedBufferToTexture( texture.mipmaps, textureData.texture, textureDescriptorGPU );
341
472
 
@@ -363,7 +494,19 @@ class WebGPUTextureUtils {
363
494
 
364
495
  }
365
496
 
366
- async copyTextureToBuffer( texture, x, y, width, height ) {
497
+ /**
498
+ * Returns texture data as a typed array.
499
+ *
500
+ * @async
501
+ * @param {Texture} texture - The texture to copy.
502
+ * @param {number} x - The x coordinate of the copy origin.
503
+ * @param {number} y - The y coordinate of the copy origin.
504
+ * @param {number} width - The width of the copy.
505
+ * @param {number} height - The height of the copy.
506
+ * @param {number} faceIndex - The face index.
507
+ * @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.
508
+ */
509
+ async copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {
367
510
 
368
511
  const device = this.backend.device;
369
512
 
@@ -387,7 +530,7 @@ class WebGPUTextureUtils {
387
530
  encoder.copyTextureToBuffer(
388
531
  {
389
532
  texture: textureGPU,
390
- origin: { x, y },
533
+ origin: { x, y, z: faceIndex },
391
534
  },
392
535
  {
393
536
  buffer: readBuffer,
@@ -412,6 +555,13 @@ class WebGPUTextureUtils {
412
555
 
413
556
  }
414
557
 
558
+ /**
559
+ * Returns `true` if the given texture is an environment map.
560
+ *
561
+ * @private
562
+ * @param {Texture} texture - The texture.
563
+ * @return {boolean} Whether the given texture is an environment map or not.
564
+ */
415
565
  _isEnvironmentTexture( texture ) {
416
566
 
417
567
  const mapping = texture.mapping;
@@ -420,6 +570,13 @@ class WebGPUTextureUtils {
420
570
 
421
571
  }
422
572
 
573
+ /**
574
+ * Returns the default GPU texture for the given format.
575
+ *
576
+ * @private
577
+ * @param {string} format - The GPU format.
578
+ * @return {GPUTexture} The GPU texture.
579
+ */
423
580
  _getDefaultTextureGPU( format ) {
424
581
 
425
582
  let defaultTexture = this.defaultTexture[ format ];
@@ -440,6 +597,13 @@ class WebGPUTextureUtils {
440
597
 
441
598
  }
442
599
 
600
+ /**
601
+ * Returns the default GPU cube texture for the given format.
602
+ *
603
+ * @private
604
+ * @param {string} format - The GPU format.
605
+ * @return {GPUTexture} The GPU texture.
606
+ */
443
607
  _getDefaultCubeTextureGPU( format ) {
444
608
 
445
609
  let defaultCubeTexture = this.defaultTexture[ format ];
@@ -460,6 +624,12 @@ class WebGPUTextureUtils {
460
624
 
461
625
  }
462
626
 
627
+ /**
628
+ * Returns the default video frame used as default data in context of video textures.
629
+ *
630
+ * @private
631
+ * @return {VideoFrame} The video frame.
632
+ */
463
633
  _getDefaultVideoFrame() {
464
634
 
465
635
  let defaultVideoFrame = this.defaultVideoFrame;
@@ -481,6 +651,15 @@ class WebGPUTextureUtils {
481
651
 
482
652
  }
483
653
 
654
+ /**
655
+ * Uploads cube texture image data to the GPU memory.
656
+ *
657
+ * @private
658
+ * @param {Array} images - The cube image data.
659
+ * @param {GPUTexture} textureGPU - The GPU texture.
660
+ * @param {Object} textureDescriptorGPU - The GPU texture descriptor.
661
+ * @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.
662
+ */
484
663
  _copyCubeMapToTexture( images, textureGPU, textureDescriptorGPU, flipY ) {
485
664
 
486
665
  for ( let i = 0; i < 6; i ++ ) {
@@ -503,13 +682,24 @@ class WebGPUTextureUtils {
503
682
 
504
683
  }
505
684
 
685
+ /**
686
+ * Uploads texture image data to the GPU memory.
687
+ *
688
+ * @private
689
+ * @param {HTMLImageElement|ImageBitmap|HTMLCanvasElement} image - The image data.
690
+ * @param {GPUTexture} textureGPU - The GPU texture.
691
+ * @param {Object} textureDescriptorGPU - The GPU texture descriptor.
692
+ * @param {number} originDepth - The origin depth.
693
+ * @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.
694
+ */
506
695
  _copyImageToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY ) {
507
696
 
508
697
  const device = this.backend.device;
509
698
 
510
699
  device.queue.copyExternalImageToTexture(
511
700
  {
512
- source: image
701
+ source: image,
702
+ flipY: flipY
513
703
  }, {
514
704
  texture: textureGPU,
515
705
  mipLevel: 0,
@@ -521,14 +711,14 @@ class WebGPUTextureUtils {
521
711
  }
522
712
  );
523
713
 
524
- if ( flipY === true ) {
525
-
526
- this._flipY( textureGPU, textureDescriptorGPU, originDepth );
527
-
528
- }
529
-
530
714
  }
531
715
 
716
+ /**
717
+ * Returns the pass utils singleton.
718
+ *
719
+ * @private
720
+ * @return {WebGPUTexturePassUtils} The utils instance.
721
+ */
532
722
  _getPassUtils() {
533
723
 
534
724
  let passUtils = this._passUtils;
@@ -543,18 +733,45 @@ class WebGPUTextureUtils {
543
733
 
544
734
  }
545
735
 
736
+ /**
737
+ * Generates mipmaps for the given GPU texture.
738
+ *
739
+ * @private
740
+ * @param {GPUTexture} textureGPU - The GPU texture object.
741
+ * @param {Object} textureDescriptorGPU - The texture descriptor.
742
+ * @param {number} [baseArrayLayer=0] - The index of the first array layer accessible to the texture view.
743
+ */
546
744
  _generateMipmaps( textureGPU, textureDescriptorGPU, baseArrayLayer = 0 ) {
547
745
 
548
746
  this._getPassUtils().generateMipmaps( textureGPU, textureDescriptorGPU, baseArrayLayer );
549
747
 
550
748
  }
551
749
 
750
+ /**
751
+ * Flip the contents of the given GPU texture along its vertical axis.
752
+ *
753
+ * @private
754
+ * @param {GPUTexture} textureGPU - The GPU texture object.
755
+ * @param {Object} textureDescriptorGPU - The texture descriptor.
756
+ * @param {number} [originDepth=0] - The origin depth.
757
+ */
552
758
  _flipY( textureGPU, textureDescriptorGPU, originDepth = 0 ) {
553
759
 
554
760
  this._getPassUtils().flipY( textureGPU, textureDescriptorGPU, originDepth );
555
761
 
556
762
  }
557
763
 
764
+ /**
765
+ * Uploads texture buffer data to the GPU memory.
766
+ *
767
+ * @private
768
+ * @param {Object} image - An object defining the image buffer data.
769
+ * @param {GPUTexture} textureGPU - The GPU texture.
770
+ * @param {Object} textureDescriptorGPU - The GPU texture descriptor.
771
+ * @param {number} originDepth - The origin depth.
772
+ * @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.
773
+ * @param {number} [depth=0] - TODO.
774
+ */
558
775
  _copyBufferToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, depth = 0 ) {
559
776
 
560
777
  // @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()
@@ -592,6 +809,14 @@ class WebGPUTextureUtils {
592
809
 
593
810
  }
594
811
 
812
+ /**
813
+ * Uploads compressed texture data to the GPU memory.
814
+ *
815
+ * @private
816
+ * @param {Array<Object>} mipmaps - An array with mipmap data.
817
+ * @param {GPUTexture} textureGPU - The GPU texture.
818
+ * @param {Object} textureDescriptorGPU - The GPU texture descriptor.
819
+ */
595
820
  _copyCompressedBufferToTexture( mipmaps, textureGPU, textureDescriptorGPU ) {
596
821
 
597
822
  // @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()
@@ -599,6 +824,7 @@ class WebGPUTextureUtils {
599
824
  const device = this.backend.device;
600
825
 
601
826
  const blockData = this._getBlockData( textureDescriptorGPU.format );
827
+ const isTextureArray = textureDescriptorGPU.size.depthOrArrayLayers > 1;
602
828
 
603
829
  for ( let i = 0; i < mipmaps.length; i ++ ) {
604
830
 
@@ -606,34 +832,48 @@ class WebGPUTextureUtils {
606
832
 
607
833
  const width = mipmap.width;
608
834
  const height = mipmap.height;
835
+ const depth = isTextureArray ? textureDescriptorGPU.size.depthOrArrayLayers : 1;
609
836
 
610
837
  const bytesPerRow = Math.ceil( width / blockData.width ) * blockData.byteLength;
838
+ const bytesPerImage = bytesPerRow * Math.ceil( height / blockData.height );
839
+
840
+ for ( let j = 0; j < depth; j ++ ) {
841
+
842
+ device.queue.writeTexture(
843
+ {
844
+ texture: textureGPU,
845
+ mipLevel: i,
846
+ origin: { x: 0, y: 0, z: j }
847
+ },
848
+ mipmap.data,
849
+ {
850
+ offset: j * bytesPerImage,
851
+ bytesPerRow,
852
+ rowsPerImage: Math.ceil( height / blockData.height )
853
+ },
854
+ {
855
+ width: Math.ceil( width / blockData.width ) * blockData.width,
856
+ height: Math.ceil( height / blockData.height ) * blockData.height,
857
+ depthOrArrayLayers: 1
858
+ }
859
+ );
611
860
 
612
- device.queue.writeTexture(
613
- {
614
- texture: textureGPU,
615
- mipLevel: i
616
- },
617
- mipmap.data,
618
- {
619
- offset: 0,
620
- bytesPerRow
621
- },
622
- {
623
- width: Math.ceil( width / blockData.width ) * blockData.width,
624
- height: Math.ceil( height / blockData.width ) * blockData.width,
625
- depthOrArrayLayers: 1
626
- }
627
- );
861
+ }
628
862
 
629
863
  }
630
864
 
631
865
  }
632
866
 
867
+ /**
868
+ * This method is only relevant for compressed texture formats. It returns a block
869
+ * data descriptor for the given GPU compressed texture format.
870
+ *
871
+ * @private
872
+ * @param {string} format - The GPU compressed texture format.
873
+ * @return {Object} The block data descriptor.
874
+ */
633
875
  _getBlockData( format ) {
634
876
 
635
- // this method is only relevant for compressed texture formats
636
-
637
877
  if ( format === GPUTextureFormat.BC1RGBAUnorm || format === GPUTextureFormat.BC1RGBAUnormSRGB ) return { byteLength: 8, width: 4, height: 4 }; // DXT1
638
878
  if ( format === GPUTextureFormat.BC2RGBAUnorm || format === GPUTextureFormat.BC2RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // DXT3
639
879
  if ( format === GPUTextureFormat.BC3RGBAUnorm || format === GPUTextureFormat.BC3RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // DXT5
@@ -667,6 +907,13 @@ class WebGPUTextureUtils {
667
907
 
668
908
  }
669
909
 
910
+ /**
911
+ * Converts the three.js uv wrapping constants to GPU address mode constants.
912
+ *
913
+ * @private
914
+ * @param {number} value - The three.js constant defining a uv wrapping mode.
915
+ * @return {string} The GPU address mode.
916
+ */
670
917
  _convertAddressMode( value ) {
671
918
 
672
919
  let addressMode = GPUAddressMode.ClampToEdge;
@@ -685,6 +932,13 @@ class WebGPUTextureUtils {
685
932
 
686
933
  }
687
934
 
935
+ /**
936
+ * Converts the three.js filter constants to GPU filter constants.
937
+ *
938
+ * @private
939
+ * @param {number} value - The three.js constant defining a filter mode.
940
+ * @return {string} The GPU filter mode.
941
+ */
688
942
  _convertFilterMode( value ) {
689
943
 
690
944
  let filterMode = GPUFilterMode.Linear;
@@ -699,6 +953,13 @@ class WebGPUTextureUtils {
699
953
 
700
954
  }
701
955
 
956
+ /**
957
+ * Returns the bytes-per-texel value for the given GPU texture format.
958
+ *
959
+ * @private
960
+ * @param {string} format - The GPU texture format.
961
+ * @return {number} The bytes-per-texel.
962
+ */
702
963
  _getBytesPerTexel( format ) {
703
964
 
704
965
  // 8-bit formats
@@ -755,6 +1016,13 @@ class WebGPUTextureUtils {
755
1016
 
756
1017
  }
757
1018
 
1019
+ /**
1020
+ * Returns the corresponding typed array type for the given GPU texture format.
1021
+ *
1022
+ * @private
1023
+ * @param {string} format - The GPU texture format.
1024
+ * @return {TypedArray.constructor} The typed array type.
1025
+ */
758
1026
  _getTypedArrayType( format ) {
759
1027
 
760
1028
  if ( format === GPUTextureFormat.R8Uint ) return Uint8Array;
@@ -777,9 +1045,9 @@ class WebGPUTextureUtils {
777
1045
  if ( format === GPUTextureFormat.RG16Sint ) return Int16Array;
778
1046
  if ( format === GPUTextureFormat.RGBA16Uint ) return Uint16Array;
779
1047
  if ( format === GPUTextureFormat.RGBA16Sint ) return Int16Array;
780
- if ( format === GPUTextureFormat.R16Float ) return Float32Array;
781
- if ( format === GPUTextureFormat.RG16Float ) return Float32Array;
782
- if ( format === GPUTextureFormat.RGBA16Float ) return Float32Array;
1048
+ if ( format === GPUTextureFormat.R16Float ) return Uint16Array;
1049
+ if ( format === GPUTextureFormat.RG16Float ) return Uint16Array;
1050
+ if ( format === GPUTextureFormat.RGBA16Float ) return Uint16Array;
783
1051
 
784
1052
 
785
1053
  if ( format === GPUTextureFormat.R32Uint ) return Uint32Array;
@@ -805,6 +1073,13 @@ class WebGPUTextureUtils {
805
1073
 
806
1074
  }
807
1075
 
1076
+ /**
1077
+ * Returns the GPU dimensions for the given texture.
1078
+ *
1079
+ * @private
1080
+ * @param {Texture} texture - The texture.
1081
+ * @return {string} The GPU dimension.
1082
+ */
808
1083
  _getDimension( texture ) {
809
1084
 
810
1085
  let dimension;
@@ -825,6 +1100,14 @@ class WebGPUTextureUtils {
825
1100
 
826
1101
  }
827
1102
 
1103
+ /**
1104
+ * Returns the GPU format for the given texture.
1105
+ *
1106
+ * @param {Texture} texture - The texture.
1107
+ * @param {?GPUDevice} [device=null] - The GPU device which is used for feature detection.
1108
+ * It is not necessary to apply the device for most formats.
1109
+ * @return {string} The GPU format.
1110
+ */
828
1111
  export function getFormat( texture, device = null ) {
829
1112
 
830
1113
  const format = texture.format;
@@ -833,11 +1116,7 @@ export function getFormat( texture, device = null ) {
833
1116
 
834
1117
  let formatGPU;
835
1118
 
836
- if ( texture.isFramebufferTexture === true && texture.type === UnsignedByteType ) {
837
-
838
- formatGPU = GPUTextureFormat.BGRA8Unorm;
839
-
840
- } else if ( texture.isCompressedTexture === true ) {
1119
+ if ( texture.isCompressedTexture === true || texture.isCompressedArrayTexture === true ) {
841
1120
 
842
1121
  switch ( format ) {
843
1122
 
@@ -917,6 +1196,10 @@ export function getFormat( texture, device = null ) {
917
1196
  formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC12x12UnormSRGB : GPUTextureFormat.ASTC12x12Unorm;
918
1197
  break;
919
1198
 
1199
+ case RGBAFormat:
1200
+ formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.RGBA8UnormSRGB : GPUTextureFormat.RGBA8Unorm;
1201
+ break;
1202
+
920
1203
  default:
921
1204
  console.error( 'WebGPURenderer: Unsupported texture format.', format );
922
1205