super-three 0.177.0 → 0.181.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 (501) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +1994 -749
  3. package/build/three.core.js +1358 -506
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +631 -247
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +113 -33
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +9571 -3424
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +9397 -3426
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  14. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  15. package/examples/jsm/Addons.js +2 -3
  16. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  17. package/examples/jsm/capabilities/WebGL.js +0 -27
  18. package/examples/jsm/capabilities/WebGPU.js +1 -1
  19. package/examples/jsm/controls/ArcballControls.js +9 -9
  20. package/examples/jsm/controls/DragControls.js +7 -57
  21. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  22. package/examples/jsm/controls/FlyControls.js +1 -1
  23. package/examples/jsm/controls/OrbitControls.js +2 -2
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +1 -1
  26. package/examples/jsm/controls/TransformControls.js +62 -15
  27. package/examples/jsm/csm/CSMShadowNode.js +4 -4
  28. package/examples/jsm/effects/AsciiEffect.js +8 -8
  29. package/examples/jsm/environments/RoomEnvironment.js +8 -3
  30. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  31. package/examples/jsm/exporters/EXRExporter.js +1 -1
  32. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  33. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  34. package/examples/jsm/exporters/PLYExporter.js +1 -1
  35. package/examples/jsm/exporters/USDZExporter.js +683 -299
  36. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  37. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  38. package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
  39. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  40. package/examples/jsm/geometries/TextGeometry.js +3 -2
  41. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  42. package/examples/jsm/helpers/ViewHelper.js +43 -5
  43. package/examples/jsm/inspector/Inspector.js +427 -0
  44. package/examples/jsm/inspector/RendererInspector.js +415 -0
  45. package/examples/jsm/inspector/tabs/Console.js +204 -0
  46. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  47. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  48. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  49. package/examples/jsm/inspector/ui/Graph.js +95 -0
  50. package/examples/jsm/inspector/ui/Item.js +170 -0
  51. package/examples/jsm/inspector/ui/List.js +75 -0
  52. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  53. package/examples/jsm/inspector/ui/Style.js +654 -0
  54. package/examples/jsm/inspector/ui/Tab.js +46 -0
  55. package/examples/jsm/inspector/ui/Values.js +423 -0
  56. package/examples/jsm/inspector/ui/utils.js +56 -0
  57. package/examples/jsm/interactive/HTMLMesh.js +11 -13
  58. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  59. package/examples/jsm/interactive/SelectionBox.js +30 -0
  60. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  61. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  62. package/examples/jsm/lights/LightProbeGenerator.js +14 -3
  63. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  64. package/examples/jsm/lines/Line2.js +3 -3
  65. package/examples/jsm/lines/LineGeometry.js +1 -1
  66. package/examples/jsm/lines/LineSegments2.js +2 -2
  67. package/examples/jsm/lines/Wireframe.js +2 -2
  68. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  69. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  70. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  71. package/examples/jsm/loaders/3MFLoader.js +1 -1
  72. package/examples/jsm/loaders/ColladaLoader.js +4 -4
  73. package/examples/jsm/loaders/DDSLoader.js +1 -1
  74. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  75. package/examples/jsm/loaders/EXRLoader.js +210 -22
  76. package/examples/jsm/loaders/FBXLoader.js +4 -4
  77. package/examples/jsm/loaders/FontLoader.js +23 -5
  78. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  79. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  80. package/examples/jsm/loaders/HDRLoader.js +486 -0
  81. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  82. package/examples/jsm/loaders/KTXLoader.js +2 -2
  83. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  84. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  85. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  86. package/examples/jsm/loaders/LWOLoader.js +2 -2
  87. package/examples/jsm/loaders/MaterialXLoader.js +233 -34
  88. package/examples/jsm/loaders/OBJLoader.js +1 -1
  89. package/examples/jsm/loaders/PDBLoader.js +1 -1
  90. package/examples/jsm/loaders/RGBELoader.js +7 -473
  91. package/examples/jsm/loaders/SVGLoader.js +2 -2
  92. package/examples/jsm/loaders/TTFLoader.js +13 -1
  93. package/examples/jsm/loaders/USDLoader.js +219 -0
  94. package/examples/jsm/loaders/USDZLoader.js +4 -892
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  96. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  97. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  98. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  99. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  100. package/examples/jsm/math/ColorSpaces.js +19 -1
  101. package/examples/jsm/math/ConvexHull.js +3 -3
  102. package/examples/jsm/math/ImprovedNoise.js +1 -1
  103. package/examples/jsm/math/Lut.js +2 -2
  104. package/examples/jsm/math/SimplexNoise.js +1 -1
  105. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  106. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  107. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  108. package/examples/jsm/misc/TubePainter.js +383 -40
  109. package/examples/jsm/misc/Volume.js +1 -1
  110. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  111. package/examples/jsm/objects/LensflareMesh.js +3 -3
  112. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  113. package/examples/jsm/objects/Sky.js +1 -1
  114. package/examples/jsm/objects/SkyMesh.js +3 -3
  115. package/examples/jsm/objects/Water.js +3 -3
  116. package/examples/jsm/objects/WaterMesh.js +6 -6
  117. package/examples/jsm/physics/RapierPhysics.js +95 -16
  118. package/examples/jsm/postprocessing/GTAOPass.js +10 -9
  119. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  120. package/examples/jsm/postprocessing/OutlinePass.js +17 -17
  121. package/examples/jsm/postprocessing/SSAOPass.js +10 -9
  122. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  123. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  124. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  125. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  126. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  127. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  128. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  129. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  130. package/examples/jsm/shaders/BokehShader.js +1 -1
  131. package/examples/jsm/shaders/BokehShader2.js +1 -1
  132. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  133. package/examples/jsm/shaders/FocusShader.js +1 -1
  134. package/examples/jsm/shaders/GTAOShader.js +2 -2
  135. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  136. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  137. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  138. package/examples/jsm/shaders/SSRShader.js +1 -1
  139. package/examples/jsm/shaders/SepiaShader.js +1 -1
  140. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  141. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  142. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
  143. package/examples/jsm/shaders/VignetteShader.js +1 -1
  144. package/examples/jsm/transpiler/AST.js +381 -30
  145. package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
  146. package/examples/jsm/transpiler/Linker.js +327 -0
  147. package/examples/jsm/transpiler/TSLEncoder.js +196 -92
  148. package/examples/jsm/transpiler/Transpiler.js +17 -1
  149. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  150. package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  151. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  152. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  153. package/examples/jsm/tsl/display/BloomNode.js +11 -6
  154. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  155. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  156. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  157. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  158. package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
  159. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  160. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  161. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  162. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  163. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  164. package/examples/jsm/tsl/display/TRAANode.js +578 -0
  165. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  166. package/examples/jsm/tsl/display/hashBlur.js +18 -20
  167. package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
  168. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  169. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  170. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  171. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  172. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  173. package/package.json +5 -10
  174. package/src/Three.Core.js +5 -2
  175. package/src/Three.TSL.js +112 -32
  176. package/src/Three.WebGPU.Nodes.js +2 -0
  177. package/src/Three.WebGPU.js +4 -0
  178. package/src/animation/AnimationClip.js +20 -4
  179. package/src/animation/AnimationMixer.js +3 -3
  180. package/src/animation/AnimationObjectGroup.js +2 -1
  181. package/src/animation/KeyframeTrack.js +8 -7
  182. package/src/animation/PropertyBinding.js +12 -11
  183. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  184. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  185. package/src/audio/Audio.js +10 -9
  186. package/src/audio/PositionalAudio.js +1 -1
  187. package/src/cameras/Camera.js +14 -0
  188. package/src/cameras/OrthographicCamera.js +2 -2
  189. package/src/cameras/PerspectiveCamera.js +2 -2
  190. package/src/cameras/StereoCamera.js +2 -2
  191. package/src/constants.js +13 -5
  192. package/src/core/BufferAttribute.js +3 -3
  193. package/src/core/BufferGeometry.js +10 -10
  194. package/src/core/Clock.js +2 -8
  195. package/src/core/EventDispatcher.js +1 -1
  196. package/src/core/GLBufferAttribute.js +13 -1
  197. package/src/core/InterleavedBuffer.js +1 -1
  198. package/src/core/InterleavedBufferAttribute.js +3 -2
  199. package/src/core/Object3D.js +4 -3
  200. package/src/core/Raycaster.js +2 -1
  201. package/src/core/RenderTarget.js +10 -1
  202. package/{examples/jsm/misc → src/core}/Timer.js +4 -42
  203. package/src/extras/Controls.js +5 -4
  204. package/src/extras/DataUtils.js +2 -1
  205. package/src/extras/Earcut.js +6 -0
  206. package/src/extras/ImageUtils.js +2 -2
  207. package/src/extras/PMREMGenerator.js +279 -55
  208. package/src/extras/TextureUtils.js +2 -1
  209. package/src/extras/core/Curve.js +2 -1
  210. package/src/extras/core/Interpolations.js +7 -1
  211. package/src/extras/core/Path.js +22 -22
  212. package/src/extras/core/ShapePath.js +4 -4
  213. package/src/extras/lib/earcut.js +8 -8
  214. package/src/geometries/BoxGeometry.js +1 -0
  215. package/src/geometries/CapsuleGeometry.js +1 -0
  216. package/src/geometries/CircleGeometry.js +1 -0
  217. package/src/geometries/ConeGeometry.js +1 -0
  218. package/src/geometries/CylinderGeometry.js +1 -0
  219. package/src/geometries/DodecahedronGeometry.js +1 -0
  220. package/src/geometries/ExtrudeGeometry.js +8 -6
  221. package/src/geometries/IcosahedronGeometry.js +1 -0
  222. package/src/geometries/LatheGeometry.js +1 -0
  223. package/src/geometries/OctahedronGeometry.js +1 -0
  224. package/src/geometries/PlaneGeometry.js +1 -0
  225. package/src/geometries/RingGeometry.js +1 -0
  226. package/src/geometries/ShapeGeometry.js +1 -0
  227. package/src/geometries/SphereGeometry.js +1 -0
  228. package/src/geometries/TetrahedronGeometry.js +1 -0
  229. package/src/geometries/TorusGeometry.js +1 -0
  230. package/src/geometries/TorusKnotGeometry.js +1 -0
  231. package/src/geometries/TubeGeometry.js +1 -0
  232. package/src/helpers/CameraHelper.js +42 -12
  233. package/src/helpers/SkeletonHelper.js +35 -6
  234. package/src/lights/LightShadow.js +21 -8
  235. package/src/lights/PointLightShadow.js +1 -1
  236. package/src/lights/webgpu/ProjectorLight.js +1 -1
  237. package/src/loaders/AnimationLoader.js +2 -1
  238. package/src/loaders/AudioLoader.js +2 -1
  239. package/src/loaders/BufferGeometryLoader.js +2 -2
  240. package/src/loaders/Cache.js +2 -2
  241. package/src/loaders/DataTextureLoader.js +1 -1
  242. package/src/loaders/FileLoader.js +29 -5
  243. package/src/loaders/ImageBitmapLoader.js +32 -8
  244. package/src/loaders/ImageLoader.js +56 -9
  245. package/src/loaders/Loader.js +17 -3
  246. package/src/loaders/LoadingManager.js +45 -0
  247. package/src/loaders/MaterialLoader.js +3 -2
  248. package/src/loaders/ObjectLoader.js +13 -13
  249. package/src/loaders/TextureLoader.js +1 -1
  250. package/src/loaders/nodes/NodeLoader.js +3 -2
  251. package/src/materials/Material.js +16 -3
  252. package/src/materials/MeshBasicMaterial.js +2 -1
  253. package/src/materials/MeshDepthMaterial.js +1 -0
  254. package/src/materials/MeshDistanceMaterial.js +1 -1
  255. package/src/materials/MeshLambertMaterial.js +2 -1
  256. package/src/materials/MeshMatcapMaterial.js +22 -0
  257. package/src/materials/MeshNormalMaterial.js +1 -0
  258. package/src/materials/MeshPhongMaterial.js +2 -1
  259. package/src/materials/MeshPhysicalMaterial.js +2 -1
  260. package/src/materials/MeshStandardMaterial.js +8 -7
  261. package/src/materials/MeshToonMaterial.js +1 -0
  262. package/src/materials/PointsMaterial.js +1 -1
  263. package/src/materials/ShaderMaterial.js +2 -2
  264. package/src/materials/nodes/Line2NodeMaterial.js +2 -10
  265. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  266. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  267. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  268. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  269. package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
  270. package/src/materials/nodes/NodeMaterial.js +90 -27
  271. package/src/materials/nodes/PointsNodeMaterial.js +86 -28
  272. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  273. package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
  274. package/src/math/Color.js +6 -5
  275. package/src/math/ColorManagement.js +9 -3
  276. package/src/math/Cylindrical.js +1 -1
  277. package/src/math/Euler.js +2 -1
  278. package/src/math/Frustum.js +25 -9
  279. package/src/math/FrustumArray.js +10 -5
  280. package/src/math/Line3.js +129 -2
  281. package/src/math/MathUtils.js +13 -11
  282. package/src/math/Matrix2.js +1 -1
  283. package/src/math/Matrix3.js +2 -2
  284. package/src/math/Matrix4.js +55 -34
  285. package/src/math/Plane.js +1 -1
  286. package/src/math/Quaternion.js +69 -67
  287. package/src/math/Spherical.js +3 -3
  288. package/src/nodes/Nodes.js +6 -4
  289. package/src/nodes/TSL.js +9 -4
  290. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  291. package/src/nodes/accessors/Bitangent.js +31 -25
  292. package/src/nodes/accessors/BufferNode.js +1 -1
  293. package/src/nodes/accessors/Camera.js +142 -16
  294. package/src/nodes/accessors/ClippingNode.js +6 -5
  295. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  296. package/src/nodes/accessors/InstanceNode.js +25 -5
  297. package/src/nodes/accessors/Lights.js +10 -0
  298. package/src/nodes/accessors/Normal.js +97 -30
  299. package/src/nodes/accessors/Object3DNode.js +2 -2
  300. package/src/nodes/accessors/Position.js +25 -9
  301. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  302. package/src/nodes/accessors/ReferenceNode.js +20 -4
  303. package/src/nodes/accessors/ReflectVector.js +3 -3
  304. package/src/nodes/accessors/SceneNode.js +3 -2
  305. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  306. package/src/nodes/accessors/StorageTextureNode.js +23 -1
  307. package/src/nodes/accessors/Tangent.js +25 -17
  308. package/src/nodes/accessors/TangentUtils.js +46 -0
  309. package/src/nodes/accessors/Texture3DNode.js +14 -1
  310. package/src/nodes/accessors/TextureBicubic.js +21 -3
  311. package/src/nodes/accessors/TextureNode.js +142 -44
  312. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  313. package/src/nodes/code/FunctionCallNode.js +24 -4
  314. package/src/nodes/code/FunctionNode.js +23 -0
  315. package/src/nodes/core/ArrayNode.js +13 -0
  316. package/src/nodes/core/AssignNode.js +6 -2
  317. package/src/nodes/core/AttributeNode.js +2 -1
  318. package/src/nodes/core/ContextNode.js +48 -10
  319. package/src/nodes/core/IndexNode.js +2 -2
  320. package/src/nodes/core/InputNode.js +2 -1
  321. package/src/nodes/core/InspectorNode.js +128 -0
  322. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
  323. package/src/nodes/core/Node.js +167 -34
  324. package/src/nodes/core/NodeBuilder.js +404 -120
  325. package/src/nodes/core/NodeFrame.js +21 -21
  326. package/src/nodes/core/NodeFunction.js +2 -1
  327. package/src/nodes/core/NodeParser.js +2 -1
  328. package/src/nodes/core/NodeUniform.js +1 -1
  329. package/src/nodes/core/NodeUtils.js +17 -88
  330. package/src/nodes/core/ParameterNode.js +31 -0
  331. package/src/nodes/core/PropertyNode.js +7 -0
  332. package/src/nodes/core/StackNode.js +77 -30
  333. package/src/nodes/core/StructNode.js +5 -5
  334. package/src/nodes/core/StructTypeNode.js +1 -0
  335. package/src/nodes/core/SubBuildNode.js +89 -0
  336. package/src/nodes/core/UniformNode.js +80 -14
  337. package/src/nodes/core/VarNode.js +142 -16
  338. package/src/nodes/core/VaryingNode.js +9 -6
  339. package/src/nodes/display/BlendModes.js +7 -6
  340. package/src/nodes/display/BumpMapNode.js +1 -1
  341. package/src/nodes/display/ColorAdjustment.js +1 -1
  342. package/src/nodes/display/FrontFacingNode.js +35 -7
  343. package/src/nodes/display/NormalMapNode.js +20 -50
  344. package/src/nodes/display/PassNode.js +206 -17
  345. package/src/nodes/display/RenderOutputNode.js +28 -2
  346. package/src/nodes/display/ScreenNode.js +44 -40
  347. package/src/nodes/display/ToneMappingNode.js +31 -4
  348. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  349. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  350. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  351. package/src/nodes/display/ViewportTextureNode.js +94 -4
  352. package/src/nodes/fog/Fog.js +3 -2
  353. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  354. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  355. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  356. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  357. package/src/nodes/functions/BasicLightingModel.js +2 -1
  358. package/src/nodes/functions/PhongLightingModel.js +3 -3
  359. package/src/nodes/functions/PhysicalLightingModel.js +19 -18
  360. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  361. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  362. package/src/nodes/geometry/RangeNode.js +40 -4
  363. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  364. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  365. package/src/nodes/gpgpu/ComputeNode.js +81 -25
  366. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  367. package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
  368. package/src/nodes/lighting/EnvironmentNode.js +11 -11
  369. package/src/nodes/lighting/LightsNode.js +7 -8
  370. package/src/nodes/lighting/PointShadowNode.js +6 -0
  371. package/src/nodes/lighting/ProjectorLightNode.js +19 -6
  372. package/src/nodes/lighting/ShadowFilterNode.js +3 -1
  373. package/src/nodes/lighting/ShadowNode.js +77 -10
  374. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  375. package/src/nodes/materialx/lib/mx_noise.js +165 -1
  376. package/src/nodes/math/BitcastNode.js +156 -0
  377. package/src/nodes/math/ConditionalNode.js +25 -27
  378. package/src/nodes/math/MathNode.js +106 -65
  379. package/src/nodes/math/OperatorNode.js +28 -43
  380. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  381. package/src/nodes/shapes/Shapes.js +1 -1
  382. package/src/nodes/tsl/TSLBase.js +6 -2
  383. package/src/nodes/tsl/TSLCore.js +546 -186
  384. package/src/nodes/utils/DebugNode.js +3 -2
  385. package/src/nodes/utils/EquirectUV.js +27 -0
  386. package/src/nodes/utils/EventNode.js +119 -0
  387. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  388. package/src/nodes/utils/JoinNode.js +6 -3
  389. package/src/nodes/utils/LoopNode.js +20 -41
  390. package/src/nodes/utils/MatcapUV.js +22 -0
  391. package/src/nodes/utils/MemberNode.js +59 -7
  392. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  393. package/src/nodes/utils/RTTNode.js +33 -6
  394. package/src/nodes/utils/ReflectorNode.js +68 -10
  395. package/src/nodes/utils/SampleNode.js +91 -0
  396. package/src/nodes/utils/SplitNode.js +11 -0
  397. package/src/nodes/utils/Timer.js +0 -47
  398. package/src/nodes/utils/TriplanarTextures.js +65 -0
  399. package/src/objects/BatchedMesh.js +6 -4
  400. package/src/objects/LOD.js +1 -1
  401. package/src/objects/Line.js +2 -1
  402. package/src/objects/LineSegments.js +2 -1
  403. package/src/objects/Skeleton.js +3 -2
  404. package/src/objects/SkinnedMesh.js +3 -1
  405. package/src/objects/Sprite.js +4 -3
  406. package/src/renderers/WebGLRenderer.js +77 -66
  407. package/src/renderers/common/Animation.js +13 -1
  408. package/src/renderers/common/Attributes.js +1 -1
  409. package/src/renderers/common/Backend.js +108 -27
  410. package/src/renderers/common/Background.js +4 -3
  411. package/src/renderers/common/Bindings.js +76 -19
  412. package/src/renderers/common/CanvasTarget.js +341 -0
  413. package/src/renderers/common/ChainMap.js +1 -1
  414. package/src/renderers/common/Color4.js +2 -2
  415. package/src/renderers/common/CubeRenderTarget.js +1 -1
  416. package/src/renderers/common/DataMap.js +1 -1
  417. package/src/renderers/common/Geometries.js +26 -0
  418. package/src/renderers/common/Info.js +4 -2
  419. package/src/renderers/common/InspectorBase.js +146 -0
  420. package/src/renderers/common/Pipelines.js +1 -1
  421. package/src/renderers/common/PostProcessing.js +61 -25
  422. package/src/renderers/common/QuadMesh.js +7 -1
  423. package/src/renderers/common/RenderContext.js +2 -2
  424. package/src/renderers/common/RenderList.js +7 -3
  425. package/src/renderers/common/RenderObject.js +84 -5
  426. package/src/renderers/common/RenderObjects.js +1 -1
  427. package/src/renderers/common/Renderer.js +486 -255
  428. package/src/renderers/common/RendererUtils.js +9 -0
  429. package/src/renderers/common/SampledTexture.js +8 -68
  430. package/src/renderers/common/Sampler.js +117 -0
  431. package/src/renderers/common/Storage3DTexture.js +100 -0
  432. package/src/renderers/common/StorageArrayTexture.js +84 -0
  433. package/src/renderers/common/StorageTexture.js +27 -0
  434. package/src/renderers/common/Textures.js +138 -46
  435. package/src/renderers/common/TimestampQueryPool.js +65 -3
  436. package/src/renderers/common/UniformsGroup.js +2 -1
  437. package/src/renderers/common/XRManager.js +63 -24
  438. package/src/renderers/common/XRRenderTarget.js +21 -4
  439. package/src/renderers/common/extras/PMREMGenerator.js +161 -66
  440. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  441. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  442. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  443. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  444. package/src/renderers/common/nodes/Nodes.js +38 -16
  445. package/src/renderers/shaders/DFGLUTData.js +64 -0
  446. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  447. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  449. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  450. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  451. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  454. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
  455. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  456. package/src/renderers/shaders/UniformsLib.js +1 -0
  457. package/src/renderers/shaders/UniformsUtils.js +25 -4
  458. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  459. package/src/renderers/webgl/WebGLCapabilities.js +4 -3
  460. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  461. package/src/renderers/webgl/WebGLInfo.js +3 -1
  462. package/src/renderers/webgl/WebGLProgram.js +25 -18
  463. package/src/renderers/webgl/WebGLPrograms.js +9 -6
  464. package/src/renderers/webgl/WebGLShadowMap.js +13 -2
  465. package/src/renderers/webgl/WebGLState.js +17 -16
  466. package/src/renderers/webgl/WebGLTextures.js +38 -21
  467. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  468. package/src/renderers/webgl/WebGLUtils.js +3 -2
  469. package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
  470. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
  471. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  472. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  473. package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
  474. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
  475. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  476. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  477. package/src/renderers/webgpu/WebGPUBackend.js +205 -128
  478. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  479. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  480. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
  481. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
  482. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
  483. package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
  484. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
  485. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  486. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
  487. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  488. package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
  489. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  490. package/src/renderers/webxr/WebXRManager.js +89 -13
  491. package/src/textures/ExternalTexture.js +56 -0
  492. package/src/textures/FramebufferTexture.js +2 -2
  493. package/src/textures/Source.js +14 -3
  494. package/src/textures/Texture.js +3 -2
  495. package/src/textures/VideoTexture.js +29 -2
  496. package/src/utils.js +67 -3
  497. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  498. package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
  499. package/src/nodes/utils/EquirectUVNode.js +0 -65
  500. package/src/nodes/utils/MatcapUVNode.js +0 -49
  501. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -34,7 +34,7 @@ function createColorManagement() {
34
34
  * - luminanceCoefficients: RGB luminance coefficients
35
35
  *
36
36
  * Optional:
37
- * - outputColorSpaceConfig: { drawingBufferColorSpace: ColorSpace }
37
+ * - outputColorSpaceConfig: { drawingBufferColorSpace: ColorSpace, toneMappingMode: 'extended' | 'standard' }
38
38
  * - workingColorSpaceConfig: { unpackColorSpace: ColorSpace }
39
39
  *
40
40
  * Reference:
@@ -103,6 +103,12 @@ function createColorManagement() {
103
103
 
104
104
  },
105
105
 
106
+ getToneMappingMode: function ( colorSpace ) {
107
+
108
+ return this.spaces[ colorSpace ].outputColorSpaceConfig.toneMappingMode || 'standard';
109
+
110
+ },
111
+
106
112
  getLuminanceCoefficients: function ( target, colorSpace = this.workingColorSpace ) {
107
113
 
108
114
  return target.fromArray( this.spaces[ colorSpace ].luminanceCoefficients );
@@ -141,7 +147,7 @@ function createColorManagement() {
141
147
 
142
148
  fromWorkingColorSpace: function ( color, targetColorSpace ) {
143
149
 
144
- warnOnce( 'THREE.ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace().' ); // @deprecated, r177
150
+ warnOnce( 'ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace().' ); // @deprecated, r177
145
151
 
146
152
  return ColorManagement.workingToColorSpace( color, targetColorSpace );
147
153
 
@@ -149,7 +155,7 @@ function createColorManagement() {
149
155
 
150
156
  toWorkingColorSpace: function ( color, sourceColorSpace ) {
151
157
 
152
- warnOnce( 'THREE.ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking().' ); // @deprecated, r177
158
+ warnOnce( 'ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking().' ); // @deprecated, r177
153
159
 
154
160
  return ColorManagement.colorSpaceToWorking( color, sourceColorSpace );
155
161
 
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * This class can be used to represent points in 3D space as
3
- * [Cylindrical coordinates]{@link https://en.wikipedia.org/wiki/Cylindrical_coordinate_system}.
3
+ * [Cylindrical coordinates](https://en.wikipedia.org/wiki/Cylindrical_coordinate_system).
4
4
  */
5
5
  class Cylindrical {
6
6
 
package/src/math/Euler.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Quaternion } from './Quaternion.js';
2
2
  import { Matrix4 } from './Matrix4.js';
3
3
  import { clamp } from './MathUtils.js';
4
+ import { warn } from '../utils.js';
4
5
 
5
6
  const _matrix = /*@__PURE__*/ new Matrix4();
6
7
  const _quaternion = /*@__PURE__*/ new Quaternion();
@@ -304,7 +305,7 @@ class Euler {
304
305
 
305
306
  default:
306
307
 
307
- console.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );
308
+ warn( 'Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );
308
309
 
309
310
  }
310
311
 
@@ -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
  /**
@@ -87,9 +89,10 @@ class Frustum {
87
89
  *
88
90
  * @param {Matrix4} m - The projection matrix.
89
91
  * @param {(WebGLCoordinateSystem|WebGPUCoordinateSystem)} coordinateSystem - The coordinate system.
92
+ * @param {boolean} [reversedDepth=false] - Whether to use a reversed depth.
90
93
  * @return {Frustum} A reference to this frustum.
91
94
  */
92
- setFromProjectionMatrix( m, coordinateSystem = WebGLCoordinateSystem ) {
95
+ setFromProjectionMatrix( m, coordinateSystem = WebGLCoordinateSystem, reversedDepth = false ) {
93
96
 
94
97
  const planes = this.planes;
95
98
  const me = m.elements;
@@ -102,19 +105,29 @@ class Frustum {
102
105
  planes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();
103
106
  planes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();
104
107
  planes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();
105
- planes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();
106
108
 
107
- if ( coordinateSystem === WebGLCoordinateSystem ) {
109
+ if ( reversedDepth ) {
108
110
 
109
- planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();
111
+ planes[ 4 ].setComponents( me2, me6, me10, me14 ).normalize(); // far
112
+ planes[ 5 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize(); // near
110
113
 
111
- } else if ( coordinateSystem === WebGPUCoordinateSystem ) {
114
+ } else {
112
115
 
113
- planes[ 5 ].setComponents( me2, me6, me10, me14 ).normalize();
116
+ planes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize(); // far
114
117
 
115
- } else {
118
+ if ( coordinateSystem === WebGLCoordinateSystem ) {
119
+
120
+ planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize(); // near
121
+
122
+ } else if ( coordinateSystem === WebGPUCoordinateSystem ) {
123
+
124
+ planes[ 5 ].setComponents( me2, me6, me10, me14 ).normalize(); // near
116
125
 
117
- throw new Error( 'THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: ' + coordinateSystem );
126
+ } else {
127
+
128
+ throw new Error( 'THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: ' + coordinateSystem );
129
+
130
+ }
118
131
 
119
132
  }
120
133
 
@@ -161,7 +174,10 @@ class Frustum {
161
174
  intersectsSprite( sprite ) {
162
175
 
163
176
  _sphere.center.set( 0, 0, 0 );
164
- _sphere.radius = 0.7071067811865476;
177
+
178
+ const offset = _defaultSpriteCenter.distanceTo( sprite.center );
179
+
180
+ _sphere.radius = 0.7071067811865476 + offset;
165
181
  _sphere.applyMatrix4( sprite.matrixWorld );
166
182
 
167
183
  return this.intersectsSphere( _sphere );
@@ -54,7 +54,8 @@ class FrustumArray {
54
54
 
55
55
  _frustum.setFromProjectionMatrix(
56
56
  _projScreenMatrix,
57
- this.coordinateSystem
57
+ camera.coordinateSystem,
58
+ camera.reversedDepth
58
59
  );
59
60
 
60
61
  if ( _frustum.intersectsObject( object ) ) {
@@ -96,7 +97,8 @@ class FrustumArray {
96
97
 
97
98
  _frustum.setFromProjectionMatrix(
98
99
  _projScreenMatrix,
99
- this.coordinateSystem
100
+ camera.coordinateSystem,
101
+ camera.reversedDepth
100
102
  );
101
103
 
102
104
  if ( _frustum.intersectsSprite( sprite ) ) {
@@ -138,7 +140,8 @@ class FrustumArray {
138
140
 
139
141
  _frustum.setFromProjectionMatrix(
140
142
  _projScreenMatrix,
141
- this.coordinateSystem
143
+ camera.coordinateSystem,
144
+ camera.reversedDepth
142
145
  );
143
146
 
144
147
  if ( _frustum.intersectsSphere( sphere ) ) {
@@ -180,7 +183,8 @@ class FrustumArray {
180
183
 
181
184
  _frustum.setFromProjectionMatrix(
182
185
  _projScreenMatrix,
183
- this.coordinateSystem
186
+ camera.coordinateSystem,
187
+ camera.reversedDepth
184
188
  );
185
189
 
186
190
  if ( _frustum.intersectsBox( box ) ) {
@@ -222,7 +226,8 @@ class FrustumArray {
222
226
 
223
227
  _frustum.setFromProjectionMatrix(
224
228
  _projScreenMatrix,
225
- this.coordinateSystem
229
+ camera.coordinateSystem,
230
+ camera.reversedDepth
226
231
  );
227
232
 
228
233
  if ( _frustum.containsPoint( point ) ) {
package/src/math/Line3.js CHANGED
@@ -4,6 +4,12 @@ import { clamp } from './MathUtils.js';
4
4
  const _startP = /*@__PURE__*/ new Vector3();
5
5
  const _startEnd = /*@__PURE__*/ new Vector3();
6
6
 
7
+ const _d1 = /*@__PURE__*/ new Vector3();
8
+ const _d2 = /*@__PURE__*/ new Vector3();
9
+ const _r = /*@__PURE__*/ new Vector3();
10
+ const _c1 = /*@__PURE__*/ new Vector3();
11
+ const _c2 = /*@__PURE__*/ new Vector3();
12
+
7
13
  /**
8
14
  * An analytical line segment in 3D space represented by a start and end point.
9
15
  */
@@ -151,11 +157,11 @@ class Line3 {
151
157
  }
152
158
 
153
159
  /**
154
- * Returns the closets point on the line for a given point.
160
+ * Returns the closest point on the line for a given point.
155
161
  *
156
162
  * @param {Vector3} point - The point to compute the closest point on the line for.
157
163
  * @param {boolean} clampToLine - Whether to clamp the result to the range `[0,1]` or not.
158
- * @param {Vector3} target - The target vector that is used to store the method's result.
164
+ * @param {Vector3} target - The target vector that is used to store the method's result.
159
165
  * @return {Vector3} The closest point on the line.
160
166
  */
161
167
  closestPointToPoint( point, clampToLine, target ) {
@@ -166,6 +172,127 @@ class Line3 {
166
172
 
167
173
  }
168
174
 
175
+ /**
176
+ * Returns the closest squared distance between this line segment and the given one.
177
+ *
178
+ * @param {Line3} line - The line segment to compute the closest squared distance to.
179
+ * @param {Vector3} [c1] - The closest point on this line segment.
180
+ * @param {Vector3} [c2] - The closest point on the given line segment.
181
+ * @return {number} The squared distance between this line segment and the given one.
182
+ */
183
+ distanceSqToLine3( line, c1 = _c1, c2 = _c2 ) {
184
+
185
+ // from Real-Time Collision Detection by Christer Ericson, chapter 5.1.9
186
+
187
+ // Computes closest points C1 and C2 of S1(s)=P1+s*(Q1-P1) and
188
+ // S2(t)=P2+t*(Q2-P2), returning s and t. Function result is squared
189
+ // distance between between S1(s) and S2(t)
190
+
191
+ const EPSILON = 1e-8 * 1e-8; // must be squared since we compare squared length
192
+ let s, t;
193
+
194
+ const p1 = this.start;
195
+ const p2 = line.start;
196
+ const q1 = this.end;
197
+ const q2 = line.end;
198
+
199
+ _d1.subVectors( q1, p1 ); // Direction vector of segment S1
200
+ _d2.subVectors( q2, p2 ); // Direction vector of segment S2
201
+ _r.subVectors( p1, p2 );
202
+
203
+ const a = _d1.dot( _d1 ); // Squared length of segment S1, always nonnegative
204
+ const e = _d2.dot( _d2 ); // Squared length of segment S2, always nonnegative
205
+ const f = _d2.dot( _r );
206
+
207
+ // Check if either or both segments degenerate into points
208
+
209
+ if ( a <= EPSILON && e <= EPSILON ) {
210
+
211
+ // Both segments degenerate into points
212
+
213
+ c1.copy( p1 );
214
+ c2.copy( p2 );
215
+
216
+ c1.sub( c2 );
217
+
218
+ return c1.dot( c1 );
219
+
220
+ }
221
+
222
+ if ( a <= EPSILON ) {
223
+
224
+ // First segment degenerates into a point
225
+
226
+ s = 0;
227
+ t = f / e; // s = 0 => t = (b*s + f) / e = f / e
228
+ t = clamp( t, 0, 1 );
229
+
230
+
231
+ } else {
232
+
233
+ const c = _d1.dot( _r );
234
+
235
+ if ( e <= EPSILON ) {
236
+
237
+ // Second segment degenerates into a point
238
+
239
+ t = 0;
240
+ s = clamp( - c / a, 0, 1 ); // t = 0 => s = (b*t - c) / a = -c / a
241
+
242
+ } else {
243
+
244
+ // The general nondegenerate case starts here
245
+
246
+ const b = _d1.dot( _d2 );
247
+ const denom = a * e - b * b; // Always nonnegative
248
+
249
+ // If segments not parallel, compute closest point on L1 to L2 and
250
+ // clamp to segment S1. Else pick arbitrary s (here 0)
251
+
252
+ if ( denom !== 0 ) {
253
+
254
+ s = clamp( ( b * f - c * e ) / denom, 0, 1 );
255
+
256
+ } else {
257
+
258
+ s = 0;
259
+
260
+ }
261
+
262
+ // Compute point on L2 closest to S1(s) using
263
+ // t = Dot((P1 + D1*s) - P2,D2) / Dot(D2,D2) = (b*s + f) / e
264
+
265
+ t = ( b * s + f ) / e;
266
+
267
+ // If t in [0,1] done. Else clamp t, recompute s for the new value
268
+ // of t using s = Dot((P2 + D2*t) - P1,D1) / Dot(D1,D1)= (t*b - c) / a
269
+ // and clamp s to [0, 1]
270
+
271
+ if ( t < 0 ) {
272
+
273
+ t = 0.;
274
+ s = clamp( - c / a, 0, 1 );
275
+
276
+ } else if ( t > 1 ) {
277
+
278
+ t = 1;
279
+ s = clamp( ( b - c ) / a, 0, 1 );
280
+
281
+ }
282
+
283
+ }
284
+
285
+ }
286
+
287
+ c1.copy( p1 ).add( _d1.multiplyScalar( s ) );
288
+ c2.copy( p2 ).add( _d2.multiplyScalar( t ) );
289
+
290
+ c1.sub( c2 );
291
+
292
+ return c1.dot( c1 );
293
+
294
+ }
295
+
169
296
  /**
170
297
  * Applies a 4x4 transformation matrix to this line segment.
171
298
  *
@@ -1,3 +1,5 @@
1
+ import { warn } from '../utils.js';
2
+
1
3
  const _lut = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff' ];
2
4
 
3
5
  let _seed = 1234567;
@@ -7,7 +9,7 @@ const DEG2RAD = Math.PI / 180;
7
9
  const RAD2DEG = 180 / Math.PI;
8
10
 
9
11
  /**
10
- * Generate a [UUID]{@link https://en.wikipedia.org/wiki/Universally_unique_identifier}
12
+ * Generate a [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier)
11
13
  * (universally unique identifier).
12
14
  *
13
15
  * @return {string} The UUID.
@@ -120,7 +122,7 @@ function lerp( x, y, t ) {
120
122
  /**
121
123
  * Smoothly interpolate a number from `x` to `y` in a spring-like manner using a delta
122
124
  * time to maintain frame rate independent movement. For details, see
123
- * [Frame rate independent damping using lerp]{@link http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/}.
125
+ * [Frame rate independent damping using lerp](http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/).
124
126
  *
125
127
  * @param {number} x - The current point.
126
128
  * @param {number} y - The target point.
@@ -155,7 +157,7 @@ function pingpong( x, length = 1 ) {
155
157
  * moved between `min` and `max`, but smoothed or slowed down the closer `x` is to
156
158
  * the `min` and `max`.
157
159
  *
158
- * See [Smoothstep]{@link http://en.wikipedia.org/wiki/Smoothstep} for more details.
160
+ * See [Smoothstep](http://en.wikipedia.org/wiki/Smoothstep) for more details.
159
161
  *
160
162
  * @param {number} x - The value to evaluate based on its position between min and max.
161
163
  * @param {number} min - The min value. Any x value below min will be `0`.
@@ -174,7 +176,7 @@ function smoothstep( x, min, max ) {
174
176
  }
175
177
 
176
178
  /**
177
- * A [variation on smoothstep]{@link https://en.wikipedia.org/wiki/Smoothstep#Variations}
179
+ * A [variation on smoothstep](https://en.wikipedia.org/wiki/Smoothstep#Variations)
178
180
  * that has zero 1st and 2nd order derivatives at x=0 and x=1.
179
181
  *
180
182
  * @param {number} x - The value to evaluate based on its position between min and max.
@@ -314,7 +316,7 @@ function floorPowerOfTwo( value ) {
314
316
  }
315
317
 
316
318
  /**
317
- * Sets the given quaternion from the [Intrinsic Proper Euler Angles]{@link https://en.wikipedia.org/wiki/Euler_angles}
319
+ * Sets the given quaternion from the [Intrinsic Proper Euler Angles](https://en.wikipedia.org/wiki/Euler_angles)
318
320
  * defined by the given angles and order.
319
321
  *
320
322
  * Rotations are applied to the axes in the order specified by order:
@@ -370,7 +372,7 @@ function setQuaternionFromProperEuler( q, a, b, c, order ) {
370
372
  break;
371
373
 
372
374
  default:
373
- console.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );
375
+ warn( 'MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );
374
376
 
375
377
  }
376
378
 
@@ -479,7 +481,7 @@ const MathUtils = {
479
481
  DEG2RAD: DEG2RAD,
480
482
  RAD2DEG: RAD2DEG,
481
483
  /**
482
- * Generate a [UUID]{@link https://en.wikipedia.org/wiki/Universally_unique_identifier}
484
+ * Generate a [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier)
483
485
  * (universally unique identifier).
484
486
  *
485
487
  * @static
@@ -550,7 +552,7 @@ const MathUtils = {
550
552
  /**
551
553
  * Smoothly interpolate a number from `x` to `y` in a spring-like manner using a delta
552
554
  * time to maintain frame rate independent movement. For details, see
553
- * [Frame rate independent damping using lerp]{@link http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/}.
555
+ * [Frame rate independent damping using lerp](http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/).
554
556
  *
555
557
  * @static
556
558
  * @method
@@ -577,7 +579,7 @@ const MathUtils = {
577
579
  * moved between `min` and `max`, but smoothed or slowed down the closer `x` is to
578
580
  * the `min` and `max`.
579
581
  *
580
- * See [Smoothstep]{@link http://en.wikipedia.org/wiki/Smoothstep} for more details.
582
+ * See [Smoothstep](http://en.wikipedia.org/wiki/Smoothstep) for more details.
581
583
  *
582
584
  * @static
583
585
  * @method
@@ -588,7 +590,7 @@ const MathUtils = {
588
590
  */
589
591
  smoothstep: smoothstep,
590
592
  /**
591
- * A [variation on smoothstep]{@link https://en.wikipedia.org/wiki/Smoothstep#Variations}
593
+ * A [variation on smoothstep](https://en.wikipedia.org/wiki/Smoothstep#Variations)
592
594
  * that has zero 1st and 2nd order derivatives at x=0 and x=1.
593
595
  *
594
596
  * @static
@@ -683,7 +685,7 @@ const MathUtils = {
683
685
  */
684
686
  floorPowerOfTwo: floorPowerOfTwo,
685
687
  /**
686
- * Sets the given quaternion from the [Intrinsic Proper Euler Angles]{@link https://en.wikipedia.org/wiki/Euler_angles}
688
+ * Sets the given quaternion from the [Intrinsic Proper Euler Angles](https://en.wikipedia.org/wiki/Euler_angles)
687
689
  * defined by the given angles and order.
688
690
  *
689
691
  * Rotations are applied to the axes in the order specified by order:
@@ -4,7 +4,7 @@
4
4
  * A Note on Row-Major and Column-Major Ordering:
5
5
  *
6
6
  * The constructor and {@link Matrix2#set} method take arguments in
7
- * [row-major]{@link https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order}
7
+ * [row-major](https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order)
8
8
  * order, while internally they are stored in the {@link Matrix2#elements} array in column-major order.
9
9
  * This means that calling:
10
10
  * ```js
@@ -4,7 +4,7 @@
4
4
  * A Note on Row-Major and Column-Major Ordering:
5
5
  *
6
6
  * The constructor and {@link Matrix3#set} method take arguments in
7
- * [row-major]{@link https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order}
7
+ * [row-major](https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order)
8
8
  * order, while internally they are stored in the {@link Matrix3#elements} array in column-major order.
9
9
  * This means that calling:
10
10
  * ```js
@@ -278,7 +278,7 @@ class Matrix3 {
278
278
  }
279
279
 
280
280
  /**
281
- * Inverts this matrix, using the [analytic method]{@link https://en.wikipedia.org/wiki/Invertible_matrix#Analytic_solution}.
281
+ * Inverts this matrix, using the [analytic method](https://en.wikipedia.org/wiki/Invertible_matrix#Analytic_solution).
282
282
  * You can not invert with a determinant of zero. If you attempt this, the method produces
283
283
  * a zero matrix instead.
284
284
  *
@@ -5,7 +5,7 @@ import { Vector3 } from './Vector3.js';
5
5
  * Represents a 4x4 matrix.
6
6
  *
7
7
  * The most common use of a 4x4 matrix in 3D computer graphics is as a transformation matrix.
8
- * For an introduction to transformation matrices as used in WebGL, check out [this tutorial]{@link https://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices}
8
+ * For an introduction to transformation matrices as used in WebGL, check out [this tutorial](https://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices)
9
9
  *
10
10
  * This allows a 3D vector representing a point in 3D space to undergo
11
11
  * transformations such as translation, rotation, shear, scale, reflection,
@@ -15,7 +15,7 @@ import { Vector3 } from './Vector3.js';
15
15
  * A Note on Row-Major and Column-Major Ordering:
16
16
  *
17
17
  * The constructor and {@link Matrix3#set} method take arguments in
18
- * [row-major]{@link https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order}
18
+ * [row-major](https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order)
19
19
  * order, while internally they are stored in the {@link Matrix3#elements} array in column-major order.
20
20
  * This means that calling:
21
21
  * ```js
@@ -309,7 +309,7 @@ class Matrix4 {
309
309
  * Sets the rotation component (the upper left 3x3 matrix) of this matrix to
310
310
  * the rotation specified by the given Euler angles. The rest of
311
311
  * the matrix is set to the identity. Depending on the {@link Euler#order},
312
- * there are six possible outcomes. See [this page]{@link https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix}
312
+ * there are six possible outcomes. See [this page](https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix)
313
313
  * for a complete list.
314
314
  *
315
315
  * @param {Euler} euler - The Euler angles.
@@ -439,7 +439,7 @@ class Matrix4 {
439
439
 
440
440
  /**
441
441
  * Sets the rotation component of this matrix to the rotation specified by
442
- * the given Quaternion as outlined [here]{@link https://en.wikipedia.org/wiki/Rotation_matrix#Quaternion}
442
+ * the given Quaternion as outlined [here](https://en.wikipedia.org/wiki/Rotation_matrix#Quaternion)
443
443
  * The rest of the matrix is set to the identity.
444
444
  *
445
445
  * @param {Quaternion} q - The Quaternion.
@@ -601,7 +601,7 @@ class Matrix4 {
601
601
  /**
602
602
  * Computes and returns the determinant of this matrix.
603
603
  *
604
- * Based on the method outlined [here]{@link http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.html}.
604
+ * Based on the method outlined [here](http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.html).
605
605
  *
606
606
  * @return {number} The determinant.
607
607
  */
@@ -708,7 +708,7 @@ class Matrix4 {
708
708
  }
709
709
 
710
710
  /**
711
- * Inverts this matrix, using the [analytic method]{@link https://en.wikipedia.org/wiki/Invertible_matrix#Analytic_solution}.
711
+ * Inverts this matrix, using the [analytic method](https://en.wikipedia.org/wiki/Invertible_matrix#Analytic_solution).
712
712
  * You can not invert with a determinant of zero. If you attempt this, the method produces
713
713
  * a zero matrix instead.
714
714
  *
@@ -911,7 +911,7 @@ class Matrix4 {
911
911
  * the given angle.
912
912
  *
913
913
  * This is a somewhat controversial but mathematically sound alternative to
914
- * rotating via Quaternions. See the discussion [here]{@link https://www.gamedev.net/articles/programming/math-and-physics/do-we-really-need-quaternions-r1199}.
914
+ * rotating via Quaternions. See the discussion [here](https://www.gamedev.net/articles/programming/math-and-physics/do-we-really-need-quaternions-r1199).
915
915
  *
916
916
  * @param {Vector3} axis - The normalized rotation axis.
917
917
  * @param {number} angle - The rotation in radians.
@@ -1103,11 +1103,13 @@ class Matrix4 {
1103
1103
  * @param {number} near - The distance from the camera to the near plane.
1104
1104
  * @param {number} far - The distance from the camera to the far plane.
1105
1105
  * @param {(WebGLCoordinateSystem|WebGPUCoordinateSystem)} [coordinateSystem=WebGLCoordinateSystem] - The coordinate system.
1106
+ * @param {boolean} [reversedDepth=false] - Whether to use a reversed depth.
1106
1107
  * @return {Matrix4} A reference to this matrix.
1107
1108
  */
1108
- makePerspective( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {
1109
+ makePerspective( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem, reversedDepth = false ) {
1109
1110
 
1110
1111
  const te = this.elements;
1112
+
1111
1113
  const x = 2 * near / ( right - left );
1112
1114
  const y = 2 * near / ( top - bottom );
1113
1115
 
@@ -1116,19 +1118,28 @@ class Matrix4 {
1116
1118
 
1117
1119
  let c, d;
1118
1120
 
1119
- if ( coordinateSystem === WebGLCoordinateSystem ) {
1121
+ if ( reversedDepth ) {
1120
1122
 
1121
- c = - ( far + near ) / ( far - near );
1122
- d = ( - 2 * far * near ) / ( far - near );
1123
+ c = near / ( far - near );
1124
+ d = ( far * near ) / ( far - near );
1123
1125
 
1124
- } else if ( coordinateSystem === WebGPUCoordinateSystem ) {
1126
+ } else {
1125
1127
 
1126
- c = - far / ( far - near );
1127
- d = ( - far * near ) / ( far - near );
1128
+ if ( coordinateSystem === WebGLCoordinateSystem ) {
1128
1129
 
1129
- } else {
1130
+ c = - ( far + near ) / ( far - near );
1131
+ d = ( - 2 * far * near ) / ( far - near );
1132
+
1133
+ } else if ( coordinateSystem === WebGPUCoordinateSystem ) {
1134
+
1135
+ c = - far / ( far - near );
1136
+ d = ( - far * near ) / ( far - near );
1130
1137
 
1131
- throw new Error( 'THREE.Matrix4.makePerspective(): Invalid coordinate system: ' + coordinateSystem );
1138
+ } else {
1139
+
1140
+ throw new Error( 'THREE.Matrix4.makePerspective(): Invalid coordinate system: ' + coordinateSystem );
1141
+
1142
+ }
1132
1143
 
1133
1144
  }
1134
1145
 
@@ -1152,39 +1163,49 @@ class Matrix4 {
1152
1163
  * @param {number} near - The distance from the camera to the near plane.
1153
1164
  * @param {number} far - The distance from the camera to the far plane.
1154
1165
  * @param {(WebGLCoordinateSystem|WebGPUCoordinateSystem)} [coordinateSystem=WebGLCoordinateSystem] - The coordinate system.
1166
+ * @param {boolean} [reversedDepth=false] - Whether to use a reversed depth.
1155
1167
  * @return {Matrix4} A reference to this matrix.
1156
1168
  */
1157
- makeOrthographic( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {
1169
+ makeOrthographic( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem, reversedDepth = false ) {
1158
1170
 
1159
1171
  const te = this.elements;
1160
- const w = 1.0 / ( right - left );
1161
- const h = 1.0 / ( top - bottom );
1162
- const p = 1.0 / ( far - near );
1163
-
1164
- const x = ( right + left ) * w;
1165
- const y = ( top + bottom ) * h;
1166
1172
 
1167
- let z, zInv;
1173
+ const x = 2 / ( right - left );
1174
+ const y = 2 / ( top - bottom );
1168
1175
 
1169
- if ( coordinateSystem === WebGLCoordinateSystem ) {
1176
+ const a = - ( right + left ) / ( right - left );
1177
+ const b = - ( top + bottom ) / ( top - bottom );
1170
1178
 
1171
- z = ( far + near ) * p;
1172
- zInv = - 2 * p;
1179
+ let c, d;
1173
1180
 
1174
- } else if ( coordinateSystem === WebGPUCoordinateSystem ) {
1181
+ if ( reversedDepth ) {
1175
1182
 
1176
- z = near * p;
1177
- zInv = - 1 * p;
1183
+ c = 1 / ( far - near );
1184
+ d = far / ( far - near );
1178
1185
 
1179
1186
  } else {
1180
1187
 
1181
- throw new Error( 'THREE.Matrix4.makeOrthographic(): Invalid coordinate system: ' + coordinateSystem );
1188
+ if ( coordinateSystem === WebGLCoordinateSystem ) {
1189
+
1190
+ c = - 2 / ( far - near );
1191
+ d = - ( far + near ) / ( far - near );
1192
+
1193
+ } else if ( coordinateSystem === WebGPUCoordinateSystem ) {
1194
+
1195
+ c = - 1 / ( far - near );
1196
+ d = - near / ( far - near );
1197
+
1198
+ } else {
1199
+
1200
+ throw new Error( 'THREE.Matrix4.makeOrthographic(): Invalid coordinate system: ' + coordinateSystem );
1201
+
1202
+ }
1182
1203
 
1183
1204
  }
1184
1205
 
1185
- te[ 0 ] = 2 * w; te[ 4 ] = 0; te[ 8 ] = 0; te[ 12 ] = - x;
1186
- te[ 1 ] = 0; te[ 5 ] = 2 * h; te[ 9 ] = 0; te[ 13 ] = - y;
1187
- te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = zInv; te[ 14 ] = - z;
1206
+ te[ 0 ] = x; te[ 4 ] = 0; te[ 8 ] = 0; te[ 12 ] = a;
1207
+ te[ 1 ] = 0; te[ 5 ] = y; te[ 9 ] = 0; te[ 13 ] = b;
1208
+ te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = c; te[ 14 ] = d;
1188
1209
  te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = 0; te[ 15 ] = 1;
1189
1210
 
1190
1211
  return this;
package/src/math/Plane.js CHANGED
@@ -7,7 +7,7 @@ const _normalMatrix = /*@__PURE__*/ new Matrix3();
7
7
 
8
8
  /**
9
9
  * A two dimensional surface that extends infinitely in 3D space, represented
10
- * in [Hessian normal form]{@link http://mathworld.wolfram.com/HessianNormalForm.html}
10
+ * in [Hessian normal form](http://mathworld.wolfram.com/HessianNormalForm.html)
11
11
  * by a unit length normal vector and a constant.
12
12
  */
13
13
  class Plane {