@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
@@ -0,0 +1,65 @@
1
+ import { Fn, vec2, uv, Loop, vec4, premultiplyAlpha, unpremultiplyAlpha, max, int, textureSize, nodeObject, convertToTexture } from 'three/tsl';
2
+
3
+ /**
4
+ * Applies a box blur effect to the given texture node.
5
+ *
6
+ * Compared to Gaussian blur, box blur produces a more blocky result but with better performance when correctly
7
+ * configured. It is intended for mobile devices or performance restricted use cases where Gaussian is too heavy.
8
+ *
9
+ * The (kernel) `size` parameter should be small (1, 2 or 3) since it determines the number of samples based on (size * 2 + 1)^2.
10
+ * This implementation uses a single pass approach so the kernel is not applied as a separable filter. That means larger
11
+ * kernels won't perform well. Use Gaussian instead if you need a more high-quality blur.
12
+ *
13
+ * To produce wider blurs, increase the `separation` parameter instead which has no influence on the performance.
14
+ *
15
+ * Reference: {@link https://github.com/lettier/3d-game-shaders-for-beginners/blob/master/demonstration/shaders/fragment/box-blur.frag}.
16
+ *
17
+ * @tsl
18
+ * @function
19
+ * @param {Node<vec4>} textureNode - The texture node that should be blurred.
20
+ * @param {Object} [options={}] - Additional options for the hash blur effect.
21
+ * @param {Node<int>} [options.size=int(1)] - Controls the blur's kernel. For performant results, the range should within [1, 3].
22
+ * @param {Node<int>} [options.separation=int(1)] - Spreads out the blur without having to sample additional fragments. Ranges from [1, Infinity].
23
+ * @param {boolean} [options.premultipliedAlpha=false] - Whether to use premultiplied alpha for the blur effect.
24
+ * @return {Node<vec4>} The blurred texture node.
25
+ */
26
+ export const boxBlur = /*#__PURE__*/ Fn( ( [ textureNode, options = {} ] ) => {
27
+
28
+ textureNode = convertToTexture( textureNode );
29
+
30
+ const size = nodeObject( options.size ) || int( 1 );
31
+ const separation = nodeObject( options.separation ) || int( 1 );
32
+ const premultipliedAlpha = options.premultipliedAlpha || false;
33
+
34
+ const tap = ( uv ) => {
35
+
36
+ const sample = textureNode.sample( uv );
37
+
38
+ return premultipliedAlpha ? premultiplyAlpha( sample ) : sample;
39
+
40
+ };
41
+
42
+ const targetUV = textureNode.uvNode || uv();
43
+
44
+ const result = vec4( 0 );
45
+ const sep = max( separation, 1 );
46
+ const count = int( 0 );
47
+ const pixelStep = vec2( 1 ).div( textureSize( textureNode ) );
48
+
49
+ Loop( { start: size.negate(), end: size, name: 'i', condition: '<=' }, ( { i } ) => {
50
+
51
+ Loop( { start: size.negate(), end: size, name: 'j', condition: '<=' }, ( { j } ) => {
52
+
53
+ const uvs = targetUV.add( vec2( i, j ).mul( pixelStep ).mul( sep ) );
54
+ result.addAssign( tap( uvs ) );
55
+ count.addAssign( 1 );
56
+
57
+ } );
58
+
59
+ } );
60
+
61
+ result.divAssign( count );
62
+
63
+ return premultipliedAlpha ? unpremultiplyAlpha( result ) : result;
64
+
65
+ } );
@@ -1,51 +1,49 @@
1
- import { float, Fn, vec2, uv, sin, rand, degrees, cos, Loop, vec4, premultiplyAlpha, unpremultiplyAlpha } from 'three/tsl';
1
+ import { float, Fn, vec2, uv, sin, rand, degrees, cos, Loop, vec4, premultiplyAlpha, unpremultiplyAlpha, convertToTexture, nodeObject } from 'three/tsl';
2
2
 
3
3
  /**
4
4
  * Applies a hash blur effect to the given texture node.
5
5
  *
6
+ * The approach of this blur is different compared to Gaussian and box blur since
7
+ * it does not rely on a kernel to apply a convolution. Instead, it reads the base
8
+ * texture multiple times in a random pattern and then averages the samples. A
9
+ * typical artifact of this technique is a slightly noisy appearance of the blur which
10
+ * can be mitigated by increasing the number of iterations (see `repeats` parameter).
11
+ * Compared to Gaussian blur, hash blur requires just a single pass.
12
+ *
6
13
  * Reference: {@link https://www.shadertoy.com/view/4lXXWn}.
7
14
  *
15
+ * @tsl
8
16
  * @function
9
17
  * @param {Node<vec4>} textureNode - The texture node that should be blurred.
10
18
  * @param {Node<float>} [bluramount=float(0.1)] - This node determines the amount of blur.
11
19
  * @param {Object} [options={}] - Additional options for the hash blur effect.
12
20
  * @param {Node<float>} [options.repeats=float(45)] - The number of iterations for the blur effect.
13
- * @param {Node<vec4>} [options.mask=null] - A mask node to control the alpha blending of the blur.
14
21
  * @param {boolean} [options.premultipliedAlpha=false] - Whether to use premultiplied alpha for the blur effect.
15
22
  * @return {Node<vec4>} The blurred texture node.
16
23
  */
17
24
  export const hashBlur = /*#__PURE__*/ Fn( ( [ textureNode, bluramount = float( 0.1 ), options = {} ] ) => {
18
25
 
19
- const {
20
- repeats = float( 45 ),
21
- mask = null,
22
- premultipliedAlpha = false
23
- } = options;
24
-
25
- const draw = ( uv ) => {
26
-
27
- let sample = textureNode.sample( uv );
28
-
29
- if ( mask !== null ) {
26
+ textureNode = convertToTexture( textureNode );
30
27
 
31
- const alpha = mask.sample( uv ).x;
28
+ const repeats = nodeObject( options.repeats ) || float( 45 );
29
+ const premultipliedAlpha = options.premultipliedAlpha || false;
32
30
 
33
- sample = vec4( sample.rgb, sample.a.mul( alpha ) );
31
+ const tap = ( uv ) => {
34
32
 
35
- }
33
+ const sample = textureNode.sample( uv );
36
34
 
37
35
  return premultipliedAlpha ? premultiplyAlpha( sample ) : sample;
38
36
 
39
37
  };
40
38
 
41
39
  const targetUV = textureNode.uvNode || uv();
42
- const blurred_image = vec4( 0. ).toVar();
40
+ const blurred_image = vec4( 0. );
43
41
 
44
42
  Loop( { start: 0., end: repeats, type: 'float' }, ( { i } ) => {
45
43
 
46
44
  const q = vec2( vec2( cos( degrees( i.div( repeats ).mul( 360. ) ) ), sin( degrees( i.div( repeats ).mul( 360. ) ) ) ).mul( rand( vec2( i, targetUV.x.add( targetUV.y ) ) ).add( bluramount ) ) );
47
45
  const uv2 = vec2( targetUV.add( q.mul( bluramount ) ) );
48
- blurred_image.addAssign( draw( uv2 ) );
46
+ blurred_image.addAssign( tap( uv2 ) );
49
47
 
50
48
  } );
51
49
 
@@ -5,6 +5,17 @@ import {
5
5
  Fn, If, Return, textureLoad, instanceIndex, screenCoordinate, directPointLight
6
6
  } from 'three/tsl';
7
7
 
8
+ /**
9
+ * TSL function that checks if a circle intersects with an axis-aligned bounding box (AABB).
10
+ *
11
+ * @tsl
12
+ * @function
13
+ * @param {Node<vec2>} circleCenter - The center of the circle.
14
+ * @param {Node<float>} radius - The radius of the circle.
15
+ * @param {Node<vec2>} minBounds - The minimum bounds of the AABB.
16
+ * @param {Node<vec2>} maxBounds - The maximum bounds of the AABB.
17
+ * @return {Node<bool>} True if the circle intersects the AABB.
18
+ */
8
19
  export const circleIntersectsAABB = /*@__PURE__*/ Fn( ( [ circleCenter, radius, minBounds, maxBounds ] ) => {
9
20
 
10
21
  // Find the closest point on the AABB to the circle's center using method chaining
@@ -392,7 +403,7 @@ class TiledLightsNode extends LightsNode {
392
403
 
393
404
  } );
394
405
 
395
- } )().compute( count );
406
+ } )().compute( count ).setName( 'Update Tiled Lights' );
396
407
 
397
408
  // screen coordinate lighting indexes
398
409
 
@@ -419,4 +430,13 @@ class TiledLightsNode extends LightsNode {
419
430
 
420
431
  export default TiledLightsNode;
421
432
 
433
+ /**
434
+ * TSL function that creates a tiled lights node.
435
+ *
436
+ * @tsl
437
+ * @function
438
+ * @param {number} [maxLights=1024] - The maximum number of lights.
439
+ * @param {number} [tileSize=32] - The tile size.
440
+ * @return {TiledLightsNode} The tiled lights node.
441
+ */
422
442
  export const tiledLights = /*@__PURE__*/ nodeProxy( TiledLightsNode );
@@ -446,7 +446,7 @@ function deepCloneAttribute( attribute ) {
446
446
  * single {@link InterleavedBuffer} instance. All attributes must have compatible types.
447
447
  *
448
448
  * @param {Array<BufferAttribute>} attributes - The attributes to interleave.
449
- * @return {Array<InterleavedBufferAttribute>} An array of interleaved attributes. If interleave does not succeed, the method returns `null`.
449
+ * @return {?Array<InterleavedBufferAttribute>} An array of interleaved attributes. If interleave does not succeed, the method returns `null`.
450
450
  */
451
451
  function interleaveAttributes( attributes ) {
452
452
 
@@ -7,9 +7,10 @@ import {
7
7
  OrthographicCamera,
8
8
  PlaneGeometry,
9
9
  Scene,
10
- Texture
10
+ DepthTexture,
11
+ Vector2
11
12
  } from 'three';
12
- import { texture } from 'three/tsl';
13
+ import { uv, uniform, textureLoad } from 'three/tsl';
13
14
 
14
15
  /**
15
16
  * This is a helper for visualising a given light's shadow map.
@@ -60,8 +61,10 @@ class ShadowMapViewer {
60
61
 
61
62
  const material = new NodeMaterial();
62
63
 
63
- const shadowMapUniform = texture( new Texture() );
64
- material.fragmentNode = shadowMapUniform;
64
+ const textureDimension = uniform( new Vector2() );
65
+
66
+ const shadowMapUniform = textureLoad( new DepthTexture(), uv().flipY().mul( textureDimension ) );
67
+ material.fragmentNode = shadowMapUniform.x.oneMinus();
65
68
 
66
69
  const plane = new PlaneGeometry( frame.width, frame.height );
67
70
  const mesh = new Mesh( plane, material );
@@ -173,7 +176,11 @@ class ShadowMapViewer {
173
176
  //always end up with the scene's first added shadow casting light's shadowMap
174
177
  //in the shader
175
178
  //See: https://github.com/mrdoob/three.js/issues/5932
176
- shadowMapUniform.value = light.shadow.map.texture;
179
+
180
+ const depthTexture = light.shadow.map.depthTexture;
181
+
182
+ shadowMapUniform.value = depthTexture;
183
+ textureDimension.value.set( depthTexture.width, depthTexture.height );
177
184
 
178
185
  currentAutoClear = renderer.autoClear;
179
186
  renderer.autoClear = false; // To allow render overlay
@@ -122,7 +122,7 @@ class OculusHandModel extends Object3D {
122
122
  /**
123
123
  * Returns the pointer position which is the position of the index finger tip.
124
124
  *
125
- * @return {Vector3|null} The pointer position. Returns `null` if not index finger tip joint was found.
125
+ * @return {?Vector3} The pointer position. Returns `null` if not index finger tip joint was found.
126
126
  */
127
127
  getPointerPosition() {
128
128
 
@@ -245,7 +245,7 @@ function addAssetSceneToControllerModel( controllerModel, scene ) {
245
245
  * attached to the object returned from getControllerGrip in order to match the orientation of
246
246
  * the held device.
247
247
  *
248
- * This module depends on the [motion-controllers]{@link https://github.com/immersive-web/webxr-input-profiles/blob/main/packages/motion-controllers/README.md}
248
+ * This module depends on the [motion-controllers](https://github.com/immersive-web/webxr-input-profiles/blob/main/packages/motion-controllers/README.md)
249
249
  * third-part library.
250
250
  *
251
251
  * ```js
@@ -179,16 +179,12 @@ class XRHandModelFactory {
179
179
 
180
180
  }
181
181
 
182
- controller.visible = true;
183
-
184
182
  } );
185
183
 
186
184
  controller.addEventListener( 'disconnected', () => {
187
185
 
188
- controller.visible = false;
189
- // handModel.motionController = null;
190
- // handModel.remove( scene );
191
- // scene = null;
186
+ handModel.clear();
187
+ handModel.motionController = null;
192
188
 
193
189
  } );
194
190
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plastic-software/three",
3
- "version": "0.179.0",
3
+ "version": "0.181.1",
4
4
  "description": "JavaScript 3D library",
5
5
  "type": "module",
6
6
  "main": "./build/three.cjs",
@@ -63,13 +63,12 @@
63
63
  "lint-utils": "eslint utils --ignore-pattern prettify --ignore-pattern fuse",
64
64
  "lint": "npm run lint-core",
65
65
  "lint-fix": "npm run lint-core -- --fix && npm run lint-addons -- --fix && npm run lint-examples -- --fix && npm run lint-docs -- --fix && npm run lint-editor -- --fix && npm run lint-playground -- --fix && npm run lint-manual -- --fix && npm run lint-test -- --fix && npm run lint-utils -- --fix",
66
- "test-unit": "qunit -r failonlyreporter -f !-webonly test/unit/three.source.unit.js",
67
- "test-unit-addons": "qunit -r failonlyreporter -f !-webonly test/unit/three.addons.unit.js",
66
+ "test-unit": "qunit test/unit/three.source.unit.js",
67
+ "test-unit-addons": "qunit test/unit/three.addons.unit.js",
68
68
  "test-e2e": "node test/e2e/puppeteer.js",
69
69
  "test-e2e-cov": "node test/e2e/check-coverage.js",
70
70
  "test-e2e-webgpu": "node test/e2e/puppeteer.js --webgpu",
71
71
  "test-treeshake": "rollup -c test/rollup.treeshake.config.js",
72
- "test-circular-deps": "dpdm --no-warning --no-tree --exit-code circular:1 src/nodes/Nodes.js",
73
72
  "make-screenshot": "node test/e2e/puppeteer.js --make"
74
73
  },
75
74
  "keywords": [
@@ -97,24 +96,20 @@
97
96
  "devDependencies": {
98
97
  "@rollup/plugin-node-resolve": "^16.0.0",
99
98
  "@rollup/plugin-terser": "^0.4.0",
100
- "chalk": "^5.2.0",
101
99
  "concurrently": "^9.0.0",
102
- "dpdm": "^3.14.0",
103
100
  "eslint": "^8.37.0",
104
101
  "eslint-config-mdcs": "^5.0.0",
105
102
  "eslint-plugin-compat": "^6.0.0",
106
103
  "eslint-plugin-html": "^8.0.0",
107
104
  "eslint-plugin-import": "^2.27.5",
108
- "failonlyreporter": "^1.0.0",
109
105
  "jimp": "^1.6.0",
110
- "jsdoc": "^4.0.4",
106
+ "jsdoc": "^4.0.5",
111
107
  "magic-string": "^0.30.0",
112
108
  "pixelmatch": "^7.0.0",
113
- "puppeteer": "^22.0.0",
109
+ "puppeteer": "^24.25.0",
114
110
  "qunit": "^2.19.4",
115
111
  "rollup": "^4.6.0",
116
112
  "rollup-plugin-filesize": "^10.0.0",
117
- "rollup-plugin-visualizer": "^6.0.0",
118
113
  "servez": "^2.2.4"
119
114
  },
120
115
  "overrides": {
package/src/Three.Core.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { REVISION } from './constants.js';
2
+ import { warn } from './utils.js';
2
3
 
3
4
  export { WebGLArrayRenderTarget } from './renderers/WebGLArrayRenderTarget.js';
4
5
  export { WebGL3DRenderTarget } from './renderers/WebGL3DRenderTarget.js';
@@ -34,6 +35,7 @@ export { CompressedCubeTexture } from './textures/CompressedCubeTexture.js';
34
35
  export { CubeTexture } from './textures/CubeTexture.js';
35
36
  export { CanvasTexture } from './textures/CanvasTexture.js';
36
37
  export { DepthTexture } from './textures/DepthTexture.js';
38
+ export { ExternalTexture } from './textures/ExternalTexture.js';
37
39
  export { Texture } from './textures/Texture.js';
38
40
  export * from './geometries/Geometries.js';
39
41
  export * from './materials/Materials.js';
@@ -156,7 +158,7 @@ export { DataUtils } from './extras/DataUtils.js';
156
158
  export { ImageUtils } from './extras/ImageUtils.js';
157
159
  export { ShapeUtils } from './extras/ShapeUtils.js';
158
160
  export { TextureUtils } from './extras/TextureUtils.js';
159
- export { createCanvasElement } from './utils.js';
161
+ export { createCanvasElement, setConsoleFunction, getConsoleFunction, log, warn, error, warnOnce } from './utils.js';
160
162
  export * from './constants.js';
161
163
  export * from './Three.Legacy.js';
162
164
 
@@ -172,7 +174,7 @@ if ( typeof window !== 'undefined' ) {
172
174
 
173
175
  if ( window.__THREE__ ) {
174
176
 
175
- console.warn( 'WARNING: Multiple instances of Three.js being imported.' );
177
+ warn( 'WARNING: Multiple instances of Three.js being imported.' );
176
178
 
177
179
  } else {
178
180
 
package/src/Three.TSL.js CHANGED
@@ -24,6 +24,8 @@ export const PCFShadowFilter = TSL.PCFShadowFilter;
24
24
  export const PCFSoftShadowFilter = TSL.PCFSoftShadowFilter;
25
25
  export const PI = TSL.PI;
26
26
  export const PI2 = TSL.PI2;
27
+ export const TWO_PI = TSL.TWO_PI;
28
+ export const HALF_PI = TSL.HALF_PI;
27
29
  export const PointShadowFilter = TSL.PointShadowFilter;
28
30
  export const Return = TSL.Return;
29
31
  export const Schlick_to_F0 = TSL.Schlick_to_F0;
@@ -97,6 +99,7 @@ export const buffer = TSL.buffer;
97
99
  export const bufferAttribute = TSL.bufferAttribute;
98
100
  export const bumpMap = TSL.bumpMap;
99
101
  export const burn = TSL.burn;
102
+ export const builtin = TSL.builtin;
100
103
  export const bvec2 = TSL.bvec2;
101
104
  export const bvec3 = TSL.bvec3;
102
105
  export const bvec4 = TSL.bvec4;
@@ -111,6 +114,7 @@ export const cameraPosition = TSL.cameraPosition;
111
114
  export const cameraProjectionMatrix = TSL.cameraProjectionMatrix;
112
115
  export const cameraProjectionMatrixInverse = TSL.cameraProjectionMatrixInverse;
113
116
  export const cameraViewMatrix = TSL.cameraViewMatrix;
117
+ export const cameraViewport = TSL.cameraViewport;
114
118
  export const cameraWorldMatrix = TSL.cameraWorldMatrix;
115
119
  export const cbrt = TSL.cbrt;
116
120
  export const cdl = TSL.cdl;
@@ -177,6 +181,8 @@ export const faceDirection = TSL.faceDirection;
177
181
  export const faceForward = TSL.faceForward;
178
182
  export const faceforward = TSL.faceforward;
179
183
  export const float = TSL.float;
184
+ export const floatBitsToInt = TSL.floatBitsToInt;
185
+ export const floatBitsToUint = TSL.floatBitsToUint;
180
186
  export const floor = TSL.floor;
181
187
  export const fog = TSL.fog;
182
188
  export const fract = TSL.fract;
@@ -192,6 +198,7 @@ export const getDirection = TSL.getDirection;
192
198
  export const getDistanceAttenuation = TSL.getDistanceAttenuation;
193
199
  export const getGeometryRoughness = TSL.getGeometryRoughness;
194
200
  export const getNormalFromDepth = TSL.getNormalFromDepth;
201
+ export const interleavedGradientNoise = TSL.interleavedGradientNoise;
195
202
  export const getParallaxCorrectNormal = TSL.getParallaxCorrectNormal;
196
203
  export const getRoughness = TSL.getRoughness;
197
204
  export const getScreenPosition = TSL.getScreenPosition;
@@ -219,6 +226,7 @@ export const instancedBufferAttribute = TSL.instancedBufferAttribute;
219
226
  export const instancedDynamicBufferAttribute = TSL.instancedDynamicBufferAttribute;
220
227
  export const instancedMesh = TSL.instancedMesh;
221
228
  export const int = TSL.int;
229
+ export const intBitsToFloat = TSL.intBitsToFloat;
222
230
  export const inverse = TSL.inverse;
223
231
  export const inverseSqrt = TSL.inverseSqrt;
224
232
  export const inversesqrt = TSL.inversesqrt;
@@ -391,6 +399,8 @@ export const objectRadius = TSL.objectRadius;
391
399
  export const objectScale = TSL.objectScale;
392
400
  export const objectViewPosition = TSL.objectViewPosition;
393
401
  export const objectWorldMatrix = TSL.objectWorldMatrix;
402
+ export const OnBeforeObjectUpdate = TSL.OnBeforeObjectUpdate;
403
+ export const OnBeforeMaterialUpdate = TSL.OnBeforeMaterialUpdate;
394
404
  export const OnObjectUpdate = TSL.OnObjectUpdate;
395
405
  export const OnMaterialUpdate = TSL.OnMaterialUpdate;
396
406
  export const oneMinus = TSL.oneMinus;
@@ -465,6 +475,7 @@ export const saturate = TSL.saturate;
465
475
  export const saturation = TSL.saturation;
466
476
  export const screen = TSL.screen;
467
477
  export const screenCoordinate = TSL.screenCoordinate;
478
+ export const screenDPR = TSL.screenDPR;
468
479
  export const screenSize = TSL.screenSize;
469
480
  export const screenUV = TSL.screenUV;
470
481
  export const scriptable = TSL.scriptable;
@@ -504,15 +515,35 @@ export const storageTexture = TSL.storageTexture;
504
515
  export const string = TSL.string;
505
516
  export const struct = TSL.struct;
506
517
  export const sub = TSL.sub;
518
+ export const subgroupAdd = TSL.subgroupAdd;
519
+ export const subgroupAll = TSL.subgroupAll;
520
+ export const subgroupAnd = TSL.subgroupAnd;
521
+ export const subgroupAny = TSL.subgroupAny;
522
+ export const subgroupBallot = TSL.subgroupBallot;
523
+ export const subgroupBroadcast = TSL.subgroupBroadcast;
524
+ export const subgroupBroadcastFirst = TSL.subgroupBroadcastFirst;
507
525
  export const subBuild = TSL.subBuild;
526
+ export const subgroupElect = TSL.subgroupElect;
527
+ export const subgroupExclusiveAdd = TSL.subgroupExclusiveAdd;
528
+ export const subgroupExclusiveMul = TSL.subgroupExclusiveMul;
529
+ export const subgroupInclusiveAdd = TSL.subgroupInclusiveAdd;
530
+ export const subgroupInclusiveMul = TSL.subgroupInclusiveMul;
508
531
  export const subgroupIndex = TSL.subgroupIndex;
532
+ export const subgroupMax = TSL.subgroupMax;
533
+ export const subgroupMin = TSL.subgroupMin;
534
+ export const subgroupMul = TSL.subgroupMul;
535
+ export const subgroupOr = TSL.subgroupOr;
536
+ export const subgroupShuffle = TSL.subgroupShuffle;
537
+ export const subgroupShuffleDown = TSL.subgroupShuffleDown;
538
+ export const subgroupShuffleUp = TSL.subgroupShuffleUp;
539
+ export const subgroupShuffleXor = TSL.subgroupShuffleXor;
509
540
  export const subgroupSize = TSL.subgroupSize;
541
+ export const subgroupXor = TSL.subgroupXor;
510
542
  export const tan = TSL.tan;
511
543
  export const tangentGeometry = TSL.tangentGeometry;
512
544
  export const tangentLocal = TSL.tangentLocal;
513
545
  export const tangentView = TSL.tangentView;
514
546
  export const tangentWorld = TSL.tangentWorld;
515
- export const temp = TSL.temp;
516
547
  export const texture = TSL.texture;
517
548
  export const texture3D = TSL.texture3D;
518
549
  export const textureBarrier = TSL.textureBarrier;
@@ -521,12 +552,10 @@ export const textureBicubicLevel = TSL.textureBicubicLevel;
521
552
  export const textureCubeUV = TSL.textureCubeUV;
522
553
  export const textureLoad = TSL.textureLoad;
523
554
  export const textureSize = TSL.textureSize;
555
+ export const textureLevel = TSL.textureLevel;
524
556
  export const textureStore = TSL.textureStore;
525
557
  export const thickness = TSL.thickness;
526
558
  export const time = TSL.time;
527
- export const timerDelta = TSL.timerDelta;
528
- export const timerGlobal = TSL.timerGlobal;
529
- export const timerLocal = TSL.timerLocal;
530
559
  export const toneMapping = TSL.toneMapping;
531
560
  export const toneMappingExposure = TSL.toneMappingExposure;
532
561
  export const toonOutlinePass = TSL.toonOutlinePass;
@@ -543,10 +572,12 @@ export const triplanarTexture = TSL.triplanarTexture;
543
572
  export const triplanarTextures = TSL.triplanarTextures;
544
573
  export const trunc = TSL.trunc;
545
574
  export const uint = TSL.uint;
575
+ export const uintBitsToFloat = TSL.uintBitsToFloat;
546
576
  export const uniform = TSL.uniform;
547
577
  export const uniformArray = TSL.uniformArray;
548
578
  export const uniformCubeTexture = TSL.uniformCubeTexture;
549
579
  export const uniformGroup = TSL.uniformGroup;
580
+ export const uniformFlow = TSL.uniformFlow;
550
581
  export const uniformTexture = TSL.uniformTexture;
551
582
  export const unpremultiplyAlpha = TSL.unpremultiplyAlpha;
552
583
  export const userData = TSL.userData;
@@ -598,5 +629,5 @@ for ( const key of Object.keys( THREE.TSL ) ) {
598
629
 
599
630
  }
600
631
 
601
- console.log( code );
632
+ log( code );
602
633
  //*/
@@ -18,6 +18,8 @@ export { default as ProjectorLight } from './lights/webgpu/ProjectorLight.js';
18
18
  export { default as NodeLoader } from './loaders/nodes/NodeLoader.js';
19
19
  export { default as NodeObjectLoader } from './loaders/nodes/NodeObjectLoader.js';
20
20
  export { default as NodeMaterialLoader } from './loaders/nodes/NodeMaterialLoader.js';
21
+ export { default as InspectorBase } from './renderers/common/InspectorBase.js';
22
+ export { default as CanvasTarget } from './renderers/common/CanvasTarget.js';
21
23
  export { ClippingGroup } from './objects/ClippingGroup.js';
22
24
  export * from './nodes/Nodes.js';
23
25
  import * as TSL from './nodes/TSL.js';
@@ -20,6 +20,8 @@ export { default as ProjectorLight } from './lights/webgpu/ProjectorLight.js';
20
20
  export { default as NodeLoader } from './loaders/nodes/NodeLoader.js';
21
21
  export { default as NodeObjectLoader } from './loaders/nodes/NodeObjectLoader.js';
22
22
  export { default as NodeMaterialLoader } from './loaders/nodes/NodeMaterialLoader.js';
23
+ export { default as InspectorBase } from './renderers/common/InspectorBase.js';
24
+ export { default as CanvasTarget } from './renderers/common/CanvasTarget.js';
23
25
  export { ClippingGroup } from './objects/ClippingGroup.js';
24
26
  export * from './nodes/Nodes.js';
25
27
  import * as TSL from './nodes/TSL.js';
@@ -8,6 +8,7 @@ import { StringKeyframeTrack } from './tracks/StringKeyframeTrack.js';
8
8
  import { VectorKeyframeTrack } from './tracks/VectorKeyframeTrack.js';
9
9
  import { generateUUID } from '../math/MathUtils.js';
10
10
  import { NormalAnimationBlendMode } from '../constants.js';
11
+ import { warn, error } from '../utils.js';
11
12
 
12
13
  /**
13
14
  * A reusable set of keyframe tracks which represent an animation.
@@ -67,6 +68,14 @@ class AnimationClip {
67
68
  */
68
69
  this.uuid = generateUUID();
69
70
 
71
+ /**
72
+ * An object that can be used to store custom data about the animation clip.
73
+ * It should not hold references to functions as these will not be cloned.
74
+ *
75
+ * @type {Object}
76
+ */
77
+ this.userData = {};
78
+
70
79
  // this means it should figure out its duration by scanning the tracks
71
80
  if ( this.duration < 0 ) {
72
81
 
@@ -98,6 +107,8 @@ class AnimationClip {
98
107
  const clip = new this( json.name, json.duration, tracks, json.blendMode );
99
108
  clip.uuid = json.uuid;
100
109
 
110
+ clip.userData = JSON.parse( json.userData || '{}' );
111
+
101
112
  return clip;
102
113
 
103
114
  }
@@ -120,7 +131,8 @@ class AnimationClip {
120
131
  'duration': clip.duration,
121
132
  'tracks': tracks,
122
133
  'uuid': clip.uuid,
123
- 'blendMode': clip.blendMode
134
+ 'blendMode': clip.blendMode,
135
+ 'userData': JSON.stringify( clip.userData ),
124
136
 
125
137
  };
126
138
 
@@ -294,11 +306,11 @@ class AnimationClip {
294
306
  */
295
307
  static parseAnimation( animation, bones ) {
296
308
 
297
- console.warn( 'THREE.AnimationClip: parseAnimation() is deprecated and will be removed with r185' );
309
+ warn( 'AnimationClip: parseAnimation() is deprecated and will be removed with r185' );
298
310
 
299
311
  if ( ! animation ) {
300
312
 
301
- console.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );
313
+ error( 'AnimationClip: No animation in JSONLoader data.' );
302
314
  return null;
303
315
 
304
316
  }
@@ -515,7 +527,11 @@ class AnimationClip {
515
527
 
516
528
  }
517
529
 
518
- return new this.constructor( this.name, this.duration, tracks, this.blendMode );
530
+ const clip = new this.constructor( this.name, this.duration, tracks, this.blendMode );
531
+
532
+ clip.userData = JSON.parse( JSON.stringify( this.userData ) );
533
+
534
+ return clip;
519
535
 
520
536
  }
521
537
 
@@ -641,7 +641,7 @@ class AnimationMixer extends EventDispatcher {
641
641
  /**
642
642
  * Deactivates all previously scheduled actions on this mixer.
643
643
  *
644
- * @return {AnimationMixer} A reference to thi animation mixer.
644
+ * @return {AnimationMixer} A reference to this animation mixer.
645
645
  */
646
646
  stopAllAction() {
647
647
 
@@ -665,7 +665,7 @@ class AnimationMixer extends EventDispatcher {
665
665
  * time from {@link Clock} or {@link Timer}.
666
666
  *
667
667
  * @param {number} deltaTime - The delta time in seconds.
668
- * @return {AnimationMixer} A reference to thi animation mixer.
668
+ * @return {AnimationMixer} A reference to this animation mixer.
669
669
  */
670
670
  update( deltaTime ) {
671
671
 
@@ -711,7 +711,7 @@ class AnimationMixer extends EventDispatcher {
711
711
  * input parameter will be scaled by {@link AnimationMixer#timeScale}
712
712
  *
713
713
  * @param {number} time - The time to set in seconds.
714
- * @return {AnimationMixer} A reference to thi animation mixer.
714
+ * @return {AnimationMixer} A reference to this animation mixer.
715
715
  */
716
716
  setTime( time ) {
717
717
 
@@ -1,5 +1,6 @@
1
1
  import { PropertyBinding } from './PropertyBinding.js';
2
2
  import { generateUUID } from '../math/MathUtils.js';
3
+ import { error } from '../utils.js';
3
4
 
4
5
  /**
5
6
  * A group of objects that receives a shared animation state.
@@ -175,7 +176,7 @@ class AnimationObjectGroup {
175
176
 
176
177
  } else if ( objects[ index ] !== knownObject ) {
177
178
 
178
- console.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +
179
+ error( 'AnimationObjectGroup: Different objects with the same UUID ' +
179
180
  'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );
180
181
 
181
182
  } // else the object is already where we want it to be