@plastic-software/three 0.175.13 → 0.178.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 (529) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +7747 -6792
  3. package/build/three.core.js +7371 -6576
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +190 -30
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +19 -11
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +4989 -2235
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +5082 -2469
  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 -27
  17. package/examples/jsm/capabilities/WebGPU.js +1 -0
  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 +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 +2 -1
  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 +6 -5
  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 +25 -23
  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 +139 -12
  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 +4 -2
  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/AST.js +381 -30
  274. package/examples/jsm/transpiler/GLSLDecoder.js +226 -87
  275. package/examples/jsm/transpiler/Linker.js +327 -0
  276. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  277. package/examples/jsm/transpiler/Transpiler.js +19 -1
  278. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  279. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  280. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  281. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  282. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  283. package/examples/jsm/tsl/display/BloomNode.js +1 -0
  284. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  285. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  286. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  287. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  288. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  289. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  290. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  291. package/examples/jsm/tsl/display/GaussianBlurNode.js +4 -29
  292. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  293. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  294. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  295. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  296. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  297. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  298. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  299. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  300. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  301. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  302. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  303. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  304. package/examples/jsm/tsl/display/TRAAPassNode.js +5 -4
  305. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  306. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  307. package/examples/jsm/tsl/lighting/TiledLightsNode.js +4 -3
  308. package/examples/jsm/tsl/math/Bayer.js +4 -1
  309. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  310. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  311. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  312. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  313. package/examples/jsm/utils/CameraUtils.js +4 -1
  314. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  315. package/examples/jsm/utils/GeometryUtils.js +4 -1
  316. package/examples/jsm/utils/LDrawUtils.js +2 -0
  317. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  318. package/examples/jsm/utils/SceneUtils.js +4 -1
  319. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  320. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  321. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  322. package/examples/jsm/utils/SortUtils.js +4 -1
  323. package/examples/jsm/utils/UVsDebug.js +4 -1
  324. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  325. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  326. package/examples/jsm/utils/WorkerPool.js +2 -0
  327. package/examples/jsm/webxr/ARButton.js +1 -0
  328. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  329. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  330. package/examples/jsm/webxr/Text2D.js +4 -1
  331. package/examples/jsm/webxr/VRButton.js +1 -0
  332. package/examples/jsm/webxr/XRButton.js +1 -0
  333. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  334. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  335. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  336. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  338. package/examples/jsm/webxr/XRPlanes.js +1 -0
  339. package/package.json +6 -4
  340. package/src/Three.Core.js +1 -1
  341. package/src/Three.TSL.js +18 -10
  342. package/src/Three.WebGPU.Nodes.js +1 -0
  343. package/src/Three.WebGPU.js +3 -0
  344. package/src/audio/AudioListener.js +13 -10
  345. package/src/cameras/ArrayCamera.js +9 -1
  346. package/src/constants.js +47 -20
  347. package/src/core/BufferAttribute.js +3 -3
  348. package/src/core/BufferGeometry.js +2 -5
  349. package/src/core/Clock.js +2 -8
  350. package/src/core/GLBufferAttribute.js +13 -1
  351. package/src/core/Object3D.js +23 -22
  352. package/src/core/RenderTarget.js +65 -21
  353. package/src/core/RenderTarget3D.js +1 -0
  354. package/src/extras/TextureUtils.js +1 -5
  355. package/src/extras/core/Curve.js +1 -1
  356. package/src/extras/core/Path.js +22 -22
  357. package/src/geometries/CapsuleGeometry.js +167 -17
  358. package/src/geometries/ExtrudeGeometry.js +39 -29
  359. package/src/helpers/ArrowHelper.js +2 -2
  360. package/src/helpers/SkeletonHelper.js +1 -1
  361. package/src/lights/LightShadow.js +14 -0
  362. package/src/lights/SpotLightShadow.js +9 -1
  363. package/src/lights/webgpu/ProjectorLight.js +46 -0
  364. package/src/loaders/BufferGeometryLoader.js +1 -10
  365. package/src/loaders/FileLoader.js +2 -2
  366. package/src/loaders/ImageBitmapLoader.js +25 -9
  367. package/src/loaders/ImageLoader.js +55 -8
  368. package/src/loaders/ObjectLoader.js +44 -16
  369. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  370. package/src/materials/Material.js +1 -7
  371. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  372. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  373. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  374. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  375. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  376. package/src/materials/nodes/NodeMaterial.js +105 -19
  377. package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
  378. package/src/math/Box3.js +28 -0
  379. package/src/math/Color.js +7 -7
  380. package/src/math/ColorManagement.js +22 -3
  381. package/src/math/Frustum.js +6 -1
  382. package/src/math/FrustumArray.js +253 -0
  383. package/src/math/Quaternion.js +1 -1
  384. package/src/math/Ray.js +2 -0
  385. package/src/math/Sphere.js +28 -0
  386. package/src/nodes/Nodes.js +2 -3
  387. package/src/nodes/TSL.js +5 -3
  388. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  389. package/src/nodes/accessors/Bitangent.js +54 -26
  390. package/src/nodes/accessors/Camera.js +31 -4
  391. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  392. package/src/nodes/accessors/InstanceNode.js +5 -4
  393. package/src/nodes/accessors/Lights.js +2 -2
  394. package/src/nodes/accessors/MaterialNode.js +4 -0
  395. package/src/nodes/accessors/ModelNode.js +1 -1
  396. package/src/nodes/accessors/Normal.js +102 -16
  397. package/src/nodes/accessors/Object3DNode.js +7 -8
  398. package/src/nodes/accessors/Position.js +14 -4
  399. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  400. package/src/nodes/accessors/ReferenceNode.js +1 -1
  401. package/src/nodes/accessors/ReflectVector.js +3 -3
  402. package/src/nodes/accessors/SkinningNode.js +3 -2
  403. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  404. package/src/nodes/accessors/StorageTextureNode.js +14 -3
  405. package/src/nodes/accessors/Tangent.js +25 -17
  406. package/src/nodes/accessors/TangentUtils.js +46 -0
  407. package/src/nodes/accessors/TextureBicubic.js +21 -3
  408. package/src/nodes/accessors/TextureNode.js +59 -8
  409. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  410. package/src/nodes/accessors/VelocityNode.js +1 -0
  411. package/src/nodes/accessors/VertexColorNode.js +4 -4
  412. package/src/nodes/code/CodeNode.js +8 -11
  413. package/src/nodes/core/AssignNode.js +27 -5
  414. package/src/nodes/core/AttributeNode.js +2 -2
  415. package/src/nodes/core/ContextNode.js +7 -3
  416. package/src/nodes/core/Node.js +69 -20
  417. package/src/nodes/core/NodeBuilder.js +248 -29
  418. package/src/nodes/core/NodeUtils.js +42 -0
  419. package/src/nodes/core/NodeVarying.js +19 -1
  420. package/src/nodes/core/PropertyNode.js +8 -12
  421. package/src/nodes/core/StackNode.js +129 -26
  422. package/src/nodes/core/StructTypeNode.js +26 -4
  423. package/src/nodes/core/SubBuildNode.js +89 -0
  424. package/src/nodes/core/VarNode.js +11 -2
  425. package/src/nodes/core/VaryingNode.js +45 -24
  426. package/src/nodes/display/BlendModes.js +42 -1
  427. package/src/nodes/display/ColorSpaceNode.js +4 -27
  428. package/src/nodes/display/FrontFacingNode.js +34 -2
  429. package/src/nodes/display/NormalMapNode.js +19 -50
  430. package/src/nodes/display/PassNode.js +18 -19
  431. package/src/nodes/display/ScreenNode.js +0 -26
  432. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  433. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  434. package/src/nodes/functions/PhongLightingModel.js +3 -3
  435. package/src/nodes/functions/PhysicalLightingModel.js +14 -14
  436. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  437. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  438. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  439. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  440. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  441. package/src/nodes/gpgpu/ComputeNode.js +1 -1
  442. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  443. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  444. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  445. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  446. package/src/nodes/lighting/LightsNode.js +29 -11
  447. package/src/nodes/lighting/ProjectorLightNode.js +78 -0
  448. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  449. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  450. package/src/nodes/lighting/ShadowNode.js +174 -242
  451. package/src/nodes/lighting/SpotLightNode.js +44 -7
  452. package/src/nodes/materialx/lib/mx_noise.js +1 -1
  453. package/src/nodes/math/ConditionalNode.js +0 -19
  454. package/src/nodes/math/MathNode.js +68 -21
  455. package/src/nodes/math/OperatorNode.js +108 -98
  456. package/src/nodes/shapes/Shapes.js +5 -4
  457. package/src/nodes/tsl/TSLBase.js +1 -0
  458. package/src/nodes/tsl/TSLCore.js +160 -65
  459. package/src/nodes/utils/DebugNode.js +15 -3
  460. package/src/nodes/utils/Discard.js +2 -2
  461. package/src/nodes/utils/EquirectUV.js +27 -0
  462. package/src/nodes/utils/LoopNode.js +64 -34
  463. package/src/nodes/utils/MatcapUV.js +22 -0
  464. package/src/nodes/utils/RTTNode.js +13 -5
  465. package/src/nodes/utils/ReflectorNode.js +77 -7
  466. package/src/nodes/utils/SampleNode.js +81 -0
  467. package/src/nodes/utils/TriplanarTextures.js +65 -0
  468. package/src/objects/BatchedMesh.js +16 -4
  469. package/src/objects/Mesh.js +9 -0
  470. package/src/objects/Skeleton.js +1 -1
  471. package/src/objects/Sprite.js +9 -0
  472. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  473. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  474. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  475. package/src/renderers/WebGLRenderer.js +25 -11
  476. package/src/renderers/common/Animation.js +2 -2
  477. package/src/renderers/common/Background.js +13 -2
  478. package/src/renderers/common/CubeRenderTarget.js +1 -1
  479. package/src/renderers/common/RenderList.js +0 -4
  480. package/src/renderers/common/RenderObject.js +80 -4
  481. package/src/renderers/common/Renderer.js +116 -8
  482. package/src/renderers/common/Storage3DTexture.js +79 -0
  483. package/src/renderers/common/StorageArrayTexture.js +63 -0
  484. package/src/renderers/common/Textures.js +15 -21
  485. package/src/renderers/common/TimestampQueryPool.js +1 -0
  486. package/src/renderers/common/Uniform.js +1 -1
  487. package/src/renderers/common/UniformsGroup.js +14 -18
  488. package/src/renderers/common/XRManager.js +157 -27
  489. package/src/renderers/common/XRRenderTarget.js +21 -4
  490. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  491. package/src/renderers/common/nodes/Nodes.js +13 -3
  492. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +1 -1
  493. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  494. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  495. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  496. package/src/renderers/webgl/WebGLPrograms.js +4 -2
  497. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  498. package/src/renderers/webgl/WebGLState.js +4 -4
  499. package/src/renderers/webgl/WebGLTextures.js +144 -4
  500. package/src/renderers/webgl/WebGLUtils.js +1 -3
  501. package/src/renderers/webgl-fallback/WebGLBackend.js +244 -87
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +73 -7
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  504. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  507. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  508. package/src/renderers/webgpu/WebGPUBackend.js +451 -128
  509. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  510. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  511. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  512. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +86 -33
  513. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  514. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  515. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +28 -5
  516. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  517. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -8
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +45 -50
  519. package/src/renderers/webxr/WebXRController.js +1 -1
  520. package/src/renderers/webxr/WebXRManager.js +2 -1
  521. package/src/textures/DepthTexture.js +6 -10
  522. package/src/textures/Source.js +22 -0
  523. package/src/textures/Texture.js +118 -1
  524. package/src/textures/VideoTexture.js +1 -1
  525. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  526. package/src/core/RenderTargetArray.js +0 -40
  527. package/src/nodes/utils/EquirectUVNode.js +0 -65
  528. package/src/nodes/utils/MatcapUVNode.js +0 -49
  529. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -483,7 +483,7 @@ class Curve {
483
483
 
484
484
  const data = {
485
485
  metadata: {
486
- version: 4.6,
486
+ version: 4.7,
487
487
  type: 'Curve',
488
488
  generator: 'Curve.toJSON'
489
489
  }
@@ -190,11 +190,11 @@ class Path extends CurvePath {
190
190
  * Adds an arc as an instance of {@link EllipseCurve} to the path, positioned relative
191
191
  * to the current point.
192
192
  *
193
- * @param {number} aX - The x coordinate of the center of the arc offsetted from the previous curve.
194
- * @param {number} aY - The y coordinate of the center of the arc offsetted from the previous curve.
195
- * @param {number} aRadius - The radius of the arc.
196
- * @param {number} aStartAngle - The start angle in radians.
197
- * @param {number} aEndAngle - The end angle in radians.
193
+ * @param {number} [aX=0] - The x coordinate of the center of the arc offsetted from the previous curve.
194
+ * @param {number} [aY=0] - The y coordinate of the center of the arc offsetted from the previous curve.
195
+ * @param {number} [aRadius=1] - The radius of the arc.
196
+ * @param {number} [aStartAngle=0] - The start angle in radians.
197
+ * @param {number} [aEndAngle=Math.PI*2] - The end angle in radians.
198
198
  * @param {boolean} [aClockwise=false] - Whether to sweep the arc clockwise or not.
199
199
  * @return {Path} A reference to this path.
200
200
  */
@@ -213,11 +213,11 @@ class Path extends CurvePath {
213
213
  /**
214
214
  * Adds an absolutely positioned arc as an instance of {@link EllipseCurve} to the path.
215
215
  *
216
- * @param {number} aX - The x coordinate of the center of the arc.
217
- * @param {number} aY - The y coordinate of the center of the arc.
218
- * @param {number} aRadius - The radius of the arc.
219
- * @param {number} aStartAngle - The start angle in radians.
220
- * @param {number} aEndAngle - The end angle in radians.
216
+ * @param {number} [aX=0] - The x coordinate of the center of the arc.
217
+ * @param {number} [aY=0] - The y coordinate of the center of the arc.
218
+ * @param {number} [aRadius=1] - The radius of the arc.
219
+ * @param {number} [aStartAngle=0] - The start angle in radians.
220
+ * @param {number} [aEndAngle=Math.PI*2] - The end angle in radians.
221
221
  * @param {boolean} [aClockwise=false] - Whether to sweep the arc clockwise or not.
222
222
  * @return {Path} A reference to this path.
223
223
  */
@@ -233,12 +233,12 @@ class Path extends CurvePath {
233
233
  * Adds an ellipse as an instance of {@link EllipseCurve} to the path, positioned relative
234
234
  * to the current point
235
235
  *
236
- * @param {number} aX - The x coordinate of the center of the ellipse offsetted from the previous curve.
237
- * @param {number} aY - The y coordinate of the center of the ellipse offsetted from the previous curve.
238
- * @param {number} xRadius - The radius of the ellipse in the x axis.
239
- * @param {number} yRadius - The radius of the ellipse in the y axis.
240
- * @param {number} aStartAngle - The start angle in radians.
241
- * @param {number} aEndAngle - The end angle in radians.
236
+ * @param {number} [aX=0] - The x coordinate of the center of the ellipse offsetted from the previous curve.
237
+ * @param {number} [aY=0] - The y coordinate of the center of the ellipse offsetted from the previous curve.
238
+ * @param {number} [xRadius=1] - The radius of the ellipse in the x axis.
239
+ * @param {number} [yRadius=1] - The radius of the ellipse in the y axis.
240
+ * @param {number} [aStartAngle=0] - The start angle in radians.
241
+ * @param {number} [aEndAngle=Math.PI*2] - The end angle in radians.
242
242
  * @param {boolean} [aClockwise=false] - Whether to sweep the ellipse clockwise or not.
243
243
  * @param {number} [aRotation=0] - The rotation angle of the ellipse in radians, counterclockwise from the positive X axis.
244
244
  * @return {Path} A reference to this path.
@@ -257,12 +257,12 @@ class Path extends CurvePath {
257
257
  /**
258
258
  * Adds an absolutely positioned ellipse as an instance of {@link EllipseCurve} to the path.
259
259
  *
260
- * @param {number} aX - The x coordinate of the absolute center of the ellipse.
261
- * @param {number} aY - The y coordinate of the absolute center of the ellipse.
262
- * @param {number} xRadius - The radius of the ellipse in the x axis.
263
- * @param {number} yRadius - The radius of the ellipse in the y axis.
264
- * @param {number} aStartAngle - The start angle in radians.
265
- * @param {number} aEndAngle - The end angle in radians.
260
+ * @param {number} [aX=0] - The x coordinate of the absolute center of the ellipse.
261
+ * @param {number} [aY=0] - The y coordinate of the absolute center of the ellipse.
262
+ * @param {number} [xRadius=1] - The radius of the ellipse in the x axis.
263
+ * @param {number} [yRadius=1] - The radius of the ellipse in the y axis.
264
+ * @param {number} [aStartAngle=0] - The start angle in radians.
265
+ * @param {number} [aEndAngle=Math.PI*2] - The end angle in radians.
266
266
  * @param {boolean} [aClockwise=false] - Whether to sweep the ellipse clockwise or not.
267
267
  * @param {number} [aRotation=0] - The rotation angle of the ellipse in radians, counterclockwise from the positive X axis.
268
268
  * @return {Path} A reference to this path.
@@ -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
 
@@ -74,7 +74,7 @@ class FileLoader extends Loader {
74
74
 
75
75
  url = this.manager.resolveURL( url );
76
76
 
77
- const cached = Cache.get( url );
77
+ const cached = Cache.get( `file:${url}` );
78
78
 
79
79
  if ( cached !== undefined ) {
80
80
 
@@ -263,7 +263,7 @@ class FileLoader extends Loader {
263
263
 
264
264
  // Add to cache only on HTTP success, so that we do not cache
265
265
  // error response bodies as proper responses to requests.
266
- Cache.add( url, data );
266
+ Cache.add( `file:${url}`, data );
267
267
 
268
268
  const callbacks = loading[ url ];
269
269
  delete loading[ url ];
@@ -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();
@@ -100,7 +102,7 @@ class ImageBitmapLoader extends Loader {
100
102
 
101
103
  const scope = this;
102
104
 
103
- const cached = Cache.get( url );
105
+ const cached = Cache.get( `image-bitmap:${url}` );
104
106
 
105
107
  if ( cached !== undefined ) {
106
108
 
@@ -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
  }
@@ -151,7 +165,7 @@ class ImageBitmapLoader extends Loader {
151
165
 
152
166
  } ).then( function ( imageBitmap ) {
153
167
 
154
- Cache.add( url, imageBitmap );
168
+ Cache.add( `image-bitmap:${url}`, imageBitmap );
155
169
 
156
170
  if ( onLoad ) onLoad( imageBitmap );
157
171
 
@@ -163,14 +177,16 @@ class ImageBitmapLoader extends Loader {
163
177
 
164
178
  if ( onError ) onError( e );
165
179
 
166
- Cache.remove( url );
180
+ _errorMap.set( promise, e );
181
+
182
+ Cache.remove( `image-bitmap:${url}` );
167
183
 
168
184
  scope.manager.itemError( url );
169
185
  scope.manager.itemEnd( url );
170
186
 
171
187
  } );
172
188
 
173
- Cache.add( url, promise );
189
+ Cache.add( `image-bitmap:${url}`, promise );
174
190
  scope.manager.itemStart( url );
175
191
 
176
192
  }