super-three 0.181.0 → 0.185.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 (693) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +21332 -19201
  4. package/build/three.core.js +20908 -19853
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1947 -862
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +37 -16
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +33628 -25197
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +33394 -25000
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +14 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +13 -6
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +127 -86
  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 +102 -17
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMFrustum.js +31 -6
  26. package/examples/jsm/csm/CSMShadowNode.js +10 -3
  27. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  28. package/examples/jsm/effects/AsciiEffect.js +14 -1
  29. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  30. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  31. package/examples/jsm/exporters/DRACOExporter.js +27 -6
  32. package/examples/jsm/exporters/EXRExporter.js +1 -1
  33. package/examples/jsm/exporters/GLTFExporter.js +266 -21
  34. package/examples/jsm/exporters/PLYExporter.js +286 -73
  35. package/examples/jsm/exporters/USDZExporter.js +353 -99
  36. package/examples/jsm/generators/CityGenerator.js +346 -0
  37. package/examples/jsm/generators/ForestGenerator.js +347 -0
  38. package/examples/jsm/generators/TerrainGenerator.js +504 -0
  39. package/examples/jsm/generators/TreeGenerator.js +377 -0
  40. package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
  41. package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
  42. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  43. package/examples/jsm/geometries/LoftGeometry.js +355 -0
  44. package/examples/jsm/geometries/TextGeometry.js +18 -0
  45. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  46. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  47. package/examples/jsm/helpers/LightProbeHelper.js +5 -4
  48. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  49. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  50. package/examples/jsm/helpers/ViewHelper.js +83 -14
  51. package/examples/jsm/inspector/Extension.js +13 -0
  52. package/examples/jsm/inspector/Inspector.js +244 -91
  53. package/examples/jsm/inspector/RendererInspector.js +165 -39
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  55. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  56. package/examples/jsm/inspector/tabs/Console.js +241 -25
  57. package/examples/jsm/inspector/tabs/Memory.js +136 -0
  58. package/examples/jsm/inspector/tabs/Parameters.js +115 -7
  59. package/examples/jsm/inspector/tabs/Performance.js +24 -9
  60. package/examples/jsm/inspector/tabs/Settings.js +306 -0
  61. package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
  62. package/examples/jsm/inspector/tabs/Viewer.js +723 -9
  63. package/examples/jsm/inspector/ui/Graph.js +162 -25
  64. package/examples/jsm/inspector/ui/Item.js +92 -13
  65. package/examples/jsm/inspector/ui/List.js +2 -2
  66. package/examples/jsm/inspector/ui/Profiler.js +1991 -44
  67. package/examples/jsm/inspector/ui/Style.js +1943 -543
  68. package/examples/jsm/inspector/ui/Tab.js +226 -5
  69. package/examples/jsm/inspector/ui/Values.js +126 -8
  70. package/examples/jsm/inspector/ui/utils.js +143 -10
  71. package/examples/jsm/interaction/InteractionManager.js +226 -0
  72. package/examples/jsm/libs/basis/README.md +0 -1
  73. package/examples/jsm/libs/demuxer_mp4.js +3 -3
  74. package/examples/jsm/libs/draco/README.md +0 -1
  75. package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
  76. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  77. package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
  78. package/examples/jsm/libs/mikktspace.module.js +34 -9
  79. package/examples/jsm/lighting/ClusteredLighting.js +55 -0
  80. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  81. package/examples/jsm/lighting/LightProbeGrid.js +681 -0
  82. package/examples/jsm/lines/LineMaterial.js +45 -16
  83. package/examples/jsm/lines/LineSegments2.js +8 -0
  84. package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
  85. package/examples/jsm/loaders/3DMLoader.js +6 -5
  86. package/examples/jsm/loaders/3MFLoader.js +2 -2
  87. package/examples/jsm/loaders/AMFLoader.js +2 -2
  88. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  89. package/examples/jsm/loaders/DRACOLoader.js +51 -18
  90. package/examples/jsm/loaders/EXRLoader.js +701 -90
  91. package/examples/jsm/loaders/FBXLoader.js +235 -37
  92. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  93. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  94. package/examples/jsm/loaders/HDRLoader.js +7 -30
  95. package/examples/jsm/loaders/KMZLoader.js +5 -5
  96. package/examples/jsm/loaders/KTX2Loader.js +58 -17
  97. package/examples/jsm/loaders/LDrawLoader.js +49 -58
  98. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  99. package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
  100. package/examples/jsm/loaders/LWOLoader.js +11 -39
  101. package/examples/jsm/loaders/LottieLoader.js +1 -1
  102. package/examples/jsm/loaders/MaterialXLoader.js +31 -9
  103. package/examples/jsm/loaders/NRRDLoader.js +5 -5
  104. package/examples/jsm/loaders/PCDLoader.js +11 -9
  105. package/examples/jsm/loaders/PLYLoader.js +218 -55
  106. package/examples/jsm/loaders/SVGLoader.js +549 -497
  107. package/examples/jsm/loaders/TDSLoader.js +0 -2
  108. package/examples/jsm/loaders/TGALoader.js +0 -2
  109. package/examples/jsm/loaders/TTFLoader.js +1 -1
  110. package/examples/jsm/loaders/USDLoader.js +127 -43
  111. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  112. package/examples/jsm/loaders/VOXLoader.js +660 -117
  113. package/examples/jsm/loaders/VRMLLoader.js +80 -3
  114. package/examples/jsm/loaders/VTKLoader.js +42 -25
  115. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  116. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  117. package/examples/jsm/loaders/usd/USDAParser.js +504 -344
  118. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  119. package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
  120. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  121. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  122. package/examples/jsm/math/Octree.js +131 -1
  123. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  124. package/examples/jsm/misc/RollerCoaster.js +42 -4
  125. package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
  126. package/examples/jsm/misc/Volume.js +2 -3
  127. package/examples/jsm/misc/VolumeSlice.js +0 -1
  128. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  129. package/examples/jsm/objects/GroundedSkybox.js +1 -1
  130. package/examples/jsm/objects/LensflareMesh.js +1 -1
  131. package/examples/jsm/objects/Reflector.js +72 -25
  132. package/examples/jsm/objects/Sky.js +90 -6
  133. package/examples/jsm/objects/SkyMesh.js +150 -16
  134. package/examples/jsm/objects/Water.js +4 -3
  135. package/examples/jsm/objects/Water2.js +5 -3
  136. package/examples/jsm/objects/Water2Mesh.js +1 -1
  137. package/examples/jsm/objects/WaterMesh.js +5 -7
  138. package/examples/jsm/physics/AmmoPhysics.js +27 -15
  139. package/examples/jsm/physics/JoltPhysics.js +10 -6
  140. package/examples/jsm/physics/RapierPhysics.js +36 -7
  141. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  142. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  143. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  144. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  145. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  146. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  147. package/examples/jsm/renderers/Projector.js +246 -28
  148. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  149. package/examples/jsm/shaders/GTAOShader.js +19 -6
  150. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  151. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  152. package/examples/jsm/shaders/SAOShader.js +17 -4
  153. package/examples/jsm/shaders/SSAOShader.js +11 -1
  154. package/examples/jsm/shaders/SSRShader.js +6 -5
  155. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  156. package/examples/jsm/shaders/VignetteShader.js +1 -1
  157. package/examples/jsm/shaders/VolumeShader.js +31 -44
  158. package/examples/jsm/transpiler/AST.js +44 -0
  159. package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
  160. package/examples/jsm/transpiler/Linker.js +1 -1
  161. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  162. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  163. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  164. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  165. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  166. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  167. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  168. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  169. package/examples/jsm/tsl/display/BloomNode.js +75 -25
  170. package/examples/jsm/tsl/display/CRT.js +150 -0
  171. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  172. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  173. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  174. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  175. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  176. package/examples/jsm/tsl/display/FXAANode.js +13 -14
  177. package/examples/jsm/tsl/display/GTAONode.js +40 -17
  178. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  179. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  180. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
  181. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  182. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  183. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  184. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  185. package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
  186. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  187. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
  188. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  189. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  190. package/examples/jsm/tsl/display/SSAAPassNode.js +15 -27
  191. package/examples/jsm/tsl/display/SSGINode.js +96 -62
  192. package/examples/jsm/tsl/display/SSRNode.js +831 -134
  193. package/examples/jsm/tsl/display/SSSNode.js +8 -6
  194. package/examples/jsm/tsl/display/Shape.js +29 -0
  195. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  196. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  197. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  198. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  199. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  200. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  201. package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
  202. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  203. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  204. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  205. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
  206. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  207. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  208. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  209. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  210. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  211. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  212. package/examples/jsm/tsl/math/Bayer.js +53 -3
  213. package/examples/jsm/tsl/math/curlNoise.js +107 -0
  214. package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
  215. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
  216. package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
  217. package/examples/jsm/tsl/utils/RNoise.js +51 -0
  218. package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
  219. package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
  220. package/examples/jsm/utils/ColorUtils.js +76 -0
  221. package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
  222. package/examples/jsm/utils/LDrawUtils.js +1 -1
  223. package/examples/jsm/utils/SceneOptimizer.js +1 -1
  224. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  225. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  226. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  227. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  228. package/examples/jsm/webxr/ARButton.js +1 -1
  229. package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
  230. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
  231. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  232. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  233. package/package.json +28 -34
  234. package/src/Three.Core.js +3 -1
  235. package/src/Three.TSL.js +35 -14
  236. package/src/Three.WebGPU.Nodes.js +5 -0
  237. package/src/Three.WebGPU.js +13 -0
  238. package/src/Three.js +1 -0
  239. package/src/animation/AnimationAction.js +18 -4
  240. package/src/animation/AnimationClip.js +0 -139
  241. package/src/animation/AnimationMixer.js +6 -0
  242. package/src/animation/AnimationUtils.js +1 -12
  243. package/src/animation/KeyframeTrack.js +47 -8
  244. package/src/animation/PropertyBinding.js +2 -2
  245. package/src/animation/PropertyMixer.js +4 -4
  246. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  247. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  248. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  249. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  250. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  251. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  252. package/src/audio/Audio.js +1 -1
  253. package/src/audio/AudioContext.js +2 -2
  254. package/src/audio/AudioListener.js +5 -3
  255. package/src/cameras/Camera.js +34 -4
  256. package/src/cameras/CubeCamera.js +20 -0
  257. package/src/cameras/StereoCamera.js +5 -2
  258. package/src/constants.js +90 -5
  259. package/src/core/BufferAttribute.js +13 -1
  260. package/src/core/BufferGeometry.js +43 -9
  261. package/src/core/Clock.js +7 -0
  262. package/src/core/Object3D.js +69 -11
  263. package/src/core/Raycaster.js +3 -3
  264. package/src/core/RenderTarget.js +19 -6
  265. package/src/extras/PMREMGenerator.js +13 -22
  266. package/src/extras/TextureUtils.js +6 -2
  267. package/src/extras/core/ShapePath.js +149 -160
  268. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  269. package/src/geometries/ExtrudeGeometry.js +2 -2
  270. package/src/geometries/PolyhedronGeometry.js +1 -1
  271. package/src/geometries/SphereGeometry.js +8 -3
  272. package/src/geometries/TorusGeometry.js +8 -3
  273. package/src/helpers/CameraHelper.js +3 -0
  274. package/src/helpers/DirectionalLightHelper.js +6 -1
  275. package/src/helpers/HemisphereLightHelper.js +5 -0
  276. package/src/helpers/PointLightHelper.js +3 -25
  277. package/src/helpers/SpotLightHelper.js +4 -1
  278. package/src/lights/DirectionalLight.js +13 -0
  279. package/src/lights/HemisphereLight.js +10 -0
  280. package/src/lights/Light.js +1 -11
  281. package/src/lights/LightProbe.js +0 -15
  282. package/src/lights/LightShadow.js +15 -6
  283. package/src/lights/PointLight.js +15 -0
  284. package/src/lights/PointLightShadow.js +0 -86
  285. package/src/lights/SpotLight.js +22 -1
  286. package/src/lights/webgpu/IESSpotLight.js +2 -1
  287. package/src/loaders/AudioLoader.js +11 -1
  288. package/src/loaders/Cache.js +28 -0
  289. package/src/loaders/DataTextureLoader.js +75 -42
  290. package/src/loaders/FileLoader.js +2 -3
  291. package/src/loaders/ImageBitmapLoader.js +12 -9
  292. package/src/loaders/Loader.js +6 -0
  293. package/src/loaders/LoadingManager.js +5 -0
  294. package/src/loaders/MaterialLoader.js +37 -266
  295. package/src/loaders/ObjectLoader.js +48 -6
  296. package/src/loaders/nodes/NodeLoader.js +2 -2
  297. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  298. package/src/materials/LineBasicMaterial.js +4 -0
  299. package/src/materials/Material.js +198 -1
  300. package/src/materials/MeshBasicMaterial.js +24 -0
  301. package/src/materials/MeshDepthMaterial.js +10 -0
  302. package/src/materials/MeshDistanceMaterial.js +10 -0
  303. package/src/materials/MeshLambertMaterial.js +49 -1
  304. package/src/materials/MeshMatcapMaterial.js +25 -1
  305. package/src/materials/MeshNormalMaterial.js +9 -1
  306. package/src/materials/MeshPhongMaterial.js +49 -1
  307. package/src/materials/MeshPhysicalMaterial.js +38 -0
  308. package/src/materials/MeshStandardMaterial.js +42 -1
  309. package/src/materials/MeshToonMaterial.js +35 -2
  310. package/src/materials/PointsMaterial.js +7 -0
  311. package/src/materials/ShaderMaterial.js +106 -1
  312. package/src/materials/SpriteMaterial.js +7 -0
  313. package/src/materials/nodes/Line2NodeMaterial.js +380 -297
  314. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  315. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  316. package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
  317. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
  318. package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
  319. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
  320. package/src/materials/nodes/NodeMaterial.js +153 -89
  321. package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
  322. package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
  323. package/src/math/Box3.js +5 -0
  324. package/src/math/FrustumArray.js +103 -133
  325. package/src/math/Interpolant.js +1 -1
  326. package/src/math/Line3.js +6 -5
  327. package/src/math/MathUtils.js +12 -12
  328. package/src/math/Matrix2.js +13 -9
  329. package/src/math/Matrix3.js +24 -9
  330. package/src/math/Matrix4.js +112 -74
  331. package/src/math/Plane.js +4 -3
  332. package/src/math/Quaternion.js +3 -29
  333. package/src/math/Sphere.js +1 -1
  334. package/src/math/Triangle.js +1 -1
  335. package/src/math/Vector2.js +13 -9
  336. package/src/math/Vector3.js +17 -15
  337. package/src/math/Vector4.js +15 -11
  338. package/src/math/interpolants/BezierInterpolant.js +106 -0
  339. package/src/nodes/Nodes.js +86 -71
  340. package/src/nodes/TSL.js +15 -13
  341. package/src/nodes/accessors/Arrays.js +5 -5
  342. package/src/nodes/accessors/Batch.js +108 -0
  343. package/src/nodes/accessors/Bitangent.js +7 -7
  344. package/src/nodes/accessors/BufferAttributeNode.js +120 -17
  345. package/src/nodes/accessors/BufferNode.js +29 -2
  346. package/src/nodes/accessors/Camera.js +149 -28
  347. package/src/nodes/accessors/ClippingNode.js +5 -5
  348. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  349. package/src/nodes/accessors/Instance.js +264 -0
  350. package/src/nodes/accessors/MaterialNode.js +27 -3
  351. package/src/nodes/accessors/MaterialProperties.js +6 -8
  352. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  353. package/src/nodes/accessors/ModelNode.js +1 -1
  354. package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
  355. package/src/nodes/accessors/Normal.js +24 -24
  356. package/src/nodes/accessors/Object3DNode.js +1 -1
  357. package/src/nodes/accessors/Position.js +39 -3
  358. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  359. package/src/nodes/accessors/ReferenceNode.js +9 -8
  360. package/src/nodes/accessors/ReflectVector.js +3 -3
  361. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  362. package/src/nodes/accessors/SceneProperties.js +47 -0
  363. package/src/nodes/accessors/Skinning.js +263 -0
  364. package/src/nodes/accessors/StorageBufferNode.js +16 -27
  365. package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
  366. package/src/nodes/accessors/StorageTextureNode.js +74 -11
  367. package/src/nodes/accessors/Tangent.js +8 -18
  368. package/src/nodes/accessors/Texture3DNode.js +32 -35
  369. package/src/nodes/accessors/TextureNode.js +124 -25
  370. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  371. package/src/nodes/accessors/UserDataNode.js +1 -2
  372. package/src/nodes/accessors/VertexColorNode.js +1 -2
  373. package/src/nodes/code/FunctionCallNode.js +1 -1
  374. package/src/nodes/code/FunctionNode.js +4 -19
  375. package/src/nodes/core/ArrayNode.js +21 -2
  376. package/src/nodes/core/AssignNode.js +3 -3
  377. package/src/nodes/core/AttributeNode.js +3 -3
  378. package/src/nodes/core/BypassNode.js +1 -1
  379. package/src/nodes/core/ContextNode.js +104 -5
  380. package/src/nodes/core/IndexNode.js +2 -1
  381. package/src/nodes/core/InputNode.js +1 -1
  382. package/src/nodes/core/InspectorNode.js +1 -1
  383. package/src/nodes/core/IsolateNode.js +1 -1
  384. package/src/nodes/core/MRTNode.js +55 -4
  385. package/src/nodes/core/Node.js +151 -17
  386. package/src/nodes/core/NodeBuilder.js +479 -101
  387. package/src/nodes/core/NodeError.js +28 -0
  388. package/src/nodes/core/NodeFrame.js +12 -4
  389. package/src/nodes/core/NodeUtils.js +20 -18
  390. package/src/nodes/core/OutputStructNode.js +13 -11
  391. package/src/nodes/core/OverrideContextNode.js +153 -0
  392. package/src/nodes/core/ParameterNode.js +4 -4
  393. package/src/nodes/core/PropertyNode.js +66 -4
  394. package/src/nodes/core/StackNode.js +91 -20
  395. package/src/nodes/core/StackTrace.js +139 -0
  396. package/src/nodes/core/StructNode.js +20 -8
  397. package/src/nodes/core/StructTypeNode.js +17 -23
  398. package/src/nodes/core/SubBuildNode.js +2 -2
  399. package/src/nodes/core/UniformGroupNode.js +36 -6
  400. package/src/nodes/core/UniformNode.js +21 -5
  401. package/src/nodes/core/VarNode.js +56 -23
  402. package/src/nodes/core/VaryingNode.js +14 -21
  403. package/src/nodes/display/BlendModes.js +1 -105
  404. package/src/nodes/display/BumpMapNode.js +6 -1
  405. package/src/nodes/display/ColorAdjustment.js +27 -9
  406. package/src/nodes/display/ColorSpaceNode.js +3 -3
  407. package/src/nodes/display/FrontFacingNode.js +38 -9
  408. package/src/nodes/display/NormalMapNode.js +41 -6
  409. package/src/nodes/display/PassNode.js +157 -56
  410. package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
  411. package/src/nodes/display/RenderOutputNode.js +19 -10
  412. package/src/nodes/display/ScreenNode.js +4 -2
  413. package/src/nodes/display/ToneMappingNode.js +1 -1
  414. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  415. package/src/nodes/display/ViewportDepthNode.js +52 -4
  416. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  417. package/src/nodes/display/ViewportTextureNode.js +39 -11
  418. package/src/nodes/fog/Fog.js +18 -35
  419. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  420. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  421. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  422. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  423. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  424. package/src/nodes/functions/VolumetricLightingModel.js +40 -7
  425. package/src/nodes/geometry/RangeNode.js +5 -3
  426. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  427. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  428. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  429. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  430. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  431. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
  432. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  433. package/src/nodes/lighting/EnvironmentNode.js +30 -5
  434. package/src/nodes/lighting/IESSpotLightNode.js +40 -2
  435. package/src/nodes/lighting/LightingContextNode.js +10 -2
  436. package/src/nodes/lighting/LightsNode.js +97 -65
  437. package/src/nodes/lighting/PointShadowNode.js +166 -148
  438. package/src/nodes/lighting/ShadowFilterNode.js +74 -117
  439. package/src/nodes/lighting/ShadowNode.js +149 -51
  440. package/src/nodes/materialx/lib/mx_noise.js +2 -2
  441. package/src/nodes/math/BitcastNode.js +1 -1
  442. package/src/nodes/math/BitcountNode.js +433 -0
  443. package/src/nodes/math/ConditionalNode.js +6 -6
  444. package/src/nodes/math/MathNode.js +115 -52
  445. package/src/nodes/math/OperatorNode.js +24 -23
  446. package/src/nodes/math/PackFloatNode.js +98 -0
  447. package/src/nodes/math/UnpackFloatNode.js +96 -0
  448. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  449. package/src/nodes/pmrem/PMREMNode.js +34 -3
  450. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  451. package/src/nodes/tsl/TSLBase.js +1 -1
  452. package/src/nodes/tsl/TSLCore.js +99 -33
  453. package/src/nodes/utils/ArrayElementNode.js +14 -1
  454. package/src/nodes/utils/ConvertNode.js +1 -1
  455. package/src/nodes/utils/DebugNode.js +12 -12
  456. package/src/nodes/utils/EquirectUV.js +30 -5
  457. package/src/nodes/utils/EventNode.js +31 -2
  458. package/src/nodes/utils/FlipNode.js +1 -1
  459. package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
  460. package/src/nodes/utils/JoinNode.js +3 -3
  461. package/src/nodes/utils/LoopNode.js +1 -1
  462. package/src/nodes/utils/MemberNode.js +2 -2
  463. package/src/nodes/utils/Packing.js +48 -5
  464. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  465. package/src/nodes/utils/RTTNode.js +41 -25
  466. package/src/nodes/utils/ReflectorNode.js +4 -4
  467. package/src/nodes/utils/Remap.js +48 -0
  468. package/src/nodes/utils/RotateNode.js +1 -1
  469. package/src/nodes/utils/SampleNode.js +1 -1
  470. package/src/nodes/utils/SetNode.js +1 -1
  471. package/src/nodes/utils/SplitNode.js +1 -1
  472. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  473. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  474. package/src/nodes/utils/UVUtils.js +28 -0
  475. package/src/objects/BatchedMesh.js +66 -30
  476. package/src/objects/InstancedMesh.js +19 -3
  477. package/src/objects/Line.js +1 -1
  478. package/src/objects/Mesh.js +1 -1
  479. package/src/objects/Points.js +1 -1
  480. package/src/objects/SkinnedMesh.js +26 -9
  481. package/src/renderers/WebGLRenderer.js +344 -156
  482. package/src/renderers/common/Animation.js +3 -3
  483. package/src/renderers/common/Attributes.js +15 -1
  484. package/src/renderers/common/Backend.js +78 -13
  485. package/src/renderers/common/Background.js +26 -13
  486. package/src/renderers/common/BindGroup.js +1 -16
  487. package/src/renderers/common/Binding.js +11 -0
  488. package/src/renderers/common/Bindings.js +141 -57
  489. package/src/renderers/common/BlendMode.js +143 -0
  490. package/src/renderers/common/Buffer.js +49 -0
  491. package/src/renderers/common/BundleGroup.js +1 -1
  492. package/src/renderers/common/ChainMap.js +30 -6
  493. package/src/renderers/common/ClippingContext.js +10 -2
  494. package/src/renderers/common/ComputePipeline.js +1 -1
  495. package/src/renderers/common/CubeRenderTarget.js +51 -7
  496. package/src/renderers/common/Geometries.js +29 -3
  497. package/src/renderers/common/Info.js +374 -4
  498. package/src/renderers/common/InspectorBase.js +6 -1
  499. package/src/renderers/common/Lighting.js +51 -19
  500. package/src/renderers/common/Pipelines.js +40 -7
  501. package/src/renderers/common/PostProcessing.js +8 -206
  502. package/src/renderers/common/ReadbackBuffer.js +78 -0
  503. package/src/renderers/common/RenderBundle.js +3 -1
  504. package/src/renderers/common/RenderBundles.js +7 -3
  505. package/src/renderers/common/RenderContext.js +16 -0
  506. package/src/renderers/common/RenderContexts.js +33 -49
  507. package/src/renderers/common/RenderList.js +41 -4
  508. package/src/renderers/common/RenderLists.js +2 -1
  509. package/src/renderers/common/RenderObject.js +88 -16
  510. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  511. package/src/renderers/common/RenderObjects.js +21 -5
  512. package/src/renderers/common/RenderPipeline.js +232 -17
  513. package/src/renderers/common/Renderer.js +700 -163
  514. package/src/renderers/common/Sampler.js +16 -48
  515. package/src/renderers/common/StorageBuffer.js +13 -1
  516. package/src/renderers/common/Textures.js +121 -9
  517. package/src/renderers/common/TimestampQueryPool.js +6 -4
  518. package/src/renderers/common/Uniform.js +8 -0
  519. package/src/renderers/common/UniformsGroup.js +84 -1
  520. package/src/renderers/common/XRManager.js +377 -51
  521. package/src/renderers/common/extras/PMREMGenerator.js +40 -61
  522. package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
  523. package/src/renderers/common/nodes/NodeLibrary.js +4 -4
  524. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
  525. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  526. package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
  527. package/src/renderers/shaders/DFGLUTData.js +19 -34
  528. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  529. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  530. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  531. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  532. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  533. package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
  534. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
  535. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  536. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
  537. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
  538. package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
  539. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  540. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  541. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  542. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  543. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +3 -1
  544. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  545. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  546. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
  547. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  548. package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
  549. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  550. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  551. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  552. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  553. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  554. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
  555. package/src/renderers/shaders/ShaderChunk.js +5 -3
  556. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  557. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  558. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
  559. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  560. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  561. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  562. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  563. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  564. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  565. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  566. package/src/renderers/shaders/ShaderLib.js +7 -6
  567. package/src/renderers/shaders/UniformsLib.js +7 -5
  568. package/src/renderers/shaders/UniformsUtils.js +27 -5
  569. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  570. package/src/renderers/webgl/WebGLBackground.js +15 -15
  571. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  572. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  573. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  574. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  575. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  576. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  577. package/src/renderers/webgl/WebGLLights.js +18 -1
  578. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  579. package/src/renderers/webgl/WebGLObjects.js +3 -1
  580. package/src/renderers/webgl/WebGLOutput.js +271 -0
  581. package/src/renderers/webgl/WebGLProgram.js +54 -113
  582. package/src/renderers/webgl/WebGLPrograms.js +74 -55
  583. package/src/renderers/webgl/WebGLRenderLists.js +24 -1
  584. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  585. package/src/renderers/webgl/WebGLShaderCache.js +5 -11
  586. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  587. package/src/renderers/webgl/WebGLState.js +75 -37
  588. package/src/renderers/webgl/WebGLTextures.js +230 -56
  589. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  590. package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
  591. package/src/renderers/webgl/WebGLUtils.js +6 -2
  592. package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
  593. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  594. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
  595. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  596. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  597. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  598. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
  599. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  600. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
  601. package/src/renderers/webgpu/WebGPUBackend.js +733 -302
  602. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  603. package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
  604. package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
  605. package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
  606. package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
  607. package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
  608. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
  609. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
  610. package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
  611. package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
  612. package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
  613. package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
  614. package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
  615. package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
  616. package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
  617. package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
  618. package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
  619. package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
  620. package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
  621. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
  622. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
  623. package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
  624. package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
  625. package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
  626. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
  627. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
  628. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
  629. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
  630. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
  631. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  632. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  633. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
  634. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
  635. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
  636. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
  637. package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
  638. package/src/renderers/webxr/WebXRController.js +12 -0
  639. package/src/renderers/webxr/WebXRManager.js +4 -2
  640. package/src/textures/CubeDepthTexture.js +76 -0
  641. package/src/textures/DepthTexture.js +1 -1
  642. package/src/textures/ExternalTexture.js +0 -3
  643. package/src/textures/HTMLTexture.js +74 -0
  644. package/src/textures/Source.js +2 -2
  645. package/src/textures/Texture.js +16 -5
  646. package/src/utils.js +280 -3
  647. package/examples/fonts/LICENSE +0 -13
  648. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  649. package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
  650. package/examples/fonts/README.md +0 -11
  651. package/examples/fonts/droid/NOTICE +0 -190
  652. package/examples/fonts/droid/README.txt +0 -18
  653. package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
  654. package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
  655. package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
  656. package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
  657. package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
  658. package/examples/fonts/gentilis_bold.typeface.json +0 -1
  659. package/examples/fonts/gentilis_regular.typeface.json +0 -1
  660. package/examples/fonts/helvetiker_bold.typeface.json +0 -1
  661. package/examples/fonts/helvetiker_regular.typeface.json +0 -1
  662. package/examples/fonts/optimer_bold.typeface.json +0 -1
  663. package/examples/fonts/optimer_regular.typeface.json +0 -1
  664. package/examples/fonts/ttf/README.md +0 -9
  665. package/examples/fonts/ttf/kenpixel.ttf +0 -0
  666. package/examples/jsm/libs/ammo.wasm.js +0 -822
  667. package/examples/jsm/libs/ammo.wasm.wasm +0 -0
  668. package/examples/jsm/libs/draco/draco_encoder.js +0 -33
  669. package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
  670. package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
  671. package/examples/jsm/libs/opentype.module.js +0 -14506
  672. package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
  673. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
  674. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  675. package/examples/jsm/lighting/TiledLighting.js +0 -42
  676. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  677. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  678. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  679. package/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
  680. package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
  681. package/src/nodes/accessors/BatchNode.js +0 -163
  682. package/src/nodes/accessors/InstanceNode.js +0 -244
  683. package/src/nodes/accessors/InstancedMeshNode.js +0 -50
  684. package/src/nodes/accessors/SceneNode.js +0 -145
  685. package/src/nodes/accessors/SkinningNode.js +0 -327
  686. package/src/nodes/code/ScriptableNode.js +0 -726
  687. package/src/nodes/code/ScriptableValueNode.js +0 -253
  688. package/src/nodes/display/PosterizeNode.js +0 -65
  689. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  690. package/src/nodes/utils/RemapNode.js +0 -125
  691. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  692. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  693. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -312,30 +312,24 @@ const hammersley = /*@__PURE__*/ Fn( ( [ i, N ] ) => {
312
312
  // GGX VNDF importance sampling (Eric Heitz 2018)
313
313
  // "Sampling the GGX Distribution of Visible Normals"
314
314
  // https://jcgt.org/published/0007/04/01/
315
- const importanceSampleGGX_VNDF = /*@__PURE__*/ Fn( ( [ Xi, V_immutable, roughness_immutable ] ) => {
315
+ const importanceSampleGGX_VNDF = /*@__PURE__*/ Fn( ( [ Xi, V, roughness ] ) => {
316
316
 
317
- const V = vec3( V_immutable ).toVar();
318
- const roughness = float( roughness_immutable );
319
- const alpha = roughness.mul( roughness ).toVar();
320
-
321
- // Section 3.2: Transform view direction to hemisphere configuration
322
- const Vh = normalize( vec3( alpha.mul( V.x ), alpha.mul( V.y ), V.z ) ).toVar();
317
+ const alpha = roughness.mul( roughness ).toConst();
323
318
 
324
319
  // Section 4.1: Orthonormal basis
325
- const lensq = Vh.x.mul( Vh.x ).add( Vh.y.mul( Vh.y ) );
326
- const T1 = select( lensq.greaterThan( 0.0 ), vec3( Vh.y.negate(), Vh.x, 0.0 ).div( sqrt( lensq ) ), vec3( 1.0, 0.0, 0.0 ) ).toVar();
327
- const T2 = cross( Vh, T1 ).toVar();
320
+ const T1 = vec3( 1.0, 0.0, 0.0 ).toConst();
321
+ const T2 = cross( V, T1 ).toConst();
328
322
 
329
323
  // Section 4.2: Parameterization of projected area
330
- const r = sqrt( Xi.x );
331
- const phi = mul( 2.0, 3.14159265359 ).mul( Xi.y );
332
- const t1 = r.mul( cos( phi ) ).toVar();
324
+ const r = sqrt( Xi.x ).toConst();
325
+ const phi = mul( 2.0, 3.14159265359 ).mul( Xi.y ).toConst();
326
+ const t1 = r.mul( cos( phi ) ).toConst();
333
327
  const t2 = r.mul( sin( phi ) ).toVar();
334
- const s = mul( 0.5, Vh.z.add( 1.0 ) );
328
+ const s = mul( 0.5, V.z.add( 1.0 ) ).toConst();
335
329
  t2.assign( s.oneMinus().mul( sqrt( t1.mul( t1 ).oneMinus() ) ).add( s.mul( t2 ) ) );
336
330
 
337
331
  // Section 4.3: Reprojection onto hemisphere
338
- const Nh = T1.mul( t1 ).add( T2.mul( t2 ) ).add( Vh.mul( sqrt( max( 0.0, t1.mul( t1 ).add( t2.mul( t2 ) ).oneMinus() ) ) ) );
332
+ const Nh = T1.mul( t1 ).add( T2.mul( t2 ) ).add( V.mul( sqrt( max( 0.0, t1.mul( t1 ).add( t2.mul( t2 ) ).oneMinus() ) ) ) );
339
333
 
340
334
  // Section 3.4: Transform back to ellipsoid configuration
341
335
  return normalize( vec3( alpha.mul( Nh.x ), alpha.mul( Nh.y ), max( 0.0, Nh.z ) ) );
@@ -21,7 +21,7 @@ export * from '../accessors/BufferAttributeNode.js'; // .toAttribute()
21
21
  export * from '../gpgpu/ComputeNode.js'; // .compute()
22
22
  export * from '../core/IsolateNode.js'; // .isolate()
23
23
  export * from '../core/BypassNode.js'; // .bypass()
24
- export * from '../utils/RemapNode.js'; // .remap(), .remapClamp()
24
+ export * from '../utils/Remap.js'; // .remap(), .remapClamp()
25
25
  export * from '../code/ExpressionNode.js'; // expression()
26
26
  export * from '../utils/Discard.js'; // Discard(), Return()
27
27
  export * from '../display/RenderOutputNode.js'; // .renderOutput()
@@ -7,6 +7,7 @@ import SetNode from '../utils/SetNode.js';
7
7
  import FlipNode from '../utils/FlipNode.js';
8
8
  import ConstNode from '../core/ConstNode.js';
9
9
  import MemberNode from '../utils/MemberNode.js';
10
+ import StackTrace from '../core/StackTrace.js';
10
11
  import { getValueFromType, getValueType } from '../core/NodeUtils.js';
11
12
  import { warn, error } from '../../utils.js';
12
13
 
@@ -18,6 +19,8 @@ const NodeElements = new Map();
18
19
 
19
20
  export function addMethodChaining( name, nodeElement ) {
20
21
 
22
+ // No require StackTrace because this is internal API
23
+
21
24
  if ( NodeElements.has( name ) ) {
22
25
 
23
26
  warn( `TSL: Redefinition of method chaining '${ name }'.` );
@@ -66,7 +69,7 @@ Node.prototype.assign = function ( ...params ) {
66
69
 
67
70
  } else {
68
71
 
69
- error( 'TSL: No stack defined for assign operation. Make sure the assign is inside a Fn().' );
72
+ error( 'TSL: No stack defined for assign operation. Make sure the assign is inside a Fn().', new StackTrace() );
70
73
 
71
74
  }
72
75
 
@@ -288,8 +291,6 @@ Object.defineProperties( Node.prototype, proto );
288
291
 
289
292
  // --- FINISH ---
290
293
 
291
- const nodeBuilderFunctionsCacheMap = new WeakMap();
292
-
293
294
  const ShaderNodeObject = function ( obj, altType = null ) {
294
295
 
295
296
  const type = getValueType( obj );
@@ -374,13 +375,13 @@ const ShaderNodeProxy = function ( NodeClass, scope = null, factor = null, setti
374
375
 
375
376
  if ( minParams !== undefined && params.length < minParams ) {
376
377
 
377
- error( `TSL: "${ tslName }" parameter length is less than minimum required.` );
378
+ error( `TSL: "${ tslName }" parameter length is less than minimum required.`, new StackTrace() );
378
379
 
379
380
  return params.concat( new Array( minParams - params.length ).fill( 0 ) );
380
381
 
381
382
  } else if ( maxParams !== undefined && params.length > maxParams ) {
382
383
 
383
- error( `TSL: "${ tslName }" parameter length exceeds limit.` );
384
+ error( `TSL: "${ tslName }" parameter length exceeds limit.`, new StackTrace() );
384
385
 
385
386
  return params.slice( 0, maxParams );
386
387
 
@@ -441,7 +442,7 @@ const ShaderNodeProxy = function ( NodeClass, scope = null, factor = null, setti
441
442
 
442
443
  const ShaderNodeImmutable = function ( NodeClass, ...params ) {
443
444
 
444
- return nodeObject( new NodeClass( ...nodeArray( params ) ) );
445
+ return new NodeClass( ...nodeArray( params ) );
445
446
 
446
447
  };
447
448
 
@@ -458,7 +459,7 @@ class ShaderCallNodeInternal extends Node {
458
459
 
459
460
  }
460
461
 
461
- getNodeType( builder ) {
462
+ generateNodeType( builder ) {
462
463
 
463
464
  return this.shaderNode.nodeType || this.getOutputNode( builder ).getNodeType( builder );
464
465
 
@@ -503,33 +504,59 @@ class ShaderCallNodeInternal extends Node {
503
504
 
504
505
  if ( shaderNode.layout ) {
505
506
 
506
- let functionNodesCacheMap = nodeBuilderFunctionsCacheMap.get( builder.constructor );
507
+ // build inputs first
507
508
 
508
- if ( functionNodesCacheMap === undefined ) {
509
+ if ( rawInputs ) {
509
510
 
510
- functionNodesCacheMap = new WeakMap();
511
+ // use layout inputs to ensure that no extra parameters are built
511
512
 
512
- nodeBuilderFunctionsCacheMap.set( builder.constructor, functionNodesCacheMap );
513
+ const inputs = shaderNode.layout.inputs;
513
514
 
514
- }
515
+ if ( isArrayAsParameter( rawInputs ) ) {
516
+
517
+ const rawArrayParameters = rawInputs;
518
+
519
+ for ( let i = 0; i < inputs.length; i ++ ) {
520
+
521
+ const rawParameter = rawArrayParameters[ i ];
522
+
523
+ if ( rawParameter && rawParameter.isNode ) {
524
+
525
+ rawParameter.build( builder );
526
+
527
+ }
528
+
529
+ }
530
+
531
+ } else {
515
532
 
516
- let functionNode = functionNodesCacheMap.get( shaderNode );
533
+ const rawObjectParameters = rawInputs[ 0 ];
517
534
 
518
- if ( functionNode === undefined ) {
535
+ for ( const param of inputs ) {
519
536
 
520
- functionNode = nodeObject( builder.buildFunctionNode( shaderNode ) );
537
+ const rawParameter = rawObjectParameters[ param.name ];
521
538
 
522
- functionNodesCacheMap.set( shaderNode, functionNode );
539
+ if ( rawParameter && rawParameter.isNode ) {
540
+
541
+ rawParameter.build( builder );
542
+
543
+ }
544
+
545
+ }
546
+
547
+ }
523
548
 
524
549
  }
525
550
 
551
+ const functionNode = builder.buildFunctionNode( shaderNode );
552
+
526
553
  builder.addInclude( functionNode );
527
554
 
528
555
  //
529
556
 
530
557
  const inputs = rawInputs ? getLayoutParameters( rawInputs ) : null;
531
558
 
532
- result = nodeObject( functionNode.call( inputs ) );
559
+ result = functionNode.call( inputs );
533
560
 
534
561
  } else {
535
562
 
@@ -676,15 +703,19 @@ class ShaderCallNodeInternal extends Node {
676
703
 
677
704
  }
678
705
 
706
+ function isArrayAsParameter( params ) {
707
+
708
+ return params[ 0 ] && ( params[ 0 ].isNode || Object.getPrototypeOf( params[ 0 ] ) !== Object.prototype );
709
+
710
+ }
711
+
679
712
  function getLayoutParameters( params ) {
680
713
 
681
714
  let output;
682
715
 
683
716
  nodeObjects( params );
684
717
 
685
- const isArrayAsParameter = params[ 0 ] && ( params[ 0 ].isNode || Object.getPrototypeOf( params[ 0 ] ) !== Object.prototype );
686
-
687
- if ( isArrayAsParameter ) {
718
+ if ( isArrayAsParameter( params ) ) {
688
719
 
689
720
  output = [ ...params ];
690
721
 
@@ -871,9 +902,9 @@ const ConvertType = function ( type, cacheMap = null ) {
871
902
 
872
903
  if ( param === undefined ) {
873
904
 
874
- error( `TSL: Invalid parameter for the type "${ type }".` );
905
+ error( `TSL: Invalid parameter for the type "${ type }".`, new StackTrace() );
875
906
 
876
- return nodeObject( new ConstNode( 0, type ) );
907
+ return new ConstNode( 0, type );
877
908
 
878
909
  }
879
910
 
@@ -914,7 +945,25 @@ const ConvertType = function ( type, cacheMap = null ) {
914
945
 
915
946
  // exports
916
947
 
917
- export const defined = ( v ) => typeof v === 'object' && v !== null ? v.value : v; // TODO: remove boolean conversion and defined function
948
+ export function defined( value ) {
949
+
950
+ if ( value && value.isNode ) {
951
+
952
+ value.traverse( ( node ) => {
953
+
954
+ if ( node.isConstNode ) {
955
+
956
+ value = node.value;
957
+
958
+ }
959
+
960
+ } );
961
+
962
+ }
963
+
964
+ return Boolean( value );
965
+
966
+ }
918
967
 
919
968
  // utils
920
969
 
@@ -936,6 +985,26 @@ export const nodeProxy = ( NodeClass, scope = null, factor = null, settings = nu
936
985
  export const nodeImmutable = ( NodeClass, ...params ) => new ShaderNodeImmutable( NodeClass, ...params );
937
986
  export const nodeProxyIntent = ( NodeClass, scope = null, factor = null, settings = {} ) => new ShaderNodeProxy( NodeClass, scope, factor, { ...settings, intent: true } );
938
987
 
988
+ export const nodeProxyConstructor = ( constructorFunction, nodeInstance ) => {
989
+
990
+ return new Proxy( constructorFunction, {
991
+
992
+ get( target, prop, receiver ) {
993
+
994
+ return Reflect.get( nodeInstance, prop, receiver );
995
+
996
+ },
997
+
998
+ set( target, prop, value ) {
999
+
1000
+ return Reflect.set( nodeInstance, prop, value );
1001
+
1002
+ }
1003
+
1004
+ } );
1005
+
1006
+ };
1007
+
939
1008
  let fnId = 0;
940
1009
 
941
1010
  class FnNode extends Node {
@@ -960,7 +1029,7 @@ class FnNode extends Node {
960
1029
 
961
1030
  } else {
962
1031
 
963
- error( 'TSL: Invalid layout type.' );
1032
+ error( 'TSL: Invalid layout type.', new StackTrace() );
964
1033
 
965
1034
  }
966
1035
 
@@ -1015,7 +1084,7 @@ class FnNode extends Node {
1015
1084
 
1016
1085
  }
1017
1086
 
1018
- getNodeType( builder ) {
1087
+ generateNodeType( builder ) {
1019
1088
 
1020
1089
  return this.shaderNode.getNodeType( builder ) || 'float';
1021
1090
 
@@ -1044,7 +1113,7 @@ class FnNode extends Node {
1044
1113
 
1045
1114
  const type = this.getNodeType( builder );
1046
1115
 
1047
- error( 'TSL: "Fn()" was declared but not invoked. Try calling it like "Fn()( ...params )".' );
1116
+ error( 'TSL: "Fn()" was declared but not invoked. Try calling it like "Fn()( ...params )".', this.stackTrace );
1048
1117
 
1049
1118
  return builder.generateConst( type );
1050
1119
 
@@ -1171,9 +1240,6 @@ export const mat2 = new ConvertType( 'mat2' );
1171
1240
  export const mat3 = new ConvertType( 'mat3' );
1172
1241
  export const mat4 = new ConvertType( 'mat4' );
1173
1242
 
1174
- export const string = ( value = '' ) => nodeObject( new ConstNode( value, 'string' ) );
1175
- export const arrayBuffer = ( value ) => nodeObject( new ConstNode( value, 'ArrayBuffer' ) );
1176
-
1177
1243
  addMethodChaining( 'toColor', color );
1178
1244
  addMethodChaining( 'toFloat', float );
1179
1245
  addMethodChaining( 'toInt', int );
@@ -1198,8 +1264,8 @@ addMethodChaining( 'toMat4', mat4 );
1198
1264
  // basic nodes
1199
1265
 
1200
1266
  export const element = /*@__PURE__*/ nodeProxy( ArrayElementNode ).setParameterLength( 2 );
1201
- export const convert = ( node, types ) => nodeObject( new ConvertNode( nodeObject( node ), types ) );
1202
- export const split = ( node, channels ) => nodeObject( new SplitNode( nodeObject( node ), channels ) );
1267
+ export const convert = ( node, types ) => new ConvertNode( nodeObject( node ), types );
1268
+ export const split = ( node, channels ) => new SplitNode( nodeObject( node ), channels );
1203
1269
 
1204
1270
  addMethodChaining( 'element', element );
1205
1271
  addMethodChaining( 'convert', convert );
@@ -1216,14 +1282,14 @@ addMethodChaining( 'convert', convert );
1216
1282
  */
1217
1283
  export const append = ( node ) => { // @deprecated, r176
1218
1284
 
1219
- warn( 'TSL: append() has been renamed to Stack().' );
1285
+ warn( 'TSL: append() has been renamed to Stack().', new StackTrace() );
1220
1286
  return Stack( node );
1221
1287
 
1222
1288
  };
1223
1289
 
1224
1290
  addMethodChaining( 'append', ( node ) => { // @deprecated, r176
1225
1291
 
1226
- warn( 'TSL: .append() has been renamed to .toStack().' );
1292
+ warn( 'TSL: .append() has been renamed to .toStack().', new StackTrace() );
1227
1293
  return Stack( node );
1228
1294
 
1229
1295
  } );
@@ -55,12 +55,25 @@ class ArrayElementNode extends Node { // @TODO: If extending from TempNode it br
55
55
  * @param {NodeBuilder} builder - The current node builder.
56
56
  * @return {string} The node type.
57
57
  */
58
- getNodeType( builder ) {
58
+ generateNodeType( builder ) {
59
59
 
60
60
  return this.node.getElementType( builder );
61
61
 
62
62
  }
63
63
 
64
+ /**
65
+ * This method is overwritten since the member type is inferred from the array-like node.
66
+ *
67
+ * @param {NodeBuilder} builder - The current node builder.
68
+ * @param {string} name - The member name.
69
+ * @return {string} The member type.
70
+ */
71
+ getMemberType( builder, name ) {
72
+
73
+ return this.node.getMemberType( builder, name );
74
+
75
+ }
76
+
64
77
  generate( builder ) {
65
78
 
66
79
  const indexType = this.indexNode.getNodeType( builder );
@@ -48,7 +48,7 @@ class ConvertNode extends Node {
48
48
  * @param {NodeBuilder} builder - The current node builder.
49
49
  * @return {string} The node type.
50
50
  */
51
- getNodeType( builder ) {
51
+ generateNodeType( builder ) {
52
52
 
53
53
  const requestType = this.node.getNodeType( builder );
54
54
 
@@ -19,7 +19,7 @@ class DebugNode extends TempNode {
19
19
 
20
20
  }
21
21
 
22
- getNodeType( builder ) {
22
+ generateNodeType( builder ) {
23
23
 
24
24
  return this.node.getNodeType( builder );
25
25
 
@@ -42,21 +42,21 @@ class DebugNode extends TempNode {
42
42
  const callback = this.callback;
43
43
  const snippet = this.node.build( builder );
44
44
 
45
- const title = '--- TSL debug - ' + builder.shaderStage + ' shader ---';
46
- const border = '-'.repeat( title.length );
47
-
48
- let code = '';
49
- code += '// #' + title + '#\n';
50
- code += builder.flow.code.replace( /^\t/mg, '' ) + '\n';
51
- code += '/* ... */ ' + snippet + ' /* ... */\n';
52
- code += '// #' + border + '#\n';
53
-
54
45
  if ( callback !== null ) {
55
46
 
56
- callback( builder, code );
47
+ callback( builder, snippet );
57
48
 
58
49
  } else {
59
50
 
51
+ const title = '--- TSL debug - ' + builder.shaderStage + ' shader ---';
52
+ const border = '-'.repeat( title.length );
53
+
54
+ let code = '';
55
+ code += '// #' + title + '#\n';
56
+ code += builder.flow.code.replace( /^\t/mg, '' ) + '\n';
57
+ code += '/* ... */ ' + snippet + ' /* ... */\n';
58
+ code += '// #' + border + '#\n';
59
+
60
60
  log( code );
61
61
 
62
62
  }
@@ -78,6 +78,6 @@ export default DebugNode;
78
78
  * @param {?Function} [callback=null] - Optional callback function to handle the debug output.
79
79
  * @returns {DebugNode}
80
80
  */
81
- export const debug = ( node, callback = null ) => nodeObject( new DebugNode( nodeObject( node ), callback ) ).toStack();
81
+ export const debug = ( node, callback = null ) => new DebugNode( nodeObject( node ), callback ).toStack();
82
82
 
83
83
  addMethodChaining( 'debug', debug );
@@ -1,5 +1,6 @@
1
1
  import { positionWorldDirection } from '../accessors/Position.js';
2
- import { Fn, vec2 } from '../tsl/TSLBase.js';
2
+ import { uv as UV } from '../accessors/UV.js';
3
+ import { Fn, vec2, vec3 } from '../tsl/TSLCore.js';
3
4
 
4
5
  /**
5
6
  * TSL function for creating an equirect uv node.
@@ -14,14 +15,38 @@ import { Fn, vec2 } from '../tsl/TSLBase.js';
14
15
  *
15
16
  * @tsl
16
17
  * @function
17
- * @param {?Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
18
+ * @param {?Node<vec3>} [direction=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
18
19
  * @returns {Node<vec2>}
19
20
  */
20
- export const equirectUV = /*@__PURE__*/ Fn( ( [ dir = positionWorldDirection ] ) => {
21
+ export const equirectUV = /*@__PURE__*/ Fn( ( [ direction = positionWorldDirection ] ) => {
21
22
 
22
- const u = dir.z.atan( dir.x ).mul( 1 / ( Math.PI * 2 ) ).add( 0.5 );
23
- const v = dir.y.clamp( - 1.0, 1.0 ).asin().mul( 1 / Math.PI ).add( 0.5 );
23
+ const u = direction.z.atan( direction.x ).mul( 1 / ( Math.PI * 2 ) ).add( 0.5 );
24
+ const v = direction.y.clamp( - 1.0, 1.0 ).asin().mul( 1 / Math.PI ).add( 0.5 );
24
25
 
25
26
  return vec2( u, v );
26
27
 
27
28
  } );
29
+
30
+ /**
31
+ * TSL function for creating an equirect direction node.
32
+ *
33
+ * Can be used to compute a direction vector from the given equirectangular
34
+ * UV coordinates.
35
+ *
36
+ * @tsl
37
+ * @function
38
+ * @param {?Node<vec2>} [uv=UV()] - The equirectangular UV coordinates.
39
+ * @returns {Node<vec3>} The computed direction vector.
40
+ */
41
+ export const equirectDirection = /*@__PURE__*/ Fn( ( [ uv = UV() ] ) => {
42
+
43
+ const theta = uv.x.sub( 0.5 ).mul( Math.PI * 2 );
44
+ const phi = uv.y.sub( 0.5 ).mul( Math.PI );
45
+ const cosPhi = phi.cos();
46
+ const x = cosPhi.mul( theta.cos() );
47
+ const y = phi.sin();
48
+ const z = cosPhi.mul( theta.sin() );
49
+
50
+ return vec3( x, y, z );
51
+
52
+ } );
@@ -1,6 +1,5 @@
1
1
  import Node from '../core/Node.js';
2
2
  import { NodeUpdateType } from '../core/constants.js';
3
- import { nodeObject } from '../tsl/TSLCore.js';
4
3
 
5
4
  /**
6
5
  * EventNode is a node that executes a callback during specific update phases.
@@ -36,6 +35,10 @@ class EventNode extends Node {
36
35
 
37
36
  this.updateType = NodeUpdateType.RENDER;
38
37
 
38
+ } else if ( eventType === EventNode.FRAME ) {
39
+
40
+ this.updateType = NodeUpdateType.FRAME;
41
+
39
42
  } else if ( eventType === EventNode.BEFORE_OBJECT ) {
40
43
 
41
44
  this.updateBeforeType = NodeUpdateType.OBJECT;
@@ -44,6 +47,10 @@ class EventNode extends Node {
44
47
 
45
48
  this.updateBeforeType = NodeUpdateType.RENDER;
46
49
 
50
+ } else if ( eventType === EventNode.BEFORE_FRAME ) {
51
+
52
+ this.updateBeforeType = NodeUpdateType.FRAME;
53
+
47
54
  }
48
55
 
49
56
  }
@@ -64,8 +71,10 @@ class EventNode extends Node {
64
71
 
65
72
  EventNode.OBJECT = 'object';
66
73
  EventNode.MATERIAL = 'material';
74
+ EventNode.FRAME = 'frame';
67
75
  EventNode.BEFORE_OBJECT = 'beforeObject';
68
76
  EventNode.BEFORE_MATERIAL = 'beforeMaterial';
77
+ EventNode.BEFORE_FRAME = 'beforeFrame';
69
78
 
70
79
  export default EventNode;
71
80
 
@@ -76,7 +85,7 @@ export default EventNode;
76
85
  * @param {Function} callback - The callback function.
77
86
  * @returns {EventNode}
78
87
  */
79
- const createEvent = ( type, callback ) => nodeObject( new EventNode( type, callback ) ).toStack();
88
+ const createEvent = ( type, callback ) => new EventNode( type, callback ).toStack();
80
89
 
81
90
  /**
82
91
  * Creates an event that triggers a function every time an object (Mesh|Sprite) is rendered.
@@ -98,6 +107,16 @@ export const OnObjectUpdate = ( callback ) => createEvent( EventNode.OBJECT, cal
98
107
  */
99
108
  export const OnMaterialUpdate = ( callback ) => createEvent( EventNode.MATERIAL, callback );
100
109
 
110
+ /**
111
+ * Creates an event that triggers a function every frame.
112
+ *
113
+ * The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.
114
+ *
115
+ * @param {Function} callback - The callback function.
116
+ * @returns {EventNode}
117
+ */
118
+ export const OnFrameUpdate = ( callback ) => createEvent( EventNode.FRAME, callback );
119
+
101
120
  /**
102
121
  * Creates an event that triggers a function before an object (Mesh|Sprite) is updated.
103
122
  *
@@ -117,3 +136,13 @@ export const OnBeforeObjectUpdate = ( callback ) => createEvent( EventNode.BEFOR
117
136
  * @returns {EventNode}
118
137
  */
119
138
  export const OnBeforeMaterialUpdate = ( callback ) => createEvent( EventNode.BEFORE_MATERIAL, callback );
139
+
140
+ /**
141
+ * Creates an event that triggers a function before every frame.
142
+ *
143
+ * The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.
144
+ *
145
+ * @param {Function} callback - The callback function.
146
+ * @returns {EventNode}
147
+ */
148
+ export const OnBeforeFrameUpdate = ( callback ) => createEvent( EventNode.BEFORE_FRAME, callback );
@@ -56,7 +56,7 @@ class FlipNode extends TempNode {
56
56
  * @param {NodeBuilder} builder - The current node builder.
57
57
  * @return {string} The node type.
58
58
  */
59
- getNodeType( builder ) {
59
+ generateNodeType( builder ) {
60
60
 
61
61
  return this.sourceNode.getNodeType( builder );
62
62
 
@@ -65,7 +65,7 @@ class FunctionOverloadingNode extends Node {
65
65
  * @param {NodeBuilder} builder - The current node builder.
66
66
  * @return {string} The node type.
67
67
  */
68
- getNodeType( builder ) {
68
+ generateNodeType( builder ) {
69
69
 
70
70
  const candidateFn = this.getCandidateFn( builder );
71
71
 
@@ -97,7 +97,7 @@ class FunctionOverloadingNode extends Node {
97
97
 
98
98
  if ( layout === null ) {
99
99
 
100
- throw new Error( 'FunctionOverloadingNode: FunctionNode must be a layout.' );
100
+ throw new Error( 'THREE.FunctionOverloadingNode: FunctionNode must be a layout.' );
101
101
 
102
102
  }
103
103
 
@@ -42,7 +42,7 @@ class JoinNode extends TempNode {
42
42
  * @param {NodeBuilder} builder - The current node builder.
43
43
  * @return {string} The node type.
44
44
  */
45
- getNodeType( builder ) {
45
+ generateNodeType( builder ) {
46
46
 
47
47
  if ( this.nodeType !== null ) {
48
48
 
@@ -71,7 +71,7 @@ class JoinNode extends TempNode {
71
71
 
72
72
  if ( length >= maxLength ) {
73
73
 
74
- error( `TSL: Length of parameters exceeds maximum length of function '${ type }()' type.` );
74
+ error( `TSL: Length of parameters exceeds maximum length of function '${ type }()' type.`, this.stackTrace );
75
75
  break;
76
76
 
77
77
  }
@@ -82,7 +82,7 @@ class JoinNode extends TempNode {
82
82
 
83
83
  if ( length + inputTypeLength > maxLength ) {
84
84
 
85
- error( `TSL: Length of '${ type }()' data exceeds maximum length of output type.` );
85
+ error( `TSL: Length of '${ type }()' data exceeds maximum length of output type.`, this.stackTrace );
86
86
 
87
87
  inputTypeLength = maxLength - length;
88
88
  inputType = builder.getTypeFromLength( inputTypeLength );
@@ -265,7 +265,7 @@ class LoopNode extends Node {
265
265
 
266
266
  } else {
267
267
 
268
- error( 'TSL: \'Loop( { update: ... } )\' is not a function, string or number.' );
268
+ error( 'TSL: \'Loop( { update: ... } )\' is not a function, string or number.', this.stackTrace );
269
269
 
270
270
  updateSnippet = 'break /* invalid update */';
271
271
 
@@ -66,7 +66,7 @@ class MemberNode extends Node {
66
66
 
67
67
  }
68
68
 
69
- getNodeType( builder ) {
69
+ generateNodeType( builder ) {
70
70
 
71
71
  if ( this.hasMember( builder ) === false ) {
72
72
 
@@ -101,7 +101,7 @@ class MemberNode extends Node {
101
101
 
102
102
  if ( this.hasMember( builder ) === false ) {
103
103
 
104
- warn( `TSL: Member "${ this.property }" does not exist in struct.` );
104
+ warn( `TSL: Member "${ this.property }" does not exist in struct.`, this.stackTrace );
105
105
 
106
106
  const type = this.getNodeType( builder );
107
107