super-three 0.177.0 → 0.181.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (501) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +1994 -749
  3. package/build/three.core.js +1358 -506
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +631 -247
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +113 -33
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +9571 -3424
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +9397 -3426
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  14. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  15. package/examples/jsm/Addons.js +2 -3
  16. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  17. package/examples/jsm/capabilities/WebGL.js +0 -27
  18. package/examples/jsm/capabilities/WebGPU.js +1 -1
  19. package/examples/jsm/controls/ArcballControls.js +9 -9
  20. package/examples/jsm/controls/DragControls.js +7 -57
  21. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  22. package/examples/jsm/controls/FlyControls.js +1 -1
  23. package/examples/jsm/controls/OrbitControls.js +2 -2
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +1 -1
  26. package/examples/jsm/controls/TransformControls.js +62 -15
  27. package/examples/jsm/csm/CSMShadowNode.js +4 -4
  28. package/examples/jsm/effects/AsciiEffect.js +8 -8
  29. package/examples/jsm/environments/RoomEnvironment.js +8 -3
  30. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  31. package/examples/jsm/exporters/EXRExporter.js +1 -1
  32. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  33. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  34. package/examples/jsm/exporters/PLYExporter.js +1 -1
  35. package/examples/jsm/exporters/USDZExporter.js +683 -299
  36. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  37. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  38. package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
  39. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  40. package/examples/jsm/geometries/TextGeometry.js +3 -2
  41. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  42. package/examples/jsm/helpers/ViewHelper.js +43 -5
  43. package/examples/jsm/inspector/Inspector.js +427 -0
  44. package/examples/jsm/inspector/RendererInspector.js +415 -0
  45. package/examples/jsm/inspector/tabs/Console.js +204 -0
  46. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  47. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  48. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  49. package/examples/jsm/inspector/ui/Graph.js +95 -0
  50. package/examples/jsm/inspector/ui/Item.js +170 -0
  51. package/examples/jsm/inspector/ui/List.js +75 -0
  52. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  53. package/examples/jsm/inspector/ui/Style.js +654 -0
  54. package/examples/jsm/inspector/ui/Tab.js +46 -0
  55. package/examples/jsm/inspector/ui/Values.js +423 -0
  56. package/examples/jsm/inspector/ui/utils.js +56 -0
  57. package/examples/jsm/interactive/HTMLMesh.js +11 -13
  58. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  59. package/examples/jsm/interactive/SelectionBox.js +30 -0
  60. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  61. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  62. package/examples/jsm/lights/LightProbeGenerator.js +14 -3
  63. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  64. package/examples/jsm/lines/Line2.js +3 -3
  65. package/examples/jsm/lines/LineGeometry.js +1 -1
  66. package/examples/jsm/lines/LineSegments2.js +2 -2
  67. package/examples/jsm/lines/Wireframe.js +2 -2
  68. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  69. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  70. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  71. package/examples/jsm/loaders/3MFLoader.js +1 -1
  72. package/examples/jsm/loaders/ColladaLoader.js +4 -4
  73. package/examples/jsm/loaders/DDSLoader.js +1 -1
  74. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  75. package/examples/jsm/loaders/EXRLoader.js +210 -22
  76. package/examples/jsm/loaders/FBXLoader.js +4 -4
  77. package/examples/jsm/loaders/FontLoader.js +23 -5
  78. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  79. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  80. package/examples/jsm/loaders/HDRLoader.js +486 -0
  81. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  82. package/examples/jsm/loaders/KTXLoader.js +2 -2
  83. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  84. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  85. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  86. package/examples/jsm/loaders/LWOLoader.js +2 -2
  87. package/examples/jsm/loaders/MaterialXLoader.js +233 -34
  88. package/examples/jsm/loaders/OBJLoader.js +1 -1
  89. package/examples/jsm/loaders/PDBLoader.js +1 -1
  90. package/examples/jsm/loaders/RGBELoader.js +7 -473
  91. package/examples/jsm/loaders/SVGLoader.js +2 -2
  92. package/examples/jsm/loaders/TTFLoader.js +13 -1
  93. package/examples/jsm/loaders/USDLoader.js +219 -0
  94. package/examples/jsm/loaders/USDZLoader.js +4 -892
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  96. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  97. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  98. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  99. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  100. package/examples/jsm/math/ColorSpaces.js +19 -1
  101. package/examples/jsm/math/ConvexHull.js +3 -3
  102. package/examples/jsm/math/ImprovedNoise.js +1 -1
  103. package/examples/jsm/math/Lut.js +2 -2
  104. package/examples/jsm/math/SimplexNoise.js +1 -1
  105. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  106. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  107. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  108. package/examples/jsm/misc/TubePainter.js +383 -40
  109. package/examples/jsm/misc/Volume.js +1 -1
  110. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  111. package/examples/jsm/objects/LensflareMesh.js +3 -3
  112. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  113. package/examples/jsm/objects/Sky.js +1 -1
  114. package/examples/jsm/objects/SkyMesh.js +3 -3
  115. package/examples/jsm/objects/Water.js +3 -3
  116. package/examples/jsm/objects/WaterMesh.js +6 -6
  117. package/examples/jsm/physics/RapierPhysics.js +95 -16
  118. package/examples/jsm/postprocessing/GTAOPass.js +10 -9
  119. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  120. package/examples/jsm/postprocessing/OutlinePass.js +17 -17
  121. package/examples/jsm/postprocessing/SSAOPass.js +10 -9
  122. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  123. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  124. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  125. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  126. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  127. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  128. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  129. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  130. package/examples/jsm/shaders/BokehShader.js +1 -1
  131. package/examples/jsm/shaders/BokehShader2.js +1 -1
  132. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  133. package/examples/jsm/shaders/FocusShader.js +1 -1
  134. package/examples/jsm/shaders/GTAOShader.js +2 -2
  135. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  136. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  137. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  138. package/examples/jsm/shaders/SSRShader.js +1 -1
  139. package/examples/jsm/shaders/SepiaShader.js +1 -1
  140. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  141. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  142. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
  143. package/examples/jsm/shaders/VignetteShader.js +1 -1
  144. package/examples/jsm/transpiler/AST.js +381 -30
  145. package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
  146. package/examples/jsm/transpiler/Linker.js +327 -0
  147. package/examples/jsm/transpiler/TSLEncoder.js +196 -92
  148. package/examples/jsm/transpiler/Transpiler.js +17 -1
  149. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  150. package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  151. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  152. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  153. package/examples/jsm/tsl/display/BloomNode.js +11 -6
  154. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  155. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  156. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  157. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  158. package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
  159. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  160. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  161. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  162. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  163. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  164. package/examples/jsm/tsl/display/TRAANode.js +578 -0
  165. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  166. package/examples/jsm/tsl/display/hashBlur.js +18 -20
  167. package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
  168. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  169. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  170. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  171. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  172. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  173. package/package.json +5 -10
  174. package/src/Three.Core.js +5 -2
  175. package/src/Three.TSL.js +112 -32
  176. package/src/Three.WebGPU.Nodes.js +2 -0
  177. package/src/Three.WebGPU.js +4 -0
  178. package/src/animation/AnimationClip.js +20 -4
  179. package/src/animation/AnimationMixer.js +3 -3
  180. package/src/animation/AnimationObjectGroup.js +2 -1
  181. package/src/animation/KeyframeTrack.js +8 -7
  182. package/src/animation/PropertyBinding.js +12 -11
  183. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  184. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  185. package/src/audio/Audio.js +10 -9
  186. package/src/audio/PositionalAudio.js +1 -1
  187. package/src/cameras/Camera.js +14 -0
  188. package/src/cameras/OrthographicCamera.js +2 -2
  189. package/src/cameras/PerspectiveCamera.js +2 -2
  190. package/src/cameras/StereoCamera.js +2 -2
  191. package/src/constants.js +13 -5
  192. package/src/core/BufferAttribute.js +3 -3
  193. package/src/core/BufferGeometry.js +10 -10
  194. package/src/core/Clock.js +2 -8
  195. package/src/core/EventDispatcher.js +1 -1
  196. package/src/core/GLBufferAttribute.js +13 -1
  197. package/src/core/InterleavedBuffer.js +1 -1
  198. package/src/core/InterleavedBufferAttribute.js +3 -2
  199. package/src/core/Object3D.js +4 -3
  200. package/src/core/Raycaster.js +2 -1
  201. package/src/core/RenderTarget.js +10 -1
  202. package/{examples/jsm/misc → src/core}/Timer.js +4 -42
  203. package/src/extras/Controls.js +5 -4
  204. package/src/extras/DataUtils.js +2 -1
  205. package/src/extras/Earcut.js +6 -0
  206. package/src/extras/ImageUtils.js +2 -2
  207. package/src/extras/PMREMGenerator.js +279 -55
  208. package/src/extras/TextureUtils.js +2 -1
  209. package/src/extras/core/Curve.js +2 -1
  210. package/src/extras/core/Interpolations.js +7 -1
  211. package/src/extras/core/Path.js +22 -22
  212. package/src/extras/core/ShapePath.js +4 -4
  213. package/src/extras/lib/earcut.js +8 -8
  214. package/src/geometries/BoxGeometry.js +1 -0
  215. package/src/geometries/CapsuleGeometry.js +1 -0
  216. package/src/geometries/CircleGeometry.js +1 -0
  217. package/src/geometries/ConeGeometry.js +1 -0
  218. package/src/geometries/CylinderGeometry.js +1 -0
  219. package/src/geometries/DodecahedronGeometry.js +1 -0
  220. package/src/geometries/ExtrudeGeometry.js +8 -6
  221. package/src/geometries/IcosahedronGeometry.js +1 -0
  222. package/src/geometries/LatheGeometry.js +1 -0
  223. package/src/geometries/OctahedronGeometry.js +1 -0
  224. package/src/geometries/PlaneGeometry.js +1 -0
  225. package/src/geometries/RingGeometry.js +1 -0
  226. package/src/geometries/ShapeGeometry.js +1 -0
  227. package/src/geometries/SphereGeometry.js +1 -0
  228. package/src/geometries/TetrahedronGeometry.js +1 -0
  229. package/src/geometries/TorusGeometry.js +1 -0
  230. package/src/geometries/TorusKnotGeometry.js +1 -0
  231. package/src/geometries/TubeGeometry.js +1 -0
  232. package/src/helpers/CameraHelper.js +42 -12
  233. package/src/helpers/SkeletonHelper.js +35 -6
  234. package/src/lights/LightShadow.js +21 -8
  235. package/src/lights/PointLightShadow.js +1 -1
  236. package/src/lights/webgpu/ProjectorLight.js +1 -1
  237. package/src/loaders/AnimationLoader.js +2 -1
  238. package/src/loaders/AudioLoader.js +2 -1
  239. package/src/loaders/BufferGeometryLoader.js +2 -2
  240. package/src/loaders/Cache.js +2 -2
  241. package/src/loaders/DataTextureLoader.js +1 -1
  242. package/src/loaders/FileLoader.js +29 -5
  243. package/src/loaders/ImageBitmapLoader.js +32 -8
  244. package/src/loaders/ImageLoader.js +56 -9
  245. package/src/loaders/Loader.js +17 -3
  246. package/src/loaders/LoadingManager.js +45 -0
  247. package/src/loaders/MaterialLoader.js +3 -2
  248. package/src/loaders/ObjectLoader.js +13 -13
  249. package/src/loaders/TextureLoader.js +1 -1
  250. package/src/loaders/nodes/NodeLoader.js +3 -2
  251. package/src/materials/Material.js +16 -3
  252. package/src/materials/MeshBasicMaterial.js +2 -1
  253. package/src/materials/MeshDepthMaterial.js +1 -0
  254. package/src/materials/MeshDistanceMaterial.js +1 -1
  255. package/src/materials/MeshLambertMaterial.js +2 -1
  256. package/src/materials/MeshMatcapMaterial.js +22 -0
  257. package/src/materials/MeshNormalMaterial.js +1 -0
  258. package/src/materials/MeshPhongMaterial.js +2 -1
  259. package/src/materials/MeshPhysicalMaterial.js +2 -1
  260. package/src/materials/MeshStandardMaterial.js +8 -7
  261. package/src/materials/MeshToonMaterial.js +1 -0
  262. package/src/materials/PointsMaterial.js +1 -1
  263. package/src/materials/ShaderMaterial.js +2 -2
  264. package/src/materials/nodes/Line2NodeMaterial.js +2 -10
  265. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  266. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  267. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  268. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  269. package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
  270. package/src/materials/nodes/NodeMaterial.js +90 -27
  271. package/src/materials/nodes/PointsNodeMaterial.js +86 -28
  272. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  273. package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
  274. package/src/math/Color.js +6 -5
  275. package/src/math/ColorManagement.js +9 -3
  276. package/src/math/Cylindrical.js +1 -1
  277. package/src/math/Euler.js +2 -1
  278. package/src/math/Frustum.js +25 -9
  279. package/src/math/FrustumArray.js +10 -5
  280. package/src/math/Line3.js +129 -2
  281. package/src/math/MathUtils.js +13 -11
  282. package/src/math/Matrix2.js +1 -1
  283. package/src/math/Matrix3.js +2 -2
  284. package/src/math/Matrix4.js +55 -34
  285. package/src/math/Plane.js +1 -1
  286. package/src/math/Quaternion.js +69 -67
  287. package/src/math/Spherical.js +3 -3
  288. package/src/nodes/Nodes.js +6 -4
  289. package/src/nodes/TSL.js +9 -4
  290. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  291. package/src/nodes/accessors/Bitangent.js +31 -25
  292. package/src/nodes/accessors/BufferNode.js +1 -1
  293. package/src/nodes/accessors/Camera.js +142 -16
  294. package/src/nodes/accessors/ClippingNode.js +6 -5
  295. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  296. package/src/nodes/accessors/InstanceNode.js +25 -5
  297. package/src/nodes/accessors/Lights.js +10 -0
  298. package/src/nodes/accessors/Normal.js +97 -30
  299. package/src/nodes/accessors/Object3DNode.js +2 -2
  300. package/src/nodes/accessors/Position.js +25 -9
  301. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  302. package/src/nodes/accessors/ReferenceNode.js +20 -4
  303. package/src/nodes/accessors/ReflectVector.js +3 -3
  304. package/src/nodes/accessors/SceneNode.js +3 -2
  305. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  306. package/src/nodes/accessors/StorageTextureNode.js +23 -1
  307. package/src/nodes/accessors/Tangent.js +25 -17
  308. package/src/nodes/accessors/TangentUtils.js +46 -0
  309. package/src/nodes/accessors/Texture3DNode.js +14 -1
  310. package/src/nodes/accessors/TextureBicubic.js +21 -3
  311. package/src/nodes/accessors/TextureNode.js +142 -44
  312. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  313. package/src/nodes/code/FunctionCallNode.js +24 -4
  314. package/src/nodes/code/FunctionNode.js +23 -0
  315. package/src/nodes/core/ArrayNode.js +13 -0
  316. package/src/nodes/core/AssignNode.js +6 -2
  317. package/src/nodes/core/AttributeNode.js +2 -1
  318. package/src/nodes/core/ContextNode.js +48 -10
  319. package/src/nodes/core/IndexNode.js +2 -2
  320. package/src/nodes/core/InputNode.js +2 -1
  321. package/src/nodes/core/InspectorNode.js +128 -0
  322. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
  323. package/src/nodes/core/Node.js +167 -34
  324. package/src/nodes/core/NodeBuilder.js +404 -120
  325. package/src/nodes/core/NodeFrame.js +21 -21
  326. package/src/nodes/core/NodeFunction.js +2 -1
  327. package/src/nodes/core/NodeParser.js +2 -1
  328. package/src/nodes/core/NodeUniform.js +1 -1
  329. package/src/nodes/core/NodeUtils.js +17 -88
  330. package/src/nodes/core/ParameterNode.js +31 -0
  331. package/src/nodes/core/PropertyNode.js +7 -0
  332. package/src/nodes/core/StackNode.js +77 -30
  333. package/src/nodes/core/StructNode.js +5 -5
  334. package/src/nodes/core/StructTypeNode.js +1 -0
  335. package/src/nodes/core/SubBuildNode.js +89 -0
  336. package/src/nodes/core/UniformNode.js +80 -14
  337. package/src/nodes/core/VarNode.js +142 -16
  338. package/src/nodes/core/VaryingNode.js +9 -6
  339. package/src/nodes/display/BlendModes.js +7 -6
  340. package/src/nodes/display/BumpMapNode.js +1 -1
  341. package/src/nodes/display/ColorAdjustment.js +1 -1
  342. package/src/nodes/display/FrontFacingNode.js +35 -7
  343. package/src/nodes/display/NormalMapNode.js +20 -50
  344. package/src/nodes/display/PassNode.js +206 -17
  345. package/src/nodes/display/RenderOutputNode.js +28 -2
  346. package/src/nodes/display/ScreenNode.js +44 -40
  347. package/src/nodes/display/ToneMappingNode.js +31 -4
  348. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  349. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  350. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  351. package/src/nodes/display/ViewportTextureNode.js +94 -4
  352. package/src/nodes/fog/Fog.js +3 -2
  353. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  354. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  355. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  356. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  357. package/src/nodes/functions/BasicLightingModel.js +2 -1
  358. package/src/nodes/functions/PhongLightingModel.js +3 -3
  359. package/src/nodes/functions/PhysicalLightingModel.js +19 -18
  360. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  361. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  362. package/src/nodes/geometry/RangeNode.js +40 -4
  363. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  364. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  365. package/src/nodes/gpgpu/ComputeNode.js +81 -25
  366. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  367. package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
  368. package/src/nodes/lighting/EnvironmentNode.js +11 -11
  369. package/src/nodes/lighting/LightsNode.js +7 -8
  370. package/src/nodes/lighting/PointShadowNode.js +6 -0
  371. package/src/nodes/lighting/ProjectorLightNode.js +19 -6
  372. package/src/nodes/lighting/ShadowFilterNode.js +3 -1
  373. package/src/nodes/lighting/ShadowNode.js +77 -10
  374. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  375. package/src/nodes/materialx/lib/mx_noise.js +165 -1
  376. package/src/nodes/math/BitcastNode.js +156 -0
  377. package/src/nodes/math/ConditionalNode.js +25 -27
  378. package/src/nodes/math/MathNode.js +106 -65
  379. package/src/nodes/math/OperatorNode.js +28 -43
  380. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  381. package/src/nodes/shapes/Shapes.js +1 -1
  382. package/src/nodes/tsl/TSLBase.js +6 -2
  383. package/src/nodes/tsl/TSLCore.js +546 -186
  384. package/src/nodes/utils/DebugNode.js +3 -2
  385. package/src/nodes/utils/EquirectUV.js +27 -0
  386. package/src/nodes/utils/EventNode.js +119 -0
  387. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  388. package/src/nodes/utils/JoinNode.js +6 -3
  389. package/src/nodes/utils/LoopNode.js +20 -41
  390. package/src/nodes/utils/MatcapUV.js +22 -0
  391. package/src/nodes/utils/MemberNode.js +59 -7
  392. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  393. package/src/nodes/utils/RTTNode.js +33 -6
  394. package/src/nodes/utils/ReflectorNode.js +68 -10
  395. package/src/nodes/utils/SampleNode.js +91 -0
  396. package/src/nodes/utils/SplitNode.js +11 -0
  397. package/src/nodes/utils/Timer.js +0 -47
  398. package/src/nodes/utils/TriplanarTextures.js +65 -0
  399. package/src/objects/BatchedMesh.js +6 -4
  400. package/src/objects/LOD.js +1 -1
  401. package/src/objects/Line.js +2 -1
  402. package/src/objects/LineSegments.js +2 -1
  403. package/src/objects/Skeleton.js +3 -2
  404. package/src/objects/SkinnedMesh.js +3 -1
  405. package/src/objects/Sprite.js +4 -3
  406. package/src/renderers/WebGLRenderer.js +77 -66
  407. package/src/renderers/common/Animation.js +13 -1
  408. package/src/renderers/common/Attributes.js +1 -1
  409. package/src/renderers/common/Backend.js +108 -27
  410. package/src/renderers/common/Background.js +4 -3
  411. package/src/renderers/common/Bindings.js +76 -19
  412. package/src/renderers/common/CanvasTarget.js +341 -0
  413. package/src/renderers/common/ChainMap.js +1 -1
  414. package/src/renderers/common/Color4.js +2 -2
  415. package/src/renderers/common/CubeRenderTarget.js +1 -1
  416. package/src/renderers/common/DataMap.js +1 -1
  417. package/src/renderers/common/Geometries.js +26 -0
  418. package/src/renderers/common/Info.js +4 -2
  419. package/src/renderers/common/InspectorBase.js +146 -0
  420. package/src/renderers/common/Pipelines.js +1 -1
  421. package/src/renderers/common/PostProcessing.js +61 -25
  422. package/src/renderers/common/QuadMesh.js +7 -1
  423. package/src/renderers/common/RenderContext.js +2 -2
  424. package/src/renderers/common/RenderList.js +7 -3
  425. package/src/renderers/common/RenderObject.js +84 -5
  426. package/src/renderers/common/RenderObjects.js +1 -1
  427. package/src/renderers/common/Renderer.js +486 -255
  428. package/src/renderers/common/RendererUtils.js +9 -0
  429. package/src/renderers/common/SampledTexture.js +8 -68
  430. package/src/renderers/common/Sampler.js +117 -0
  431. package/src/renderers/common/Storage3DTexture.js +100 -0
  432. package/src/renderers/common/StorageArrayTexture.js +84 -0
  433. package/src/renderers/common/StorageTexture.js +27 -0
  434. package/src/renderers/common/Textures.js +138 -46
  435. package/src/renderers/common/TimestampQueryPool.js +65 -3
  436. package/src/renderers/common/UniformsGroup.js +2 -1
  437. package/src/renderers/common/XRManager.js +63 -24
  438. package/src/renderers/common/XRRenderTarget.js +21 -4
  439. package/src/renderers/common/extras/PMREMGenerator.js +161 -66
  440. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  441. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  442. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  443. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  444. package/src/renderers/common/nodes/Nodes.js +38 -16
  445. package/src/renderers/shaders/DFGLUTData.js +64 -0
  446. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  447. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  449. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  450. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  451. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  454. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
  455. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  456. package/src/renderers/shaders/UniformsLib.js +1 -0
  457. package/src/renderers/shaders/UniformsUtils.js +25 -4
  458. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  459. package/src/renderers/webgl/WebGLCapabilities.js +4 -3
  460. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  461. package/src/renderers/webgl/WebGLInfo.js +3 -1
  462. package/src/renderers/webgl/WebGLProgram.js +25 -18
  463. package/src/renderers/webgl/WebGLPrograms.js +9 -6
  464. package/src/renderers/webgl/WebGLShadowMap.js +13 -2
  465. package/src/renderers/webgl/WebGLState.js +17 -16
  466. package/src/renderers/webgl/WebGLTextures.js +38 -21
  467. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  468. package/src/renderers/webgl/WebGLUtils.js +3 -2
  469. package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
  470. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
  471. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  472. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  473. package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
  474. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
  475. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  476. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  477. package/src/renderers/webgpu/WebGPUBackend.js +205 -128
  478. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  479. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  480. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
  481. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
  482. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
  483. package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
  484. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
  485. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  486. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
  487. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  488. package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
  489. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  490. package/src/renderers/webxr/WebXRManager.js +89 -13
  491. package/src/textures/ExternalTexture.js +56 -0
  492. package/src/textures/FramebufferTexture.js +2 -2
  493. package/src/textures/Source.js +14 -3
  494. package/src/textures/Texture.js +3 -2
  495. package/src/textures/VideoTexture.js +29 -2
  496. package/src/utils.js +67 -3
  497. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  498. package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
  499. package/src/nodes/utils/EquirectUVNode.js +0 -65
  500. package/src/nodes/utils/MatcapUVNode.js +0 -49
  501. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -115,7 +115,7 @@ class NodeFrame {
115
115
  * @private
116
116
  * @param {WeakMap<Node, Object>} referenceMap - The reference weak map.
117
117
  * @param {Node} nodeRef - The reference to the current node.
118
- * @return {Object<string,WeakMap>} The dictionary.
118
+ * @return {Object<string,WeakMap<Object, number>>} The dictionary.
119
119
  */
120
120
  _getMaps( referenceMap, nodeRef ) {
121
121
 
@@ -124,8 +124,8 @@ class NodeFrame {
124
124
  if ( maps === undefined ) {
125
125
 
126
126
  maps = {
127
- renderMap: new WeakMap(),
128
- frameMap: new WeakMap()
127
+ renderId: 0,
128
+ frameId: 0,
129
129
  };
130
130
 
131
131
  referenceMap.set( nodeRef, maps );
@@ -151,13 +151,13 @@ class NodeFrame {
151
151
 
152
152
  if ( updateType === NodeUpdateType.FRAME ) {
153
153
 
154
- const { frameMap } = this._getMaps( this.updateBeforeMap, reference );
154
+ const nodeUpdateBeforeMap = this._getMaps( this.updateBeforeMap, reference );
155
155
 
156
- if ( frameMap.get( reference ) !== this.frameId ) {
156
+ if ( nodeUpdateBeforeMap.frameId !== this.frameId ) {
157
157
 
158
158
  if ( node.updateBefore( this ) !== false ) {
159
159
 
160
- frameMap.set( reference, this.frameId );
160
+ nodeUpdateBeforeMap.frameId = this.frameId;
161
161
 
162
162
  }
163
163
 
@@ -165,13 +165,13 @@ class NodeFrame {
165
165
 
166
166
  } else if ( updateType === NodeUpdateType.RENDER ) {
167
167
 
168
- const { renderMap } = this._getMaps( this.updateBeforeMap, reference );
168
+ const nodeUpdateBeforeMap = this._getMaps( this.updateBeforeMap, reference );
169
169
 
170
- if ( renderMap.get( reference ) !== this.renderId ) {
170
+ if ( nodeUpdateBeforeMap.renderId !== this.renderId ) {
171
171
 
172
172
  if ( node.updateBefore( this ) !== false ) {
173
173
 
174
- renderMap.set( reference, this.renderId );
174
+ nodeUpdateBeforeMap.renderId = this.renderId;
175
175
 
176
176
  }
177
177
 
@@ -200,13 +200,13 @@ class NodeFrame {
200
200
 
201
201
  if ( updateType === NodeUpdateType.FRAME ) {
202
202
 
203
- const { frameMap } = this._getMaps( this.updateAfterMap, reference );
203
+ const nodeUpdateAfterMap = this._getMaps( this.updateAfterMap, reference );
204
204
 
205
- if ( frameMap.get( reference ) !== this.frameId ) {
205
+ if ( nodeUpdateAfterMap.frameId !== this.frameId ) {
206
206
 
207
207
  if ( node.updateAfter( this ) !== false ) {
208
208
 
209
- frameMap.set( reference, this.frameId );
209
+ nodeUpdateAfterMap.frameId = this.frameId;
210
210
 
211
211
  }
212
212
 
@@ -214,13 +214,13 @@ class NodeFrame {
214
214
 
215
215
  } else if ( updateType === NodeUpdateType.RENDER ) {
216
216
 
217
- const { renderMap } = this._getMaps( this.updateAfterMap, reference );
217
+ const nodeUpdateAfterMap = this._getMaps( this.updateAfterMap, reference );
218
218
 
219
- if ( renderMap.get( reference ) !== this.renderId ) {
219
+ if ( nodeUpdateAfterMap.renderId !== this.renderId ) {
220
220
 
221
221
  if ( node.updateAfter( this ) !== false ) {
222
222
 
223
- renderMap.set( reference, this.renderId );
223
+ nodeUpdateAfterMap.renderId = this.renderId;
224
224
 
225
225
  }
226
226
 
@@ -249,13 +249,13 @@ class NodeFrame {
249
249
 
250
250
  if ( updateType === NodeUpdateType.FRAME ) {
251
251
 
252
- const { frameMap } = this._getMaps( this.updateMap, reference );
252
+ const nodeUpdateMap = this._getMaps( this.updateMap, reference );
253
253
 
254
- if ( frameMap.get( reference ) !== this.frameId ) {
254
+ if ( nodeUpdateMap.frameId !== this.frameId ) {
255
255
 
256
256
  if ( node.update( this ) !== false ) {
257
257
 
258
- frameMap.set( reference, this.frameId );
258
+ nodeUpdateMap.frameId = this.frameId;
259
259
 
260
260
  }
261
261
 
@@ -263,13 +263,13 @@ class NodeFrame {
263
263
 
264
264
  } else if ( updateType === NodeUpdateType.RENDER ) {
265
265
 
266
- const { renderMap } = this._getMaps( this.updateMap, reference );
266
+ const nodeUpdateMap = this._getMaps( this.updateMap, reference );
267
267
 
268
- if ( renderMap.get( reference ) !== this.renderId ) {
268
+ if ( nodeUpdateMap.renderId !== this.renderId ) {
269
269
 
270
270
  if ( node.update( this ) !== false ) {
271
271
 
272
- renderMap.set( reference, this.renderId );
272
+ nodeUpdateMap.renderId = this.renderId;
273
273
 
274
274
  }
275
275
 
@@ -1,3 +1,4 @@
1
+ import { warn } from '../../utils.js';
1
2
  /**
2
3
  * Base class for node functions. A derived module must be implemented
3
4
  * for each supported native shader language. Similar to other `Node*` modules,
@@ -57,7 +58,7 @@ class NodeFunction {
57
58
  */
58
59
  getCode( /*name = this.name*/ ) {
59
60
 
60
- console.warn( 'Abstract function.' );
61
+ warn( 'Abstract function.' );
61
62
 
62
63
  }
63
64
 
@@ -1,3 +1,4 @@
1
+ import { warn } from '../../utils.js';
1
2
  /**
2
3
  * Base class for node parsers. A derived parser must be implemented
3
4
  * for each supported native shader language.
@@ -13,7 +14,7 @@ class NodeParser {
13
14
  */
14
15
  parseFunction( /*source*/ ) {
15
16
 
16
- console.warn( 'Abstract function.' );
17
+ warn( 'Abstract function.' );
17
18
 
18
19
  }
19
20
 
@@ -43,7 +43,7 @@ class NodeUniform {
43
43
  *
44
44
  * @type {UniformNode}
45
45
  */
46
- this.node = node.getSelf();
46
+ this.node = node;
47
47
 
48
48
  }
49
49
 
@@ -5,6 +5,7 @@ import { Matrix4 } from '../../math/Matrix4.js';
5
5
  import { Vector2 } from '../../math/Vector2.js';
6
6
  import { Vector3 } from '../../math/Vector3.js';
7
7
  import { Vector4 } from '../../math/Vector4.js';
8
+ import { error } from '../../utils.js';
8
9
 
9
10
  // cyrb53 (c) 2018 bryc (github.com/bryc). License: Public domain. Attribution appreciated.
10
11
  // A fast and simple 64-bit (or 53-bit) string hash function with decent collision resistance.
@@ -49,6 +50,7 @@ function cyrb53( value, seed = 0 ) {
49
50
  /**
50
51
  * Computes a hash for the given string.
51
52
  *
53
+ * @private
52
54
  * @method
53
55
  * @param {string} str - The string to be hashed.
54
56
  * @return {number} The hash.
@@ -58,6 +60,7 @@ export const hashString = ( str ) => cyrb53( str );
58
60
  /**
59
61
  * Computes a hash for the given array.
60
62
  *
63
+ * @private
61
64
  * @method
62
65
  * @param {Array<number>} array - The array to be hashed.
63
66
  * @return {number} The hash.
@@ -67,97 +70,13 @@ export const hashArray = ( array ) => cyrb53( array );
67
70
  /**
68
71
  * Computes a hash for the given list of parameters.
69
72
  *
73
+ * @private
70
74
  * @method
71
75
  * @param {...number} params - A list of parameters.
72
76
  * @return {number} The hash.
73
77
  */
74
78
  export const hash = ( ...params ) => cyrb53( params );
75
79
 
76
- /**
77
- * Computes a cache key for the given node.
78
- *
79
- * @method
80
- * @param {Object|Node} object - The object to be hashed.
81
- * @param {boolean} [force=false] - Whether to force a cache key computation or not.
82
- * @return {number} The hash.
83
- */
84
- export function getCacheKey( object, force = false ) {
85
-
86
- const values = [];
87
-
88
- if ( object.isNode === true ) {
89
-
90
- values.push( object.id );
91
- object = object.getSelf();
92
-
93
- }
94
-
95
- for ( const { property, childNode } of getNodeChildren( object ) ) {
96
-
97
- values.push( cyrb53( property.slice( 0, - 4 ) ), childNode.getCacheKey( force ) );
98
-
99
- }
100
-
101
- return cyrb53( values );
102
-
103
- }
104
-
105
- /**
106
- * This generator function can be used to iterate over the node children
107
- * of the given object.
108
- *
109
- * @generator
110
- * @param {Object} node - The object to be hashed.
111
- * @param {boolean} [toJSON=false] - Whether to return JSON or not.
112
- * @yields {Object} A result node holding the property, index (if available) and the child node.
113
- */
114
- export function* getNodeChildren( node, toJSON = false ) {
115
-
116
- for ( const property in node ) {
117
-
118
- // Ignore private properties.
119
- if ( property.startsWith( '_' ) === true ) continue;
120
-
121
- const object = node[ property ];
122
-
123
- if ( Array.isArray( object ) === true ) {
124
-
125
- for ( let i = 0; i < object.length; i ++ ) {
126
-
127
- const child = object[ i ];
128
-
129
- if ( child && ( child.isNode === true || toJSON && typeof child.toJSON === 'function' ) ) {
130
-
131
- yield { property, index: i, childNode: child };
132
-
133
- }
134
-
135
- }
136
-
137
- } else if ( object && object.isNode === true ) {
138
-
139
- yield { property, childNode: object };
140
-
141
- } else if ( typeof object === 'object' ) {
142
-
143
- for ( const subProperty in object ) {
144
-
145
- const child = object[ subProperty ];
146
-
147
- if ( child && ( child.isNode === true || toJSON && typeof child.toJSON === 'function' ) ) {
148
-
149
- yield { property, index: subProperty, childNode: child };
150
-
151
- }
152
-
153
- }
154
-
155
- }
156
-
157
- }
158
-
159
- }
160
-
161
80
  const typeFromLength = /*@__PURE__*/ new Map( [
162
81
  [ 1, 'float' ],
163
82
  [ 2, 'vec2' ],
@@ -172,6 +91,7 @@ const dataFromObject = /*@__PURE__*/ new WeakMap();
172
91
  /**
173
92
  * Returns the data type for the given the length.
174
93
  *
94
+ * @private
175
95
  * @method
176
96
  * @param {number} length - The length.
177
97
  * @return {string} The data type.
@@ -185,6 +105,7 @@ export function getTypeFromLength( length ) {
185
105
  /**
186
106
  * Returns the typed array for the given data type.
187
107
  *
108
+ * @private
188
109
  * @method
189
110
  * @param {string} type - The data type.
190
111
  * @return {TypedArray} The typed array.
@@ -218,6 +139,7 @@ export function getTypedArrayFromType( type ) {
218
139
  /**
219
140
  * Returns the length for the given data type.
220
141
  *
142
+ * @private
221
143
  * @method
222
144
  * @param {string} type - The data type.
223
145
  * @return {number} The length.
@@ -232,13 +154,14 @@ export function getLengthFromType( type ) {
232
154
  if ( /mat3/.test( type ) ) return 9;
233
155
  if ( /mat4/.test( type ) ) return 16;
234
156
 
235
- console.error( 'THREE.TSL: Unsupported type:', type );
157
+ error( 'TSL: Unsupported type:', type );
236
158
 
237
159
  }
238
160
 
239
161
  /**
240
162
  * Returns the gpu memory length for the given data type.
241
163
  *
164
+ * @private
242
165
  * @method
243
166
  * @param {string} type - The data type.
244
167
  * @return {number} The length.
@@ -253,13 +176,14 @@ export function getMemoryLengthFromType( type ) {
253
176
  if ( /mat3/.test( type ) ) return 12;
254
177
  if ( /mat4/.test( type ) ) return 16;
255
178
 
256
- console.error( 'THREE.TSL: Unsupported type:', type );
179
+ error( 'TSL: Unsupported type:', type );
257
180
 
258
181
  }
259
182
 
260
183
  /**
261
184
  * Returns the byte boundary for the given data type.
262
185
  *
186
+ * @private
263
187
  * @method
264
188
  * @param {string} type - The data type.
265
189
  * @return {number} The byte boundary.
@@ -274,13 +198,14 @@ export function getByteBoundaryFromType( type ) {
274
198
  if ( /mat3/.test( type ) ) return 48;
275
199
  if ( /mat4/.test( type ) ) return 64;
276
200
 
277
- console.error( 'THREE.TSL: Unsupported type:', type );
201
+ error( 'TSL: Unsupported type:', type );
278
202
 
279
203
  }
280
204
 
281
205
  /**
282
206
  * Returns the data type for the given value.
283
207
  *
208
+ * @private
284
209
  * @method
285
210
  * @param {any} value - The value.
286
211
  * @return {?string} The data type.
@@ -352,6 +277,7 @@ export function getValueType( value ) {
352
277
  /**
353
278
  * Returns the value/object for the given data type and parameters.
354
279
  *
280
+ * @private
355
281
  * @method
356
282
  * @param {string} type - The given type.
357
283
  * @param {...any} params - A parameter list.
@@ -422,6 +348,7 @@ export function getValueFromType( type, ...params ) {
422
348
  /**
423
349
  * Gets the object data that can be shared between different rendering steps.
424
350
  *
351
+ * @private
425
352
  * @param {Object} object - The object to get the data for.
426
353
  * @return {Object} The object data.
427
354
  */
@@ -443,6 +370,7 @@ export function getDataFromObject( object ) {
443
370
  /**
444
371
  * Converts the given array buffer to a Base64 string.
445
372
  *
373
+ * @private
446
374
  * @method
447
375
  * @param {ArrayBuffer} arrayBuffer - The array buffer.
448
376
  * @return {string} The Base64 string.
@@ -466,6 +394,7 @@ export function arrayBufferToBase64( arrayBuffer ) {
466
394
  /**
467
395
  * Converts the given Base64 string to an array buffer.
468
396
  *
397
+ * @private
469
398
  * @method
470
399
  * @param {string} base64 - The Base64 string.
471
400
  * @return {ArrayBuffer} The array buffer.
@@ -1,4 +1,5 @@
1
1
  import { nodeObject } from '../tsl/TSLBase.js';
2
+ import { error } from '../../utils.js';
2
3
  import PropertyNode from './PropertyNode.js';
3
4
 
4
5
  /**
@@ -35,6 +36,36 @@ class ParameterNode extends PropertyNode {
35
36
 
36
37
  }
37
38
 
39
+ /**
40
+ * Gets the type of a member variable in the parameter node.
41
+ *
42
+ * @param {NodeBuilder} builder - The node builder.
43
+ * @param {string} name - The name of the member variable.
44
+ * @returns {string}
45
+ */
46
+ getMemberType( builder, name ) {
47
+
48
+ const type = this.getNodeType( builder );
49
+ const struct = builder.getStructTypeNode( type );
50
+
51
+ let memberType;
52
+
53
+ if ( struct !== null ) {
54
+
55
+ memberType = struct.getMemberType( builder, name );
56
+
57
+ } else {
58
+
59
+ error( `TSL: Member "${ name }" not found in struct "${ type }".` );
60
+
61
+ memberType = 'float';
62
+
63
+ }
64
+
65
+ return memberType;
66
+
67
+ }
68
+
38
69
  getHash() {
39
70
 
40
71
  return this.uuid;
@@ -1,5 +1,6 @@
1
1
  import Node from './Node.js';
2
2
  import { nodeImmutable, nodeObject } from '../tsl/TSLCore.js';
3
+ import { hashString } from './NodeUtils.js';
3
4
 
4
5
  /**
5
6
  * This class represents a shader property. It can be used
@@ -68,6 +69,12 @@ class PropertyNode extends Node {
68
69
 
69
70
  }
70
71
 
72
+ customCacheKey() {
73
+
74
+ return hashString( this.type + ':' + ( this.name || '' ) + ':' + ( this.varying ? '1' : '0' ) );
75
+
76
+ }
77
+
71
78
  getHash( builder ) {
72
79
 
73
80
  return this.name || super.getHash( builder );
@@ -1,6 +1,7 @@
1
1
  import Node from './Node.js';
2
2
  import { select } from '../math/ConditionalNode.js';
3
3
  import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack, nodeObject } from '../tsl/TSLBase.js';
4
+ import { error } from '../../utils.js';
4
5
 
5
6
  /**
6
7
  * Stack is a helper for Nodes that need to produce stack-based code instead of continuous flow.
@@ -78,15 +79,21 @@ class StackNode extends Node {
78
79
 
79
80
  }
80
81
 
82
+ getElementType( builder ) {
83
+
84
+ return this.hasOutput ? this.outputNode.getElementType( builder ) : 'void';
85
+
86
+ }
87
+
81
88
  getNodeType( builder ) {
82
89
 
83
- return this.outputNode ? this.outputNode.getNodeType( builder ) : 'void';
90
+ return this.hasOutput ? this.outputNode.getNodeType( builder ) : 'void';
84
91
 
85
92
  }
86
93
 
87
94
  getMemberType( builder, name ) {
88
95
 
89
- return this.outputNode ? this.outputNode.getMemberType( builder, name ) : 'void';
96
+ return this.hasOutput ? this.outputNode.getMemberType( builder, name ) : 'void';
90
97
 
91
98
  }
92
99
 
@@ -96,7 +103,14 @@ class StackNode extends Node {
96
103
  * @param {Node} node - The node to add.
97
104
  * @return {StackNode} A reference to this stack node.
98
105
  */
99
- add( node ) {
106
+ addToStack( node ) {
107
+
108
+ if ( node.isNode !== true ) {
109
+
110
+ error( 'TSL: Invalid node added to stack.' );
111
+ return this;
112
+
113
+ }
100
114
 
101
115
  this.nodes.push( node );
102
116
 
@@ -116,7 +130,7 @@ class StackNode extends Node {
116
130
  const methodNode = new ShaderNode( method );
117
131
  this._currentCond = select( boolNode, methodNode );
118
132
 
119
- return this.add( this._currentCond );
133
+ return this.addToStack( this._currentCond );
120
134
 
121
135
  }
122
136
 
@@ -191,7 +205,7 @@ class StackNode extends Node {
191
205
 
192
206
  } else {
193
207
 
194
- throw new Error( 'TSL: Invalid parameter length. Case() requires at least two parameters.' );
208
+ error( 'TSL: Invalid parameter length. Case() requires at least two parameters.' );
195
209
 
196
210
  }
197
211
 
@@ -218,7 +232,7 @@ class StackNode extends Node {
218
232
 
219
233
  this._currentCond = condNode;
220
234
 
221
- return this.add( this._currentCond );
235
+ return this.addToStack( this._currentCond );
222
236
 
223
237
  } else {
224
238
 
@@ -245,16 +259,62 @@ class StackNode extends Node {
245
259
 
246
260
  }
247
261
 
262
+ setup( builder ) {
263
+
264
+ const nodeProperties = builder.getNodeProperties( this );
265
+
266
+ let index = 0;
267
+
268
+ for ( const childNode of this.getChildren() ) {
269
+
270
+ if ( childNode.isVarNode && childNode.intent === true ) {
271
+
272
+ if ( childNode.isAssign( builder ) !== true ) {
273
+
274
+ continue;
275
+
276
+ }
277
+
278
+ }
279
+
280
+ nodeProperties[ 'node' + index ++ ] = childNode;
281
+
282
+ }
283
+
284
+ // return a outputNode if exists or null
285
+
286
+ return nodeProperties.outputNode || null;
287
+
288
+ }
289
+
290
+ get hasOutput() {
291
+
292
+ return this.outputNode && this.outputNode.isNode;
293
+
294
+ }
295
+
248
296
  build( builder, ...params ) {
249
297
 
250
298
  const previousStack = getCurrentStack();
251
299
 
252
300
  setCurrentStack( this );
253
301
 
302
+ builder.setActiveStack( this );
303
+
254
304
  const buildStage = builder.buildStage;
255
305
 
256
306
  for ( const node of this.nodes ) {
257
307
 
308
+ if ( node.isVarNode && node.intent === true ) {
309
+
310
+ if ( node.isAssign( builder ) !== true ) {
311
+
312
+ continue;
313
+
314
+ }
315
+
316
+ }
317
+
258
318
  if ( buildStage === 'setup' ) {
259
319
 
260
320
  node.build( builder );
@@ -280,38 +340,25 @@ class StackNode extends Node {
280
340
 
281
341
  }
282
342
 
283
- setCurrentStack( previousStack );
343
+ //
284
344
 
285
- return this.outputNode ? this.outputNode.build( builder, ...params ) : super.build( builder, ...params );
345
+ let result;
286
346
 
287
- }
347
+ if ( this.hasOutput ) {
288
348
 
289
- // Deprecated
349
+ result = this.outputNode.build( builder, ...params );
290
350
 
291
- /**
292
- * @function
293
- * @deprecated since r168. Use {@link StackNode#Else} instead.
294
- *
295
- * @param {...any} params
296
- * @returns {StackNode}
297
- */
298
- else( ...params ) { // @deprecated, r168
351
+ } else {
299
352
 
300
- console.warn( 'THREE.TSL: .else() has been renamed to .Else().' );
301
- return this.Else( ...params );
353
+ result = super.build( builder, ...params );
302
354
 
303
- }
355
+ }
304
356
 
305
- /**
306
- * @deprecated since r168. Use {@link StackNode#ElseIf} instead.
307
- *
308
- * @param {...any} params
309
- * @returns {StackNode}
310
- */
311
- elseif( ...params ) { // @deprecated, r168
357
+ setCurrentStack( previousStack );
358
+
359
+ builder.removeActiveStack( this );
312
360
 
313
- console.warn( 'THREE.TSL: .elseif() has been renamed to .ElseIf().' );
314
- return this.ElseIf( ...params );
361
+ return result;
315
362
 
316
363
  }
317
364
 
@@ -30,11 +30,11 @@ class StructNode extends Node {
30
30
 
31
31
  }
32
32
 
33
- constructor( structLayoutNode, values ) {
33
+ constructor( structTypeNode, values ) {
34
34
 
35
35
  super( 'vec3' );
36
36
 
37
- this.structLayoutNode = structLayoutNode;
37
+ this.structTypeNode = structTypeNode;
38
38
  this.values = values;
39
39
 
40
40
  this.isStructNode = true;
@@ -43,13 +43,13 @@ class StructNode extends Node {
43
43
 
44
44
  getNodeType( builder ) {
45
45
 
46
- return this.structLayoutNode.getNodeType( builder );
46
+ return this.structTypeNode.getNodeType( builder );
47
47
 
48
48
  }
49
49
 
50
50
  getMemberType( builder, name ) {
51
51
 
52
- return this.structLayoutNode.getMemberType( builder, name );
52
+ return this.structTypeNode.getMemberType( builder, name );
53
53
 
54
54
  }
55
55
 
@@ -59,7 +59,7 @@ class StructNode extends Node {
59
59
  const structType = nodeVar.type;
60
60
  const propertyName = builder.getPropertyName( nodeVar );
61
61
 
62
- builder.addLineFlowCode( `${ propertyName } = ${ builder.generateStruct( structType, this.structLayoutNode.membersLayout, this.values ) }`, this );
62
+ builder.addLineFlowCode( `${ propertyName } = ${ builder.generateStruct( structType, this.structTypeNode.membersLayout, this.values ) }`, this );
63
63
 
64
64
  return nodeVar.name;
65
65
 
@@ -138,6 +138,7 @@ class StructTypeNode extends Node {
138
138
 
139
139
  setup( builder ) {
140
140
 
141
+ builder.getStructTypeFromNode( this, this.membersLayout, this.name );
141
142
  builder.addInclude( this );
142
143
 
143
144
  }