super-three 0.175.0 → 0.177.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +7631 -6743
  3. package/build/three.core.js +7496 -6758
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +172 -22
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +14 -6
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +3948 -1678
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +3941 -1678
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -1
  14. package/examples/jsm/animation/AnimationClipCreator.js +1 -0
  15. package/examples/jsm/animation/CCDIKSolver.js +6 -3
  16. package/examples/jsm/capabilities/WebGL.js +1 -0
  17. package/examples/jsm/capabilities/WebGPU.js +1 -0
  18. package/examples/jsm/controls/ArcballControls.js +14 -3
  19. package/examples/jsm/controls/DragControls.js +1 -0
  20. package/examples/jsm/controls/FirstPersonControls.js +1 -0
  21. package/examples/jsm/controls/FlyControls.js +1 -0
  22. package/examples/jsm/controls/MapControls.js +1 -0
  23. package/examples/jsm/controls/OrbitControls.js +1 -0
  24. package/examples/jsm/controls/PointerLockControls.js +5 -3
  25. package/examples/jsm/controls/TrackballControls.js +1 -0
  26. package/examples/jsm/controls/TransformControls.js +1 -0
  27. package/examples/jsm/csm/CSM.js +2 -0
  28. package/examples/jsm/csm/CSMFrustum.js +2 -0
  29. package/examples/jsm/csm/CSMHelper.js +1 -0
  30. package/examples/jsm/csm/CSMShader.js +4 -1
  31. package/examples/jsm/csm/CSMShadowNode.js +18 -4
  32. package/examples/jsm/curves/CurveExtras.js +14 -0
  33. package/examples/jsm/curves/NURBSCurve.js +1 -0
  34. package/examples/jsm/curves/NURBSSurface.js +2 -0
  35. package/examples/jsm/curves/NURBSUtils.js +4 -1
  36. package/examples/jsm/curves/NURBSVolume.js +2 -0
  37. package/examples/jsm/effects/AnaglyphEffect.js +2 -0
  38. package/examples/jsm/effects/AsciiEffect.js +2 -0
  39. package/examples/jsm/effects/OutlineEffect.js +2 -0
  40. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
  41. package/examples/jsm/effects/StereoEffect.js +2 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +1 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +49 -35
  44. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  45. package/examples/jsm/exporters/EXRExporter.js +2 -0
  46. package/examples/jsm/exporters/GLTFExporter.js +7 -4
  47. package/examples/jsm/exporters/KTX2Exporter.js +2 -0
  48. package/examples/jsm/exporters/OBJExporter.js +3 -1
  49. package/examples/jsm/exporters/PLYExporter.js +4 -2
  50. package/examples/jsm/exporters/STLExporter.js +2 -0
  51. package/examples/jsm/exporters/USDZExporter.js +12 -10
  52. package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +1 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +1 -0
  55. package/examples/jsm/geometries/ParametricFunctions.js +4 -1
  56. package/examples/jsm/geometries/ParametricGeometry.js +1 -0
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +1 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +1 -0
  59. package/examples/jsm/geometries/TextGeometry.js +1 -0
  60. package/examples/jsm/helpers/LightProbeHelper.js +1 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
  64. package/examples/jsm/helpers/RapierHelper.js +59 -0
  65. package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
  66. package/examples/jsm/helpers/TextureHelper.js +1 -0
  67. package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
  68. package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
  69. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
  70. package/examples/jsm/helpers/ViewHelper.js +1 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +7 -0
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -0
  73. package/examples/jsm/interactive/SelectionBox.js +2 -0
  74. package/examples/jsm/interactive/SelectionHelper.js +2 -0
  75. package/examples/jsm/lighting/TiledLighting.js +1 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +1 -0
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  79. package/examples/jsm/lines/Line2.js +1 -0
  80. package/examples/jsm/lines/LineGeometry.js +1 -0
  81. package/examples/jsm/lines/LineMaterial.js +4 -4
  82. package/examples/jsm/lines/LineSegments2.js +1 -0
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  84. package/examples/jsm/lines/Wireframe.js +1 -0
  85. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  88. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  89. package/examples/jsm/loaders/3DMLoader.js +1 -0
  90. package/examples/jsm/loaders/3MFLoader.js +1 -0
  91. package/examples/jsm/loaders/AMFLoader.js +1 -0
  92. package/examples/jsm/loaders/BVHLoader.js +1 -0
  93. package/examples/jsm/loaders/ColladaLoader.js +5 -4
  94. package/examples/jsm/loaders/DDSLoader.js +1 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  96. package/examples/jsm/loaders/EXRLoader.js +1 -0
  97. package/examples/jsm/loaders/FBXLoader.js +24 -22
  98. package/examples/jsm/loaders/FontLoader.js +1 -0
  99. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  100. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  102. package/examples/jsm/loaders/IESLoader.js +1 -0
  103. package/examples/jsm/loaders/KMZLoader.js +1 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  105. package/examples/jsm/loaders/KTXLoader.js +1 -0
  106. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  107. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  108. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  110. package/examples/jsm/loaders/LWOLoader.js +1 -13
  111. package/examples/jsm/loaders/LottieLoader.js +15 -0
  112. package/examples/jsm/loaders/MD2Loader.js +1 -0
  113. package/examples/jsm/loaders/MDDLoader.js +1 -0
  114. package/examples/jsm/loaders/MTLLoader.js +4 -3
  115. package/examples/jsm/loaders/MaterialXLoader.js +1 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  117. package/examples/jsm/loaders/OBJLoader.js +1 -0
  118. package/examples/jsm/loaders/PCDLoader.js +122 -19
  119. package/examples/jsm/loaders/PDBLoader.js +1 -0
  120. package/examples/jsm/loaders/PLYLoader.js +1 -0
  121. package/examples/jsm/loaders/PVRLoader.js +1 -0
  122. package/examples/jsm/loaders/RGBELoader.js +1 -0
  123. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  124. package/examples/jsm/loaders/STLLoader.js +1 -0
  125. package/examples/jsm/loaders/SVGLoader.js +1 -0
  126. package/examples/jsm/loaders/TDSLoader.js +1 -0
  127. package/examples/jsm/loaders/TGALoader.js +1 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  129. package/examples/jsm/loaders/TTFLoader.js +1 -0
  130. package/examples/jsm/loaders/USDZLoader.js +1 -0
  131. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  132. package/examples/jsm/loaders/VOXLoader.js +1 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  134. package/examples/jsm/loaders/VTKLoader.js +1 -0
  135. package/examples/jsm/loaders/XYZLoader.js +1 -0
  136. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  137. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  138. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  139. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  140. package/examples/jsm/math/Capsule.js +2 -0
  141. package/examples/jsm/math/ColorConverter.js +1 -0
  142. package/examples/jsm/math/ConvexHull.js +2 -0
  143. package/examples/jsm/math/ImprovedNoise.js +19 -14
  144. package/examples/jsm/math/Lut.js +2 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  146. package/examples/jsm/math/OBB.js +2 -0
  147. package/examples/jsm/math/Octree.js +20 -1
  148. package/examples/jsm/math/SimplexNoise.js +2 -0
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  150. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  151. package/examples/jsm/misc/Gyroscope.js +1 -0
  152. package/examples/jsm/misc/MD2Character.js +2 -0
  153. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  154. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  158. package/examples/jsm/misc/RollerCoaster.js +5 -0
  159. package/examples/jsm/misc/Timer.js +2 -0
  160. package/examples/jsm/misc/TubePainter.js +1 -0
  161. package/examples/jsm/misc/Volume.js +2 -0
  162. package/examples/jsm/misc/VolumeSlice.js +1 -0
  163. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  167. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  168. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  169. package/examples/jsm/objects/Lensflare.js +3 -0
  170. package/examples/jsm/objects/LensflareMesh.js +1 -0
  171. package/examples/jsm/objects/MarchingCubes.js +2 -0
  172. package/examples/jsm/objects/Reflector.js +1 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  174. package/examples/jsm/objects/Refractor.js +1 -0
  175. package/examples/jsm/objects/ShadowMesh.js +1 -0
  176. package/examples/jsm/objects/Sky.js +2 -1
  177. package/examples/jsm/objects/SkyMesh.js +20 -17
  178. package/examples/jsm/objects/Water.js +1 -0
  179. package/examples/jsm/objects/Water2.js +1 -0
  180. package/examples/jsm/objects/Water2Mesh.js +3 -1
  181. package/examples/jsm/objects/WaterMesh.js +2 -1
  182. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  183. package/examples/jsm/physics/JoltPhysics.js +1 -0
  184. package/examples/jsm/physics/RapierPhysics.js +58 -1
  185. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  186. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  187. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  188. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  190. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  191. package/examples/jsm/postprocessing/EffectComposer.js +5 -6
  192. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  193. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  194. package/examples/jsm/postprocessing/GTAOPass.js +4 -3
  195. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  196. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  197. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  198. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  199. package/examples/jsm/postprocessing/OutlinePass.js +5 -2
  200. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  201. package/examples/jsm/postprocessing/Pass.js +3 -1
  202. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  203. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  204. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  205. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  206. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  207. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  208. package/examples/jsm/postprocessing/SSAOPass.js +2 -1
  209. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  210. package/examples/jsm/postprocessing/SavePass.js +2 -1
  211. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  212. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  213. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  214. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  215. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  216. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  217. package/examples/jsm/renderers/Projector.js +2 -0
  218. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  219. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  220. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  221. package/examples/jsm/shaders/BasicShader.js +4 -1
  222. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  223. package/examples/jsm/shaders/BlendShader.js +4 -1
  224. package/examples/jsm/shaders/BokehShader.js +4 -1
  225. package/examples/jsm/shaders/BokehShader2.js +4 -1
  226. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  227. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  228. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  229. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  230. package/examples/jsm/shaders/CopyShader.js +4 -1
  231. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  232. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  233. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  234. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  235. package/examples/jsm/shaders/ExposureShader.js +4 -1
  236. package/examples/jsm/shaders/FXAAShader.js +4 -1
  237. package/examples/jsm/shaders/FilmShader.js +4 -1
  238. package/examples/jsm/shaders/FocusShader.js +4 -1
  239. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  240. package/examples/jsm/shaders/GTAOShader.js +4 -1
  241. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  242. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  243. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  244. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  245. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  246. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  247. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  248. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  249. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  250. package/examples/jsm/shaders/MirrorShader.js +4 -1
  251. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  252. package/examples/jsm/shaders/OutputShader.js +4 -1
  253. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  254. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  255. package/examples/jsm/shaders/SAOShader.js +4 -1
  256. package/examples/jsm/shaders/SMAAShader.js +1 -0
  257. package/examples/jsm/shaders/SSAOShader.js +4 -1
  258. package/examples/jsm/shaders/SSRShader.js +1 -0
  259. package/examples/jsm/shaders/SepiaShader.js +4 -1
  260. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  261. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  262. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  263. package/examples/jsm/shaders/ToonShader.js +2 -1
  264. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  265. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +4 -1
  266. package/examples/jsm/shaders/VelocityShader.js +4 -1
  267. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  268. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  269. package/examples/jsm/shaders/VignetteShader.js +4 -1
  270. package/examples/jsm/shaders/VolumeShader.js +5 -2
  271. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  272. package/examples/jsm/textures/FlakesTexture.js +2 -0
  273. package/examples/jsm/transpiler/GLSLDecoder.js +1 -2
  274. package/examples/jsm/transpiler/TSLEncoder.js +52 -8
  275. package/examples/jsm/transpiler/Transpiler.js +2 -0
  276. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  277. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  278. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  279. package/examples/jsm/tsl/display/BloomNode.js +1 -0
  280. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  281. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  282. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  283. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  284. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  285. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  286. package/examples/jsm/tsl/display/GaussianBlurNode.js +2 -27
  287. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  288. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  289. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  290. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  291. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  292. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  293. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  294. package/examples/jsm/tsl/display/SSAAPassNode.js +3 -2
  295. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  296. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  297. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  298. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  299. package/examples/jsm/tsl/display/TRAAPassNode.js +5 -4
  300. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  301. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  302. package/examples/jsm/tsl/lighting/TiledLightsNode.js +4 -3
  303. package/examples/jsm/tsl/math/Bayer.js +4 -1
  304. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  305. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  306. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  307. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  308. package/examples/jsm/utils/CameraUtils.js +4 -1
  309. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  310. package/examples/jsm/utils/GeometryUtils.js +4 -1
  311. package/examples/jsm/utils/LDrawUtils.js +2 -0
  312. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  313. package/examples/jsm/utils/SceneUtils.js +4 -1
  314. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  315. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  316. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  317. package/examples/jsm/utils/SortUtils.js +4 -1
  318. package/examples/jsm/utils/UVsDebug.js +4 -1
  319. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  320. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  321. package/examples/jsm/utils/WorkerPool.js +2 -0
  322. package/examples/jsm/webxr/ARButton.js +1 -0
  323. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  324. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  325. package/examples/jsm/webxr/Text2D.js +4 -1
  326. package/examples/jsm/webxr/VRButton.js +1 -0
  327. package/examples/jsm/webxr/XRButton.js +1 -0
  328. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  329. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  330. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  331. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  332. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  333. package/examples/jsm/webxr/XRPlanes.js +1 -0
  334. package/package.json +6 -4
  335. package/src/Three.Core.js +1 -1
  336. package/src/Three.TSL.js +13 -5
  337. package/src/Three.WebGPU.Nodes.js +1 -0
  338. package/src/Three.WebGPU.js +1 -0
  339. package/src/audio/AudioListener.js +13 -10
  340. package/src/cameras/ArrayCamera.js +9 -1
  341. package/src/constants.js +47 -20
  342. package/src/core/BufferAttribute.js +1 -1
  343. package/src/core/BufferGeometry.js +2 -5
  344. package/src/core/Object3D.js +22 -21
  345. package/src/core/RenderTarget.js +65 -21
  346. package/src/core/RenderTarget3D.js +1 -0
  347. package/src/extras/TextureUtils.js +1 -5
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/geometries/CapsuleGeometry.js +167 -17
  350. package/src/geometries/ExtrudeGeometry.js +39 -29
  351. package/src/helpers/ArrowHelper.js +2 -2
  352. package/src/helpers/SkeletonHelper.js +1 -1
  353. package/src/lights/LightShadow.js +14 -0
  354. package/src/lights/SpotLightShadow.js +9 -1
  355. package/src/lights/webgpu/ProjectorLight.js +46 -0
  356. package/src/loaders/BufferGeometryLoader.js +1 -10
  357. package/src/loaders/ImageBitmapLoader.js +21 -5
  358. package/src/loaders/ObjectLoader.js +44 -16
  359. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  360. package/src/materials/Material.js +1 -7
  361. package/src/materials/nodes/NodeMaterial.js +81 -18
  362. package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
  363. package/src/math/Box3.js +28 -0
  364. package/src/math/Color.js +7 -7
  365. package/src/math/ColorManagement.js +22 -3
  366. package/src/math/FrustumArray.js +253 -0
  367. package/src/math/Ray.js +2 -0
  368. package/src/math/Sphere.js +28 -0
  369. package/src/nodes/Nodes.js +1 -0
  370. package/src/nodes/TSL.js +1 -0
  371. package/src/nodes/accessors/Bitangent.js +31 -9
  372. package/src/nodes/accessors/Camera.js +31 -4
  373. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  374. package/src/nodes/accessors/InstanceNode.js +5 -4
  375. package/src/nodes/accessors/Lights.js +2 -2
  376. package/src/nodes/accessors/MaterialNode.js +4 -0
  377. package/src/nodes/accessors/ModelNode.js +1 -1
  378. package/src/nodes/accessors/Normal.js +26 -6
  379. package/src/nodes/accessors/Object3DNode.js +6 -7
  380. package/src/nodes/accessors/Position.js +14 -4
  381. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  382. package/src/nodes/accessors/ReferenceNode.js +1 -1
  383. package/src/nodes/accessors/SkinningNode.js +3 -2
  384. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  385. package/src/nodes/accessors/StorageTextureNode.js +14 -3
  386. package/src/nodes/accessors/TextureNode.js +59 -8
  387. package/src/nodes/accessors/VelocityNode.js +1 -0
  388. package/src/nodes/accessors/VertexColorNode.js +4 -4
  389. package/src/nodes/code/CodeNode.js +8 -11
  390. package/src/nodes/core/AssignNode.js +27 -5
  391. package/src/nodes/core/AttributeNode.js +2 -2
  392. package/src/nodes/core/CacheNode.js +14 -0
  393. package/src/nodes/core/ContextNode.js +7 -3
  394. package/src/nodes/core/Node.js +68 -19
  395. package/src/nodes/core/NodeBuilder.js +100 -12
  396. package/src/nodes/core/NodeUtils.js +42 -0
  397. package/src/nodes/core/NodeVarying.js +19 -1
  398. package/src/nodes/core/PropertyNode.js +8 -12
  399. package/src/nodes/core/StackNode.js +127 -2
  400. package/src/nodes/core/StructTypeNode.js +26 -4
  401. package/src/nodes/core/VarNode.js +11 -2
  402. package/src/nodes/core/VaryingNode.js +40 -21
  403. package/src/nodes/display/BlendModes.js +42 -1
  404. package/src/nodes/display/ColorSpaceNode.js +4 -27
  405. package/src/nodes/display/PassNode.js +8 -11
  406. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  407. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  408. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  409. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  410. package/src/nodes/gpgpu/ComputeNode.js +1 -1
  411. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  412. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  413. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  414. package/src/nodes/lighting/LightsNode.js +25 -7
  415. package/src/nodes/lighting/ProjectorLightNode.js +78 -0
  416. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  417. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  418. package/src/nodes/lighting/ShadowNode.js +172 -240
  419. package/src/nodes/lighting/SpotLightNode.js +44 -7
  420. package/src/nodes/materialx/lib/mx_noise.js +1 -1
  421. package/src/nodes/math/MathNode.js +56 -20
  422. package/src/nodes/math/OperatorNode.js +109 -82
  423. package/src/nodes/shapes/Shapes.js +5 -4
  424. package/src/nodes/tsl/TSLCore.js +140 -49
  425. package/src/nodes/utils/DebugNode.js +15 -3
  426. package/src/nodes/utils/Discard.js +2 -2
  427. package/src/nodes/utils/LoopNode.js +64 -17
  428. package/src/nodes/utils/ReflectorNode.js +67 -4
  429. package/src/objects/BatchedMesh.js +16 -4
  430. package/src/objects/Mesh.js +9 -0
  431. package/src/objects/Skeleton.js +1 -1
  432. package/src/objects/Sprite.js +9 -0
  433. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  434. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  435. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  436. package/src/renderers/WebGLRenderer.js +21 -10
  437. package/src/renderers/common/Animation.js +2 -2
  438. package/src/renderers/common/Background.js +11 -0
  439. package/src/renderers/common/RenderList.js +0 -4
  440. package/src/renderers/common/RenderObject.js +12 -1
  441. package/src/renderers/common/Renderer.js +116 -8
  442. package/src/renderers/common/Textures.js +15 -21
  443. package/src/renderers/common/TimestampQueryPool.js +1 -0
  444. package/src/renderers/common/Uniform.js +1 -1
  445. package/src/renderers/common/UniformsGroup.js +14 -18
  446. package/src/renderers/common/XRManager.js +154 -25
  447. package/src/renderers/common/extras/PMREMGenerator.js +29 -22
  448. package/src/renderers/common/nodes/Nodes.js +13 -3
  449. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  450. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  451. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  452. package/src/renderers/webgl/WebGLTextures.js +143 -4
  453. package/src/renderers/webgl/WebGLUtils.js +1 -3
  454. package/src/renderers/webgl-fallback/WebGLBackend.js +170 -34
  455. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -7
  456. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  457. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +42 -29
  458. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  459. package/src/renderers/webgpu/WebGPUBackend.js +442 -127
  460. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  461. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  462. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  463. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +75 -27
  464. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  465. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -1
  466. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -5
  467. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  468. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +34 -4
  469. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +44 -49
  470. package/src/renderers/webxr/WebXRController.js +1 -1
  471. package/src/renderers/webxr/WebXRManager.js +2 -1
  472. package/src/textures/DepthTexture.js +6 -10
  473. package/src/textures/Source.js +22 -0
  474. package/src/textures/Texture.js +118 -1
  475. package/src/textures/VideoTexture.js +1 -1
  476. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  477. package/src/core/RenderTargetArray.js +0 -40
@@ -2,7 +2,6 @@ import { Material } from '../Material.js';
2
2
  import { NormalBlending } from '../../constants.js';
3
3
 
4
4
  import { getNodeChildren, getCacheKey } from '../../nodes/core/NodeUtils.js';
5
- import { attribute } from '../../nodes/core/AttributeNode.js';
6
5
  import { output, diffuseColor, emissive, varyingProperty } from '../../nodes/core/PropertyNode.js';
7
6
  import { materialAlphaTest, materialColor, materialOpacity, materialEmissive, materialNormal, materialLightMap, materialAO } from '../../nodes/accessors/MaterialNode.js';
8
7
  import { modelViewProjection } from '../../nodes/accessors/ModelViewProjectionNode.js';
@@ -14,7 +13,7 @@ import { positionLocal, positionView } from '../../nodes/accessors/Position.js';
14
13
  import { skinning } from '../../nodes/accessors/SkinningNode.js';
15
14
  import { morphReference } from '../../nodes/accessors/MorphNode.js';
16
15
  import { mix } from '../../nodes/math/MathNode.js';
17
- import { float, vec3, vec4 } from '../../nodes/tsl/TSLBase.js';
16
+ import { namespace, float, vec3, vec4, bool } from '../../nodes/tsl/TSLBase.js';
18
17
  import AONode from '../../nodes/lighting/AONode.js';
19
18
  import { lightingContext } from '../../nodes/lighting/LightingContextNode.js';
20
19
  import IrradianceNode from '../../nodes/lighting/IrradianceNode.js';
@@ -24,6 +23,7 @@ import { clipping, clippingAlpha, hardwareClipping } from '../../nodes/accessors
24
23
  import NodeMaterialObserver from './manager/NodeMaterialObserver.js';
25
24
  import getAlphaHashThreshold from '../../nodes/functions/material/getAlphaHashThreshold.js';
26
25
  import { modelViewMatrix } from '../../nodes/accessors/ModelNode.js';
26
+ import { vertexColor } from '../../nodes/accessors/VertexColorNode.js';
27
27
 
28
28
  /**
29
29
  * Base class for all node materials.
@@ -188,7 +188,7 @@ class NodeMaterial extends Material {
188
188
  this.opacityNode = null;
189
189
 
190
190
  /**
191
- * This node can be used to to implement a variety of filter-like effects. The idea is
191
+ * This node can be used to implement a variety of filter-like effects. The idea is
192
192
  * to store the current rendering into a texture e.g. via `viewportSharedTexture()`, use it
193
193
  * to create an arbitrary effect and then assign the node composition to this property.
194
194
  * Everything behind the object using this material will now be affected by a filter.
@@ -229,6 +229,15 @@ class NodeMaterial extends Material {
229
229
  */
230
230
  this.alphaTestNode = null;
231
231
 
232
+
233
+ /**
234
+ * Discards the fragment if the mask value is `false`.
235
+ *
236
+ * @type {?Node<bool>}
237
+ * @default null
238
+ */
239
+ this.maskNode = null;
240
+
232
241
  /**
233
242
  * The local vertex positions are computed based on multiple factors like the
234
243
  * attribute data, morphing or skinning. This node property allows to overwrite
@@ -278,7 +287,16 @@ class NodeMaterial extends Material {
278
287
  * @type {?Node<float>}
279
288
  * @default null
280
289
  */
281
- this.shadowPositionNode = null;
290
+ this.receivedShadowPositionNode = null;
291
+
292
+ /**
293
+ * Allows to overwrite the geometry position used for shadow map projection which
294
+ * is by default {@link positionLocal}, the vertex position in local space.
295
+ *
296
+ * @type {?Node<float>}
297
+ * @default null
298
+ */
299
+ this.castShadowPositionNode = null;
282
300
 
283
301
  /**
284
302
  * This node can be used to influence how an object using this node material
@@ -362,6 +380,26 @@ class NodeMaterial extends Material {
362
380
  */
363
381
  this.vertexNode = null;
364
382
 
383
+ // Deprecated properties
384
+
385
+ Object.defineProperty( this, 'shadowPositionNode', { // @deprecated, r176
386
+
387
+ get: () => {
388
+
389
+ return this.receivedShadowPositionNode;
390
+
391
+ },
392
+
393
+ set: ( value ) => {
394
+
395
+ console.warn( 'THREE.NodeMaterial: ".shadowPositionNode" was renamed to ".receivedShadowPositionNode".' );
396
+
397
+ this.receivedShadowPositionNode = value;
398
+
399
+ }
400
+
401
+ } );
402
+
365
403
  }
366
404
 
367
405
  /**
@@ -417,7 +455,9 @@ class NodeMaterial extends Material {
417
455
 
418
456
  builder.addStack();
419
457
 
420
- const vertexNode = this.vertexNode || this.setupVertex( builder );
458
+ const mvp = this.setupVertex( builder );
459
+
460
+ const vertexNode = this.vertexNode || mvp;
421
461
 
422
462
  builder.stack.outputNode = vertexNode;
423
463
 
@@ -632,7 +672,7 @@ class NodeMaterial extends Material {
632
672
 
633
673
  if ( depthNode !== null ) {
634
674
 
635
- depth.assign( depthNode ).append();
675
+ depth.assign( depthNode ).toStack();
636
676
 
637
677
  }
638
678
 
@@ -693,13 +733,13 @@ class NodeMaterial extends Material {
693
733
 
694
734
  if ( geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color ) {
695
735
 
696
- morphReference( object ).append();
736
+ morphReference( object ).toStack();
697
737
 
698
738
  }
699
739
 
700
740
  if ( object.isSkinnedMesh === true ) {
701
741
 
702
- skinning( object ).append();
742
+ skinning( object ).toStack();
703
743
 
704
744
  }
705
745
 
@@ -715,19 +755,19 @@ class NodeMaterial extends Material {
715
755
 
716
756
  if ( object.isBatchedMesh ) {
717
757
 
718
- batch( object ).append();
758
+ batch( object ).toStack();
719
759
 
720
760
  }
721
761
 
722
762
  if ( ( object.isInstancedMesh && object.instanceMatrix && object.instanceMatrix.isInstancedBufferAttribute === true ) ) {
723
763
 
724
- instancedMesh( object ).append();
764
+ instancedMesh( object ).toStack();
725
765
 
726
766
  }
727
767
 
728
768
  if ( this.positionNode !== null ) {
729
769
 
730
- positionLocal.assign( this.positionNode.context( { isPositionNodeInput: true } ) );
770
+ positionLocal.assign( namespace( this.positionNode, 'POSITION' ) );
731
771
 
732
772
  }
733
773
 
@@ -743,17 +783,29 @@ class NodeMaterial extends Material {
743
783
  */
744
784
  setupDiffuseColor( { object, geometry } ) {
745
785
 
786
+ // MASK
787
+
788
+ if ( this.maskNode !== null ) {
789
+
790
+ // Discard if the mask is `false`
791
+
792
+ bool( this.maskNode ).not().discard();
793
+
794
+ }
795
+
796
+ // COLOR
797
+
746
798
  let colorNode = this.colorNode ? vec4( this.colorNode ) : materialColor;
747
799
 
748
800
  // VERTEX COLORS
749
801
 
750
802
  if ( this.vertexColors === true && geometry.hasAttribute( 'color' ) ) {
751
803
 
752
- colorNode = vec4( colorNode.xyz.mul( attribute( 'color', 'vec3' ) ), colorNode.a );
804
+ colorNode = colorNode.mul( vertexColor() );
753
805
 
754
806
  }
755
807
 
756
- // Instanced colors
808
+ // INSTANCED COLORS
757
809
 
758
810
  if ( object.instanceColor ) {
759
811
 
@@ -771,8 +823,7 @@ class NodeMaterial extends Material {
771
823
 
772
824
  }
773
825
 
774
-
775
- // COLOR
826
+ // DIFFUSE COLOR
776
827
 
777
828
  diffuseColor.assign( colorNode );
778
829
 
@@ -783,9 +834,11 @@ class NodeMaterial extends Material {
783
834
 
784
835
  // ALPHA TEST
785
836
 
837
+ let alphaTestNode = null;
838
+
786
839
  if ( this.alphaTestNode !== null || this.alphaTest > 0 ) {
787
840
 
788
- const alphaTestNode = this.alphaTestNode !== null ? float( this.alphaTestNode ) : materialAlphaTest;
841
+ alphaTestNode = this.alphaTestNode !== null ? float( this.alphaTestNode ) : materialAlphaTest;
789
842
 
790
843
  diffuseColor.a.lessThanEqual( alphaTestNode ).discard();
791
844
 
@@ -799,10 +852,18 @@ class NodeMaterial extends Material {
799
852
 
800
853
  }
801
854
 
802
- if ( this.transparent === false && this.blending === NormalBlending && this.alphaToCoverage === false ) {
855
+ // OPAQUE
856
+
857
+ const isOpaque = this.transparent === false && this.blending === NormalBlending && this.alphaToCoverage === false;
858
+
859
+ if ( isOpaque ) {
803
860
 
804
861
  diffuseColor.a.assign( 1.0 );
805
862
 
863
+ } else if ( alphaTestNode === null ) {
864
+
865
+ diffuseColor.a.lessThanEqual( 0 ).discard();
866
+
806
867
  }
807
868
 
808
869
  }
@@ -1160,12 +1221,14 @@ class NodeMaterial extends Material {
1160
1221
  this.backdropNode = source.backdropNode;
1161
1222
  this.backdropAlphaNode = source.backdropAlphaNode;
1162
1223
  this.alphaTestNode = source.alphaTestNode;
1224
+ this.maskNode = source.maskNode;
1163
1225
 
1164
1226
  this.positionNode = source.positionNode;
1165
1227
  this.geometryNode = source.geometryNode;
1166
1228
 
1167
1229
  this.depthNode = source.depthNode;
1168
- this.shadowPositionNode = source.shadowPositionNode;
1230
+ this.receivedShadowPositionNode = source.receivedShadowPositionNode;
1231
+ this.castShadowPositionNode = source.castShadowPositionNode;
1169
1232
  this.receivedShadowNode = source.receivedShadowNode;
1170
1233
  this.castShadowNode = source.castShadowNode;
1171
1234
 
@@ -5,6 +5,7 @@ const refreshUniforms = [
5
5
  'anisotropyMap',
6
6
  'anisotropyRotation',
7
7
  'aoMap',
8
+ 'aoMapIntensity',
8
9
  'attenuationColor',
9
10
  'attenuationDistance',
10
11
  'bumpMap',
@@ -17,8 +18,10 @@ const refreshUniforms = [
17
18
  'dispersion',
18
19
  'displacementMap',
19
20
  'emissive',
21
+ 'emissiveIntensity',
20
22
  'emissiveMap',
21
23
  'envMap',
24
+ 'envMapIntensity',
22
25
  'gradientMap',
23
26
  'ior',
24
27
  'iridescence',
@@ -26,6 +29,7 @@ const refreshUniforms = [
26
29
  'iridescenceMap',
27
30
  'iridescenceThicknessMap',
28
31
  'lightMap',
32
+ 'lightMapIntensity',
29
33
  'map',
30
34
  'matcap',
31
35
  'metalness',
@@ -126,6 +130,20 @@ class NodeMaterialObserver {
126
130
 
127
131
  }
128
132
 
133
+ /**
134
+ * Returns `true` if the current rendering produces motion vectors.
135
+ *
136
+ * @param {Renderer} renderer - The renderer.
137
+ * @return {boolean} Whether the current rendering produces motion vectors or not.
138
+ */
139
+ needsVelocity( renderer ) {
140
+
141
+ const mrt = renderer.getMRT();
142
+
143
+ return ( mrt !== null && mrt.has( 'velocity' ) );
144
+
145
+ }
146
+
129
147
  /**
130
148
  * Returns monitoring data for the given render object.
131
149
  *
@@ -229,7 +247,7 @@ class NodeMaterialObserver {
229
247
 
230
248
  }
231
249
 
232
- if ( builder.renderer.nodes.modelViewMatrix !== null || builder.renderer.nodes.modelNormalViewMatrix !== null )
250
+ if ( builder.renderer.overrideNodes.modelViewMatrix !== null || builder.renderer.overrideNodes.modelNormalViewMatrix !== null )
233
251
  return true;
234
252
 
235
253
  return false;
@@ -479,7 +497,7 @@ class NodeMaterialObserver {
479
497
  */
480
498
  needsRefresh( renderObject, nodeFrame ) {
481
499
 
482
- if ( this.hasNode || this.hasAnimation || this.firstInitialization( renderObject ) )
500
+ if ( this.hasNode || this.hasAnimation || this.firstInitialization( renderObject ) || this.needsVelocity( nodeFrame.renderer ) )
483
501
  return true;
484
502
 
485
503
  const { renderId } = nodeFrame;
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
 
@@ -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 };