@plastic-software/three 0.167.4 → 0.174.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 (747) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +36217 -23964
  4. package/build/three.core.js +48830 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +10175 -46744
  7. package/build/three.module.min.js +2 -3
  8. package/build/three.tsl.js +550 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +44348 -50671
  11. package/build/three.webgpu.min.js +2 -3
  12. package/build/three.webgpu.nodes.js +70301 -0
  13. package/build/three.webgpu.nodes.min.js +6 -0
  14. package/examples/jsm/Addons.js +3 -15
  15. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  16. package/examples/jsm/animation/CCDIKSolver.js +61 -11
  17. package/examples/jsm/capabilities/WebGL.js +27 -21
  18. package/examples/jsm/capabilities/WebGPU.js +1 -10
  19. package/examples/jsm/controls/ArcballControls.js +262 -231
  20. package/examples/jsm/controls/DragControls.js +1 -1
  21. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  22. package/examples/jsm/controls/FlyControls.js +194 -188
  23. package/examples/jsm/controls/OrbitControls.js +801 -777
  24. package/examples/jsm/controls/PointerLockControls.js +26 -20
  25. package/examples/jsm/controls/TrackballControls.js +469 -448
  26. package/examples/jsm/controls/TransformControls.js +119 -68
  27. package/examples/jsm/csm/CSM.js +2 -2
  28. package/examples/jsm/csm/CSMFrustum.js +7 -4
  29. package/examples/jsm/csm/CSMHelper.js +2 -0
  30. package/examples/jsm/csm/CSMShadowNode.js +442 -0
  31. package/examples/jsm/curves/NURBSCurve.js +33 -2
  32. package/examples/jsm/curves/NURBSUtils.js +3 -0
  33. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  34. package/examples/jsm/effects/OutlineEffect.js +1 -1
  35. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  36. package/examples/jsm/effects/StereoEffect.js +6 -1
  37. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  38. package/examples/jsm/exporters/EXRExporter.js +19 -11
  39. package/examples/jsm/exporters/GLTFExporter.js +181 -109
  40. package/examples/jsm/exporters/KTX2Exporter.js +54 -23
  41. package/examples/jsm/exporters/OBJExporter.js +5 -1
  42. package/examples/jsm/exporters/PLYExporter.js +11 -9
  43. package/examples/jsm/exporters/USDZExporter.js +50 -11
  44. package/examples/jsm/geometries/DecalGeometry.js +73 -21
  45. package/examples/jsm/geometries/TextGeometry.js +1 -12
  46. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  47. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  48. package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
  49. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  50. package/examples/jsm/interactive/HTMLMesh.js +1 -0
  51. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  52. package/examples/jsm/interactive/SelectionHelper.js +3 -1
  53. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  54. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  55. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  56. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  57. package/examples/jsm/lighting/TiledLighting.js +18 -0
  58. package/examples/jsm/lights/LightProbeGenerator.js +26 -12
  59. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  60. package/examples/jsm/lines/LineGeometry.js +25 -0
  61. package/examples/jsm/lines/LineMaterial.js +0 -1
  62. package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
  63. package/examples/jsm/lines/webgpu/Line2.js +2 -1
  64. package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
  65. package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
  66. package/examples/jsm/loaders/3DMLoader.js +1 -0
  67. package/examples/jsm/loaders/3MFLoader.js +104 -2
  68. package/examples/jsm/loaders/BVHLoader.js +1 -1
  69. package/examples/jsm/loaders/ColladaLoader.js +15 -12
  70. package/examples/jsm/loaders/DDSLoader.js +42 -0
  71. package/examples/jsm/loaders/DRACOLoader.js +3 -1
  72. package/examples/jsm/loaders/FBXLoader.js +71 -22
  73. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  74. package/examples/jsm/loaders/GLTFLoader.js +29 -14
  75. package/examples/jsm/loaders/KTX2Loader.js +160 -58
  76. package/examples/jsm/loaders/KTXLoader.js +4 -4
  77. package/examples/jsm/loaders/LDrawLoader.js +22 -136
  78. package/examples/jsm/loaders/LottieLoader.js +2 -1
  79. package/examples/jsm/loaders/MTLLoader.js +27 -7
  80. package/examples/jsm/loaders/MaterialXLoader.js +40 -14
  81. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  82. package/examples/jsm/loaders/OBJLoader.js +5 -3
  83. package/examples/jsm/loaders/PCDLoader.js +14 -13
  84. package/examples/jsm/loaders/PDBLoader.js +3 -2
  85. package/examples/jsm/loaders/PLYLoader.js +15 -12
  86. package/examples/jsm/loaders/PVRLoader.js +1 -1
  87. package/examples/jsm/loaders/STLLoader.js +3 -2
  88. package/examples/jsm/loaders/SVGLoader.js +2 -2
  89. package/examples/jsm/loaders/TDSLoader.js +17 -18
  90. package/examples/jsm/loaders/VRMLLoader.js +17 -17
  91. package/examples/jsm/loaders/VTKLoader.js +4 -3
  92. package/examples/jsm/loaders/XYZLoader.js +3 -2
  93. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  94. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
  95. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
  96. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  97. package/examples/jsm/math/ColorSpaces.js +76 -0
  98. package/examples/jsm/math/ConvexHull.js +1 -1
  99. package/examples/jsm/math/OBB.js +17 -0
  100. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  101. package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
  102. package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
  103. package/examples/jsm/misc/Timer.js +27 -12
  104. package/examples/jsm/misc/Volume.js +28 -18
  105. package/examples/jsm/misc/VolumeSlice.js +19 -16
  106. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  107. package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
  108. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  109. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  110. package/examples/jsm/objects/LensflareMesh.js +324 -0
  111. package/examples/jsm/objects/Reflector.js +5 -2
  112. package/examples/jsm/objects/Sky.js +2 -2
  113. package/examples/jsm/objects/SkyMesh.js +14 -14
  114. package/examples/jsm/objects/Water2.js +1 -1
  115. package/examples/jsm/objects/Water2Mesh.js +11 -9
  116. package/examples/jsm/objects/WaterMesh.js +38 -33
  117. package/examples/jsm/physics/JoltPhysics.js +8 -8
  118. package/examples/jsm/physics/RapierPhysics.js +5 -5
  119. package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
  120. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  121. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  122. package/examples/jsm/postprocessing/OutlinePass.js +37 -51
  123. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  124. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  125. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  126. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  127. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  128. package/examples/jsm/postprocessing/SSRPass.js +8 -4
  129. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  130. package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
  131. package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
  132. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  133. package/examples/jsm/shaders/BokehShader2.js +1 -1
  134. package/examples/jsm/shaders/FXAAShader.js +225 -224
  135. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  136. package/examples/jsm/shaders/OutputShader.js +6 -2
  137. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  138. package/examples/jsm/transpiler/AST.js +12 -2
  139. package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
  140. package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
  141. package/examples/jsm/transpiler/TSLEncoder.js +96 -21
  142. package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
  143. package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
  144. package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
  145. package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
  146. package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
  147. package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
  148. package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
  149. package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
  150. package/examples/jsm/tsl/display/FXAANode.js +364 -0
  151. package/examples/jsm/tsl/display/FilmNode.js +100 -0
  152. package/examples/jsm/tsl/display/GTAONode.js +521 -0
  153. package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
  154. package/examples/jsm/tsl/display/LensflareNode.js +278 -0
  155. package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
  156. package/examples/jsm/tsl/display/MotionBlur.js +33 -0
  157. package/examples/jsm/tsl/display/OutlineNode.js +750 -0
  158. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
  159. package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
  160. package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
  161. package/examples/jsm/tsl/display/SMAANode.js +767 -0
  162. package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
  163. package/examples/jsm/tsl/display/SSRNode.js +538 -0
  164. package/examples/jsm/tsl/display/Sepia.js +24 -0
  165. package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
  166. package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
  167. package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
  168. package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
  169. package/examples/jsm/tsl/display/TransitionNode.js +140 -0
  170. package/examples/jsm/tsl/display/hashBlur.js +34 -0
  171. package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
  172. package/examples/jsm/tsl/math/Bayer.js +18 -0
  173. package/examples/jsm/tsl/utils/Raymarching.js +65 -0
  174. package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
  175. package/examples/jsm/utils/CameraUtils.js +4 -1
  176. package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
  177. package/examples/jsm/utils/GeometryUtils.js +22 -19
  178. package/examples/jsm/utils/SceneOptimizer.js +410 -0
  179. package/examples/jsm/utils/SceneUtils.js +2 -2
  180. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  181. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  182. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  183. package/examples/jsm/utils/UVsDebug.js +1 -1
  184. package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
  185. package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
  186. package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
  187. package/examples/jsm/webxr/Text2D.js +6 -6
  188. package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
  189. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  190. package/package.json +14 -9
  191. package/src/Three.Core.js +182 -0
  192. package/src/Three.Legacy.js +0 -21
  193. package/src/Three.TSL.js +543 -0
  194. package/src/Three.WebGPU.Nodes.js +23 -0
  195. package/src/Three.WebGPU.js +13 -184
  196. package/src/Three.js +1 -176
  197. package/src/animation/AnimationClip.js +2 -2
  198. package/src/animation/AnimationObjectGroup.js +2 -2
  199. package/src/animation/AnimationUtils.js +1 -1
  200. package/src/animation/PropertyBinding.js +2 -2
  201. package/src/audio/Audio.js +379 -2
  202. package/src/audio/AudioAnalyser.js +58 -1
  203. package/src/audio/AudioContext.js +15 -0
  204. package/src/audio/AudioListener.js +76 -0
  205. package/src/audio/PositionalAudio.js +107 -0
  206. package/src/cameras/ArrayCamera.js +29 -0
  207. package/src/cameras/Camera.js +47 -0
  208. package/src/cameras/CubeCamera.js +66 -0
  209. package/src/cameras/OrthographicCamera.js +109 -0
  210. package/src/cameras/PerspectiveCamera.js +173 -34
  211. package/src/cameras/StereoCamera.js +48 -2
  212. package/src/constants.js +6 -6
  213. package/src/core/BufferAttribute.js +4 -9
  214. package/src/core/BufferGeometry.js +48 -8
  215. package/src/core/Clock.js +1 -1
  216. package/src/core/EventDispatcher.js +52 -8
  217. package/src/core/InterleavedBuffer.js +4 -13
  218. package/src/core/Object3D.js +573 -3
  219. package/src/core/RenderTarget.js +22 -4
  220. package/src/core/RenderTarget3D.js +22 -0
  221. package/src/core/RenderTargetArray.js +22 -0
  222. package/src/extras/Controls.js +104 -0
  223. package/src/extras/DataUtils.js +48 -8
  224. package/src/extras/Earcut.js +18 -7
  225. package/src/extras/ImageUtils.js +18 -11
  226. package/src/extras/PMREMGenerator.js +40 -9
  227. package/src/extras/ShapeUtils.js +24 -2
  228. package/src/extras/TextureUtils.js +96 -10
  229. package/src/extras/core/Curve.js +153 -53
  230. package/src/extras/core/CurvePath.js +63 -22
  231. package/src/extras/core/Interpolations.js +29 -3
  232. package/src/extras/core/Path.js +134 -1
  233. package/src/extras/core/Shape.js +66 -3
  234. package/src/extras/core/ShapePath.js +76 -0
  235. package/src/extras/curves/ArcCurve.js +22 -0
  236. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  237. package/src/extras/curves/CubicBezierCurve.js +67 -0
  238. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  239. package/src/extras/curves/EllipseCurve.js +102 -0
  240. package/src/extras/curves/LineCurve.js +36 -0
  241. package/src/extras/curves/LineCurve3.js +36 -0
  242. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  243. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  244. package/src/extras/curves/SplineCurve.js +48 -0
  245. package/src/geometries/BoxGeometry.js +38 -0
  246. package/src/geometries/CapsuleGeometry.js +34 -0
  247. package/src/geometries/CircleGeometry.js +40 -0
  248. package/src/geometries/ConeGeometry.js +38 -0
  249. package/src/geometries/CylinderGeometry.js +50 -4
  250. package/src/geometries/DodecahedronGeometry.js +32 -0
  251. package/src/geometries/EdgesGeometry.js +30 -2
  252. package/src/geometries/ExtrudeGeometry.js +52 -0
  253. package/src/geometries/IcosahedronGeometry.js +32 -0
  254. package/src/geometries/LatheGeometry.js +43 -3
  255. package/src/geometries/OctahedronGeometry.js +32 -0
  256. package/src/geometries/PlaneGeometry.js +34 -0
  257. package/src/geometries/PolyhedronGeometry.js +29 -0
  258. package/src/geometries/RingGeometry.js +36 -0
  259. package/src/geometries/ShapeGeometry.js +37 -0
  260. package/src/geometries/SphereGeometry.js +37 -0
  261. package/src/geometries/TetrahedronGeometry.js +32 -0
  262. package/src/geometries/TorusGeometry.js +35 -0
  263. package/src/geometries/TorusKnotGeometry.js +38 -0
  264. package/src/geometries/TubeGeometry.js +49 -0
  265. package/src/geometries/WireframeGeometry.js +32 -0
  266. package/src/helpers/ArrowHelper.js +60 -3
  267. package/src/helpers/AxesHelper.js +28 -0
  268. package/src/helpers/Box3Helper.js +28 -0
  269. package/src/helpers/BoxHelper.js +43 -7
  270. package/src/helpers/CameraHelper.js +61 -18
  271. package/src/helpers/DirectionalLightHelper.js +52 -0
  272. package/src/helpers/GridHelper.js +26 -0
  273. package/src/helpers/HemisphereLightHelper.js +39 -0
  274. package/src/helpers/PlaneHelper.js +33 -0
  275. package/src/helpers/PointLightHelper.js +43 -0
  276. package/src/helpers/PolarGridHelper.js +30 -0
  277. package/src/helpers/SkeletonHelper.js +39 -2
  278. package/src/helpers/SpotLightHelper.js +40 -0
  279. package/src/lights/AmbientLight.js +25 -0
  280. package/src/lights/DirectionalLight.js +57 -0
  281. package/src/lights/DirectionalLightShadow.js +15 -0
  282. package/src/lights/HemisphereLight.js +32 -0
  283. package/src/lights/Light.js +36 -0
  284. package/src/lights/LightProbe.js +43 -0
  285. package/src/lights/LightShadow.js +159 -0
  286. package/src/lights/PointLight.js +59 -0
  287. package/src/lights/PointLightShadow.js +21 -0
  288. package/src/lights/RectAreaLight.js +59 -0
  289. package/src/lights/SpotLight.js +102 -0
  290. package/src/lights/SpotLightShadow.js +24 -2
  291. package/src/lights/webgpu/IESSpotLight.js +21 -0
  292. package/src/loaders/Loader.js +132 -0
  293. package/src/loaders/MaterialLoader.js +7 -1
  294. package/src/loaders/nodes/NodeLoader.js +189 -0
  295. package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
  296. package/src/loaders/nodes/NodeObjectLoader.js +151 -0
  297. package/src/materials/LineDashedMaterial.js +0 -1
  298. package/src/materials/Material.js +469 -7
  299. package/src/materials/MeshPhongMaterial.js +1 -1
  300. package/src/materials/MeshPhysicalMaterial.js +2 -2
  301. package/src/materials/MeshStandardMaterial.js +2 -2
  302. package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
  303. package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
  304. package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
  305. package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
  306. package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
  307. package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
  308. package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
  309. package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
  310. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
  311. package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
  312. package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
  313. package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
  314. package/src/materials/nodes/NodeMaterial.js +1180 -0
  315. package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
  316. package/src/materials/nodes/PointsNodeMaterial.js +153 -0
  317. package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
  318. package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
  319. package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
  320. package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
  321. package/src/math/Box2.js +177 -0
  322. package/src/math/Box3.js +243 -0
  323. package/src/math/Color.js +343 -0
  324. package/src/math/ColorManagement.js +143 -102
  325. package/src/math/Cylindrical.js +65 -6
  326. package/src/math/Euler.js +137 -4
  327. package/src/math/Frustum.js +83 -0
  328. package/src/math/Interpolant.js +87 -8
  329. package/src/math/Line3.js +96 -2
  330. package/src/math/MathUtils.js +182 -19
  331. package/src/math/Matrix2.js +70 -0
  332. package/src/math/Matrix3.js +229 -4
  333. package/src/math/Matrix4.js +368 -3
  334. package/src/math/Plane.js +164 -2
  335. package/src/math/Quaternion.js +265 -9
  336. package/src/math/Ray.js +160 -0
  337. package/src/math/Sphere.js +147 -0
  338. package/src/math/Spherical.js +73 -11
  339. package/src/math/SphericalHarmonics3.js +112 -14
  340. package/src/math/Triangle.js +230 -2
  341. package/src/math/Vector2.js +396 -10
  342. package/src/math/Vector3.js +550 -13
  343. package/src/math/Vector4.js +415 -9
  344. package/src/math/interpolants/CubicInterpolant.js +10 -1
  345. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  346. package/src/math/interpolants/LinearInterpolant.js +13 -0
  347. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  348. package/src/nodes/Nodes.js +84 -166
  349. package/src/nodes/TSL.js +167 -0
  350. package/src/nodes/accessors/AccessorsUtils.js +39 -10
  351. package/src/nodes/accessors/Arrays.js +68 -0
  352. package/src/nodes/accessors/BatchNode.js +93 -26
  353. package/src/nodes/accessors/Bitangent.js +54 -0
  354. package/src/nodes/accessors/BufferAttributeNode.js +189 -11
  355. package/src/nodes/accessors/BufferNode.js +70 -5
  356. package/src/nodes/accessors/BuiltinNode.js +63 -0
  357. package/src/nodes/accessors/Camera.js +129 -0
  358. package/src/nodes/accessors/ClippingNode.js +152 -43
  359. package/src/nodes/accessors/CubeTextureNode.js +76 -13
  360. package/src/nodes/accessors/InstanceNode.js +118 -35
  361. package/src/nodes/accessors/InstancedMeshNode.js +50 -0
  362. package/src/nodes/accessors/Lights.js +129 -0
  363. package/src/nodes/accessors/MaterialNode.js +394 -58
  364. package/src/nodes/accessors/MaterialProperties.js +57 -1
  365. package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
  366. package/src/nodes/accessors/ModelNode.js +159 -12
  367. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
  368. package/src/nodes/accessors/MorphNode.js +60 -13
  369. package/src/nodes/accessors/Normal.js +156 -0
  370. package/src/nodes/accessors/Object3DNode.js +154 -35
  371. package/src/nodes/accessors/PointUVNode.js +35 -6
  372. package/src/nodes/accessors/Position.js +64 -0
  373. package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
  374. package/src/nodes/accessors/ReferenceNode.js +243 -6
  375. package/src/nodes/accessors/ReflectVector.js +36 -0
  376. package/src/nodes/accessors/RendererReferenceNode.js +57 -7
  377. package/src/nodes/accessors/SceneNode.js +98 -6
  378. package/src/nodes/accessors/SkinningNode.js +214 -21
  379. package/src/nodes/accessors/StorageBufferNode.js +288 -28
  380. package/src/nodes/accessors/StorageTextureNode.js +139 -12
  381. package/src/nodes/accessors/Tangent.js +62 -0
  382. package/src/nodes/accessors/Texture3DNode.js +98 -12
  383. package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
  384. package/src/nodes/accessors/TextureNode.js +347 -34
  385. package/src/nodes/accessors/TextureSizeNode.js +51 -9
  386. package/src/nodes/accessors/UV.js +11 -0
  387. package/src/nodes/accessors/UniformArrayNode.js +241 -32
  388. package/src/nodes/accessors/UserDataNode.js +55 -7
  389. package/src/nodes/accessors/VelocityNode.js +223 -0
  390. package/src/nodes/accessors/VertexColorNode.js +45 -6
  391. package/src/nodes/code/CodeNode.js +108 -8
  392. package/src/nodes/code/ExpressionNode.js +38 -7
  393. package/src/nodes/code/FunctionCallNode.js +62 -11
  394. package/src/nodes/code/FunctionNode.js +54 -24
  395. package/src/nodes/code/ScriptableNode.js +241 -17
  396. package/src/nodes/code/ScriptableValueNode.js +93 -8
  397. package/src/nodes/core/ArrayNode.js +142 -0
  398. package/src/nodes/core/AssignNode.js +60 -12
  399. package/src/nodes/core/AttributeNode.js +55 -22
  400. package/src/nodes/core/BypassNode.js +59 -11
  401. package/src/nodes/core/CacheNode.js +64 -10
  402. package/src/nodes/core/ConstNode.js +38 -3
  403. package/src/nodes/core/ContextNode.js +87 -12
  404. package/src/nodes/core/IndexNode.js +102 -10
  405. package/src/nodes/core/InputNode.js +55 -3
  406. package/src/nodes/core/LightingModel.js +65 -5
  407. package/src/nodes/core/MRTNode.js +81 -7
  408. package/src/nodes/core/Node.js +368 -50
  409. package/src/nodes/core/NodeAttribute.js +38 -0
  410. package/src/nodes/core/NodeBuilder.js +1317 -83
  411. package/src/nodes/core/NodeCache.js +41 -2
  412. package/src/nodes/core/NodeCode.js +31 -0
  413. package/src/nodes/core/NodeFrame.js +123 -2
  414. package/src/nodes/core/NodeFunction.js +46 -0
  415. package/src/nodes/core/NodeFunctionInput.js +44 -0
  416. package/src/nodes/core/NodeParser.js +11 -0
  417. package/src/nodes/core/NodeUniform.js +52 -0
  418. package/src/nodes/core/NodeUtils.js +226 -6
  419. package/src/nodes/core/NodeVar.js +47 -1
  420. package/src/nodes/core/NodeVarying.js +28 -0
  421. package/src/nodes/core/OutputStructNode.js +61 -17
  422. package/src/nodes/core/ParameterNode.js +34 -4
  423. package/src/nodes/core/PropertyNode.js +296 -32
  424. package/src/nodes/core/StackNode.js +108 -8
  425. package/src/nodes/core/StructNode.js +120 -0
  426. package/src/nodes/core/StructType.js +13 -0
  427. package/src/nodes/core/StructTypeNode.js +116 -9
  428. package/src/nodes/core/TempNode.js +37 -7
  429. package/src/nodes/core/UniformGroupNode.js +98 -17
  430. package/src/nodes/core/UniformNode.js +72 -4
  431. package/src/nodes/core/VarNode.js +170 -13
  432. package/src/nodes/core/VaryingNode.js +109 -8
  433. package/src/nodes/core/constants.js +40 -0
  434. package/src/nodes/display/BlendModes.js +193 -0
  435. package/src/nodes/display/BumpMapNode.js +47 -10
  436. package/src/nodes/display/ColorAdjustment.js +141 -0
  437. package/src/nodes/display/ColorSpaceFunctions.js +54 -0
  438. package/src/nodes/display/ColorSpaceNode.js +147 -68
  439. package/src/nodes/display/FrontFacingNode.js +39 -6
  440. package/src/nodes/display/NormalMapNode.js +55 -13
  441. package/src/nodes/display/PassNode.js +420 -19
  442. package/src/nodes/display/PosterizeNode.js +40 -7
  443. package/src/nodes/display/RenderOutputNode.js +81 -13
  444. package/src/nodes/display/ScreenNode.js +286 -0
  445. package/src/nodes/display/ToneMappingFunctions.js +242 -0
  446. package/src/nodes/display/ToneMappingNode.js +68 -175
  447. package/src/nodes/display/ToonOutlinePassNode.js +183 -0
  448. package/src/nodes/display/ViewportDepthNode.js +210 -36
  449. package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
  450. package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
  451. package/src/nodes/display/ViewportTextureNode.js +68 -11
  452. package/src/nodes/fog/Fog.js +113 -0
  453. package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  454. package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  455. package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  456. package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
  457. package/src/nodes/functions/BSDF/D_GGX.js +2 -2
  458. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  459. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  460. package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
  461. package/src/nodes/functions/BSDF/LTC.js +50 -6
  462. package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  463. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  464. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  465. package/src/nodes/functions/BasicLightingModel.js +27 -6
  466. package/src/nodes/functions/PhongLightingModel.js +38 -8
  467. package/src/nodes/functions/PhysicalLightingModel.js +215 -51
  468. package/src/nodes/functions/ShadowMaskModel.js +24 -1
  469. package/src/nodes/functions/ToonLightingModel.js +24 -5
  470. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  471. package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  472. package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
  473. package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  474. package/src/nodes/functions/material/getRoughness.js +2 -2
  475. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  476. package/src/nodes/geometry/RangeNode.js +62 -7
  477. package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
  478. package/src/nodes/gpgpu/BarrierNode.js +89 -0
  479. package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
  480. package/src/nodes/gpgpu/ComputeNode.js +124 -9
  481. package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
  482. package/src/nodes/lighting/AONode.js +24 -3
  483. package/src/nodes/lighting/AmbientLightNode.js +16 -8
  484. package/src/nodes/lighting/AnalyticLightNode.js +151 -231
  485. package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
  486. package/src/nodes/lighting/BasicLightMapNode.js +25 -5
  487. package/src/nodes/lighting/DirectionalLightNode.js +19 -20
  488. package/src/nodes/lighting/EnvironmentNode.js +34 -17
  489. package/src/nodes/lighting/HemisphereLightNode.js +42 -11
  490. package/src/nodes/lighting/IESSpotLightNode.js +18 -9
  491. package/src/nodes/lighting/IrradianceNode.js +23 -3
  492. package/src/nodes/lighting/LightProbeNode.js +29 -36
  493. package/src/nodes/lighting/LightUtils.js +12 -4
  494. package/src/nodes/lighting/LightingContextNode.js +70 -21
  495. package/src/nodes/lighting/LightingNode.js +22 -9
  496. package/src/nodes/lighting/LightsNode.js +309 -86
  497. package/src/nodes/lighting/PointLightNode.js +66 -32
  498. package/src/nodes/lighting/PointShadowNode.js +306 -0
  499. package/src/nodes/lighting/RectAreaLightNode.js +61 -25
  500. package/src/nodes/lighting/ShadowBaseNode.js +92 -0
  501. package/src/nodes/lighting/ShadowNode.js +812 -0
  502. package/src/nodes/lighting/SpotLightNode.js +73 -31
  503. package/src/nodes/materialx/MaterialXNodes.js +2 -2
  504. package/src/nodes/materialx/lib/mx_hsv.js +27 -22
  505. package/src/nodes/materialx/lib/mx_noise.js +70 -70
  506. package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
  507. package/src/nodes/math/ConditionalNode.js +230 -0
  508. package/src/nodes/math/Hash.js +21 -0
  509. package/src/nodes/math/MathNode.js +812 -131
  510. package/src/nodes/math/MathUtils.js +47 -8
  511. package/src/nodes/math/OperatorNode.js +410 -66
  512. package/src/nodes/math/TriNoise3D.js +32 -32
  513. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  514. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  515. package/src/nodes/pmrem/PMREMNode.js +188 -28
  516. package/src/nodes/pmrem/PMREMUtils.js +24 -24
  517. package/src/nodes/procedural/Checker.js +22 -0
  518. package/src/nodes/shapes/Shapes.js +32 -0
  519. package/src/nodes/tsl/TSLBase.js +31 -0
  520. package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
  521. package/src/nodes/utils/ArrayElementNode.js +45 -5
  522. package/src/nodes/utils/ConvertNode.js +39 -4
  523. package/src/nodes/utils/CubeMapNode.js +88 -8
  524. package/src/nodes/utils/Discard.js +24 -0
  525. package/src/nodes/utils/EquirectUVNode.js +39 -7
  526. package/src/nodes/utils/FlipNode.js +106 -0
  527. package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
  528. package/src/nodes/utils/JoinNode.js +31 -3
  529. package/src/nodes/utils/LoopNode.js +95 -9
  530. package/src/nodes/utils/MatcapUVNode.js +27 -8
  531. package/src/nodes/utils/MaxMipLevelNode.js +57 -6
  532. package/src/nodes/utils/MemberNode.js +68 -0
  533. package/src/nodes/utils/Oscillators.js +41 -0
  534. package/src/nodes/utils/Packing.js +21 -0
  535. package/src/nodes/utils/PostProcessingUtils.js +95 -0
  536. package/src/nodes/utils/RTTNode.js +141 -9
  537. package/src/nodes/utils/ReflectorNode.js +295 -21
  538. package/src/nodes/utils/RemapNode.js +93 -10
  539. package/src/nodes/utils/RotateNode.js +48 -13
  540. package/src/nodes/utils/SetNode.js +50 -4
  541. package/src/nodes/utils/SplitNode.js +62 -6
  542. package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
  543. package/src/nodes/utils/SpriteUtils.js +21 -5
  544. package/src/nodes/utils/StorageArrayElementNode.js +64 -12
  545. package/src/nodes/utils/Timer.js +73 -0
  546. package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
  547. package/src/nodes/utils/UVUtils.js +27 -9
  548. package/src/nodes/utils/ViewportUtils.js +16 -4
  549. package/src/objects/BatchedMesh.js +808 -281
  550. package/src/objects/Bone.js +24 -0
  551. package/src/objects/ClippingGroup.js +68 -0
  552. package/src/objects/Group.js +24 -0
  553. package/src/objects/InstancedMesh.js +120 -2
  554. package/src/objects/LOD.js +120 -5
  555. package/src/objects/Line.js +89 -6
  556. package/src/objects/LineLoop.js +20 -0
  557. package/src/objects/LineSegments.js +18 -0
  558. package/src/objects/Mesh.js +82 -23
  559. package/src/objects/Points.js +62 -0
  560. package/src/objects/Skeleton.js +107 -2
  561. package/src/objects/SkinnedMesh.js +99 -5
  562. package/src/objects/Sprite.js +54 -0
  563. package/src/renderers/WebGLRenderer.js +274 -157
  564. package/src/renderers/common/Animation.js +109 -12
  565. package/src/renderers/common/Attributes.js +40 -0
  566. package/src/renderers/common/Backend.js +504 -44
  567. package/src/renderers/common/Background.js +67 -9
  568. package/src/renderers/common/BindGroup.js +45 -1
  569. package/src/renderers/common/Binding.js +35 -0
  570. package/src/renderers/common/Bindings.js +136 -19
  571. package/src/renderers/common/Buffer.js +49 -0
  572. package/src/renderers/common/BufferUtils.js +25 -0
  573. package/src/renderers/common/BundleGroup.js +83 -0
  574. package/src/renderers/common/ChainMap.js +45 -6
  575. package/src/renderers/common/ClippingContext.js +175 -80
  576. package/src/renderers/common/Color4.js +40 -0
  577. package/src/renderers/common/ComputePipeline.js +24 -0
  578. package/src/renderers/common/Constants.js +2 -1
  579. package/src/renderers/common/CubeRenderTarget.js +22 -3
  580. package/src/renderers/common/DataMap.js +37 -1
  581. package/src/renderers/common/Geometries.js +111 -14
  582. package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  583. package/src/renderers/common/Info.js +78 -35
  584. package/src/renderers/common/Lighting.js +73 -0
  585. package/src/renderers/common/Pipeline.js +22 -0
  586. package/src/renderers/common/Pipelines.js +148 -5
  587. package/src/renderers/common/PostProcessing.js +112 -11
  588. package/src/renderers/common/ProgrammableStage.js +60 -2
  589. package/src/renderers/common/QuadMesh.js +56 -5
  590. package/src/renderers/common/RenderBundle.js +14 -8
  591. package/src/renderers/common/RenderBundles.js +39 -10
  592. package/src/renderers/common/RenderContext.js +205 -7
  593. package/src/renderers/common/RenderContexts.js +59 -6
  594. package/src/renderers/common/RenderList.js +230 -21
  595. package/src/renderers/common/RenderLists.js +45 -6
  596. package/src/renderers/common/RenderObject.js +552 -41
  597. package/src/renderers/common/RenderObjects.js +118 -9
  598. package/src/renderers/common/RenderPipeline.js +24 -0
  599. package/src/renderers/common/Renderer.js +1537 -239
  600. package/src/renderers/common/RendererUtils.js +191 -0
  601. package/src/renderers/common/SampledTexture.js +132 -3
  602. package/src/renderers/common/Sampler.js +30 -0
  603. package/src/renderers/common/StorageBuffer.js +24 -0
  604. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  605. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  606. package/src/renderers/common/StorageTexture.js +38 -0
  607. package/src/renderers/common/Textures.js +142 -32
  608. package/src/renderers/common/TimestampQueryPool.js +98 -0
  609. package/src/renderers/common/Uniform.js +225 -3
  610. package/src/renderers/common/UniformBuffer.js +19 -0
  611. package/src/renderers/common/UniformsGroup.js +157 -6
  612. package/src/renderers/common/XRManager.js +1185 -0
  613. package/src/renderers/common/XRRenderTarget.js +74 -0
  614. package/src/renderers/common/extras/PMREMGenerator.js +211 -53
  615. package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
  616. package/src/renderers/common/nodes/NodeLibrary.js +194 -0
  617. package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
  618. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  619. package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
  620. package/src/renderers/common/nodes/NodeUniform.js +285 -2
  621. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  622. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  623. package/src/renderers/common/nodes/Nodes.js +390 -70
  624. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
  625. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  626. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  627. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
  628. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  629. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  630. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  631. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  632. package/src/renderers/webgl/WebGLBackground.js +24 -1
  633. package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
  634. package/src/renderers/webgl/WebGLCapabilities.js +2 -0
  635. package/src/renderers/webgl/WebGLGeometries.js +0 -28
  636. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
  637. package/src/renderers/webgl/WebGLProgram.js +27 -29
  638. package/src/renderers/webgl/WebGLPrograms.js +24 -16
  639. package/src/renderers/webgl/WebGLState.js +68 -11
  640. package/src/renderers/webgl/WebGLTextures.js +49 -10
  641. package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
  642. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
  643. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
  644. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
  645. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  646. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  647. package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
  648. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
  649. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
  650. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  651. package/src/renderers/webgpu/WebGPUBackend.js +816 -236
  652. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
  653. package/src/renderers/webgpu/WebGPURenderer.js +45 -6
  654. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
  655. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
  656. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
  657. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
  658. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  659. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
  660. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
  661. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
  662. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
  663. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
  664. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
  665. package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
  666. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  667. package/src/renderers/webxr/WebXRManager.js +54 -32
  668. package/src/scenes/Fog.js +60 -0
  669. package/src/scenes/FogExp2.js +51 -0
  670. package/src/scenes/Scene.js +87 -0
  671. package/src/textures/Data3DTexture.js +2 -2
  672. package/src/textures/DepthTexture.js +2 -0
  673. package/src/textures/Source.js +2 -2
  674. package/src/textures/Texture.js +368 -5
  675. package/src/textures/VideoFrameTexture.js +35 -0
  676. package/src/utils.js +33 -1
  677. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  678. package/examples/jsm/animation/MMDPhysics.js +0 -1406
  679. package/examples/jsm/cameras/CinematicCamera.js +0 -208
  680. package/examples/jsm/controls/Controls.js +0 -32
  681. package/examples/jsm/exporters/MMDExporter.js +0 -217
  682. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  683. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  684. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  685. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  686. package/examples/jsm/loaders/MMDLoader.js +0 -2295
  687. package/examples/jsm/loaders/TiltLoader.js +0 -520
  688. package/examples/jsm/objects/InstancedPoints.js +0 -21
  689. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  690. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  691. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  692. package/src/nodes/accessors/BitangentNode.js +0 -13
  693. package/src/nodes/accessors/CameraNode.js +0 -19
  694. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  695. package/src/nodes/accessors/NormalNode.js +0 -14
  696. package/src/nodes/accessors/PositionNode.js +0 -10
  697. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  698. package/src/nodes/accessors/TangentNode.js +0 -23
  699. package/src/nodes/accessors/UVNode.js +0 -3
  700. package/src/nodes/core/NodeKeywords.js +0 -80
  701. package/src/nodes/core/UniformGroup.js +0 -13
  702. package/src/nodes/display/AfterImageNode.js +0 -152
  703. package/src/nodes/display/AnamorphicNode.js +0 -145
  704. package/src/nodes/display/BlendModeNode.js +0 -128
  705. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  706. package/src/nodes/display/DenoiseNode.js +0 -198
  707. package/src/nodes/display/DotScreenNode.js +0 -75
  708. package/src/nodes/display/FXAANode.js +0 -327
  709. package/src/nodes/display/FilmNode.js +0 -52
  710. package/src/nodes/display/GTAONode.js +0 -324
  711. package/src/nodes/display/GaussianBlurNode.js +0 -207
  712. package/src/nodes/display/Lut3DNode.js +0 -53
  713. package/src/nodes/display/RGBShiftNode.js +0 -49
  714. package/src/nodes/display/SepiaNode.js +0 -18
  715. package/src/nodes/display/TransitionNode.js +0 -76
  716. package/src/nodes/display/ViewportNode.js +0 -137
  717. package/src/nodes/fog/FogExp2Node.js +0 -34
  718. package/src/nodes/fog/FogNode.js +0 -48
  719. package/src/nodes/fog/FogRangeNode.js +0 -35
  720. package/src/nodes/lighting/LightNode.js +0 -57
  721. package/src/nodes/loaders/NodeLoader.js +0 -110
  722. package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
  723. package/src/nodes/loaders/NodeObjectLoader.js +0 -71
  724. package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  725. package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
  726. package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
  727. package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
  728. package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
  729. package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
  730. package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  731. package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
  732. package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
  733. package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
  734. package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
  735. package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
  736. package/src/nodes/materials/NodeMaterial.js +0 -680
  737. package/src/nodes/materials/PointsNodeMaterial.js +0 -39
  738. package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
  739. package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
  740. package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
  741. package/src/nodes/math/CondNode.js +0 -139
  742. package/src/nodes/math/HashNode.js +0 -34
  743. package/src/nodes/procedural/CheckerNode.js +0 -42
  744. package/src/nodes/utils/DiscardNode.js +0 -28
  745. package/src/nodes/utils/OscNode.js +0 -81
  746. package/src/nodes/utils/PackingNode.js +0 -55
  747. package/src/nodes/utils/TimerNode.js +0 -94
@@ -0,0 +1,68 @@
1
+ import StorageInstancedBufferAttribute from '../../renderers/common/StorageInstancedBufferAttribute.js';
2
+ import StorageBufferAttribute from '../../renderers/common/StorageBufferAttribute.js';
3
+ import { storage } from './StorageBufferNode.js';
4
+ import { getLengthFromType, getTypedArrayFromType } from '../core/NodeUtils.js';
5
+
6
+ /**
7
+ * TSL function for creating a storage buffer node with a configured `StorageBufferAttribute`.
8
+ *
9
+ * @tsl
10
+ * @function
11
+ * @param {number|TypedArray} count - The data count. It is also valid to pass a typed array as an argument.
12
+ * @param {string|Struct} [type='float'] - The data type.
13
+ * @returns {StorageBufferNode}
14
+ */
15
+ export const attributeArray = ( count, type = 'float' ) => {
16
+
17
+ let itemSize, typedArray;
18
+
19
+ if ( type.isStruct === true ) {
20
+
21
+ itemSize = type.layout.getLength();
22
+ typedArray = getTypedArrayFromType( 'float' );
23
+
24
+ } else {
25
+
26
+ itemSize = getLengthFromType( type );
27
+ typedArray = getTypedArrayFromType( type );
28
+
29
+ }
30
+
31
+ const buffer = new StorageBufferAttribute( count, itemSize, typedArray );
32
+ const node = storage( buffer, type, count );
33
+
34
+ return node;
35
+
36
+ };
37
+
38
+ /**
39
+ * TSL function for creating a storage buffer node with a configured `StorageInstancedBufferAttribute`.
40
+ *
41
+ * @tsl
42
+ * @function
43
+ * @param {number|TypedArray} count - The data count. It is also valid to pass a typed array as an argument.
44
+ * @param {string|Struct} [type='float'] - The data type.
45
+ * @returns {StorageBufferNode}
46
+ */
47
+ export const instancedArray = ( count, type = 'float' ) => {
48
+
49
+ let itemSize, typedArray;
50
+
51
+ if ( type.isStruct === true ) {
52
+
53
+ itemSize = type.layout.getLength();
54
+ typedArray = getTypedArrayFromType( 'float' );
55
+
56
+ } else {
57
+
58
+ itemSize = getLengthFromType( type );
59
+ typedArray = getTypedArrayFromType( type );
60
+
61
+ }
62
+
63
+ const buffer = new StorageInstancedBufferAttribute( count, itemSize, typedArray );
64
+ const node = storage( buffer, type, count );
65
+
66
+ return node;
67
+
68
+ };
@@ -1,31 +1,63 @@
1
- import Node, { addNodeClass } from '../core/Node.js';
2
- import { normalLocal } from './NormalNode.js';
3
- import { positionLocal } from './PositionNode.js';
4
- import { nodeProxy, vec3, mat3, mat4, int, ivec2, float, Fn } from '../shadernode/ShaderNode.js';
1
+ import Node from '../core/Node.js';
2
+ import { normalLocal } from './Normal.js';
3
+ import { positionLocal } from './Position.js';
4
+ import { nodeProxy, vec3, mat3, mat4, int, ivec2, float, Fn } from '../tsl/TSLBase.js';
5
5
  import { textureLoad } from './TextureNode.js';
6
6
  import { textureSize } from './TextureSizeNode.js';
7
- import { tangentLocal } from './TangentNode.js';
7
+ import { tangentLocal } from './Tangent.js';
8
8
  import { instanceIndex, drawIndex } from '../core/IndexNode.js';
9
-
9
+ import { varyingProperty } from '../core/PropertyNode.js';
10
+
11
+ /**
12
+ * This node implements the vertex shader logic which is required
13
+ * when rendering 3D objects via batching. `BatchNode` must be used
14
+ * with instances of {@link BatchedMesh}.
15
+ *
16
+ * @augments Node
17
+ */
10
18
  class BatchNode extends Node {
11
19
 
20
+ static get type() {
21
+
22
+ return 'BatchNode';
23
+
24
+ }
25
+
26
+ /**
27
+ * Constructs a new batch node.
28
+ *
29
+ * @param {BatchedMesh} batchMesh - A reference to batched mesh.
30
+ */
12
31
  constructor( batchMesh ) {
13
32
 
14
33
  super( 'void' );
15
34
 
35
+ /**
36
+ * A reference to batched mesh.
37
+ *
38
+ * @type {BatchedMesh}
39
+ */
16
40
  this.batchMesh = batchMesh;
17
41
 
18
-
19
- this.instanceColorNode = null;
20
-
42
+ /**
43
+ * The batching index node.
44
+ *
45
+ * @type {?IndexNode}
46
+ * @default null
47
+ */
21
48
  this.batchingIdNode = null;
22
49
 
23
50
  }
24
51
 
52
+ /**
53
+ * Setups the internal buffers and nodes and assigns the transformed vertex data
54
+ * to predefined node variables for accumulation. That follows the same patterns
55
+ * like with morph and skinning nodes.
56
+ *
57
+ * @param {NodeBuilder} builder - The current node builder.
58
+ */
25
59
  setup( builder ) {
26
60
 
27
- // POSITION
28
-
29
61
  if ( this.batchingIdNode === null ) {
30
62
 
31
63
  if ( builder.getDrawIndex() === null ) {
@@ -42,9 +74,9 @@ class BatchNode extends Node {
42
74
 
43
75
  const getIndirectIndex = Fn( ( [ id ] ) => {
44
76
 
45
- const size = textureSize( textureLoad( this.batchMesh._indirectTexture ), 0 );
46
- const x = int( id ).remainder( int( size ) );
47
- const y = int( id ).div( int( size ) );
77
+ const size = int( textureSize( textureLoad( this.batchMesh._indirectTexture ), 0 ) );
78
+ const x = int( id ).modInt( size );
79
+ const y = int( id ).div( size );
48
80
  return textureLoad( this.batchMesh._indirectTexture, ivec2( x, y ) ).x;
49
81
 
50
82
  } ).setLayout( {
@@ -55,20 +87,49 @@ class BatchNode extends Node {
55
87
  ]
56
88
  } );
57
89
 
58
- const matriceTexture = this.batchMesh._matricesTexture;
90
+ const indirectId = getIndirectIndex( int( this.batchingIdNode ) );
59
91
 
60
- const size = textureSize( textureLoad( matriceTexture ), 0 );
61
- const j = float( getIndirectIndex( int( this.batchingIdNode ) ) ).mul( 4 ).toVar();
92
+ const matricesTexture = this.batchMesh._matricesTexture;
62
93
 
63
- const x = int( j.mod( size ) );
64
- const y = int( j ).div( int( size ) );
94
+ const size = textureSize( textureLoad( matricesTexture ), 0 );
95
+ const j = float( indirectId ).mul( 4 ).toInt().toVar();
96
+
97
+ const x = j.modInt( size );
98
+ const y = j.div( int( size ) );
65
99
  const batchingMatrix = mat4(
66
- textureLoad( matriceTexture, ivec2( x, y ) ),
67
- textureLoad( matriceTexture, ivec2( x.add( 1 ), y ) ),
68
- textureLoad( matriceTexture, ivec2( x.add( 2 ), y ) ),
69
- textureLoad( matriceTexture, ivec2( x.add( 3 ), y ) )
100
+ textureLoad( matricesTexture, ivec2( x, y ) ),
101
+ textureLoad( matricesTexture, ivec2( x.add( 1 ), y ) ),
102
+ textureLoad( matricesTexture, ivec2( x.add( 2 ), y ) ),
103
+ textureLoad( matricesTexture, ivec2( x.add( 3 ), y ) )
70
104
  );
71
105
 
106
+
107
+ const colorsTexture = this.batchMesh._colorsTexture;
108
+
109
+ if ( colorsTexture !== null ) {
110
+
111
+ const getBatchingColor = Fn( ( [ id ] ) => {
112
+
113
+ const size = textureSize( textureLoad( colorsTexture ), 0 ).x;
114
+ const j = id;
115
+ const x = j.modInt( size );
116
+ const y = j.div( size );
117
+ return textureLoad( colorsTexture, ivec2( x, y ) ).rgb;
118
+
119
+ } ).setLayout( {
120
+ name: 'getBatchingColor',
121
+ type: 'vec3',
122
+ inputs: [
123
+ { name: 'id', type: 'int' }
124
+ ]
125
+ } );
126
+
127
+ const color = getBatchingColor( indirectId );
128
+
129
+ varyingProperty( 'vec3', 'vBatchColor' ).assign( color );
130
+
131
+ }
132
+
72
133
  const bm = mat3( batchingMatrix );
73
134
 
74
135
  positionLocal.assign( batchingMatrix.mul( positionLocal ) );
@@ -91,6 +152,12 @@ class BatchNode extends Node {
91
152
 
92
153
  export default BatchNode;
93
154
 
94
- export const batch = nodeProxy( BatchNode );
95
-
96
- addNodeClass( 'batch', BatchNode );
155
+ /**
156
+ * TSL function for creating a batch node.
157
+ *
158
+ * @tsl
159
+ * @function
160
+ * @param {BatchedMesh} batchMesh - A reference to batched mesh.
161
+ * @returns {BatchNode}
162
+ */
163
+ export const batch = /*@__PURE__*/ nodeProxy( BatchNode );
@@ -0,0 +1,54 @@
1
+ import { varying } from '../core/VaryingNode.js';
2
+ import { cameraViewMatrix } from './Camera.js';
3
+ import { normalGeometry, normalLocal, normalView, normalWorld, transformedNormalView } from './Normal.js';
4
+ import { tangentGeometry, tangentLocal, tangentView, tangentWorld, transformedTangentView } from './Tangent.js';
5
+
6
+ const getBitangent = ( crossNormalTangent ) => crossNormalTangent.mul( tangentGeometry.w ).xyz;
7
+
8
+ /**
9
+ * TSL object that represents the bitangent attribute of the current rendered object.
10
+ *
11
+ * @tsl
12
+ * @type {Node<vec3>}
13
+ */
14
+ export const bitangentGeometry = /*@__PURE__*/ varying( getBitangent( normalGeometry.cross( tangentGeometry ) ), 'v_bitangentGeometry' ).normalize().toVar( 'bitangentGeometry' );
15
+
16
+ /**
17
+ * TSL object that represents the vertex bitangent in local space of the current rendered object.
18
+ *
19
+ * @tsl
20
+ * @type {Node<vec3>}
21
+ */
22
+ export const bitangentLocal = /*@__PURE__*/ varying( getBitangent( normalLocal.cross( tangentLocal ) ), 'v_bitangentLocal' ).normalize().toVar( 'bitangentLocal' );
23
+
24
+ /**
25
+ * TSL object that represents the vertex bitangent in view space of the current rendered object.
26
+ *
27
+ * @tsl
28
+ * @type {Node<vec4>}
29
+ */
30
+ export const bitangentView = /*@__PURE__*/ varying( getBitangent( normalView.cross( tangentView ) ), 'v_bitangentView' ).normalize().toVar( 'bitangentView' );
31
+
32
+ /**
33
+ * TSL object that represents the vertex bitangent in world space of the current rendered object.
34
+ *
35
+ * @tsl
36
+ * @type {Node<vec4>}
37
+ */
38
+ export const bitangentWorld = /*@__PURE__*/ varying( getBitangent( normalWorld.cross( tangentWorld ) ), 'v_bitangentWorld' ).normalize().toVar( 'bitangentWorld' );
39
+
40
+ /**
41
+ * TSL object that represents the transformed vertex bitangent in view space of the current rendered object.
42
+ *
43
+ * @tsl
44
+ * @type {Node<vec4>}
45
+ */
46
+ export const transformedBitangentView = /*@__PURE__*/ getBitangent( transformedNormalView.cross( transformedTangentView ) ).normalize().toVar( 'transformedBitangentView' );
47
+
48
+ /**
49
+ * TSL object that represents the transformed vertex bitangent in world space of the current rendered object.
50
+ *
51
+ * @tsl
52
+ * @type {Node<vec4>}
53
+ */
54
+ export const transformedBitangentWorld = /*@__PURE__*/ transformedBitangentView.transformDirection( cameraViewMatrix ).normalize().toVar( 'transformedBitangentWorld' );
@@ -1,29 +1,117 @@
1
1
  import InputNode from '../core/InputNode.js';
2
- import { addNodeClass } from '../core/Node.js';
2
+ import { nodeObject, addMethodChaining } from '../tsl/TSLCore.js';
3
3
  import { varying } from '../core/VaryingNode.js';
4
- import { nodeObject, addNodeElement } from '../shadernode/ShaderNode.js';
5
4
 
6
5
  import { InterleavedBufferAttribute } from '../../core/InterleavedBufferAttribute.js';
7
6
  import { InterleavedBuffer } from '../../core/InterleavedBuffer.js';
8
7
  import { StaticDrawUsage, DynamicDrawUsage } from '../../constants.js';
9
8
 
9
+ /**
10
+ * In earlier `three.js` versions it was only possible to define attribute data
11
+ * on geometry level. With `BufferAttributeNode`, it is also possible to do this
12
+ * on the node level.
13
+ * ```js
14
+ * const geometry = new THREE.PlaneGeometry();
15
+ * const positionAttribute = geometry.getAttribute( 'position' );
16
+ *
17
+ * const colors = [];
18
+ * for ( let i = 0; i < position.count; i ++ ) {
19
+ * colors.push( 1, 0, 0 );
20
+ * }
21
+ *
22
+ * material.colorNode = bufferAttribute( new THREE.Float32BufferAttribute( colors, 3 ) );
23
+ * ```
24
+ * This new approach is especially interesting when geometry data are generated via
25
+ * compute shaders. The below line converts a storage buffer into an attribute node.
26
+ * ```js
27
+ * material.positionNode = positionBuffer.toAttribute();
28
+ * ```
29
+ * @augments InputNode
30
+ */
10
31
  class BufferAttributeNode extends InputNode {
11
32
 
33
+ static get type() {
34
+
35
+ return 'BufferAttributeNode';
36
+
37
+ }
38
+
39
+ /**
40
+ * Constructs a new buffer attribute node.
41
+ *
42
+ * @param {BufferAttribute|InterleavedBuffer|TypedArray} value - The attribute data.
43
+ * @param {?string} [bufferType=null] - The buffer type (e.g. `'vec3'`).
44
+ * @param {number} [bufferStride=0] - The buffer stride.
45
+ * @param {number} [bufferOffset=0] - The buffer offset.
46
+ */
12
47
  constructor( value, bufferType = null, bufferStride = 0, bufferOffset = 0 ) {
13
48
 
14
49
  super( value, bufferType );
15
50
 
51
+ /**
52
+ * This flag can be used for type testing.
53
+ *
54
+ * @type {boolean}
55
+ * @readonly
56
+ * @default true
57
+ */
16
58
  this.isBufferNode = true;
17
59
 
60
+ /**
61
+ * The buffer type (e.g. `'vec3'`).
62
+ *
63
+ * @type {?string}
64
+ * @default null
65
+ */
18
66
  this.bufferType = bufferType;
67
+
68
+ /**
69
+ * The buffer stride.
70
+ *
71
+ * @type {number}
72
+ * @default 0
73
+ */
19
74
  this.bufferStride = bufferStride;
75
+
76
+ /**
77
+ * The buffer offset.
78
+ *
79
+ * @type {number}
80
+ * @default 0
81
+ */
20
82
  this.bufferOffset = bufferOffset;
21
83
 
84
+ /**
85
+ * The usage property. Set this to `THREE.DynamicDrawUsage` via `.setUsage()`,
86
+ * if you are planning to update the attribute data per frame.
87
+ *
88
+ * @type {number}
89
+ * @default StaticDrawUsage
90
+ */
22
91
  this.usage = StaticDrawUsage;
92
+
93
+ /**
94
+ * Whether the attribute is instanced or not.
95
+ *
96
+ * @type {boolean}
97
+ * @default false
98
+ */
23
99
  this.instanced = false;
24
100
 
101
+ /**
102
+ * A reference to the buffer attribute.
103
+ *
104
+ * @type {?BufferAttribute}
105
+ * @default null
106
+ */
25
107
  this.attribute = null;
26
108
 
109
+ /**
110
+ * `BufferAttributeNode` sets this property to `true` by default.
111
+ *
112
+ * @type {boolean}
113
+ * @default true
114
+ */
27
115
  this.global = true;
28
116
 
29
117
  if ( value && value.isBufferAttribute === true ) {
@@ -36,6 +124,13 @@ class BufferAttributeNode extends InputNode {
36
124
 
37
125
  }
38
126
 
127
+ /**
128
+ * This method is overwritten since the attribute data might be shared
129
+ * and thus the hash should be shared as well.
130
+ *
131
+ * @param {NodeBuilder} builder - The current node builder.
132
+ * @return {string} The hash.
133
+ */
39
134
  getHash( builder ) {
40
135
 
41
136
  if ( this.bufferStride === 0 && this.bufferOffset === 0 ) {
@@ -60,6 +155,13 @@ class BufferAttributeNode extends InputNode {
60
155
 
61
156
  }
62
157
 
158
+ /**
159
+ * This method is overwritten since the node type is inferred from
160
+ * the buffer attribute.
161
+ *
162
+ * @param {NodeBuilder} builder - The current node builder.
163
+ * @return {string} The node type.
164
+ */
63
165
  getNodeType( builder ) {
64
166
 
65
167
  if ( this.bufferType === null ) {
@@ -72,6 +174,13 @@ class BufferAttributeNode extends InputNode {
72
174
 
73
175
  }
74
176
 
177
+ /**
178
+ * Depending on which value was passed to the node, `setup()` behaves
179
+ * differently. If no instance of `BufferAttribute` was passed, the method
180
+ * creates an internal attribute and configures it respectively.
181
+ *
182
+ * @param {NodeBuilder} builder - The current node builder.
183
+ */
75
184
  setup( builder ) {
76
185
 
77
186
  if ( this.attribute !== null ) return;
@@ -92,6 +201,12 @@ class BufferAttributeNode extends InputNode {
92
201
 
93
202
  }
94
203
 
204
+ /**
205
+ * Generates the code snippet of the buffer attribute node.
206
+ *
207
+ * @param {NodeBuilder} builder - The current node builder.
208
+ * @return {string} The generated code snippet.
209
+ */
95
210
  generate( builder ) {
96
211
 
97
212
  const nodeType = this.getNodeType( builder );
@@ -119,12 +234,24 @@ class BufferAttributeNode extends InputNode {
119
234
 
120
235
  }
121
236
 
237
+ /**
238
+ * Overwrites the default implementation to return a fixed value `'bufferAttribute'`.
239
+ *
240
+ * @param {NodeBuilder} builder - The current node builder.
241
+ * @return {string} The input type.
242
+ */
122
243
  getInputType( /*builder*/ ) {
123
244
 
124
245
  return 'bufferAttribute';
125
246
 
126
247
  }
127
248
 
249
+ /**
250
+ * Sets the `usage` property to the given value.
251
+ *
252
+ * @param {number} value - The usage to set.
253
+ * @return {BufferAttributeNode} A reference to this node.
254
+ */
128
255
  setUsage( value ) {
129
256
 
130
257
  this.usage = value;
@@ -139,6 +266,12 @@ class BufferAttributeNode extends InputNode {
139
266
 
140
267
  }
141
268
 
269
+ /**
270
+ * Sets the `instanced` property to the given value.
271
+ *
272
+ * @param {boolean} value - The value to set.
273
+ * @return {BufferAttributeNode} A reference to this node.
274
+ */
142
275
  setInstanced( value ) {
143
276
 
144
277
  this.instanced = value;
@@ -151,12 +284,57 @@ class BufferAttributeNode extends InputNode {
151
284
 
152
285
  export default BufferAttributeNode;
153
286
 
154
- export const bufferAttribute = ( array, type, stride, offset ) => nodeObject( new BufferAttributeNode( array, type, stride, offset ) );
155
- export const dynamicBufferAttribute = ( array, type, stride, offset ) => bufferAttribute( array, type, stride, offset ).setUsage( DynamicDrawUsage );
156
-
157
- export const instancedBufferAttribute = ( array, type, stride, offset ) => bufferAttribute( array, type, stride, offset ).setInstanced( true );
158
- export const instancedDynamicBufferAttribute = ( array, type, stride, offset ) => dynamicBufferAttribute( array, type, stride, offset ).setInstanced( true );
159
-
160
- addNodeElement( 'toAttribute', ( bufferNode ) => bufferAttribute( bufferNode.value ) );
161
-
162
- addNodeClass( 'BufferAttributeNode', BufferAttributeNode );
287
+ /**
288
+ * TSL function for creating a buffer attribute node.
289
+ *
290
+ * @tsl
291
+ * @function
292
+ * @param {BufferAttribute|InterleavedBuffer|TypedArray} array - The attribute data.
293
+ * @param {?string} [type=null] - The buffer type (e.g. `'vec3'`).
294
+ * @param {number} [stride=0] - The buffer stride.
295
+ * @param {number} [offset=0] - The buffer offset.
296
+ * @returns {BufferAttributeNode}
297
+ */
298
+ export const bufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => nodeObject( new BufferAttributeNode( array, type, stride, offset ) );
299
+
300
+ /**
301
+ * TSL function for creating a buffer attribute node but with dynamic draw usage.
302
+ * Use this function if attribute data are updated per frame.
303
+ *
304
+ * @tsl
305
+ * @function
306
+ * @param {BufferAttribute|InterleavedBuffer|TypedArray} array - The attribute data.
307
+ * @param {?string} [type=null] - The buffer type (e.g. `'vec3'`).
308
+ * @param {number} [stride=0] - The buffer stride.
309
+ * @param {number} [offset=0] - The buffer offset.
310
+ * @returns {BufferAttributeNode}
311
+ */
312
+ export const dynamicBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => bufferAttribute( array, type, stride, offset ).setUsage( DynamicDrawUsage );
313
+
314
+ /**
315
+ * TSL function for creating a buffer attribute node but with enabled instancing
316
+ *
317
+ * @tsl
318
+ * @function
319
+ * @param {BufferAttribute|InterleavedBuffer|TypedArray} array - The attribute data.
320
+ * @param {?string} [type=null] - The buffer type (e.g. `'vec3'`).
321
+ * @param {number} [stride=0] - The buffer stride.
322
+ * @param {number} [offset=0] - The buffer offset.
323
+ * @returns {BufferAttributeNode}
324
+ */
325
+ export const instancedBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => bufferAttribute( array, type, stride, offset ).setInstanced( true );
326
+
327
+ /**
328
+ * TSL function for creating a buffer attribute node but with dynamic draw usage and enabled instancing
329
+ *
330
+ * @tsl
331
+ * @function
332
+ * @param {BufferAttribute|InterleavedBuffer|TypedArray} array - The attribute data.
333
+ * @param {?string} [type=null] - The buffer type (e.g. `'vec3'`).
334
+ * @param {number} [stride=0] - The buffer stride.
335
+ * @param {number} [offset=0] - The buffer offset.
336
+ * @returns {BufferAttributeNode}
337
+ */
338
+ export const instancedDynamicBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => dynamicBufferAttribute( array, type, stride, offset ).setInstanced( true );
339
+
340
+ addMethodChaining( 'toAttribute', ( bufferNode ) => bufferAttribute( bufferNode.value ) );
@@ -1,26 +1,83 @@
1
1
  import UniformNode from '../core/UniformNode.js';
2
- import { addNodeClass } from '../core/Node.js';
3
- import { nodeObject } from '../shadernode/ShaderNode.js';
4
-
2
+ import { nodeObject } from '../tsl/TSLBase.js';
3
+
4
+ /**
5
+ * A special type of uniform node which represents array-like data
6
+ * as uniform buffers. The access usually happens via `element()`
7
+ * which returns an instance of {@link ArrayElementNode}. For example:
8
+ *
9
+ * ```js
10
+ * const bufferNode = buffer( array, 'mat4', count );
11
+ * const matrixNode = bufferNode.element( index ); // access a matrix from the buffer
12
+ * ```
13
+ * In general, it is recommended to use the more managed {@link UniformArrayNode}
14
+ * since it handles more input types and automatically cares about buffer paddings.
15
+ *
16
+ * @augments UniformNode
17
+ */
5
18
  class BufferNode extends UniformNode {
6
19
 
20
+ static get type() {
21
+
22
+ return 'BufferNode';
23
+
24
+ }
25
+
26
+ /**
27
+ * Constructs a new buffer node.
28
+ *
29
+ * @param {Array<number>} value - Array-like buffer data.
30
+ * @param {string} bufferType - The data type of the buffer.
31
+ * @param {number} [bufferCount=0] - The count of buffer elements.
32
+ */
7
33
  constructor( value, bufferType, bufferCount = 0 ) {
8
34
 
9
35
  super( value, bufferType );
10
36
 
37
+ /**
38
+ * This flag can be used for type testing.
39
+ *
40
+ * @type {boolean}
41
+ * @readonly
42
+ * @default true
43
+ */
11
44
  this.isBufferNode = true;
12
45
 
46
+ /**
47
+ * The data type of the buffer.
48
+ *
49
+ * @type {string}
50
+ */
13
51
  this.bufferType = bufferType;
52
+
53
+ /**
54
+ * The uniform node that holds the value of the reference node.
55
+ *
56
+ * @type {number}
57
+ * @default 0
58
+ */
14
59
  this.bufferCount = bufferCount;
15
60
 
16
61
  }
17
62
 
63
+ /**
64
+ * The data type of the buffer elements.
65
+ *
66
+ * @param {NodeBuilder} builder - The current node builder.
67
+ * @return {string} The element type.
68
+ */
18
69
  getElementType( builder ) {
19
70
 
20
71
  return this.getNodeType( builder );
21
72
 
22
73
  }
23
74
 
75
+ /**
76
+ * Overwrites the default implementation to return a fixed value `'buffer'`.
77
+ *
78
+ * @param {NodeBuilder} builder - The current node builder.
79
+ * @return {string} The input type.
80
+ */
24
81
  getInputType( /*builder*/ ) {
25
82
 
26
83
  return 'buffer';
@@ -31,6 +88,14 @@ class BufferNode extends UniformNode {
31
88
 
32
89
  export default BufferNode;
33
90
 
91
+ /**
92
+ * TSL function for creating a buffer node.
93
+ *
94
+ * @tsl
95
+ * @function
96
+ * @param {Array} value - Array-like buffer data.
97
+ * @param {string} type - The data type of a buffer element.
98
+ * @param {number} count - The count of buffer elements.
99
+ * @returns {BufferNode}
100
+ */
34
101
  export const buffer = ( value, type, count ) => nodeObject( new BufferNode( value, type, count ) );
35
-
36
- addNodeClass( 'BufferNode', BufferNode );