super-three 0.177.0 → 0.181.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (501) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +1994 -749
  3. package/build/three.core.js +1358 -506
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +631 -247
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +113 -33
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +9571 -3424
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +9397 -3426
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  14. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  15. package/examples/jsm/Addons.js +2 -3
  16. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  17. package/examples/jsm/capabilities/WebGL.js +0 -27
  18. package/examples/jsm/capabilities/WebGPU.js +1 -1
  19. package/examples/jsm/controls/ArcballControls.js +9 -9
  20. package/examples/jsm/controls/DragControls.js +7 -57
  21. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  22. package/examples/jsm/controls/FlyControls.js +1 -1
  23. package/examples/jsm/controls/OrbitControls.js +2 -2
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +1 -1
  26. package/examples/jsm/controls/TransformControls.js +62 -15
  27. package/examples/jsm/csm/CSMShadowNode.js +4 -4
  28. package/examples/jsm/effects/AsciiEffect.js +8 -8
  29. package/examples/jsm/environments/RoomEnvironment.js +8 -3
  30. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  31. package/examples/jsm/exporters/EXRExporter.js +1 -1
  32. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  33. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  34. package/examples/jsm/exporters/PLYExporter.js +1 -1
  35. package/examples/jsm/exporters/USDZExporter.js +683 -299
  36. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  37. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  38. package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
  39. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  40. package/examples/jsm/geometries/TextGeometry.js +3 -2
  41. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  42. package/examples/jsm/helpers/ViewHelper.js +43 -5
  43. package/examples/jsm/inspector/Inspector.js +427 -0
  44. package/examples/jsm/inspector/RendererInspector.js +415 -0
  45. package/examples/jsm/inspector/tabs/Console.js +204 -0
  46. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  47. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  48. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  49. package/examples/jsm/inspector/ui/Graph.js +95 -0
  50. package/examples/jsm/inspector/ui/Item.js +170 -0
  51. package/examples/jsm/inspector/ui/List.js +75 -0
  52. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  53. package/examples/jsm/inspector/ui/Style.js +654 -0
  54. package/examples/jsm/inspector/ui/Tab.js +46 -0
  55. package/examples/jsm/inspector/ui/Values.js +423 -0
  56. package/examples/jsm/inspector/ui/utils.js +56 -0
  57. package/examples/jsm/interactive/HTMLMesh.js +11 -13
  58. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  59. package/examples/jsm/interactive/SelectionBox.js +30 -0
  60. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  61. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  62. package/examples/jsm/lights/LightProbeGenerator.js +14 -3
  63. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  64. package/examples/jsm/lines/Line2.js +3 -3
  65. package/examples/jsm/lines/LineGeometry.js +1 -1
  66. package/examples/jsm/lines/LineSegments2.js +2 -2
  67. package/examples/jsm/lines/Wireframe.js +2 -2
  68. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  69. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  70. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  71. package/examples/jsm/loaders/3MFLoader.js +1 -1
  72. package/examples/jsm/loaders/ColladaLoader.js +4 -4
  73. package/examples/jsm/loaders/DDSLoader.js +1 -1
  74. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  75. package/examples/jsm/loaders/EXRLoader.js +210 -22
  76. package/examples/jsm/loaders/FBXLoader.js +4 -4
  77. package/examples/jsm/loaders/FontLoader.js +23 -5
  78. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  79. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  80. package/examples/jsm/loaders/HDRLoader.js +486 -0
  81. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  82. package/examples/jsm/loaders/KTXLoader.js +2 -2
  83. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  84. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  85. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  86. package/examples/jsm/loaders/LWOLoader.js +2 -2
  87. package/examples/jsm/loaders/MaterialXLoader.js +233 -34
  88. package/examples/jsm/loaders/OBJLoader.js +1 -1
  89. package/examples/jsm/loaders/PDBLoader.js +1 -1
  90. package/examples/jsm/loaders/RGBELoader.js +7 -473
  91. package/examples/jsm/loaders/SVGLoader.js +2 -2
  92. package/examples/jsm/loaders/TTFLoader.js +13 -1
  93. package/examples/jsm/loaders/USDLoader.js +219 -0
  94. package/examples/jsm/loaders/USDZLoader.js +4 -892
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  96. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  97. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  98. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  99. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  100. package/examples/jsm/math/ColorSpaces.js +19 -1
  101. package/examples/jsm/math/ConvexHull.js +3 -3
  102. package/examples/jsm/math/ImprovedNoise.js +1 -1
  103. package/examples/jsm/math/Lut.js +2 -2
  104. package/examples/jsm/math/SimplexNoise.js +1 -1
  105. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  106. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  107. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  108. package/examples/jsm/misc/TubePainter.js +383 -40
  109. package/examples/jsm/misc/Volume.js +1 -1
  110. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  111. package/examples/jsm/objects/LensflareMesh.js +3 -3
  112. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  113. package/examples/jsm/objects/Sky.js +1 -1
  114. package/examples/jsm/objects/SkyMesh.js +3 -3
  115. package/examples/jsm/objects/Water.js +3 -3
  116. package/examples/jsm/objects/WaterMesh.js +6 -6
  117. package/examples/jsm/physics/RapierPhysics.js +95 -16
  118. package/examples/jsm/postprocessing/GTAOPass.js +10 -9
  119. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  120. package/examples/jsm/postprocessing/OutlinePass.js +17 -17
  121. package/examples/jsm/postprocessing/SSAOPass.js +10 -9
  122. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  123. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  124. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  125. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  126. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  127. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  128. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  129. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  130. package/examples/jsm/shaders/BokehShader.js +1 -1
  131. package/examples/jsm/shaders/BokehShader2.js +1 -1
  132. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  133. package/examples/jsm/shaders/FocusShader.js +1 -1
  134. package/examples/jsm/shaders/GTAOShader.js +2 -2
  135. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  136. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  137. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  138. package/examples/jsm/shaders/SSRShader.js +1 -1
  139. package/examples/jsm/shaders/SepiaShader.js +1 -1
  140. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  141. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  142. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
  143. package/examples/jsm/shaders/VignetteShader.js +1 -1
  144. package/examples/jsm/transpiler/AST.js +381 -30
  145. package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
  146. package/examples/jsm/transpiler/Linker.js +327 -0
  147. package/examples/jsm/transpiler/TSLEncoder.js +196 -92
  148. package/examples/jsm/transpiler/Transpiler.js +17 -1
  149. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  150. package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  151. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  152. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  153. package/examples/jsm/tsl/display/BloomNode.js +11 -6
  154. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  155. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  156. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  157. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  158. package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
  159. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  160. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  161. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  162. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  163. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  164. package/examples/jsm/tsl/display/TRAANode.js +578 -0
  165. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  166. package/examples/jsm/tsl/display/hashBlur.js +18 -20
  167. package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
  168. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  169. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  170. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  171. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  172. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  173. package/package.json +5 -10
  174. package/src/Three.Core.js +5 -2
  175. package/src/Three.TSL.js +112 -32
  176. package/src/Three.WebGPU.Nodes.js +2 -0
  177. package/src/Three.WebGPU.js +4 -0
  178. package/src/animation/AnimationClip.js +20 -4
  179. package/src/animation/AnimationMixer.js +3 -3
  180. package/src/animation/AnimationObjectGroup.js +2 -1
  181. package/src/animation/KeyframeTrack.js +8 -7
  182. package/src/animation/PropertyBinding.js +12 -11
  183. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  184. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  185. package/src/audio/Audio.js +10 -9
  186. package/src/audio/PositionalAudio.js +1 -1
  187. package/src/cameras/Camera.js +14 -0
  188. package/src/cameras/OrthographicCamera.js +2 -2
  189. package/src/cameras/PerspectiveCamera.js +2 -2
  190. package/src/cameras/StereoCamera.js +2 -2
  191. package/src/constants.js +13 -5
  192. package/src/core/BufferAttribute.js +3 -3
  193. package/src/core/BufferGeometry.js +10 -10
  194. package/src/core/Clock.js +2 -8
  195. package/src/core/EventDispatcher.js +1 -1
  196. package/src/core/GLBufferAttribute.js +13 -1
  197. package/src/core/InterleavedBuffer.js +1 -1
  198. package/src/core/InterleavedBufferAttribute.js +3 -2
  199. package/src/core/Object3D.js +4 -3
  200. package/src/core/Raycaster.js +2 -1
  201. package/src/core/RenderTarget.js +10 -1
  202. package/{examples/jsm/misc → src/core}/Timer.js +4 -42
  203. package/src/extras/Controls.js +5 -4
  204. package/src/extras/DataUtils.js +2 -1
  205. package/src/extras/Earcut.js +6 -0
  206. package/src/extras/ImageUtils.js +2 -2
  207. package/src/extras/PMREMGenerator.js +279 -55
  208. package/src/extras/TextureUtils.js +2 -1
  209. package/src/extras/core/Curve.js +2 -1
  210. package/src/extras/core/Interpolations.js +7 -1
  211. package/src/extras/core/Path.js +22 -22
  212. package/src/extras/core/ShapePath.js +4 -4
  213. package/src/extras/lib/earcut.js +8 -8
  214. package/src/geometries/BoxGeometry.js +1 -0
  215. package/src/geometries/CapsuleGeometry.js +1 -0
  216. package/src/geometries/CircleGeometry.js +1 -0
  217. package/src/geometries/ConeGeometry.js +1 -0
  218. package/src/geometries/CylinderGeometry.js +1 -0
  219. package/src/geometries/DodecahedronGeometry.js +1 -0
  220. package/src/geometries/ExtrudeGeometry.js +8 -6
  221. package/src/geometries/IcosahedronGeometry.js +1 -0
  222. package/src/geometries/LatheGeometry.js +1 -0
  223. package/src/geometries/OctahedronGeometry.js +1 -0
  224. package/src/geometries/PlaneGeometry.js +1 -0
  225. package/src/geometries/RingGeometry.js +1 -0
  226. package/src/geometries/ShapeGeometry.js +1 -0
  227. package/src/geometries/SphereGeometry.js +1 -0
  228. package/src/geometries/TetrahedronGeometry.js +1 -0
  229. package/src/geometries/TorusGeometry.js +1 -0
  230. package/src/geometries/TorusKnotGeometry.js +1 -0
  231. package/src/geometries/TubeGeometry.js +1 -0
  232. package/src/helpers/CameraHelper.js +42 -12
  233. package/src/helpers/SkeletonHelper.js +35 -6
  234. package/src/lights/LightShadow.js +21 -8
  235. package/src/lights/PointLightShadow.js +1 -1
  236. package/src/lights/webgpu/ProjectorLight.js +1 -1
  237. package/src/loaders/AnimationLoader.js +2 -1
  238. package/src/loaders/AudioLoader.js +2 -1
  239. package/src/loaders/BufferGeometryLoader.js +2 -2
  240. package/src/loaders/Cache.js +2 -2
  241. package/src/loaders/DataTextureLoader.js +1 -1
  242. package/src/loaders/FileLoader.js +29 -5
  243. package/src/loaders/ImageBitmapLoader.js +32 -8
  244. package/src/loaders/ImageLoader.js +56 -9
  245. package/src/loaders/Loader.js +17 -3
  246. package/src/loaders/LoadingManager.js +45 -0
  247. package/src/loaders/MaterialLoader.js +3 -2
  248. package/src/loaders/ObjectLoader.js +13 -13
  249. package/src/loaders/TextureLoader.js +1 -1
  250. package/src/loaders/nodes/NodeLoader.js +3 -2
  251. package/src/materials/Material.js +16 -3
  252. package/src/materials/MeshBasicMaterial.js +2 -1
  253. package/src/materials/MeshDepthMaterial.js +1 -0
  254. package/src/materials/MeshDistanceMaterial.js +1 -1
  255. package/src/materials/MeshLambertMaterial.js +2 -1
  256. package/src/materials/MeshMatcapMaterial.js +22 -0
  257. package/src/materials/MeshNormalMaterial.js +1 -0
  258. package/src/materials/MeshPhongMaterial.js +2 -1
  259. package/src/materials/MeshPhysicalMaterial.js +2 -1
  260. package/src/materials/MeshStandardMaterial.js +8 -7
  261. package/src/materials/MeshToonMaterial.js +1 -0
  262. package/src/materials/PointsMaterial.js +1 -1
  263. package/src/materials/ShaderMaterial.js +2 -2
  264. package/src/materials/nodes/Line2NodeMaterial.js +2 -10
  265. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  266. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  267. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  268. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  269. package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
  270. package/src/materials/nodes/NodeMaterial.js +90 -27
  271. package/src/materials/nodes/PointsNodeMaterial.js +86 -28
  272. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  273. package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
  274. package/src/math/Color.js +6 -5
  275. package/src/math/ColorManagement.js +9 -3
  276. package/src/math/Cylindrical.js +1 -1
  277. package/src/math/Euler.js +2 -1
  278. package/src/math/Frustum.js +25 -9
  279. package/src/math/FrustumArray.js +10 -5
  280. package/src/math/Line3.js +129 -2
  281. package/src/math/MathUtils.js +13 -11
  282. package/src/math/Matrix2.js +1 -1
  283. package/src/math/Matrix3.js +2 -2
  284. package/src/math/Matrix4.js +55 -34
  285. package/src/math/Plane.js +1 -1
  286. package/src/math/Quaternion.js +69 -67
  287. package/src/math/Spherical.js +3 -3
  288. package/src/nodes/Nodes.js +6 -4
  289. package/src/nodes/TSL.js +9 -4
  290. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  291. package/src/nodes/accessors/Bitangent.js +31 -25
  292. package/src/nodes/accessors/BufferNode.js +1 -1
  293. package/src/nodes/accessors/Camera.js +142 -16
  294. package/src/nodes/accessors/ClippingNode.js +6 -5
  295. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  296. package/src/nodes/accessors/InstanceNode.js +25 -5
  297. package/src/nodes/accessors/Lights.js +10 -0
  298. package/src/nodes/accessors/Normal.js +97 -30
  299. package/src/nodes/accessors/Object3DNode.js +2 -2
  300. package/src/nodes/accessors/Position.js +25 -9
  301. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  302. package/src/nodes/accessors/ReferenceNode.js +20 -4
  303. package/src/nodes/accessors/ReflectVector.js +3 -3
  304. package/src/nodes/accessors/SceneNode.js +3 -2
  305. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  306. package/src/nodes/accessors/StorageTextureNode.js +23 -1
  307. package/src/nodes/accessors/Tangent.js +25 -17
  308. package/src/nodes/accessors/TangentUtils.js +46 -0
  309. package/src/nodes/accessors/Texture3DNode.js +14 -1
  310. package/src/nodes/accessors/TextureBicubic.js +21 -3
  311. package/src/nodes/accessors/TextureNode.js +142 -44
  312. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  313. package/src/nodes/code/FunctionCallNode.js +24 -4
  314. package/src/nodes/code/FunctionNode.js +23 -0
  315. package/src/nodes/core/ArrayNode.js +13 -0
  316. package/src/nodes/core/AssignNode.js +6 -2
  317. package/src/nodes/core/AttributeNode.js +2 -1
  318. package/src/nodes/core/ContextNode.js +48 -10
  319. package/src/nodes/core/IndexNode.js +2 -2
  320. package/src/nodes/core/InputNode.js +2 -1
  321. package/src/nodes/core/InspectorNode.js +128 -0
  322. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
  323. package/src/nodes/core/Node.js +167 -34
  324. package/src/nodes/core/NodeBuilder.js +404 -120
  325. package/src/nodes/core/NodeFrame.js +21 -21
  326. package/src/nodes/core/NodeFunction.js +2 -1
  327. package/src/nodes/core/NodeParser.js +2 -1
  328. package/src/nodes/core/NodeUniform.js +1 -1
  329. package/src/nodes/core/NodeUtils.js +17 -88
  330. package/src/nodes/core/ParameterNode.js +31 -0
  331. package/src/nodes/core/PropertyNode.js +7 -0
  332. package/src/nodes/core/StackNode.js +77 -30
  333. package/src/nodes/core/StructNode.js +5 -5
  334. package/src/nodes/core/StructTypeNode.js +1 -0
  335. package/src/nodes/core/SubBuildNode.js +89 -0
  336. package/src/nodes/core/UniformNode.js +80 -14
  337. package/src/nodes/core/VarNode.js +142 -16
  338. package/src/nodes/core/VaryingNode.js +9 -6
  339. package/src/nodes/display/BlendModes.js +7 -6
  340. package/src/nodes/display/BumpMapNode.js +1 -1
  341. package/src/nodes/display/ColorAdjustment.js +1 -1
  342. package/src/nodes/display/FrontFacingNode.js +35 -7
  343. package/src/nodes/display/NormalMapNode.js +20 -50
  344. package/src/nodes/display/PassNode.js +206 -17
  345. package/src/nodes/display/RenderOutputNode.js +28 -2
  346. package/src/nodes/display/ScreenNode.js +44 -40
  347. package/src/nodes/display/ToneMappingNode.js +31 -4
  348. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  349. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  350. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  351. package/src/nodes/display/ViewportTextureNode.js +94 -4
  352. package/src/nodes/fog/Fog.js +3 -2
  353. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  354. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  355. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  356. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  357. package/src/nodes/functions/BasicLightingModel.js +2 -1
  358. package/src/nodes/functions/PhongLightingModel.js +3 -3
  359. package/src/nodes/functions/PhysicalLightingModel.js +19 -18
  360. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  361. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  362. package/src/nodes/geometry/RangeNode.js +40 -4
  363. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  364. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  365. package/src/nodes/gpgpu/ComputeNode.js +81 -25
  366. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  367. package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
  368. package/src/nodes/lighting/EnvironmentNode.js +11 -11
  369. package/src/nodes/lighting/LightsNode.js +7 -8
  370. package/src/nodes/lighting/PointShadowNode.js +6 -0
  371. package/src/nodes/lighting/ProjectorLightNode.js +19 -6
  372. package/src/nodes/lighting/ShadowFilterNode.js +3 -1
  373. package/src/nodes/lighting/ShadowNode.js +77 -10
  374. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  375. package/src/nodes/materialx/lib/mx_noise.js +165 -1
  376. package/src/nodes/math/BitcastNode.js +156 -0
  377. package/src/nodes/math/ConditionalNode.js +25 -27
  378. package/src/nodes/math/MathNode.js +106 -65
  379. package/src/nodes/math/OperatorNode.js +28 -43
  380. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  381. package/src/nodes/shapes/Shapes.js +1 -1
  382. package/src/nodes/tsl/TSLBase.js +6 -2
  383. package/src/nodes/tsl/TSLCore.js +546 -186
  384. package/src/nodes/utils/DebugNode.js +3 -2
  385. package/src/nodes/utils/EquirectUV.js +27 -0
  386. package/src/nodes/utils/EventNode.js +119 -0
  387. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  388. package/src/nodes/utils/JoinNode.js +6 -3
  389. package/src/nodes/utils/LoopNode.js +20 -41
  390. package/src/nodes/utils/MatcapUV.js +22 -0
  391. package/src/nodes/utils/MemberNode.js +59 -7
  392. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  393. package/src/nodes/utils/RTTNode.js +33 -6
  394. package/src/nodes/utils/ReflectorNode.js +68 -10
  395. package/src/nodes/utils/SampleNode.js +91 -0
  396. package/src/nodes/utils/SplitNode.js +11 -0
  397. package/src/nodes/utils/Timer.js +0 -47
  398. package/src/nodes/utils/TriplanarTextures.js +65 -0
  399. package/src/objects/BatchedMesh.js +6 -4
  400. package/src/objects/LOD.js +1 -1
  401. package/src/objects/Line.js +2 -1
  402. package/src/objects/LineSegments.js +2 -1
  403. package/src/objects/Skeleton.js +3 -2
  404. package/src/objects/SkinnedMesh.js +3 -1
  405. package/src/objects/Sprite.js +4 -3
  406. package/src/renderers/WebGLRenderer.js +77 -66
  407. package/src/renderers/common/Animation.js +13 -1
  408. package/src/renderers/common/Attributes.js +1 -1
  409. package/src/renderers/common/Backend.js +108 -27
  410. package/src/renderers/common/Background.js +4 -3
  411. package/src/renderers/common/Bindings.js +76 -19
  412. package/src/renderers/common/CanvasTarget.js +341 -0
  413. package/src/renderers/common/ChainMap.js +1 -1
  414. package/src/renderers/common/Color4.js +2 -2
  415. package/src/renderers/common/CubeRenderTarget.js +1 -1
  416. package/src/renderers/common/DataMap.js +1 -1
  417. package/src/renderers/common/Geometries.js +26 -0
  418. package/src/renderers/common/Info.js +4 -2
  419. package/src/renderers/common/InspectorBase.js +146 -0
  420. package/src/renderers/common/Pipelines.js +1 -1
  421. package/src/renderers/common/PostProcessing.js +61 -25
  422. package/src/renderers/common/QuadMesh.js +7 -1
  423. package/src/renderers/common/RenderContext.js +2 -2
  424. package/src/renderers/common/RenderList.js +7 -3
  425. package/src/renderers/common/RenderObject.js +84 -5
  426. package/src/renderers/common/RenderObjects.js +1 -1
  427. package/src/renderers/common/Renderer.js +486 -255
  428. package/src/renderers/common/RendererUtils.js +9 -0
  429. package/src/renderers/common/SampledTexture.js +8 -68
  430. package/src/renderers/common/Sampler.js +117 -0
  431. package/src/renderers/common/Storage3DTexture.js +100 -0
  432. package/src/renderers/common/StorageArrayTexture.js +84 -0
  433. package/src/renderers/common/StorageTexture.js +27 -0
  434. package/src/renderers/common/Textures.js +138 -46
  435. package/src/renderers/common/TimestampQueryPool.js +65 -3
  436. package/src/renderers/common/UniformsGroup.js +2 -1
  437. package/src/renderers/common/XRManager.js +63 -24
  438. package/src/renderers/common/XRRenderTarget.js +21 -4
  439. package/src/renderers/common/extras/PMREMGenerator.js +161 -66
  440. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  441. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  442. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  443. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  444. package/src/renderers/common/nodes/Nodes.js +38 -16
  445. package/src/renderers/shaders/DFGLUTData.js +64 -0
  446. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  447. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  449. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  450. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  451. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  454. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
  455. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  456. package/src/renderers/shaders/UniformsLib.js +1 -0
  457. package/src/renderers/shaders/UniformsUtils.js +25 -4
  458. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  459. package/src/renderers/webgl/WebGLCapabilities.js +4 -3
  460. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  461. package/src/renderers/webgl/WebGLInfo.js +3 -1
  462. package/src/renderers/webgl/WebGLProgram.js +25 -18
  463. package/src/renderers/webgl/WebGLPrograms.js +9 -6
  464. package/src/renderers/webgl/WebGLShadowMap.js +13 -2
  465. package/src/renderers/webgl/WebGLState.js +17 -16
  466. package/src/renderers/webgl/WebGLTextures.js +38 -21
  467. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  468. package/src/renderers/webgl/WebGLUtils.js +3 -2
  469. package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
  470. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
  471. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  472. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  473. package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
  474. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
  475. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  476. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  477. package/src/renderers/webgpu/WebGPUBackend.js +205 -128
  478. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  479. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  480. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
  481. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
  482. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
  483. package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
  484. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
  485. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  486. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
  487. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  488. package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
  489. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  490. package/src/renderers/webxr/WebXRManager.js +89 -13
  491. package/src/textures/ExternalTexture.js +56 -0
  492. package/src/textures/FramebufferTexture.js +2 -2
  493. package/src/textures/Source.js +14 -3
  494. package/src/textures/Texture.js +3 -2
  495. package/src/textures/VideoTexture.js +29 -2
  496. package/src/utils.js +67 -3
  497. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  498. package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
  499. package/src/nodes/utils/EquirectUVNode.js +0 -65
  500. package/src/nodes/utils/MatcapUVNode.js +0 -49
  501. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -1,6 +1,7 @@
1
1
  import { GPUInputStepMode } from './WebGPUConstants.js';
2
2
 
3
3
  import { Float16BufferAttribute } from '../../../core/BufferAttribute.js';
4
+ import { error } from '../../../utils.js';
4
5
 
5
6
  const typedArraysToVertexFormatPrefix = new Map( [
6
7
  [ Int8Array, [ 'sint8', 'snorm8' ]],
@@ -12,6 +13,12 @@ const typedArraysToVertexFormatPrefix = new Map( [
12
13
  [ Float32Array, [ 'float32', ]],
13
14
  ] );
14
15
 
16
+ if ( typeof Float16Array !== 'undefined' ) {
17
+
18
+ typedArraysToVertexFormatPrefix.set( Float16Array, [ 'float16' ] );
19
+
20
+ }
21
+
15
22
  const typedAttributeToVertexFormatPrefix = new Map( [
16
23
  [ Float16BufferAttribute, [ 'float16', ]],
17
24
  ] );
@@ -400,7 +407,7 @@ class WebGPUAttributeUtils {
400
407
 
401
408
  if ( ! format ) {
402
409
 
403
- console.error( 'THREE.WebGPUAttributeUtils: Vertex format not supported yet.' );
410
+ error( 'WebGPUAttributeUtils: Vertex format not supported yet.' );
404
411
 
405
412
  }
406
413
 
@@ -5,6 +5,7 @@ import {
5
5
 
6
6
  import { FloatType, IntType, UnsignedIntType } from '../../../constants.js';
7
7
  import { NodeAccess } from '../../../nodes/core/constants.js';
8
+ import { error } from '../../../utils.js';
8
9
 
9
10
  /**
10
11
  * A WebGPU backend utility module for managing bindings.
@@ -93,30 +94,6 @@ class WebGPUBindingUtils {
93
94
 
94
95
  bindingGPU.buffer = buffer;
95
96
 
96
- } else if ( binding.isSampler ) {
97
-
98
- const sampler = {}; // GPUSamplerBindingLayout
99
-
100
- if ( binding.texture.isDepthTexture ) {
101
-
102
- if ( binding.texture.compareFunction !== null ) {
103
-
104
- sampler.type = GPUSamplerBindingType.Comparison;
105
-
106
- } else if ( backend.compatibilityMode ) {
107
-
108
- sampler.type = GPUSamplerBindingType.NonFiltering;
109
-
110
- }
111
-
112
- }
113
-
114
- bindingGPU.sampler = sampler;
115
-
116
- } else if ( binding.isSampledTexture && binding.texture.isVideoTexture ) {
117
-
118
- bindingGPU.externalTexture = {}; // GPUExternalTextureBindingLayout
119
-
120
97
  } else if ( binding.isSampledTexture && binding.store ) {
121
98
 
122
99
  const storageTexture = {}; // GPUStorageTextureBindingLayout
@@ -138,6 +115,16 @@ class WebGPUBindingUtils {
138
115
 
139
116
  }
140
117
 
118
+ if ( binding.texture.isArrayTexture ) {
119
+
120
+ storageTexture.viewDimension = GPUTextureViewDimension.TwoDArray;
121
+
122
+ } else if ( binding.texture.is3DTexture ) {
123
+
124
+ storageTexture.viewDimension = GPUTextureViewDimension.ThreeD;
125
+
126
+ }
127
+
141
128
  bindingGPU.storageTexture = storageTexture;
142
129
 
143
130
  } else if ( binding.isSampledTexture ) {
@@ -214,9 +201,29 @@ class WebGPUBindingUtils {
214
201
 
215
202
  bindingGPU.texture = texture;
216
203
 
204
+ } else if ( binding.isSampler ) {
205
+
206
+ const sampler = {}; // GPUSamplerBindingLayout
207
+
208
+ if ( binding.texture.isDepthTexture ) {
209
+
210
+ if ( binding.texture.compareFunction !== null ) {
211
+
212
+ sampler.type = GPUSamplerBindingType.Comparison;
213
+
214
+ } else if ( backend.compatibilityMode ) {
215
+
216
+ sampler.type = GPUSamplerBindingType.NonFiltering;
217
+
218
+ }
219
+
220
+ }
221
+
222
+ bindingGPU.sampler = sampler;
223
+
217
224
  } else {
218
225
 
219
- console.error( `WebGPUBindingUtils: Unsupported binding "${ binding }".` );
226
+ error( `WebGPUBindingUtils: Unsupported binding "${ binding }".` );
220
227
 
221
228
  }
222
229
 
@@ -395,12 +402,6 @@ class WebGPUBindingUtils {
395
402
 
396
403
  entriesGPU.push( { binding: bindingPoint, resource: { buffer: bindingData.buffer } } );
397
404
 
398
- } else if ( binding.isSampler ) {
399
-
400
- const textureGPU = backend.get( binding.texture );
401
-
402
- entriesGPU.push( { binding: bindingPoint, resource: textureGPU.sampler } );
403
-
404
405
  } else if ( binding.isSampledTexture ) {
405
406
 
406
407
  const textureData = backend.get( binding.texture );
@@ -414,7 +415,16 @@ class WebGPUBindingUtils {
414
415
  } else {
415
416
 
416
417
  const mipLevelCount = binding.store ? 1 : textureData.texture.mipLevelCount;
417
- const propertyName = `view-${ textureData.texture.width }-${ textureData.texture.height }-${ mipLevelCount }`;
418
+ const baseMipLevel = binding.store ? binding.mipLevel : 0;
419
+ let propertyName = `view-${ textureData.texture.width }-${ textureData.texture.height }`;
420
+
421
+ if ( textureData.texture.depthOrArrayLayers > 1 ) {
422
+
423
+ propertyName += `-${ textureData.texture.depthOrArrayLayers }`;
424
+
425
+ }
426
+
427
+ propertyName += `-${ mipLevelCount }-${ baseMipLevel }`;
418
428
 
419
429
  resourceGPU = textureData[ propertyName ];
420
430
 
@@ -442,7 +452,7 @@ class WebGPUBindingUtils {
442
452
 
443
453
  }
444
454
 
445
- resourceGPU = textureData[ propertyName ] = textureData.texture.createView( { aspect: aspectGPU, dimension: dimensionViewGPU, mipLevelCount } );
455
+ resourceGPU = textureData[ propertyName ] = textureData.texture.createView( { aspect: aspectGPU, dimension: dimensionViewGPU, mipLevelCount, baseMipLevel } );
446
456
 
447
457
  }
448
458
 
@@ -450,6 +460,12 @@ class WebGPUBindingUtils {
450
460
 
451
461
  entriesGPU.push( { binding: bindingPoint, resource: resourceGPU } );
452
462
 
463
+ } else if ( binding.isSampler ) {
464
+
465
+ const textureGPU = backend.get( binding.texture );
466
+
467
+ entriesGPU.push( { binding: bindingPoint, resource: textureGPU.sampler } );
468
+
453
469
  }
454
470
 
455
471
  bindingPoint ++;
@@ -113,7 +113,7 @@ export const GPUTextureFormat = {
113
113
  // Packed 32-bit formats
114
114
  RGB9E5UFloat: 'rgb9e5ufloat',
115
115
  RGB10A2Unorm: 'rgb10a2unorm',
116
- RG11B10UFloat: 'rgb10a2unorm',
116
+ RG11B10UFloat: 'rg11b10ufloat',
117
117
 
118
118
  // 64-bit formats
119
119
 
@@ -158,7 +158,7 @@ export const GPUTextureFormat = {
158
158
  BC6HRGBUFloat: 'bc6h-rgb-ufloat',
159
159
  BC6HRGBFloat: 'bc6h-rgb-float',
160
160
  BC7RGBAUnorm: 'bc7-rgba-unorm',
161
- BC7RGBAUnormSRGB: 'bc7-rgba-srgb',
161
+ BC7RGBAUnormSRGB: 'bc7-rgba-unorm-srgb',
162
162
 
163
163
  // ETC2 compressed formats usable if 'texture-compression-etc2' is both
164
164
  // supported by the device/user agent and enabled in requestDevice.
@@ -316,18 +316,29 @@ export const GPUInputStepMode = {
316
316
  };
317
317
 
318
318
  export const GPUFeatureName = {
319
+ CoreFeaturesAndLimits: 'core-features-and-limits',
319
320
  DepthClipControl: 'depth-clip-control',
320
321
  Depth32FloatStencil8: 'depth32float-stencil8',
321
322
  TextureCompressionBC: 'texture-compression-bc',
323
+ TextureCompressionBCSliced3D: 'texture-compression-bc-sliced-3d',
322
324
  TextureCompressionETC2: 'texture-compression-etc2',
323
325
  TextureCompressionASTC: 'texture-compression-astc',
326
+ TextureCompressionASTCSliced3D: 'texture-compression-astc-sliced-3d',
324
327
  TimestampQuery: 'timestamp-query',
325
328
  IndirectFirstInstance: 'indirect-first-instance',
326
329
  ShaderF16: 'shader-f16',
327
330
  RG11B10UFloat: 'rg11b10ufloat-renderable',
328
331
  BGRA8UNormStorage: 'bgra8unorm-storage',
329
332
  Float32Filterable: 'float32-filterable',
333
+ Float32Blendable: 'float32-blendable',
330
334
  ClipDistances: 'clip-distances',
331
335
  DualSourceBlending: 'dual-source-blending',
332
- Subgroups: 'subgroups'
336
+ Subgroups: 'subgroups',
337
+ TextureFormatsTier1: 'texture-formats-tier1',
338
+ TextureFormatsTier2: 'texture-formats-tier2'
339
+ };
340
+
341
+ export const GPUFeatureMap = {
342
+ 'texture-compression-s3tc': 'texture-compression-bc',
343
+ 'texture-compression-etc1': 'texture-compression-etc2'
333
344
  };
@@ -5,7 +5,7 @@ import {
5
5
  } from './WebGPUConstants.js';
6
6
 
7
7
  import {
8
- FrontSide, BackSide, DoubleSide,
8
+ BackSide, DoubleSide,
9
9
  NeverDepth, AlwaysDepth, LessDepth, LessEqualDepth, EqualDepth, GreaterEqualDepth, GreaterDepth, NotEqualDepth,
10
10
  NoBlending, NormalBlending, AdditiveBlending, SubtractiveBlending, MultiplyBlending, CustomBlending,
11
11
  ZeroFactor, OneFactor, SrcColorFactor, OneMinusSrcColorFactor, SrcAlphaFactor, OneMinusSrcAlphaFactor, DstColorFactor,
@@ -15,6 +15,8 @@ import {
15
15
  NeverStencilFunc, AlwaysStencilFunc, LessStencilFunc, LessEqualStencilFunc, EqualStencilFunc, GreaterEqualStencilFunc, GreaterStencilFunc, NotEqualStencilFunc
16
16
  } from '../../../constants.js';
17
17
 
18
+ import { error } from '../../../utils.js';
19
+
18
20
  /**
19
21
  * A WebGPU backend utility module for managing pipelines.
20
22
  *
@@ -229,21 +231,47 @@ class WebGPUPipelineUtils {
229
231
 
230
232
  }
231
233
 
234
+ // create pipeline
235
+
236
+ device.pushErrorScope( 'validation' );
232
237
 
233
238
  if ( promises === null ) {
234
239
 
235
240
  pipelineData.pipeline = device.createRenderPipeline( pipelineDescriptor );
236
241
 
242
+ device.popErrorScope().then( ( err ) => {
243
+
244
+ if ( err !== null ) {
245
+
246
+ pipelineData.error = true;
247
+
248
+ error( err.message );
249
+
250
+ }
251
+
252
+ } );
253
+
237
254
  } else {
238
255
 
239
- const p = new Promise( ( resolve /*, reject*/ ) => {
256
+ const p = new Promise( async ( resolve /*, reject*/ ) => {
240
257
 
241
- device.createRenderPipelineAsync( pipelineDescriptor ).then( pipeline => {
258
+ try {
242
259
 
243
- pipelineData.pipeline = pipeline;
244
- resolve();
260
+ pipelineData.pipeline = await device.createRenderPipelineAsync( pipelineDescriptor );
245
261
 
246
- } );
262
+ } catch ( err ) { }
263
+
264
+ const errorScope = await device.popErrorScope();
265
+
266
+ if ( errorScope !== null ) {
267
+
268
+ pipelineData.error = true;
269
+
270
+ error( errorScope.message );
271
+
272
+ }
273
+
274
+ resolve();
247
275
 
248
276
  } );
249
277
 
@@ -266,12 +294,12 @@ class WebGPUPipelineUtils {
266
294
  const { utils, device } = backend;
267
295
 
268
296
  const depthStencilFormat = utils.getCurrentDepthStencilFormat( renderContext );
269
- const colorFormat = utils.getCurrentColorFormat( renderContext );
297
+ const colorFormats = utils.getCurrentColorFormats( renderContext );
270
298
  const sampleCount = this._getSampleCount( renderContext );
271
299
 
272
300
  const descriptor = {
273
- label: label,
274
- colorFormats: [ colorFormat ],
301
+ label,
302
+ colorFormats,
275
303
  depthStencilFormat,
276
304
  sampleCount
277
305
  };
@@ -389,7 +417,7 @@ class WebGPUPipelineUtils {
389
417
  break;
390
418
 
391
419
  case MultiplyBlending:
392
- setBlend( GPUBlendFactor.Zero, GPUBlendFactor.Src, GPUBlendFactor.Zero, GPUBlendFactor.SrcAlpha );
420
+ setBlend( GPUBlendFactor.Dst, GPUBlendFactor.OneMinusSrcAlpha, GPUBlendFactor.Zero, GPUBlendFactor.One );
393
421
  break;
394
422
 
395
423
  }
@@ -403,15 +431,15 @@ class WebGPUPipelineUtils {
403
431
  break;
404
432
 
405
433
  case AdditiveBlending:
406
- setBlend( GPUBlendFactor.SrcAlpha, GPUBlendFactor.One, GPUBlendFactor.SrcAlpha, GPUBlendFactor.One );
434
+ setBlend( GPUBlendFactor.SrcAlpha, GPUBlendFactor.One, GPUBlendFactor.One, GPUBlendFactor.One );
407
435
  break;
408
436
 
409
437
  case SubtractiveBlending:
410
- setBlend( GPUBlendFactor.Zero, GPUBlendFactor.OneMinusSrc, GPUBlendFactor.Zero, GPUBlendFactor.One );
438
+ error( 'WebGPURenderer: SubtractiveBlending requires material.premultipliedAlpha = true' );
411
439
  break;
412
440
 
413
441
  case MultiplyBlending:
414
- setBlend( GPUBlendFactor.Zero, GPUBlendFactor.Src, GPUBlendFactor.Zero, GPUBlendFactor.Src );
442
+ error( 'WebGPURenderer: MultiplyBlending requires material.premultipliedAlpha = true' );
415
443
  break;
416
444
 
417
445
  }
@@ -426,7 +454,7 @@ class WebGPUPipelineUtils {
426
454
 
427
455
  } else {
428
456
 
429
- console.error( 'THREE.WebGPURenderer: Invalid blending: ', blending );
457
+ error( 'WebGPURenderer: Invalid blending: ', blending );
430
458
 
431
459
  }
432
460
 
@@ -497,7 +525,7 @@ class WebGPUPipelineUtils {
497
525
  break;
498
526
 
499
527
  default:
500
- console.error( 'THREE.WebGPURenderer: Blend factor not supported.', blend );
528
+ error( 'WebGPURenderer: Blend factor not supported.', blend );
501
529
 
502
530
  }
503
531
 
@@ -553,7 +581,7 @@ class WebGPUPipelineUtils {
553
581
  break;
554
582
 
555
583
  default:
556
- console.error( 'THREE.WebGPURenderer: Invalid stencil function.', stencilFunc );
584
+ error( 'WebGPURenderer: Invalid stencil function.', stencilFunc );
557
585
 
558
586
  }
559
587
 
@@ -607,7 +635,7 @@ class WebGPUPipelineUtils {
607
635
  break;
608
636
 
609
637
  default:
610
- console.error( 'THREE.WebGPURenderer: Invalid stencil operation.', stencilOperation );
638
+ error( 'WebGPURenderer: Invalid stencil operation.', stencilOperation );
611
639
 
612
640
  }
613
641
 
@@ -649,7 +677,7 @@ class WebGPUPipelineUtils {
649
677
  break;
650
678
 
651
679
  default:
652
- console.error( 'THREE.WebGPUPipelineUtils: Blend equation not supported.', blendEquation );
680
+ error( 'WebGPUPipelineUtils: Blend equation not supported.', blendEquation );
653
681
 
654
682
  }
655
683
 
@@ -672,6 +700,8 @@ class WebGPUPipelineUtils {
672
700
  const descriptor = {};
673
701
  const utils = this.backend.utils;
674
702
 
703
+ //
704
+
675
705
  descriptor.topology = utils.getPrimitiveTopology( object, material );
676
706
 
677
707
  if ( geometry.index !== null && object.isLine === true && object.isLineSegments !== true ) {
@@ -680,28 +710,17 @@ class WebGPUPipelineUtils {
680
710
 
681
711
  }
682
712
 
683
- switch ( material.side ) {
713
+ //
684
714
 
685
- case FrontSide:
686
- descriptor.frontFace = GPUFrontFace.CCW;
687
- descriptor.cullMode = GPUCullMode.Back;
688
- break;
715
+ let flipSided = ( material.side === BackSide );
689
716
 
690
- case BackSide:
691
- descriptor.frontFace = GPUFrontFace.CCW;
692
- descriptor.cullMode = GPUCullMode.Front;
693
- break;
717
+ if ( object.isMesh && object.matrixWorld.determinant() < 0 ) flipSided = ! flipSided;
694
718
 
695
- case DoubleSide:
696
- descriptor.frontFace = GPUFrontFace.CCW;
697
- descriptor.cullMode = GPUCullMode.None;
698
- break;
719
+ descriptor.frontFace = ( flipSided === true ) ? GPUFrontFace.CW : GPUFrontFace.CCW;
699
720
 
700
- default:
701
- console.error( 'THREE.WebGPUPipelineUtils: Unknown material.side value.', material.side );
702
- break;
721
+ //
703
722
 
704
- }
723
+ descriptor.cullMode = ( material.side === DoubleSide ) ? GPUCullMode.None : GPUCullMode.Back;
705
724
 
706
725
  return descriptor;
707
726
 
@@ -712,7 +731,7 @@ class WebGPUPipelineUtils {
712
731
  *
713
732
  * @private
714
733
  * @param {Material} material - The material.
715
- * @return {string} The GPU color write mask.
734
+ * @return {number} The GPU color write mask.
716
735
  */
717
736
  _getColorWriteMask( material ) {
718
737
 
@@ -774,7 +793,7 @@ class WebGPUPipelineUtils {
774
793
  break;
775
794
 
776
795
  default:
777
- console.error( 'THREE.WebGPUPipelineUtils: Invalid depth function.', depthFunc );
796
+ error( 'WebGPUPipelineUtils: Invalid depth function.', depthFunc );
778
797
 
779
798
  }
780
799
 
@@ -310,29 +310,27 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
310
310
  * @param {GPUTexture} textureGPU - The GPU texture object.
311
311
  * @param {Object} textureGPUDescriptor - The texture descriptor.
312
312
  * @param {number} [baseArrayLayer=0] - The index of the first array layer accessible to the texture view.
313
+ * @param {?GPUCommandEncoder} [encoder=null] - An optional command encoder used to generate mipmaps.
313
314
  */
314
- generateMipmaps( textureGPU, textureGPUDescriptor, baseArrayLayer = 0 ) {
315
+ generateMipmaps( textureGPU, textureGPUDescriptor, baseArrayLayer = 0, encoder = null ) {
315
316
 
316
317
  const textureData = this.get( textureGPU );
317
318
 
318
- if ( textureData.useCount === undefined ) {
319
+ if ( textureData.layers === undefined ) {
319
320
 
320
- textureData.useCount = 0;
321
321
  textureData.layers = [];
322
322
 
323
323
  }
324
324
 
325
325
  const passes = textureData.layers[ baseArrayLayer ] || this._mipmapCreateBundles( textureGPU, textureGPUDescriptor, baseArrayLayer );
326
326
 
327
- const commandEncoder = this.device.createCommandEncoder( {} );
327
+ const commandEncoder = encoder || this.device.createCommandEncoder( { label: 'mipmapEncoder' } );
328
328
 
329
329
  this._mipmapRunBundles( commandEncoder, passes );
330
330
 
331
- this.device.queue.submit( [ commandEncoder.finish() ] );
332
-
333
- if ( textureData.useCount !== 0 ) textureData.layers[ baseArrayLayer ] = passes;
331
+ if ( encoder === null ) this.device.queue.submit( [ commandEncoder.finish() ] );
334
332
 
335
- textureData.useCount ++;
333
+ textureData.layers[ baseArrayLayer ] = passes;
336
334
 
337
335
  }
338
336