@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
package/src/math/Box3.js CHANGED
@@ -714,6 +714,34 @@ class Box3 {
714
714
 
715
715
  }
716
716
 
717
+ /**
718
+ * Returns a serialized structure of the bounding box.
719
+ *
720
+ * @return {Object} Serialized structure with fields representing the object state.
721
+ */
722
+ toJSON() {
723
+
724
+ return {
725
+ min: this.min.toArray(),
726
+ max: this.max.toArray()
727
+ };
728
+
729
+ }
730
+
731
+ /**
732
+ * Returns a serialized structure of the bounding box.
733
+ *
734
+ * @param {Object} json - The serialized json to set the box from.
735
+ * @return {Box3} A reference to this bounding box.
736
+ */
737
+ fromJSON( json ) {
738
+
739
+ this.min.fromArray( json.min );
740
+ this.max.fromArray( json.max );
741
+ return this;
742
+
743
+ }
744
+
717
745
  }
718
746
 
719
747
  const _points = [
package/src/math/Color.js CHANGED
@@ -208,7 +208,7 @@ class Color {
208
208
  this.g = ( hex >> 8 & 255 ) / 255;
209
209
  this.b = ( hex & 255 ) / 255;
210
210
 
211
- ColorManagement.toWorkingColorSpace( this, colorSpace );
211
+ ColorManagement.colorSpaceToWorking( this, colorSpace );
212
212
 
213
213
  return this;
214
214
 
@@ -229,7 +229,7 @@ class Color {
229
229
  this.g = g;
230
230
  this.b = b;
231
231
 
232
- ColorManagement.toWorkingColorSpace( this, colorSpace );
232
+ ColorManagement.colorSpaceToWorking( this, colorSpace );
233
233
 
234
234
  return this;
235
235
 
@@ -266,7 +266,7 @@ class Color {
266
266
 
267
267
  }
268
268
 
269
- ColorManagement.toWorkingColorSpace( this, colorSpace );
269
+ ColorManagement.colorSpaceToWorking( this, colorSpace );
270
270
 
271
271
  return this;
272
272
 
@@ -537,7 +537,7 @@ class Color {
537
537
  */
538
538
  getHex( colorSpace = SRGBColorSpace ) {
539
539
 
540
- ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
540
+ ColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );
541
541
 
542
542
  return Math.round( clamp( _color.r * 255, 0, 255 ) ) * 65536 + Math.round( clamp( _color.g * 255, 0, 255 ) ) * 256 + Math.round( clamp( _color.b * 255, 0, 255 ) );
543
543
 
@@ -567,7 +567,7 @@ class Color {
567
567
 
568
568
  // h,s,l ranges are in 0.0 - 1.0
569
569
 
570
- ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
570
+ ColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );
571
571
 
572
572
  const r = _color.r, g = _color.g, b = _color.b;
573
573
 
@@ -617,7 +617,7 @@ class Color {
617
617
  */
618
618
  getRGB( target, colorSpace = ColorManagement.workingColorSpace ) {
619
619
 
620
- ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
620
+ ColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );
621
621
 
622
622
  target.r = _color.r;
623
623
  target.g = _color.g;
@@ -635,7 +635,7 @@ class Color {
635
635
  */
636
636
  getStyle( colorSpace = SRGBColorSpace ) {
637
637
 
638
- ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
638
+ ColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );
639
639
 
640
640
  const r = _color.r, g = _color.g, b = _color.b;
641
641
 
@@ -1,5 +1,6 @@
1
1
  import { SRGBColorSpace, LinearSRGBColorSpace, SRGBTransfer, LinearTransfer, NoColorSpace } from '../constants.js';
2
2
  import { Matrix3 } from './Matrix3.js';
3
+ import { warnOnce } from '../utils.js';
3
4
 
4
5
  const LINEAR_REC709_TO_XYZ = /*@__PURE__*/ new Matrix3().set(
5
6
  0.4123908, 0.3575843, 0.1804808,
@@ -76,13 +77,13 @@ function createColorManagement() {
76
77
 
77
78
  },
78
79
 
79
- fromWorkingColorSpace: function ( color, targetColorSpace ) {
80
+ workingToColorSpace: function ( color, targetColorSpace ) {
80
81
 
81
82
  return this.convert( color, this.workingColorSpace, targetColorSpace );
82
83
 
83
84
  },
84
85
 
85
- toWorkingColorSpace: function ( color, sourceColorSpace ) {
86
+ colorSpaceToWorking: function ( color, sourceColorSpace ) {
86
87
 
87
88
  return this.convert( color, sourceColorSpace, this.workingColorSpace );
88
89
 
@@ -134,7 +135,25 @@ function createColorManagement() {
134
135
 
135
136
  return this.spaces[ colorSpace ].workingColorSpaceConfig.unpackColorSpace;
136
137
 
137
- }
138
+ },
139
+
140
+ // Deprecated
141
+
142
+ fromWorkingColorSpace: function ( color, targetColorSpace ) {
143
+
144
+ warnOnce( 'THREE.ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace().' ); // @deprecated, r177
145
+
146
+ return ColorManagement.workingToColorSpace( color, targetColorSpace );
147
+
148
+ },
149
+
150
+ toWorkingColorSpace: function ( color, sourceColorSpace ) {
151
+
152
+ warnOnce( 'THREE.ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking().' ); // @deprecated, r177
153
+
154
+ return ColorManagement.colorSpaceToWorking( color, sourceColorSpace );
155
+
156
+ },
138
157
 
139
158
  };
140
159
 
@@ -1,9 +1,11 @@
1
1
  import { WebGLCoordinateSystem, WebGPUCoordinateSystem } from '../constants.js';
2
+ import { Vector2 } from './Vector2.js';
2
3
  import { Vector3 } from './Vector3.js';
3
4
  import { Sphere } from './Sphere.js';
4
5
  import { Plane } from './Plane.js';
5
6
 
6
7
  const _sphere = /*@__PURE__*/ new Sphere();
8
+ const _defaultSpriteCenter = /*@__PURE__*/ new Vector2( 0.5, 0.5 );
7
9
  const _vector = /*@__PURE__*/ new Vector3();
8
10
 
9
11
  /**
@@ -161,7 +163,10 @@ class Frustum {
161
163
  intersectsSprite( sprite ) {
162
164
 
163
165
  _sphere.center.set( 0, 0, 0 );
164
- _sphere.radius = 0.7071067811865476;
166
+
167
+ const offset = _defaultSpriteCenter.distanceTo( sprite.center );
168
+
169
+ _sphere.radius = 0.7071067811865476 + offset;
165
170
  _sphere.applyMatrix4( sprite.matrixWorld );
166
171
 
167
172
  return this.intersectsSphere( _sphere );
@@ -0,0 +1,253 @@
1
+ import { WebGLCoordinateSystem } from '../constants.js';
2
+ import { Frustum } from './Frustum.js';
3
+ import { Matrix4 } from './Matrix4.js';
4
+
5
+ const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
6
+ const _frustum = /*@__PURE__*/ new Frustum();
7
+
8
+ /**
9
+ * FrustumArray is used to determine if an object is visible in at least one camera
10
+ * from an array of cameras. This is particularly useful for multi-view renderers.
11
+ */
12
+ class FrustumArray {
13
+
14
+ /**
15
+ * Constructs a new frustum array.
16
+ *
17
+ */
18
+ constructor() {
19
+
20
+ /**
21
+ * The coordinate system to use.
22
+ *
23
+ * @type {WebGLCoordinateSystem|WebGPUCoordinateSystem}
24
+ * @default WebGLCoordinateSystem
25
+ */
26
+ this.coordinateSystem = WebGLCoordinateSystem;
27
+
28
+ }
29
+
30
+ /**
31
+ * Returns `true` if the 3D object's bounding sphere is intersecting any frustum
32
+ * from the camera array.
33
+ *
34
+ * @param {Object3D} object - The 3D object to test.
35
+ * @param {Object} cameraArray - An object with a cameras property containing an array of cameras.
36
+ * @return {boolean} Whether the 3D object is visible in any camera.
37
+ */
38
+ intersectsObject( object, cameraArray ) {
39
+
40
+ if ( ! cameraArray.isArrayCamera || cameraArray.cameras.length === 0 ) {
41
+
42
+ return false;
43
+
44
+ }
45
+
46
+ for ( let i = 0; i < cameraArray.cameras.length; i ++ ) {
47
+
48
+ const camera = cameraArray.cameras[ i ];
49
+
50
+ _projScreenMatrix.multiplyMatrices(
51
+ camera.projectionMatrix,
52
+ camera.matrixWorldInverse
53
+ );
54
+
55
+ _frustum.setFromProjectionMatrix(
56
+ _projScreenMatrix,
57
+ this.coordinateSystem
58
+ );
59
+
60
+ if ( _frustum.intersectsObject( object ) ) {
61
+
62
+ return true; // Object is visible in at least one camera
63
+
64
+ }
65
+
66
+ }
67
+
68
+ return false; // Not visible in any camera
69
+
70
+ }
71
+
72
+ /**
73
+ * Returns `true` if the given sprite is intersecting any frustum
74
+ * from the camera array.
75
+ *
76
+ * @param {Sprite} sprite - The sprite to test.
77
+ * @param {Object} cameraArray - An object with a cameras property containing an array of cameras.
78
+ * @return {boolean} Whether the sprite is visible in any camera.
79
+ */
80
+ intersectsSprite( sprite, cameraArray ) {
81
+
82
+ if ( ! cameraArray || ! cameraArray.cameras || cameraArray.cameras.length === 0 ) {
83
+
84
+ return false;
85
+
86
+ }
87
+
88
+ for ( let i = 0; i < cameraArray.cameras.length; i ++ ) {
89
+
90
+ const camera = cameraArray.cameras[ i ];
91
+
92
+ _projScreenMatrix.multiplyMatrices(
93
+ camera.projectionMatrix,
94
+ camera.matrixWorldInverse
95
+ );
96
+
97
+ _frustum.setFromProjectionMatrix(
98
+ _projScreenMatrix,
99
+ this.coordinateSystem
100
+ );
101
+
102
+ if ( _frustum.intersectsSprite( sprite ) ) {
103
+
104
+ return true; // Sprite is visible in at least one camera
105
+
106
+ }
107
+
108
+ }
109
+
110
+ return false; // Not visible in any camera
111
+
112
+ }
113
+
114
+ /**
115
+ * Returns `true` if the given bounding sphere is intersecting any frustum
116
+ * from the camera array.
117
+ *
118
+ * @param {Sphere} sphere - The bounding sphere to test.
119
+ * @param {Object} cameraArray - An object with a cameras property containing an array of cameras.
120
+ * @return {boolean} Whether the sphere is visible in any camera.
121
+ */
122
+ intersectsSphere( sphere, cameraArray ) {
123
+
124
+ if ( ! cameraArray || ! cameraArray.cameras || cameraArray.cameras.length === 0 ) {
125
+
126
+ return false;
127
+
128
+ }
129
+
130
+ for ( let i = 0; i < cameraArray.cameras.length; i ++ ) {
131
+
132
+ const camera = cameraArray.cameras[ i ];
133
+
134
+ _projScreenMatrix.multiplyMatrices(
135
+ camera.projectionMatrix,
136
+ camera.matrixWorldInverse
137
+ );
138
+
139
+ _frustum.setFromProjectionMatrix(
140
+ _projScreenMatrix,
141
+ this.coordinateSystem
142
+ );
143
+
144
+ if ( _frustum.intersectsSphere( sphere ) ) {
145
+
146
+ return true; // Sphere is visible in at least one camera
147
+
148
+ }
149
+
150
+ }
151
+
152
+ return false; // Not visible in any camera
153
+
154
+ }
155
+
156
+ /**
157
+ * Returns `true` if the given bounding box is intersecting any frustum
158
+ * from the camera array.
159
+ *
160
+ * @param {Box3} box - The bounding box to test.
161
+ * @param {Object} cameraArray - An object with a cameras property containing an array of cameras.
162
+ * @return {boolean} Whether the box is visible in any camera.
163
+ */
164
+ intersectsBox( box, cameraArray ) {
165
+
166
+ if ( ! cameraArray || ! cameraArray.cameras || cameraArray.cameras.length === 0 ) {
167
+
168
+ return false;
169
+
170
+ }
171
+
172
+ for ( let i = 0; i < cameraArray.cameras.length; i ++ ) {
173
+
174
+ const camera = cameraArray.cameras[ i ];
175
+
176
+ _projScreenMatrix.multiplyMatrices(
177
+ camera.projectionMatrix,
178
+ camera.matrixWorldInverse
179
+ );
180
+
181
+ _frustum.setFromProjectionMatrix(
182
+ _projScreenMatrix,
183
+ this.coordinateSystem
184
+ );
185
+
186
+ if ( _frustum.intersectsBox( box ) ) {
187
+
188
+ return true; // Box is visible in at least one camera
189
+
190
+ }
191
+
192
+ }
193
+
194
+ return false; // Not visible in any camera
195
+
196
+ }
197
+
198
+ /**
199
+ * Returns `true` if the given point lies within any frustum
200
+ * from the camera array.
201
+ *
202
+ * @param {Vector3} point - The point to test.
203
+ * @param {Object} cameraArray - An object with a cameras property containing an array of cameras.
204
+ * @return {boolean} Whether the point is visible in any camera.
205
+ */
206
+ containsPoint( point, cameraArray ) {
207
+
208
+ if ( ! cameraArray || ! cameraArray.cameras || cameraArray.cameras.length === 0 ) {
209
+
210
+ return false;
211
+
212
+ }
213
+
214
+ for ( let i = 0; i < cameraArray.cameras.length; i ++ ) {
215
+
216
+ const camera = cameraArray.cameras[ i ];
217
+
218
+ _projScreenMatrix.multiplyMatrices(
219
+ camera.projectionMatrix,
220
+ camera.matrixWorldInverse
221
+ );
222
+
223
+ _frustum.setFromProjectionMatrix(
224
+ _projScreenMatrix,
225
+ this.coordinateSystem
226
+ );
227
+
228
+ if ( _frustum.containsPoint( point ) ) {
229
+
230
+ return true; // Point is visible in at least one camera
231
+
232
+ }
233
+
234
+ }
235
+
236
+ return false; // Not visible in any camera
237
+
238
+ }
239
+
240
+ /**
241
+ * Returns a new frustum array with copied values from this instance.
242
+ *
243
+ * @return {FrustumArray} A clone of this instance.
244
+ */
245
+ clone() {
246
+
247
+ return new FrustumArray();
248
+
249
+ }
250
+
251
+ }
252
+
253
+ export { FrustumArray };
@@ -482,7 +482,7 @@ class Quaternion {
482
482
 
483
483
  let r = vFrom.dot( vTo ) + 1;
484
484
 
485
- if ( r < Number.EPSILON ) {
485
+ if ( r < 1e-8 ) { // the epsilon value has been discussed in #31286
486
486
 
487
487
  // vFrom and vTo point in opposite directions
488
488
 
package/src/math/Ray.js CHANGED
@@ -346,6 +346,8 @@ class Ray {
346
346
  */
347
347
  intersectsSphere( sphere ) {
348
348
 
349
+ if ( sphere.radius < 0 ) return false; // handle empty spheres, see #31187
350
+
349
351
  return this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );
350
352
 
351
353
  }
@@ -387,6 +387,34 @@ class Sphere {
387
387
 
388
388
  }
389
389
 
390
+ /**
391
+ * Returns a serialized structure of the bounding sphere.
392
+ *
393
+ * @return {Object} Serialized structure with fields representing the object state.
394
+ */
395
+ toJSON() {
396
+
397
+ return {
398
+ radius: this.radius,
399
+ center: this.center.toArray()
400
+ };
401
+
402
+ }
403
+
404
+ /**
405
+ * Returns a serialized structure of the bounding sphere.
406
+ *
407
+ * @param {Object} json - The serialized json to set the sphere from.
408
+ * @return {Box3} A reference to this bounding sphere.
409
+ */
410
+ fromJSON( json ) {
411
+
412
+ this.radius = json.radius;
413
+ this.center.fromArray( json.center );
414
+ return this;
415
+
416
+ }
417
+
390
418
  }
391
419
 
392
420
  export { Sphere };
@@ -33,6 +33,7 @@ export { default as StructNode } from './core/StructNode.js';
33
33
  export { default as StructTypeNode } from './core/StructTypeNode.js';
34
34
  export { default as OutputStructNode } from './core/OutputStructNode.js';
35
35
  export { default as MRTNode } from './core/MRTNode.js';
36
+ export { default as SubBuildNode } from './core/SubBuildNode.js';
36
37
 
37
38
  import * as NodeUtils from './core/NodeUtils.js';
38
39
  export { NodeUtils };
@@ -40,11 +41,9 @@ export { NodeUtils };
40
41
  // utils
41
42
  export { default as ArrayElementNode } from './utils/ArrayElementNode.js';
42
43
  export { default as ConvertNode } from './utils/ConvertNode.js';
43
- export { default as EquirectUVNode } from './utils/EquirectUVNode.js';
44
44
  export { default as FunctionOverloadingNode } from './utils/FunctionOverloadingNode.js';
45
45
  export { default as JoinNode } from './utils/JoinNode.js';
46
46
  export { default as LoopNode } from './utils/LoopNode.js';
47
- export { default as MatcapUVNode } from './utils/MatcapUVNode.js';
48
47
  export { default as MaxMipLevelNode } from './utils/MaxMipLevelNode.js';
49
48
  export { default as RemapNode } from './utils/RemapNode.js';
50
49
  export { default as RotateNode } from './utils/RotateNode.js';
@@ -52,7 +51,6 @@ export { default as SetNode } from './utils/SetNode.js';
52
51
  export { default as SplitNode } from './utils/SplitNode.js';
53
52
  export { default as SpriteSheetUVNode } from './utils/SpriteSheetUVNode.js';
54
53
  export { default as StorageArrayElementNode } from './utils/StorageArrayElementNode.js';
55
- export { default as TriplanarTexturesNode } from './utils/TriplanarTexturesNode.js';
56
54
  export { default as ReflectorNode } from './utils/ReflectorNode.js';
57
55
  export { default as RTTNode } from './utils/RTTNode.js';
58
56
  export { default as MemberNode } from './utils/MemberNode.js';
@@ -120,6 +118,7 @@ export { default as DirectionalLightNode } from './lighting/DirectionalLightNode
120
118
  export { default as RectAreaLightNode } from './lighting/RectAreaLightNode.js';
121
119
  export { default as SpotLightNode } from './lighting/SpotLightNode.js';
122
120
  export { default as IESSpotLightNode } from './lighting/IESSpotLightNode.js';
121
+ export { default as ProjectorLightNode } from './lighting/ProjectorLightNode.js';
123
122
  export { default as AmbientLightNode } from './lighting/AmbientLightNode.js';
124
123
  export { default as LightsNode } from './lighting/LightsNode.js';
125
124
  export { default as LightingNode } from './lighting/LightingNode.js';
package/src/nodes/TSL.js CHANGED
@@ -24,10 +24,10 @@ export * from './math/MathUtils.js';
24
24
  export * from './math/TriNoise3D.js';
25
25
 
26
26
  // utils
27
- export * from './utils/EquirectUVNode.js';
27
+ export * from './utils/EquirectUV.js';
28
28
  export * from './utils/FunctionOverloadingNode.js';
29
29
  export * from './utils/LoopNode.js';
30
- export * from './utils/MatcapUVNode.js';
30
+ export * from './utils/MatcapUV.js';
31
31
  export * from './utils/MaxMipLevelNode.js';
32
32
  export * from './utils/Oscillators.js';
33
33
  export * from './utils/Packing.js';
@@ -38,10 +38,11 @@ export * from './utils/ViewportUtils.js';
38
38
  export * from './utils/RotateNode.js';
39
39
  export * from './utils/SpriteSheetUVNode.js';
40
40
  export * from './utils/Timer.js';
41
- export * from './utils/TriplanarTexturesNode.js';
41
+ export * from './utils/TriplanarTextures.js';
42
42
  export * from './utils/ReflectorNode.js';
43
43
  export * from './utils/RTTNode.js';
44
44
  export * from './utils/PostProcessingUtils.js';
45
+ export * from './utils/SampleNode.js';
45
46
 
46
47
  // three.js shading language
47
48
  export * from './tsl/TSLBase.js';
@@ -134,6 +135,7 @@ export * from './lighting/LightsNode.js';
134
135
  export * from './lighting/LightingContextNode.js';
135
136
  export * from './lighting/ShadowBaseNode.js';
136
137
  export * from './lighting/ShadowNode.js';
138
+ export * from './lighting/ShadowFilterNode.js';
137
139
  export * from './lighting/PointShadowNode.js';
138
140
  export * from './lighting/PointLightNode.js';
139
141
 
@@ -1,7 +1,7 @@
1
- import { bitangentView } from './Bitangent.js';
2
- import { normalView, transformedNormalView } from './Normal.js';
1
+ import { normalView } from './Normal.js';
3
2
  import { tangentView } from './Tangent.js';
4
- import { mat3 } from '../tsl/TSLBase.js';
3
+ import { bitangentView } from './Bitangent.js';
4
+ import { Fn, mat3 } from '../tsl/TSLBase.js';
5
5
  import { mix } from '../math/MathNode.js';
6
6
  import { anisotropy, anisotropyB, roughness } from '../core/PropertyNode.js';
7
7
  import { positionViewDirection } from './Position.js';
@@ -12,7 +12,7 @@ import { positionViewDirection } from './Position.js';
12
12
  * @tsl
13
13
  * @type {Node<mat3>}
14
14
  */
15
- export const TBNViewMatrix = /*@__PURE__*/ mat3( tangentView, bitangentView, normalView );
15
+ export const TBNViewMatrix = /*@__PURE__*/ mat3( tangentView, bitangentView, normalView ).toVar( 'TBNViewMatrix' );
16
16
 
17
17
  /**
18
18
  * TSL object that represents the parallax direction.
@@ -40,15 +40,14 @@ export const parallaxUV = ( uv, scale ) => uv.sub( parallaxDirection.mul( scale
40
40
  * @function
41
41
  * @returns {Node<vec3>} Bent normals.
42
42
  */
43
- export const transformedBentNormalView = /*@__PURE__*/ ( () => {
43
+ export const bentNormalView = /*@__PURE__*/ ( Fn( () => {
44
44
 
45
45
  // https://google.github.io/filament/Filament.md.html#lighting/imagebasedlights/anisotropy
46
46
 
47
47
  let bentNormal = anisotropyB.cross( positionViewDirection );
48
48
  bentNormal = bentNormal.cross( anisotropyB ).normalize();
49
- bentNormal = mix( bentNormal, transformedNormalView, anisotropy.mul( roughness.oneMinus() ).oneMinus().pow2().pow2() ).normalize();
49
+ bentNormal = mix( bentNormal, normalView, anisotropy.mul( roughness.oneMinus() ).oneMinus().pow2().pow2() ).normalize();
50
50
 
51
51
  return bentNormal;
52
52
 
53
-
54
- } )();
53
+ } ).once() )();