@plastic-software/three 0.175.14 → 0.179.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 (572) hide show
  1. package/README.md +4 -4
  2. package/build/three.cjs +8402 -6787
  3. package/build/three.core.js +8007 -6688
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +397 -102
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +84 -27
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +6831 -2838
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +6648 -2838
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +1 -3
  14. package/examples/jsm/animation/AnimationClipCreator.js +1 -0
  15. package/examples/jsm/animation/CCDIKSolver.js +6 -3
  16. package/examples/jsm/capabilities/WebGL.js +1 -27
  17. package/examples/jsm/capabilities/WebGPU.js +2 -1
  18. package/examples/jsm/controls/ArcballControls.js +15 -4
  19. package/examples/jsm/controls/DragControls.js +1 -0
  20. package/examples/jsm/controls/FirstPersonControls.js +1 -0
  21. package/examples/jsm/controls/FlyControls.js +1 -0
  22. package/examples/jsm/controls/MapControls.js +1 -0
  23. package/examples/jsm/controls/OrbitControls.js +1 -0
  24. package/examples/jsm/controls/PointerLockControls.js +5 -3
  25. package/examples/jsm/controls/TrackballControls.js +1 -0
  26. package/examples/jsm/controls/TransformControls.js +62 -14
  27. package/examples/jsm/csm/CSM.js +2 -0
  28. package/examples/jsm/csm/CSMFrustum.js +2 -0
  29. package/examples/jsm/csm/CSMHelper.js +1 -0
  30. package/examples/jsm/csm/CSMShader.js +4 -1
  31. package/examples/jsm/csm/CSMShadowNode.js +22 -8
  32. package/examples/jsm/curves/CurveExtras.js +14 -0
  33. package/examples/jsm/curves/NURBSCurve.js +1 -0
  34. package/examples/jsm/curves/NURBSSurface.js +2 -0
  35. package/examples/jsm/curves/NURBSUtils.js +4 -1
  36. package/examples/jsm/curves/NURBSVolume.js +2 -0
  37. package/examples/jsm/effects/AnaglyphEffect.js +2 -0
  38. package/examples/jsm/effects/AsciiEffect.js +2 -0
  39. package/examples/jsm/effects/OutlineEffect.js +2 -0
  40. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
  41. package/examples/jsm/effects/StereoEffect.js +2 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +1 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +57 -38
  44. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  45. package/examples/jsm/exporters/EXRExporter.js +2 -0
  46. package/examples/jsm/exporters/GLTFExporter.js +7 -4
  47. package/examples/jsm/exporters/KTX2Exporter.js +2 -0
  48. package/examples/jsm/exporters/OBJExporter.js +3 -1
  49. package/examples/jsm/exporters/PLYExporter.js +4 -2
  50. package/examples/jsm/exporters/STLExporter.js +2 -0
  51. package/examples/jsm/exporters/USDZExporter.js +679 -300
  52. package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +1 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +1 -0
  55. package/examples/jsm/geometries/ParametricFunctions.js +4 -1
  56. package/examples/jsm/geometries/ParametricGeometry.js +1 -0
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
  58. package/examples/jsm/geometries/TeapotGeometry.js +1 -0
  59. package/examples/jsm/geometries/TextGeometry.js +1 -0
  60. package/examples/jsm/helpers/LightProbeHelper.js +1 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
  64. package/examples/jsm/helpers/RapierHelper.js +59 -0
  65. package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
  66. package/examples/jsm/helpers/TextureHelper.js +1 -0
  67. package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
  68. package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
  69. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
  70. package/examples/jsm/helpers/ViewHelper.js +1 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +11 -2
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -0
  73. package/examples/jsm/interactive/SelectionBox.js +2 -0
  74. package/examples/jsm/interactive/SelectionHelper.js +2 -0
  75. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  76. package/examples/jsm/lighting/TiledLighting.js +1 -0
  77. package/examples/jsm/lights/LightProbeGenerator.js +15 -3
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  79. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  80. package/examples/jsm/lines/Line2.js +1 -0
  81. package/examples/jsm/lines/LineGeometry.js +1 -0
  82. package/examples/jsm/lines/LineMaterial.js +4 -4
  83. package/examples/jsm/lines/LineSegments2.js +1 -0
  84. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  85. package/examples/jsm/lines/Wireframe.js +1 -0
  86. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  87. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  88. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  89. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  90. package/examples/jsm/loaders/3DMLoader.js +1 -0
  91. package/examples/jsm/loaders/3MFLoader.js +1 -0
  92. package/examples/jsm/loaders/AMFLoader.js +1 -0
  93. package/examples/jsm/loaders/BVHLoader.js +1 -0
  94. package/examples/jsm/loaders/ColladaLoader.js +6 -5
  95. package/examples/jsm/loaders/DDSLoader.js +1 -0
  96. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  97. package/examples/jsm/loaders/EXRLoader.js +211 -22
  98. package/examples/jsm/loaders/FBXLoader.js +25 -23
  99. package/examples/jsm/loaders/FontLoader.js +1 -0
  100. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  101. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  102. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  103. package/examples/jsm/loaders/IESLoader.js +1 -0
  104. package/examples/jsm/loaders/KMZLoader.js +1 -0
  105. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  106. package/examples/jsm/loaders/KTXLoader.js +1 -0
  107. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  108. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  110. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  111. package/examples/jsm/loaders/LWOLoader.js +1 -13
  112. package/examples/jsm/loaders/LottieLoader.js +15 -0
  113. package/examples/jsm/loaders/MD2Loader.js +1 -0
  114. package/examples/jsm/loaders/MDDLoader.js +1 -0
  115. package/examples/jsm/loaders/MTLLoader.js +4 -3
  116. package/examples/jsm/loaders/MaterialXLoader.js +213 -30
  117. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  118. package/examples/jsm/loaders/OBJLoader.js +1 -0
  119. package/examples/jsm/loaders/PCDLoader.js +122 -19
  120. package/examples/jsm/loaders/PDBLoader.js +1 -0
  121. package/examples/jsm/loaders/PLYLoader.js +1 -0
  122. package/examples/jsm/loaders/PVRLoader.js +1 -0
  123. package/examples/jsm/loaders/RGBELoader.js +1 -0
  124. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  125. package/examples/jsm/loaders/STLLoader.js +1 -0
  126. package/examples/jsm/loaders/SVGLoader.js +1 -0
  127. package/examples/jsm/loaders/TDSLoader.js +1 -0
  128. package/examples/jsm/loaders/TGALoader.js +1 -0
  129. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  130. package/examples/jsm/loaders/TTFLoader.js +14 -1
  131. package/examples/jsm/loaders/USDLoader.js +219 -0
  132. package/examples/jsm/loaders/USDZLoader.js +4 -891
  133. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  134. package/examples/jsm/loaders/VOXLoader.js +1 -0
  135. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  136. package/examples/jsm/loaders/VTKLoader.js +1 -0
  137. package/examples/jsm/loaders/XYZLoader.js +1 -0
  138. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  139. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  140. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  141. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  142. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  143. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  144. package/examples/jsm/math/Capsule.js +2 -0
  145. package/examples/jsm/math/ColorConverter.js +1 -0
  146. package/examples/jsm/math/ConvexHull.js +2 -0
  147. package/examples/jsm/math/ImprovedNoise.js +19 -14
  148. package/examples/jsm/math/Lut.js +2 -0
  149. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  150. package/examples/jsm/math/OBB.js +2 -0
  151. package/examples/jsm/math/Octree.js +20 -1
  152. package/examples/jsm/math/SimplexNoise.js +2 -0
  153. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  155. package/examples/jsm/misc/Gyroscope.js +1 -0
  156. package/examples/jsm/misc/MD2Character.js +2 -0
  157. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  158. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  159. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  160. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  161. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  162. package/examples/jsm/misc/RollerCoaster.js +5 -0
  163. package/examples/jsm/misc/TubePainter.js +1 -0
  164. package/examples/jsm/misc/Volume.js +2 -0
  165. package/examples/jsm/misc/VolumeSlice.js +1 -0
  166. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  167. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  168. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  169. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  170. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  171. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  172. package/examples/jsm/objects/Lensflare.js +3 -0
  173. package/examples/jsm/objects/LensflareMesh.js +4 -3
  174. package/examples/jsm/objects/MarchingCubes.js +2 -0
  175. package/examples/jsm/objects/Reflector.js +1 -0
  176. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  177. package/examples/jsm/objects/Refractor.js +1 -0
  178. package/examples/jsm/objects/ShadowMesh.js +1 -0
  179. package/examples/jsm/objects/Sky.js +2 -1
  180. package/examples/jsm/objects/SkyMesh.js +22 -19
  181. package/examples/jsm/objects/Water.js +1 -0
  182. package/examples/jsm/objects/Water2.js +1 -0
  183. package/examples/jsm/objects/Water2Mesh.js +3 -1
  184. package/examples/jsm/objects/WaterMesh.js +2 -1
  185. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  186. package/examples/jsm/physics/JoltPhysics.js +1 -0
  187. package/examples/jsm/physics/RapierPhysics.js +149 -13
  188. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  189. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  190. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  191. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  192. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  193. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  194. package/examples/jsm/postprocessing/EffectComposer.js +4 -2
  195. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  196. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  197. package/examples/jsm/postprocessing/GTAOPass.js +14 -12
  198. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  199. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  200. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  201. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  202. package/examples/jsm/postprocessing/OutlinePass.js +22 -19
  203. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  204. package/examples/jsm/postprocessing/Pass.js +3 -1
  205. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  206. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  207. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  208. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  209. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  210. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  211. package/examples/jsm/postprocessing/SSAOPass.js +12 -10
  212. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  213. package/examples/jsm/postprocessing/SavePass.js +2 -1
  214. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  215. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  216. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  217. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  218. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  219. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  220. package/examples/jsm/renderers/Projector.js +2 -0
  221. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  222. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  223. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  224. package/examples/jsm/shaders/BasicShader.js +4 -1
  225. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  226. package/examples/jsm/shaders/BlendShader.js +4 -1
  227. package/examples/jsm/shaders/BokehShader.js +4 -1
  228. package/examples/jsm/shaders/BokehShader2.js +4 -1
  229. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  230. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  231. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  232. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  233. package/examples/jsm/shaders/CopyShader.js +4 -1
  234. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  235. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  236. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  237. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  238. package/examples/jsm/shaders/ExposureShader.js +4 -1
  239. package/examples/jsm/shaders/FXAAShader.js +4 -1
  240. package/examples/jsm/shaders/FilmShader.js +4 -1
  241. package/examples/jsm/shaders/FocusShader.js +4 -1
  242. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  243. package/examples/jsm/shaders/GTAOShader.js +4 -1
  244. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  245. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  246. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  247. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  248. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  249. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  250. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  251. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  252. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  253. package/examples/jsm/shaders/MirrorShader.js +4 -1
  254. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  255. package/examples/jsm/shaders/OutputShader.js +4 -1
  256. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  257. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  258. package/examples/jsm/shaders/SAOShader.js +4 -1
  259. package/examples/jsm/shaders/SMAAShader.js +1 -0
  260. package/examples/jsm/shaders/SSAOShader.js +4 -1
  261. package/examples/jsm/shaders/SSRShader.js +1 -0
  262. package/examples/jsm/shaders/SepiaShader.js +4 -1
  263. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  264. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  265. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  266. package/examples/jsm/shaders/ToonShader.js +2 -1
  267. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  268. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
  269. package/examples/jsm/shaders/VelocityShader.js +4 -1
  270. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  271. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  272. package/examples/jsm/shaders/VignetteShader.js +4 -1
  273. package/examples/jsm/shaders/VolumeShader.js +5 -2
  274. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  275. package/examples/jsm/textures/FlakesTexture.js +2 -0
  276. package/examples/jsm/transpiler/AST.js +381 -30
  277. package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
  278. package/examples/jsm/transpiler/Linker.js +327 -0
  279. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  280. package/examples/jsm/transpiler/Transpiler.js +19 -1
  281. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  282. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  283. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  284. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  285. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  286. package/examples/jsm/tsl/display/BloomNode.js +9 -7
  287. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  288. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  289. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  290. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  291. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  292. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  293. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  294. package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
  295. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  296. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  297. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  298. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  299. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  300. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  301. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  302. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  303. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  304. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  305. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  306. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  307. package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
  308. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  309. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  310. package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
  311. package/examples/jsm/tsl/math/Bayer.js +4 -1
  312. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  313. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  314. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  315. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  316. package/examples/jsm/utils/CameraUtils.js +4 -1
  317. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  318. package/examples/jsm/utils/GeometryUtils.js +4 -1
  319. package/examples/jsm/utils/LDrawUtils.js +2 -0
  320. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  321. package/examples/jsm/utils/SceneUtils.js +4 -1
  322. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  323. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  324. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  325. package/examples/jsm/utils/SortUtils.js +4 -1
  326. package/examples/jsm/utils/UVsDebug.js +4 -1
  327. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  328. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  329. package/examples/jsm/utils/WorkerPool.js +2 -0
  330. package/examples/jsm/webxr/ARButton.js +1 -0
  331. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  332. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  333. package/examples/jsm/webxr/Text2D.js +4 -1
  334. package/examples/jsm/webxr/VRButton.js +1 -0
  335. package/examples/jsm/webxr/XRButton.js +1 -0
  336. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  338. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  339. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  340. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  341. package/examples/jsm/webxr/XRPlanes.js +1 -0
  342. package/package.json +6 -4
  343. package/src/Three.Core.js +2 -1
  344. package/src/Three.TSL.js +83 -26
  345. package/src/Three.WebGPU.Nodes.js +1 -0
  346. package/src/Three.WebGPU.js +3 -0
  347. package/src/animation/KeyframeTrack.js +1 -1
  348. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  350. package/src/audio/AudioListener.js +13 -10
  351. package/src/cameras/ArrayCamera.js +9 -1
  352. package/src/cameras/Camera.js +14 -0
  353. package/src/cameras/OrthographicCamera.js +1 -1
  354. package/src/cameras/PerspectiveCamera.js +1 -1
  355. package/src/constants.js +47 -20
  356. package/src/core/BufferAttribute.js +3 -3
  357. package/src/core/BufferGeometry.js +2 -5
  358. package/src/core/Clock.js +2 -8
  359. package/src/core/GLBufferAttribute.js +13 -1
  360. package/src/core/Object3D.js +23 -22
  361. package/src/core/RenderTarget.js +65 -21
  362. package/src/core/RenderTarget3D.js +1 -0
  363. package/{examples/jsm/misc → src/core}/Timer.js +4 -40
  364. package/src/extras/PMREMGenerator.js +11 -0
  365. package/src/extras/TextureUtils.js +1 -5
  366. package/src/extras/core/Curve.js +1 -1
  367. package/src/extras/core/Path.js +22 -22
  368. package/src/geometries/CapsuleGeometry.js +167 -17
  369. package/src/geometries/ExtrudeGeometry.js +39 -29
  370. package/src/helpers/ArrowHelper.js +2 -2
  371. package/src/helpers/CameraHelper.js +41 -11
  372. package/src/helpers/SkeletonHelper.js +36 -7
  373. package/src/lights/LightShadow.js +34 -7
  374. package/src/lights/PointLightShadow.js +1 -1
  375. package/src/lights/SpotLightShadow.js +9 -1
  376. package/src/lights/webgpu/ProjectorLight.js +46 -0
  377. package/src/loaders/BufferGeometryLoader.js +1 -10
  378. package/src/loaders/FileLoader.js +27 -4
  379. package/src/loaders/ImageBitmapLoader.js +48 -9
  380. package/src/loaders/ImageLoader.js +55 -8
  381. package/src/loaders/Loader.js +14 -0
  382. package/src/loaders/LoadingManager.js +23 -0
  383. package/src/loaders/ObjectLoader.js +44 -16
  384. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  385. package/src/materials/Material.js +1 -7
  386. package/src/materials/MeshBasicMaterial.js +1 -1
  387. package/src/materials/nodes/Line2NodeMaterial.js +0 -8
  388. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  389. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  390. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  391. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  392. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  393. package/src/materials/nodes/NodeMaterial.js +106 -20
  394. package/src/materials/nodes/PointsNodeMaterial.js +5 -0
  395. package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
  396. package/src/math/Box3.js +28 -0
  397. package/src/math/Color.js +7 -7
  398. package/src/math/ColorManagement.js +22 -3
  399. package/src/math/Frustum.js +25 -9
  400. package/src/math/FrustumArray.js +258 -0
  401. package/src/math/Line3.js +129 -2
  402. package/src/math/Matrix4.js +48 -27
  403. package/src/math/Quaternion.js +1 -1
  404. package/src/math/Ray.js +2 -0
  405. package/src/math/Sphere.js +28 -0
  406. package/src/math/Spherical.js +2 -2
  407. package/src/nodes/Nodes.js +3 -3
  408. package/src/nodes/TSL.js +6 -3
  409. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  410. package/src/nodes/accessors/Bitangent.js +54 -26
  411. package/src/nodes/accessors/Camera.js +40 -13
  412. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  413. package/src/nodes/accessors/InstanceNode.js +5 -4
  414. package/src/nodes/accessors/Lights.js +2 -2
  415. package/src/nodes/accessors/MaterialNode.js +4 -0
  416. package/src/nodes/accessors/ModelNode.js +1 -1
  417. package/src/nodes/accessors/Normal.js +110 -24
  418. package/src/nodes/accessors/Object3DNode.js +7 -8
  419. package/src/nodes/accessors/Position.js +14 -4
  420. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  421. package/src/nodes/accessors/ReferenceNode.js +19 -4
  422. package/src/nodes/accessors/ReflectVector.js +3 -3
  423. package/src/nodes/accessors/SceneNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +3 -2
  425. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  426. package/src/nodes/accessors/StorageTextureNode.js +15 -4
  427. package/src/nodes/accessors/Tangent.js +25 -17
  428. package/src/nodes/accessors/TangentUtils.js +46 -0
  429. package/src/nodes/accessors/TextureBicubic.js +21 -3
  430. package/src/nodes/accessors/TextureNode.js +71 -8
  431. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  432. package/src/nodes/accessors/VelocityNode.js +1 -0
  433. package/src/nodes/accessors/VertexColorNode.js +4 -4
  434. package/src/nodes/code/CodeNode.js +8 -11
  435. package/src/nodes/core/ArrayNode.js +12 -0
  436. package/src/nodes/core/AssignNode.js +30 -5
  437. package/src/nodes/core/AttributeNode.js +2 -2
  438. package/src/nodes/core/ContextNode.js +27 -4
  439. package/src/nodes/core/Node.js +83 -22
  440. package/src/nodes/core/NodeBuilder.js +273 -49
  441. package/src/nodes/core/NodeUtils.js +46 -1
  442. package/src/nodes/core/NodeVarying.js +19 -1
  443. package/src/nodes/core/PropertyNode.js +8 -12
  444. package/src/nodes/core/StackNode.js +171 -26
  445. package/src/nodes/core/StructTypeNode.js +26 -4
  446. package/src/nodes/core/SubBuildNode.js +89 -0
  447. package/src/nodes/core/UniformNode.js +63 -5
  448. package/src/nodes/core/VarNode.js +102 -4
  449. package/src/nodes/core/VaryingNode.js +45 -24
  450. package/src/nodes/display/BlendModes.js +42 -1
  451. package/src/nodes/display/ColorSpaceNode.js +4 -27
  452. package/src/nodes/display/FrontFacingNode.js +34 -2
  453. package/src/nodes/display/NormalMapNode.js +19 -50
  454. package/src/nodes/display/PassNode.js +165 -20
  455. package/src/nodes/display/ScreenNode.js +0 -26
  456. package/src/nodes/display/ViewportTextureNode.js +67 -7
  457. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  458. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  459. package/src/nodes/functions/PhongLightingModel.js +3 -3
  460. package/src/nodes/functions/PhysicalLightingModel.js +16 -16
  461. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  462. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  463. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  464. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  465. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  466. package/src/nodes/gpgpu/ComputeNode.js +68 -24
  467. package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
  468. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  469. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  470. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  471. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  472. package/src/nodes/lighting/LightsNode.js +29 -11
  473. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  474. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  475. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  476. package/src/nodes/lighting/ShadowNode.js +174 -242
  477. package/src/nodes/lighting/SpotLightNode.js +44 -7
  478. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  479. package/src/nodes/materialx/lib/mx_noise.js +166 -2
  480. package/src/nodes/math/ConditionalNode.js +1 -20
  481. package/src/nodes/math/MathNode.js +146 -75
  482. package/src/nodes/math/OperatorNode.js +129 -119
  483. package/src/nodes/shapes/Shapes.js +5 -4
  484. package/src/nodes/tsl/TSLBase.js +1 -0
  485. package/src/nodes/tsl/TSLCore.js +222 -72
  486. package/src/nodes/utils/DebugNode.js +16 -4
  487. package/src/nodes/utils/Discard.js +2 -2
  488. package/src/nodes/utils/EquirectUV.js +27 -0
  489. package/src/nodes/utils/EventNode.js +83 -0
  490. package/src/nodes/utils/LoopNode.js +64 -34
  491. package/src/nodes/utils/MatcapUV.js +22 -0
  492. package/src/nodes/utils/RTTNode.js +22 -5
  493. package/src/nodes/utils/ReflectorNode.js +77 -7
  494. package/src/nodes/utils/SampleNode.js +81 -0
  495. package/src/nodes/utils/TriplanarTextures.js +65 -0
  496. package/src/objects/BatchedMesh.js +20 -6
  497. package/src/objects/Mesh.js +9 -0
  498. package/src/objects/Skeleton.js +1 -1
  499. package/src/objects/Sprite.js +9 -0
  500. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  501. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  502. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  503. package/src/renderers/WebGLRenderer.js +45 -32
  504. package/src/renderers/common/Animation.js +2 -2
  505. package/src/renderers/common/Background.js +13 -2
  506. package/src/renderers/common/Bindings.js +19 -18
  507. package/src/renderers/common/Color4.js +2 -2
  508. package/src/renderers/common/CubeRenderTarget.js +1 -1
  509. package/src/renderers/common/PostProcessing.js +60 -5
  510. package/src/renderers/common/RenderList.js +0 -4
  511. package/src/renderers/common/RenderObject.js +80 -4
  512. package/src/renderers/common/Renderer.js +133 -22
  513. package/src/renderers/common/SampledTexture.js +3 -71
  514. package/src/renderers/common/Sampler.js +79 -0
  515. package/src/renderers/common/Storage3DTexture.js +100 -0
  516. package/src/renderers/common/StorageArrayTexture.js +84 -0
  517. package/src/renderers/common/StorageTexture.js +19 -0
  518. package/src/renderers/common/Textures.js +34 -24
  519. package/src/renderers/common/TimestampQueryPool.js +1 -0
  520. package/src/renderers/common/Uniform.js +1 -1
  521. package/src/renderers/common/UniformsGroup.js +14 -18
  522. package/src/renderers/common/XRManager.js +183 -35
  523. package/src/renderers/common/XRRenderTarget.js +21 -4
  524. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  525. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  526. package/src/renderers/common/nodes/Nodes.js +13 -3
  527. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  528. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
  529. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  530. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  531. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  532. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  533. package/src/renderers/webgl/WebGLMaterials.js +6 -6
  534. package/src/renderers/webgl/WebGLProgram.js +22 -16
  535. package/src/renderers/webgl/WebGLPrograms.js +8 -6
  536. package/src/renderers/webgl/WebGLShadowMap.js +14 -3
  537. package/src/renderers/webgl/WebGLState.js +4 -4
  538. package/src/renderers/webgl/WebGLTextures.js +163 -11
  539. package/src/renderers/webgl/WebGLUtils.js +1 -3
  540. package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
  541. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
  542. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  543. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  544. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  545. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  546. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  547. package/src/renderers/webgpu/WebGPUBackend.js +505 -143
  548. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  549. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  550. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  551. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
  552. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  553. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  554. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
  555. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  556. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
  557. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
  558. package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
  559. package/src/renderers/webxr/WebXRController.js +1 -1
  560. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  561. package/src/renderers/webxr/WebXRManager.js +70 -9
  562. package/src/textures/DepthTexture.js +6 -10
  563. package/src/textures/ExternalTexture.js +45 -0
  564. package/src/textures/FramebufferTexture.js +2 -2
  565. package/src/textures/Source.js +32 -0
  566. package/src/textures/Texture.js +118 -1
  567. package/src/textures/VideoTexture.js +31 -3
  568. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  569. package/src/core/RenderTargetArray.js +0 -40
  570. package/src/nodes/utils/EquirectUVNode.js +0 -65
  571. package/src/nodes/utils/MatcapUVNode.js +0 -49
  572. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -1,5 +1,4 @@
1
1
  import { Sphere } from '../math/Sphere.js';
2
- import { Vector3 } from '../math/Vector3.js';
3
2
  import { BufferAttribute } from '../core/BufferAttribute.js';
4
3
  import { BufferGeometry } from '../core/BufferGeometry.js';
5
4
  import { FileLoader } from './FileLoader.js';
@@ -227,15 +226,7 @@ class BufferGeometryLoader extends Loader {
227
226
 
228
227
  if ( boundingSphere !== undefined ) {
229
228
 
230
- const center = new Vector3();
231
-
232
- if ( boundingSphere.center !== undefined ) {
233
-
234
- center.fromArray( boundingSphere.center );
235
-
236
- }
237
-
238
- geometry.boundingSphere = new Sphere( center, boundingSphere.radius );
229
+ geometry.boundingSphere = new Sphere().fromJSON( boundingSphere );
239
230
 
240
231
  }
241
232
 
@@ -41,7 +41,8 @@ class FileLoader extends Loader {
41
41
  super( manager );
42
42
 
43
43
  /**
44
- * The expected mime type.
44
+ * The expected mime type. Valid values can be found
45
+ * [here]{@link hhttps://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#mimetype}
45
46
  *
46
47
  * @type {string}
47
48
  */
@@ -55,6 +56,14 @@ class FileLoader extends Loader {
55
56
  */
56
57
  this.responseType = '';
57
58
 
59
+ /**
60
+ * Used for aborting requests.
61
+ *
62
+ * @private
63
+ * @type {AbortController}
64
+ */
65
+ this._abortController = new AbortController();
66
+
58
67
  }
59
68
 
60
69
  /**
@@ -74,7 +83,7 @@ class FileLoader extends Loader {
74
83
 
75
84
  url = this.manager.resolveURL( url );
76
85
 
77
- const cached = Cache.get( url );
86
+ const cached = Cache.get( `file:${url}` );
78
87
 
79
88
  if ( cached !== undefined ) {
80
89
 
@@ -121,7 +130,7 @@ class FileLoader extends Loader {
121
130
  const req = new Request( url, {
122
131
  headers: new Headers( this.requestHeader ),
123
132
  credentials: this.withCredentials ? 'include' : 'same-origin',
124
- // An abort controller could be added within a future PR
133
+ signal: ( typeof AbortSignal.any === 'function' ) ? AbortSignal.any( [ this._abortController.signal, this.manager.abortController.signal ] ) : this._abortController.signal
125
134
  } );
126
135
 
127
136
  // record states ( avoid data race )
@@ -263,7 +272,7 @@ class FileLoader extends Loader {
263
272
 
264
273
  // Add to cache only on HTTP success, so that we do not cache
265
274
  // error response bodies as proper responses to requests.
266
- Cache.add( url, data );
275
+ Cache.add( `file:${url}`, data );
267
276
 
268
277
  const callbacks = loading[ url ];
269
278
  delete loading[ url ];
@@ -338,6 +347,20 @@ class FileLoader extends Loader {
338
347
 
339
348
  }
340
349
 
350
+ /**
351
+ * Aborts ongoing fetch requests.
352
+ *
353
+ * @return {FileLoader} A reference to this instance.
354
+ */
355
+ abort() {
356
+
357
+ this._abortController.abort();
358
+ this._abortController = new AbortController();
359
+
360
+ return this;
361
+
362
+ }
363
+
341
364
  }
342
365
 
343
366
 
@@ -1,6 +1,8 @@
1
1
  import { Cache } from './Cache.js';
2
2
  import { Loader } from './Loader.js';
3
3
 
4
+ const _errorMap = new WeakMap();
5
+
4
6
  /**
5
7
  * A loader for loading images as an [ImageBitmap]{@link https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap}.
6
8
  * An `ImageBitmap` provides an asynchronous and resource efficient pathway to prepare
@@ -11,7 +13,7 @@ import { Loader } from './Loader.js';
11
13
  *
12
14
  * You need to set the equivalent options via {@link ImageBitmapLoader#setOptions} instead.
13
15
  *
14
- * Also note that unlike {@link FileLoader}, this loader does not avoid multiple concurrent requests to the same URL.
16
+ * Also note that unlike {@link FileLoader}, this loader avoids multiple concurrent requests to the same URL only if `Cache` is enabled.
15
17
  *
16
18
  * ```js
17
19
  * const loader = new THREE.ImageBitmapLoader();
@@ -64,6 +66,14 @@ class ImageBitmapLoader extends Loader {
64
66
  */
65
67
  this.options = { premultiplyAlpha: 'none' };
66
68
 
69
+ /**
70
+ * Used for aborting requests.
71
+ *
72
+ * @private
73
+ * @type {AbortController}
74
+ */
75
+ this._abortController = new AbortController();
76
+
67
77
  }
68
78
 
69
79
  /**
@@ -100,7 +110,7 @@ class ImageBitmapLoader extends Loader {
100
110
 
101
111
  const scope = this;
102
112
 
103
- const cached = Cache.get( url );
113
+ const cached = Cache.get( `image-bitmap:${url}` );
104
114
 
105
115
  if ( cached !== undefined ) {
106
116
 
@@ -111,15 +121,27 @@ class ImageBitmapLoader extends Loader {
111
121
 
112
122
  cached.then( imageBitmap => {
113
123
 
114
- if ( onLoad ) onLoad( imageBitmap );
124
+ // check if there is an error for the cached promise
125
+
126
+ if ( _errorMap.has( cached ) === true ) {
115
127
 
116
- scope.manager.itemEnd( url );
128
+ if ( onError ) onError( _errorMap.get( cached ) );
117
129
 
118
- } ).catch( e => {
130
+ scope.manager.itemError( url );
131
+ scope.manager.itemEnd( url );
119
132
 
120
- if ( onError ) onError( e );
133
+ } else {
134
+
135
+ if ( onLoad ) onLoad( imageBitmap );
136
+
137
+ scope.manager.itemEnd( url );
138
+
139
+ return imageBitmap;
140
+
141
+ }
121
142
 
122
143
  } );
144
+
123
145
  return;
124
146
 
125
147
  }
@@ -140,6 +162,7 @@ class ImageBitmapLoader extends Loader {
140
162
  const fetchOptions = {};
141
163
  fetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';
142
164
  fetchOptions.headers = this.requestHeader;
165
+ fetchOptions.signal = ( typeof AbortSignal.any === 'function' ) ? AbortSignal.any( [ this._abortController.signal, this.manager.abortController.signal ] ) : this._abortController.signal;
143
166
 
144
167
  const promise = fetch( url, fetchOptions ).then( function ( res ) {
145
168
 
@@ -151,7 +174,7 @@ class ImageBitmapLoader extends Loader {
151
174
 
152
175
  } ).then( function ( imageBitmap ) {
153
176
 
154
- Cache.add( url, imageBitmap );
177
+ Cache.add( `image-bitmap:${url}`, imageBitmap );
155
178
 
156
179
  if ( onLoad ) onLoad( imageBitmap );
157
180
 
@@ -163,18 +186,34 @@ class ImageBitmapLoader extends Loader {
163
186
 
164
187
  if ( onError ) onError( e );
165
188
 
166
- Cache.remove( url );
189
+ _errorMap.set( promise, e );
190
+
191
+ Cache.remove( `image-bitmap:${url}` );
167
192
 
168
193
  scope.manager.itemError( url );
169
194
  scope.manager.itemEnd( url );
170
195
 
171
196
  } );
172
197
 
173
- Cache.add( url, promise );
198
+ Cache.add( `image-bitmap:${url}`, promise );
174
199
  scope.manager.itemStart( url );
175
200
 
176
201
  }
177
202
 
203
+ /**
204
+ * Aborts ongoing fetch requests.
205
+ *
206
+ * @return {ImageBitmapLoader} A reference to this instance.
207
+ */
208
+ abort() {
209
+
210
+ this._abortController.abort();
211
+ this._abortController = new AbortController();
212
+
213
+ return this;
214
+
215
+ }
216
+
178
217
  }
179
218
 
180
219
  export { ImageBitmapLoader };
@@ -2,6 +2,8 @@ import { Cache } from './Cache.js';
2
2
  import { Loader } from './Loader.js';
3
3
  import { createElementNS } from '../utils.js';
4
4
 
5
+ const _loading = new WeakMap();
6
+
5
7
  /**
6
8
  * A loader for loading images. The class loads images with the HTML `Image` API.
7
9
  *
@@ -48,19 +50,36 @@ class ImageLoader extends Loader {
48
50
 
49
51
  const scope = this;
50
52
 
51
- const cached = Cache.get( url );
53
+ const cached = Cache.get( `image:${url}` );
52
54
 
53
55
  if ( cached !== undefined ) {
54
56
 
55
- scope.manager.itemStart( url );
57
+ if ( cached.complete === true ) {
58
+
59
+ scope.manager.itemStart( url );
60
+
61
+ setTimeout( function () {
62
+
63
+ if ( onLoad ) onLoad( cached );
64
+
65
+ scope.manager.itemEnd( url );
66
+
67
+ }, 0 );
56
68
 
57
- setTimeout( function () {
69
+ } else {
58
70
 
59
- if ( onLoad ) onLoad( cached );
71
+ let arr = _loading.get( cached );
60
72
 
61
- scope.manager.itemEnd( url );
73
+ if ( arr === undefined ) {
62
74
 
63
- }, 0 );
75
+ arr = [];
76
+ _loading.set( cached, arr );
77
+
78
+ }
79
+
80
+ arr.push( { onLoad, onError } );
81
+
82
+ }
64
83
 
65
84
  return cached;
66
85
 
@@ -72,10 +91,21 @@ class ImageLoader extends Loader {
72
91
 
73
92
  removeEventListeners();
74
93
 
75
- Cache.add( url, this );
76
-
77
94
  if ( onLoad ) onLoad( this );
78
95
 
96
+ //
97
+
98
+ const callbacks = _loading.get( this ) || [];
99
+
100
+ for ( let i = 0; i < callbacks.length; i ++ ) {
101
+
102
+ const callback = callbacks[ i ];
103
+ if ( callback.onLoad ) callback.onLoad( this );
104
+
105
+ }
106
+
107
+ _loading.delete( this );
108
+
79
109
  scope.manager.itemEnd( url );
80
110
 
81
111
  }
@@ -86,6 +116,22 @@ class ImageLoader extends Loader {
86
116
 
87
117
  if ( onError ) onError( event );
88
118
 
119
+ Cache.remove( `image:${url}` );
120
+
121
+ //
122
+
123
+ const callbacks = _loading.get( this ) || [];
124
+
125
+ for ( let i = 0; i < callbacks.length; i ++ ) {
126
+
127
+ const callback = callbacks[ i ];
128
+ if ( callback.onError ) callback.onError( event );
129
+
130
+ }
131
+
132
+ _loading.delete( this );
133
+
134
+
89
135
  scope.manager.itemError( url );
90
136
  scope.manager.itemEnd( url );
91
137
 
@@ -107,6 +153,7 @@ class ImageLoader extends Loader {
107
153
 
108
154
  }
109
155
 
156
+ Cache.add( `image:${url}`, image );
110
157
  scope.manager.itemStart( url );
111
158
 
112
159
  image.src = url;
@@ -67,6 +67,7 @@ class Loader {
67
67
  * This method needs to be implemented by all concrete loaders. It holds the
68
68
  * logic for loading assets from the backend.
69
69
  *
70
+ * @abstract
70
71
  * @param {string} url - The path/URL of the file to be loaded.
71
72
  * @param {Function} onLoad - Executed when the loading process has been finished.
72
73
  * @param {onProgressCallback} [onProgress] - Executed while the loading is in progress.
@@ -97,6 +98,7 @@ class Loader {
97
98
  * This method needs to be implemented by all concrete loaders. It holds the
98
99
  * logic for parsing the asset into three.js entities.
99
100
  *
101
+ * @abstract
100
102
  * @param {any} data - The data to parse.
101
103
  */
102
104
  parse( /* data */ ) {}
@@ -171,6 +173,18 @@ class Loader {
171
173
 
172
174
  }
173
175
 
176
+ /**
177
+ * This method can be implemented in loaders for aborting ongoing requests.
178
+ *
179
+ * @abstract
180
+ * @return {Loader} A reference to this instance.
181
+ */
182
+ abort() {
183
+
184
+ return this;
185
+
186
+ }
187
+
174
188
  }
175
189
 
176
190
  /**
@@ -69,6 +69,13 @@ class LoadingManager {
69
69
  */
70
70
  this.onError = onError;
71
71
 
72
+ /**
73
+ * Used for aborting ongoing requests in loaders using this manager.
74
+ *
75
+ * @type {AbortController}
76
+ */
77
+ this.abortController = new AbortController();
78
+
72
79
  /**
73
80
  * This should be called by any loader using the manager when the loader
74
81
  * starts loading an item.
@@ -269,6 +276,22 @@ class LoadingManager {
269
276
 
270
277
  };
271
278
 
279
+ /**
280
+ * Can be used to abort ongoing loading requests in loaders using this manager.
281
+ * The abort only works if the loaders implement {@link Loader#abort} and `AbortSignal.any()`
282
+ * is supported in the browser.
283
+ *
284
+ * @return {LoadingManager} A reference to this loading manager.
285
+ */
286
+ this.abort = function () {
287
+
288
+ this.abortController.abort();
289
+ this.abortController = new AbortController();
290
+
291
+ return this;
292
+
293
+ };
294
+
272
295
  }
273
296
 
274
297
  }
@@ -975,37 +975,65 @@ class ObjectLoader extends Loader {
975
975
  object._drawRanges = data.drawRanges;
976
976
  object._reservedRanges = data.reservedRanges;
977
977
 
978
- object._visibility = data.visibility;
979
- object._active = data.active;
980
- object._bounds = data.bounds.map( bound => {
978
+ object._geometryInfo = data.geometryInfo.map( info => {
981
979
 
982
- const box = new Box3();
983
- box.min.fromArray( bound.boxMin );
984
- box.max.fromArray( bound.boxMax );
980
+ let box = null;
981
+ let sphere = null;
982
+ if ( info.boundingBox !== undefined ) {
985
983
 
986
- const sphere = new Sphere();
987
- sphere.radius = bound.sphereRadius;
988
- sphere.center.fromArray( bound.sphereCenter );
984
+ box = new Box3().fromJSON( info.boundingBox );
989
985
 
990
- return {
991
- boxInitialized: bound.boxInitialized,
992
- box: box,
986
+ }
987
+
988
+ if ( info.boundingSphere !== undefined ) {
989
+
990
+ sphere = new Sphere().fromJSON( info.boundingSphere );
991
+
992
+ }
993
993
 
994
- sphereInitialized: bound.sphereInitialized,
995
- sphere: sphere
994
+ return {
995
+ ...info,
996
+ boundingBox: box,
997
+ boundingSphere: sphere
996
998
  };
997
999
 
998
1000
  } );
1001
+ object._instanceInfo = data.instanceInfo;
1002
+
1003
+ object._availableInstanceIds = data._availableInstanceIds;
1004
+ object._availableGeometryIds = data._availableGeometryIds;
1005
+
1006
+ object._nextIndexStart = data.nextIndexStart;
1007
+ object._nextVertexStart = data.nextVertexStart;
1008
+ object._geometryCount = data.geometryCount;
999
1009
 
1000
1010
  object._maxInstanceCount = data.maxInstanceCount;
1001
1011
  object._maxVertexCount = data.maxVertexCount;
1002
1012
  object._maxIndexCount = data.maxIndexCount;
1003
1013
 
1004
1014
  object._geometryInitialized = data.geometryInitialized;
1005
- object._geometryCount = data.geometryCount;
1006
1015
 
1007
1016
  object._matricesTexture = getTexture( data.matricesTexture.uuid );
1008
- if ( data.colorsTexture !== undefined ) object._colorsTexture = getTexture( data.colorsTexture.uuid );
1017
+
1018
+ object._indirectTexture = getTexture( data.indirectTexture.uuid );
1019
+
1020
+ if ( data.colorsTexture !== undefined ) {
1021
+
1022
+ object._colorsTexture = getTexture( data.colorsTexture.uuid );
1023
+
1024
+ }
1025
+
1026
+ if ( data.boundingSphere !== undefined ) {
1027
+
1028
+ object.boundingSphere = new Sphere().fromJSON( data.boundingSphere );
1029
+
1030
+ }
1031
+
1032
+ if ( data.boundingBox !== undefined ) {
1033
+
1034
+ object.boundingBox = new Box3().fromJSON( data.boundingBox );
1035
+
1036
+ }
1009
1037
 
1010
1038
  break;
1011
1039
 
@@ -38,7 +38,7 @@ class NodeObjectLoader extends ObjectLoader {
38
38
  * A reference to hold the `nodes` JSON property.
39
39
  *
40
40
  * @private
41
- * @type {?Object}
41
+ * @type {?Object[]}
42
42
  */
43
43
  this._nodesJSON = null;
44
44
 
@@ -92,7 +92,7 @@ class NodeObjectLoader extends ObjectLoader {
92
92
  /**
93
93
  * Parses the node objects from the given JSON and textures.
94
94
  *
95
- * @param {Object} json - The JSON definition
95
+ * @param {Object[]} json - The JSON definition
96
96
  * @param {Object<string,Texture>} textures - The texture library.
97
97
  * @return {Object<string,Node>}. The parsed nodes.
98
98
  */
@@ -615,7 +615,7 @@ class Material extends EventDispatcher {
615
615
 
616
616
  const data = {
617
617
  metadata: {
618
- version: 4.6,
618
+ version: 4.7,
619
619
  type: 'Material',
620
620
  generator: 'Material.toJSON'
621
621
  }
@@ -997,12 +997,6 @@ class Material extends EventDispatcher {
997
997
 
998
998
  }
999
999
 
1000
- onBuild( /* shaderobject, renderer */ ) {
1001
-
1002
- console.warn( 'Material: onBuild() has been removed.' ); // @deprecated, r166
1003
-
1004
- }
1005
-
1006
1000
  }
1007
1001
 
1008
1002
  export { Material };
@@ -42,7 +42,7 @@ class MeshBasicMaterial extends Material {
42
42
  * @type {Color}
43
43
  * @default (1,1,1)
44
44
  */
45
- this.color = new Color( 0xffffff ); // emissive
45
+ this.color = new Color( 0xffffff ); // diffuse
46
46
 
47
47
  /**
48
48
  * The color map. May optionally include an alpha channel, typically combined
@@ -66,14 +66,6 @@ class Line2NodeMaterial extends NodeMaterial {
66
66
  */
67
67
  this.dashOffset = 0;
68
68
 
69
- /**
70
- * The line width.
71
- *
72
- * @type {number}
73
- * @default 0
74
- */
75
- this.lineWidth = 1;
76
-
77
69
  /**
78
70
  * Defines the lines color.
79
71
  *
@@ -3,8 +3,9 @@ import { materialLightMap } from '../../nodes/accessors/MaterialNode.js';
3
3
  import BasicEnvironmentNode from '../../nodes/lighting/BasicEnvironmentNode.js';
4
4
  import BasicLightMapNode from '../../nodes/lighting/BasicLightMapNode.js';
5
5
  import BasicLightingModel from '../../nodes/functions/BasicLightingModel.js';
6
- import { normalView } from '../../nodes/accessors/Normal.js';
6
+ import { normalViewGeometry } from '../../nodes/accessors/Normal.js';
7
7
  import { diffuseColor } from '../../nodes/core/PropertyNode.js';
8
+ import { directionToFaceDirection } from '../../nodes/display/FrontFacingNode.js';
8
9
 
9
10
  import { MeshBasicMaterial } from '../MeshBasicMaterial.js';
10
11
 
@@ -59,13 +60,13 @@ class MeshBasicNodeMaterial extends NodeMaterial {
59
60
 
60
61
  /**
61
62
  * Basic materials are not affected by normal and bump maps so we
62
- * return by default {@link normalView}.
63
+ * return by default {@link normalViewGeometry}.
63
64
  *
64
65
  * @return {Node<vec3>} The normal node.
65
66
  */
66
67
  setupNormal() {
67
68
 
68
- return normalView; // see #28839
69
+ return directionToFaceDirection( normalViewGeometry ); // see #28839
69
70
 
70
71
  }
71
72
 
@@ -3,7 +3,7 @@ import { materialReference } from '../../nodes/accessors/MaterialReferenceNode.j
3
3
  import { diffuseColor } from '../../nodes/core/PropertyNode.js';
4
4
  import { vec3 } from '../../nodes/tsl/TSLBase.js';
5
5
  import { mix } from '../../nodes/math/MathNode.js';
6
- import { matcapUV } from '../../nodes/utils/MatcapUVNode.js';
6
+ import { matcapUV } from '../../nodes/utils/MatcapUV.js';
7
7
 
8
8
  import { MeshMatcapMaterial } from '../MeshMatcapMaterial.js';
9
9
 
@@ -2,7 +2,7 @@ import NodeMaterial from './NodeMaterial.js';
2
2
  import { diffuseColor } from '../../nodes/core/PropertyNode.js';
3
3
  import { directionToColor } from '../../nodes/utils/Packing.js';
4
4
  import { materialOpacity } from '../../nodes/accessors/MaterialNode.js';
5
- import { transformedNormalView } from '../../nodes/accessors/Normal.js';
5
+ import { normalView } from '../../nodes/accessors/Normal.js';
6
6
  import { colorSpaceToWorking } from '../../nodes/display/ColorSpaceNode.js';
7
7
  import { float, vec4 } from '../../nodes/tsl/TSLBase.js';
8
8
  import { SRGBColorSpace } from '../../constants.js';
@@ -58,7 +58,7 @@ class MeshNormalNodeMaterial extends NodeMaterial {
58
58
 
59
59
  // By convention, a normal packed to RGB is in sRGB color space. Convert it to working color space.
60
60
 
61
- diffuseColor.assign( colorSpaceToWorking( vec4( directionToColor( transformedNormalView ), opacityNode ), SRGBColorSpace ) );
61
+ diffuseColor.assign( colorSpaceToWorking( vec4( directionToColor( normalView ), opacityNode ), SRGBColorSpace ) );
62
62
 
63
63
  }
64
64
 
@@ -6,6 +6,7 @@ import { TBNViewMatrix } from '../../nodes/accessors/AccessorsUtils.js';
6
6
  import PhysicalLightingModel from '../../nodes/functions/PhysicalLightingModel.js';
7
7
  import MeshStandardNodeMaterial from './MeshStandardNodeMaterial.js';
8
8
  import { mix, pow2, min } from '../../nodes/math/MathNode.js';
9
+ import { subBuild } from '../../nodes/core/SubBuildNode.js';
9
10
 
10
11
  import { MeshPhysicalMaterial } from '../MeshPhysicalMaterial.js';
11
12
 
@@ -478,7 +479,7 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
478
479
 
479
480
  setup( builder ) {
480
481
 
481
- builder.context.setupClearcoatNormal = () => this.setupClearcoatNormal( builder );
482
+ builder.context.setupClearcoatNormal = () => subBuild( this.setupClearcoatNormal( builder ), 'NORMAL', 'vec3' );
482
483
 
483
484
  super.setup( builder );
484
485
 
@@ -1,6 +1,6 @@
1
1
  import MeshPhysicalNodeMaterial from './MeshPhysicalNodeMaterial.js';
2
2
  import PhysicalLightingModel from '../../nodes/functions/PhysicalLightingModel.js';
3
- import { transformedNormalView } from '../../nodes/accessors/Normal.js';
3
+ import { normalView } from '../../nodes/accessors/Normal.js';
4
4
  import { positionViewDirection } from '../../nodes/accessors/Position.js';
5
5
  import { float, vec3 } from '../../nodes/tsl/TSLBase.js';
6
6
 
@@ -52,7 +52,7 @@ class SSSLightingModel extends PhysicalLightingModel {
52
52
 
53
53
  const { thicknessColorNode, thicknessDistortionNode, thicknessAmbientNode, thicknessAttenuationNode, thicknessPowerNode, thicknessScaleNode } = material;
54
54
 
55
- const scatteringHalf = lightDirection.add( transformedNormalView.mul( thicknessDistortionNode ) ).normalize();
55
+ const scatteringHalf = lightDirection.add( normalView.mul( thicknessDistortionNode ) ).normalize();
56
56
  const scatteringDot = float( positionViewDirection.dot( scatteringHalf.negate() ).saturate().pow( thicknessPowerNode ).mul( thicknessScaleNode ) );
57
57
  const scatteringIllu = vec3( scatteringDot.add( thicknessAmbientNode ).mul( thicknessColorNode ) );
58
58