super-three 0.176.0 → 0.177.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 (477) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +7631 -6743
  3. package/build/three.core.js +7496 -6758
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +172 -22
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +14 -6
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +3948 -1678
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +3941 -1678
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -1
  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 -0
  17. package/examples/jsm/capabilities/WebGPU.js +1 -0
  18. package/examples/jsm/controls/ArcballControls.js +14 -3
  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 +1 -0
  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 +18 -4
  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 +49 -35
  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 +12 -10
  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 +1 -0
  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 +7 -0
  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/lighting/TiledLighting.js +1 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +1 -0
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  79. package/examples/jsm/lines/Line2.js +1 -0
  80. package/examples/jsm/lines/LineGeometry.js +1 -0
  81. package/examples/jsm/lines/LineMaterial.js +4 -4
  82. package/examples/jsm/lines/LineSegments2.js +1 -0
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  84. package/examples/jsm/lines/Wireframe.js +1 -0
  85. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  88. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  89. package/examples/jsm/loaders/3DMLoader.js +1 -0
  90. package/examples/jsm/loaders/3MFLoader.js +1 -0
  91. package/examples/jsm/loaders/AMFLoader.js +1 -0
  92. package/examples/jsm/loaders/BVHLoader.js +1 -0
  93. package/examples/jsm/loaders/ColladaLoader.js +5 -4
  94. package/examples/jsm/loaders/DDSLoader.js +1 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  96. package/examples/jsm/loaders/EXRLoader.js +1 -0
  97. package/examples/jsm/loaders/FBXLoader.js +24 -22
  98. package/examples/jsm/loaders/FontLoader.js +1 -0
  99. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  100. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  102. package/examples/jsm/loaders/IESLoader.js +1 -0
  103. package/examples/jsm/loaders/KMZLoader.js +1 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  105. package/examples/jsm/loaders/KTXLoader.js +1 -0
  106. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  107. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  108. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  110. package/examples/jsm/loaders/LWOLoader.js +1 -13
  111. package/examples/jsm/loaders/LottieLoader.js +15 -0
  112. package/examples/jsm/loaders/MD2Loader.js +1 -0
  113. package/examples/jsm/loaders/MDDLoader.js +1 -0
  114. package/examples/jsm/loaders/MTLLoader.js +4 -3
  115. package/examples/jsm/loaders/MaterialXLoader.js +1 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  117. package/examples/jsm/loaders/OBJLoader.js +1 -0
  118. package/examples/jsm/loaders/PCDLoader.js +122 -19
  119. package/examples/jsm/loaders/PDBLoader.js +1 -0
  120. package/examples/jsm/loaders/PLYLoader.js +1 -0
  121. package/examples/jsm/loaders/PVRLoader.js +1 -0
  122. package/examples/jsm/loaders/RGBELoader.js +1 -0
  123. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  124. package/examples/jsm/loaders/STLLoader.js +1 -0
  125. package/examples/jsm/loaders/SVGLoader.js +1 -0
  126. package/examples/jsm/loaders/TDSLoader.js +1 -0
  127. package/examples/jsm/loaders/TGALoader.js +1 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  129. package/examples/jsm/loaders/TTFLoader.js +1 -0
  130. package/examples/jsm/loaders/USDZLoader.js +1 -0
  131. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  132. package/examples/jsm/loaders/VOXLoader.js +1 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  134. package/examples/jsm/loaders/VTKLoader.js +1 -0
  135. package/examples/jsm/loaders/XYZLoader.js +1 -0
  136. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  137. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  138. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  139. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  140. package/examples/jsm/math/Capsule.js +2 -0
  141. package/examples/jsm/math/ColorConverter.js +1 -0
  142. package/examples/jsm/math/ConvexHull.js +2 -0
  143. package/examples/jsm/math/ImprovedNoise.js +19 -14
  144. package/examples/jsm/math/Lut.js +2 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  146. package/examples/jsm/math/OBB.js +2 -0
  147. package/examples/jsm/math/Octree.js +20 -1
  148. package/examples/jsm/math/SimplexNoise.js +2 -0
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  150. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  151. package/examples/jsm/misc/Gyroscope.js +1 -0
  152. package/examples/jsm/misc/MD2Character.js +2 -0
  153. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  154. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  158. package/examples/jsm/misc/RollerCoaster.js +5 -0
  159. package/examples/jsm/misc/Timer.js +2 -0
  160. package/examples/jsm/misc/TubePainter.js +1 -0
  161. package/examples/jsm/misc/Volume.js +2 -0
  162. package/examples/jsm/misc/VolumeSlice.js +1 -0
  163. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  167. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  168. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  169. package/examples/jsm/objects/Lensflare.js +3 -0
  170. package/examples/jsm/objects/LensflareMesh.js +1 -0
  171. package/examples/jsm/objects/MarchingCubes.js +2 -0
  172. package/examples/jsm/objects/Reflector.js +1 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  174. package/examples/jsm/objects/Refractor.js +1 -0
  175. package/examples/jsm/objects/ShadowMesh.js +1 -0
  176. package/examples/jsm/objects/Sky.js +2 -1
  177. package/examples/jsm/objects/SkyMesh.js +20 -17
  178. package/examples/jsm/objects/Water.js +1 -0
  179. package/examples/jsm/objects/Water2.js +1 -0
  180. package/examples/jsm/objects/Water2Mesh.js +3 -1
  181. package/examples/jsm/objects/WaterMesh.js +2 -1
  182. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  183. package/examples/jsm/physics/JoltPhysics.js +1 -0
  184. package/examples/jsm/physics/RapierPhysics.js +58 -1
  185. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  186. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  187. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  188. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  190. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  191. package/examples/jsm/postprocessing/EffectComposer.js +5 -6
  192. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  193. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  194. package/examples/jsm/postprocessing/GTAOPass.js +4 -3
  195. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  196. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  197. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  198. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  199. package/examples/jsm/postprocessing/OutlinePass.js +5 -2
  200. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  201. package/examples/jsm/postprocessing/Pass.js +3 -1
  202. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  203. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  204. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  205. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  206. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  207. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  208. package/examples/jsm/postprocessing/SSAOPass.js +2 -1
  209. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  210. package/examples/jsm/postprocessing/SavePass.js +2 -1
  211. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  212. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  213. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  214. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  215. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  216. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  217. package/examples/jsm/renderers/Projector.js +2 -0
  218. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  219. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  220. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  221. package/examples/jsm/shaders/BasicShader.js +4 -1
  222. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  223. package/examples/jsm/shaders/BlendShader.js +4 -1
  224. package/examples/jsm/shaders/BokehShader.js +4 -1
  225. package/examples/jsm/shaders/BokehShader2.js +4 -1
  226. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  227. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  228. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  229. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  230. package/examples/jsm/shaders/CopyShader.js +4 -1
  231. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  232. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  233. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  234. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  235. package/examples/jsm/shaders/ExposureShader.js +4 -1
  236. package/examples/jsm/shaders/FXAAShader.js +4 -1
  237. package/examples/jsm/shaders/FilmShader.js +4 -1
  238. package/examples/jsm/shaders/FocusShader.js +4 -1
  239. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  240. package/examples/jsm/shaders/GTAOShader.js +4 -1
  241. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  242. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  243. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  244. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  245. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  246. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  247. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  248. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  249. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  250. package/examples/jsm/shaders/MirrorShader.js +4 -1
  251. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  252. package/examples/jsm/shaders/OutputShader.js +4 -1
  253. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  254. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  255. package/examples/jsm/shaders/SAOShader.js +4 -1
  256. package/examples/jsm/shaders/SMAAShader.js +1 -0
  257. package/examples/jsm/shaders/SSAOShader.js +4 -1
  258. package/examples/jsm/shaders/SSRShader.js +1 -0
  259. package/examples/jsm/shaders/SepiaShader.js +4 -1
  260. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  261. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  262. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  263. package/examples/jsm/shaders/ToonShader.js +2 -1
  264. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  265. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +4 -1
  266. package/examples/jsm/shaders/VelocityShader.js +4 -1
  267. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  268. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  269. package/examples/jsm/shaders/VignetteShader.js +4 -1
  270. package/examples/jsm/shaders/VolumeShader.js +5 -2
  271. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  272. package/examples/jsm/textures/FlakesTexture.js +2 -0
  273. package/examples/jsm/transpiler/GLSLDecoder.js +1 -2
  274. package/examples/jsm/transpiler/TSLEncoder.js +52 -8
  275. package/examples/jsm/transpiler/Transpiler.js +2 -0
  276. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  277. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  278. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  279. package/examples/jsm/tsl/display/BloomNode.js +1 -0
  280. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  281. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  282. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  283. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  284. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  285. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  286. package/examples/jsm/tsl/display/GaussianBlurNode.js +2 -27
  287. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  288. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  289. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  290. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  291. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  292. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  293. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  294. package/examples/jsm/tsl/display/SSAAPassNode.js +3 -2
  295. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  296. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  297. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  298. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  299. package/examples/jsm/tsl/display/TRAAPassNode.js +5 -4
  300. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  301. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  302. package/examples/jsm/tsl/lighting/TiledLightsNode.js +4 -3
  303. package/examples/jsm/tsl/math/Bayer.js +4 -1
  304. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  305. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  306. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  307. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  308. package/examples/jsm/utils/CameraUtils.js +4 -1
  309. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  310. package/examples/jsm/utils/GeometryUtils.js +4 -1
  311. package/examples/jsm/utils/LDrawUtils.js +2 -0
  312. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  313. package/examples/jsm/utils/SceneUtils.js +4 -1
  314. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  315. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  316. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  317. package/examples/jsm/utils/SortUtils.js +4 -1
  318. package/examples/jsm/utils/UVsDebug.js +4 -1
  319. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  320. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  321. package/examples/jsm/utils/WorkerPool.js +2 -0
  322. package/examples/jsm/webxr/ARButton.js +1 -0
  323. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  324. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  325. package/examples/jsm/webxr/Text2D.js +4 -1
  326. package/examples/jsm/webxr/VRButton.js +1 -0
  327. package/examples/jsm/webxr/XRButton.js +1 -0
  328. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  329. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  330. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  331. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  332. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  333. package/examples/jsm/webxr/XRPlanes.js +1 -0
  334. package/package.json +6 -4
  335. package/src/Three.Core.js +1 -1
  336. package/src/Three.TSL.js +13 -5
  337. package/src/Three.WebGPU.Nodes.js +1 -0
  338. package/src/Three.WebGPU.js +1 -0
  339. package/src/audio/AudioListener.js +13 -10
  340. package/src/cameras/ArrayCamera.js +9 -1
  341. package/src/constants.js +47 -20
  342. package/src/core/BufferAttribute.js +1 -1
  343. package/src/core/BufferGeometry.js +2 -5
  344. package/src/core/Object3D.js +22 -21
  345. package/src/core/RenderTarget.js +65 -21
  346. package/src/core/RenderTarget3D.js +1 -0
  347. package/src/extras/TextureUtils.js +1 -5
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/geometries/CapsuleGeometry.js +167 -17
  350. package/src/geometries/ExtrudeGeometry.js +39 -29
  351. package/src/helpers/ArrowHelper.js +2 -2
  352. package/src/helpers/SkeletonHelper.js +1 -1
  353. package/src/lights/LightShadow.js +14 -0
  354. package/src/lights/SpotLightShadow.js +9 -1
  355. package/src/lights/webgpu/ProjectorLight.js +46 -0
  356. package/src/loaders/BufferGeometryLoader.js +1 -10
  357. package/src/loaders/ImageBitmapLoader.js +21 -5
  358. package/src/loaders/ObjectLoader.js +44 -16
  359. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  360. package/src/materials/Material.js +1 -7
  361. package/src/materials/nodes/NodeMaterial.js +81 -18
  362. package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
  363. package/src/math/Box3.js +28 -0
  364. package/src/math/Color.js +7 -7
  365. package/src/math/ColorManagement.js +22 -3
  366. package/src/math/FrustumArray.js +253 -0
  367. package/src/math/Ray.js +2 -0
  368. package/src/math/Sphere.js +28 -0
  369. package/src/nodes/Nodes.js +1 -0
  370. package/src/nodes/TSL.js +1 -0
  371. package/src/nodes/accessors/Bitangent.js +31 -9
  372. package/src/nodes/accessors/Camera.js +31 -4
  373. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  374. package/src/nodes/accessors/InstanceNode.js +5 -4
  375. package/src/nodes/accessors/Lights.js +2 -2
  376. package/src/nodes/accessors/MaterialNode.js +4 -0
  377. package/src/nodes/accessors/ModelNode.js +1 -1
  378. package/src/nodes/accessors/Normal.js +26 -6
  379. package/src/nodes/accessors/Object3DNode.js +6 -7
  380. package/src/nodes/accessors/Position.js +14 -4
  381. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  382. package/src/nodes/accessors/ReferenceNode.js +1 -1
  383. package/src/nodes/accessors/SkinningNode.js +3 -2
  384. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  385. package/src/nodes/accessors/StorageTextureNode.js +14 -3
  386. package/src/nodes/accessors/TextureNode.js +59 -8
  387. package/src/nodes/accessors/VelocityNode.js +1 -0
  388. package/src/nodes/accessors/VertexColorNode.js +4 -4
  389. package/src/nodes/code/CodeNode.js +8 -11
  390. package/src/nodes/core/AssignNode.js +27 -5
  391. package/src/nodes/core/AttributeNode.js +2 -2
  392. package/src/nodes/core/CacheNode.js +14 -0
  393. package/src/nodes/core/ContextNode.js +7 -3
  394. package/src/nodes/core/Node.js +68 -19
  395. package/src/nodes/core/NodeBuilder.js +100 -12
  396. package/src/nodes/core/NodeUtils.js +42 -0
  397. package/src/nodes/core/NodeVarying.js +19 -1
  398. package/src/nodes/core/PropertyNode.js +8 -12
  399. package/src/nodes/core/StackNode.js +127 -2
  400. package/src/nodes/core/StructTypeNode.js +26 -4
  401. package/src/nodes/core/VarNode.js +11 -2
  402. package/src/nodes/core/VaryingNode.js +40 -21
  403. package/src/nodes/display/BlendModes.js +42 -1
  404. package/src/nodes/display/ColorSpaceNode.js +4 -27
  405. package/src/nodes/display/PassNode.js +8 -11
  406. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  407. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  408. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  409. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  410. package/src/nodes/gpgpu/ComputeNode.js +1 -1
  411. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  412. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  413. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  414. package/src/nodes/lighting/LightsNode.js +25 -7
  415. package/src/nodes/lighting/ProjectorLightNode.js +78 -0
  416. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  417. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  418. package/src/nodes/lighting/ShadowNode.js +172 -240
  419. package/src/nodes/lighting/SpotLightNode.js +44 -7
  420. package/src/nodes/materialx/lib/mx_noise.js +1 -1
  421. package/src/nodes/math/MathNode.js +56 -20
  422. package/src/nodes/math/OperatorNode.js +109 -82
  423. package/src/nodes/shapes/Shapes.js +5 -4
  424. package/src/nodes/tsl/TSLCore.js +140 -49
  425. package/src/nodes/utils/DebugNode.js +15 -3
  426. package/src/nodes/utils/Discard.js +2 -2
  427. package/src/nodes/utils/LoopNode.js +64 -17
  428. package/src/nodes/utils/ReflectorNode.js +67 -4
  429. package/src/objects/BatchedMesh.js +16 -4
  430. package/src/objects/Mesh.js +9 -0
  431. package/src/objects/Skeleton.js +1 -1
  432. package/src/objects/Sprite.js +9 -0
  433. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  434. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  435. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  436. package/src/renderers/WebGLRenderer.js +21 -10
  437. package/src/renderers/common/Animation.js +2 -2
  438. package/src/renderers/common/Background.js +11 -0
  439. package/src/renderers/common/RenderList.js +0 -4
  440. package/src/renderers/common/RenderObject.js +12 -1
  441. package/src/renderers/common/Renderer.js +116 -8
  442. package/src/renderers/common/Textures.js +15 -21
  443. package/src/renderers/common/TimestampQueryPool.js +1 -0
  444. package/src/renderers/common/Uniform.js +1 -1
  445. package/src/renderers/common/UniformsGroup.js +14 -18
  446. package/src/renderers/common/XRManager.js +154 -25
  447. package/src/renderers/common/extras/PMREMGenerator.js +29 -22
  448. package/src/renderers/common/nodes/Nodes.js +13 -3
  449. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  450. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  451. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  452. package/src/renderers/webgl/WebGLTextures.js +143 -4
  453. package/src/renderers/webgl/WebGLUtils.js +1 -3
  454. package/src/renderers/webgl-fallback/WebGLBackend.js +170 -34
  455. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -7
  456. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  457. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +42 -29
  458. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  459. package/src/renderers/webgpu/WebGPUBackend.js +442 -127
  460. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  461. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  462. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  463. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +75 -27
  464. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  465. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -1
  466. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -5
  467. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  468. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +34 -4
  469. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +44 -49
  470. package/src/renderers/webxr/WebXRController.js +1 -1
  471. package/src/renderers/webxr/WebXRManager.js +2 -1
  472. package/src/textures/DepthTexture.js +6 -10
  473. package/src/textures/Source.js +22 -0
  474. package/src/textures/Texture.js +118 -1
  475. package/src/textures/VideoTexture.js +1 -1
  476. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  477. package/src/core/RenderTargetArray.js +0 -40
@@ -1,35 +1,33 @@
1
- import { Path } from '../extras/core/Path.js';
2
- import { LatheGeometry } from './LatheGeometry.js';
1
+ import { BufferGeometry } from '../core/BufferGeometry.js';
2
+ import { Float32BufferAttribute } from '../core/BufferAttribute.js';
3
+ import { Vector3 } from '../math/Vector3.js';
3
4
 
4
5
  /**
5
- * A geometry class for a capsule with given radii and height. It is constructed using a lathe.
6
+ * A geometry class for representing a capsule.
6
7
  *
7
8
  * ```js
8
- * const geometry = new THREE.CapsuleGeometry( 1, 1, 4, 8 );
9
+ * const geometry = new THREE.CapsuleGeometry( 1, 1, 4, 8, 1 );
9
10
  * const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
10
11
  * const capsule = new THREE.Mesh( geometry, material );
11
12
  * scene.add( capsule );
12
13
  * ```
13
14
  *
14
- * @augments LatheGeometry
15
+ * @augments BufferGeometry
15
16
  */
16
- class CapsuleGeometry extends LatheGeometry {
17
+ class CapsuleGeometry extends BufferGeometry {
17
18
 
18
19
  /**
19
20
  * Constructs a new capsule geometry.
20
21
  *
21
22
  * @param {number} [radius=1] - Radius of the capsule.
22
- * @param {number} [length=1] - Length of the middle section.
23
- * @param {number} [capSegments=4] - Number of curve segments used to build the caps.
24
- * @param {number} [radialSegments=8] - Number of segmented faces around the circumference of the capsule.
23
+ * @param {number} [height=1] - Height of the middle section.
24
+ * @param {number} [capSegments=4] - Number of curve segments used to build each cap.
25
+ * @param {number} [radialSegments=8] - Number of segmented faces around the circumference of the capsule. Must be an integer >= 3.
26
+ * @param {number} [heightSegments=1] - Number of rows of faces along the height of the middle section. Must be an integer >= 1.
25
27
  */
26
- constructor( radius = 1, length = 1, capSegments = 4, radialSegments = 8 ) {
28
+ constructor( radius = 1, height = 1, capSegments = 4, radialSegments = 8, heightSegments = 1 ) {
27
29
 
28
- const path = new Path();
29
- path.absarc( 0, - length / 2, radius, Math.PI * 1.5, 0 );
30
- path.absarc( 0, length / 2, radius, 0, Math.PI * 0.5 );
31
-
32
- super( path.getPoints( capSegments ), radialSegments );
30
+ super();
33
31
 
34
32
  this.type = 'CapsuleGeometry';
35
33
 
@@ -42,11 +40,163 @@ class CapsuleGeometry extends LatheGeometry {
42
40
  */
43
41
  this.parameters = {
44
42
  radius: radius,
45
- length: length,
43
+ height: height,
46
44
  capSegments: capSegments,
47
45
  radialSegments: radialSegments,
46
+ heightSegments: heightSegments,
48
47
  };
49
48
 
49
+ height = Math.max( 0, height );
50
+ capSegments = Math.max( 1, Math.floor( capSegments ) );
51
+ radialSegments = Math.max( 3, Math.floor( radialSegments ) );
52
+ heightSegments = Math.max( 1, Math.floor( heightSegments ) );
53
+
54
+ // buffers
55
+
56
+ const indices = [];
57
+ const vertices = [];
58
+ const normals = [];
59
+ const uvs = [];
60
+
61
+ // helper variables
62
+
63
+ const halfHeight = height / 2;
64
+ const capArcLength = ( Math.PI / 2 ) * radius;
65
+ const cylinderPartLength = height;
66
+ const totalArcLength = 2 * capArcLength + cylinderPartLength;
67
+
68
+ const numVerticalSegments = capSegments * 2 + heightSegments;
69
+ const verticesPerRow = radialSegments + 1;
70
+
71
+ const normal = new Vector3();
72
+ const vertex = new Vector3();
73
+
74
+ // generate vertices, normals, and uvs
75
+
76
+ for ( let iy = 0; iy <= numVerticalSegments; iy ++ ) {
77
+
78
+ let currentArcLength = 0;
79
+ let profileY = 0;
80
+ let profileRadius = 0;
81
+ let normalYComponent = 0;
82
+
83
+ if ( iy <= capSegments ) {
84
+
85
+ // bottom cap
86
+ const segmentProgress = iy / capSegments;
87
+ const angle = ( segmentProgress * Math.PI ) / 2;
88
+ profileY = - halfHeight - radius * Math.cos( angle );
89
+ profileRadius = radius * Math.sin( angle );
90
+ normalYComponent = - radius * Math.cos( angle );
91
+ currentArcLength = segmentProgress * capArcLength;
92
+
93
+ } else if ( iy <= capSegments + heightSegments ) {
94
+
95
+ // middle section
96
+ const segmentProgress = ( iy - capSegments ) / heightSegments;
97
+ profileY = - halfHeight + segmentProgress * height;
98
+ profileRadius = radius;
99
+ normalYComponent = 0;
100
+ currentArcLength = capArcLength + segmentProgress * cylinderPartLength;
101
+
102
+ } else {
103
+
104
+ // top cap
105
+ const segmentProgress =
106
+ ( iy - capSegments - heightSegments ) / capSegments;
107
+ const angle = ( segmentProgress * Math.PI ) / 2;
108
+ profileY = halfHeight + radius * Math.sin( angle );
109
+ profileRadius = radius * Math.cos( angle );
110
+ normalYComponent = radius * Math.sin( angle );
111
+ currentArcLength =
112
+ capArcLength + cylinderPartLength + segmentProgress * capArcLength;
113
+
114
+ }
115
+
116
+ const v = Math.max( 0, Math.min( 1, currentArcLength / totalArcLength ) );
117
+
118
+
119
+ // special case for the poles
120
+
121
+ let uOffset = 0;
122
+
123
+ if ( iy === 0 ) {
124
+
125
+ uOffset = 0.5 / radialSegments;
126
+
127
+ } else if ( iy === numVerticalSegments ) {
128
+
129
+ uOffset = - 0.5 / radialSegments;
130
+
131
+ }
132
+
133
+ for ( let ix = 0; ix <= radialSegments; ix ++ ) {
134
+
135
+ const u = ix / radialSegments;
136
+ const theta = u * Math.PI * 2;
137
+
138
+ const sinTheta = Math.sin( theta );
139
+ const cosTheta = Math.cos( theta );
140
+
141
+ // vertex
142
+
143
+ vertex.x = - profileRadius * cosTheta;
144
+ vertex.y = profileY;
145
+ vertex.z = profileRadius * sinTheta;
146
+ vertices.push( vertex.x, vertex.y, vertex.z );
147
+
148
+ // normal
149
+
150
+ normal.set(
151
+ - profileRadius * cosTheta,
152
+ normalYComponent,
153
+ profileRadius * sinTheta
154
+ );
155
+ normal.normalize();
156
+ normals.push( normal.x, normal.y, normal.z );
157
+
158
+ // uv
159
+
160
+ uvs.push( u + uOffset, v );
161
+
162
+ }
163
+
164
+ if ( iy > 0 ) {
165
+
166
+ const prevIndexRow = ( iy - 1 ) * verticesPerRow;
167
+ for ( let ix = 0; ix < radialSegments; ix ++ ) {
168
+
169
+ const i1 = prevIndexRow + ix;
170
+ const i2 = prevIndexRow + ix + 1;
171
+ const i3 = iy * verticesPerRow + ix;
172
+ const i4 = iy * verticesPerRow + ix + 1;
173
+
174
+ indices.push( i1, i2, i3 );
175
+ indices.push( i2, i4, i3 );
176
+
177
+ }
178
+
179
+ }
180
+
181
+ }
182
+
183
+ // build geometry
184
+
185
+ this.setIndex( indices );
186
+ this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
187
+ this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
188
+ this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
189
+
190
+ }
191
+
192
+ copy( source ) {
193
+
194
+ super.copy( source );
195
+
196
+ this.parameters = Object.assign( {}, source.parameters );
197
+
198
+ return this;
199
+
50
200
  }
51
201
 
52
202
  /**
@@ -58,7 +208,7 @@ class CapsuleGeometry extends LatheGeometry {
58
208
  */
59
209
  static fromJSON( data ) {
60
210
 
61
- return new CapsuleGeometry( data.radius, data.length, data.capSegments, data.radialSegments );
211
+ return new CapsuleGeometry( data.radius, data.height, data.capSegments, data.radialSegments, data.heightSegments );
62
212
 
63
213
  }
64
214
 
@@ -184,8 +184,8 @@ class ExtrudeGeometry extends BufferGeometry {
184
184
  Math.abs( prevPos.x ),
185
185
  Math.abs( prevPos.y )
186
186
  );
187
- const thesholdSqScaled = THRESHOLD_SQ * scalingFactorSqrt * scalingFactorSqrt;
188
- if ( distSq <= thesholdSqScaled ) {
187
+ const thresholdSqScaled = THRESHOLD_SQ * scalingFactorSqrt * scalingFactorSqrt;
188
+ if ( distSq <= thresholdSqScaled ) {
189
189
 
190
190
  points.splice( currentIndex, 1 );
191
191
  i --;
@@ -393,53 +393,63 @@ class ExtrudeGeometry extends BufferGeometry {
393
393
 
394
394
  }
395
395
 
396
- const contractedContourVertices = [];
397
- const expandedHoleVertices = [];
396
+ let faces;
398
397
 
399
- // Loop bevelSegments, 1 for the front, 1 for the back
398
+ if ( bevelSegments === 0 ) {
400
399
 
401
- for ( let b = 0; b < bevelSegments; b ++ ) {
400
+ faces = ShapeUtils.triangulateShape( contour, holes );
402
401
 
403
- //for ( b = bevelSegments; b > 0; b -- ) {
402
+ } else {
404
403
 
405
- const t = b / bevelSegments;
406
- const z = bevelThickness * Math.cos( t * Math.PI / 2 );
407
- const bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;
404
+ const contractedContourVertices = [];
405
+ const expandedHoleVertices = [];
408
406
 
409
- // contract shape
407
+ // Loop bevelSegments, 1 for the front, 1 for the back
410
408
 
411
- for ( let i = 0, il = contour.length; i < il; i ++ ) {
409
+ for ( let b = 0; b < bevelSegments; b ++ ) {
412
410
 
413
- const vert = scalePt2( contour[ i ], contourMovements[ i ], bs );
411
+ //for ( b = bevelSegments; b > 0; b -- ) {
414
412
 
415
- v( vert.x, vert.y, - z );
416
- if ( t == 0 ) contractedContourVertices.push( vert );
413
+ const t = b / bevelSegments;
414
+ const z = bevelThickness * Math.cos( t * Math.PI / 2 );
415
+ const bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;
417
416
 
418
- }
417
+ // contract shape
419
418
 
420
- // expand holes
421
-
422
- for ( let h = 0, hl = numHoles; h < hl; h ++ ) {
419
+ for ( let i = 0, il = contour.length; i < il; i ++ ) {
423
420
 
424
- const ahole = holes[ h ];
425
- oneHoleMovements = holesMovements[ h ];
426
- const oneHoleVertices = [];
427
- for ( let i = 0, il = ahole.length; i < il; i ++ ) {
428
-
429
- const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );
421
+ const vert = scalePt2( contour[ i ], contourMovements[ i ], bs );
430
422
 
431
423
  v( vert.x, vert.y, - z );
432
- if ( t == 0 ) oneHoleVertices.push( vert );
424
+ if ( t === 0 ) contractedContourVertices.push( vert );
433
425
 
434
426
  }
435
427
 
436
- if ( t == 0 ) expandedHoleVertices.push( oneHoleVertices );
428
+ // expand holes
429
+
430
+ for ( let h = 0, hl = numHoles; h < hl; h ++ ) {
431
+
432
+ const ahole = holes[ h ];
433
+ oneHoleMovements = holesMovements[ h ];
434
+ const oneHoleVertices = [];
435
+ for ( let i = 0, il = ahole.length; i < il; i ++ ) {
436
+
437
+ const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );
438
+
439
+ v( vert.x, vert.y, - z );
440
+ if ( t === 0 ) oneHoleVertices.push( vert );
441
+
442
+ }
443
+
444
+ if ( t === 0 ) expandedHoleVertices.push( oneHoleVertices );
445
+
446
+ }
437
447
 
438
448
  }
439
449
 
440
- }
450
+ faces = ShapeUtils.triangulateShape( contractedContourVertices, expandedHoleVertices );
441
451
 
442
- const faces = ShapeUtils.triangulateShape( contractedContourVertices, expandedHoleVertices );
452
+ }
443
453
 
444
454
  const flen = faces.length;
445
455
 
@@ -1,7 +1,7 @@
1
1
  import { Float32BufferAttribute } from '../core/BufferAttribute.js';
2
2
  import { BufferGeometry } from '../core/BufferGeometry.js';
3
3
  import { Object3D } from '../core/Object3D.js';
4
- import { CylinderGeometry } from '../geometries/CylinderGeometry.js';
4
+ import { ConeGeometry } from '../geometries/ConeGeometry.js';
5
5
  import { MeshBasicMaterial } from '../materials/MeshBasicMaterial.js';
6
6
  import { LineBasicMaterial } from '../materials/LineBasicMaterial.js';
7
7
  import { Mesh } from '../objects/Mesh.js';
@@ -53,7 +53,7 @@ class ArrowHelper extends Object3D {
53
53
  _lineGeometry = new BufferGeometry();
54
54
  _lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );
55
55
 
56
- _coneGeometry = new CylinderGeometry( 0, 0.5, 1, 5, 1 );
56
+ _coneGeometry = new ConeGeometry( 0.5, 1, 5, 1 );
57
57
  _coneGeometry.translate( 0, - 0.5, 0 );
58
58
 
59
59
  }
@@ -81,7 +81,7 @@ class SkeletonHelper extends LineSegments {
81
81
  this.root = object;
82
82
 
83
83
  /**
84
- * he list of bones that the helper visualizes.
84
+ * The list of bones that the helper visualizes.
85
85
  *
86
86
  * @type {Array<Bone>}
87
87
  */
@@ -3,6 +3,7 @@ import { Vector2 } from '../math/Vector2.js';
3
3
  import { Vector3 } from '../math/Vector3.js';
4
4
  import { Vector4 } from '../math/Vector4.js';
5
5
  import { Frustum } from '../math/Frustum.js';
6
+ import { UnsignedByteType } from '../constants.js';
6
7
 
7
8
  const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
8
9
  const _lightPositionWorld = /*@__PURE__*/ new Vector3();
@@ -95,6 +96,14 @@ class LightShadow {
95
96
  */
96
97
  this.mapSize = new Vector2( 512, 512 );
97
98
 
99
+ /**
100
+ * The type of shadow texture. The default is `UnsignedByteType`.
101
+ *
102
+ * @type {number}
103
+ * @default UnsignedByteType
104
+ */
105
+ this.mapType = UnsignedByteType;
106
+
98
107
  /**
99
108
  * The depth map generated using the internal camera; a location beyond a
100
109
  * pixel's depth is in shadow. Computed internally during rendering.
@@ -266,6 +275,11 @@ class LightShadow {
266
275
  this.bias = source.bias;
267
276
  this.radius = source.radius;
268
277
 
278
+ this.autoUpdate = source.autoUpdate;
279
+ this.needsUpdate = source.needsUpdate;
280
+ this.normalBias = source.normalBias;
281
+ this.blurSamples = source.blurSamples;
282
+
269
283
  this.mapSize.copy( source.mapSize );
270
284
 
271
285
  return this;
@@ -34,6 +34,14 @@ class SpotLightShadow extends LightShadow {
34
34
  */
35
35
  this.focus = 1;
36
36
 
37
+ /**
38
+ * Texture aspect ratio.
39
+ *
40
+ * @type {number}
41
+ * @default 1
42
+ */
43
+ this.aspect = 1;
44
+
37
45
  }
38
46
 
39
47
  updateMatrices( light ) {
@@ -41,7 +49,7 @@ class SpotLightShadow extends LightShadow {
41
49
  const camera = this.camera;
42
50
 
43
51
  const fov = RAD2DEG * 2 * light.angle * this.focus;
44
- const aspect = this.mapSize.width / this.mapSize.height;
52
+ const aspect = ( this.mapSize.width / this.mapSize.height ) * this.aspect;
45
53
  const far = light.distance || camera.far;
46
54
 
47
55
  if ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {
@@ -0,0 +1,46 @@
1
+ import { SpotLight } from '../SpotLight.js';
2
+
3
+ /**
4
+ * A projector light version of {@link SpotLight}. Can only be used with {@link WebGPURenderer}.
5
+ *
6
+ * @augments SpotLight
7
+ */
8
+ class ProjectorLight extends SpotLight {
9
+
10
+ /**
11
+ * Constructs a new projector light.
12
+ *
13
+ * @param {(number|Color|string)} [color=0xffffff] - The light's color.
14
+ * @param {number} [intensity=1] - The light's strength/intensity measured in candela (cd).
15
+ * @param {number} [distance=0] - Maximum range of the light. `0` means no limit.
16
+ * @param {number} [angle=Math.PI/3] - Maximum angle of light dispersion from its direction whose upper bound is `Math.PI/2`.
17
+ * @param {number} [penumbra=0] - Percent of the spotlight cone that is attenuated due to penumbra. Value range is `[0,1]`.
18
+ * @param {number} [decay=2] - The amount the light dims along the distance of the light.
19
+ */
20
+ constructor( color, intensity, distance, angle, penumbra, decay ) {
21
+
22
+ super( color, intensity, distance, angle, penumbra, decay );
23
+
24
+ /**
25
+ * Aspect ratio of the light. Set to `null` to use the texture aspect ratio.
26
+ *
27
+ * @type {number}
28
+ * @default null
29
+ */
30
+ this.aspect = null;
31
+
32
+ }
33
+
34
+ copy( source, recursive ) {
35
+
36
+ super.copy( source, recursive );
37
+
38
+ this.aspect = source.aspect;
39
+
40
+ return this;
41
+
42
+ }
43
+
44
+ }
45
+
46
+ export default ProjectorLight;
@@ -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
 
@@ -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();
@@ -111,15 +113,27 @@ class ImageBitmapLoader extends Loader {
111
113
 
112
114
  cached.then( imageBitmap => {
113
115
 
114
- if ( onLoad ) onLoad( imageBitmap );
116
+ // check if there is an error for the cached promise
117
+
118
+ if ( _errorMap.has( cached ) === true ) {
119
+
120
+ if ( onError ) onError( _errorMap.get( cached ) );
121
+
122
+ scope.manager.itemError( url );
123
+ scope.manager.itemEnd( url );
115
124
 
116
- scope.manager.itemEnd( url );
125
+ } else {
117
126
 
118
- } ).catch( e => {
127
+ if ( onLoad ) onLoad( imageBitmap );
119
128
 
120
- if ( onError ) onError( e );
129
+ scope.manager.itemEnd( url );
130
+
131
+ return imageBitmap;
132
+
133
+ }
121
134
 
122
135
  } );
136
+
123
137
  return;
124
138
 
125
139
  }
@@ -163,6 +177,8 @@ class ImageBitmapLoader extends Loader {
163
177
 
164
178
  if ( onError ) onError( e );
165
179
 
180
+ _errorMap.set( promise, e );
181
+
166
182
  Cache.remove( url );
167
183
 
168
184
  scope.manager.itemError( url );
@@ -988,37 +988,65 @@ class ObjectLoader extends Loader {
988
988
  object._drawRanges = data.drawRanges;
989
989
  object._reservedRanges = data.reservedRanges;
990
990
 
991
- object._visibility = data.visibility;
992
- object._active = data.active;
993
- object._bounds = data.bounds.map( bound => {
991
+ object._geometryInfo = data.geometryInfo.map( info => {
994
992
 
995
- const box = new Box3();
996
- box.min.fromArray( bound.boxMin );
997
- box.max.fromArray( bound.boxMax );
993
+ let box = null;
994
+ let sphere = null;
995
+ if ( info.boundingBox !== undefined ) {
998
996
 
999
- const sphere = new Sphere();
1000
- sphere.radius = bound.sphereRadius;
1001
- sphere.center.fromArray( bound.sphereCenter );
997
+ box = new Box3().fromJSON( info.boundingBox );
1002
998
 
1003
- return {
1004
- boxInitialized: bound.boxInitialized,
1005
- box: box,
999
+ }
1000
+
1001
+ if ( info.boundingSphere !== undefined ) {
1002
+
1003
+ sphere = new Sphere().fromJSON( info.boundingSphere );
1004
+
1005
+ }
1006
1006
 
1007
- sphereInitialized: bound.sphereInitialized,
1008
- sphere: sphere
1007
+ return {
1008
+ ...info,
1009
+ boundingBox: box,
1010
+ boundingSphere: sphere
1009
1011
  };
1010
1012
 
1011
1013
  } );
1014
+ object._instanceInfo = data.instanceInfo;
1015
+
1016
+ object._availableInstanceIds = data._availableInstanceIds;
1017
+ object._availableGeometryIds = data._availableGeometryIds;
1018
+
1019
+ object._nextIndexStart = data.nextIndexStart;
1020
+ object._nextVertexStart = data.nextVertexStart;
1021
+ object._geometryCount = data.geometryCount;
1012
1022
 
1013
1023
  object._maxInstanceCount = data.maxInstanceCount;
1014
1024
  object._maxVertexCount = data.maxVertexCount;
1015
1025
  object._maxIndexCount = data.maxIndexCount;
1016
1026
 
1017
1027
  object._geometryInitialized = data.geometryInitialized;
1018
- object._geometryCount = data.geometryCount;
1019
1028
 
1020
1029
  object._matricesTexture = getTexture( data.matricesTexture.uuid );
1021
- if ( data.colorsTexture !== undefined ) object._colorsTexture = getTexture( data.colorsTexture.uuid );
1030
+
1031
+ object._indirectTexture = getTexture( data.indirectTexture.uuid );
1032
+
1033
+ if ( data.colorsTexture !== undefined ) {
1034
+
1035
+ object._colorsTexture = getTexture( data.colorsTexture.uuid );
1036
+
1037
+ }
1038
+
1039
+ if ( data.boundingSphere !== undefined ) {
1040
+
1041
+ object.boundingSphere = new Sphere().fromJSON( data.boundingSphere );
1042
+
1043
+ }
1044
+
1045
+ if ( data.boundingBox !== undefined ) {
1046
+
1047
+ object.boundingBox = new Box3().fromJSON( data.boundingBox );
1048
+
1049
+ }
1022
1050
 
1023
1051
  break;
1024
1052
 
@@ -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 };