super-three 0.179.0 → 0.184.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 (696) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +14522 -12207
  4. package/build/three.core.js +12005 -10954
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +2270 -1005
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +63 -18
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +16573 -7890
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +16533 -7888
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  15. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  16. package/examples/jsm/Addons.js +12 -4
  17. package/examples/jsm/animation/CCDIKSolver.js +8 -4
  18. package/examples/jsm/controls/ArcballControls.js +15 -12
  19. package/examples/jsm/controls/DragControls.js +9 -59
  20. package/examples/jsm/controls/FirstPersonControls.js +61 -57
  21. package/examples/jsm/controls/FlyControls.js +5 -1
  22. package/examples/jsm/controls/MapControls.js +55 -1
  23. package/examples/jsm/controls/OrbitControls.js +113 -10
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +9 -9
  26. package/examples/jsm/controls/TransformControls.js +35 -3
  27. package/examples/jsm/csm/CSM.js +2 -1
  28. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  29. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  30. package/examples/jsm/effects/AsciiEffect.js +8 -8
  31. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  32. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  33. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  34. package/examples/jsm/exporters/EXRExporter.js +2 -2
  35. package/examples/jsm/exporters/GLTFExporter.js +185 -34
  36. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  37. package/examples/jsm/exporters/PLYExporter.js +1 -1
  38. package/examples/jsm/exporters/USDZExporter.js +31 -5
  39. package/examples/jsm/geometries/DecalGeometry.js +3 -3
  40. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  41. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  42. package/examples/jsm/geometries/TextGeometry.js +21 -2
  43. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  44. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  45. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  46. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  47. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  48. package/examples/jsm/helpers/ViewHelper.js +110 -13
  49. package/examples/jsm/inspector/Extension.js +13 -0
  50. package/examples/jsm/inspector/Inspector.js +542 -0
  51. package/examples/jsm/inspector/RendererInspector.js +425 -0
  52. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  53. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  55. package/examples/jsm/inspector/tabs/Console.js +238 -0
  56. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  57. package/examples/jsm/inspector/tabs/Parameters.js +380 -0
  58. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  59. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  60. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  61. package/examples/jsm/inspector/tabs/Viewer.js +268 -0
  62. package/examples/jsm/inspector/ui/Graph.js +95 -0
  63. package/examples/jsm/inspector/ui/Item.js +170 -0
  64. package/examples/jsm/inspector/ui/List.js +75 -0
  65. package/examples/jsm/inspector/ui/Profiler.js +2072 -0
  66. package/examples/jsm/inspector/ui/Style.js +1667 -0
  67. package/examples/jsm/inspector/ui/Tab.js +265 -0
  68. package/examples/jsm/inspector/ui/Values.js +476 -0
  69. package/examples/jsm/inspector/ui/utils.js +69 -0
  70. package/examples/jsm/interaction/InteractionManager.js +226 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  73. package/examples/jsm/interactive/SelectionBox.js +30 -0
  74. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  75. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  76. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  77. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  79. package/examples/jsm/lines/Line2.js +3 -3
  80. package/examples/jsm/lines/LineGeometry.js +1 -1
  81. package/examples/jsm/lines/LineMaterial.js +7 -1
  82. package/examples/jsm/lines/LineSegments2.js +2 -2
  83. package/examples/jsm/lines/Wireframe.js +2 -2
  84. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  85. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  86. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  87. package/examples/jsm/loaders/3DMLoader.js +5 -4
  88. package/examples/jsm/loaders/3MFLoader.js +3 -3
  89. package/examples/jsm/loaders/AMFLoader.js +2 -2
  90. package/examples/jsm/loaders/ColladaLoader.js +27 -4029
  91. package/examples/jsm/loaders/DDSLoader.js +1 -1
  92. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  93. package/examples/jsm/loaders/EXRLoader.js +692 -53
  94. package/examples/jsm/loaders/FBXLoader.js +237 -39
  95. package/examples/jsm/loaders/FontLoader.js +23 -5
  96. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  97. package/examples/jsm/loaders/GLTFLoader.js +159 -185
  98. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  99. package/examples/jsm/loaders/HDRLoader.js +485 -0
  100. package/examples/jsm/loaders/KMZLoader.js +5 -5
  101. package/examples/jsm/loaders/KTX2Loader.js +162 -53
  102. package/examples/jsm/loaders/KTXLoader.js +2 -2
  103. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  104. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  105. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  106. package/examples/jsm/loaders/LWOLoader.js +9 -41
  107. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  108. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  109. package/examples/jsm/loaders/OBJLoader.js +1 -1
  110. package/examples/jsm/loaders/PCDLoader.js +4 -2
  111. package/examples/jsm/loaders/PDBLoader.js +1 -1
  112. package/examples/jsm/loaders/RGBELoader.js +7 -473
  113. package/examples/jsm/loaders/SVGLoader.js +4 -4
  114. package/examples/jsm/loaders/TDSLoader.js +0 -2
  115. package/examples/jsm/loaders/TGALoader.js +0 -2
  116. package/examples/jsm/loaders/TTFLoader.js +4 -4
  117. package/examples/jsm/loaders/USDLoader.js +100 -40
  118. package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
  119. package/examples/jsm/loaders/VOXLoader.js +660 -117
  120. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  121. package/examples/jsm/loaders/VTKLoader.js +42 -25
  122. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  123. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  124. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  125. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  126. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  127. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  128. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  129. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  130. package/examples/jsm/math/ColorSpaces.js +19 -1
  131. package/examples/jsm/math/ConvexHull.js +3 -3
  132. package/examples/jsm/math/ImprovedNoise.js +1 -1
  133. package/examples/jsm/math/Lut.js +2 -2
  134. package/examples/jsm/math/Octree.js +131 -1
  135. package/examples/jsm/math/SimplexNoise.js +1 -1
  136. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  137. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  138. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  139. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  140. package/examples/jsm/misc/RollerCoaster.js +42 -4
  141. package/examples/jsm/misc/TubePainter.js +383 -40
  142. package/examples/jsm/misc/Volume.js +1 -2
  143. package/examples/jsm/misc/VolumeSlice.js +0 -1
  144. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  145. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  146. package/examples/jsm/objects/LensflareMesh.js +1 -1
  147. package/examples/jsm/objects/Reflector.js +73 -25
  148. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  149. package/examples/jsm/objects/Sky.js +91 -7
  150. package/examples/jsm/objects/SkyMesh.js +151 -17
  151. package/examples/jsm/objects/Water.js +7 -6
  152. package/examples/jsm/objects/Water2.js +5 -3
  153. package/examples/jsm/objects/WaterMesh.js +11 -13
  154. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  155. package/examples/jsm/physics/JoltPhysics.js +10 -6
  156. package/examples/jsm/physics/RapierPhysics.js +9 -5
  157. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  158. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  159. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  160. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  161. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  162. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  163. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  164. package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
  165. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  166. package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
  167. package/examples/jsm/renderers/Projector.js +246 -28
  168. package/examples/jsm/renderers/SVGRenderer.js +175 -61
  169. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  170. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  171. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  172. package/examples/jsm/shaders/BokehShader.js +1 -1
  173. package/examples/jsm/shaders/BokehShader2.js +1 -1
  174. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  175. package/examples/jsm/shaders/FocusShader.js +1 -1
  176. package/examples/jsm/shaders/GTAOShader.js +21 -8
  177. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  178. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  179. package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
  180. package/examples/jsm/shaders/SAOShader.js +17 -4
  181. package/examples/jsm/shaders/SSAOShader.js +11 -1
  182. package/examples/jsm/shaders/SSRShader.js +7 -6
  183. package/examples/jsm/shaders/SepiaShader.js +1 -1
  184. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  185. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  186. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
  187. package/examples/jsm/shaders/VignetteShader.js +1 -1
  188. package/examples/jsm/transpiler/AST.js +44 -0
  189. package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
  190. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  191. package/examples/jsm/transpiler/TSLEncoder.js +52 -10
  192. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  193. package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
  194. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  195. package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
  196. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  197. package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
  198. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  199. package/examples/jsm/tsl/display/BloomNode.js +23 -9
  200. package/examples/jsm/tsl/display/CRT.js +150 -0
  201. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
  202. package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
  203. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  204. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  205. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  206. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  207. package/examples/jsm/tsl/display/GTAONode.js +59 -9
  208. package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
  209. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  210. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  211. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  212. package/examples/jsm/tsl/display/OutlineNode.js +81 -20
  213. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  214. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  215. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  216. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  217. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  218. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  219. package/examples/jsm/tsl/display/SSGINode.js +638 -0
  220. package/examples/jsm/tsl/display/SSRNode.js +186 -69
  221. package/examples/jsm/tsl/display/SSSNode.js +490 -0
  222. package/examples/jsm/tsl/display/Shape.js +29 -0
  223. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  224. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  225. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  226. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  227. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  228. package/examples/jsm/tsl/display/TRAANode.js +381 -75
  229. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  230. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  231. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  232. package/examples/jsm/tsl/display/hashBlur.js +16 -18
  233. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  234. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  235. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  236. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  237. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  238. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  239. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  240. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  241. package/examples/jsm/tsl/math/Bayer.js +53 -3
  242. package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
  243. package/examples/jsm/utils/ColorUtils.js +76 -0
  244. package/examples/jsm/utils/LDrawUtils.js +1 -1
  245. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  246. package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
  247. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  248. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  249. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  250. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  251. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  252. package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
  253. package/package.json +27 -38
  254. package/src/Three.Core.js +7 -3
  255. package/src/Three.TSL.js +61 -16
  256. package/src/Three.WebGPU.Nodes.js +7 -0
  257. package/src/Three.WebGPU.js +11 -0
  258. package/src/Three.js +1 -0
  259. package/src/animation/AnimationAction.js +12 -2
  260. package/src/animation/AnimationClip.js +21 -5
  261. package/src/animation/AnimationMixer.js +9 -3
  262. package/src/animation/AnimationObjectGroup.js +2 -1
  263. package/src/animation/AnimationUtils.js +1 -12
  264. package/src/animation/KeyframeTrack.js +54 -14
  265. package/src/animation/PropertyBinding.js +12 -11
  266. package/src/animation/PropertyMixer.js +4 -4
  267. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  268. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  269. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  270. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  271. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  272. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  273. package/src/audio/Audio.js +11 -10
  274. package/src/audio/AudioContext.js +2 -2
  275. package/src/audio/AudioListener.js +5 -3
  276. package/src/audio/PositionalAudio.js +1 -1
  277. package/src/cameras/Camera.js +32 -2
  278. package/src/cameras/CubeCamera.js +20 -0
  279. package/src/cameras/OrthographicCamera.js +1 -1
  280. package/src/cameras/PerspectiveCamera.js +1 -1
  281. package/src/cameras/StereoCamera.js +2 -2
  282. package/src/constants.js +100 -7
  283. package/src/core/BufferAttribute.js +13 -1
  284. package/src/core/BufferGeometry.js +24 -12
  285. package/src/core/Clock.js +7 -0
  286. package/src/core/EventDispatcher.js +1 -1
  287. package/src/core/InterleavedBuffer.js +1 -1
  288. package/src/core/InterleavedBufferAttribute.js +3 -2
  289. package/src/core/Object3D.js +55 -6
  290. package/src/core/Raycaster.js +4 -3
  291. package/src/core/RenderTarget.js +14 -5
  292. package/src/extras/Controls.js +5 -4
  293. package/src/extras/DataUtils.js +2 -1
  294. package/src/extras/Earcut.js +6 -0
  295. package/src/extras/ImageUtils.js +2 -2
  296. package/src/extras/PMREMGenerator.js +259 -57
  297. package/src/extras/TextureUtils.js +6 -1
  298. package/src/extras/core/Curve.js +2 -1
  299. package/src/extras/core/Interpolations.js +7 -1
  300. package/src/extras/core/ShapePath.js +4 -4
  301. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  302. package/src/extras/lib/earcut.js +8 -8
  303. package/src/geometries/BoxGeometry.js +1 -0
  304. package/src/geometries/CapsuleGeometry.js +1 -0
  305. package/src/geometries/CircleGeometry.js +1 -0
  306. package/src/geometries/ConeGeometry.js +1 -0
  307. package/src/geometries/CylinderGeometry.js +1 -0
  308. package/src/geometries/DodecahedronGeometry.js +1 -0
  309. package/src/geometries/ExtrudeGeometry.js +10 -8
  310. package/src/geometries/IcosahedronGeometry.js +1 -0
  311. package/src/geometries/LatheGeometry.js +1 -0
  312. package/src/geometries/OctahedronGeometry.js +1 -0
  313. package/src/geometries/PlaneGeometry.js +1 -0
  314. package/src/geometries/PolyhedronGeometry.js +1 -1
  315. package/src/geometries/RingGeometry.js +1 -0
  316. package/src/geometries/ShapeGeometry.js +1 -0
  317. package/src/geometries/SphereGeometry.js +1 -0
  318. package/src/geometries/TetrahedronGeometry.js +1 -0
  319. package/src/geometries/TorusGeometry.js +9 -3
  320. package/src/geometries/TorusKnotGeometry.js +1 -0
  321. package/src/geometries/TubeGeometry.js +1 -0
  322. package/src/helpers/CameraHelper.js +4 -1
  323. package/src/helpers/DirectionalLightHelper.js +4 -1
  324. package/src/helpers/HemisphereLightHelper.js +3 -0
  325. package/src/helpers/PointLightHelper.js +1 -25
  326. package/src/helpers/SpotLightHelper.js +3 -0
  327. package/src/lights/DirectionalLight.js +13 -0
  328. package/src/lights/HemisphereLight.js +10 -0
  329. package/src/lights/Light.js +1 -11
  330. package/src/lights/LightProbe.js +0 -15
  331. package/src/lights/LightShadow.js +15 -6
  332. package/src/lights/PointLight.js +15 -0
  333. package/src/lights/PointLightShadow.js +0 -86
  334. package/src/lights/SpotLight.js +22 -1
  335. package/src/lights/webgpu/IESSpotLight.js +2 -1
  336. package/src/lights/webgpu/ProjectorLight.js +1 -1
  337. package/src/loaders/AnimationLoader.js +2 -1
  338. package/src/loaders/AudioLoader.js +13 -2
  339. package/src/loaders/BufferGeometryLoader.js +2 -2
  340. package/src/loaders/Cache.js +30 -2
  341. package/src/loaders/DataTextureLoader.js +6 -4
  342. package/src/loaders/FileLoader.js +4 -4
  343. package/src/loaders/ImageBitmapLoader.js +17 -13
  344. package/src/loaders/ImageLoader.js +1 -1
  345. package/src/loaders/Loader.js +9 -3
  346. package/src/loaders/LoadingManager.js +25 -3
  347. package/src/loaders/MaterialLoader.js +6 -4
  348. package/src/loaders/ObjectLoader.js +57 -17
  349. package/src/loaders/TextureLoader.js +1 -1
  350. package/src/loaders/nodes/NodeLoader.js +5 -4
  351. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  352. package/src/materials/Material.js +18 -3
  353. package/src/materials/MeshBasicMaterial.js +1 -0
  354. package/src/materials/MeshDepthMaterial.js +1 -0
  355. package/src/materials/MeshDistanceMaterial.js +1 -1
  356. package/src/materials/MeshLambertMaterial.js +11 -1
  357. package/src/materials/MeshMatcapMaterial.js +22 -0
  358. package/src/materials/MeshNormalMaterial.js +1 -0
  359. package/src/materials/MeshPhongMaterial.js +11 -1
  360. package/src/materials/MeshPhysicalMaterial.js +2 -1
  361. package/src/materials/MeshStandardMaterial.js +8 -7
  362. package/src/materials/MeshToonMaterial.js +2 -1
  363. package/src/materials/PointsMaterial.js +1 -1
  364. package/src/materials/ShaderMaterial.js +22 -3
  365. package/src/materials/nodes/Line2NodeMaterial.js +36 -9
  366. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  367. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  368. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  369. package/src/materials/nodes/NodeMaterial.js +95 -35
  370. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  371. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  372. package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
  373. package/src/math/Color.js +6 -5
  374. package/src/math/ColorManagement.js +9 -3
  375. package/src/math/Cylindrical.js +1 -1
  376. package/src/math/Euler.js +2 -1
  377. package/src/math/Line3.js +6 -5
  378. package/src/math/MathUtils.js +23 -21
  379. package/src/math/Matrix2.js +14 -10
  380. package/src/math/Matrix3.js +15 -11
  381. package/src/math/Matrix4.js +94 -81
  382. package/src/math/Plane.js +5 -4
  383. package/src/math/Quaternion.js +60 -84
  384. package/src/math/Sphere.js +1 -1
  385. package/src/math/Spherical.js +1 -1
  386. package/src/math/Triangle.js +1 -1
  387. package/src/math/Vector2.js +11 -7
  388. package/src/math/Vector3.js +15 -13
  389. package/src/math/Vector4.js +13 -9
  390. package/src/math/interpolants/BezierInterpolant.js +108 -0
  391. package/src/nodes/Nodes.js +86 -65
  392. package/src/nodes/TSL.js +11 -8
  393. package/src/nodes/accessors/Arrays.js +1 -1
  394. package/src/nodes/accessors/BatchNode.js +10 -10
  395. package/src/nodes/accessors/Bitangent.js +5 -5
  396. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  397. package/src/nodes/accessors/BufferNode.js +30 -3
  398. package/src/nodes/accessors/Camera.js +260 -13
  399. package/src/nodes/accessors/ClippingNode.js +10 -9
  400. package/src/nodes/accessors/CubeTextureNode.js +32 -6
  401. package/src/nodes/accessors/InstanceNode.js +164 -39
  402. package/src/nodes/accessors/Lights.js +10 -0
  403. package/src/nodes/accessors/MaterialNode.js +9 -1
  404. package/src/nodes/accessors/MaterialProperties.js +2 -5
  405. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  406. package/src/nodes/accessors/ModelNode.js +1 -1
  407. package/src/nodes/accessors/Normal.js +16 -15
  408. package/src/nodes/accessors/Object3DNode.js +2 -2
  409. package/src/nodes/accessors/Position.js +51 -3
  410. package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
  411. package/src/nodes/accessors/ReferenceNode.js +11 -10
  412. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  413. package/src/nodes/accessors/SceneProperties.js +47 -0
  414. package/src/nodes/accessors/SkinningNode.js +27 -26
  415. package/src/nodes/accessors/StorageBufferNode.js +14 -24
  416. package/src/nodes/accessors/StorageTextureNode.js +62 -9
  417. package/src/nodes/accessors/Tangent.js +4 -14
  418. package/src/nodes/accessors/Texture3DNode.js +41 -31
  419. package/src/nodes/accessors/TextureNode.js +193 -63
  420. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  421. package/src/nodes/accessors/UserDataNode.js +1 -2
  422. package/src/nodes/accessors/VertexColorNode.js +1 -2
  423. package/src/nodes/code/FunctionCallNode.js +25 -5
  424. package/src/nodes/code/FunctionNode.js +25 -3
  425. package/src/nodes/core/ArrayNode.js +22 -2
  426. package/src/nodes/core/AssignNode.js +6 -5
  427. package/src/nodes/core/AttributeNode.js +5 -4
  428. package/src/nodes/core/BypassNode.js +1 -1
  429. package/src/nodes/core/ContextNode.js +133 -15
  430. package/src/nodes/core/IndexNode.js +4 -3
  431. package/src/nodes/core/InputNode.js +3 -2
  432. package/src/nodes/core/InspectorNode.js +128 -0
  433. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
  434. package/src/nodes/core/MRTNode.js +48 -2
  435. package/src/nodes/core/Node.js +264 -46
  436. package/src/nodes/core/NodeBuilder.js +453 -87
  437. package/src/nodes/core/NodeError.js +28 -0
  438. package/src/nodes/core/NodeFrame.js +31 -23
  439. package/src/nodes/core/NodeFunction.js +2 -1
  440. package/src/nodes/core/NodeParser.js +2 -1
  441. package/src/nodes/core/NodeUniform.js +1 -1
  442. package/src/nodes/core/NodeUtils.js +25 -97
  443. package/src/nodes/core/OutputStructNode.js +12 -10
  444. package/src/nodes/core/ParameterNode.js +34 -3
  445. package/src/nodes/core/PropertyNode.js +26 -3
  446. package/src/nodes/core/StackNode.js +99 -23
  447. package/src/nodes/core/StackTrace.js +139 -0
  448. package/src/nodes/core/StructNode.js +22 -8
  449. package/src/nodes/core/StructTypeNode.js +13 -18
  450. package/src/nodes/core/SubBuildNode.js +4 -4
  451. package/src/nodes/core/UniformGroupNode.js +36 -6
  452. package/src/nodes/core/UniformNode.js +37 -13
  453. package/src/nodes/core/VarNode.js +96 -34
  454. package/src/nodes/core/VaryingNode.js +2 -18
  455. package/src/nodes/display/BlendModes.js +0 -63
  456. package/src/nodes/display/BumpMapNode.js +1 -1
  457. package/src/nodes/display/ColorAdjustment.js +18 -1
  458. package/src/nodes/display/ColorSpaceNode.js +3 -3
  459. package/src/nodes/display/FrontFacingNode.js +4 -8
  460. package/src/nodes/display/NormalMapNode.js +41 -5
  461. package/src/nodes/display/PassNode.js +175 -25
  462. package/src/nodes/display/RenderOutputNode.js +35 -9
  463. package/src/nodes/display/ScreenNode.js +47 -15
  464. package/src/nodes/display/ToneMappingNode.js +32 -5
  465. package/src/nodes/display/ToonOutlinePassNode.js +10 -2
  466. package/src/nodes/display/ViewportDepthNode.js +52 -4
  467. package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
  468. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  469. package/src/nodes/display/ViewportTextureNode.js +72 -14
  470. package/src/nodes/fog/Fog.js +18 -34
  471. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  472. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  473. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  474. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  475. package/src/nodes/functions/BasicLightingModel.js +2 -1
  476. package/src/nodes/functions/PhysicalLightingModel.js +128 -46
  477. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  478. package/src/nodes/geometry/RangeNode.js +44 -6
  479. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  480. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  481. package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
  482. package/src/nodes/gpgpu/ComputeNode.js +76 -38
  483. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  484. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
  485. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  486. package/src/nodes/lighting/EnvironmentNode.js +34 -9
  487. package/src/nodes/lighting/LightsNode.js +10 -32
  488. package/src/nodes/lighting/PointShadowNode.js +167 -148
  489. package/src/nodes/lighting/ShadowFilterNode.js +55 -65
  490. package/src/nodes/lighting/ShadowNode.js +189 -44
  491. package/src/nodes/math/BitcastNode.js +156 -0
  492. package/src/nodes/math/BitcountNode.js +433 -0
  493. package/src/nodes/math/ConditionalNode.js +25 -8
  494. package/src/nodes/math/MathNode.js +98 -57
  495. package/src/nodes/math/OperatorNode.js +8 -5
  496. package/src/nodes/math/PackFloatNode.js +98 -0
  497. package/src/nodes/math/UnpackFloatNode.js +96 -0
  498. package/src/nodes/pmrem/PMREMNode.js +1 -1
  499. package/src/nodes/pmrem/PMREMUtils.js +111 -2
  500. package/src/nodes/shapes/Shapes.js +1 -1
  501. package/src/nodes/tsl/TSLBase.js +6 -3
  502. package/src/nodes/tsl/TSLCore.js +488 -166
  503. package/src/nodes/utils/ArrayElementNode.js +14 -1
  504. package/src/nodes/utils/ConvertNode.js +1 -1
  505. package/src/nodes/utils/DebugNode.js +14 -13
  506. package/src/nodes/utils/EventNode.js +67 -2
  507. package/src/nodes/utils/FlipNode.js +1 -1
  508. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  509. package/src/nodes/utils/JoinNode.js +7 -4
  510. package/src/nodes/utils/LoopNode.js +20 -24
  511. package/src/nodes/utils/MemberNode.js +60 -8
  512. package/src/nodes/utils/Packing.js +13 -1
  513. package/src/nodes/utils/PostProcessingUtils.js +60 -1
  514. package/src/nodes/utils/RTTNode.js +14 -4
  515. package/src/nodes/utils/ReflectorNode.js +61 -11
  516. package/src/nodes/utils/Remap.js +48 -0
  517. package/src/nodes/utils/RotateNode.js +1 -1
  518. package/src/nodes/utils/SampleNode.js +12 -2
  519. package/src/nodes/utils/SetNode.js +1 -1
  520. package/src/nodes/utils/SplitNode.js +12 -1
  521. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  522. package/src/nodes/utils/Timer.js +0 -47
  523. package/src/nodes/utils/UVUtils.js +28 -0
  524. package/src/objects/BatchedMesh.js +46 -18
  525. package/src/objects/InstancedMesh.js +30 -3
  526. package/src/objects/LOD.js +1 -1
  527. package/src/objects/Line.js +3 -2
  528. package/src/objects/LineSegments.js +2 -1
  529. package/src/objects/Mesh.js +1 -1
  530. package/src/objects/Points.js +1 -1
  531. package/src/objects/Skeleton.js +12 -2
  532. package/src/objects/SkinnedMesh.js +29 -10
  533. package/src/objects/Sprite.js +4 -3
  534. package/src/renderers/WebGLRenderer.js +372 -179
  535. package/src/renderers/common/Animation.js +16 -4
  536. package/src/renderers/common/Attributes.js +16 -2
  537. package/src/renderers/common/Backend.js +137 -35
  538. package/src/renderers/common/Background.js +28 -14
  539. package/src/renderers/common/BindGroup.js +1 -16
  540. package/src/renderers/common/Binding.js +11 -0
  541. package/src/renderers/common/Bindings.js +83 -12
  542. package/src/renderers/common/BlendMode.js +143 -0
  543. package/src/renderers/common/Buffer.js +40 -0
  544. package/src/renderers/common/BundleGroup.js +1 -1
  545. package/src/renderers/common/CanvasTarget.js +341 -0
  546. package/src/renderers/common/ChainMap.js +30 -6
  547. package/src/renderers/common/ComputePipeline.js +1 -1
  548. package/src/renderers/common/CubeRenderTarget.js +51 -7
  549. package/src/renderers/common/DataMap.js +1 -1
  550. package/src/renderers/common/Geometries.js +55 -3
  551. package/src/renderers/common/Info.js +337 -6
  552. package/src/renderers/common/InspectorBase.js +151 -0
  553. package/src/renderers/common/Lighting.js +5 -21
  554. package/src/renderers/common/Pipelines.js +41 -8
  555. package/src/renderers/common/PostProcessing.js +9 -226
  556. package/src/renderers/common/QuadMesh.js +7 -1
  557. package/src/renderers/common/ReadbackBuffer.js +78 -0
  558. package/src/renderers/common/RenderBundle.js +3 -1
  559. package/src/renderers/common/RenderBundles.js +7 -3
  560. package/src/renderers/common/RenderContext.js +18 -2
  561. package/src/renderers/common/RenderContexts.js +33 -49
  562. package/src/renderers/common/RenderList.js +7 -3
  563. package/src/renderers/common/RenderLists.js +2 -1
  564. package/src/renderers/common/RenderObject.js +32 -6
  565. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  566. package/src/renderers/common/RenderObjects.js +22 -6
  567. package/src/renderers/common/RenderPipeline.js +232 -17
  568. package/src/renderers/common/Renderer.js +927 -335
  569. package/src/renderers/common/RendererUtils.js +9 -0
  570. package/src/renderers/common/SampledTexture.js +9 -1
  571. package/src/renderers/common/Sampler.js +52 -14
  572. package/src/renderers/common/StorageBuffer.js +13 -1
  573. package/src/renderers/common/StorageTexture.js +9 -1
  574. package/src/renderers/common/Textures.js +208 -47
  575. package/src/renderers/common/TimestampQueryPool.js +70 -6
  576. package/src/renderers/common/Uniform.js +8 -0
  577. package/src/renderers/common/UniformsGroup.js +64 -2
  578. package/src/renderers/common/XRManager.js +79 -51
  579. package/src/renderers/common/extras/PMREMGenerator.js +176 -79
  580. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  581. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  582. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
  583. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  584. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  585. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  586. package/src/renderers/shaders/DFGLUTData.js +49 -0
  587. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  588. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  589. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  590. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  591. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  592. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  593. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
  594. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  595. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  596. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  597. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  598. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  599. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  600. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  601. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  602. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
  603. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  604. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  605. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  606. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  607. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  608. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  609. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  610. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
  611. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  612. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  613. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  614. package/src/renderers/shaders/ShaderChunk.js +5 -3
  615. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  616. package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
  617. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  618. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  619. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  620. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  621. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  622. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  623. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  624. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  625. package/src/renderers/shaders/ShaderLib.js +7 -6
  626. package/src/renderers/shaders/UniformsLib.js +8 -5
  627. package/src/renderers/shaders/UniformsUtils.js +52 -9
  628. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  629. package/src/renderers/webgl/WebGLBackground.js +15 -15
  630. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  631. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  632. package/src/renderers/webgl/WebGLCapabilities.js +11 -5
  633. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  634. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  635. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  636. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  637. package/src/renderers/webgl/WebGLInfo.js +3 -1
  638. package/src/renderers/webgl/WebGLLights.js +18 -1
  639. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  640. package/src/renderers/webgl/WebGLObjects.js +3 -1
  641. package/src/renderers/webgl/WebGLOutput.js +270 -0
  642. package/src/renderers/webgl/WebGLProgram.js +63 -122
  643. package/src/renderers/webgl/WebGLPrograms.js +65 -52
  644. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  645. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  646. package/src/renderers/webgl/WebGLShadowMap.js +191 -26
  647. package/src/renderers/webgl/WebGLState.js +79 -40
  648. package/src/renderers/webgl/WebGLTextures.js +234 -68
  649. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  650. package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
  651. package/src/renderers/webgl/WebGLUtils.js +8 -3
  652. package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
  653. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  654. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
  655. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  656. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  657. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  658. package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
  659. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
  660. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
  661. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
  662. package/src/renderers/webgpu/WebGPUBackend.js +403 -253
  663. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  664. package/src/renderers/webgpu/WebGPURenderer.js +5 -3
  665. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
  666. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
  667. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
  668. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  669. package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
  670. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
  671. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
  672. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
  673. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
  674. package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
  675. package/src/renderers/webxr/WebXRController.js +12 -0
  676. package/src/renderers/webxr/WebXRManager.js +45 -29
  677. package/src/textures/CubeDepthTexture.js +76 -0
  678. package/src/textures/ExternalTexture.js +15 -4
  679. package/src/textures/HTMLTexture.js +74 -0
  680. package/src/textures/Source.js +5 -4
  681. package/src/textures/Texture.js +19 -7
  682. package/src/textures/VideoTexture.js +2 -3
  683. package/src/utils.js +344 -3
  684. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  685. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  686. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  687. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  688. package/src/nodes/accessors/SceneNode.js +0 -144
  689. package/src/nodes/code/ScriptableNode.js +0 -726
  690. package/src/nodes/code/ScriptableValueNode.js +0 -253
  691. package/src/nodes/display/PosterizeNode.js +0 -65
  692. package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
  693. package/src/nodes/utils/RemapNode.js +0 -125
  694. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  695. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  696. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -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,
@@ -16,9 +18,13 @@ import {
16
18
  RGBA_ASTC_4x4_Format,
17
19
  RGBA_ASTC_6x6_Format,
18
20
  RGBA_BPTC_Format,
19
- RGBA_S3TC_DXT3_Format,
20
21
  RGBA_ETC2_EAC_Format,
22
+ R11_EAC_Format,
23
+ SIGNED_R11_EAC_Format,
24
+ RG11_EAC_Format,
25
+ SIGNED_RG11_EAC_Format,
21
26
  RGBA_PVRTC_4BPPV1_Format,
27
+ RGBA_PVRTC_2BPPV1_Format,
22
28
  RGBA_S3TC_DXT1_Format,
23
29
  RGBA_S3TC_DXT5_Format,
24
30
  RGB_BPTC_UNSIGNED_Format,
@@ -26,10 +32,18 @@ import {
26
32
  RGB_ETC2_Format,
27
33
  RGB_PVRTC_4BPPV1_Format,
28
34
  RGB_S3TC_DXT1_Format,
35
+ SIGNED_RED_GREEN_RGTC2_Format,
36
+ SIGNED_RED_RGTC1_Format,
37
+ RED_GREEN_RGTC2_Format,
38
+ RED_RGTC1_Format,
39
+ RGBFormat,
29
40
  RGFormat,
30
41
  RedFormat,
31
42
  SRGBColorSpace,
32
- UnsignedByteType
43
+ UnsignedByteType,
44
+ UnsignedInt5999Type,
45
+ UnsignedInt101111Type,
46
+ UnsignedShortType
33
47
  } from 'three';
34
48
  import { WorkerPool } from '../utils/WorkerPool.js';
35
49
  import {
@@ -42,6 +56,7 @@ import {
42
56
  KHR_SUPERCOMPRESSION_NONE,
43
57
  KHR_SUPERCOMPRESSION_ZSTD,
44
58
  VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT,
59
+ VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT,
45
60
  VK_FORMAT_ASTC_4x4_SRGB_BLOCK,
46
61
  VK_FORMAT_ASTC_4x4_UNORM_BLOCK,
47
62
  VK_FORMAT_ASTC_6x6_SRGB_BLOCK,
@@ -52,13 +67,24 @@ import {
52
67
  VK_FORMAT_BC1_RGB_UNORM_BLOCK,
53
68
  VK_FORMAT_BC3_SRGB_BLOCK,
54
69
  VK_FORMAT_BC3_UNORM_BLOCK,
70
+ VK_FORMAT_BC4_SNORM_BLOCK,
71
+ VK_FORMAT_BC4_UNORM_BLOCK,
55
72
  VK_FORMAT_BC5_SNORM_BLOCK,
56
73
  VK_FORMAT_BC5_UNORM_BLOCK,
57
74
  VK_FORMAT_BC7_SRGB_BLOCK,
58
75
  VK_FORMAT_BC7_UNORM_BLOCK,
59
76
  VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
60
77
  VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
78
+ VK_FORMAT_EAC_R11_UNORM_BLOCK,
79
+ VK_FORMAT_EAC_R11_SNORM_BLOCK,
80
+ VK_FORMAT_EAC_R11G11_UNORM_BLOCK,
81
+ VK_FORMAT_EAC_R11G11_SNORM_BLOCK,
82
+ VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG,
83
+ VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG,
84
+ VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG,
85
+ VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG,
61
86
  VK_FORMAT_R16G16B16A16_SFLOAT,
87
+ VK_FORMAT_R16G16B16A16_UNORM,
62
88
  VK_FORMAT_R16G16_SFLOAT,
63
89
  VK_FORMAT_R16_SFLOAT,
64
90
  VK_FORMAT_R32G32B32A32_SFLOAT,
@@ -70,6 +96,8 @@ import {
70
96
  VK_FORMAT_R8G8_UNORM,
71
97
  VK_FORMAT_R8_SRGB,
72
98
  VK_FORMAT_R8_UNORM,
99
+ VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
100
+ VK_FORMAT_B10G11R11_UFLOAT_PACK32,
73
101
  VK_FORMAT_UNDEFINED
74
102
  } from '../libs/ktx-parse.module.js';
75
103
  import { ZSTDDecoder } from '../libs/zstddec.module.js';
@@ -94,9 +122,9 @@ let _zstd;
94
122
  * This loader relies on Web Assembly which is not supported in older browsers.
95
123
  *
96
124
  * 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}
125
+ * - [KTX specification](http://github.khronos.org/KTX-Specification/)
126
+ * - [DFD](https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html#basicdescriptor)
127
+ * - [BasisU HDR](https://github.com/BinomialLLC/basis_universal/wiki/UASTC-HDR-Texture-Specification-v1.0)
100
128
  *
101
129
  * ```js
102
130
  * const loader = new KTX2Loader();
@@ -175,22 +203,17 @@ class KTX2Loader extends Loader {
175
203
  * Async version of {@link KTX2Loader#detectSupport}.
176
204
  *
177
205
  * @async
178
- * @param {WebGPURenderer|WebGLRenderer} renderer - The renderer.
206
+ * @deprecated
207
+ * @param {WebGPURenderer} renderer - The renderer.
179
208
  * @return {Promise} A Promise that resolves when the support has been detected.
180
209
  */
181
210
  async detectSupportAsync( renderer ) {
182
211
 
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
- };
212
+ console.warn( 'KTX2Loader: "detectSupportAsync()" has been deprecated. Use "detectSupport()" and "await renderer.init();" when creating the renderer.' ); // @deprecated r181
192
213
 
193
- return this;
214
+ await renderer.init();
215
+
216
+ return this.detectSupport( renderer );
194
217
 
195
218
  }
196
219
 
@@ -210,8 +233,8 @@ class KTX2Loader extends Loader {
210
233
  astcHDRSupported: false, // https://github.com/gpuweb/gpuweb/issues/3856
211
234
  etc1Supported: renderer.hasFeature( 'texture-compression-etc1' ),
212
235
  etc2Supported: renderer.hasFeature( 'texture-compression-etc2' ),
213
- dxtSupported: renderer.hasFeature( 'texture-compression-bc' ),
214
- bptcSupported: renderer.hasFeature( 'texture-compression-bptc' ),
236
+ dxtSupported: renderer.hasFeature( 'texture-compression-s3tc' ),
237
+ bptcSupported: renderer.hasFeature( 'texture-compression-bc' ),
215
238
  pvrtcSupported: renderer.hasFeature( 'texture-compression-pvrtc' )
216
239
  };
217
240
 
@@ -229,6 +252,22 @@ class KTX2Loader extends Loader {
229
252
  || renderer.extensions.has( 'WEBKIT_WEBGL_compressed_texture_pvrtc' )
230
253
  };
231
254
 
255
+ if ( typeof navigator !== 'undefined' &&
256
+ typeof navigator.platform !== 'undefined' && typeof navigator.userAgent !== 'undefined' &&
257
+ navigator.platform.indexOf( 'Linux' ) >= 0 && navigator.userAgent.indexOf( 'Firefox' ) >= 0 &&
258
+ this.workerConfig.astcSupported && this.workerConfig.etc2Supported &&
259
+ this.workerConfig.bptcSupported && this.workerConfig.dxtSupported ) {
260
+
261
+ // On Linux, Mesa drivers for AMD and Intel GPUs expose ETC2 and ASTC even though the hardware doesn't support these.
262
+ // Using these extensions will result in expensive software decompression on the main thread inside the driver, causing performance issues.
263
+ // 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.
264
+ // 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.
265
+
266
+ this.workerConfig.astcSupported = false;
267
+ this.workerConfig.etc2Supported = false;
268
+
269
+ }
270
+
232
271
  }
233
272
 
234
273
  return this;
@@ -330,6 +369,7 @@ class KTX2Loader extends Loader {
330
369
  loader.setPath( this.path );
331
370
  loader.setCrossOrigin( this.crossOrigin );
332
371
  loader.setWithCredentials( this.withCredentials );
372
+ loader.setRequestHeader( this.requestHeader );
333
373
  loader.setResponseType( 'arraybuffer' );
334
374
 
335
375
  loader.load( url, ( buffer ) => {
@@ -827,13 +867,9 @@ KTX2Loader.BasisWorker = function () {
827
867
  ];
828
868
 
829
869
  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
870
  [ BasisFormat.ETC1S ]: FORMAT_OPTIONS
835
871
  .filter( ( opt ) => opt.basisFormat.includes( BasisFormat.ETC1S ) )
836
- .sort( ( a, b ) => a.priorityUASTC - b.priorityUASTC ),
872
+ .sort( ( a, b ) => a.priorityETC1S - b.priorityETC1S ),
837
873
 
838
874
  [ BasisFormat.UASTC ]: FORMAT_OPTIONS
839
875
  .filter( ( opt ) => opt.basisFormat.includes( BasisFormat.UASTC ) )
@@ -918,74 +954,126 @@ KTX2Loader.BasisWorker = function () {
918
954
  // Parsing for non-Basis textures. These textures may have supercompression
919
955
  // like Zstd, but they do not require transcoding.
920
956
 
921
- const UNCOMPRESSED_FORMATS = new Set( [ RGBAFormat, RGFormat, RedFormat ] );
957
+ const UNCOMPRESSED_FORMATS = new Set( [ RGBAFormat, RGBFormat, RGFormat, RedFormat ] );
922
958
 
923
959
  const FORMAT_MAP = {
924
960
 
925
961
  [ 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
962
  [ 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
963
  [ VK_FORMAT_R32_SFLOAT ]: RedFormat,
964
+
965
+ [ VK_FORMAT_R16G16B16A16_SFLOAT ]: RGBAFormat,
966
+ [ VK_FORMAT_R16G16_SFLOAT ]: RGFormat,
936
967
  [ VK_FORMAT_R16_SFLOAT ]: RedFormat,
968
+
969
+ [ VK_FORMAT_R16G16B16A16_UNORM ]: RGBAFormat,
970
+
971
+ [ VK_FORMAT_R8G8B8A8_SRGB ]: RGBAFormat,
972
+ [ VK_FORMAT_R8G8B8A8_UNORM ]: RGBAFormat,
973
+ [ VK_FORMAT_R8G8_SRGB ]: RGFormat,
974
+ [ VK_FORMAT_R8G8_UNORM ]: RGFormat,
937
975
  [ VK_FORMAT_R8_SRGB ]: RedFormat,
938
976
  [ VK_FORMAT_R8_UNORM ]: RedFormat,
939
977
 
940
- [ VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK ]: RGB_ETC2_Format,
978
+ [ VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 ]: RGBFormat,
979
+ [ VK_FORMAT_B10G11R11_UFLOAT_PACK32 ]: RGBFormat,
980
+
941
981
  [ VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK ]: RGBA_ETC2_EAC_Format,
982
+ [ VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK ]: RGB_ETC2_Format,
983
+ [ VK_FORMAT_EAC_R11_UNORM_BLOCK ]: R11_EAC_Format,
984
+ [ VK_FORMAT_EAC_R11_SNORM_BLOCK ]: SIGNED_R11_EAC_Format,
985
+ [ VK_FORMAT_EAC_R11G11_UNORM_BLOCK ]: RG11_EAC_Format,
986
+ [ VK_FORMAT_EAC_R11G11_SNORM_BLOCK ]: SIGNED_RG11_EAC_Format,
942
987
 
943
988
  [ VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT ]: RGBA_ASTC_4x4_Format,
944
989
  [ VK_FORMAT_ASTC_4x4_SRGB_BLOCK ]: RGBA_ASTC_4x4_Format,
945
990
  [ VK_FORMAT_ASTC_4x4_UNORM_BLOCK ]: RGBA_ASTC_4x4_Format,
991
+ [ VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT ]: RGBA_ASTC_6x6_Format,
946
992
  [ VK_FORMAT_ASTC_6x6_SRGB_BLOCK ]: RGBA_ASTC_6x6_Format,
947
993
  [ VK_FORMAT_ASTC_6x6_UNORM_BLOCK ]: RGBA_ASTC_6x6_Format,
948
994
 
949
- [ VK_FORMAT_BC1_RGBA_UNORM_BLOCK ]: RGBA_S3TC_DXT1_Format,
950
995
  [ VK_FORMAT_BC1_RGBA_SRGB_BLOCK ]: RGBA_S3TC_DXT1_Format,
951
- [ VK_FORMAT_BC1_RGB_UNORM_BLOCK ]: RGB_S3TC_DXT1_Format,
996
+ [ VK_FORMAT_BC1_RGBA_UNORM_BLOCK ]: RGBA_S3TC_DXT1_Format,
952
997
  [ VK_FORMAT_BC1_RGB_SRGB_BLOCK ]: RGB_S3TC_DXT1_Format,
998
+ [ VK_FORMAT_BC1_RGB_UNORM_BLOCK ]: RGB_S3TC_DXT1_Format,
999
+
1000
+ [ VK_FORMAT_BC3_SRGB_BLOCK ]: RGBA_S3TC_DXT5_Format,
1001
+ [ VK_FORMAT_BC3_UNORM_BLOCK ]: RGBA_S3TC_DXT5_Format,
953
1002
 
954
- [ VK_FORMAT_BC3_SRGB_BLOCK ]: RGBA_S3TC_DXT3_Format,
955
- [ VK_FORMAT_BC3_UNORM_BLOCK ]: RGBA_S3TC_DXT3_Format,
1003
+ [ VK_FORMAT_BC4_SNORM_BLOCK ]: SIGNED_RED_RGTC1_Format,
1004
+ [ VK_FORMAT_BC4_UNORM_BLOCK ]: RED_RGTC1_Format,
956
1005
 
957
- [ VK_FORMAT_BC5_SNORM_BLOCK ]: RGBA_S3TC_DXT5_Format,
958
- [ VK_FORMAT_BC5_UNORM_BLOCK ]: RGBA_S3TC_DXT5_Format,
1006
+ [ VK_FORMAT_BC5_SNORM_BLOCK ]: SIGNED_RED_GREEN_RGTC2_Format,
1007
+ [ VK_FORMAT_BC5_UNORM_BLOCK ]: RED_GREEN_RGTC2_Format,
959
1008
 
960
1009
  [ VK_FORMAT_BC7_SRGB_BLOCK ]: RGBA_BPTC_Format,
961
1010
  [ VK_FORMAT_BC7_UNORM_BLOCK ]: RGBA_BPTC_Format,
962
1011
 
1012
+ [ VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG ]: RGBA_PVRTC_4BPPV1_Format,
1013
+ [ VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG ]: RGBA_PVRTC_4BPPV1_Format,
1014
+ [ VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG ]: RGBA_PVRTC_2BPPV1_Format,
1015
+ [ VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG ]: RGBA_PVRTC_2BPPV1_Format,
1016
+
963
1017
  };
964
1018
 
965
1019
  const TYPE_MAP = {
966
1020
 
967
1021
  [ 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
1022
  [ 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
1023
  [ VK_FORMAT_R32_SFLOAT ]: FloatType,
1024
+
1025
+ [ VK_FORMAT_R16G16B16A16_SFLOAT ]: HalfFloatType,
1026
+ [ VK_FORMAT_R16G16_SFLOAT ]: HalfFloatType,
978
1027
  [ VK_FORMAT_R16_SFLOAT ]: HalfFloatType,
1028
+
1029
+ [ VK_FORMAT_R16G16B16A16_UNORM ]: UnsignedShortType,
1030
+
1031
+ [ VK_FORMAT_R8G8B8A8_SRGB ]: UnsignedByteType,
1032
+ [ VK_FORMAT_R8G8B8A8_UNORM ]: UnsignedByteType,
1033
+ [ VK_FORMAT_R8G8_SRGB ]: UnsignedByteType,
1034
+ [ VK_FORMAT_R8G8_UNORM ]: UnsignedByteType,
979
1035
  [ VK_FORMAT_R8_SRGB ]: UnsignedByteType,
980
1036
  [ VK_FORMAT_R8_UNORM ]: UnsignedByteType,
981
1037
 
982
- [ VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK ]: UnsignedByteType,
1038
+ [ VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 ]: UnsignedInt5999Type,
1039
+ [ VK_FORMAT_B10G11R11_UFLOAT_PACK32 ]: UnsignedInt101111Type,
1040
+
983
1041
  [ VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK ]: UnsignedByteType,
1042
+ [ VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK ]: UnsignedByteType,
1043
+ [ VK_FORMAT_EAC_R11_UNORM_BLOCK ]: UnsignedByteType,
1044
+ [ VK_FORMAT_EAC_R11_SNORM_BLOCK ]: UnsignedByteType,
1045
+ [ VK_FORMAT_EAC_R11G11_UNORM_BLOCK ]: UnsignedByteType,
1046
+ [ VK_FORMAT_EAC_R11G11_SNORM_BLOCK ]: UnsignedByteType,
984
1047
 
985
1048
  [ VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT ]: HalfFloatType,
1049
+ [ VK_FORMAT_ASTC_4x4_SRGB_BLOCK ]: UnsignedByteType,
1050
+ [ VK_FORMAT_ASTC_4x4_UNORM_BLOCK ]: UnsignedByteType,
1051
+ [ VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT ]: HalfFloatType,
986
1052
  [ VK_FORMAT_ASTC_6x6_SRGB_BLOCK ]: UnsignedByteType,
987
1053
  [ VK_FORMAT_ASTC_6x6_UNORM_BLOCK ]: UnsignedByteType,
988
1054
 
1055
+ [ VK_FORMAT_BC1_RGBA_SRGB_BLOCK ]: UnsignedByteType,
1056
+ [ VK_FORMAT_BC1_RGBA_UNORM_BLOCK ]: UnsignedByteType,
1057
+ [ VK_FORMAT_BC1_RGB_SRGB_BLOCK ]: UnsignedByteType,
1058
+ [ VK_FORMAT_BC1_RGB_UNORM_BLOCK ]: UnsignedByteType,
1059
+
1060
+ [ VK_FORMAT_BC3_SRGB_BLOCK ]: UnsignedByteType,
1061
+ [ VK_FORMAT_BC3_UNORM_BLOCK ]: UnsignedByteType,
1062
+
1063
+ [ VK_FORMAT_BC4_SNORM_BLOCK ]: UnsignedByteType,
1064
+ [ VK_FORMAT_BC4_UNORM_BLOCK ]: UnsignedByteType,
1065
+
1066
+ [ VK_FORMAT_BC5_SNORM_BLOCK ]: UnsignedByteType,
1067
+ [ VK_FORMAT_BC5_UNORM_BLOCK ]: UnsignedByteType,
1068
+
1069
+ [ VK_FORMAT_BC7_SRGB_BLOCK ]: UnsignedByteType,
1070
+ [ VK_FORMAT_BC7_UNORM_BLOCK ]: UnsignedByteType,
1071
+
1072
+ [ VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG ]: UnsignedByteType,
1073
+ [ VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG ]: UnsignedByteType,
1074
+ [ VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG ]: UnsignedByteType,
1075
+ [ VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG ]: UnsignedByteType,
1076
+
989
1077
  };
990
1078
 
991
1079
  async function createRawTexture( container ) {
@@ -994,7 +1082,14 @@ async function createRawTexture( container ) {
994
1082
 
995
1083
  if ( FORMAT_MAP[ vkFormat ] === undefined ) {
996
1084
 
997
- throw new Error( 'THREE.KTX2Loader: Unsupported vkFormat.' );
1085
+ throw new Error( 'THREE.KTX2Loader: Unsupported vkFormat: ' + vkFormat );
1086
+
1087
+ }
1088
+
1089
+ // TODO: Merge the TYPE_MAP warning into the thrown error above, after r190.
1090
+ if ( TYPE_MAP[ vkFormat ] === undefined ) {
1091
+
1092
+ console.warn( 'THREE.KTX2Loader: Missing ".type" for vkFormat: ' + vkFormat );
998
1093
 
999
1094
  }
1000
1095
 
@@ -1024,7 +1119,6 @@ async function createRawTexture( container ) {
1024
1119
 
1025
1120
  const mipmaps = [];
1026
1121
 
1027
-
1028
1122
  for ( let levelIndex = 0; levelIndex < container.levels.length; levelIndex ++ ) {
1029
1123
 
1030
1124
  const levelWidth = Math.max( 1, container.pixelWidth >> levelIndex );
@@ -1061,7 +1155,7 @@ async function createRawTexture( container ) {
1061
1155
 
1062
1156
  );
1063
1157
 
1064
- } else if ( TYPE_MAP[ vkFormat ] === HalfFloatType ) {
1158
+ } else if ( TYPE_MAP[ vkFormat ] === HalfFloatType || TYPE_MAP[ vkFormat ] === UnsignedShortType ) {
1065
1159
 
1066
1160
  data = new Uint16Array(
1067
1161
 
@@ -1071,6 +1165,16 @@ async function createRawTexture( container ) {
1071
1165
 
1072
1166
  );
1073
1167
 
1168
+ } else if ( TYPE_MAP[ vkFormat ] === UnsignedInt5999Type || TYPE_MAP[ vkFormat ] === UnsignedInt101111Type ) {
1169
+
1170
+ data = new Uint32Array(
1171
+
1172
+ levelData.buffer,
1173
+ levelData.byteOffset,
1174
+ levelData.byteLength / Uint32Array.BYTES_PER_ELEMENT
1175
+
1176
+ );
1177
+
1074
1178
  } else {
1075
1179
 
1076
1180
  data = levelData;
@@ -1088,6 +1192,9 @@ async function createRawTexture( container ) {
1088
1192
 
1089
1193
  }
1090
1194
 
1195
+ // levelCount = 0 implies runtime-generated mipmaps.
1196
+ const useMipmaps = container.levelCount === 0 || mipmaps.length > 1;
1197
+
1091
1198
  let texture;
1092
1199
 
1093
1200
  if ( UNCOMPRESSED_FORMATS.has( FORMAT_MAP[ vkFormat ] ) ) {
@@ -1095,14 +1202,16 @@ async function createRawTexture( container ) {
1095
1202
  texture = container.pixelDepth === 0
1096
1203
  ? new DataTexture( mipmaps[ 0 ].data, container.pixelWidth, container.pixelHeight )
1097
1204
  : new Data3DTexture( mipmaps[ 0 ].data, container.pixelWidth, container.pixelHeight, container.pixelDepth );
1205
+ texture.minFilter = useMipmaps ? NearestMipmapNearestFilter : NearestFilter;
1206
+ texture.magFilter = NearestFilter;
1207
+ texture.generateMipmaps = container.levelCount === 0;
1098
1208
 
1099
1209
  } else {
1100
1210
 
1101
1211
  if ( container.pixelDepth > 0 ) throw new Error( 'THREE.KTX2Loader: Unsupported pixelDepth.' );
1102
1212
 
1103
1213
  texture = new CompressedTexture( mipmaps, container.pixelWidth, container.pixelHeight );
1104
-
1105
- texture.minFilter = mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter;
1214
+ texture.minFilter = useMipmaps ? LinearMipmapLinearFilter : LinearFilter;
1106
1215
  texture.magFilter = LinearFilter;
1107
1216
 
1108
1217
  }
@@ -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();
@@ -1015,21 +1015,9 @@ class LDrawParsedCache {
1015
1015
  faceNormal: null,
1016
1016
  vertices: [ v0, v1, v2 ],
1017
1017
  normals: [ null, null, null ],
1018
+ doubleSided: doubleSided,
1018
1019
  } );
1019
- totalFaces ++;
1020
-
1021
- if ( doubleSided === true ) {
1022
-
1023
- faces.push( {
1024
- material: material,
1025
- colorCode: colorCode,
1026
- faceNormal: null,
1027
- vertices: [ v2, v1, v0 ],
1028
- normals: [ null, null, null ],
1029
- } );
1030
- totalFaces ++;
1031
-
1032
- }
1020
+ totalFaces += doubleSided ? 2 : 1;
1033
1021
 
1034
1022
  break;
1035
1023
 
@@ -1065,21 +1053,9 @@ class LDrawParsedCache {
1065
1053
  faceNormal: null,
1066
1054
  vertices: [ v0, v1, v2, v3 ],
1067
1055
  normals: [ null, null, null, null ],
1056
+ doubleSided: doubleSided,
1068
1057
  } );
1069
- totalFaces += 2;
1070
-
1071
- if ( doubleSided === true ) {
1072
-
1073
- faces.push( {
1074
- material: material,
1075
- colorCode: colorCode,
1076
- faceNormal: null,
1077
- vertices: [ v3, v2, v1, v0 ],
1078
- normals: [ null, null, null, null ],
1079
- } );
1080
- totalFaces += 2;
1081
-
1082
- }
1058
+ totalFaces += doubleSided ? 4 : 2;
1083
1059
 
1084
1060
  break;
1085
1061
 
@@ -1550,13 +1526,22 @@ function createObject( loader, elements, elementSize, isConditionalSegments = fa
1550
1526
 
1551
1527
  }
1552
1528
 
1553
- for ( let j = 0, l = vertices.length; j < l; j ++ ) {
1529
+ const sideCount = elementSize === 3 && elem.doubleSided ? 2 : 1;
1530
+ const sideVertCount = vertices.length;
1531
+ const totalVertCount = sideVertCount * sideCount;
1554
1532
 
1555
- const v = vertices[ j ];
1556
- const index = offset + j * 3;
1557
- positions[ index + 0 ] = v.x;
1558
- positions[ index + 1 ] = v.y;
1559
- positions[ index + 2 ] = v.z;
1533
+ for ( let s = 0; s < sideCount; s ++ ) {
1534
+
1535
+ for ( let j = 0; j < sideVertCount; j ++ ) {
1536
+
1537
+ // front side: original order; back side: reversed winding
1538
+ const v = vertices[ s === 0 ? j : sideVertCount - 1 - j ];
1539
+ const index = offset + ( s * sideVertCount + j ) * 3;
1540
+ positions[ index + 0 ] = v.x;
1541
+ positions[ index + 1 ] = v.y;
1542
+ positions[ index + 2 ] = v.z;
1543
+
1544
+ }
1560
1545
 
1561
1546
  }
1562
1547
 
@@ -1589,20 +1574,27 @@ function createObject( loader, elements, elementSize, isConditionalSegments = fa
1589
1574
 
1590
1575
  }
1591
1576
 
1592
- for ( let j = 0, l = elemNormals.length; j < l; j ++ ) {
1577
+ const normalCount = elemNormals.length;
1578
+ for ( let s = 0; s < sideCount; s ++ ) {
1593
1579
 
1594
- // use face normal if a vertex normal is not provided
1595
- let n = elem.faceNormal;
1596
- if ( elemNormals[ j ] ) {
1580
+ const sign = s === 0 ? 1 : - 1;
1581
+ for ( let j = 0; j < normalCount; j ++ ) {
1597
1582
 
1598
- n = elemNormals[ j ].norm;
1583
+ // back side reuses the front normals in reversed order, with negated direction
1584
+ const idx = s === 0 ? j : normalCount - 1 - j;
1585
+ let n = elem.faceNormal;
1586
+ if ( elemNormals[ idx ] ) {
1599
1587
 
1600
- }
1588
+ n = elemNormals[ idx ].norm;
1601
1589
 
1602
- const index = offset + j * 3;
1603
- normals[ index + 0 ] = n.x;
1604
- normals[ index + 1 ] = n.y;
1605
- normals[ index + 2 ] = n.z;
1590
+ }
1591
+
1592
+ const index = offset + ( s * normalCount + j ) * 3;
1593
+ normals[ index + 0 ] = sign * n.x;
1594
+ normals[ index + 1 ] = sign * n.y;
1595
+ normals[ index + 2 ] = sign * n.z;
1596
+
1597
+ }
1606
1598
 
1607
1599
  }
1608
1600
 
@@ -1650,21 +1642,21 @@ function createObject( loader, elements, elementSize, isConditionalSegments = fa
1650
1642
 
1651
1643
  prevMaterial = elem.colorCode;
1652
1644
  index0 = offset / 3;
1653
- numGroupVerts = vertices.length;
1645
+ numGroupVerts = totalVertCount;
1654
1646
 
1655
1647
  } else {
1656
1648
 
1657
- numGroupVerts += vertices.length;
1649
+ numGroupVerts += totalVertCount;
1658
1650
 
1659
1651
  }
1660
1652
 
1661
- offset += 3 * vertices.length;
1653
+ offset += 3 * totalVertCount;
1662
1654
 
1663
1655
  }
1664
1656
 
1665
1657
  if ( numGroupVerts > 0 ) {
1666
1658
 
1667
- bufferGeometry.addGroup( index0, Infinity, materials.length - 1 );
1659
+ bufferGeometry.addGroup( index0, numGroupVerts, materials.length - 1 );
1668
1660
 
1669
1661
  }
1670
1662
 
@@ -1749,7 +1741,7 @@ function createObject( loader, elements, elementSize, isConditionalSegments = fa
1749
1741
  /**
1750
1742
  * A loader for the LDraw format.
1751
1743
  *
1752
- * [LDraw]{@link https://ldraw.org/} (LEGO Draw) is an [open format specification]{@link https://ldraw.org/article/218.html}
1744
+ * [LDraw](https://ldraw.org/} (LEGO Draw) is an [open format specification](https://ldraw.org/article/218.html)
1753
1745
  * for describing LEGO and other construction set 3D models.
1754
1746
  *
1755
1747
  * An LDraw asset (a text file usually with extension .ldr, .dat or .txt) can describe just a single construction
@@ -2400,7 +2392,6 @@ class LDrawLoader extends Loader {
2400
2392
 
2401
2393
  material.color.setStyle( fillColor, COLOR_SPACE_LDRAW );
2402
2394
  material.transparent = isTransparent;
2403
- material.premultipliedAlpha = true;
2404
2395
  material.opacity = alpha;
2405
2396
  material.depthWrite = ! isTransparent;
2406
2397
 
@@ -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();
@@ -23,7 +23,8 @@ import {
23
23
  RepeatWrapping,
24
24
  SRGBColorSpace,
25
25
  TextureLoader,
26
- Vector2
26
+ Vector2,
27
+ Vector3
27
28
  } from 'three';
28
29
 
29
30
  import { IFFParser } from './lwo/IFFParser.js';
@@ -36,8 +37,8 @@ let _lwoTree;
36
37
  * LWO3 and LWO2 formats are supported.
37
38
  *
38
39
  * 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}
40
+ * - [LWO3 format specification](https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo3.html)
41
+ * - [LWO2 format specification](https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo2.html)
41
42
  *
42
43
  * ```js
43
44
  * const loader = new LWOLoader();
@@ -185,8 +186,6 @@ class LWOTreeParser {
185
186
 
186
187
  } );
187
188
 
188
- this.applyPivots( finalMeshes );
189
-
190
189
  return finalMeshes;
191
190
 
192
191
  }
@@ -204,38 +203,14 @@ class LWOTreeParser {
204
203
  if ( layer.name ) mesh.name = layer.name;
205
204
  else mesh.name = this.defaultLayerName + '_layer_' + layer.number;
206
205
 
207
- mesh.userData.pivot = layer.pivot;
208
-
209
- return mesh;
210
-
211
- }
212
-
213
- // TODO: may need to be reversed in z to convert LWO to three.js coordinates
214
- applyPivots( meshes ) {
215
-
216
- meshes.forEach( function ( mesh ) {
217
-
218
- mesh.traverse( function ( child ) {
219
-
220
- const pivot = child.userData.pivot;
221
-
222
- child.position.x += pivot[ 0 ];
223
- child.position.y += pivot[ 1 ];
224
- child.position.z += pivot[ 2 ];
206
+ const pivot = layer.pivot;
207
+ if ( pivot[ 0 ] !== 0 || pivot[ 1 ] !== 0 || pivot[ 2 ] !== 0 ) {
225
208
 
226
- if ( child.parent ) {
209
+ mesh.pivot = new Vector3( pivot[ 0 ], pivot[ 1 ], pivot[ 2 ] );
227
210
 
228
- const parentPivot = child.parent.userData.pivot;
229
-
230
- child.position.x -= parentPivot[ 0 ];
231
- child.position.y -= parentPivot[ 1 ];
232
- child.position.z -= parentPivot[ 2 ];
233
-
234
- }
235
-
236
- } );
211
+ }
237
212
 
238
- } );
213
+ return mesh;
239
214
 
240
215
  }
241
216
 
@@ -813,13 +788,6 @@ class GeometryParser {
813
788
  this.parseUVs( geometry, layer );
814
789
  this.parseMorphTargets( geometry, layer );
815
790
 
816
- // TODO: z may need to be reversed to account for coordinate system change
817
- geometry.translate( - layer.pivot[ 0 ], - layer.pivot[ 1 ], - layer.pivot[ 2 ] );
818
-
819
- // let userData = geometry.userData;
820
- // geometry = geometry.toNonIndexed()
821
- // geometry.userData = userData;
822
-
823
791
  return geometry;
824
792
 
825
793
  }