@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,31 @@
1
+ // Non-PURE exports list, side-effects are required here.
2
+ // TSL Base Syntax
3
+
4
+ export * from './TSLCore.js'; // float(), vec2(), vec3(), vec4(), mat3(), mat4(), Fn(), If(), element(), nodeObject(), nodeProxy(), ...
5
+ export * from '../core/ArrayNode.js'; // array(), .toArray()
6
+ export * from '../core/UniformNode.js'; // uniform()
7
+ export * from '../core/PropertyNode.js'; // property() <-> TODO: Separate Material Properties in other file
8
+ export * from '../core/AssignNode.js'; // .assign()
9
+ export * from '../code/FunctionCallNode.js'; // .call()
10
+ export * from '../math/OperatorNode.js'; // .add(), .sub(), ...
11
+ export * from '../math/MathNode.js'; // abs(), floor(), ...
12
+ export * from '../math/ConditionalNode.js'; // select(), ...
13
+ export * from '../core/ContextNode.js'; // .context()
14
+ export * from '../core/VarNode.js'; // .var() -> TODO: Maybe rename .toVar() -> .var()
15
+ export * from '../core/VaryingNode.js'; // varying(), vertexStage()
16
+ export * from '../display/ColorSpaceNode.js'; // .toColorSpace()
17
+ export * from '../display/ToneMappingNode.js'; // .toToneMapping()
18
+ export * from '../accessors/BufferAttributeNode.js'; // .toAttribute()
19
+ export * from '../gpgpu/ComputeNode.js'; // .compute()
20
+ export * from '../core/CacheNode.js'; // .cache()
21
+ export * from '../core/BypassNode.js'; // .bypass()
22
+ export * from '../utils/RemapNode.js'; // .remap(), .remapClamp()
23
+ export * from '../code/ExpressionNode.js'; // expression()
24
+ export * from '../utils/Discard.js'; // Discard(), Return()
25
+ export * from '../display/RenderOutputNode.js'; // .renderOutput()
26
+
27
+ export function addNodeElement( name/*, nodeElement*/ ) {
28
+
29
+ console.warn( 'THREE.TSLBase: AddNodeElement has been removed in favor of tree-shaking. Trying add', name );
30
+
31
+ }
@@ -1,23 +1,23 @@
1
- import Node, { addNodeClass } from '../core/Node.js';
1
+ import Node from '../core/Node.js';
2
2
  import ArrayElementNode from '../utils/ArrayElementNode.js';
3
3
  import ConvertNode from '../utils/ConvertNode.js';
4
4
  import JoinNode from '../utils/JoinNode.js';
5
5
  import SplitNode from '../utils/SplitNode.js';
6
6
  import SetNode from '../utils/SetNode.js';
7
+ import FlipNode from '../utils/FlipNode.js';
7
8
  import ConstNode from '../core/ConstNode.js';
9
+ import MemberNode from '../utils/MemberNode.js';
8
10
  import { getValueFromType, getValueType } from '../core/NodeUtils.js';
9
11
 
10
- //
11
-
12
12
  let currentStack = null;
13
13
 
14
- const NodeElements = new Map(); // @TODO: Currently only a few nodes are added, probably also add others
14
+ const NodeElements = new Map();
15
15
 
16
- export function addNodeElement( name, nodeElement ) {
16
+ export function addMethodChaining( name, nodeElement ) {
17
17
 
18
18
  if ( NodeElements.has( name ) ) {
19
19
 
20
- console.warn( `Redefinition of node element ${ name }` );
20
+ console.warn( `Redefinition of method chaining ${ name }` );
21
21
  return;
22
22
 
23
23
  }
@@ -29,6 +29,7 @@ export function addNodeElement( name, nodeElement ) {
29
29
  }
30
30
 
31
31
  const parseSwizzle = ( props ) => props.replace( /r|s/g, 'x' ).replace( /g|t/g, 'y' ).replace( /b|p/g, 'z' ).replace( /a|q/g, 'w' );
32
+ const parseSwizzleAndSort = ( props ) => parseSwizzle( props ).split( '' ).sort().join( '' );
32
33
 
33
34
  const shaderNodeHandler = {
34
35
 
@@ -80,15 +81,19 @@ const shaderNodeHandler = {
80
81
 
81
82
  } else if ( /^set[XYZWRGBASTPQ]{1,4}$/.test( prop ) === true ) {
82
83
 
83
- // set properties ( swizzle )
84
+ // set properties ( swizzle ) and sort to xyzw sequence
84
85
 
85
- prop = parseSwizzle( prop.slice( 3 ).toLowerCase() );
86
+ prop = parseSwizzleAndSort( prop.slice( 3 ).toLowerCase() );
86
87
 
87
- // sort to xyzw sequence
88
+ return ( value ) => nodeObject( new SetNode( node, prop, value ) );
88
89
 
89
- prop = prop.split( '' ).sort().join( '' );
90
+ } else if ( /^flip[XYZWRGBASTPQ]{1,4}$/.test( prop ) === true ) {
90
91
 
91
- return ( value ) => nodeObject( new SetNode( node, prop, value ) );
92
+ // set properties ( swizzle ) and sort to xyzw sequence
93
+
94
+ prop = parseSwizzleAndSort( prop.slice( 4 ).toLowerCase() );
95
+
96
+ return () => nodeObject( new FlipNode( nodeObject( node ), prop ) );
92
97
 
93
98
  } else if ( prop === 'width' || prop === 'height' || prop === 'depth' ) {
94
99
 
@@ -106,6 +111,12 @@ const shaderNodeHandler = {
106
111
 
107
112
  return nodeObject( new ArrayElementNode( nodeObj, new ConstNode( Number( prop ), 'uint' ) ) );
108
113
 
114
+ } else if ( /^get$/.test( prop ) === true ) {
115
+
116
+ // accessing properties
117
+
118
+ return ( value ) => nodeObject( new MemberNode( nodeObj, value ) );
119
+
109
120
  }
110
121
 
111
122
  }
@@ -251,15 +262,13 @@ class ShaderCallNodeInternal extends Node {
251
262
 
252
263
  getNodeType( builder ) {
253
264
 
254
- const properties = builder.getNodeProperties( this );
255
-
256
- if ( properties.outputNode === null ) {
265
+ return this.shaderNode.nodeType || this.getOutputNode( builder ).getNodeType( builder );
257
266
 
258
- properties.outputNode = this.setupOutput( builder );
267
+ }
259
268
 
260
- }
269
+ getMemberType( builder, name ) {
261
270
 
262
- return properties.outputNode.getNodeType( builder );
271
+ return this.getOutputNode( builder ).getMemberType( builder, name );
263
272
 
264
273
  }
265
274
 
@@ -267,6 +276,13 @@ class ShaderCallNodeInternal extends Node {
267
276
 
268
277
  const { shaderNode, inputNodes } = this;
269
278
 
279
+ const properties = builder.getNodeProperties( shaderNode );
280
+ if ( properties.onceOutput ) return properties.onceOutput;
281
+
282
+ //
283
+
284
+ let result = null;
285
+
270
286
  if ( shaderNode.layout ) {
271
287
 
272
288
  let functionNodesCacheMap = nodeBuilderFunctionsCacheMap.get( builder.constructor );
@@ -289,28 +305,46 @@ class ShaderCallNodeInternal extends Node {
289
305
 
290
306
  }
291
307
 
292
- if ( builder.currentFunctionNode !== null ) {
308
+ builder.addInclude( functionNode );
293
309
 
294
- builder.currentFunctionNode.includes.push( functionNode );
310
+ result = nodeObject( functionNode.call( inputNodes ) );
295
311
 
296
- }
312
+ } else {
313
+
314
+ const jsFunc = shaderNode.jsFunc;
315
+ const outputNode = inputNodes !== null || jsFunc.length > 1 ? jsFunc( inputNodes || [], builder ) : jsFunc( builder );
297
316
 
298
- return nodeObject( functionNode.call( inputNodes ) );
317
+ result = nodeObject( outputNode );
299
318
 
300
319
  }
301
320
 
302
- const jsFunc = shaderNode.jsFunc;
303
- const outputNode = inputNodes !== null ? jsFunc( inputNodes, builder ) : jsFunc( builder );
321
+ if ( shaderNode.once ) {
322
+
323
+ properties.onceOutput = result;
304
324
 
305
- return nodeObject( outputNode );
325
+ }
326
+
327
+ return result;
306
328
 
307
329
  }
308
330
 
309
- setup( builder ) {
331
+ getOutputNode( builder ) {
310
332
 
311
- const { outputNode } = builder.getNodeProperties( this );
333
+ const properties = builder.getNodeProperties( this );
312
334
 
313
- return outputNode || this.setupOutput( builder );
335
+ if ( properties.outputNode === null ) {
336
+
337
+ properties.outputNode = this.setupOutput( builder );
338
+
339
+ }
340
+
341
+ return properties.outputNode;
342
+
343
+ }
344
+
345
+ setup( builder ) {
346
+
347
+ return this.getOutputNode( builder );
314
348
 
315
349
  }
316
350
 
@@ -326,17 +360,9 @@ class ShaderCallNodeInternal extends Node {
326
360
 
327
361
  generate( builder, output ) {
328
362
 
329
- const { outputNode } = builder.getNodeProperties( this );
330
-
331
- if ( outputNode === null ) {
363
+ const outputNode = this.getOutputNode( builder );
332
364
 
333
- // TSL: It's recommended to use `tslFn` in setup() pass.
334
-
335
- return this.call( builder ).build( builder, output );
336
-
337
- }
338
-
339
- return super.generate( builder, output );
365
+ return outputNode.build( builder, output );
340
366
 
341
367
  }
342
368
 
@@ -344,20 +370,16 @@ class ShaderCallNodeInternal extends Node {
344
370
 
345
371
  class ShaderNodeInternal extends Node {
346
372
 
347
- constructor( jsFunc ) {
373
+ constructor( jsFunc, nodeType ) {
348
374
 
349
- super();
375
+ super( nodeType );
350
376
 
351
377
  this.jsFunc = jsFunc;
352
378
  this.layout = null;
353
379
 
354
380
  this.global = true;
355
381
 
356
- }
357
-
358
- get isArrayInput() {
359
-
360
- return /^\((\s+)?\[/.test( this.jsFunc.toString() );
382
+ this.once = false;
361
383
 
362
384
  }
363
385
 
@@ -480,9 +502,9 @@ export const getConstNodeType = ( value ) => ( value !== undefined && value !==
480
502
 
481
503
  // shader node base
482
504
 
483
- export function ShaderNode( jsFunc ) {
505
+ export function ShaderNode( jsFunc, nodeType ) {
484
506
 
485
- return new Proxy( new ShaderNodeInternal( jsFunc ), shaderNodeHandler );
507
+ return new Proxy( new ShaderNodeInternal( jsFunc, nodeType ), shaderNodeHandler );
486
508
 
487
509
  }
488
510
 
@@ -492,9 +514,9 @@ export const nodeArray = ( val, altType = null ) => new ShaderNodeArray( val, al
492
514
  export const nodeProxy = ( ...params ) => new ShaderNodeProxy( ...params );
493
515
  export const nodeImmutable = ( ...params ) => new ShaderNodeImmutable( ...params );
494
516
 
495
- export const Fn = ( jsFunc ) => {
517
+ export const Fn = ( jsFunc, nodeType ) => {
496
518
 
497
- const shaderNode = new ShaderNode( jsFunc );
519
+ const shaderNode = new ShaderNode( jsFunc, nodeType );
498
520
 
499
521
  const fn = ( ...params ) => {
500
522
 
@@ -517,6 +539,7 @@ export const Fn = ( jsFunc ) => {
517
539
  };
518
540
 
519
541
  fn.shaderNode = shaderNode;
542
+
520
543
  fn.setLayout = ( layout ) => {
521
544
 
522
545
  shaderNode.setLayout( layout );
@@ -525,22 +548,36 @@ export const Fn = ( jsFunc ) => {
525
548
 
526
549
  };
527
550
 
551
+ fn.once = () => {
552
+
553
+ shaderNode.once = true;
554
+
555
+ return fn;
556
+
557
+ };
558
+
528
559
  return fn;
529
560
 
530
561
  };
531
562
 
563
+ /**
564
+ * @tsl
565
+ * @function
566
+ * @deprecated since r168. Use {@link Fn} instead.
567
+ *
568
+ * @param {...any} params
569
+ * @returns {Function}
570
+ */
532
571
  export const tslFn = ( ...params ) => { // @deprecated, r168
533
572
 
534
- console.warn( 'TSL.tslFn: tslFn() has been renamed to Fn().' );
573
+ console.warn( 'TSL.ShaderNode: tslFn() has been renamed to Fn().' );
535
574
  return Fn( ...params );
536
575
 
537
576
  };
538
577
 
539
- addNodeClass( 'ShaderNode', ShaderNode );
540
-
541
578
  //
542
579
 
543
- addNodeElement( 'toGlobal', ( node ) => {
580
+ addMethodChaining( 'toGlobal', ( node ) => {
544
581
 
545
582
  node.global = true;
546
583
 
@@ -574,10 +611,9 @@ export function append( node ) {
574
611
 
575
612
  }
576
613
 
577
- addNodeElement( 'append', append );
614
+ addMethodChaining( 'append', append );
578
615
 
579
616
  // types
580
- // @TODO: Maybe export from ConstNode.js?
581
617
 
582
618
  export const color = new ConvertType( 'color' );
583
619
 
@@ -602,58 +638,38 @@ export const uvec4 = new ConvertType( 'uvec4' );
602
638
  export const bvec4 = new ConvertType( 'bvec4' );
603
639
 
604
640
  export const mat2 = new ConvertType( 'mat2' );
605
- export const imat2 = new ConvertType( 'imat2' );
606
- export const umat2 = new ConvertType( 'umat2' );
607
- export const bmat2 = new ConvertType( 'bmat2' );
608
-
609
641
  export const mat3 = new ConvertType( 'mat3' );
610
- export const imat3 = new ConvertType( 'imat3' );
611
- export const umat3 = new ConvertType( 'umat3' );
612
- export const bmat3 = new ConvertType( 'bmat3' );
613
-
614
642
  export const mat4 = new ConvertType( 'mat4' );
615
- export const imat4 = new ConvertType( 'imat4' );
616
- export const umat4 = new ConvertType( 'umat4' );
617
- export const bmat4 = new ConvertType( 'bmat4' );
618
643
 
619
644
  export const string = ( value = '' ) => nodeObject( new ConstNode( value, 'string' ) );
620
645
  export const arrayBuffer = ( value ) => nodeObject( new ConstNode( value, 'ArrayBuffer' ) );
621
646
 
622
- addNodeElement( 'toColor', color );
623
- addNodeElement( 'toFloat', float );
624
- addNodeElement( 'toInt', int );
625
- addNodeElement( 'toUint', uint );
626
- addNodeElement( 'toBool', bool );
627
- addNodeElement( 'toVec2', vec2 );
628
- addNodeElement( 'toIvec2', ivec2 );
629
- addNodeElement( 'toUvec2', uvec2 );
630
- addNodeElement( 'toBvec2', bvec2 );
631
- addNodeElement( 'toVec3', vec3 );
632
- addNodeElement( 'toIvec3', ivec3 );
633
- addNodeElement( 'toUvec3', uvec3 );
634
- addNodeElement( 'toBvec3', bvec3 );
635
- addNodeElement( 'toVec4', vec4 );
636
- addNodeElement( 'toIvec4', ivec4 );
637
- addNodeElement( 'toUvec4', uvec4 );
638
- addNodeElement( 'toBvec4', bvec4 );
639
- addNodeElement( 'toMat2', mat2 );
640
- addNodeElement( 'toImat2', imat2 );
641
- addNodeElement( 'toUmat2', umat2 );
642
- addNodeElement( 'toBmat2', bmat2 );
643
- addNodeElement( 'toMat3', mat3 );
644
- addNodeElement( 'toImat3', imat3 );
645
- addNodeElement( 'toUmat3', umat3 );
646
- addNodeElement( 'toBmat3', bmat3 );
647
- addNodeElement( 'toMat4', mat4 );
648
- addNodeElement( 'toImat4', imat4 );
649
- addNodeElement( 'toUmat4', umat4 );
650
- addNodeElement( 'toBmat4', bmat4 );
647
+ addMethodChaining( 'toColor', color );
648
+ addMethodChaining( 'toFloat', float );
649
+ addMethodChaining( 'toInt', int );
650
+ addMethodChaining( 'toUint', uint );
651
+ addMethodChaining( 'toBool', bool );
652
+ addMethodChaining( 'toVec2', vec2 );
653
+ addMethodChaining( 'toIVec2', ivec2 );
654
+ addMethodChaining( 'toUVec2', uvec2 );
655
+ addMethodChaining( 'toBVec2', bvec2 );
656
+ addMethodChaining( 'toVec3', vec3 );
657
+ addMethodChaining( 'toIVec3', ivec3 );
658
+ addMethodChaining( 'toUVec3', uvec3 );
659
+ addMethodChaining( 'toBVec3', bvec3 );
660
+ addMethodChaining( 'toVec4', vec4 );
661
+ addMethodChaining( 'toIVec4', ivec4 );
662
+ addMethodChaining( 'toUVec4', uvec4 );
663
+ addMethodChaining( 'toBVec4', bvec4 );
664
+ addMethodChaining( 'toMat2', mat2 );
665
+ addMethodChaining( 'toMat3', mat3 );
666
+ addMethodChaining( 'toMat4', mat4 );
651
667
 
652
668
  // basic nodes
653
- // HACK - we cannot export them from the corresponding files because of the cyclic dependency
654
- export const element = nodeProxy( ArrayElementNode );
669
+
670
+ export const element = /*@__PURE__*/ nodeProxy( ArrayElementNode );
655
671
  export const convert = ( node, types ) => nodeObject( new ConvertNode( nodeObject( node ), types ) );
656
672
  export const split = ( node, channels ) => nodeObject( new SplitNode( nodeObject( node ), channels ) );
657
673
 
658
- addNodeElement( 'element', element );
659
- addNodeElement( 'convert', convert );
674
+ addMethodChaining( 'element', element );
675
+ addMethodChaining( 'convert', convert );
@@ -1,18 +1,60 @@
1
- import Node, { addNodeClass } from '../core/Node.js';
2
-
1
+ import Node from '../core/Node.js';
2
+
3
+ /**
4
+ * Base class for representing element access on an array-like
5
+ * node data structures.
6
+ *
7
+ * @augments Node
8
+ */
3
9
  class ArrayElementNode extends Node { // @TODO: If extending from TempNode it breaks webgpu_compute
4
10
 
11
+ static get type() {
12
+
13
+ return 'ArrayElementNode';
14
+
15
+ }
16
+
17
+ /**
18
+ * Constructs an array element node.
19
+ *
20
+ * @param {Node} node - The array-like node.
21
+ * @param {Node} indexNode - The index node that defines the element access.
22
+ */
5
23
  constructor( node, indexNode ) {
6
24
 
7
25
  super();
8
26
 
27
+ /**
28
+ * The array-like node.
29
+ *
30
+ * @type {Node}
31
+ */
9
32
  this.node = node;
33
+
34
+ /**
35
+ * The index node that defines the element access.
36
+ *
37
+ * @type {Node}
38
+ */
10
39
  this.indexNode = indexNode;
11
40
 
41
+ /**
42
+ * This flag can be used for type testing.
43
+ *
44
+ * @type {boolean}
45
+ * @readonly
46
+ * @default true
47
+ */
12
48
  this.isArrayElementNode = true;
13
49
 
14
50
  }
15
51
 
52
+ /**
53
+ * This method is overwritten since the node type is inferred from the array-like node.
54
+ *
55
+ * @param {NodeBuilder} builder - The current node builder.
56
+ * @return {string} The node type.
57
+ */
16
58
  getNodeType( builder ) {
17
59
 
18
60
  return this.node.getElementType( builder );
@@ -24,12 +66,10 @@ class ArrayElementNode extends Node { // @TODO: If extending from TempNode it br
24
66
  const nodeSnippet = this.node.build( builder );
25
67
  const indexSnippet = this.indexNode.build( builder, 'uint' );
26
68
 
27
- return `${nodeSnippet}[ ${indexSnippet} ]`;
69
+ return `${ nodeSnippet }[ ${ indexSnippet } ]`;
28
70
 
29
71
  }
30
72
 
31
73
  }
32
74
 
33
75
  export default ArrayElementNode;
34
-
35
- addNodeClass( 'ArrayElementNode', ArrayElementNode );
@@ -1,16 +1,53 @@
1
- import Node, { addNodeClass } from '../core/Node.js';
2
-
1
+ import Node from '../core/Node.js';
2
+
3
+ /**
4
+ * This module is part of the TSL core and usually not used in app level code.
5
+ * It represents a convert operation during the shader generation process
6
+ * meaning it converts the data type of a node to a target data type.
7
+ *
8
+ * @augments Node
9
+ */
3
10
  class ConvertNode extends Node {
4
11
 
12
+ static get type() {
13
+
14
+ return 'ConvertNode';
15
+
16
+ }
17
+
18
+ /**
19
+ * Constructs a new convert node.
20
+ *
21
+ * @param {Node} node - The node which type should be converted.
22
+ * @param {string} convertTo - The target node type. Multiple types can be defined by separating them with a `|` sign.
23
+ */
5
24
  constructor( node, convertTo ) {
6
25
 
7
26
  super();
8
27
 
28
+ /**
29
+ * The node which type should be converted.
30
+ *
31
+ * @type {Node}
32
+ */
9
33
  this.node = node;
34
+
35
+ /**
36
+ * The target node type. Multiple types can be defined by separating them with a `|` sign.
37
+ *
38
+ * @type {string}
39
+ */
10
40
  this.convertTo = convertTo;
11
41
 
12
42
  }
13
43
 
44
+ /**
45
+ * This method is overwritten since the implementation tries to infer the best
46
+ * matching type from the {@link ConvertNode#convertTo} property.
47
+ *
48
+ * @param {NodeBuilder} builder - The current node builder.
49
+ * @return {string} The node type.
50
+ */
14
51
  getNodeType( builder ) {
15
52
 
16
53
  const requestType = this.node.getNodeType( builder );
@@ -61,5 +98,3 @@ class ConvertNode extends Node {
61
98
  }
62
99
 
63
100
  export default ConvertNode;
64
-
65
- addNodeClass( 'ConvertNode', ConvertNode );
@@ -1,30 +1,80 @@
1
1
  import TempNode from '../core/TempNode.js';
2
- import { addNodeClass } from '../core/Node.js';
3
2
  import { NodeUpdateType } from '../core/constants.js';
4
- import { nodeProxy } from '../shadernode/ShaderNode.js';
3
+ import { nodeProxy } from '../tsl/TSLBase.js';
5
4
  import { CubeTexture } from '../../textures/CubeTexture.js';
6
5
  import { cubeTexture } from '../accessors/CubeTextureNode.js';
7
6
  import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js';
8
- import { CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../constants';
7
+ import { CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../constants.js';
9
8
 
10
9
  const _cache = new WeakMap();
11
10
 
11
+ /**
12
+ * This node can be used to automatically convert environment maps in the
13
+ * equirectangular format into the cube map format.
14
+ *
15
+ * @augments TempNode
16
+ */
12
17
  class CubeMapNode extends TempNode {
13
18
 
19
+ static get type() {
20
+
21
+ return 'CubeMapNode';
22
+
23
+ }
24
+
25
+ /**
26
+ * Constructs a new cube map node.
27
+ *
28
+ * @param {Node} envNode - The node representing the environment map.
29
+ */
14
30
  constructor( envNode ) {
15
31
 
16
32
  super( 'vec3' );
17
33
 
34
+ /**
35
+ * The node representing the environment map.
36
+ *
37
+ * @type {Node}
38
+ */
18
39
  this.envNode = envNode;
19
40
 
41
+ /**
42
+ * A reference to the internal cube texture.
43
+ *
44
+ * @private
45
+ * @type {CubeTexture}
46
+ * @default null
47
+ */
20
48
  this._cubeTexture = null;
49
+
50
+ /**
51
+ * A reference to the internal cube texture node.
52
+ *
53
+ * @private
54
+ * @type {CubeTextureNode}
55
+ */
21
56
  this._cubeTextureNode = cubeTexture();
22
57
 
23
58
  const defaultTexture = new CubeTexture();
24
59
  defaultTexture.isRenderTargetTexture = true;
25
60
 
61
+ /**
62
+ * A default cube texture that acts as a placeholder.
63
+ * It is used when the conversion from equirectangular to cube
64
+ * map has not finished yet for a given texture.
65
+ *
66
+ * @private
67
+ * @type {CubeTexture}
68
+ */
26
69
  this._defaultTexture = defaultTexture;
27
70
 
71
+ /**
72
+ * The `updateBeforeType` is set to `NodeUpdateType.RENDER` since the node updates
73
+ * the texture once per render in its {@link CubeMapNode#updateBefore} method.
74
+ *
75
+ * @type {string}
76
+ * @default 'render'
77
+ */
28
78
  this.updateBeforeType = NodeUpdateType.RENDER;
29
79
 
30
80
  }
@@ -110,6 +160,16 @@ class CubeMapNode extends TempNode {
110
160
 
111
161
  }
112
162
 
163
+ export default CubeMapNode;
164
+
165
+ /**
166
+ * Returns true if the given equirectangular image has been fully loaded
167
+ * and is ready for further processing.
168
+ *
169
+ * @private
170
+ * @param {Image} image - The equirectangular image to check.
171
+ * @return {boolean} Whether the image is ready or not.
172
+ */
113
173
  function isEquirectangularMapReady( image ) {
114
174
 
115
175
  if ( image === null || image === undefined ) return false;
@@ -118,6 +178,14 @@ function isEquirectangularMapReady( image ) {
118
178
 
119
179
  }
120
180
 
181
+ /**
182
+ * This function is executed when `dispose()` is called on the equirectangular
183
+ * texture. In this case, the generated cube map with its render target
184
+ * is deleted as well.
185
+ *
186
+ * @private
187
+ * @param {Object} event - The event object.
188
+ */
121
189
  function onTextureDispose( event ) {
122
190
 
123
191
  const texture = event.target;
@@ -136,6 +204,14 @@ function onTextureDispose( event ) {
136
204
 
137
205
  }
138
206
 
207
+ /**
208
+ * This function makes sure the generated cube map uses the correct
209
+ * texture mapping that corresponds to the equirectangular original.
210
+ *
211
+ * @private
212
+ * @param {Texture} texture - The cube texture.
213
+ * @param {number} mapping - The original texture mapping.
214
+ */
139
215
  function mapTextureMapping( texture, mapping ) {
140
216
 
141
217
  if ( mapping === EquirectangularReflectionMapping ) {
@@ -150,8 +226,12 @@ function mapTextureMapping( texture, mapping ) {
150
226
 
151
227
  }
152
228
 
153
- export const cubeMapNode = nodeProxy( CubeMapNode );
154
-
155
- addNodeClass( 'CubeMapNode', CubeMapNode );
156
-
157
- export default CubeMapNode;
229
+ /**
230
+ * TSL function for creating a cube map node.
231
+ *
232
+ * @tsl
233
+ * @function
234
+ * @param {Node} envNode - The node representing the environment map.
235
+ * @returns {CubeMapNode}
236
+ */
237
+ export const cubeMapNode = /*@__PURE__*/ nodeProxy( CubeMapNode );