@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
@@ -1,37 +1,146 @@
1
1
  import UniformNode, { uniform } from '../core/UniformNode.js';
2
- import { uv } from './UVNode.js';
2
+ import { uv } from './UV.js';
3
3
  import { textureSize } from './TextureSizeNode.js';
4
- import { colorSpaceToLinear } from '../display/ColorSpaceNode.js';
4
+ import { colorSpaceToWorking } from '../display/ColorSpaceNode.js';
5
5
  import { expression } from '../code/ExpressionNode.js';
6
- import { addNodeClass } from '../core/Node.js';
7
6
  import { maxMipLevel } from '../utils/MaxMipLevelNode.js';
8
- import { addNodeElement, nodeProxy, vec3, nodeObject } from '../shadernode/ShaderNode.js';
7
+ import { nodeProxy, vec3, nodeObject, int } from '../tsl/TSLBase.js';
9
8
  import { NodeUpdateType } from '../core/constants.js';
10
9
 
11
10
  import { IntType, UnsignedIntType } from '../../constants.js';
12
11
 
12
+ /**
13
+ * This type of uniform node represents a 2D texture.
14
+ *
15
+ * @augments UniformNode
16
+ */
13
17
  class TextureNode extends UniformNode {
14
18
 
19
+ static get type() {
20
+
21
+ return 'TextureNode';
22
+
23
+ }
24
+
25
+ /**
26
+ * Constructs a new texture node.
27
+ *
28
+ * @param {Texture} value - The texture.
29
+ * @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
30
+ * @param {?Node<int>} [levelNode=null] - The level node.
31
+ * @param {?Node<float>} [biasNode=null] - The bias node.
32
+ */
15
33
  constructor( value, uvNode = null, levelNode = null, biasNode = null ) {
16
34
 
17
35
  super( value );
18
36
 
37
+ /**
38
+ * This flag can be used for type testing.
39
+ *
40
+ * @type {boolean}
41
+ * @readonly
42
+ * @default true
43
+ */
19
44
  this.isTextureNode = true;
20
45
 
46
+ /**
47
+ * Represents the texture coordinates.
48
+ *
49
+ * @type {?Node<vec2|vec3>}
50
+ * @default null
51
+ */
21
52
  this.uvNode = uvNode;
53
+
54
+ /**
55
+ * Represents the mip level that should be selected.
56
+ *
57
+ * @type {?Node<int>}
58
+ * @default null
59
+ */
22
60
  this.levelNode = levelNode;
61
+
62
+ /**
63
+ * Represents the bias to be applied during level-of-detail computation.
64
+ *
65
+ * @type {?Node<float>}
66
+ * @default null
67
+ */
23
68
  this.biasNode = biasNode;
69
+
70
+ /**
71
+ * Represents a reference value a texture sample is compared to.
72
+ *
73
+ * @type {?Node<float>}
74
+ * @default null
75
+ */
24
76
  this.compareNode = null;
77
+
78
+ /**
79
+ * When using texture arrays, the depth node defines the layer to select.
80
+ *
81
+ * @type {?Node<int>}
82
+ * @default null
83
+ */
25
84
  this.depthNode = null;
85
+
86
+ /**
87
+ * When defined, a texture is sampled using explicit gradients.
88
+ *
89
+ * @type {?Array<Node<vec2>>}
90
+ * @default null
91
+ */
26
92
  this.gradNode = null;
27
93
 
94
+ /**
95
+ * Whether texture values should be sampled or fetched.
96
+ *
97
+ * @type {boolean}
98
+ * @default true
99
+ */
28
100
  this.sampler = true;
101
+
102
+ /**
103
+ * Whether the uv transformation matrix should be
104
+ * automatically updated or not. Use `setUpdateMatrix()`
105
+ * if you want to change the value of the property.
106
+ *
107
+ * @type {boolean}
108
+ * @default false
109
+ */
29
110
  this.updateMatrix = false;
111
+
112
+ /**
113
+ * By default the `update()` method is not executed. `setUpdateMatrix()`
114
+ * sets the value to `frame` when the uv transformation matrix should
115
+ * automatically be updated.
116
+ *
117
+ * @type {string}
118
+ * @default 'none'
119
+ */
30
120
  this.updateType = NodeUpdateType.NONE;
31
121
 
122
+ /**
123
+ * The reference node.
124
+ *
125
+ * @type {?Node}
126
+ * @default null
127
+ */
32
128
  this.referenceNode = null;
33
129
 
130
+ /**
131
+ * The texture value is stored in a private property.
132
+ *
133
+ * @private
134
+ * @type {Texture}
135
+ */
34
136
  this._value = value;
137
+
138
+ /**
139
+ * The uniform node that represents the uv transformation matrix.
140
+ *
141
+ * @private
142
+ * @type {?UniformNode<mat3>}
143
+ */
35
144
  this._matrixUniform = null;
36
145
 
37
146
  this.setUpdateMatrix( uvNode === null );
@@ -52,18 +161,35 @@ class TextureNode extends UniformNode {
52
161
 
53
162
  }
54
163
 
164
+ /**
165
+ * The texture value.
166
+ *
167
+ * @type {Texture}
168
+ */
55
169
  get value() {
56
170
 
57
171
  return this.referenceNode ? this.referenceNode.value : this._value;
58
172
 
59
173
  }
60
174
 
175
+ /**
176
+ * Overwritten since the uniform hash is defined by the texture's UUID.
177
+ *
178
+ * @param {NodeBuilder} builder - The current node builder.
179
+ * @return {string} The uniform hash.
180
+ */
61
181
  getUniformHash( /*builder*/ ) {
62
182
 
63
183
  return this.value.uuid;
64
184
 
65
185
  }
66
186
 
187
+ /**
188
+ * Overwritten since the node type is inferred from the texture type.
189
+ *
190
+ * @param {NodeBuilder} builder - The current node builder.
191
+ * @return {string} The node type.
192
+ */
67
193
  getNodeType( /*builder*/ ) {
68
194
 
69
195
  if ( this.value.isDepthTexture === true ) return 'float';
@@ -82,49 +208,93 @@ class TextureNode extends UniformNode {
82
208
 
83
209
  }
84
210
 
211
+ /**
212
+ * Overwrites the default implementation to return a fixed value `'texture'`.
213
+ *
214
+ * @param {NodeBuilder} builder - The current node builder.
215
+ * @return {string} The input type.
216
+ */
85
217
  getInputType( /*builder*/ ) {
86
218
 
87
219
  return 'texture';
88
220
 
89
221
  }
90
222
 
223
+ /**
224
+ * Returns a default uvs based on the current texture's channel.
225
+ *
226
+ * @return {AttributeNode<vec2>} The default uvs.
227
+ */
91
228
  getDefaultUV() {
92
229
 
93
230
  return uv( this.value.channel );
94
231
 
95
232
  }
96
233
 
234
+ /**
235
+ * Overwritten to always return the texture reference of the node.
236
+ *
237
+ * @param {any} state - This method can be invocated in different contexts so `state` can refer to any object type.
238
+ * @return {Texture} The texture reference.
239
+ */
97
240
  updateReference( /*state*/ ) {
98
241
 
99
242
  return this.value;
100
243
 
101
244
  }
102
245
 
246
+ /**
247
+ * Transforms the given uv node with the texture transformation matrix.
248
+ *
249
+ * @param {Node} uvNode - The uv node to transform.
250
+ * @return {Node} The transformed uv node.
251
+ */
103
252
  getTransformedUV( uvNode ) {
104
253
 
105
254
  if ( this._matrixUniform === null ) this._matrixUniform = uniform( this.value.matrix );
106
255
 
107
256
  return this._matrixUniform.mul( vec3( uvNode, 1 ) ).xy;
108
257
 
109
-
110
258
  }
111
259
 
260
+ /**
261
+ * Defines whether the uv transformation matrix should automatically be updated or not.
262
+ *
263
+ * @param {boolean} value - The update toggle.
264
+ * @return {TextureNode} A reference to this node.
265
+ */
112
266
  setUpdateMatrix( value ) {
113
267
 
114
268
  this.updateMatrix = value;
115
- this.updateType = value ? NodeUpdateType.FRAME : NodeUpdateType.NONE;
269
+ this.updateType = value ? NodeUpdateType.RENDER : NodeUpdateType.NONE;
116
270
 
117
271
  return this;
118
272
 
119
273
  }
120
274
 
275
+ /**
276
+ * Setups the uv node. Depending on the backend as well as texture's image and type, it might be necessary
277
+ * to modify the uv node for correct sampling.
278
+ *
279
+ * @param {NodeBuilder} builder - The current node builder.
280
+ * @param {Node} uvNode - The uv node to setup.
281
+ * @return {Node} The updated uv node.
282
+ */
121
283
  setupUV( builder, uvNode ) {
122
284
 
123
285
  const texture = this.value;
124
286
 
125
- if ( builder.isFlipY() && ( texture.isRenderTargetTexture === true || texture.isFramebufferTexture === true || texture.isDepthTexture === true ) ) {
287
+ if ( builder.isFlipY() && ( ( texture.image instanceof ImageBitmap && texture.flipY === true ) || texture.isRenderTargetTexture === true || texture.isFramebufferTexture === true || texture.isDepthTexture === true ) ) {
288
+
289
+ if ( this.sampler ) {
126
290
 
127
- uvNode = uvNode.setY( uvNode.y.oneMinus() );
291
+ uvNode = uvNode.flipY();
292
+
293
+ } else {
294
+
295
+ uvNode = uvNode.setY( int( textureSize( this, this.levelNode ).y ).sub( uvNode.y ).sub( 1 ) );
296
+
297
+ }
128
298
 
129
299
  }
130
300
 
@@ -132,6 +302,11 @@ class TextureNode extends UniformNode {
132
302
 
133
303
  }
134
304
 
305
+ /**
306
+ * Setups texture node by preparing the internal nodes for code generation.
307
+ *
308
+ * @param {NodeBuilder} builder - The current node builder.
309
+ */
135
310
  setup( builder ) {
136
311
 
137
312
  const properties = builder.getNodeProperties( this );
@@ -139,6 +314,16 @@ class TextureNode extends UniformNode {
139
314
 
140
315
  //
141
316
 
317
+ const texture = this.value;
318
+
319
+ if ( ! texture || texture.isTexture !== true ) {
320
+
321
+ throw new Error( 'THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().' );
322
+
323
+ }
324
+
325
+ //
326
+
142
327
  let uvNode = this.uvNode;
143
328
 
144
329
  if ( ( uvNode === null || builder.context.forceUVContext === true ) && builder.context.getUV ) {
@@ -178,12 +363,32 @@ class TextureNode extends UniformNode {
178
363
 
179
364
  }
180
365
 
366
+ /**
367
+ * Generates the uv code snippet.
368
+ *
369
+ * @param {NodeBuilder} builder - The current node builder.
370
+ * @param {Node} uvNode - The uv node to generate code for.
371
+ * @return {string} The generated code snippet.
372
+ */
181
373
  generateUV( builder, uvNode ) {
182
374
 
183
375
  return uvNode.build( builder, this.sampler === true ? 'vec2' : 'ivec2' );
184
376
 
185
377
  }
186
378
 
379
+ /**
380
+ * Generates the snippet for the texture sampling.
381
+ *
382
+ * @param {NodeBuilder} builder - The current node builder.
383
+ * @param {string} textureProperty - The texture property.
384
+ * @param {string} uvSnippet - The uv snippet.
385
+ * @param {?string} levelSnippet - The level snippet.
386
+ * @param {?string} biasSnippet - The bias snippet.
387
+ * @param {?string} depthSnippet - The depth snippet.
388
+ * @param {?string} compareSnippet - The compare snippet.
389
+ * @param {?Array<string>} gradSnippet - The grad snippet.
390
+ * @return {string} The generated code snippet.
391
+ */
187
392
  generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet ) {
188
393
 
189
394
  const texture = this.value;
@@ -220,18 +425,18 @@ class TextureNode extends UniformNode {
220
425
 
221
426
  }
222
427
 
428
+ /**
429
+ * Generates the code snippet of the texture node.
430
+ *
431
+ * @param {NodeBuilder} builder - The current node builder.
432
+ * @param {string} output - The current output.
433
+ * @return {string} The generated code snippet.
434
+ */
223
435
  generate( builder, output ) {
224
436
 
225
- const properties = builder.getNodeProperties( this );
226
-
227
437
  const texture = this.value;
228
438
 
229
- if ( ! texture || texture.isTexture !== true ) {
230
-
231
- throw new Error( 'TextureNode: Need a three.js texture.' );
232
-
233
- }
234
-
439
+ const properties = builder.getNodeProperties( this );
235
440
  const textureProperty = super.generate( builder, 'property' );
236
441
 
237
442
  if ( output === 'sampler' ) {
@@ -265,7 +470,7 @@ class TextureNode extends UniformNode {
265
470
 
266
471
  const snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet );
267
472
 
268
- builder.addLineFlowCode( `${propertyName} = ${snippet}` );
473
+ builder.addLineFlowCode( `${propertyName} = ${snippet}`, this );
269
474
 
270
475
  nodeData.snippet = snippet;
271
476
  nodeData.propertyName = propertyName;
@@ -275,9 +480,9 @@ class TextureNode extends UniformNode {
275
480
  let snippet = propertyName;
276
481
  const nodeType = this.getNodeType( builder );
277
482
 
278
- if ( builder.needsColorSpaceToLinear( texture ) ) {
483
+ if ( builder.needsToWorkingColorSpace( texture ) ) {
279
484
 
280
- snippet = colorSpaceToLinear( expression( snippet, nodeType ), texture.colorSpace ).setup( builder ).build( builder, nodeType );
485
+ snippet = colorSpaceToWorking( expression( snippet, nodeType ), texture.colorSpace ).setup( builder ).build( builder, nodeType );
281
486
 
282
487
  }
283
488
 
@@ -287,6 +492,12 @@ class TextureNode extends UniformNode {
287
492
 
288
493
  }
289
494
 
495
+ /**
496
+ * Sets the sampler value.
497
+ *
498
+ * @param {boolean} value - The sampler value to set.
499
+ * @return {TextureNode} A reference to this texture node.
500
+ */
290
501
  setSampler( value ) {
291
502
 
292
503
  this.sampler = value;
@@ -295,6 +506,11 @@ class TextureNode extends UniformNode {
295
506
 
296
507
  }
297
508
 
509
+ /**
510
+ * Returns the sampler value.
511
+ *
512
+ * @return {boolean} The sampler value.
513
+ */
298
514
  getSampler() {
299
515
 
300
516
  return this.sampler;
@@ -303,78 +519,141 @@ class TextureNode extends UniformNode {
303
519
 
304
520
  // @TODO: Move to TSL
305
521
 
306
- uv( uvNode ) {
522
+ /**
523
+ * @function
524
+ * @deprecated since r172. Use {@link TextureNode#sample} instead.
525
+ *
526
+ * @param {Node} uvNode - The uv node.
527
+ * @return {TextureNode} A texture node representing the texture sample.
528
+ */
529
+ uv( uvNode ) { // @deprecated, r172
530
+
531
+ console.warn( 'THREE.TextureNode: .uv() has been renamed. Use .sample() instead.' );
532
+
533
+ return this.sample( uvNode );
534
+
535
+ }
536
+
537
+ /**
538
+ * Samples the texture with the given uv node.
539
+ *
540
+ * @param {Node} uvNode - The uv node.
541
+ * @return {TextureNode} A texture node representing the texture sample.
542
+ */
543
+ sample( uvNode ) {
307
544
 
308
545
  const textureNode = this.clone();
309
546
  textureNode.uvNode = nodeObject( uvNode );
310
- textureNode.referenceNode = this;
547
+ textureNode.referenceNode = this.getSelf();
311
548
 
312
549
  return nodeObject( textureNode );
313
550
 
314
551
  }
315
552
 
553
+ /**
554
+ * Samples a blurred version of the texture by defining an internal bias.
555
+ *
556
+ * @param {Node<float>} amountNode - How blurred the texture should be.
557
+ * @return {TextureNode} A texture node representing the texture sample.
558
+ */
316
559
  blur( amountNode ) {
317
560
 
318
561
  const textureNode = this.clone();
319
562
  textureNode.biasNode = nodeObject( amountNode ).mul( maxMipLevel( textureNode ) );
320
- textureNode.referenceNode = this;
563
+ textureNode.referenceNode = this.getSelf();
321
564
 
322
565
  return nodeObject( textureNode );
323
566
 
324
567
  }
325
568
 
569
+ /**
570
+ * Samples a specific mip of the texture.
571
+ *
572
+ * @param {Node<int>} levelNode - The mip level to sample.
573
+ * @return {TextureNode} A texture node representing the texture sample.
574
+ */
326
575
  level( levelNode ) {
327
576
 
328
577
  const textureNode = this.clone();
329
578
  textureNode.levelNode = nodeObject( levelNode );
330
- textureNode.referenceNode = this;
579
+ textureNode.referenceNode = this.getSelf();
331
580
 
332
581
  return nodeObject( textureNode );
333
582
 
334
583
  }
335
584
 
585
+ /**
586
+ * Returns the texture size of the requested level.
587
+ *
588
+ * @param {Node<int>} levelNode - The level to compute the size for.
589
+ * @return {TextureSizeNode} The texture size.
590
+ */
336
591
  size( levelNode ) {
337
592
 
338
593
  return textureSize( this, levelNode );
339
594
 
340
595
  }
341
596
 
597
+ /**
598
+ * Samples the texture with the given bias.
599
+ *
600
+ * @param {Node<float>} biasNode - The bias node.
601
+ * @return {TextureNode} A texture node representing the texture sample.
602
+ */
342
603
  bias( biasNode ) {
343
604
 
344
605
  const textureNode = this.clone();
345
606
  textureNode.biasNode = nodeObject( biasNode );
346
- textureNode.referenceNode = this;
607
+ textureNode.referenceNode = this.getSelf();
347
608
 
348
609
  return nodeObject( textureNode );
349
610
 
350
611
  }
351
612
 
613
+ /**
614
+ * Samples the texture by executing a compare operation.
615
+ *
616
+ * @param {Node<float>} compareNode - The node that defines the compare value.
617
+ * @return {TextureNode} A texture node representing the texture sample.
618
+ */
352
619
  compare( compareNode ) {
353
620
 
354
621
  const textureNode = this.clone();
355
622
  textureNode.compareNode = nodeObject( compareNode );
356
- textureNode.referenceNode = this;
623
+ textureNode.referenceNode = this.getSelf();
357
624
 
358
625
  return nodeObject( textureNode );
359
626
 
360
627
  }
361
628
 
629
+ /**
630
+ * Samples the texture using an explicit gradient.
631
+ *
632
+ * @param {Node<vec2>} gradNodeX - The gradX node.
633
+ * @param {Node<vec2>} gradNodeY - The gradY node.
634
+ * @return {TextureNode} A texture node representing the texture sample.
635
+ */
362
636
  grad( gradNodeX, gradNodeY ) {
363
637
 
364
638
  const textureNode = this.clone();
365
639
  textureNode.gradNode = [ nodeObject( gradNodeX ), nodeObject( gradNodeY ) ];
366
-
367
- textureNode.referenceNode = this;
640
+ textureNode.referenceNode = this.getSelf();
368
641
 
369
642
  return nodeObject( textureNode );
370
643
 
371
644
  }
372
645
 
646
+ /**
647
+ * Samples the texture by defining a depth node.
648
+ *
649
+ * @param {Node<int>} depthNode - The depth node.
650
+ * @return {TextureNode} A texture node representing the texture sample.
651
+ */
373
652
  depth( depthNode ) {
374
653
 
375
654
  const textureNode = this.clone();
376
655
  textureNode.depthNode = nodeObject( depthNode );
377
- textureNode.referenceNode = this;
656
+ textureNode.referenceNode = this.getSelf();
378
657
 
379
658
  return nodeObject( textureNode );
380
659
 
@@ -404,6 +683,9 @@ class TextureNode extends UniformNode {
404
683
 
405
684
  }
406
685
 
686
+ /**
687
+ * The update is used to implement the update of the uv transformation matrix.
688
+ */
407
689
  update() {
408
690
 
409
691
  const texture = this.value;
@@ -419,6 +701,11 @@ class TextureNode extends UniformNode {
419
701
 
420
702
  }
421
703
 
704
+ /**
705
+ * Clones the texture node.
706
+ *
707
+ * @return {TextureNode} The cloned texture node.
708
+ */
422
709
  clone() {
423
710
 
424
711
  const newNode = new this.constructor( this.value, this.uvNode, this.levelNode, this.biasNode );
@@ -432,14 +719,40 @@ class TextureNode extends UniformNode {
432
719
 
433
720
  export default TextureNode;
434
721
 
435
- export const texture = nodeProxy( TextureNode );
722
+ /**
723
+ * TSL function for creating a texture node.
724
+ *
725
+ * @tsl
726
+ * @function
727
+ * @param {Texture} value - The texture.
728
+ * @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
729
+ * @param {?Node<int>} [levelNode=null] - The level node.
730
+ * @param {?Node<float>} [biasNode=null] - The bias node.
731
+ * @returns {TextureNode}
732
+ */
733
+ export const texture = /*@__PURE__*/ nodeProxy( TextureNode );
734
+
735
+ /**
736
+ * TSL function for creating a texture node that fetches/loads texels without interpolation.
737
+ *
738
+ * @tsl
739
+ * @function
740
+ * @param {Texture} value - The texture.
741
+ * @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
742
+ * @param {?Node<int>} [levelNode=null] - The level node.
743
+ * @param {?Node<float>} [biasNode=null] - The bias node.
744
+ * @returns {TextureNode}
745
+ */
436
746
  export const textureLoad = ( ...params ) => texture( ...params ).setSampler( false );
437
747
 
438
748
  //export const textureLevel = ( value, uv, level ) => texture( value, uv ).level( level );
439
749
 
750
+ /**
751
+ * Converts a texture or texture node to a sampler.
752
+ *
753
+ * @tsl
754
+ * @function
755
+ * @param {TextureNode|Texture} aTexture - The texture or texture node to convert.
756
+ * @returns {Node}
757
+ */
440
758
  export const sampler = ( aTexture ) => ( aTexture.isNode === true ? aTexture : texture( aTexture ) ).convert( 'sampler' );
441
-
442
- addNodeElement( 'texture', texture );
443
- //addNodeElement( 'textureLevel', textureLevel );
444
-
445
- addNodeClass( 'TextureNode', TextureNode );
@@ -1,16 +1,53 @@
1
1
  import Node from '../core/Node.js';
2
- import { addNodeClass } from '../core/Node.js';
3
- import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
2
+ import { nodeProxy } from '../tsl/TSLBase.js';
4
3
 
4
+ /**
5
+ * A node that represents the dimensions of a texture. The texture size is
6
+ * retrieved in the shader via built-in shader functions like `textureDimensions()`
7
+ * or `textureSize()`.
8
+ *
9
+ * @augments Node
10
+ */
5
11
  class TextureSizeNode extends Node {
6
12
 
13
+ static get type() {
14
+
15
+ return 'TextureSizeNode';
16
+
17
+ }
18
+
19
+ /**
20
+ * Constructs a new texture size node.
21
+ *
22
+ * @param {TextureNode} textureNode - A texture node which size should be retrieved.
23
+ * @param {?Node<int>} [levelNode=null] - A level node which defines the requested mip.
24
+ */
7
25
  constructor( textureNode, levelNode = null ) {
8
26
 
9
27
  super( 'uvec2' );
10
28
 
29
+ /**
30
+ * This flag can be used for type testing.
31
+ *
32
+ * @type {boolean}
33
+ * @readonly
34
+ * @default true
35
+ */
11
36
  this.isTextureSizeNode = true;
12
37
 
38
+ /**
39
+ * A texture node which size should be retrieved.
40
+ *
41
+ * @type {TextureNode}
42
+ */
13
43
  this.textureNode = textureNode;
44
+
45
+ /**
46
+ * A level node which defines the requested mip.
47
+ *
48
+ * @type {Node<int>}
49
+ * @default null
50
+ */
14
51
  this.levelNode = levelNode;
15
52
 
16
53
  }
@@ -18,9 +55,9 @@ class TextureSizeNode extends Node {
18
55
  generate( builder, output ) {
19
56
 
20
57
  const textureProperty = this.textureNode.build( builder, 'property' );
21
- const levelNode = this.levelNode.build( builder, 'int' );
58
+ const level = this.levelNode === null ? '0' : this.levelNode.build( builder, 'int' );
22
59
 
23
- return builder.format( `${ builder.getMethod( 'textureDimensions' ) }( ${ textureProperty }, ${ levelNode } )`, this.getNodeType( builder ), output );
60
+ return builder.format( `${ builder.getMethod( 'textureDimensions' ) }( ${ textureProperty }, ${ level } )`, this.getNodeType( builder ), output );
24
61
 
25
62
  }
26
63
 
@@ -28,8 +65,13 @@ class TextureSizeNode extends Node {
28
65
 
29
66
  export default TextureSizeNode;
30
67
 
31
- export const textureSize = nodeProxy( TextureSizeNode );
32
-
33
- addNodeElement( 'textureSize', textureSize );
34
-
35
- addNodeClass( 'TextureSizeNode', TextureSizeNode );
68
+ /**
69
+ * TSL function for creating a texture size node.
70
+ *
71
+ * @tsl
72
+ * @function
73
+ * @param {TextureNode} textureNode - A texture node which size should be retrieved.
74
+ * @param {?Node<int>} [levelNode=null] - A level node which defines the requested mip.
75
+ * @returns {TextureSizeNode}
76
+ */
77
+ export const textureSize = /*@__PURE__*/ nodeProxy( TextureSizeNode );