@plastic-software/three 0.179.0 → 0.181.1

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 (430) hide show
  1. package/build/three.cjs +1108 -591
  2. package/build/three.core.js +616 -345
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +488 -250
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +37 -6
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +6576 -2152
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +6575 -2151
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  13. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  14. package/examples/jsm/Addons.js +1 -1
  15. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  16. package/examples/jsm/controls/ArcballControls.js +8 -8
  17. package/examples/jsm/controls/DragControls.js +7 -57
  18. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  19. package/examples/jsm/controls/FlyControls.js +1 -1
  20. package/examples/jsm/controls/OrbitControls.js +2 -2
  21. package/examples/jsm/controls/PointerLockControls.js +2 -10
  22. package/examples/jsm/controls/TrackballControls.js +1 -1
  23. package/examples/jsm/controls/TransformControls.js +1 -1
  24. package/examples/jsm/effects/AsciiEffect.js +8 -8
  25. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  26. package/examples/jsm/exporters/EXRExporter.js +1 -1
  27. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  28. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  29. package/examples/jsm/exporters/PLYExporter.js +1 -1
  30. package/examples/jsm/exporters/USDZExporter.js +9 -2
  31. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  32. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  33. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  34. package/examples/jsm/geometries/TextGeometry.js +3 -2
  35. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  36. package/examples/jsm/helpers/ViewHelper.js +43 -5
  37. package/examples/jsm/inspector/Inspector.js +427 -0
  38. package/examples/jsm/inspector/RendererInspector.js +415 -0
  39. package/examples/jsm/inspector/tabs/Console.js +204 -0
  40. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  41. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  42. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  43. package/examples/jsm/inspector/ui/Graph.js +95 -0
  44. package/examples/jsm/inspector/ui/Item.js +170 -0
  45. package/examples/jsm/inspector/ui/List.js +75 -0
  46. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  47. package/examples/jsm/inspector/ui/Style.js +654 -0
  48. package/examples/jsm/inspector/ui/Tab.js +46 -0
  49. package/examples/jsm/inspector/ui/Values.js +423 -0
  50. package/examples/jsm/inspector/ui/utils.js +56 -0
  51. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  52. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  53. package/examples/jsm/interactive/SelectionBox.js +30 -0
  54. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  55. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  56. package/examples/jsm/lines/Line2.js +3 -3
  57. package/examples/jsm/lines/LineGeometry.js +1 -1
  58. package/examples/jsm/lines/LineSegments2.js +2 -2
  59. package/examples/jsm/lines/Wireframe.js +2 -2
  60. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  61. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  62. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  63. package/examples/jsm/loaders/3MFLoader.js +1 -1
  64. package/examples/jsm/loaders/ColladaLoader.js +3 -3
  65. package/examples/jsm/loaders/DDSLoader.js +1 -1
  66. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  67. package/examples/jsm/loaders/EXRLoader.js +5 -5
  68. package/examples/jsm/loaders/FBXLoader.js +2 -2
  69. package/examples/jsm/loaders/FontLoader.js +23 -5
  70. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  71. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  72. package/examples/jsm/loaders/HDRLoader.js +486 -0
  73. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  74. package/examples/jsm/loaders/KTXLoader.js +2 -2
  75. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  76. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  77. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  78. package/examples/jsm/loaders/LWOLoader.js +2 -2
  79. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  80. package/examples/jsm/loaders/OBJLoader.js +1 -1
  81. package/examples/jsm/loaders/PDBLoader.js +1 -1
  82. package/examples/jsm/loaders/RGBELoader.js +7 -473
  83. package/examples/jsm/loaders/SVGLoader.js +2 -2
  84. package/examples/jsm/loaders/TTFLoader.js +4 -4
  85. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  86. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  87. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  88. package/examples/jsm/math/ColorSpaces.js +19 -1
  89. package/examples/jsm/math/ConvexHull.js +3 -3
  90. package/examples/jsm/math/ImprovedNoise.js +1 -1
  91. package/examples/jsm/math/Lut.js +2 -2
  92. package/examples/jsm/math/SimplexNoise.js +1 -1
  93. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  94. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  95. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  96. package/examples/jsm/misc/TubePainter.js +383 -40
  97. package/examples/jsm/misc/Volume.js +1 -1
  98. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  99. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  100. package/examples/jsm/objects/Sky.js +1 -1
  101. package/examples/jsm/objects/SkyMesh.js +1 -1
  102. package/examples/jsm/objects/Water.js +3 -3
  103. package/examples/jsm/objects/WaterMesh.js +6 -6
  104. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  105. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  106. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  107. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  108. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  109. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  110. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  111. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  112. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  113. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  114. package/examples/jsm/shaders/BokehShader.js +1 -1
  115. package/examples/jsm/shaders/BokehShader2.js +1 -1
  116. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  117. package/examples/jsm/shaders/FocusShader.js +1 -1
  118. package/examples/jsm/shaders/GTAOShader.js +2 -2
  119. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  120. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  122. package/examples/jsm/shaders/SSRShader.js +1 -1
  123. package/examples/jsm/shaders/SepiaShader.js +1 -1
  124. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  125. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  126. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +1 -1
  127. package/examples/jsm/shaders/VignetteShader.js +1 -1
  128. package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
  129. package/examples/jsm/transpiler/TSLEncoder.js +9 -10
  130. package/examples/jsm/transpiler/WGSLEncoder.js +24 -0
  131. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  132. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  133. package/examples/jsm/tsl/display/BloomNode.js +7 -3
  134. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
  135. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  136. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  137. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  138. package/examples/jsm/tsl/display/GaussianBlurNode.js +49 -35
  139. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  140. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  141. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  142. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  143. package/examples/jsm/tsl/display/TRAANode.js +124 -7
  144. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  145. package/examples/jsm/tsl/display/hashBlur.js +16 -18
  146. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  147. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  148. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  149. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  150. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  151. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  152. package/package.json +5 -10
  153. package/src/Three.Core.js +4 -2
  154. package/src/Three.TSL.js +36 -5
  155. package/src/Three.WebGPU.Nodes.js +2 -0
  156. package/src/Three.WebGPU.js +2 -0
  157. package/src/animation/AnimationClip.js +20 -4
  158. package/src/animation/AnimationMixer.js +3 -3
  159. package/src/animation/AnimationObjectGroup.js +2 -1
  160. package/src/animation/KeyframeTrack.js +7 -6
  161. package/src/animation/PropertyBinding.js +12 -11
  162. package/src/audio/Audio.js +10 -9
  163. package/src/audio/PositionalAudio.js +1 -1
  164. package/src/cameras/OrthographicCamera.js +1 -1
  165. package/src/cameras/PerspectiveCamera.js +1 -1
  166. package/src/cameras/StereoCamera.js +2 -2
  167. package/src/constants.js +11 -3
  168. package/src/core/BufferGeometry.js +10 -10
  169. package/src/core/EventDispatcher.js +1 -1
  170. package/src/core/InterleavedBuffer.js +1 -1
  171. package/src/core/InterleavedBufferAttribute.js +3 -2
  172. package/src/core/Object3D.js +3 -2
  173. package/src/core/Raycaster.js +2 -1
  174. package/src/core/RenderTarget.js +10 -1
  175. package/src/extras/Controls.js +5 -4
  176. package/src/extras/DataUtils.js +2 -1
  177. package/src/extras/Earcut.js +6 -0
  178. package/src/extras/ImageUtils.js +2 -2
  179. package/src/extras/PMREMGenerator.js +268 -55
  180. package/src/extras/TextureUtils.js +2 -1
  181. package/src/extras/core/Curve.js +2 -1
  182. package/src/extras/core/Interpolations.js +7 -1
  183. package/src/extras/core/ShapePath.js +4 -4
  184. package/src/extras/lib/earcut.js +8 -8
  185. package/src/geometries/BoxGeometry.js +1 -0
  186. package/src/geometries/CapsuleGeometry.js +1 -0
  187. package/src/geometries/CircleGeometry.js +1 -0
  188. package/src/geometries/ConeGeometry.js +1 -0
  189. package/src/geometries/CylinderGeometry.js +1 -0
  190. package/src/geometries/DodecahedronGeometry.js +1 -0
  191. package/src/geometries/ExtrudeGeometry.js +8 -6
  192. package/src/geometries/IcosahedronGeometry.js +1 -0
  193. package/src/geometries/LatheGeometry.js +1 -0
  194. package/src/geometries/OctahedronGeometry.js +1 -0
  195. package/src/geometries/PlaneGeometry.js +1 -0
  196. package/src/geometries/RingGeometry.js +1 -0
  197. package/src/geometries/ShapeGeometry.js +1 -0
  198. package/src/geometries/SphereGeometry.js +1 -0
  199. package/src/geometries/TetrahedronGeometry.js +1 -0
  200. package/src/geometries/TorusGeometry.js +1 -0
  201. package/src/geometries/TorusKnotGeometry.js +1 -0
  202. package/src/geometries/TubeGeometry.js +1 -0
  203. package/src/helpers/CameraHelper.js +1 -1
  204. package/src/lights/webgpu/ProjectorLight.js +1 -1
  205. package/src/loaders/AnimationLoader.js +2 -1
  206. package/src/loaders/AudioLoader.js +2 -1
  207. package/src/loaders/BufferGeometryLoader.js +2 -2
  208. package/src/loaders/Cache.js +2 -2
  209. package/src/loaders/DataTextureLoader.js +1 -1
  210. package/src/loaders/FileLoader.js +3 -2
  211. package/src/loaders/ImageBitmapLoader.js +5 -4
  212. package/src/loaders/ImageLoader.js +1 -1
  213. package/src/loaders/Loader.js +3 -3
  214. package/src/loaders/LoadingManager.js +25 -3
  215. package/src/loaders/MaterialLoader.js +3 -2
  216. package/src/loaders/ObjectLoader.js +13 -13
  217. package/src/loaders/TextureLoader.js +1 -1
  218. package/src/loaders/nodes/NodeLoader.js +3 -2
  219. package/src/materials/Material.js +16 -3
  220. package/src/materials/MeshBasicMaterial.js +1 -0
  221. package/src/materials/MeshDepthMaterial.js +1 -0
  222. package/src/materials/MeshDistanceMaterial.js +1 -1
  223. package/src/materials/MeshLambertMaterial.js +2 -1
  224. package/src/materials/MeshMatcapMaterial.js +22 -0
  225. package/src/materials/MeshNormalMaterial.js +1 -0
  226. package/src/materials/MeshPhongMaterial.js +2 -1
  227. package/src/materials/MeshPhysicalMaterial.js +2 -1
  228. package/src/materials/MeshStandardMaterial.js +8 -7
  229. package/src/materials/MeshToonMaterial.js +1 -0
  230. package/src/materials/PointsMaterial.js +1 -1
  231. package/src/materials/ShaderMaterial.js +2 -2
  232. package/src/materials/nodes/Line2NodeMaterial.js +2 -2
  233. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  234. package/src/materials/nodes/NodeMaterial.js +62 -22
  235. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  236. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  237. package/src/materials/nodes/manager/NodeMaterialObserver.js +3 -2
  238. package/src/math/Color.js +6 -5
  239. package/src/math/ColorManagement.js +9 -3
  240. package/src/math/Cylindrical.js +1 -1
  241. package/src/math/Euler.js +2 -1
  242. package/src/math/MathUtils.js +13 -11
  243. package/src/math/Matrix2.js +1 -1
  244. package/src/math/Matrix3.js +2 -2
  245. package/src/math/Matrix4.js +7 -7
  246. package/src/math/Plane.js +1 -1
  247. package/src/math/Quaternion.js +68 -66
  248. package/src/math/Spherical.js +1 -1
  249. package/src/nodes/Nodes.js +4 -1
  250. package/src/nodes/TSL.js +4 -1
  251. package/src/nodes/accessors/BufferNode.js +1 -1
  252. package/src/nodes/accessors/Camera.js +133 -7
  253. package/src/nodes/accessors/ClippingNode.js +6 -5
  254. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  255. package/src/nodes/accessors/InstanceNode.js +25 -5
  256. package/src/nodes/accessors/Lights.js +10 -0
  257. package/src/nodes/accessors/Normal.js +5 -4
  258. package/src/nodes/accessors/Object3DNode.js +1 -1
  259. package/src/nodes/accessors/Position.js +18 -2
  260. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  261. package/src/nodes/accessors/ReferenceNode.js +3 -2
  262. package/src/nodes/accessors/SceneNode.js +2 -1
  263. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  264. package/src/nodes/accessors/StorageTextureNode.js +22 -0
  265. package/src/nodes/accessors/Texture3DNode.js +14 -1
  266. package/src/nodes/accessors/TextureNode.js +130 -44
  267. package/src/nodes/code/FunctionCallNode.js +24 -4
  268. package/src/nodes/code/FunctionNode.js +23 -0
  269. package/src/nodes/core/ArrayNode.js +1 -0
  270. package/src/nodes/core/AssignNode.js +4 -3
  271. package/src/nodes/core/AttributeNode.js +2 -1
  272. package/src/nodes/core/ContextNode.js +29 -10
  273. package/src/nodes/core/IndexNode.js +2 -2
  274. package/src/nodes/core/InputNode.js +2 -1
  275. package/src/nodes/core/InspectorNode.js +128 -0
  276. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +40 -7
  277. package/src/nodes/core/Node.js +152 -31
  278. package/src/nodes/core/NodeBuilder.js +183 -35
  279. package/src/nodes/core/NodeFrame.js +21 -21
  280. package/src/nodes/core/NodeFunction.js +2 -1
  281. package/src/nodes/core/NodeParser.js +2 -1
  282. package/src/nodes/core/NodeUniform.js +1 -1
  283. package/src/nodes/core/NodeUtils.js +17 -91
  284. package/src/nodes/core/ParameterNode.js +31 -0
  285. package/src/nodes/core/PropertyNode.js +7 -0
  286. package/src/nodes/core/StackNode.js +43 -16
  287. package/src/nodes/core/StructNode.js +5 -5
  288. package/src/nodes/core/StructTypeNode.js +1 -0
  289. package/src/nodes/core/SubBuildNode.js +2 -2
  290. package/src/nodes/core/UniformNode.js +18 -10
  291. package/src/nodes/core/VarNode.js +70 -33
  292. package/src/nodes/core/VaryingNode.js +3 -2
  293. package/src/nodes/display/BlendModes.js +5 -4
  294. package/src/nodes/display/BumpMapNode.js +1 -1
  295. package/src/nodes/display/ColorAdjustment.js +1 -1
  296. package/src/nodes/display/FrontFacingNode.js +4 -8
  297. package/src/nodes/display/NormalMapNode.js +2 -1
  298. package/src/nodes/display/PassNode.js +52 -11
  299. package/src/nodes/display/RenderOutputNode.js +28 -2
  300. package/src/nodes/display/ScreenNode.js +44 -14
  301. package/src/nodes/display/ToneMappingNode.js +31 -4
  302. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  303. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  304. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  305. package/src/nodes/display/ViewportTextureNode.js +42 -12
  306. package/src/nodes/fog/Fog.js +3 -2
  307. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  308. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  309. package/src/nodes/functions/BasicLightingModel.js +2 -1
  310. package/src/nodes/functions/PhysicalLightingModel.js +3 -2
  311. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  312. package/src/nodes/geometry/RangeNode.js +40 -4
  313. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  314. package/src/nodes/gpgpu/ComputeNode.js +17 -5
  315. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  316. package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
  317. package/src/nodes/lighting/EnvironmentNode.js +6 -6
  318. package/src/nodes/lighting/LightsNode.js +3 -4
  319. package/src/nodes/lighting/PointShadowNode.js +6 -0
  320. package/src/nodes/lighting/ShadowFilterNode.js +2 -0
  321. package/src/nodes/lighting/ShadowNode.js +75 -8
  322. package/src/nodes/math/BitcastNode.js +156 -0
  323. package/src/nodes/math/ConditionalNode.js +24 -7
  324. package/src/nodes/math/MathNode.js +25 -19
  325. package/src/nodes/math/OperatorNode.js +7 -5
  326. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  327. package/src/nodes/shapes/Shapes.js +1 -1
  328. package/src/nodes/tsl/TSLBase.js +5 -2
  329. package/src/nodes/tsl/TSLCore.js +460 -159
  330. package/src/nodes/utils/DebugNode.js +2 -1
  331. package/src/nodes/utils/EventNode.js +36 -0
  332. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  333. package/src/nodes/utils/JoinNode.js +6 -3
  334. package/src/nodes/utils/LoopNode.js +20 -24
  335. package/src/nodes/utils/MemberNode.js +59 -7
  336. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  337. package/src/nodes/utils/RTTNode.js +13 -3
  338. package/src/nodes/utils/ReflectorNode.js +58 -7
  339. package/src/nodes/utils/SampleNode.js +12 -2
  340. package/src/nodes/utils/SplitNode.js +11 -0
  341. package/src/nodes/utils/Timer.js +0 -47
  342. package/src/objects/BatchedMesh.js +2 -2
  343. package/src/objects/LOD.js +1 -1
  344. package/src/objects/Line.js +2 -1
  345. package/src/objects/LineSegments.js +2 -1
  346. package/src/objects/Skeleton.js +3 -2
  347. package/src/objects/SkinnedMesh.js +3 -1
  348. package/src/objects/Sprite.js +4 -3
  349. package/src/renderers/WebGLRenderer.js +48 -41
  350. package/src/renderers/common/Animation.js +13 -1
  351. package/src/renderers/common/Attributes.js +1 -1
  352. package/src/renderers/common/Backend.js +108 -27
  353. package/src/renderers/common/Background.js +2 -1
  354. package/src/renderers/common/Bindings.js +58 -2
  355. package/src/renderers/common/CanvasTarget.js +341 -0
  356. package/src/renderers/common/ChainMap.js +1 -1
  357. package/src/renderers/common/DataMap.js +1 -1
  358. package/src/renderers/common/Geometries.js +26 -0
  359. package/src/renderers/common/Info.js +4 -2
  360. package/src/renderers/common/InspectorBase.js +146 -0
  361. package/src/renderers/common/Pipelines.js +1 -1
  362. package/src/renderers/common/PostProcessing.js +6 -25
  363. package/src/renderers/common/QuadMesh.js +7 -1
  364. package/src/renderers/common/RenderContext.js +2 -2
  365. package/src/renderers/common/RenderList.js +7 -3
  366. package/src/renderers/common/RenderObject.js +16 -2
  367. package/src/renderers/common/RenderObjects.js +1 -1
  368. package/src/renderers/common/Renderer.js +473 -245
  369. package/src/renderers/common/RendererUtils.js +9 -0
  370. package/src/renderers/common/SampledTexture.js +9 -1
  371. package/src/renderers/common/Sampler.js +50 -12
  372. package/src/renderers/common/StorageTexture.js +9 -1
  373. package/src/renderers/common/Textures.js +121 -45
  374. package/src/renderers/common/TimestampQueryPool.js +65 -3
  375. package/src/renderers/common/UniformsGroup.js +2 -1
  376. package/src/renderers/common/XRManager.js +42 -22
  377. package/src/renderers/common/extras/PMREMGenerator.js +160 -65
  378. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  379. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  380. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  381. package/src/renderers/common/nodes/Nodes.js +38 -16
  382. package/src/renderers/shaders/DFGLUTData.js +64 -0
  383. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  384. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  386. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  387. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  388. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  389. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  390. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  391. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -15
  392. package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
  393. package/src/renderers/shaders/UniformsLib.js +1 -0
  394. package/src/renderers/shaders/UniformsUtils.js +25 -4
  395. package/src/renderers/webgl/WebGLCapabilities.js +2 -1
  396. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  397. package/src/renderers/webgl/WebGLInfo.js +3 -1
  398. package/src/renderers/webgl/WebGLProgram.js +15 -14
  399. package/src/renderers/webgl/WebGLPrograms.js +2 -1
  400. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  401. package/src/renderers/webgl/WebGLState.js +15 -14
  402. package/src/renderers/webgl/WebGLTextures.js +19 -14
  403. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  404. package/src/renderers/webgl/WebGLUtils.js +3 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +199 -167
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +181 -25
  407. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  408. package/src/renderers/webgl-fallback/utils/WebGLState.js +7 -6
  409. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +169 -19
  410. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  411. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  412. package/src/renderers/webgpu/WebGPUBackend.js +153 -123
  413. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  414. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  415. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +142 -50
  416. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  417. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
  418. package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -2
  419. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +53 -34
  420. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  421. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +260 -99
  422. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  423. package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
  424. package/src/renderers/webxr/WebXRManager.js +42 -26
  425. package/src/textures/ExternalTexture.js +15 -4
  426. package/src/textures/Source.js +3 -2
  427. package/src/textures/Texture.js +3 -2
  428. package/src/textures/VideoTexture.js +2 -3
  429. package/src/utils.js +67 -3
  430. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
@@ -9,6 +9,8 @@ import {
9
9
  HalfFloatType,
10
10
  LinearFilter,
11
11
  LinearMipmapLinearFilter,
12
+ NearestFilter,
13
+ NearestMipmapNearestFilter,
12
14
  LinearSRGBColorSpace,
13
15
  Loader,
14
16
  NoColorSpace,
@@ -19,6 +21,7 @@ import {
19
21
  RGBA_S3TC_DXT3_Format,
20
22
  RGBA_ETC2_EAC_Format,
21
23
  RGBA_PVRTC_4BPPV1_Format,
24
+ RGBA_PVRTC_2BPPV1_Format,
22
25
  RGBA_S3TC_DXT1_Format,
23
26
  RGBA_S3TC_DXT5_Format,
24
27
  RGB_BPTC_UNSIGNED_Format,
@@ -26,10 +29,17 @@ import {
26
29
  RGB_ETC2_Format,
27
30
  RGB_PVRTC_4BPPV1_Format,
28
31
  RGB_S3TC_DXT1_Format,
32
+ SIGNED_RED_GREEN_RGTC2_Format,
33
+ SIGNED_RED_RGTC1_Format,
34
+ RED_GREEN_RGTC2_Format,
35
+ RED_RGTC1_Format,
36
+ RGBFormat,
29
37
  RGFormat,
30
38
  RedFormat,
31
39
  SRGBColorSpace,
32
- UnsignedByteType
40
+ UnsignedByteType,
41
+ UnsignedInt5999Type,
42
+ UnsignedInt101111Type
33
43
  } from 'three';
34
44
  import { WorkerPool } from '../utils/WorkerPool.js';
35
45
  import {
@@ -42,6 +52,7 @@ import {
42
52
  KHR_SUPERCOMPRESSION_NONE,
43
53
  KHR_SUPERCOMPRESSION_ZSTD,
44
54
  VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT,
55
+ VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT,
45
56
  VK_FORMAT_ASTC_4x4_SRGB_BLOCK,
46
57
  VK_FORMAT_ASTC_4x4_UNORM_BLOCK,
47
58
  VK_FORMAT_ASTC_6x6_SRGB_BLOCK,
@@ -52,12 +63,18 @@ import {
52
63
  VK_FORMAT_BC1_RGB_UNORM_BLOCK,
53
64
  VK_FORMAT_BC3_SRGB_BLOCK,
54
65
  VK_FORMAT_BC3_UNORM_BLOCK,
66
+ VK_FORMAT_BC4_SNORM_BLOCK,
67
+ VK_FORMAT_BC4_UNORM_BLOCK,
55
68
  VK_FORMAT_BC5_SNORM_BLOCK,
56
69
  VK_FORMAT_BC5_UNORM_BLOCK,
57
70
  VK_FORMAT_BC7_SRGB_BLOCK,
58
71
  VK_FORMAT_BC7_UNORM_BLOCK,
59
72
  VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
60
73
  VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
74
+ VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG,
75
+ VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG,
76
+ VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG,
77
+ VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG,
61
78
  VK_FORMAT_R16G16B16A16_SFLOAT,
62
79
  VK_FORMAT_R16G16_SFLOAT,
63
80
  VK_FORMAT_R16_SFLOAT,
@@ -70,6 +87,8 @@ import {
70
87
  VK_FORMAT_R8G8_UNORM,
71
88
  VK_FORMAT_R8_SRGB,
72
89
  VK_FORMAT_R8_UNORM,
90
+ VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
91
+ VK_FORMAT_B10G11R11_UFLOAT_PACK32,
73
92
  VK_FORMAT_UNDEFINED
74
93
  } from '../libs/ktx-parse.module.js';
75
94
  import { ZSTDDecoder } from '../libs/zstddec.module.js';
@@ -94,9 +113,9 @@ let _zstd;
94
113
  * This loader relies on Web Assembly which is not supported in older browsers.
95
114
  *
96
115
  * References:
97
- * - [KTX specification]{@link http://github.khronos.org/KTX-Specification/}
98
- * - [DFD]{@link https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html#basicdescriptor}
99
- * - [BasisU HDR]{@link https://github.com/BinomialLLC/basis_universal/wiki/UASTC-HDR-Texture-Specification-v1.0}
116
+ * - [KTX specification](http://github.khronos.org/KTX-Specification/)
117
+ * - [DFD](https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html#basicdescriptor)
118
+ * - [BasisU HDR](https://github.com/BinomialLLC/basis_universal/wiki/UASTC-HDR-Texture-Specification-v1.0)
100
119
  *
101
120
  * ```js
102
121
  * const loader = new KTX2Loader();
@@ -175,22 +194,17 @@ class KTX2Loader extends Loader {
175
194
  * Async version of {@link KTX2Loader#detectSupport}.
176
195
  *
177
196
  * @async
178
- * @param {WebGPURenderer|WebGLRenderer} renderer - The renderer.
197
+ * @deprecated
198
+ * @param {WebGPURenderer} renderer - The renderer.
179
199
  * @return {Promise} A Promise that resolves when the support has been detected.
180
200
  */
181
201
  async detectSupportAsync( renderer ) {
182
202
 
183
- this.workerConfig = {
184
- astcSupported: await renderer.hasFeatureAsync( 'texture-compression-astc' ),
185
- astcHDRSupported: false, // https://github.com/gpuweb/gpuweb/issues/3856
186
- etc1Supported: await renderer.hasFeatureAsync( 'texture-compression-etc1' ),
187
- etc2Supported: await renderer.hasFeatureAsync( 'texture-compression-etc2' ),
188
- dxtSupported: await renderer.hasFeatureAsync( 'texture-compression-bc' ),
189
- bptcSupported: await renderer.hasFeatureAsync( 'texture-compression-bptc' ),
190
- pvrtcSupported: await renderer.hasFeatureAsync( 'texture-compression-pvrtc' )
191
- };
203
+ console.warn( 'KTX2Loader: "detectSupportAsync()" has been deprecated. Use "detectSupport()" and "await renderer.init();" when creating the renderer.' ); // @deprecated r181
192
204
 
193
- return this;
205
+ await renderer.init();
206
+
207
+ return this.detectSupport( renderer );
194
208
 
195
209
  }
196
210
 
@@ -210,8 +224,8 @@ class KTX2Loader extends Loader {
210
224
  astcHDRSupported: false, // https://github.com/gpuweb/gpuweb/issues/3856
211
225
  etc1Supported: renderer.hasFeature( 'texture-compression-etc1' ),
212
226
  etc2Supported: renderer.hasFeature( 'texture-compression-etc2' ),
213
- dxtSupported: renderer.hasFeature( 'texture-compression-bc' ),
214
- bptcSupported: renderer.hasFeature( 'texture-compression-bptc' ),
227
+ dxtSupported: renderer.hasFeature( 'texture-compression-s3tc' ),
228
+ bptcSupported: renderer.hasFeature( 'texture-compression-bc' ),
215
229
  pvrtcSupported: renderer.hasFeature( 'texture-compression-pvrtc' )
216
230
  };
217
231
 
@@ -229,6 +243,21 @@ class KTX2Loader extends Loader {
229
243
  || renderer.extensions.has( 'WEBKIT_WEBGL_compressed_texture_pvrtc' )
230
244
  };
231
245
 
246
+ if ( typeof navigator !== 'undefined' &&
247
+ navigator.platform.indexOf( 'Linux' ) >= 0 && navigator.userAgent.indexOf( 'Firefox' ) >= 0 &&
248
+ this.workerConfig.astcSupported && this.workerConfig.etc2Supported &&
249
+ this.workerConfig.bptcSupported && this.workerConfig.dxtSupported ) {
250
+
251
+ // On Linux, Mesa drivers for AMD and Intel GPUs expose ETC2 and ASTC even though the hardware doesn't support these.
252
+ // Using these extensions will result in expensive software decompression on the main thread inside the driver, causing performance issues.
253
+ // When using ANGLE (e.g. via Chrome), these extensions are not exposed except for some specific Intel GPU models - however, Firefox doesn't perform this filtering.
254
+ // Since a granular filter is a little too fragile and we can transcode into other GPU formats, disable formats that are likely to be emulated.
255
+
256
+ this.workerConfig.astcSupported = false;
257
+ this.workerConfig.etc2Supported = false;
258
+
259
+ }
260
+
232
261
  }
233
262
 
234
263
  return this;
@@ -330,6 +359,7 @@ class KTX2Loader extends Loader {
330
359
  loader.setPath( this.path );
331
360
  loader.setCrossOrigin( this.crossOrigin );
332
361
  loader.setWithCredentials( this.withCredentials );
362
+ loader.setRequestHeader( this.requestHeader );
333
363
  loader.setResponseType( 'arraybuffer' );
334
364
 
335
365
  loader.load( url, ( buffer ) => {
@@ -827,13 +857,9 @@ KTX2Loader.BasisWorker = function () {
827
857
  ];
828
858
 
829
859
  const OPTIONS = {
830
- // TODO: For ETC1S we intentionally sort by _UASTC_ priority, preserving
831
- // a historical accident shown to avoid performance pitfalls for Linux with
832
- // Firefox & AMD GPU (RadeonSI). Further work needed.
833
- // See https://github.com/mrdoob/three.js/pull/29730.
834
860
  [ BasisFormat.ETC1S ]: FORMAT_OPTIONS
835
861
  .filter( ( opt ) => opt.basisFormat.includes( BasisFormat.ETC1S ) )
836
- .sort( ( a, b ) => a.priorityUASTC - b.priorityUASTC ),
862
+ .sort( ( a, b ) => a.priorityETC1S - b.priorityETC1S ),
837
863
 
838
864
  [ BasisFormat.UASTC ]: FORMAT_OPTIONS
839
865
  .filter( ( opt ) => opt.basisFormat.includes( BasisFormat.UASTC ) )
@@ -918,74 +944,114 @@ KTX2Loader.BasisWorker = function () {
918
944
  // Parsing for non-Basis textures. These textures may have supercompression
919
945
  // like Zstd, but they do not require transcoding.
920
946
 
921
- const UNCOMPRESSED_FORMATS = new Set( [ RGBAFormat, RGFormat, RedFormat ] );
947
+ const UNCOMPRESSED_FORMATS = new Set( [ RGBAFormat, RGBFormat, RGFormat, RedFormat ] );
922
948
 
923
949
  const FORMAT_MAP = {
924
950
 
925
951
  [ VK_FORMAT_R32G32B32A32_SFLOAT ]: RGBAFormat,
926
- [ VK_FORMAT_R16G16B16A16_SFLOAT ]: RGBAFormat,
927
- [ VK_FORMAT_R8G8B8A8_UNORM ]: RGBAFormat,
928
- [ VK_FORMAT_R8G8B8A8_SRGB ]: RGBAFormat,
929
-
930
952
  [ VK_FORMAT_R32G32_SFLOAT ]: RGFormat,
931
- [ VK_FORMAT_R16G16_SFLOAT ]: RGFormat,
932
- [ VK_FORMAT_R8G8_UNORM ]: RGFormat,
933
- [ VK_FORMAT_R8G8_SRGB ]: RGFormat,
934
-
935
953
  [ VK_FORMAT_R32_SFLOAT ]: RedFormat,
954
+
955
+ [ VK_FORMAT_R16G16B16A16_SFLOAT ]: RGBAFormat,
956
+ [ VK_FORMAT_R16G16_SFLOAT ]: RGFormat,
936
957
  [ VK_FORMAT_R16_SFLOAT ]: RedFormat,
958
+
959
+ [ VK_FORMAT_R8G8B8A8_SRGB ]: RGBAFormat,
960
+ [ VK_FORMAT_R8G8B8A8_UNORM ]: RGBAFormat,
961
+ [ VK_FORMAT_R8G8_SRGB ]: RGFormat,
962
+ [ VK_FORMAT_R8G8_UNORM ]: RGFormat,
937
963
  [ VK_FORMAT_R8_SRGB ]: RedFormat,
938
964
  [ VK_FORMAT_R8_UNORM ]: RedFormat,
939
965
 
940
- [ VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK ]: RGB_ETC2_Format,
966
+ [ VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 ]: RGBFormat,
967
+ [ VK_FORMAT_B10G11R11_UFLOAT_PACK32 ]: RGBFormat,
968
+
941
969
  [ VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK ]: RGBA_ETC2_EAC_Format,
970
+ [ VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK ]: RGB_ETC2_Format,
942
971
 
943
972
  [ VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT ]: RGBA_ASTC_4x4_Format,
944
973
  [ VK_FORMAT_ASTC_4x4_SRGB_BLOCK ]: RGBA_ASTC_4x4_Format,
945
974
  [ VK_FORMAT_ASTC_4x4_UNORM_BLOCK ]: RGBA_ASTC_4x4_Format,
975
+ [ VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT ]: RGBA_ASTC_6x6_Format,
946
976
  [ VK_FORMAT_ASTC_6x6_SRGB_BLOCK ]: RGBA_ASTC_6x6_Format,
947
977
  [ VK_FORMAT_ASTC_6x6_UNORM_BLOCK ]: RGBA_ASTC_6x6_Format,
948
978
 
949
- [ VK_FORMAT_BC1_RGBA_UNORM_BLOCK ]: RGBA_S3TC_DXT1_Format,
950
979
  [ VK_FORMAT_BC1_RGBA_SRGB_BLOCK ]: RGBA_S3TC_DXT1_Format,
951
- [ VK_FORMAT_BC1_RGB_UNORM_BLOCK ]: RGB_S3TC_DXT1_Format,
980
+ [ VK_FORMAT_BC1_RGBA_UNORM_BLOCK ]: RGBA_S3TC_DXT1_Format,
952
981
  [ VK_FORMAT_BC1_RGB_SRGB_BLOCK ]: RGB_S3TC_DXT1_Format,
982
+ [ VK_FORMAT_BC1_RGB_UNORM_BLOCK ]: RGB_S3TC_DXT1_Format,
953
983
 
954
984
  [ VK_FORMAT_BC3_SRGB_BLOCK ]: RGBA_S3TC_DXT3_Format,
955
985
  [ VK_FORMAT_BC3_UNORM_BLOCK ]: RGBA_S3TC_DXT3_Format,
956
986
 
957
- [ VK_FORMAT_BC5_SNORM_BLOCK ]: RGBA_S3TC_DXT5_Format,
958
- [ VK_FORMAT_BC5_UNORM_BLOCK ]: RGBA_S3TC_DXT5_Format,
987
+ [ VK_FORMAT_BC4_SNORM_BLOCK ]: SIGNED_RED_RGTC1_Format,
988
+ [ VK_FORMAT_BC4_UNORM_BLOCK ]: RED_RGTC1_Format,
989
+
990
+ [ VK_FORMAT_BC5_SNORM_BLOCK ]: SIGNED_RED_GREEN_RGTC2_Format,
991
+ [ VK_FORMAT_BC5_UNORM_BLOCK ]: RED_GREEN_RGTC2_Format,
959
992
 
960
993
  [ VK_FORMAT_BC7_SRGB_BLOCK ]: RGBA_BPTC_Format,
961
994
  [ VK_FORMAT_BC7_UNORM_BLOCK ]: RGBA_BPTC_Format,
962
995
 
996
+ [ VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG ]: RGBA_PVRTC_4BPPV1_Format,
997
+ [ VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG ]: RGBA_PVRTC_4BPPV1_Format,
998
+ [ VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG ]: RGBA_PVRTC_2BPPV1_Format,
999
+ [ VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG ]: RGBA_PVRTC_2BPPV1_Format,
1000
+
963
1001
  };
964
1002
 
965
1003
  const TYPE_MAP = {
966
1004
 
967
1005
  [ VK_FORMAT_R32G32B32A32_SFLOAT ]: FloatType,
968
- [ VK_FORMAT_R16G16B16A16_SFLOAT ]: HalfFloatType,
969
- [ VK_FORMAT_R8G8B8A8_UNORM ]: UnsignedByteType,
970
- [ VK_FORMAT_R8G8B8A8_SRGB ]: UnsignedByteType,
971
-
972
1006
  [ VK_FORMAT_R32G32_SFLOAT ]: FloatType,
973
- [ VK_FORMAT_R16G16_SFLOAT ]: HalfFloatType,
974
- [ VK_FORMAT_R8G8_UNORM ]: UnsignedByteType,
975
- [ VK_FORMAT_R8G8_SRGB ]: UnsignedByteType,
976
-
977
1007
  [ VK_FORMAT_R32_SFLOAT ]: FloatType,
1008
+
1009
+ [ VK_FORMAT_R16G16B16A16_SFLOAT ]: HalfFloatType,
1010
+ [ VK_FORMAT_R16G16_SFLOAT ]: HalfFloatType,
978
1011
  [ VK_FORMAT_R16_SFLOAT ]: HalfFloatType,
1012
+
1013
+ [ VK_FORMAT_R8G8B8A8_SRGB ]: UnsignedByteType,
1014
+ [ VK_FORMAT_R8G8B8A8_UNORM ]: UnsignedByteType,
1015
+ [ VK_FORMAT_R8G8_SRGB ]: UnsignedByteType,
1016
+ [ VK_FORMAT_R8G8_UNORM ]: UnsignedByteType,
979
1017
  [ VK_FORMAT_R8_SRGB ]: UnsignedByteType,
980
1018
  [ VK_FORMAT_R8_UNORM ]: UnsignedByteType,
981
1019
 
982
- [ VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK ]: UnsignedByteType,
1020
+ [ VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 ]: UnsignedInt5999Type,
1021
+ [ VK_FORMAT_B10G11R11_UFLOAT_PACK32 ]: UnsignedInt101111Type,
1022
+
983
1023
  [ VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK ]: UnsignedByteType,
1024
+ [ VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK ]: UnsignedByteType,
984
1025
 
985
1026
  [ VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT ]: HalfFloatType,
1027
+ [ VK_FORMAT_ASTC_4x4_SRGB_BLOCK ]: UnsignedByteType,
1028
+ [ VK_FORMAT_ASTC_4x4_UNORM_BLOCK ]: UnsignedByteType,
1029
+ [ VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT ]: HalfFloatType,
986
1030
  [ VK_FORMAT_ASTC_6x6_SRGB_BLOCK ]: UnsignedByteType,
987
1031
  [ VK_FORMAT_ASTC_6x6_UNORM_BLOCK ]: UnsignedByteType,
988
1032
 
1033
+ [ VK_FORMAT_BC1_RGBA_SRGB_BLOCK ]: UnsignedByteType,
1034
+ [ VK_FORMAT_BC1_RGBA_UNORM_BLOCK ]: UnsignedByteType,
1035
+ [ VK_FORMAT_BC1_RGB_SRGB_BLOCK ]: UnsignedByteType,
1036
+ [ VK_FORMAT_BC1_RGB_UNORM_BLOCK ]: UnsignedByteType,
1037
+
1038
+ [ VK_FORMAT_BC3_SRGB_BLOCK ]: UnsignedByteType,
1039
+ [ VK_FORMAT_BC3_UNORM_BLOCK ]: UnsignedByteType,
1040
+
1041
+ [ VK_FORMAT_BC4_SNORM_BLOCK ]: UnsignedByteType,
1042
+ [ VK_FORMAT_BC4_UNORM_BLOCK ]: UnsignedByteType,
1043
+
1044
+ [ VK_FORMAT_BC5_SNORM_BLOCK ]: UnsignedByteType,
1045
+ [ VK_FORMAT_BC5_UNORM_BLOCK ]: UnsignedByteType,
1046
+
1047
+ [ VK_FORMAT_BC7_SRGB_BLOCK ]: UnsignedByteType,
1048
+ [ VK_FORMAT_BC7_UNORM_BLOCK ]: UnsignedByteType,
1049
+
1050
+ [ VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG ]: UnsignedByteType,
1051
+ [ VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG ]: UnsignedByteType,
1052
+ [ VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG ]: UnsignedByteType,
1053
+ [ VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG ]: UnsignedByteType,
1054
+
989
1055
  };
990
1056
 
991
1057
  async function createRawTexture( container ) {
@@ -994,7 +1060,14 @@ async function createRawTexture( container ) {
994
1060
 
995
1061
  if ( FORMAT_MAP[ vkFormat ] === undefined ) {
996
1062
 
997
- throw new Error( 'THREE.KTX2Loader: Unsupported vkFormat.' );
1063
+ throw new Error( 'THREE.KTX2Loader: Unsupported vkFormat: ' + vkFormat );
1064
+
1065
+ }
1066
+
1067
+ // TODO: Merge the TYPE_MAP warning into the thrown error above, after r190.
1068
+ if ( TYPE_MAP[ vkFormat ] === undefined ) {
1069
+
1070
+ console.warn( 'THREE.KTX2Loader: Missing ".type" for vkFormat: ' + vkFormat );
998
1071
 
999
1072
  }
1000
1073
 
@@ -1024,7 +1097,6 @@ async function createRawTexture( container ) {
1024
1097
 
1025
1098
  const mipmaps = [];
1026
1099
 
1027
-
1028
1100
  for ( let levelIndex = 0; levelIndex < container.levels.length; levelIndex ++ ) {
1029
1101
 
1030
1102
  const levelWidth = Math.max( 1, container.pixelWidth >> levelIndex );
@@ -1071,6 +1143,16 @@ async function createRawTexture( container ) {
1071
1143
 
1072
1144
  );
1073
1145
 
1146
+ } else if ( TYPE_MAP[ vkFormat ] === UnsignedInt5999Type || TYPE_MAP[ vkFormat ] === UnsignedInt101111Type ) {
1147
+
1148
+ data = new Uint32Array(
1149
+
1150
+ levelData.buffer,
1151
+ levelData.byteOffset,
1152
+ levelData.byteLength / Uint32Array.BYTES_PER_ELEMENT
1153
+
1154
+ );
1155
+
1074
1156
  } else {
1075
1157
 
1076
1158
  data = levelData;
@@ -1088,6 +1170,9 @@ async function createRawTexture( container ) {
1088
1170
 
1089
1171
  }
1090
1172
 
1173
+ // levelCount = 0 implies runtime-generated mipmaps.
1174
+ const useMipmaps = container.levelCount === 0 || mipmaps.length > 1;
1175
+
1091
1176
  let texture;
1092
1177
 
1093
1178
  if ( UNCOMPRESSED_FORMATS.has( FORMAT_MAP[ vkFormat ] ) ) {
@@ -1095,14 +1180,16 @@ async function createRawTexture( container ) {
1095
1180
  texture = container.pixelDepth === 0
1096
1181
  ? new DataTexture( mipmaps[ 0 ].data, container.pixelWidth, container.pixelHeight )
1097
1182
  : new Data3DTexture( mipmaps[ 0 ].data, container.pixelWidth, container.pixelHeight, container.pixelDepth );
1183
+ texture.minFilter = useMipmaps ? NearestMipmapNearestFilter : NearestFilter;
1184
+ texture.magFilter = NearestFilter;
1185
+ texture.generateMipmaps = container.levelCount === 0;
1098
1186
 
1099
1187
  } else {
1100
1188
 
1101
1189
  if ( container.pixelDepth > 0 ) throw new Error( 'THREE.KTX2Loader: Unsupported pixelDepth.' );
1102
1190
 
1103
1191
  texture = new CompressedTexture( mipmaps, container.pixelWidth, container.pixelHeight );
1104
-
1105
- texture.minFilter = mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter;
1192
+ texture.minFilter = useMipmaps ? LinearMipmapLinearFilter : LinearFilter;
1106
1193
  texture.magFilter = LinearFilter;
1107
1194
 
1108
1195
  }
@@ -6,8 +6,8 @@ import {
6
6
  * A loader for the KTX texture compression format.
7
7
  *
8
8
  * References:
9
- * - [The KTX File Format and Tools]{@link https://www.khronos.org/opengles/sdk/tools/KTX/}
10
- * - [Babylon.JS khronosTextureContainer.ts]{@link https://github.com/BabylonJS/Babylon.js/blob/master/src/Misc/khronosTextureContainer.ts}
9
+ * - [The KTX File Format and Tools](https://www.khronos.org/opengles/sdk/tools/KTX/)
10
+ * - [Babylon.JS khronosTextureContainer.ts](https://github.com/BabylonJS/Babylon.js/blob/master/src/Misc/khronosTextureContainer.ts)
11
11
  *
12
12
  * ```js
13
13
  * const loader = new KTXLoader();
@@ -1749,7 +1749,7 @@ function createObject( loader, elements, elementSize, isConditionalSegments = fa
1749
1749
  /**
1750
1750
  * A loader for the LDraw format.
1751
1751
  *
1752
- * [LDraw]{@link https://ldraw.org/} (LEGO Draw) is an [open format specification]{@link https://ldraw.org/article/218.html}
1752
+ * [LDraw](https://ldraw.org/} (LEGO Draw) is an [open format specification]{@link https://ldraw.org/article/218.html)
1753
1753
  * for describing LEGO and other construction set 3D models.
1754
1754
  *
1755
1755
  * An LDraw asset (a text file usually with extension .ldr, .dat or .txt) can describe just a single construction
@@ -12,8 +12,8 @@ import {
12
12
  * A loader for the 3DL LUT format.
13
13
  *
14
14
  * References:
15
- * - [3D LUTs]{@link http://download.autodesk.com/us/systemdocs/help/2011/lustre/index.html?url=./files/WSc4e151a45a3b785a24c3d9a411df9298473-7ffd.htm,topicNumber=d0e9492}
16
- * - [Format Spec for .3dl]{@link https://community.foundry.com/discuss/topic/103636/format-spec-for-3dl?mode=Post&postID=895258}
15
+ * - [3D LUTs](http://download.autodesk.com/us/systemdocs/help/2011/lustre/index.html?url=./files/WSc4e151a45a3b785a24c3d9a411df9298473-7ffd.htm,topicNumber=d0e9492)
16
+ * - [Format Spec for .3dl](https://community.foundry.com/discuss/topic/103636/format-spec-for-3dl?mode=Post&postID=895258)
17
17
  *
18
18
  * ```js
19
19
  * const loader = new LUT3dlLoader();
@@ -12,7 +12,7 @@ import {
12
12
  * A loader for the Cube LUT format.
13
13
  *
14
14
  * References:
15
- * - [Cube LUT Specification]{@link https://web.archive.org/web/20220220033515/https://wwwimages2.adobe.com/content/dam/acom/en/products/speedgrade/cc/pdfs/cube-lut-specification-1.0.pdf}
15
+ * - [Cube LUT Specification](https://web.archive.org/web/20220220033515/https://wwwimages2.adobe.com/content/dam/acom/en/products/speedgrade/cc/pdfs/cube-lut-specification-1.0.pdf)
16
16
  *
17
17
  * ```js
18
18
  * const loader = new LUTCubeLoader();
@@ -36,8 +36,8 @@ let _lwoTree;
36
36
  * LWO3 and LWO2 formats are supported.
37
37
  *
38
38
  * References:
39
- * - [LWO3 format specification]{@link https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo3.html}
40
- * - [LWO2 format specification]{@link https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo2.html}
39
+ * - [LWO3 format specification](https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo3.html)
40
+ * - [LWO2 format specification](https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo2.html)
41
41
  *
42
42
  * ```js
43
43
  * const loader = new LWOLoader();
@@ -1,5 +1,5 @@
1
1
  import {
2
- FileLoader, Loader, TextureLoader, RepeatWrapping, MeshBasicNodeMaterial,
2
+ FileLoader, Loader, ImageBitmapLoader, Texture, RepeatWrapping, MeshBasicNodeMaterial,
3
3
  MeshPhysicalNodeMaterial, DoubleSide,
4
4
  } from 'three/webgpu';
5
5
 
@@ -410,9 +410,15 @@ class MaterialXNode {
410
410
  getTexture() {
411
411
 
412
412
  const filePrefix = this.getRecursiveAttribute( 'fileprefix' ) || '';
413
+ const uri = filePrefix + this.value;
414
+
415
+ if ( this.materialX.textureCache.has( uri ) ) {
416
+
417
+ return this.materialX.textureCache.get( uri );
418
+
419
+ }
413
420
 
414
421
  let loader = this.materialX.textureLoader;
415
- const uri = filePrefix + this.value;
416
422
 
417
423
  if ( uri ) {
418
424
 
@@ -421,9 +427,17 @@ class MaterialXNode {
421
427
 
422
428
  }
423
429
 
424
- const texture = loader.load( uri );
430
+ const texture = new Texture();
425
431
  texture.wrapS = texture.wrapT = RepeatWrapping;
426
- texture.flipY = false;
432
+
433
+ this.materialX.textureCache.set( uri, texture );
434
+
435
+ loader.load( uri, function ( imageBitmap ) {
436
+
437
+ texture.image = imageBitmap;
438
+ texture.needsUpdate = true;
439
+
440
+ } );
427
441
 
428
442
  return texture;
429
443
 
@@ -1030,7 +1044,10 @@ class MaterialX {
1030
1044
  this.nodesXLib = new Map();
1031
1045
  //this.nodesXRefLib = new WeakMap();
1032
1046
 
1033
- this.textureLoader = new TextureLoader( manager );
1047
+ this.textureLoader = new ImageBitmapLoader( manager );
1048
+ this.textureLoader.setOptions( { imageOrientation: 'flipY' } );
1049
+
1050
+ this.textureCache = new Map();
1034
1051
 
1035
1052
  }
1036
1053
 
@@ -436,7 +436,7 @@ function ParserState() {
436
436
  /**
437
437
  * A loader for the OBJ format.
438
438
  *
439
- * The [OBJ format]{@link https://en.wikipedia.org/wiki/Wavefront_.obj_file} is a simple data-format that
439
+ * The [OBJ format](https://en.wikipedia.org/wiki/Wavefront_.obj_file) is a simple data-format that
440
440
  * represents 3D geometry in a human readable format as the position of each vertex, the UV position of
441
441
  * each texture coordinate vertex, vertex normals, and the faces that make each polygon defined as a list
442
442
  * of vertices, and texture vertices.
@@ -10,7 +10,7 @@ import {
10
10
  /**
11
11
  * A loader for the PDB format.
12
12
  *
13
- * The [Protein Data Bank]{@link https://en.wikipedia.org/wiki/Protein_Data_Bank_(file_format)}
13
+ * The [Protein Data Bank](https://en.wikipedia.org/wiki/Protein_Data_Bank_(file_format))
14
14
  * file format is a textual file describing the three-dimensional structures of molecules.
15
15
  *
16
16
  * ```js