super-three 0.181.0 → 0.184.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +13152 -11354
  4. package/build/three.core.js +12319 -11539
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1808 -781
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +27 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +10523 -6263
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +10484 -6262
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +11 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +7 -4
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +58 -54
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +34 -2
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  26. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  27. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  28. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  29. package/examples/jsm/exporters/EXRExporter.js +1 -1
  30. package/examples/jsm/exporters/GLTFExporter.js +152 -9
  31. package/examples/jsm/exporters/USDZExporter.js +22 -3
  32. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  33. package/examples/jsm/geometries/TextGeometry.js +18 -0
  34. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  36. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  37. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  38. package/examples/jsm/helpers/ViewHelper.js +67 -8
  39. package/examples/jsm/inspector/Extension.js +13 -0
  40. package/examples/jsm/inspector/Inspector.js +203 -88
  41. package/examples/jsm/inspector/RendererInspector.js +14 -4
  42. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  43. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  44. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  45. package/examples/jsm/inspector/tabs/Console.js +41 -7
  46. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  47. package/examples/jsm/inspector/tabs/Parameters.js +51 -3
  48. package/examples/jsm/inspector/tabs/Performance.js +4 -4
  49. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  50. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  51. package/examples/jsm/inspector/tabs/Viewer.js +107 -5
  52. package/examples/jsm/inspector/ui/Graph.js +2 -2
  53. package/examples/jsm/inspector/ui/List.js +1 -1
  54. package/examples/jsm/inspector/ui/Profiler.js +1936 -34
  55. package/examples/jsm/inspector/ui/Style.js +1044 -31
  56. package/examples/jsm/inspector/ui/Tab.js +222 -3
  57. package/examples/jsm/inspector/ui/Values.js +55 -2
  58. package/examples/jsm/inspector/ui/utils.js +13 -0
  59. package/examples/jsm/interaction/InteractionManager.js +226 -0
  60. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  61. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  62. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  63. package/examples/jsm/lines/LineMaterial.js +7 -1
  64. package/examples/jsm/loaders/3DMLoader.js +5 -4
  65. package/examples/jsm/loaders/3MFLoader.js +2 -2
  66. package/examples/jsm/loaders/AMFLoader.js +2 -2
  67. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  68. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  69. package/examples/jsm/loaders/EXRLoader.js +687 -48
  70. package/examples/jsm/loaders/FBXLoader.js +235 -37
  71. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  72. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  73. package/examples/jsm/loaders/HDRLoader.js +1 -2
  74. package/examples/jsm/loaders/KMZLoader.js +5 -5
  75. package/examples/jsm/loaders/KTX2Loader.js +27 -5
  76. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  77. package/examples/jsm/loaders/LWOLoader.js +7 -39
  78. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  79. package/examples/jsm/loaders/PCDLoader.js +4 -2
  80. package/examples/jsm/loaders/SVGLoader.js +2 -2
  81. package/examples/jsm/loaders/TDSLoader.js +0 -2
  82. package/examples/jsm/loaders/TGALoader.js +0 -2
  83. package/examples/jsm/loaders/USDLoader.js +100 -40
  84. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  85. package/examples/jsm/loaders/VOXLoader.js +660 -117
  86. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  87. package/examples/jsm/loaders/VTKLoader.js +42 -25
  88. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  89. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  90. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  91. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  92. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  93. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  94. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  95. package/examples/jsm/math/Octree.js +131 -1
  96. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  97. package/examples/jsm/misc/RollerCoaster.js +42 -4
  98. package/examples/jsm/misc/Volume.js +0 -1
  99. package/examples/jsm/misc/VolumeSlice.js +0 -1
  100. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  101. package/examples/jsm/objects/LensflareMesh.js +1 -1
  102. package/examples/jsm/objects/Reflector.js +73 -25
  103. package/examples/jsm/objects/Sky.js +90 -6
  104. package/examples/jsm/objects/SkyMesh.js +150 -16
  105. package/examples/jsm/objects/Water.js +4 -3
  106. package/examples/jsm/objects/Water2.js +5 -3
  107. package/examples/jsm/objects/WaterMesh.js +5 -7
  108. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  109. package/examples/jsm/physics/JoltPhysics.js +10 -6
  110. package/examples/jsm/physics/RapierPhysics.js +9 -5
  111. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  112. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  113. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  114. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  115. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  116. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  117. package/examples/jsm/renderers/Projector.js +246 -28
  118. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  119. package/examples/jsm/shaders/GTAOShader.js +19 -6
  120. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  122. package/examples/jsm/shaders/SAOShader.js +17 -4
  123. package/examples/jsm/shaders/SSAOShader.js +11 -1
  124. package/examples/jsm/shaders/SSRShader.js +6 -5
  125. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  126. package/examples/jsm/shaders/VignetteShader.js +1 -1
  127. package/examples/jsm/transpiler/AST.js +44 -0
  128. package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  130. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  131. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  132. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  133. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  134. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  135. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  136. package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
  137. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  138. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  139. package/examples/jsm/tsl/display/CRT.js +150 -0
  140. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  141. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  142. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  143. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  144. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  145. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  146. package/examples/jsm/tsl/display/GTAONode.js +6 -4
  147. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  148. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  149. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  150. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  151. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  152. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  153. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  154. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  155. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  156. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  157. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  158. package/examples/jsm/tsl/display/SSGINode.js +8 -24
  159. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  160. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  161. package/examples/jsm/tsl/display/Shape.js +29 -0
  162. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  163. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  164. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  165. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  166. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  167. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  168. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  169. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  170. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  171. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  172. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  173. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  174. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  175. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  176. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  177. package/examples/jsm/tsl/math/Bayer.js +53 -3
  178. package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
  179. package/examples/jsm/utils/ColorUtils.js +76 -0
  180. package/examples/jsm/utils/LDrawUtils.js +1 -1
  181. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  182. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  183. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  186. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  187. package/package.json +24 -30
  188. package/src/Three.Core.js +3 -1
  189. package/src/Three.TSL.js +25 -11
  190. package/src/Three.WebGPU.Nodes.js +5 -0
  191. package/src/Three.WebGPU.js +9 -0
  192. package/src/Three.js +1 -0
  193. package/src/animation/AnimationAction.js +12 -2
  194. package/src/animation/AnimationClip.js +1 -1
  195. package/src/animation/AnimationMixer.js +6 -0
  196. package/src/animation/AnimationUtils.js +1 -12
  197. package/src/animation/KeyframeTrack.js +47 -8
  198. package/src/animation/PropertyMixer.js +4 -4
  199. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  200. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  201. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  202. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  203. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  204. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  205. package/src/audio/Audio.js +1 -1
  206. package/src/audio/AudioContext.js +2 -2
  207. package/src/audio/AudioListener.js +5 -3
  208. package/src/cameras/Camera.js +32 -2
  209. package/src/cameras/CubeCamera.js +20 -0
  210. package/src/constants.js +90 -5
  211. package/src/core/BufferAttribute.js +13 -1
  212. package/src/core/BufferGeometry.js +14 -2
  213. package/src/core/Clock.js +7 -0
  214. package/src/core/Object3D.js +52 -4
  215. package/src/core/Raycaster.js +2 -2
  216. package/src/core/RenderTarget.js +4 -4
  217. package/src/extras/PMREMGenerator.js +7 -18
  218. package/src/extras/TextureUtils.js +5 -1
  219. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  220. package/src/geometries/ExtrudeGeometry.js +2 -2
  221. package/src/geometries/PolyhedronGeometry.js +1 -1
  222. package/src/geometries/TorusGeometry.js +8 -3
  223. package/src/helpers/CameraHelper.js +3 -0
  224. package/src/helpers/DirectionalLightHelper.js +4 -1
  225. package/src/helpers/HemisphereLightHelper.js +3 -0
  226. package/src/helpers/PointLightHelper.js +1 -25
  227. package/src/helpers/SpotLightHelper.js +3 -0
  228. package/src/lights/DirectionalLight.js +13 -0
  229. package/src/lights/HemisphereLight.js +10 -0
  230. package/src/lights/Light.js +1 -11
  231. package/src/lights/LightProbe.js +0 -15
  232. package/src/lights/LightShadow.js +15 -6
  233. package/src/lights/PointLight.js +15 -0
  234. package/src/lights/PointLightShadow.js +0 -86
  235. package/src/lights/SpotLight.js +22 -1
  236. package/src/lights/webgpu/IESSpotLight.js +2 -1
  237. package/src/loaders/AudioLoader.js +11 -1
  238. package/src/loaders/Cache.js +28 -0
  239. package/src/loaders/DataTextureLoader.js +6 -4
  240. package/src/loaders/FileLoader.js +2 -3
  241. package/src/loaders/ImageBitmapLoader.js +12 -9
  242. package/src/loaders/Loader.js +6 -0
  243. package/src/loaders/MaterialLoader.js +3 -2
  244. package/src/loaders/ObjectLoader.js +46 -6
  245. package/src/loaders/nodes/NodeLoader.js +2 -2
  246. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  247. package/src/materials/Material.js +2 -0
  248. package/src/materials/MeshLambertMaterial.js +9 -0
  249. package/src/materials/MeshPhongMaterial.js +9 -0
  250. package/src/materials/MeshToonMaterial.js +1 -1
  251. package/src/materials/ShaderMaterial.js +20 -1
  252. package/src/materials/nodes/Line2NodeMaterial.js +34 -7
  253. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  254. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  255. package/src/materials/nodes/NodeMaterial.js +45 -25
  256. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
  257. package/src/math/Line3.js +6 -5
  258. package/src/math/MathUtils.js +10 -10
  259. package/src/math/Matrix2.js +13 -9
  260. package/src/math/Matrix3.js +13 -9
  261. package/src/math/Matrix4.js +87 -74
  262. package/src/math/Plane.js +4 -3
  263. package/src/math/Quaternion.js +3 -29
  264. package/src/math/Sphere.js +1 -1
  265. package/src/math/Triangle.js +1 -1
  266. package/src/math/Vector2.js +11 -7
  267. package/src/math/Vector3.js +15 -13
  268. package/src/math/Vector4.js +13 -9
  269. package/src/math/interpolants/BezierInterpolant.js +108 -0
  270. package/src/nodes/Nodes.js +86 -68
  271. package/src/nodes/TSL.js +7 -7
  272. package/src/nodes/accessors/Arrays.js +1 -1
  273. package/src/nodes/accessors/BatchNode.js +10 -10
  274. package/src/nodes/accessors/Bitangent.js +5 -5
  275. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  276. package/src/nodes/accessors/BufferNode.js +29 -2
  277. package/src/nodes/accessors/Camera.js +149 -28
  278. package/src/nodes/accessors/ClippingNode.js +4 -4
  279. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  280. package/src/nodes/accessors/InstanceNode.js +148 -43
  281. package/src/nodes/accessors/MaterialNode.js +9 -1
  282. package/src/nodes/accessors/MaterialProperties.js +2 -5
  283. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  284. package/src/nodes/accessors/ModelNode.js +1 -1
  285. package/src/nodes/accessors/Normal.js +11 -11
  286. package/src/nodes/accessors/Object3DNode.js +1 -1
  287. package/src/nodes/accessors/Position.js +34 -2
  288. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  289. package/src/nodes/accessors/ReferenceNode.js +8 -8
  290. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  291. package/src/nodes/accessors/SceneProperties.js +47 -0
  292. package/src/nodes/accessors/SkinningNode.js +27 -26
  293. package/src/nodes/accessors/StorageBufferNode.js +14 -25
  294. package/src/nodes/accessors/StorageTextureNode.js +40 -9
  295. package/src/nodes/accessors/Tangent.js +4 -14
  296. package/src/nodes/accessors/Texture3DNode.js +32 -35
  297. package/src/nodes/accessors/TextureNode.js +67 -23
  298. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  299. package/src/nodes/accessors/UserDataNode.js +1 -2
  300. package/src/nodes/accessors/VertexColorNode.js +1 -2
  301. package/src/nodes/code/FunctionCallNode.js +1 -1
  302. package/src/nodes/code/FunctionNode.js +2 -3
  303. package/src/nodes/core/ArrayNode.js +21 -2
  304. package/src/nodes/core/AssignNode.js +3 -3
  305. package/src/nodes/core/AttributeNode.js +3 -3
  306. package/src/nodes/core/BypassNode.js +1 -1
  307. package/src/nodes/core/ContextNode.js +104 -5
  308. package/src/nodes/core/IndexNode.js +2 -1
  309. package/src/nodes/core/InputNode.js +1 -1
  310. package/src/nodes/core/InspectorNode.js +1 -1
  311. package/src/nodes/core/IsolateNode.js +1 -1
  312. package/src/nodes/core/MRTNode.js +48 -2
  313. package/src/nodes/core/Node.js +112 -15
  314. package/src/nodes/core/NodeBuilder.js +284 -66
  315. package/src/nodes/core/NodeError.js +28 -0
  316. package/src/nodes/core/NodeFrame.js +12 -4
  317. package/src/nodes/core/NodeUtils.js +11 -9
  318. package/src/nodes/core/OutputStructNode.js +12 -10
  319. package/src/nodes/core/ParameterNode.js +4 -4
  320. package/src/nodes/core/PropertyNode.js +19 -3
  321. package/src/nodes/core/StackNode.js +66 -17
  322. package/src/nodes/core/StackTrace.js +139 -0
  323. package/src/nodes/core/StructNode.js +17 -3
  324. package/src/nodes/core/StructTypeNode.js +12 -18
  325. package/src/nodes/core/SubBuildNode.js +2 -2
  326. package/src/nodes/core/UniformGroupNode.js +36 -6
  327. package/src/nodes/core/UniformNode.js +21 -5
  328. package/src/nodes/core/VarNode.js +48 -23
  329. package/src/nodes/core/VaryingNode.js +2 -19
  330. package/src/nodes/display/BlendModes.js +0 -64
  331. package/src/nodes/display/ColorAdjustment.js +17 -0
  332. package/src/nodes/display/ColorSpaceNode.js +3 -3
  333. package/src/nodes/display/NormalMapNode.js +39 -4
  334. package/src/nodes/display/PassNode.js +125 -16
  335. package/src/nodes/display/RenderOutputNode.js +7 -7
  336. package/src/nodes/display/ScreenNode.js +4 -2
  337. package/src/nodes/display/ToneMappingNode.js +1 -1
  338. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  339. package/src/nodes/display/ViewportDepthNode.js +52 -4
  340. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  341. package/src/nodes/display/ViewportTextureNode.js +39 -11
  342. package/src/nodes/fog/Fog.js +18 -35
  343. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  344. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  345. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  346. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  347. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  348. package/src/nodes/geometry/RangeNode.js +5 -3
  349. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  350. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  351. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  352. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  353. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  354. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  355. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  356. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  357. package/src/nodes/lighting/LightsNode.js +7 -28
  358. package/src/nodes/lighting/PointShadowNode.js +162 -149
  359. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  360. package/src/nodes/lighting/ShadowNode.js +120 -42
  361. package/src/nodes/math/BitcastNode.js +1 -1
  362. package/src/nodes/math/BitcountNode.js +433 -0
  363. package/src/nodes/math/ConditionalNode.js +3 -3
  364. package/src/nodes/math/MathNode.js +76 -41
  365. package/src/nodes/math/OperatorNode.js +3 -2
  366. package/src/nodes/math/PackFloatNode.js +98 -0
  367. package/src/nodes/math/UnpackFloatNode.js +96 -0
  368. package/src/nodes/pmrem/PMREMNode.js +1 -1
  369. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  370. package/src/nodes/tsl/TSLBase.js +1 -1
  371. package/src/nodes/tsl/TSLCore.js +38 -17
  372. package/src/nodes/utils/ArrayElementNode.js +14 -1
  373. package/src/nodes/utils/ConvertNode.js +1 -1
  374. package/src/nodes/utils/DebugNode.js +12 -12
  375. package/src/nodes/utils/EventNode.js +31 -2
  376. package/src/nodes/utils/FlipNode.js +1 -1
  377. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  378. package/src/nodes/utils/JoinNode.js +3 -3
  379. package/src/nodes/utils/LoopNode.js +1 -1
  380. package/src/nodes/utils/MemberNode.js +2 -2
  381. package/src/nodes/utils/Packing.js +13 -1
  382. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  383. package/src/nodes/utils/RTTNode.js +1 -1
  384. package/src/nodes/utils/ReflectorNode.js +3 -4
  385. package/src/nodes/utils/Remap.js +48 -0
  386. package/src/nodes/utils/RotateNode.js +1 -1
  387. package/src/nodes/utils/SampleNode.js +1 -1
  388. package/src/nodes/utils/SetNode.js +1 -1
  389. package/src/nodes/utils/SplitNode.js +1 -1
  390. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  391. package/src/nodes/utils/UVUtils.js +28 -0
  392. package/src/objects/BatchedMesh.js +44 -16
  393. package/src/objects/InstancedMesh.js +30 -3
  394. package/src/objects/Line.js +1 -1
  395. package/src/objects/Mesh.js +1 -1
  396. package/src/objects/Points.js +1 -1
  397. package/src/objects/Skeleton.js +9 -0
  398. package/src/objects/SkinnedMesh.js +26 -9
  399. package/src/renderers/WebGLRenderer.js +329 -145
  400. package/src/renderers/common/Animation.js +3 -3
  401. package/src/renderers/common/Attributes.js +15 -1
  402. package/src/renderers/common/Backend.js +29 -8
  403. package/src/renderers/common/Background.js +26 -13
  404. package/src/renderers/common/BindGroup.js +1 -16
  405. package/src/renderers/common/Binding.js +11 -0
  406. package/src/renderers/common/Bindings.js +29 -14
  407. package/src/renderers/common/BlendMode.js +143 -0
  408. package/src/renderers/common/Buffer.js +40 -0
  409. package/src/renderers/common/BundleGroup.js +1 -1
  410. package/src/renderers/common/ChainMap.js +30 -6
  411. package/src/renderers/common/ComputePipeline.js +1 -1
  412. package/src/renderers/common/CubeRenderTarget.js +51 -7
  413. package/src/renderers/common/Geometries.js +29 -3
  414. package/src/renderers/common/Info.js +333 -4
  415. package/src/renderers/common/InspectorBase.js +6 -1
  416. package/src/renderers/common/Lighting.js +5 -21
  417. package/src/renderers/common/Pipelines.js +40 -7
  418. package/src/renderers/common/PostProcessing.js +8 -206
  419. package/src/renderers/common/ReadbackBuffer.js +78 -0
  420. package/src/renderers/common/RenderBundle.js +3 -1
  421. package/src/renderers/common/RenderBundles.js +7 -3
  422. package/src/renderers/common/RenderContext.js +16 -0
  423. package/src/renderers/common/RenderContexts.js +33 -49
  424. package/src/renderers/common/RenderLists.js +2 -1
  425. package/src/renderers/common/RenderObject.js +17 -5
  426. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  427. package/src/renderers/common/RenderObjects.js +21 -5
  428. package/src/renderers/common/RenderPipeline.js +232 -17
  429. package/src/renderers/common/Renderer.js +481 -117
  430. package/src/renderers/common/Sampler.js +4 -4
  431. package/src/renderers/common/StorageBuffer.js +13 -1
  432. package/src/renderers/common/Textures.js +89 -4
  433. package/src/renderers/common/TimestampQueryPool.js +5 -3
  434. package/src/renderers/common/Uniform.js +8 -0
  435. package/src/renderers/common/UniformsGroup.js +62 -1
  436. package/src/renderers/common/XRManager.js +37 -29
  437. package/src/renderers/common/extras/PMREMGenerator.js +25 -23
  438. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  439. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
  440. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  441. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  442. package/src/renderers/shaders/DFGLUTData.js +19 -34
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  444. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  445. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  446. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  447. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  448. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  449. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  450. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  451. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  452. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  453. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  454. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  455. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  456. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  457. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  458. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  459. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  461. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  462. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  463. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  464. package/src/renderers/shaders/ShaderChunk.js +5 -3
  465. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  466. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  467. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  468. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  469. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  470. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  472. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  473. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  474. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  475. package/src/renderers/shaders/ShaderLib.js +7 -6
  476. package/src/renderers/shaders/UniformsLib.js +7 -5
  477. package/src/renderers/shaders/UniformsUtils.js +27 -5
  478. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  479. package/src/renderers/webgl/WebGLBackground.js +15 -15
  480. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  481. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  482. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  483. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  484. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  485. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  486. package/src/renderers/webgl/WebGLLights.js +18 -1
  487. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  488. package/src/renderers/webgl/WebGLObjects.js +3 -1
  489. package/src/renderers/webgl/WebGLOutput.js +270 -0
  490. package/src/renderers/webgl/WebGLProgram.js +49 -109
  491. package/src/renderers/webgl/WebGLPrograms.js +63 -51
  492. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  493. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  494. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  495. package/src/renderers/webgl/WebGLState.js +75 -37
  496. package/src/renderers/webgl/WebGLTextures.js +215 -54
  497. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  498. package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
  499. package/src/renderers/webgl/WebGLUtils.js +6 -2
  500. package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
  501. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  504. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
  507. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  508. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  509. package/src/renderers/webgpu/WebGPUBackend.js +260 -140
  510. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  511. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
  512. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
  513. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  514. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  515. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  516. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  517. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
  519. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  520. package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
  521. package/src/renderers/webxr/WebXRController.js +12 -0
  522. package/src/renderers/webxr/WebXRManager.js +4 -2
  523. package/src/textures/CubeDepthTexture.js +76 -0
  524. package/src/textures/HTMLTexture.js +74 -0
  525. package/src/textures/Source.js +2 -2
  526. package/src/textures/Texture.js +16 -5
  527. package/src/utils.js +280 -3
  528. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  529. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  530. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  531. package/src/nodes/accessors/SceneNode.js +0 -145
  532. package/src/nodes/code/ScriptableNode.js +0 -726
  533. package/src/nodes/code/ScriptableValueNode.js +0 -253
  534. package/src/nodes/display/PosterizeNode.js +0 -65
  535. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  536. package/src/nodes/utils/RemapNode.js +0 -125
  537. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  538. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  539. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -1,726 +0,0 @@
1
- import Node from '../core/Node.js';
2
- import { scriptableValue } from './ScriptableValueNode.js';
3
- import { nodeProxy, float } from '../tsl/TSLBase.js';
4
- import { hashArray, hashString } from '../core/NodeUtils.js';
5
-
6
- /**
7
- * A Map-like data structure for managing resources of scriptable nodes.
8
- *
9
- * @augments Map
10
- */
11
- class Resources extends Map {
12
-
13
- get( key, callback = null, ...params ) {
14
-
15
- if ( this.has( key ) ) return super.get( key );
16
-
17
- if ( callback !== null ) {
18
-
19
- const value = callback( ...params );
20
- this.set( key, value );
21
- return value;
22
-
23
- }
24
-
25
- }
26
-
27
- }
28
-
29
- class Parameters {
30
-
31
- constructor( scriptableNode ) {
32
-
33
- this.scriptableNode = scriptableNode;
34
-
35
- }
36
-
37
- get parameters() {
38
-
39
- return this.scriptableNode.parameters;
40
-
41
- }
42
-
43
- get layout() {
44
-
45
- return this.scriptableNode.getLayout();
46
-
47
- }
48
-
49
- getInputLayout( id ) {
50
-
51
- return this.scriptableNode.getInputLayout( id );
52
-
53
- }
54
-
55
- get( name ) {
56
-
57
- const param = this.parameters[ name ];
58
- const value = param ? param.getValue() : null;
59
-
60
- return value;
61
-
62
- }
63
-
64
- }
65
-
66
- /**
67
- * Defines the resources (e.g. namespaces) of scriptable nodes.
68
- *
69
- * @type {Resources}
70
- */
71
- export const ScriptableNodeResources = new Resources();
72
-
73
- /**
74
- * This type of node allows to implement nodes with custom scripts. The script
75
- * section is represented as an instance of `CodeNode` written with JavaScript.
76
- * The script itself must adhere to a specific structure.
77
- *
78
- * - main(): Executed once by default and every time `node.needsUpdate` is set.
79
- * - layout: The layout object defines the script's interface (inputs and outputs).
80
- *
81
- * ```js
82
- * ScriptableNodeResources.set( 'TSL', TSL );
83
- *
84
- * const scriptableNode = scriptable( js( `
85
- * layout = {
86
- * outputType: 'node',
87
- * elements: [
88
- * { name: 'source', inputType: 'node' },
89
- * ]
90
- * };
91
- *
92
- * const { mul, oscSine } = TSL;
93
- *
94
- * function main() {
95
- * const source = parameters.get( 'source' ) || float();
96
- * return mul( source, oscSine() ) );
97
- * }
98
- *
99
- * ` ) );
100
- *
101
- * scriptableNode.setParameter( 'source', color( 1, 0, 0 ) );
102
- *
103
- * const material = new THREE.MeshBasicNodeMaterial();
104
- * material.colorNode = scriptableNode;
105
- * ```
106
- *
107
- * @augments Node
108
- */
109
- class ScriptableNode extends Node {
110
-
111
- static get type() {
112
-
113
- return 'ScriptableNode';
114
-
115
- }
116
-
117
- /**
118
- * Constructs a new scriptable node.
119
- *
120
- * @param {?CodeNode} [codeNode=null] - The code node.
121
- * @param {Object} [parameters={}] - The parameters definition.
122
- */
123
- constructor( codeNode = null, parameters = {} ) {
124
-
125
- super();
126
-
127
- /**
128
- * The code node.
129
- *
130
- * @type {?CodeNode}
131
- * @default null
132
- */
133
- this.codeNode = codeNode;
134
-
135
- /**
136
- * The parameters definition.
137
- *
138
- * @type {Object}
139
- * @default {}
140
- */
141
- this.parameters = parameters;
142
-
143
- this._local = new Resources();
144
- this._output = scriptableValue( null );
145
- this._outputs = {};
146
- this._source = this.source;
147
- this._method = null;
148
- this._object = null;
149
- this._value = null;
150
- this._needsOutputUpdate = true;
151
-
152
- this.onRefresh = this.onRefresh.bind( this );
153
-
154
- /**
155
- * This flag can be used for type testing.
156
- *
157
- * @type {boolean}
158
- * @readonly
159
- * @default true
160
- */
161
- this.isScriptableNode = true;
162
-
163
- }
164
-
165
- /**
166
- * The source code of the scriptable node.
167
- *
168
- * @type {string}
169
- */
170
- get source() {
171
-
172
- return this.codeNode ? this.codeNode.code : '';
173
-
174
- }
175
-
176
- /**
177
- * Sets the reference of a local script variable.
178
- *
179
- * @param {string} name - The variable name.
180
- * @param {Object} value - The reference to set.
181
- * @return {Resources} The resource map
182
- */
183
- setLocal( name, value ) {
184
-
185
- return this._local.set( name, value );
186
-
187
- }
188
-
189
- /**
190
- * Gets the value of a local script variable.
191
- *
192
- * @param {string} name - The variable name.
193
- * @return {Object} The value.
194
- */
195
- getLocal( name ) {
196
-
197
- return this._local.get( name );
198
-
199
- }
200
-
201
- /**
202
- * Event listener for the `refresh` event.
203
- */
204
- onRefresh() {
205
-
206
- this._refresh();
207
-
208
- }
209
-
210
- /**
211
- * Returns an input from the layout with the given id/name.
212
- *
213
- * @param {string} id - The id/name of the input.
214
- * @return {Object} The element entry.
215
- */
216
- getInputLayout( id ) {
217
-
218
- for ( const element of this.getLayout() ) {
219
-
220
- if ( element.inputType && ( element.id === id || element.name === id ) ) {
221
-
222
- return element;
223
-
224
- }
225
-
226
- }
227
-
228
- }
229
-
230
- /**
231
- * Returns an output from the layout with the given id/name.
232
- *
233
- * @param {string} id - The id/name of the output.
234
- * @return {Object} The element entry.
235
- */
236
- getOutputLayout( id ) {
237
-
238
- for ( const element of this.getLayout() ) {
239
-
240
- if ( element.outputType && ( element.id === id || element.name === id ) ) {
241
-
242
- return element;
243
-
244
- }
245
-
246
- }
247
-
248
- }
249
-
250
- /**
251
- * Defines a script output for the given name and value.
252
- *
253
- * @param {string} name - The name of the output.
254
- * @param {Node} value - The node value.
255
- * @return {ScriptableNode} A reference to this node.
256
- */
257
- setOutput( name, value ) {
258
-
259
- const outputs = this._outputs;
260
-
261
- if ( outputs[ name ] === undefined ) {
262
-
263
- outputs[ name ] = scriptableValue( value );
264
-
265
- } else {
266
-
267
- outputs[ name ].value = value;
268
-
269
- }
270
-
271
- return this;
272
-
273
- }
274
-
275
- /**
276
- * Returns a script output for the given name.
277
- *
278
- * @param {string} name - The name of the output.
279
- * @return {ScriptableValueNode} The node value.
280
- */
281
- getOutput( name ) {
282
-
283
- return this._outputs[ name ];
284
-
285
- }
286
-
287
- /**
288
- * Returns a parameter for the given name
289
- *
290
- * @param {string} name - The name of the parameter.
291
- * @return {ScriptableValueNode} The node value.
292
- */
293
- getParameter( name ) {
294
-
295
- return this.parameters[ name ];
296
-
297
- }
298
-
299
- /**
300
- * Sets a value for the given parameter name.
301
- *
302
- * @param {string} name - The parameter name.
303
- * @param {any} value - The parameter value.
304
- * @return {ScriptableNode} A reference to this node.
305
- */
306
- setParameter( name, value ) {
307
-
308
- const parameters = this.parameters;
309
-
310
- if ( value && value.isScriptableNode ) {
311
-
312
- this.deleteParameter( name );
313
-
314
- parameters[ name ] = value;
315
- parameters[ name ].getDefaultOutput().events.addEventListener( 'refresh', this.onRefresh );
316
-
317
- } else if ( value && value.isScriptableValueNode ) {
318
-
319
- this.deleteParameter( name );
320
-
321
- parameters[ name ] = value;
322
- parameters[ name ].events.addEventListener( 'refresh', this.onRefresh );
323
-
324
- } else if ( parameters[ name ] === undefined ) {
325
-
326
- parameters[ name ] = scriptableValue( value );
327
- parameters[ name ].events.addEventListener( 'refresh', this.onRefresh );
328
-
329
- } else {
330
-
331
- parameters[ name ].value = value;
332
-
333
- }
334
-
335
- return this;
336
-
337
- }
338
-
339
- /**
340
- * Returns the value of this node which is the value of
341
- * the default output.
342
- *
343
- * @return {Node} The value.
344
- */
345
- getValue() {
346
-
347
- return this.getDefaultOutput().getValue();
348
-
349
- }
350
-
351
- /**
352
- * Deletes a parameter from the script.
353
- *
354
- * @param {string} name - The parameter to remove.
355
- * @return {ScriptableNode} A reference to this node.
356
- */
357
- deleteParameter( name ) {
358
-
359
- let valueNode = this.parameters[ name ];
360
-
361
- if ( valueNode ) {
362
-
363
- if ( valueNode.isScriptableNode ) valueNode = valueNode.getDefaultOutput();
364
-
365
- valueNode.events.removeEventListener( 'refresh', this.onRefresh );
366
-
367
- }
368
-
369
- return this;
370
-
371
- }
372
-
373
- /**
374
- * Deletes all parameters from the script.
375
- *
376
- * @return {ScriptableNode} A reference to this node.
377
- */
378
- clearParameters() {
379
-
380
- for ( const name of Object.keys( this.parameters ) ) {
381
-
382
- this.deleteParameter( name );
383
-
384
- }
385
-
386
- this.needsUpdate = true;
387
-
388
- return this;
389
-
390
- }
391
-
392
- /**
393
- * Calls a function from the script.
394
- *
395
- * @param {string} name - The function name.
396
- * @param {...any} params - A list of parameters.
397
- * @return {any} The result of the function call.
398
- */
399
- call( name, ...params ) {
400
-
401
- const object = this.getObject();
402
- const method = object[ name ];
403
-
404
- if ( typeof method === 'function' ) {
405
-
406
- return method( ...params );
407
-
408
- }
409
-
410
- }
411
-
412
- /**
413
- * Asynchronously calls a function from the script.
414
- *
415
- * @param {string} name - The function name.
416
- * @param {...any} params - A list of parameters.
417
- * @return {Promise<any>} The result of the function call.
418
- */
419
- async callAsync( name, ...params ) {
420
-
421
- const object = this.getObject();
422
- const method = object[ name ];
423
-
424
- if ( typeof method === 'function' ) {
425
-
426
- return method.constructor.name === 'AsyncFunction' ? await method( ...params ) : method( ...params );
427
-
428
- }
429
-
430
- }
431
-
432
- /**
433
- * Overwritten since the node types is inferred from the script's output.
434
- *
435
- * @param {NodeBuilder} builder - The current node builder
436
- * @return {string} The node type.
437
- */
438
- getNodeType( builder ) {
439
-
440
- return this.getDefaultOutputNode().getNodeType( builder );
441
-
442
- }
443
-
444
- /**
445
- * Refreshes the script node.
446
- *
447
- * @param {?string} [output=null] - An optional output.
448
- */
449
- refresh( output = null ) {
450
-
451
- if ( output !== null ) {
452
-
453
- this.getOutput( output ).refresh();
454
-
455
- } else {
456
-
457
- this._refresh();
458
-
459
- }
460
-
461
- }
462
-
463
- /**
464
- * Returns an object representation of the script.
465
- *
466
- * @return {Object} The result object.
467
- */
468
- getObject() {
469
-
470
- if ( this.needsUpdate ) this.dispose();
471
- if ( this._object !== null ) return this._object;
472
-
473
- //
474
-
475
- const refresh = () => this.refresh();
476
- const setOutput = ( id, value ) => this.setOutput( id, value );
477
-
478
- const parameters = new Parameters( this );
479
-
480
- const THREE = ScriptableNodeResources.get( 'THREE' );
481
- const TSL = ScriptableNodeResources.get( 'TSL' );
482
-
483
- const method = this.getMethod();
484
- const params = [ parameters, this._local, ScriptableNodeResources, refresh, setOutput, THREE, TSL ];
485
-
486
- this._object = method( ...params );
487
-
488
- const layout = this._object.layout;
489
-
490
- if ( layout ) {
491
-
492
- if ( layout.cache === false ) {
493
-
494
- this._local.clear();
495
-
496
- }
497
-
498
- // default output
499
- this._output.outputType = layout.outputType || null;
500
-
501
- if ( Array.isArray( layout.elements ) ) {
502
-
503
- for ( const element of layout.elements ) {
504
-
505
- const id = element.id || element.name;
506
-
507
- if ( element.inputType ) {
508
-
509
- if ( this.getParameter( id ) === undefined ) this.setParameter( id, null );
510
-
511
- this.getParameter( id ).inputType = element.inputType;
512
-
513
- }
514
-
515
- if ( element.outputType ) {
516
-
517
- if ( this.getOutput( id ) === undefined ) this.setOutput( id, null );
518
-
519
- this.getOutput( id ).outputType = element.outputType;
520
-
521
- }
522
-
523
- }
524
-
525
- }
526
-
527
- }
528
-
529
- return this._object;
530
-
531
- }
532
-
533
- deserialize( data ) {
534
-
535
- super.deserialize( data );
536
-
537
- for ( const name in this.parameters ) {
538
-
539
- let valueNode = this.parameters[ name ];
540
-
541
- if ( valueNode.isScriptableNode ) valueNode = valueNode.getDefaultOutput();
542
-
543
- valueNode.events.addEventListener( 'refresh', this.onRefresh );
544
-
545
- }
546
-
547
- }
548
-
549
- /**
550
- * Returns the layout of the script.
551
- *
552
- * @return {Object} The script's layout.
553
- */
554
- getLayout() {
555
-
556
- return this.getObject().layout;
557
-
558
- }
559
-
560
- /**
561
- * Returns default node output of the script.
562
- *
563
- * @return {Node} The default node output.
564
- */
565
- getDefaultOutputNode() {
566
-
567
- const output = this.getDefaultOutput().value;
568
-
569
- if ( output && output.isNode ) {
570
-
571
- return output;
572
-
573
- }
574
-
575
- return float();
576
-
577
- }
578
-
579
- /**
580
- * Returns default output of the script.
581
- *
582
- * @return {ScriptableValueNode} The default output.
583
- */
584
- getDefaultOutput() {
585
-
586
- return this._exec()._output;
587
-
588
- }
589
-
590
- /**
591
- * Returns a function created from the node's script.
592
- *
593
- * @return {Function} The function representing the node's code.
594
- */
595
- getMethod() {
596
-
597
- if ( this.needsUpdate ) this.dispose();
598
- if ( this._method !== null ) return this._method;
599
-
600
- //
601
-
602
- const parametersProps = [ 'parameters', 'local', 'global', 'refresh', 'setOutput', 'THREE', 'TSL' ];
603
- const interfaceProps = [ 'layout', 'init', 'main', 'dispose' ];
604
-
605
- const properties = interfaceProps.join( ', ' );
606
- const declarations = 'var ' + properties + '; var output = {};\n';
607
- const returns = '\nreturn { ...output, ' + properties + ' };';
608
-
609
- const code = declarations + this.codeNode.code + returns;
610
-
611
- //
612
-
613
- this._method = new Function( ...parametersProps, code );
614
-
615
- return this._method;
616
-
617
- }
618
-
619
- /**
620
- * Frees all internal resources.
621
- */
622
- dispose() {
623
-
624
- if ( this._method === null ) return;
625
-
626
- if ( this._object && typeof this._object.dispose === 'function' ) {
627
-
628
- this._object.dispose();
629
-
630
- }
631
-
632
- this._method = null;
633
- this._object = null;
634
- this._source = null;
635
- this._value = null;
636
- this._needsOutputUpdate = true;
637
- this._output.value = null;
638
- this._outputs = {};
639
-
640
- }
641
-
642
- setup() {
643
-
644
- return this.getDefaultOutputNode();
645
-
646
- }
647
-
648
- getCacheKey( force ) {
649
-
650
- const values = [ hashString( this.source ), this.getDefaultOutputNode().getCacheKey( force ) ];
651
-
652
- for ( const param in this.parameters ) {
653
-
654
- values.push( this.parameters[ param ].getCacheKey( force ) );
655
-
656
- }
657
-
658
- return hashArray( values );
659
-
660
- }
661
-
662
- set needsUpdate( value ) {
663
-
664
- if ( value === true ) this.dispose();
665
-
666
- }
667
-
668
- get needsUpdate() {
669
-
670
- return this.source !== this._source;
671
-
672
- }
673
-
674
- /**
675
- * Executes the `main` function of the script.
676
- *
677
- * @private
678
- * @return {ScriptableNode} A reference to this node.
679
- */
680
- _exec() {
681
-
682
- if ( this.codeNode === null ) return this;
683
-
684
- if ( this._needsOutputUpdate === true ) {
685
-
686
- this._value = this.call( 'main' );
687
-
688
- this._needsOutputUpdate = false;
689
-
690
- }
691
-
692
- this._output.value = this._value;
693
-
694
- return this;
695
-
696
- }
697
-
698
- /**
699
- * Executes the refresh.
700
- *
701
- * @private
702
- */
703
- _refresh() {
704
-
705
- this.needsUpdate = true;
706
-
707
- this._exec();
708
-
709
- this._output.refresh();
710
-
711
- }
712
-
713
- }
714
-
715
- export default ScriptableNode;
716
-
717
- /**
718
- * TSL function for creating a scriptable node.
719
- *
720
- * @tsl
721
- * @function
722
- * @param {CodeNode} [codeNode] - The code node.
723
- * @param {?Object} [parameters={}] - The parameters definition.
724
- * @returns {ScriptableNode}
725
- */
726
- export const scriptable = /*@__PURE__*/ nodeProxy( ScriptableNode ).setParameterLength( 1, 2 );