@plastic-software/three 0.175.14 → 0.179.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (572) hide show
  1. package/README.md +4 -4
  2. package/build/three.cjs +8402 -6787
  3. package/build/three.core.js +8007 -6688
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +397 -102
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +84 -27
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +6831 -2838
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +6648 -2838
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +1 -3
  14. package/examples/jsm/animation/AnimationClipCreator.js +1 -0
  15. package/examples/jsm/animation/CCDIKSolver.js +6 -3
  16. package/examples/jsm/capabilities/WebGL.js +1 -27
  17. package/examples/jsm/capabilities/WebGPU.js +2 -1
  18. package/examples/jsm/controls/ArcballControls.js +15 -4
  19. package/examples/jsm/controls/DragControls.js +1 -0
  20. package/examples/jsm/controls/FirstPersonControls.js +1 -0
  21. package/examples/jsm/controls/FlyControls.js +1 -0
  22. package/examples/jsm/controls/MapControls.js +1 -0
  23. package/examples/jsm/controls/OrbitControls.js +1 -0
  24. package/examples/jsm/controls/PointerLockControls.js +5 -3
  25. package/examples/jsm/controls/TrackballControls.js +1 -0
  26. package/examples/jsm/controls/TransformControls.js +62 -14
  27. package/examples/jsm/csm/CSM.js +2 -0
  28. package/examples/jsm/csm/CSMFrustum.js +2 -0
  29. package/examples/jsm/csm/CSMHelper.js +1 -0
  30. package/examples/jsm/csm/CSMShader.js +4 -1
  31. package/examples/jsm/csm/CSMShadowNode.js +22 -8
  32. package/examples/jsm/curves/CurveExtras.js +14 -0
  33. package/examples/jsm/curves/NURBSCurve.js +1 -0
  34. package/examples/jsm/curves/NURBSSurface.js +2 -0
  35. package/examples/jsm/curves/NURBSUtils.js +4 -1
  36. package/examples/jsm/curves/NURBSVolume.js +2 -0
  37. package/examples/jsm/effects/AnaglyphEffect.js +2 -0
  38. package/examples/jsm/effects/AsciiEffect.js +2 -0
  39. package/examples/jsm/effects/OutlineEffect.js +2 -0
  40. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
  41. package/examples/jsm/effects/StereoEffect.js +2 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +1 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +57 -38
  44. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  45. package/examples/jsm/exporters/EXRExporter.js +2 -0
  46. package/examples/jsm/exporters/GLTFExporter.js +7 -4
  47. package/examples/jsm/exporters/KTX2Exporter.js +2 -0
  48. package/examples/jsm/exporters/OBJExporter.js +3 -1
  49. package/examples/jsm/exporters/PLYExporter.js +4 -2
  50. package/examples/jsm/exporters/STLExporter.js +2 -0
  51. package/examples/jsm/exporters/USDZExporter.js +679 -300
  52. package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +1 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +1 -0
  55. package/examples/jsm/geometries/ParametricFunctions.js +4 -1
  56. package/examples/jsm/geometries/ParametricGeometry.js +1 -0
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
  58. package/examples/jsm/geometries/TeapotGeometry.js +1 -0
  59. package/examples/jsm/geometries/TextGeometry.js +1 -0
  60. package/examples/jsm/helpers/LightProbeHelper.js +1 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
  64. package/examples/jsm/helpers/RapierHelper.js +59 -0
  65. package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
  66. package/examples/jsm/helpers/TextureHelper.js +1 -0
  67. package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
  68. package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
  69. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
  70. package/examples/jsm/helpers/ViewHelper.js +1 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +11 -2
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -0
  73. package/examples/jsm/interactive/SelectionBox.js +2 -0
  74. package/examples/jsm/interactive/SelectionHelper.js +2 -0
  75. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  76. package/examples/jsm/lighting/TiledLighting.js +1 -0
  77. package/examples/jsm/lights/LightProbeGenerator.js +15 -3
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  79. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  80. package/examples/jsm/lines/Line2.js +1 -0
  81. package/examples/jsm/lines/LineGeometry.js +1 -0
  82. package/examples/jsm/lines/LineMaterial.js +4 -4
  83. package/examples/jsm/lines/LineSegments2.js +1 -0
  84. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  85. package/examples/jsm/lines/Wireframe.js +1 -0
  86. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  87. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  88. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  89. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  90. package/examples/jsm/loaders/3DMLoader.js +1 -0
  91. package/examples/jsm/loaders/3MFLoader.js +1 -0
  92. package/examples/jsm/loaders/AMFLoader.js +1 -0
  93. package/examples/jsm/loaders/BVHLoader.js +1 -0
  94. package/examples/jsm/loaders/ColladaLoader.js +6 -5
  95. package/examples/jsm/loaders/DDSLoader.js +1 -0
  96. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  97. package/examples/jsm/loaders/EXRLoader.js +211 -22
  98. package/examples/jsm/loaders/FBXLoader.js +25 -23
  99. package/examples/jsm/loaders/FontLoader.js +1 -0
  100. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  101. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  102. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  103. package/examples/jsm/loaders/IESLoader.js +1 -0
  104. package/examples/jsm/loaders/KMZLoader.js +1 -0
  105. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  106. package/examples/jsm/loaders/KTXLoader.js +1 -0
  107. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  108. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  110. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  111. package/examples/jsm/loaders/LWOLoader.js +1 -13
  112. package/examples/jsm/loaders/LottieLoader.js +15 -0
  113. package/examples/jsm/loaders/MD2Loader.js +1 -0
  114. package/examples/jsm/loaders/MDDLoader.js +1 -0
  115. package/examples/jsm/loaders/MTLLoader.js +4 -3
  116. package/examples/jsm/loaders/MaterialXLoader.js +213 -30
  117. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  118. package/examples/jsm/loaders/OBJLoader.js +1 -0
  119. package/examples/jsm/loaders/PCDLoader.js +122 -19
  120. package/examples/jsm/loaders/PDBLoader.js +1 -0
  121. package/examples/jsm/loaders/PLYLoader.js +1 -0
  122. package/examples/jsm/loaders/PVRLoader.js +1 -0
  123. package/examples/jsm/loaders/RGBELoader.js +1 -0
  124. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  125. package/examples/jsm/loaders/STLLoader.js +1 -0
  126. package/examples/jsm/loaders/SVGLoader.js +1 -0
  127. package/examples/jsm/loaders/TDSLoader.js +1 -0
  128. package/examples/jsm/loaders/TGALoader.js +1 -0
  129. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  130. package/examples/jsm/loaders/TTFLoader.js +14 -1
  131. package/examples/jsm/loaders/USDLoader.js +219 -0
  132. package/examples/jsm/loaders/USDZLoader.js +4 -891
  133. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  134. package/examples/jsm/loaders/VOXLoader.js +1 -0
  135. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  136. package/examples/jsm/loaders/VTKLoader.js +1 -0
  137. package/examples/jsm/loaders/XYZLoader.js +1 -0
  138. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  139. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  140. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  141. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  142. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  143. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  144. package/examples/jsm/math/Capsule.js +2 -0
  145. package/examples/jsm/math/ColorConverter.js +1 -0
  146. package/examples/jsm/math/ConvexHull.js +2 -0
  147. package/examples/jsm/math/ImprovedNoise.js +19 -14
  148. package/examples/jsm/math/Lut.js +2 -0
  149. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  150. package/examples/jsm/math/OBB.js +2 -0
  151. package/examples/jsm/math/Octree.js +20 -1
  152. package/examples/jsm/math/SimplexNoise.js +2 -0
  153. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  155. package/examples/jsm/misc/Gyroscope.js +1 -0
  156. package/examples/jsm/misc/MD2Character.js +2 -0
  157. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  158. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  159. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  160. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  161. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  162. package/examples/jsm/misc/RollerCoaster.js +5 -0
  163. package/examples/jsm/misc/TubePainter.js +1 -0
  164. package/examples/jsm/misc/Volume.js +2 -0
  165. package/examples/jsm/misc/VolumeSlice.js +1 -0
  166. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  167. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  168. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  169. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  170. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  171. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  172. package/examples/jsm/objects/Lensflare.js +3 -0
  173. package/examples/jsm/objects/LensflareMesh.js +4 -3
  174. package/examples/jsm/objects/MarchingCubes.js +2 -0
  175. package/examples/jsm/objects/Reflector.js +1 -0
  176. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  177. package/examples/jsm/objects/Refractor.js +1 -0
  178. package/examples/jsm/objects/ShadowMesh.js +1 -0
  179. package/examples/jsm/objects/Sky.js +2 -1
  180. package/examples/jsm/objects/SkyMesh.js +22 -19
  181. package/examples/jsm/objects/Water.js +1 -0
  182. package/examples/jsm/objects/Water2.js +1 -0
  183. package/examples/jsm/objects/Water2Mesh.js +3 -1
  184. package/examples/jsm/objects/WaterMesh.js +2 -1
  185. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  186. package/examples/jsm/physics/JoltPhysics.js +1 -0
  187. package/examples/jsm/physics/RapierPhysics.js +149 -13
  188. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  189. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  190. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  191. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  192. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  193. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  194. package/examples/jsm/postprocessing/EffectComposer.js +4 -2
  195. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  196. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  197. package/examples/jsm/postprocessing/GTAOPass.js +14 -12
  198. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  199. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  200. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  201. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  202. package/examples/jsm/postprocessing/OutlinePass.js +22 -19
  203. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  204. package/examples/jsm/postprocessing/Pass.js +3 -1
  205. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  206. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  207. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  208. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  209. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  210. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  211. package/examples/jsm/postprocessing/SSAOPass.js +12 -10
  212. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  213. package/examples/jsm/postprocessing/SavePass.js +2 -1
  214. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  215. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  216. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  217. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  218. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  219. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  220. package/examples/jsm/renderers/Projector.js +2 -0
  221. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  222. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  223. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  224. package/examples/jsm/shaders/BasicShader.js +4 -1
  225. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  226. package/examples/jsm/shaders/BlendShader.js +4 -1
  227. package/examples/jsm/shaders/BokehShader.js +4 -1
  228. package/examples/jsm/shaders/BokehShader2.js +4 -1
  229. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  230. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  231. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  232. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  233. package/examples/jsm/shaders/CopyShader.js +4 -1
  234. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  235. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  236. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  237. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  238. package/examples/jsm/shaders/ExposureShader.js +4 -1
  239. package/examples/jsm/shaders/FXAAShader.js +4 -1
  240. package/examples/jsm/shaders/FilmShader.js +4 -1
  241. package/examples/jsm/shaders/FocusShader.js +4 -1
  242. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  243. package/examples/jsm/shaders/GTAOShader.js +4 -1
  244. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  245. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  246. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  247. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  248. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  249. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  250. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  251. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  252. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  253. package/examples/jsm/shaders/MirrorShader.js +4 -1
  254. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  255. package/examples/jsm/shaders/OutputShader.js +4 -1
  256. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  257. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  258. package/examples/jsm/shaders/SAOShader.js +4 -1
  259. package/examples/jsm/shaders/SMAAShader.js +1 -0
  260. package/examples/jsm/shaders/SSAOShader.js +4 -1
  261. package/examples/jsm/shaders/SSRShader.js +1 -0
  262. package/examples/jsm/shaders/SepiaShader.js +4 -1
  263. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  264. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  265. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  266. package/examples/jsm/shaders/ToonShader.js +2 -1
  267. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  268. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
  269. package/examples/jsm/shaders/VelocityShader.js +4 -1
  270. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  271. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  272. package/examples/jsm/shaders/VignetteShader.js +4 -1
  273. package/examples/jsm/shaders/VolumeShader.js +5 -2
  274. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  275. package/examples/jsm/textures/FlakesTexture.js +2 -0
  276. package/examples/jsm/transpiler/AST.js +381 -30
  277. package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
  278. package/examples/jsm/transpiler/Linker.js +327 -0
  279. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  280. package/examples/jsm/transpiler/Transpiler.js +19 -1
  281. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  282. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  283. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  284. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  285. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  286. package/examples/jsm/tsl/display/BloomNode.js +9 -7
  287. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  288. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  289. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  290. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  291. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  292. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  293. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  294. package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
  295. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  296. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  297. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  298. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  299. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  300. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  301. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  302. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  303. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  304. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  305. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  306. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  307. package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
  308. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  309. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  310. package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
  311. package/examples/jsm/tsl/math/Bayer.js +4 -1
  312. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  313. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  314. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  315. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  316. package/examples/jsm/utils/CameraUtils.js +4 -1
  317. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  318. package/examples/jsm/utils/GeometryUtils.js +4 -1
  319. package/examples/jsm/utils/LDrawUtils.js +2 -0
  320. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  321. package/examples/jsm/utils/SceneUtils.js +4 -1
  322. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  323. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  324. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  325. package/examples/jsm/utils/SortUtils.js +4 -1
  326. package/examples/jsm/utils/UVsDebug.js +4 -1
  327. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  328. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  329. package/examples/jsm/utils/WorkerPool.js +2 -0
  330. package/examples/jsm/webxr/ARButton.js +1 -0
  331. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  332. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  333. package/examples/jsm/webxr/Text2D.js +4 -1
  334. package/examples/jsm/webxr/VRButton.js +1 -0
  335. package/examples/jsm/webxr/XRButton.js +1 -0
  336. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  338. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  339. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  340. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  341. package/examples/jsm/webxr/XRPlanes.js +1 -0
  342. package/package.json +6 -4
  343. package/src/Three.Core.js +2 -1
  344. package/src/Three.TSL.js +83 -26
  345. package/src/Three.WebGPU.Nodes.js +1 -0
  346. package/src/Three.WebGPU.js +3 -0
  347. package/src/animation/KeyframeTrack.js +1 -1
  348. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  350. package/src/audio/AudioListener.js +13 -10
  351. package/src/cameras/ArrayCamera.js +9 -1
  352. package/src/cameras/Camera.js +14 -0
  353. package/src/cameras/OrthographicCamera.js +1 -1
  354. package/src/cameras/PerspectiveCamera.js +1 -1
  355. package/src/constants.js +47 -20
  356. package/src/core/BufferAttribute.js +3 -3
  357. package/src/core/BufferGeometry.js +2 -5
  358. package/src/core/Clock.js +2 -8
  359. package/src/core/GLBufferAttribute.js +13 -1
  360. package/src/core/Object3D.js +23 -22
  361. package/src/core/RenderTarget.js +65 -21
  362. package/src/core/RenderTarget3D.js +1 -0
  363. package/{examples/jsm/misc → src/core}/Timer.js +4 -40
  364. package/src/extras/PMREMGenerator.js +11 -0
  365. package/src/extras/TextureUtils.js +1 -5
  366. package/src/extras/core/Curve.js +1 -1
  367. package/src/extras/core/Path.js +22 -22
  368. package/src/geometries/CapsuleGeometry.js +167 -17
  369. package/src/geometries/ExtrudeGeometry.js +39 -29
  370. package/src/helpers/ArrowHelper.js +2 -2
  371. package/src/helpers/CameraHelper.js +41 -11
  372. package/src/helpers/SkeletonHelper.js +36 -7
  373. package/src/lights/LightShadow.js +34 -7
  374. package/src/lights/PointLightShadow.js +1 -1
  375. package/src/lights/SpotLightShadow.js +9 -1
  376. package/src/lights/webgpu/ProjectorLight.js +46 -0
  377. package/src/loaders/BufferGeometryLoader.js +1 -10
  378. package/src/loaders/FileLoader.js +27 -4
  379. package/src/loaders/ImageBitmapLoader.js +48 -9
  380. package/src/loaders/ImageLoader.js +55 -8
  381. package/src/loaders/Loader.js +14 -0
  382. package/src/loaders/LoadingManager.js +23 -0
  383. package/src/loaders/ObjectLoader.js +44 -16
  384. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  385. package/src/materials/Material.js +1 -7
  386. package/src/materials/MeshBasicMaterial.js +1 -1
  387. package/src/materials/nodes/Line2NodeMaterial.js +0 -8
  388. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  389. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  390. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  391. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  392. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  393. package/src/materials/nodes/NodeMaterial.js +106 -20
  394. package/src/materials/nodes/PointsNodeMaterial.js +5 -0
  395. package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
  396. package/src/math/Box3.js +28 -0
  397. package/src/math/Color.js +7 -7
  398. package/src/math/ColorManagement.js +22 -3
  399. package/src/math/Frustum.js +25 -9
  400. package/src/math/FrustumArray.js +258 -0
  401. package/src/math/Line3.js +129 -2
  402. package/src/math/Matrix4.js +48 -27
  403. package/src/math/Quaternion.js +1 -1
  404. package/src/math/Ray.js +2 -0
  405. package/src/math/Sphere.js +28 -0
  406. package/src/math/Spherical.js +2 -2
  407. package/src/nodes/Nodes.js +3 -3
  408. package/src/nodes/TSL.js +6 -3
  409. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  410. package/src/nodes/accessors/Bitangent.js +54 -26
  411. package/src/nodes/accessors/Camera.js +40 -13
  412. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  413. package/src/nodes/accessors/InstanceNode.js +5 -4
  414. package/src/nodes/accessors/Lights.js +2 -2
  415. package/src/nodes/accessors/MaterialNode.js +4 -0
  416. package/src/nodes/accessors/ModelNode.js +1 -1
  417. package/src/nodes/accessors/Normal.js +110 -24
  418. package/src/nodes/accessors/Object3DNode.js +7 -8
  419. package/src/nodes/accessors/Position.js +14 -4
  420. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  421. package/src/nodes/accessors/ReferenceNode.js +19 -4
  422. package/src/nodes/accessors/ReflectVector.js +3 -3
  423. package/src/nodes/accessors/SceneNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +3 -2
  425. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  426. package/src/nodes/accessors/StorageTextureNode.js +15 -4
  427. package/src/nodes/accessors/Tangent.js +25 -17
  428. package/src/nodes/accessors/TangentUtils.js +46 -0
  429. package/src/nodes/accessors/TextureBicubic.js +21 -3
  430. package/src/nodes/accessors/TextureNode.js +71 -8
  431. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  432. package/src/nodes/accessors/VelocityNode.js +1 -0
  433. package/src/nodes/accessors/VertexColorNode.js +4 -4
  434. package/src/nodes/code/CodeNode.js +8 -11
  435. package/src/nodes/core/ArrayNode.js +12 -0
  436. package/src/nodes/core/AssignNode.js +30 -5
  437. package/src/nodes/core/AttributeNode.js +2 -2
  438. package/src/nodes/core/ContextNode.js +27 -4
  439. package/src/nodes/core/Node.js +83 -22
  440. package/src/nodes/core/NodeBuilder.js +273 -49
  441. package/src/nodes/core/NodeUtils.js +46 -1
  442. package/src/nodes/core/NodeVarying.js +19 -1
  443. package/src/nodes/core/PropertyNode.js +8 -12
  444. package/src/nodes/core/StackNode.js +171 -26
  445. package/src/nodes/core/StructTypeNode.js +26 -4
  446. package/src/nodes/core/SubBuildNode.js +89 -0
  447. package/src/nodes/core/UniformNode.js +63 -5
  448. package/src/nodes/core/VarNode.js +102 -4
  449. package/src/nodes/core/VaryingNode.js +45 -24
  450. package/src/nodes/display/BlendModes.js +42 -1
  451. package/src/nodes/display/ColorSpaceNode.js +4 -27
  452. package/src/nodes/display/FrontFacingNode.js +34 -2
  453. package/src/nodes/display/NormalMapNode.js +19 -50
  454. package/src/nodes/display/PassNode.js +165 -20
  455. package/src/nodes/display/ScreenNode.js +0 -26
  456. package/src/nodes/display/ViewportTextureNode.js +67 -7
  457. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  458. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  459. package/src/nodes/functions/PhongLightingModel.js +3 -3
  460. package/src/nodes/functions/PhysicalLightingModel.js +16 -16
  461. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  462. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  463. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  464. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  465. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  466. package/src/nodes/gpgpu/ComputeNode.js +68 -24
  467. package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
  468. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  469. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  470. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  471. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  472. package/src/nodes/lighting/LightsNode.js +29 -11
  473. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  474. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  475. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  476. package/src/nodes/lighting/ShadowNode.js +174 -242
  477. package/src/nodes/lighting/SpotLightNode.js +44 -7
  478. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  479. package/src/nodes/materialx/lib/mx_noise.js +166 -2
  480. package/src/nodes/math/ConditionalNode.js +1 -20
  481. package/src/nodes/math/MathNode.js +146 -75
  482. package/src/nodes/math/OperatorNode.js +129 -119
  483. package/src/nodes/shapes/Shapes.js +5 -4
  484. package/src/nodes/tsl/TSLBase.js +1 -0
  485. package/src/nodes/tsl/TSLCore.js +222 -72
  486. package/src/nodes/utils/DebugNode.js +16 -4
  487. package/src/nodes/utils/Discard.js +2 -2
  488. package/src/nodes/utils/EquirectUV.js +27 -0
  489. package/src/nodes/utils/EventNode.js +83 -0
  490. package/src/nodes/utils/LoopNode.js +64 -34
  491. package/src/nodes/utils/MatcapUV.js +22 -0
  492. package/src/nodes/utils/RTTNode.js +22 -5
  493. package/src/nodes/utils/ReflectorNode.js +77 -7
  494. package/src/nodes/utils/SampleNode.js +81 -0
  495. package/src/nodes/utils/TriplanarTextures.js +65 -0
  496. package/src/objects/BatchedMesh.js +20 -6
  497. package/src/objects/Mesh.js +9 -0
  498. package/src/objects/Skeleton.js +1 -1
  499. package/src/objects/Sprite.js +9 -0
  500. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  501. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  502. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  503. package/src/renderers/WebGLRenderer.js +45 -32
  504. package/src/renderers/common/Animation.js +2 -2
  505. package/src/renderers/common/Background.js +13 -2
  506. package/src/renderers/common/Bindings.js +19 -18
  507. package/src/renderers/common/Color4.js +2 -2
  508. package/src/renderers/common/CubeRenderTarget.js +1 -1
  509. package/src/renderers/common/PostProcessing.js +60 -5
  510. package/src/renderers/common/RenderList.js +0 -4
  511. package/src/renderers/common/RenderObject.js +80 -4
  512. package/src/renderers/common/Renderer.js +133 -22
  513. package/src/renderers/common/SampledTexture.js +3 -71
  514. package/src/renderers/common/Sampler.js +79 -0
  515. package/src/renderers/common/Storage3DTexture.js +100 -0
  516. package/src/renderers/common/StorageArrayTexture.js +84 -0
  517. package/src/renderers/common/StorageTexture.js +19 -0
  518. package/src/renderers/common/Textures.js +34 -24
  519. package/src/renderers/common/TimestampQueryPool.js +1 -0
  520. package/src/renderers/common/Uniform.js +1 -1
  521. package/src/renderers/common/UniformsGroup.js +14 -18
  522. package/src/renderers/common/XRManager.js +183 -35
  523. package/src/renderers/common/XRRenderTarget.js +21 -4
  524. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  525. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  526. package/src/renderers/common/nodes/Nodes.js +13 -3
  527. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  528. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
  529. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  530. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  531. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  532. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  533. package/src/renderers/webgl/WebGLMaterials.js +6 -6
  534. package/src/renderers/webgl/WebGLProgram.js +22 -16
  535. package/src/renderers/webgl/WebGLPrograms.js +8 -6
  536. package/src/renderers/webgl/WebGLShadowMap.js +14 -3
  537. package/src/renderers/webgl/WebGLState.js +4 -4
  538. package/src/renderers/webgl/WebGLTextures.js +163 -11
  539. package/src/renderers/webgl/WebGLUtils.js +1 -3
  540. package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
  541. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
  542. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  543. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  544. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  545. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  546. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  547. package/src/renderers/webgpu/WebGPUBackend.js +505 -143
  548. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  549. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  550. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  551. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
  552. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  553. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  554. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
  555. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  556. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
  557. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
  558. package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
  559. package/src/renderers/webxr/WebXRController.js +1 -1
  560. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  561. package/src/renderers/webxr/WebXRManager.js +70 -9
  562. package/src/textures/DepthTexture.js +6 -10
  563. package/src/textures/ExternalTexture.js +45 -0
  564. package/src/textures/FramebufferTexture.js +2 -2
  565. package/src/textures/Source.js +32 -0
  566. package/src/textures/Texture.js +118 -1
  567. package/src/textures/VideoTexture.js +31 -3
  568. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  569. package/src/core/RenderTargetArray.js +0 -40
  570. package/src/nodes/utils/EquirectUVNode.js +0 -65
  571. package/src/nodes/utils/MatcapUVNode.js +0 -49
  572. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -1,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
  }
@@ -5,7 +5,7 @@ import { Color } from '../math/Color.js';
5
5
  import { LineBasicMaterial } from '../materials/LineBasicMaterial.js';
6
6
  import { BufferGeometry } from '../core/BufferGeometry.js';
7
7
  import { Float32BufferAttribute } from '../core/BufferAttribute.js';
8
- import { WebGLCoordinateSystem } from '../constants.js';
8
+ import { WebGLCoordinateSystem, WebGPUCoordinateSystem } from '../constants.js';
9
9
 
10
10
  const _vector = /*@__PURE__*/ new Vector3();
11
11
  const _camera = /*@__PURE__*/ new Camera();
@@ -159,6 +159,7 @@ class CameraHelper extends LineSegments {
159
159
  * @param {Color} up - The up line color.
160
160
  * @param {Color} target - The target line color.
161
161
  * @param {Color} cross - The cross line color.
162
+ * @return {CameraHelper} A reference to this helper.
162
163
  */
163
164
  setColors( frustum, cone, up, target, cross ) {
164
165
 
@@ -215,6 +216,8 @@ class CameraHelper extends LineSegments {
215
216
 
216
217
  colorAttribute.needsUpdate = true;
217
218
 
219
+ return this;
220
+
218
221
  }
219
222
 
220
223
  /**
@@ -227,17 +230,44 @@ class CameraHelper extends LineSegments {
227
230
 
228
231
  const w = 1, h = 1;
229
232
 
233
+ let nearZ, farZ;
234
+
230
235
  // we need just camera projection matrix inverse
231
236
  // world matrix must be identity
232
237
 
233
238
  _camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );
234
239
 
235
240
  // Adjust z values based on coordinate system
236
- const nearZ = this.camera.coordinateSystem === WebGLCoordinateSystem ? - 1 : 0;
241
+
242
+ if ( this.camera.reversedDepth === true ) {
243
+
244
+ nearZ = 1;
245
+ farZ = 0;
246
+
247
+ } else {
248
+
249
+ if ( this.camera.coordinateSystem === WebGLCoordinateSystem ) {
250
+
251
+ nearZ = - 1;
252
+ farZ = 1;
253
+
254
+ } else if ( this.camera.coordinateSystem === WebGPUCoordinateSystem ) {
255
+
256
+ nearZ = 0;
257
+ farZ = 1;
258
+
259
+ } else {
260
+
261
+ throw new Error( 'THREE.CameraHelper.update(): Invalid coordinate system: ' + this.camera.coordinateSystem );
262
+
263
+ }
264
+
265
+ }
266
+
237
267
 
238
268
  // center / target
239
269
  setPoint( 'c', pointMap, geometry, _camera, 0, 0, nearZ );
240
- setPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );
270
+ setPoint( 't', pointMap, geometry, _camera, 0, 0, farZ );
241
271
 
242
272
  // near
243
273
 
@@ -248,10 +278,10 @@ class CameraHelper extends LineSegments {
248
278
 
249
279
  // far
250
280
 
251
- setPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 );
252
- setPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 );
253
- setPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 );
254
- setPoint( 'f4', pointMap, geometry, _camera, w, h, 1 );
281
+ setPoint( 'f1', pointMap, geometry, _camera, - w, - h, farZ );
282
+ setPoint( 'f2', pointMap, geometry, _camera, w, - h, farZ );
283
+ setPoint( 'f3', pointMap, geometry, _camera, - w, h, farZ );
284
+ setPoint( 'f4', pointMap, geometry, _camera, w, h, farZ );
255
285
 
256
286
  // up
257
287
 
@@ -261,10 +291,10 @@ class CameraHelper extends LineSegments {
261
291
 
262
292
  // cross
263
293
 
264
- setPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 );
265
- setPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 );
266
- setPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );
267
- setPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );
294
+ setPoint( 'cf1', pointMap, geometry, _camera, - w, 0, farZ );
295
+ setPoint( 'cf2', pointMap, geometry, _camera, w, 0, farZ );
296
+ setPoint( 'cf3', pointMap, geometry, _camera, 0, - h, farZ );
297
+ setPoint( 'cf4', pointMap, geometry, _camera, 0, h, farZ );
268
298
 
269
299
  setPoint( 'cn1', pointMap, geometry, _camera, - w, 0, nearZ );
270
300
  setPoint( 'cn2', pointMap, geometry, _camera, w, 0, nearZ );
@@ -23,7 +23,7 @@ const _matrixWorldInv = /*@__PURE__*/ new Matrix4();
23
23
  class SkeletonHelper extends LineSegments {
24
24
 
25
25
  /**
26
- * Constructs a new hemisphere light helper.
26
+ * Constructs a new skeleton helper.
27
27
  *
28
28
  * @param {Object3D} object - Usually an instance of {@link SkinnedMesh}. However, any 3D object
29
29
  * can be used if it represents a hierarchy of bones (see {@link Bone}).
@@ -37,9 +37,6 @@ class SkeletonHelper extends LineSegments {
37
37
  const vertices = [];
38
38
  const colors = [];
39
39
 
40
- const color1 = new Color( 0, 0, 1 );
41
- const color2 = new Color( 0, 1, 0 );
42
-
43
40
  for ( let i = 0; i < bones.length; i ++ ) {
44
41
 
45
42
  const bone = bones[ i ];
@@ -48,8 +45,8 @@ class SkeletonHelper extends LineSegments {
48
45
 
49
46
  vertices.push( 0, 0, 0 );
50
47
  vertices.push( 0, 0, 0 );
51
- colors.push( color1.r, color1.g, color1.b );
52
- colors.push( color2.r, color2.g, color2.b );
48
+ colors.push( 0, 0, 0 );
49
+ colors.push( 0, 0, 0 );
53
50
 
54
51
  }
55
52
 
@@ -81,7 +78,7 @@ class SkeletonHelper extends LineSegments {
81
78
  this.root = object;
82
79
 
83
80
  /**
84
- * he list of bones that the helper visualizes.
81
+ * The list of bones that the helper visualizes.
85
82
  *
86
83
  * @type {Array<Bone>}
87
84
  */
@@ -90,6 +87,13 @@ class SkeletonHelper extends LineSegments {
90
87
  this.matrix = object.matrixWorld;
91
88
  this.matrixAutoUpdate = false;
92
89
 
90
+ // colors
91
+
92
+ const color1 = new Color( 0x0000ff );
93
+ const color2 = new Color( 0x00ff00 );
94
+
95
+ this.setColors( color1, color2 );
96
+
93
97
  }
94
98
 
95
99
  updateMatrixWorld( force ) {
@@ -127,6 +131,31 @@ class SkeletonHelper extends LineSegments {
127
131
 
128
132
  }
129
133
 
134
+ /**
135
+ * Defines the colors of the helper.
136
+ *
137
+ * @param {Color} color1 - The first line color for each bone.
138
+ * @param {Color} color2 - The second line color for each bone.
139
+ * @return {SkeletonHelper} A reference to this helper.
140
+ */
141
+ setColors( color1, color2 ) {
142
+
143
+ const geometry = this.geometry;
144
+ const colorAttribute = geometry.getAttribute( 'color' );
145
+
146
+ for ( let i = 0; i < colorAttribute.count; i += 2 ) {
147
+
148
+ colorAttribute.setXYZ( i, color1.r, color1.g, color1.b );
149
+ colorAttribute.setXYZ( i + 1, color2.r, color2.g, color2.b );
150
+
151
+ }
152
+
153
+ colorAttribute.needsUpdate = true;
154
+
155
+ return this;
156
+
157
+ }
158
+
130
159
  /**
131
160
  * Frees the GPU-related resources allocated by this instance. Call this
132
161
  * method whenever this instance is no longer used in your app.
@@ -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.
@@ -195,14 +204,27 @@ class LightShadow {
195
204
  shadowCamera.updateMatrixWorld();
196
205
 
197
206
  _projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );
198
- this._frustum.setFromProjectionMatrix( _projScreenMatrix );
207
+ this._frustum.setFromProjectionMatrix( _projScreenMatrix, shadowCamera.coordinateSystem, shadowCamera.reversedDepth );
208
+
209
+ if ( shadowCamera.reversedDepth ) {
199
210
 
200
- shadowMatrix.set(
201
- 0.5, 0.0, 0.0, 0.5,
202
- 0.0, 0.5, 0.0, 0.5,
203
- 0.0, 0.0, 0.5, 0.5,
204
- 0.0, 0.0, 0.0, 1.0
205
- );
211
+ shadowMatrix.set(
212
+ 0.5, 0.0, 0.0, 0.5,
213
+ 0.0, 0.5, 0.0, 0.5,
214
+ 0.0, 0.0, 1.0, 0.0,
215
+ 0.0, 0.0, 0.0, 1.0
216
+ );
217
+
218
+ } else {
219
+
220
+ shadowMatrix.set(
221
+ 0.5, 0.0, 0.0, 0.5,
222
+ 0.0, 0.5, 0.0, 0.5,
223
+ 0.0, 0.0, 0.5, 0.5,
224
+ 0.0, 0.0, 0.0, 1.0
225
+ );
226
+
227
+ }
206
228
 
207
229
  shadowMatrix.multiply( _projScreenMatrix );
208
230
 
@@ -266,6 +288,11 @@ class LightShadow {
266
288
  this.bias = source.bias;
267
289
  this.radius = source.radius;
268
290
 
291
+ this.autoUpdate = source.autoUpdate;
292
+ this.needsUpdate = source.needsUpdate;
293
+ this.normalBias = source.normalBias;
294
+ this.blurSamples = source.blurSamples;
295
+
269
296
  this.mapSize.copy( source.mapSize );
270
297
 
271
298
  return this;
@@ -108,7 +108,7 @@ class PointLightShadow extends LightShadow {
108
108
  shadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );
109
109
 
110
110
  _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
111
- this._frustum.setFromProjectionMatrix( _projScreenMatrix );
111
+ this._frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );
112
112
 
113
113
  }
114
114
 
@@ -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;