@plastic-software/three 0.179.0 → 0.181.1

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 (430) hide show
  1. package/build/three.cjs +1108 -591
  2. package/build/three.core.js +616 -345
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +488 -250
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +37 -6
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +6576 -2152
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +6575 -2151
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  13. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  14. package/examples/jsm/Addons.js +1 -1
  15. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  16. package/examples/jsm/controls/ArcballControls.js +8 -8
  17. package/examples/jsm/controls/DragControls.js +7 -57
  18. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  19. package/examples/jsm/controls/FlyControls.js +1 -1
  20. package/examples/jsm/controls/OrbitControls.js +2 -2
  21. package/examples/jsm/controls/PointerLockControls.js +2 -10
  22. package/examples/jsm/controls/TrackballControls.js +1 -1
  23. package/examples/jsm/controls/TransformControls.js +1 -1
  24. package/examples/jsm/effects/AsciiEffect.js +8 -8
  25. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  26. package/examples/jsm/exporters/EXRExporter.js +1 -1
  27. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  28. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  29. package/examples/jsm/exporters/PLYExporter.js +1 -1
  30. package/examples/jsm/exporters/USDZExporter.js +9 -2
  31. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  32. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  33. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  34. package/examples/jsm/geometries/TextGeometry.js +3 -2
  35. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  36. package/examples/jsm/helpers/ViewHelper.js +43 -5
  37. package/examples/jsm/inspector/Inspector.js +427 -0
  38. package/examples/jsm/inspector/RendererInspector.js +415 -0
  39. package/examples/jsm/inspector/tabs/Console.js +204 -0
  40. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  41. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  42. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  43. package/examples/jsm/inspector/ui/Graph.js +95 -0
  44. package/examples/jsm/inspector/ui/Item.js +170 -0
  45. package/examples/jsm/inspector/ui/List.js +75 -0
  46. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  47. package/examples/jsm/inspector/ui/Style.js +654 -0
  48. package/examples/jsm/inspector/ui/Tab.js +46 -0
  49. package/examples/jsm/inspector/ui/Values.js +423 -0
  50. package/examples/jsm/inspector/ui/utils.js +56 -0
  51. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  52. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  53. package/examples/jsm/interactive/SelectionBox.js +30 -0
  54. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  55. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  56. package/examples/jsm/lines/Line2.js +3 -3
  57. package/examples/jsm/lines/LineGeometry.js +1 -1
  58. package/examples/jsm/lines/LineSegments2.js +2 -2
  59. package/examples/jsm/lines/Wireframe.js +2 -2
  60. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  61. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  62. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  63. package/examples/jsm/loaders/3MFLoader.js +1 -1
  64. package/examples/jsm/loaders/ColladaLoader.js +3 -3
  65. package/examples/jsm/loaders/DDSLoader.js +1 -1
  66. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  67. package/examples/jsm/loaders/EXRLoader.js +5 -5
  68. package/examples/jsm/loaders/FBXLoader.js +2 -2
  69. package/examples/jsm/loaders/FontLoader.js +23 -5
  70. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  71. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  72. package/examples/jsm/loaders/HDRLoader.js +486 -0
  73. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  74. package/examples/jsm/loaders/KTXLoader.js +2 -2
  75. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  76. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  77. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  78. package/examples/jsm/loaders/LWOLoader.js +2 -2
  79. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  80. package/examples/jsm/loaders/OBJLoader.js +1 -1
  81. package/examples/jsm/loaders/PDBLoader.js +1 -1
  82. package/examples/jsm/loaders/RGBELoader.js +7 -473
  83. package/examples/jsm/loaders/SVGLoader.js +2 -2
  84. package/examples/jsm/loaders/TTFLoader.js +4 -4
  85. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  86. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  87. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  88. package/examples/jsm/math/ColorSpaces.js +19 -1
  89. package/examples/jsm/math/ConvexHull.js +3 -3
  90. package/examples/jsm/math/ImprovedNoise.js +1 -1
  91. package/examples/jsm/math/Lut.js +2 -2
  92. package/examples/jsm/math/SimplexNoise.js +1 -1
  93. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  94. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  95. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  96. package/examples/jsm/misc/TubePainter.js +383 -40
  97. package/examples/jsm/misc/Volume.js +1 -1
  98. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  99. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  100. package/examples/jsm/objects/Sky.js +1 -1
  101. package/examples/jsm/objects/SkyMesh.js +1 -1
  102. package/examples/jsm/objects/Water.js +3 -3
  103. package/examples/jsm/objects/WaterMesh.js +6 -6
  104. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  105. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  106. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  107. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  108. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  109. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  110. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  111. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  112. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  113. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  114. package/examples/jsm/shaders/BokehShader.js +1 -1
  115. package/examples/jsm/shaders/BokehShader2.js +1 -1
  116. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  117. package/examples/jsm/shaders/FocusShader.js +1 -1
  118. package/examples/jsm/shaders/GTAOShader.js +2 -2
  119. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  120. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  122. package/examples/jsm/shaders/SSRShader.js +1 -1
  123. package/examples/jsm/shaders/SepiaShader.js +1 -1
  124. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  125. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  126. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +1 -1
  127. package/examples/jsm/shaders/VignetteShader.js +1 -1
  128. package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
  129. package/examples/jsm/transpiler/TSLEncoder.js +9 -10
  130. package/examples/jsm/transpiler/WGSLEncoder.js +24 -0
  131. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  132. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  133. package/examples/jsm/tsl/display/BloomNode.js +7 -3
  134. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
  135. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  136. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  137. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  138. package/examples/jsm/tsl/display/GaussianBlurNode.js +49 -35
  139. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  140. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  141. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  142. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  143. package/examples/jsm/tsl/display/TRAANode.js +124 -7
  144. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  145. package/examples/jsm/tsl/display/hashBlur.js +16 -18
  146. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  147. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  148. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  149. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  150. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  151. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  152. package/package.json +5 -10
  153. package/src/Three.Core.js +4 -2
  154. package/src/Three.TSL.js +36 -5
  155. package/src/Three.WebGPU.Nodes.js +2 -0
  156. package/src/Three.WebGPU.js +2 -0
  157. package/src/animation/AnimationClip.js +20 -4
  158. package/src/animation/AnimationMixer.js +3 -3
  159. package/src/animation/AnimationObjectGroup.js +2 -1
  160. package/src/animation/KeyframeTrack.js +7 -6
  161. package/src/animation/PropertyBinding.js +12 -11
  162. package/src/audio/Audio.js +10 -9
  163. package/src/audio/PositionalAudio.js +1 -1
  164. package/src/cameras/OrthographicCamera.js +1 -1
  165. package/src/cameras/PerspectiveCamera.js +1 -1
  166. package/src/cameras/StereoCamera.js +2 -2
  167. package/src/constants.js +11 -3
  168. package/src/core/BufferGeometry.js +10 -10
  169. package/src/core/EventDispatcher.js +1 -1
  170. package/src/core/InterleavedBuffer.js +1 -1
  171. package/src/core/InterleavedBufferAttribute.js +3 -2
  172. package/src/core/Object3D.js +3 -2
  173. package/src/core/Raycaster.js +2 -1
  174. package/src/core/RenderTarget.js +10 -1
  175. package/src/extras/Controls.js +5 -4
  176. package/src/extras/DataUtils.js +2 -1
  177. package/src/extras/Earcut.js +6 -0
  178. package/src/extras/ImageUtils.js +2 -2
  179. package/src/extras/PMREMGenerator.js +268 -55
  180. package/src/extras/TextureUtils.js +2 -1
  181. package/src/extras/core/Curve.js +2 -1
  182. package/src/extras/core/Interpolations.js +7 -1
  183. package/src/extras/core/ShapePath.js +4 -4
  184. package/src/extras/lib/earcut.js +8 -8
  185. package/src/geometries/BoxGeometry.js +1 -0
  186. package/src/geometries/CapsuleGeometry.js +1 -0
  187. package/src/geometries/CircleGeometry.js +1 -0
  188. package/src/geometries/ConeGeometry.js +1 -0
  189. package/src/geometries/CylinderGeometry.js +1 -0
  190. package/src/geometries/DodecahedronGeometry.js +1 -0
  191. package/src/geometries/ExtrudeGeometry.js +8 -6
  192. package/src/geometries/IcosahedronGeometry.js +1 -0
  193. package/src/geometries/LatheGeometry.js +1 -0
  194. package/src/geometries/OctahedronGeometry.js +1 -0
  195. package/src/geometries/PlaneGeometry.js +1 -0
  196. package/src/geometries/RingGeometry.js +1 -0
  197. package/src/geometries/ShapeGeometry.js +1 -0
  198. package/src/geometries/SphereGeometry.js +1 -0
  199. package/src/geometries/TetrahedronGeometry.js +1 -0
  200. package/src/geometries/TorusGeometry.js +1 -0
  201. package/src/geometries/TorusKnotGeometry.js +1 -0
  202. package/src/geometries/TubeGeometry.js +1 -0
  203. package/src/helpers/CameraHelper.js +1 -1
  204. package/src/lights/webgpu/ProjectorLight.js +1 -1
  205. package/src/loaders/AnimationLoader.js +2 -1
  206. package/src/loaders/AudioLoader.js +2 -1
  207. package/src/loaders/BufferGeometryLoader.js +2 -2
  208. package/src/loaders/Cache.js +2 -2
  209. package/src/loaders/DataTextureLoader.js +1 -1
  210. package/src/loaders/FileLoader.js +3 -2
  211. package/src/loaders/ImageBitmapLoader.js +5 -4
  212. package/src/loaders/ImageLoader.js +1 -1
  213. package/src/loaders/Loader.js +3 -3
  214. package/src/loaders/LoadingManager.js +25 -3
  215. package/src/loaders/MaterialLoader.js +3 -2
  216. package/src/loaders/ObjectLoader.js +13 -13
  217. package/src/loaders/TextureLoader.js +1 -1
  218. package/src/loaders/nodes/NodeLoader.js +3 -2
  219. package/src/materials/Material.js +16 -3
  220. package/src/materials/MeshBasicMaterial.js +1 -0
  221. package/src/materials/MeshDepthMaterial.js +1 -0
  222. package/src/materials/MeshDistanceMaterial.js +1 -1
  223. package/src/materials/MeshLambertMaterial.js +2 -1
  224. package/src/materials/MeshMatcapMaterial.js +22 -0
  225. package/src/materials/MeshNormalMaterial.js +1 -0
  226. package/src/materials/MeshPhongMaterial.js +2 -1
  227. package/src/materials/MeshPhysicalMaterial.js +2 -1
  228. package/src/materials/MeshStandardMaterial.js +8 -7
  229. package/src/materials/MeshToonMaterial.js +1 -0
  230. package/src/materials/PointsMaterial.js +1 -1
  231. package/src/materials/ShaderMaterial.js +2 -2
  232. package/src/materials/nodes/Line2NodeMaterial.js +2 -2
  233. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  234. package/src/materials/nodes/NodeMaterial.js +62 -22
  235. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  236. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  237. package/src/materials/nodes/manager/NodeMaterialObserver.js +3 -2
  238. package/src/math/Color.js +6 -5
  239. package/src/math/ColorManagement.js +9 -3
  240. package/src/math/Cylindrical.js +1 -1
  241. package/src/math/Euler.js +2 -1
  242. package/src/math/MathUtils.js +13 -11
  243. package/src/math/Matrix2.js +1 -1
  244. package/src/math/Matrix3.js +2 -2
  245. package/src/math/Matrix4.js +7 -7
  246. package/src/math/Plane.js +1 -1
  247. package/src/math/Quaternion.js +68 -66
  248. package/src/math/Spherical.js +1 -1
  249. package/src/nodes/Nodes.js +4 -1
  250. package/src/nodes/TSL.js +4 -1
  251. package/src/nodes/accessors/BufferNode.js +1 -1
  252. package/src/nodes/accessors/Camera.js +133 -7
  253. package/src/nodes/accessors/ClippingNode.js +6 -5
  254. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  255. package/src/nodes/accessors/InstanceNode.js +25 -5
  256. package/src/nodes/accessors/Lights.js +10 -0
  257. package/src/nodes/accessors/Normal.js +5 -4
  258. package/src/nodes/accessors/Object3DNode.js +1 -1
  259. package/src/nodes/accessors/Position.js +18 -2
  260. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  261. package/src/nodes/accessors/ReferenceNode.js +3 -2
  262. package/src/nodes/accessors/SceneNode.js +2 -1
  263. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  264. package/src/nodes/accessors/StorageTextureNode.js +22 -0
  265. package/src/nodes/accessors/Texture3DNode.js +14 -1
  266. package/src/nodes/accessors/TextureNode.js +130 -44
  267. package/src/nodes/code/FunctionCallNode.js +24 -4
  268. package/src/nodes/code/FunctionNode.js +23 -0
  269. package/src/nodes/core/ArrayNode.js +1 -0
  270. package/src/nodes/core/AssignNode.js +4 -3
  271. package/src/nodes/core/AttributeNode.js +2 -1
  272. package/src/nodes/core/ContextNode.js +29 -10
  273. package/src/nodes/core/IndexNode.js +2 -2
  274. package/src/nodes/core/InputNode.js +2 -1
  275. package/src/nodes/core/InspectorNode.js +128 -0
  276. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +40 -7
  277. package/src/nodes/core/Node.js +152 -31
  278. package/src/nodes/core/NodeBuilder.js +183 -35
  279. package/src/nodes/core/NodeFrame.js +21 -21
  280. package/src/nodes/core/NodeFunction.js +2 -1
  281. package/src/nodes/core/NodeParser.js +2 -1
  282. package/src/nodes/core/NodeUniform.js +1 -1
  283. package/src/nodes/core/NodeUtils.js +17 -91
  284. package/src/nodes/core/ParameterNode.js +31 -0
  285. package/src/nodes/core/PropertyNode.js +7 -0
  286. package/src/nodes/core/StackNode.js +43 -16
  287. package/src/nodes/core/StructNode.js +5 -5
  288. package/src/nodes/core/StructTypeNode.js +1 -0
  289. package/src/nodes/core/SubBuildNode.js +2 -2
  290. package/src/nodes/core/UniformNode.js +18 -10
  291. package/src/nodes/core/VarNode.js +70 -33
  292. package/src/nodes/core/VaryingNode.js +3 -2
  293. package/src/nodes/display/BlendModes.js +5 -4
  294. package/src/nodes/display/BumpMapNode.js +1 -1
  295. package/src/nodes/display/ColorAdjustment.js +1 -1
  296. package/src/nodes/display/FrontFacingNode.js +4 -8
  297. package/src/nodes/display/NormalMapNode.js +2 -1
  298. package/src/nodes/display/PassNode.js +52 -11
  299. package/src/nodes/display/RenderOutputNode.js +28 -2
  300. package/src/nodes/display/ScreenNode.js +44 -14
  301. package/src/nodes/display/ToneMappingNode.js +31 -4
  302. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  303. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  304. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  305. package/src/nodes/display/ViewportTextureNode.js +42 -12
  306. package/src/nodes/fog/Fog.js +3 -2
  307. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  308. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  309. package/src/nodes/functions/BasicLightingModel.js +2 -1
  310. package/src/nodes/functions/PhysicalLightingModel.js +3 -2
  311. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  312. package/src/nodes/geometry/RangeNode.js +40 -4
  313. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  314. package/src/nodes/gpgpu/ComputeNode.js +17 -5
  315. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  316. package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
  317. package/src/nodes/lighting/EnvironmentNode.js +6 -6
  318. package/src/nodes/lighting/LightsNode.js +3 -4
  319. package/src/nodes/lighting/PointShadowNode.js +6 -0
  320. package/src/nodes/lighting/ShadowFilterNode.js +2 -0
  321. package/src/nodes/lighting/ShadowNode.js +75 -8
  322. package/src/nodes/math/BitcastNode.js +156 -0
  323. package/src/nodes/math/ConditionalNode.js +24 -7
  324. package/src/nodes/math/MathNode.js +25 -19
  325. package/src/nodes/math/OperatorNode.js +7 -5
  326. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  327. package/src/nodes/shapes/Shapes.js +1 -1
  328. package/src/nodes/tsl/TSLBase.js +5 -2
  329. package/src/nodes/tsl/TSLCore.js +460 -159
  330. package/src/nodes/utils/DebugNode.js +2 -1
  331. package/src/nodes/utils/EventNode.js +36 -0
  332. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  333. package/src/nodes/utils/JoinNode.js +6 -3
  334. package/src/nodes/utils/LoopNode.js +20 -24
  335. package/src/nodes/utils/MemberNode.js +59 -7
  336. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  337. package/src/nodes/utils/RTTNode.js +13 -3
  338. package/src/nodes/utils/ReflectorNode.js +58 -7
  339. package/src/nodes/utils/SampleNode.js +12 -2
  340. package/src/nodes/utils/SplitNode.js +11 -0
  341. package/src/nodes/utils/Timer.js +0 -47
  342. package/src/objects/BatchedMesh.js +2 -2
  343. package/src/objects/LOD.js +1 -1
  344. package/src/objects/Line.js +2 -1
  345. package/src/objects/LineSegments.js +2 -1
  346. package/src/objects/Skeleton.js +3 -2
  347. package/src/objects/SkinnedMesh.js +3 -1
  348. package/src/objects/Sprite.js +4 -3
  349. package/src/renderers/WebGLRenderer.js +48 -41
  350. package/src/renderers/common/Animation.js +13 -1
  351. package/src/renderers/common/Attributes.js +1 -1
  352. package/src/renderers/common/Backend.js +108 -27
  353. package/src/renderers/common/Background.js +2 -1
  354. package/src/renderers/common/Bindings.js +58 -2
  355. package/src/renderers/common/CanvasTarget.js +341 -0
  356. package/src/renderers/common/ChainMap.js +1 -1
  357. package/src/renderers/common/DataMap.js +1 -1
  358. package/src/renderers/common/Geometries.js +26 -0
  359. package/src/renderers/common/Info.js +4 -2
  360. package/src/renderers/common/InspectorBase.js +146 -0
  361. package/src/renderers/common/Pipelines.js +1 -1
  362. package/src/renderers/common/PostProcessing.js +6 -25
  363. package/src/renderers/common/QuadMesh.js +7 -1
  364. package/src/renderers/common/RenderContext.js +2 -2
  365. package/src/renderers/common/RenderList.js +7 -3
  366. package/src/renderers/common/RenderObject.js +16 -2
  367. package/src/renderers/common/RenderObjects.js +1 -1
  368. package/src/renderers/common/Renderer.js +473 -245
  369. package/src/renderers/common/RendererUtils.js +9 -0
  370. package/src/renderers/common/SampledTexture.js +9 -1
  371. package/src/renderers/common/Sampler.js +50 -12
  372. package/src/renderers/common/StorageTexture.js +9 -1
  373. package/src/renderers/common/Textures.js +121 -45
  374. package/src/renderers/common/TimestampQueryPool.js +65 -3
  375. package/src/renderers/common/UniformsGroup.js +2 -1
  376. package/src/renderers/common/XRManager.js +42 -22
  377. package/src/renderers/common/extras/PMREMGenerator.js +160 -65
  378. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  379. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  380. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  381. package/src/renderers/common/nodes/Nodes.js +38 -16
  382. package/src/renderers/shaders/DFGLUTData.js +64 -0
  383. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  384. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  386. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  387. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  388. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  389. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  390. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  391. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -15
  392. package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
  393. package/src/renderers/shaders/UniformsLib.js +1 -0
  394. package/src/renderers/shaders/UniformsUtils.js +25 -4
  395. package/src/renderers/webgl/WebGLCapabilities.js +2 -1
  396. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  397. package/src/renderers/webgl/WebGLInfo.js +3 -1
  398. package/src/renderers/webgl/WebGLProgram.js +15 -14
  399. package/src/renderers/webgl/WebGLPrograms.js +2 -1
  400. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  401. package/src/renderers/webgl/WebGLState.js +15 -14
  402. package/src/renderers/webgl/WebGLTextures.js +19 -14
  403. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  404. package/src/renderers/webgl/WebGLUtils.js +3 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +199 -167
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +181 -25
  407. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  408. package/src/renderers/webgl-fallback/utils/WebGLState.js +7 -6
  409. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +169 -19
  410. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  411. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  412. package/src/renderers/webgpu/WebGPUBackend.js +153 -123
  413. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  414. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  415. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +142 -50
  416. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  417. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
  418. package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -2
  419. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +53 -34
  420. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  421. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +260 -99
  422. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  423. package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
  424. package/src/renderers/webxr/WebXRManager.js +42 -26
  425. package/src/textures/ExternalTexture.js +15 -4
  426. package/src/textures/Source.js +3 -2
  427. package/src/textures/Texture.js +3 -2
  428. package/src/textures/VideoTexture.js +2 -3
  429. package/src/utils.js +67 -3
  430. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
package/src/math/Color.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { clamp, euclideanModulo, lerp } from './MathUtils.js';
2
2
  import { ColorManagement, SRGBToLinear, LinearToSRGB } from './ColorManagement.js';
3
3
  import { SRGBColorSpace } from '../constants.js';
4
+ import { warn } from '../utils.js';
4
5
 
5
6
  const _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,
6
7
  'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,
@@ -275,7 +276,7 @@ class Color {
275
276
  /**
276
277
  * Sets this color from a CSS-style string. For example, `rgb(250, 0,0)`,
277
278
  * `rgb(100%, 0%, 0%)`, `hsl(0, 100%, 50%)`, `#ff0000`, `#f00`, or `red` ( or
278
- * any [X11 color name]{@link https://en.wikipedia.org/wiki/X11_color_names#Color_name_chart} -
279
+ * any [X11 color name](https://en.wikipedia.org/wiki/X11_color_names#Color_name_chart) -
279
280
  * all 140 color names are supported).
280
281
  *
281
282
  * @param {string} style - Color as a CSS-style string.
@@ -290,7 +291,7 @@ class Color {
290
291
 
291
292
  if ( parseFloat( string ) < 1 ) {
292
293
 
293
- console.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );
294
+ warn( 'Color: Alpha component of ' + style + ' will be ignored.' );
294
295
 
295
296
  }
296
297
 
@@ -366,7 +367,7 @@ class Color {
366
367
 
367
368
  default:
368
369
 
369
- console.warn( 'THREE.Color: Unknown color model ' + style );
370
+ warn( 'Color: Unknown color model ' + style );
370
371
 
371
372
  }
372
373
 
@@ -394,7 +395,7 @@ class Color {
394
395
 
395
396
  } else {
396
397
 
397
- console.warn( 'THREE.Color: Invalid hex color ' + style );
398
+ warn( 'Color: Invalid hex color ' + style );
398
399
 
399
400
  }
400
401
 
@@ -434,7 +435,7 @@ class Color {
434
435
  } else {
435
436
 
436
437
  // unknown color
437
- console.warn( 'THREE.Color: Unknown color ' + style );
438
+ warn( 'Color: Unknown color ' + style );
438
439
 
439
440
  }
440
441
 
@@ -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,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.
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 {
@@ -1,4 +1,5 @@
1
1
  import { clamp } from './MathUtils.js';
2
+ import { warn } from '../utils.js';
2
3
 
3
4
  /**
4
5
  * Class for representing a Quaternion. Quaternions are used in three.js to represent rotations.
@@ -45,7 +46,7 @@ class Quaternion {
45
46
 
46
47
  /**
47
48
  * Interpolates between two quaternions via SLERP. This implementation assumes the
48
- * quaternion data are managed in flat arrays.
49
+ * quaternion data are managed in flat arrays.
49
50
  *
50
51
  * @param {Array<number>} dst - The destination array.
51
52
  * @param {number} dstOffset - An offset into the destination array.
@@ -58,65 +59,78 @@ class Quaternion {
58
59
  */
59
60
  static slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {
60
61
 
61
- // fuzz-free, array-based Quaternion SLERP operation
62
-
63
62
  let x0 = src0[ srcOffset0 + 0 ],
64
63
  y0 = src0[ srcOffset0 + 1 ],
65
64
  z0 = src0[ srcOffset0 + 2 ],
66
65
  w0 = src0[ srcOffset0 + 3 ];
67
66
 
68
- const x1 = src1[ srcOffset1 + 0 ],
67
+ let x1 = src1[ srcOffset1 + 0 ],
69
68
  y1 = src1[ srcOffset1 + 1 ],
70
69
  z1 = src1[ srcOffset1 + 2 ],
71
70
  w1 = src1[ srcOffset1 + 3 ];
72
71
 
73
- if ( t === 0 ) {
72
+ if ( t <= 0 ) {
74
73
 
75
74
  dst[ dstOffset + 0 ] = x0;
76
75
  dst[ dstOffset + 1 ] = y0;
77
76
  dst[ dstOffset + 2 ] = z0;
78
77
  dst[ dstOffset + 3 ] = w0;
78
+
79
79
  return;
80
80
 
81
81
  }
82
82
 
83
- if ( t === 1 ) {
83
+ if ( t >= 1 ) {
84
84
 
85
85
  dst[ dstOffset + 0 ] = x1;
86
86
  dst[ dstOffset + 1 ] = y1;
87
87
  dst[ dstOffset + 2 ] = z1;
88
88
  dst[ dstOffset + 3 ] = w1;
89
+
89
90
  return;
90
91
 
91
92
  }
92
93
 
93
94
  if ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {
94
95
 
95
- let s = 1 - t;
96
- const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,
97
- dir = ( cos >= 0 ? 1 : - 1 ),
98
- sqrSin = 1 - cos * cos;
96
+ let dot = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1;
99
97
 
100
- // Skip the Slerp for tiny steps to avoid numeric problems:
101
- if ( sqrSin > Number.EPSILON ) {
98
+ if ( dot < 0 ) {
102
99
 
103
- const sin = Math.sqrt( sqrSin ),
104
- len = Math.atan2( sin, cos * dir );
100
+ x1 = - x1;
101
+ y1 = - y1;
102
+ z1 = - z1;
103
+ w1 = - w1;
105
104
 
106
- s = Math.sin( s * len ) / sin;
107
- t = Math.sin( t * len ) / sin;
105
+ dot = - dot;
108
106
 
109
107
  }
110
108
 
111
- const tDir = t * dir;
109
+ let s = 1 - t;
110
+
111
+ if ( dot < 0.9995 ) {
112
+
113
+ // slerp
114
+
115
+ const theta = Math.acos( dot );
116
+ const sin = Math.sin( theta );
117
+
118
+ s = Math.sin( s * theta ) / sin;
119
+ t = Math.sin( t * theta ) / sin;
120
+
121
+ x0 = x0 * s + x1 * t;
122
+ y0 = y0 * s + y1 * t;
123
+ z0 = z0 * s + z1 * t;
124
+ w0 = w0 * s + w1 * t;
125
+
126
+ } else {
112
127
 
113
- x0 = x0 * s + x1 * tDir;
114
- y0 = y0 * s + y1 * tDir;
115
- z0 = z0 * s + z1 * tDir;
116
- w0 = w0 * s + w1 * tDir;
128
+ // for small angles, lerp then normalize
117
129
 
118
- // Normalize in case we just did a lerp:
119
- if ( s === 1 - t ) {
130
+ x0 = x0 * s + x1 * t;
131
+ y0 = y0 * s + y1 * t;
132
+ z0 = z0 * s + z1 * t;
133
+ w0 = w0 * s + w1 * t;
120
134
 
121
135
  const f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );
122
136
 
@@ -370,7 +384,7 @@ class Quaternion {
370
384
  break;
371
385
 
372
386
  default:
373
- console.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );
387
+ warn( 'Quaternion: .setFromEuler() encountered an unknown order: ' + order );
374
388
 
375
389
  }
376
390
 
@@ -726,68 +740,56 @@ class Quaternion {
726
740
  */
727
741
  slerp( qb, t ) {
728
742
 
729
- if ( t === 0 ) return this;
730
- if ( t === 1 ) return this.copy( qb );
743
+ if ( t <= 0 ) return this;
731
744
 
732
- const x = this._x, y = this._y, z = this._z, w = this._w;
745
+ if ( t >= 1 ) return this.copy( qb ); // copy calls _onChangeCallback()
733
746
 
734
- // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/
747
+ let x = qb._x, y = qb._y, z = qb._z, w = qb._w;
735
748
 
736
- let cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;
749
+ let dot = this.dot( qb );
737
750
 
738
- if ( cosHalfTheta < 0 ) {
751
+ if ( dot < 0 ) {
739
752
 
740
- this._w = - qb._w;
741
- this._x = - qb._x;
742
- this._y = - qb._y;
743
- this._z = - qb._z;
753
+ x = - x;
754
+ y = - y;
755
+ z = - z;
756
+ w = - w;
744
757
 
745
- cosHalfTheta = - cosHalfTheta;
746
-
747
- } else {
748
-
749
- this.copy( qb );
758
+ dot = - dot;
750
759
 
751
760
  }
752
761
 
753
- if ( cosHalfTheta >= 1.0 ) {
762
+ let s = 1 - t;
754
763
 
755
- this._w = w;
756
- this._x = x;
757
- this._y = y;
758
- this._z = z;
764
+ if ( dot < 0.9995 ) {
759
765
 
760
- return this;
766
+ // slerp
761
767
 
762
- }
763
-
764
- const sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;
768
+ const theta = Math.acos( dot );
769
+ const sin = Math.sin( theta );
765
770
 
766
- if ( sqrSinHalfTheta <= Number.EPSILON ) {
771
+ s = Math.sin( s * theta ) / sin;
772
+ t = Math.sin( t * theta ) / sin;
767
773
 
768
- const s = 1 - t;
769
- this._w = s * w + t * this._w;
770
- this._x = s * x + t * this._x;
771
- this._y = s * y + t * this._y;
772
- this._z = s * z + t * this._z;
774
+ this._x = this._x * s + x * t;
775
+ this._y = this._y * s + y * t;
776
+ this._z = this._z * s + z * t;
777
+ this._w = this._w * s + w * t;
773
778
 
774
- this.normalize(); // normalize calls _onChangeCallback()
779
+ this._onChangeCallback();
775
780
 
776
- return this;
781
+ } else {
777
782
 
778
- }
783
+ // for small angles, lerp then normalize
779
784
 
780
- const sinHalfTheta = Math.sqrt( sqrSinHalfTheta );
781
- const halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );
782
- const ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,
783
- ratioB = Math.sin( t * halfTheta ) / sinHalfTheta;
785
+ this._x = this._x * s + x * t;
786
+ this._y = this._y * s + y * t;
787
+ this._z = this._z * s + z * t;
788
+ this._w = this._w * s + w * t;
784
789
 
785
- this._w = ( w * ratioA + this._w * ratioB );
786
- this._x = ( x * ratioA + this._x * ratioB );
787
- this._y = ( y * ratioA + this._y * ratioB );
788
- this._z = ( z * ratioA + this._z * ratioB );
790
+ this.normalize(); // normalize calls _onChangeCallback()
789
791
 
790
- this._onChangeCallback();
792
+ }
791
793
 
792
794
  return this;
793
795
 
@@ -2,7 +2,7 @@ import { clamp } from './MathUtils.js';
2
2
 
3
3
  /**
4
4
  * This class can be used to represent points in 3D space as
5
- * [Spherical coordinates]{@link https://en.wikipedia.org/wiki/Spherical_coordinate_system}.
5
+ * [Spherical coordinates](https://en.wikipedia.org/wiki/Spherical_coordinate_system).
6
6
  */
7
7
  class Spherical {
8
8
 
@@ -6,7 +6,7 @@ export { default as ArrayNode } from './core/ArrayNode.js';
6
6
  export { default as AssignNode } from './core/AssignNode.js';
7
7
  export { default as AttributeNode } from './core/AttributeNode.js';
8
8
  export { default as BypassNode } from './core/BypassNode.js';
9
- export { default as CacheNode } from './core/CacheNode.js';
9
+ export { default as IsolateNode } from './core/IsolateNode.js';
10
10
  export { default as ConstNode } from './core/ConstNode.js';
11
11
  export { default as ContextNode } from './core/ContextNode.js';
12
12
  export { default as IndexNode } from './core/IndexNode.js';
@@ -57,6 +57,9 @@ export { default as MemberNode } from './utils/MemberNode.js';
57
57
  export { default as DebugNode } from './utils/DebugNode.js';
58
58
  export { default as EventNode } from './utils/EventNode.js';
59
59
 
60
+ // math
61
+ export { default as BitcastNode } from './math/BitcastNode.js';
62
+
60
63
  // accessors
61
64
  export { default as UniformArrayNode } from './accessors/UniformArrayNode.js';
62
65
  export { default as BufferAttributeNode } from './accessors/BufferAttributeNode.js';
package/src/nodes/TSL.js CHANGED
@@ -5,7 +5,7 @@ export * from './core/constants.js';
5
5
  export * from './core/AssignNode.js';
6
6
  export * from './core/AttributeNode.js';
7
7
  export * from './core/BypassNode.js';
8
- export * from './core/CacheNode.js';
8
+ export * from './core/IsolateNode.js';
9
9
  export * from './core/ContextNode.js';
10
10
  export * from './core/IndexNode.js';
11
11
  export * from './core/ParameterNode.js';
@@ -19,6 +19,7 @@ export * from './core/OutputStructNode.js';
19
19
  export * from './core/MRTNode.js';
20
20
 
21
21
  // math
22
+ export * from './math/BitcastNode.js';
22
23
  export * from './math/Hash.js';
23
24
  export * from './math/MathUtils.js';
24
25
  export * from './math/TriNoise3D.js';
@@ -55,6 +56,7 @@ export * from './accessors/UniformArrayNode.js';
55
56
  export * from './accessors/Bitangent.js';
56
57
  export * from './accessors/BufferAttributeNode.js';
57
58
  export * from './accessors/BufferNode.js';
59
+ export * from './accessors/BuiltinNode.js';
58
60
  export * from './accessors/Camera.js';
59
61
  export * from './accessors/VertexColorNode.js';
60
62
  export * from './accessors/CubeTextureNode.js';
@@ -129,6 +131,7 @@ export * from './gpgpu/ComputeBuiltinNode.js';
129
131
  export * from './gpgpu/BarrierNode.js';
130
132
  export * from './gpgpu/WorkgroupInfoNode.js';
131
133
  export * from './gpgpu/AtomicFunctionNode.js';
134
+ export * from './gpgpu/SubgroupFunctionNode.js';
132
135
 
133
136
  // lighting
134
137
  export * from './accessors/Lights.js';
@@ -93,7 +93,7 @@ export default BufferNode;
93
93
  *
94
94
  * @tsl
95
95
  * @function
96
- * @param {Array} value - Array-like buffer data.
96
+ * @param {Array<number>} value - Array-like buffer data.
97
97
  * @param {string} type - The data type of a buffer element.
98
98
  * @param {number} count - The count of buffer elements.
99
99
  * @returns {BufferNode}