@plastic-software/three 0.167.3 → 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 (748) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +36277 -24023
  4. package/build/three.core.js +48830 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +10175 -46743
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +550 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +44348 -50670
  11. package/build/three.webgpu.min.js +2 -2
  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/points.glsl.js +2 -0
  631. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  632. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  633. package/src/renderers/webgl/WebGLBackground.js +24 -1
  634. package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
  635. package/src/renderers/webgl/WebGLCapabilities.js +2 -0
  636. package/src/renderers/webgl/WebGLGeometries.js +0 -28
  637. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
  638. package/src/renderers/webgl/WebGLProgram.js +27 -29
  639. package/src/renderers/webgl/WebGLPrograms.js +24 -16
  640. package/src/renderers/webgl/WebGLState.js +68 -11
  641. package/src/renderers/webgl/WebGLTextures.js +49 -10
  642. package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
  643. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
  644. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
  645. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
  646. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  647. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  648. package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
  649. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
  650. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
  651. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  652. package/src/renderers/webgpu/WebGPUBackend.js +816 -236
  653. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
  654. package/src/renderers/webgpu/WebGPURenderer.js +45 -6
  655. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
  656. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
  657. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
  658. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
  659. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  660. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
  661. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
  662. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
  663. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
  664. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
  665. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
  666. package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
  667. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  668. package/src/renderers/webxr/WebXRManager.js +54 -32
  669. package/src/scenes/Fog.js +60 -0
  670. package/src/scenes/FogExp2.js +51 -0
  671. package/src/scenes/Scene.js +87 -0
  672. package/src/textures/Data3DTexture.js +2 -2
  673. package/src/textures/DepthTexture.js +2 -0
  674. package/src/textures/Source.js +2 -2
  675. package/src/textures/Texture.js +368 -5
  676. package/src/textures/VideoFrameTexture.js +35 -0
  677. package/src/utils.js +33 -1
  678. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  679. package/examples/jsm/animation/MMDPhysics.js +0 -1406
  680. package/examples/jsm/cameras/CinematicCamera.js +0 -208
  681. package/examples/jsm/controls/Controls.js +0 -32
  682. package/examples/jsm/exporters/MMDExporter.js +0 -217
  683. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  684. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  685. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  686. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  687. package/examples/jsm/loaders/MMDLoader.js +0 -2295
  688. package/examples/jsm/loaders/TiltLoader.js +0 -520
  689. package/examples/jsm/objects/InstancedPoints.js +0 -21
  690. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  691. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  692. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  693. package/src/nodes/accessors/BitangentNode.js +0 -13
  694. package/src/nodes/accessors/CameraNode.js +0 -19
  695. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  696. package/src/nodes/accessors/NormalNode.js +0 -14
  697. package/src/nodes/accessors/PositionNode.js +0 -10
  698. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  699. package/src/nodes/accessors/TangentNode.js +0 -23
  700. package/src/nodes/accessors/UVNode.js +0 -3
  701. package/src/nodes/core/NodeKeywords.js +0 -80
  702. package/src/nodes/core/UniformGroup.js +0 -13
  703. package/src/nodes/display/AfterImageNode.js +0 -152
  704. package/src/nodes/display/AnamorphicNode.js +0 -145
  705. package/src/nodes/display/BlendModeNode.js +0 -128
  706. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  707. package/src/nodes/display/DenoiseNode.js +0 -198
  708. package/src/nodes/display/DotScreenNode.js +0 -75
  709. package/src/nodes/display/FXAANode.js +0 -327
  710. package/src/nodes/display/FilmNode.js +0 -52
  711. package/src/nodes/display/GTAONode.js +0 -324
  712. package/src/nodes/display/GaussianBlurNode.js +0 -207
  713. package/src/nodes/display/Lut3DNode.js +0 -53
  714. package/src/nodes/display/RGBShiftNode.js +0 -49
  715. package/src/nodes/display/SepiaNode.js +0 -18
  716. package/src/nodes/display/TransitionNode.js +0 -76
  717. package/src/nodes/display/ViewportNode.js +0 -137
  718. package/src/nodes/fog/FogExp2Node.js +0 -34
  719. package/src/nodes/fog/FogNode.js +0 -48
  720. package/src/nodes/fog/FogRangeNode.js +0 -35
  721. package/src/nodes/lighting/LightNode.js +0 -57
  722. package/src/nodes/loaders/NodeLoader.js +0 -110
  723. package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
  724. package/src/nodes/loaders/NodeObjectLoader.js +0 -71
  725. package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  726. package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
  727. package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
  728. package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
  729. package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
  730. package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
  731. package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  732. package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
  733. package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
  734. package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
  735. package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
  736. package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
  737. package/src/nodes/materials/NodeMaterial.js +0 -680
  738. package/src/nodes/materials/PointsNodeMaterial.js +0 -39
  739. package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
  740. package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
  741. package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
  742. package/src/nodes/math/CondNode.js +0 -139
  743. package/src/nodes/math/HashNode.js +0 -34
  744. package/src/nodes/procedural/CheckerNode.js +0 -42
  745. package/src/nodes/utils/DiscardNode.js +0 -28
  746. package/src/nodes/utils/OscNode.js +0 -81
  747. package/src/nodes/utils/PackingNode.js +0 -55
  748. package/src/nodes/utils/TimerNode.js +0 -94
@@ -1,9 +1,10 @@
1
+ import Node from '../core/Node.js';
1
2
  import TextureNode from '../accessors/TextureNode.js';
2
- import { nodeObject, vec2 } from '../shadernode/ShaderNode.js';
3
+ import { nodeObject } from '../tsl/TSLBase.js';
3
4
  import { NodeUpdateType } from '../core/constants.js';
4
- import { viewportTopLeft } from '../display/ViewportNode.js';
5
+ import { screenUV } from '../display/ScreenNode.js';
5
6
 
6
- import { HalfFloatType, LinearMipMapLinearFilter } from '../../constants.js';
7
+ import { HalfFloatType, LinearMipMapLinearFilter, WebGPUCoordinateSystem } from '../../constants.js';
7
8
  import { Plane } from '../../math/Plane.js';
8
9
  import { Object3D } from '../../core/Object3D.js';
9
10
  import { Vector2 } from '../../math/Vector2.js';
@@ -11,6 +12,7 @@ import { Vector3 } from '../../math/Vector3.js';
11
12
  import { Vector4 } from '../../math/Vector4.js';
12
13
  import { Matrix4 } from '../../math/Matrix4.js';
13
14
  import { RenderTarget } from '../../core/RenderTarget.js';
15
+ import { DepthTexture } from '../../textures/DepthTexture.js';
14
16
 
15
17
  const _reflectorPlane = new Plane();
16
18
  const _normal = new Vector3();
@@ -27,38 +29,267 @@ const _q = new Vector4();
27
29
  const _size = new Vector2();
28
30
 
29
31
  const _defaultRT = new RenderTarget();
30
- const _defaultUV = vec2( viewportTopLeft.x.oneMinus(), viewportTopLeft.y );
32
+ const _defaultUV = screenUV.flipX();
33
+
34
+ _defaultRT.depthTexture = new DepthTexture( 1, 1 );
31
35
 
32
36
  let _inReflector = false;
33
37
 
38
+ /**
39
+ * This node can be used to implement mirror-like flat reflective surfaces.
40
+ *
41
+ * ```js
42
+ * const groundReflector = reflector();
43
+ * material.colorNode = groundReflector;
44
+ *
45
+ * const plane = new Mesh( geometry, material );
46
+ * plane.add( groundReflector.target );
47
+ * ```
48
+ *
49
+ * @augments TextureNode
50
+ */
34
51
  class ReflectorNode extends TextureNode {
35
52
 
53
+ static get type() {
54
+
55
+ return 'ReflectorNode';
56
+
57
+ }
58
+
59
+ /**
60
+ * Constructs a new reflector node.
61
+ *
62
+ * @param {Object} [parameters={}] - An object holding configuration parameters.
63
+ * @param {Object3D} [parameters.target=new Object3D()] - The 3D object the reflector is linked to.
64
+ * @param {number} [parameters.resolution=1] - The resolution scale.
65
+ * @param {boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.
66
+ * @param {boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.
67
+ * @param {boolean} [parameters.depth=false] - Whether depth data should be generated or not.
68
+ * @param {TextureNode} [parameters.defaultTexture] - The default texture node.
69
+ * @param {ReflectorBaseNode} [parameters.reflector] - The reflector base node.
70
+ */
36
71
  constructor( parameters = {} ) {
37
72
 
38
- super( _defaultRT.texture, _defaultUV );
73
+ super( parameters.defaultTexture || _defaultRT.texture, _defaultUV );
74
+
75
+ /**
76
+ * A reference to the internal reflector base node which holds the actual implementation.
77
+ *
78
+ * @private
79
+ * @type {?ReflectorBaseNode}
80
+ * @default null
81
+ */
82
+ this._reflectorBaseNode = parameters.reflector || new ReflectorBaseNode( this, parameters );
83
+
84
+ /**
85
+ * A reference to the internal depth node.
86
+ *
87
+ * @private
88
+ * @type {?Node}
89
+ * @default null
90
+ */
91
+ this._depthNode = null;
92
+
93
+ this.setUpdateMatrix( false );
94
+
95
+ }
96
+
97
+ /**
98
+ * A reference to the internal reflector node.
99
+ *
100
+ * @type {ReflectorBaseNode}
101
+ */
102
+ get reflector() {
103
+
104
+ return this._reflectorBaseNode;
105
+
106
+ }
107
+
108
+ /**
109
+ * A reference to 3D object the reflector is linked to.
110
+ *
111
+ * @type {Object3D}
112
+ */
113
+ get target() {
114
+
115
+ return this._reflectorBaseNode.target;
116
+
117
+ }
118
+
119
+ /**
120
+ * Returns a node representing the mirror's depth. That can be used
121
+ * to implement more advanced reflection effects like distance attenuation.
122
+ *
123
+ * @return {Node} The depth node.
124
+ */
125
+ getDepthNode() {
126
+
127
+ if ( this._depthNode === null ) {
128
+
129
+ if ( this._reflectorBaseNode.depth !== true ) {
130
+
131
+ throw new Error( 'THREE.ReflectorNode: Depth node can only be requested when the reflector is created with { depth: true }. ' );
132
+
133
+ }
134
+
135
+ this._depthNode = nodeObject( new ReflectorNode( {
136
+ defaultTexture: _defaultRT.depthTexture,
137
+ reflector: this._reflectorBaseNode
138
+ } ) );
139
+
140
+ }
141
+
142
+ return this._depthNode;
143
+
144
+ }
145
+
146
+ setup( builder ) {
147
+
148
+ // ignore if used in post-processing
149
+ if ( ! builder.object.isQuadMesh ) this._reflectorBaseNode.build( builder );
150
+
151
+ return super.setup( builder );
152
+
153
+ }
154
+
155
+ clone() {
156
+
157
+ const texture = new this.constructor( this.reflectorNode );
158
+ texture._reflectorBaseNode = this._reflectorBaseNode;
159
+
160
+ return texture;
161
+
162
+ }
163
+
164
+ }
165
+
166
+ /**
167
+ * Holds the actual implementation of the reflector.
168
+ *
169
+ * TODO: Explain why `ReflectorBaseNode`. Originally the entire logic was implemented
170
+ * in `ReflectorNode`, see #29619.
171
+ *
172
+ * @private
173
+ * @augments Node
174
+ */
175
+ class ReflectorBaseNode extends Node {
176
+
177
+ static get type() {
178
+
179
+ return 'ReflectorBaseNode';
180
+
181
+ }
182
+
183
+ /**
184
+ * Constructs a new reflector base node.
185
+ *
186
+ * @param {TextureNode} textureNode - Represents the rendered reflections as a texture node.
187
+ * @param {Object} [parameters={}] - An object holding configuration parameters.
188
+ * @param {Object3D} [parameters.target=new Object3D()] - The 3D object the reflector is linked to.
189
+ * @param {number} [parameters.resolution=1] - The resolution scale.
190
+ * @param {boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.
191
+ * @param {boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.
192
+ * @param {boolean} [parameters.depth=false] - Whether depth data should be generated or not.
193
+ */
194
+ constructor( textureNode, parameters = {} ) {
195
+
196
+ super();
39
197
 
40
198
  const {
41
199
  target = new Object3D(),
42
200
  resolution = 1,
43
201
  generateMipmaps = false,
44
- bounces = true
202
+ bounces = true,
203
+ depth = false
45
204
  } = parameters;
46
205
 
47
- //
48
-
206
+ /**
207
+ * Represents the rendered reflections as a texture node.
208
+ *
209
+ * @type {TextureNode}
210
+ */
211
+ this.textureNode = textureNode;
212
+
213
+ /**
214
+ * The 3D object the reflector is linked to.
215
+ *
216
+ * @type {Object3D}
217
+ * @default {new Object3D()}
218
+ */
49
219
  this.target = target;
220
+
221
+ /**
222
+ * The resolution scale.
223
+ *
224
+ * @type {number}
225
+ * @default {1}
226
+ */
50
227
  this.resolution = resolution;
228
+
229
+ /**
230
+ * Whether mipmaps should be generated or not.
231
+ *
232
+ * @type {boolean}
233
+ * @default {false}
234
+ */
51
235
  this.generateMipmaps = generateMipmaps;
236
+
237
+ /**
238
+ * Whether reflectors can render other reflector nodes or not.
239
+ *
240
+ * @type {boolean}
241
+ * @default {true}
242
+ */
52
243
  this.bounces = bounces;
53
244
 
245
+ /**
246
+ * Whether depth data should be generated or not.
247
+ *
248
+ * @type {boolean}
249
+ * @default {false}
250
+ */
251
+ this.depth = depth;
252
+
253
+ /**
254
+ * The `updateBeforeType` is set to `NodeUpdateType.RENDER` when {@link ReflectorBaseNode#bounces}
255
+ * is `true`. Otherwise it's `NodeUpdateType.FRAME`.
256
+ *
257
+ * @type {string}
258
+ * @default 'render'
259
+ */
54
260
  this.updateBeforeType = bounces ? NodeUpdateType.RENDER : NodeUpdateType.FRAME;
55
261
 
262
+ /**
263
+ * Weak map for managing virtual cameras.
264
+ *
265
+ * @type {WeakMap<Camera, Camera>}
266
+ */
56
267
  this.virtualCameras = new WeakMap();
268
+
269
+ /**
270
+ * Weak map for managing render targets.
271
+ *
272
+ * @type {WeakMap<Camera, RenderTarget>}
273
+ */
57
274
  this.renderTargets = new WeakMap();
58
275
 
276
+ /**
277
+ * Force render even if reflector is facing away from camera.
278
+ *
279
+ * @type {boolean}
280
+ * @default {false}
281
+ */
282
+ this.forceUpdate = false;
59
283
 
60
284
  }
61
285
 
286
+ /**
287
+ * Updates the resolution of the internal render target.
288
+ *
289
+ * @private
290
+ * @param {RenderTarget} renderTarget - The render target to resize.
291
+ * @param {Renderer} renderer - The renderer that is used to determine the new size.
292
+ */
62
293
  _updateResolution( renderTarget, renderer ) {
63
294
 
64
295
  const resolution = this.resolution;
@@ -77,12 +308,13 @@ class ReflectorNode extends TextureNode {
77
308
 
78
309
  }
79
310
 
80
- getTextureNode() {
81
-
82
- return this.textureNode;
83
-
84
- }
85
-
311
+ /**
312
+ * Returns a virtual camera for the given camera. The virtual camera is used to
313
+ * render the scene from the reflector's view so correct reflections can be produced.
314
+ *
315
+ * @param {Camera} camera - The scene's camera.
316
+ * @return {Camera} The corresponding virtual camera.
317
+ */
86
318
  getVirtualCamera( camera ) {
87
319
 
88
320
  let virtualCamera = this.virtualCameras.get( camera );
@@ -99,6 +331,13 @@ class ReflectorNode extends TextureNode {
99
331
 
100
332
  }
101
333
 
334
+ /**
335
+ * Returns a render target for the given camera. The reflections are rendered
336
+ * into this render target.
337
+ *
338
+ * @param {Camera} camera - The scene's camera.
339
+ * @return {RenderTarget} The render target.
340
+ */
102
341
  getRenderTarget( camera ) {
103
342
 
104
343
  let renderTarget = this.renderTargets.get( camera );
@@ -109,8 +348,14 @@ class ReflectorNode extends TextureNode {
109
348
 
110
349
  if ( this.generateMipmaps === true ) {
111
350
 
112
- renderTarget.texture.minFilter = LinearMipMapLinearFilter;
113
- renderTarget.texture.generateMipmaps = true;
351
+ renderTarget.texture.minFilter = LinearMipMapLinearFilter;
352
+ renderTarget.texture.generateMipmaps = true;
353
+
354
+ }
355
+
356
+ if ( this.depth === true ) {
357
+
358
+ renderTarget.depthTexture = new DepthTexture();
114
359
 
115
360
  }
116
361
 
@@ -150,9 +395,10 @@ class ReflectorNode extends TextureNode {
150
395
 
151
396
  _view.subVectors( _reflectorWorldPosition, _cameraWorldPosition );
152
397
 
153
- // Avoid rendering when reflector is facing away
398
+ // Avoid rendering when reflector is facing away unless forcing an update
399
+ const isFacingAway = _view.dot( _normal ) > 0;
154
400
 
155
- if ( _view.dot( _normal ) > 0 ) return;
401
+ if ( isFacingAway === true && this.forceUpdate === false ) return;
156
402
 
157
403
  _view.reflect( _normal ).negate();
158
404
  _view.add( _reflectorWorldPosition );
@@ -204,32 +450,60 @@ class ReflectorNode extends TextureNode {
204
450
  // Replacing the third row of the projection matrix
205
451
  projectionMatrix.elements[ 2 ] = clipPlane.x;
206
452
  projectionMatrix.elements[ 6 ] = clipPlane.y;
207
- projectionMatrix.elements[ 10 ] = clipPlane.z - clipBias;
453
+ projectionMatrix.elements[ 10 ] = ( renderer.coordinateSystem === WebGPUCoordinateSystem ) ? ( clipPlane.z - clipBias ) : ( clipPlane.z + 1.0 - clipBias );
208
454
  projectionMatrix.elements[ 14 ] = clipPlane.w;
209
455
 
210
456
  //
211
457
 
212
- this.value = renderTarget.texture;
458
+ this.textureNode.value = renderTarget.texture;
459
+
460
+ if ( this.depth === true ) {
461
+
462
+ this.textureNode.getDepthNode().value = renderTarget.depthTexture;
463
+
464
+ }
213
465
 
214
466
  material.visible = false;
215
467
 
216
468
  const currentRenderTarget = renderer.getRenderTarget();
469
+ const currentMRT = renderer.getMRT();
470
+ const currentAutoClear = renderer.autoClear;
217
471
 
472
+ renderer.setMRT( null );
218
473
  renderer.setRenderTarget( renderTarget );
474
+ renderer.autoClear = true;
219
475
 
220
476
  renderer.render( scene, virtualCamera );
221
477
 
478
+ renderer.setMRT( currentMRT );
222
479
  renderer.setRenderTarget( currentRenderTarget );
480
+ renderer.autoClear = currentAutoClear;
223
481
 
224
482
  material.visible = true;
225
483
 
226
484
  _inReflector = false;
227
485
 
486
+ this.forceUpdate = false;
487
+
228
488
  }
229
489
 
230
490
  }
231
491
 
492
+ /**
493
+ * TSL function for creating a reflector node.
494
+ *
495
+ * @tsl
496
+ * @function
497
+ * @param {Object} [parameters={}] - An object holding configuration parameters.
498
+ * @param {Object3D} [parameters.target=new Object3D()] - The 3D object the reflector is linked to.
499
+ * @param {number} [parameters.resolution=1] - The resolution scale.
500
+ * @param {boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.
501
+ * @param {boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.
502
+ * @param {boolean} [parameters.depth=false] - Whether depth data should be generated or not.
503
+ * @param {TextureNode} [parameters.defaultTexture] - The default texture node.
504
+ * @param {ReflectorBaseNode} [parameters.reflector] - The reflector base node.
505
+ * @returns {ReflectorNode}
506
+ */
232
507
  export const reflector = ( parameters ) => nodeObject( new ReflectorNode( parameters ) );
233
508
 
234
509
  export default ReflectorNode;
235
-
@@ -1,18 +1,78 @@
1
- import Node, { addNodeClass } from '../core/Node.js';
2
- import { float, addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
3
-
1
+ import Node from '../core/Node.js';
2
+ import { float, addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
3
+
4
+ /**
5
+ * This node allows to remap a node value from one range into another. E.g a value of
6
+ * `0.4` in the range `[ 0.3, 0.5 ]` should be remapped into the normalized range `[ 0, 1 ]`.
7
+ * `RemapNode` takes care of that and converts the original value of `0.4` to `0.5`.
8
+ *
9
+ * @augments Node
10
+ */
4
11
  class RemapNode extends Node {
5
12
 
13
+ static get type() {
14
+
15
+ return 'RemapNode';
16
+
17
+ }
18
+
19
+ /**
20
+ * Constructs a new remap node.
21
+ *
22
+ * @param {Node} node - The node that should be remapped.
23
+ * @param {Node} inLowNode - The source or current lower bound of the range.
24
+ * @param {Node} inHighNode - The source or current upper bound of the range.
25
+ * @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
26
+ * @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
27
+ */
6
28
  constructor( node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ) ) {
7
29
 
8
30
  super();
9
31
 
32
+ /**
33
+ * The node that should be remapped.
34
+ *
35
+ * @type {Node}
36
+ */
10
37
  this.node = node;
38
+
39
+ /**
40
+ * The source or current lower bound of the range.
41
+ *
42
+ * @type {Node}
43
+ */
11
44
  this.inLowNode = inLowNode;
45
+
46
+ /**
47
+ * The source or current upper bound of the range.
48
+ *
49
+ * @type {Node}
50
+ */
12
51
  this.inHighNode = inHighNode;
52
+
53
+ /**
54
+ * The target lower bound of the range.
55
+ *
56
+ * @type {Node}
57
+ * @default float(0)
58
+ */
13
59
  this.outLowNode = outLowNode;
60
+
61
+ /**
62
+ * The target upper bound of the range.
63
+ *
64
+ * @type {Node}
65
+ * @default float(1)
66
+ */
14
67
  this.outHighNode = outHighNode;
15
68
 
69
+ /**
70
+ * Whether the node value should be clamped before
71
+ * remapping it to the target range.
72
+ *
73
+ * @type {boolean}
74
+ * @default true
75
+ */
16
76
  this.doClamp = true;
17
77
 
18
78
  }
@@ -33,10 +93,33 @@ class RemapNode extends Node {
33
93
 
34
94
  export default RemapNode;
35
95
 
36
- export const remap = nodeProxy( RemapNode, null, null, { doClamp: false } );
37
- export const remapClamp = nodeProxy( RemapNode );
38
-
39
- addNodeElement( 'remap', remap );
40
- addNodeElement( 'remapClamp', remapClamp );
41
-
42
- addNodeClass( 'RemapNode', RemapNode );
96
+ /**
97
+ * TSL function for creating a remap node.
98
+ *
99
+ * @tsl
100
+ * @function
101
+ * @param {Node} node - The node that should be remapped.
102
+ * @param {Node} inLowNode - The source or current lower bound of the range.
103
+ * @param {Node} inHighNode - The source or current upper bound of the range.
104
+ * @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
105
+ * @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
106
+ * @returns {RemapNode}
107
+ */
108
+ export const remap = /*@__PURE__*/ nodeProxy( RemapNode, null, null, { doClamp: false } );
109
+
110
+ /**
111
+ * TSL function for creating a remap node, but with enabled clamping.
112
+ *
113
+ * @tsl
114
+ * @function
115
+ * @param {Node} node - The node that should be remapped.
116
+ * @param {Node} inLowNode - The source or current lower bound of the range.
117
+ * @param {Node} inHighNode - The source or current upper bound of the range.
118
+ * @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
119
+ * @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
120
+ * @returns {RemapNode}
121
+ */
122
+ export const remapClamp = /*@__PURE__*/ nodeProxy( RemapNode );
123
+
124
+ addMethodChaining( 'remap', remap );
125
+ addMethodChaining( 'remapClamp', remapClamp );
@@ -1,25 +1,54 @@
1
1
  import TempNode from '../core/TempNode.js';
2
- import { addNodeClass } from '../core/Node.js';
3
- import {
4
- addNodeElement,
5
- nodeProxy,
6
- vec4,
7
- mat2,
8
- mat4,
9
- } from '../shadernode/ShaderNode.js';
2
+ import { nodeProxy, vec4, mat2, mat4 } from '../tsl/TSLBase.js';
10
3
  import { cos, sin } from '../math/MathNode.js';
11
4
 
5
+ /**
6
+ * Applies a rotation to the given position node.
7
+ *
8
+ * @augments TempNode
9
+ */
12
10
  class RotateNode extends TempNode {
13
11
 
12
+ static get type() {
13
+
14
+ return 'RotateNode';
15
+
16
+ }
17
+
18
+ /**
19
+ * Constructs a new rotate node.
20
+ *
21
+ * @param {Node} positionNode - The position node.
22
+ * @param {Node} rotationNode - Represents the rotation that is applied to the position node. Depending
23
+ * on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
24
+ */
14
25
  constructor( positionNode, rotationNode ) {
15
26
 
16
27
  super();
17
28
 
29
+ /**
30
+ * The position node.
31
+ *
32
+ * @type {Node}
33
+ */
18
34
  this.positionNode = positionNode;
35
+
36
+ /**
37
+ * Represents the rotation that is applied to the position node.
38
+ * Depending on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
39
+ *
40
+ * @type {Node}
41
+ */
19
42
  this.rotationNode = rotationNode;
20
43
 
21
44
  }
22
45
 
46
+ /**
47
+ * The type of the {@link RotateNode#positionNode} defines the node's type.
48
+ *
49
+ * @param {NodeBuilder} builder - The current node builder.
50
+ * @return {string} The node's type.
51
+ */
23
52
  getNodeType( builder ) {
24
53
 
25
54
  return this.positionNode.getNodeType( builder );
@@ -61,8 +90,14 @@ class RotateNode extends TempNode {
61
90
 
62
91
  export default RotateNode;
63
92
 
64
- export const rotate = nodeProxy( RotateNode );
65
-
66
- addNodeElement( 'rotate', rotate );
67
-
68
- addNodeClass( 'RotateNode', RotateNode );
93
+ /**
94
+ * TSL function for creating a rotate node.
95
+ *
96
+ * @tsl
97
+ * @function
98
+ * @param {Node} positionNode - The position node.
99
+ * @param {Node} rotationNode - Represents the rotation that is applied to the position node. Depending
100
+ * on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
101
+ * @returns {RotateNode}
102
+ */
103
+ export const rotate = /*@__PURE__*/ nodeProxy( RotateNode );
@@ -1,19 +1,65 @@
1
- import { addNodeClass } from '../core/Node.js';
2
1
  import TempNode from '../core/TempNode.js';
3
2
  import { vectorComponents } from '../core/constants.js';
4
3
 
4
+ /**
5
+ * This module is part of the TSL core and usually not used in app level code.
6
+ * `SetNode` represents a set operation which means it is used to implement any
7
+ * `setXYZW()`, `setRGBA()` and `setSTPQ()` method invocations on node objects.
8
+ * For example:
9
+ * ```js
10
+ * materialLine.colorNode = color( 0, 0, 0 ).setR( float( 1 ) );
11
+ * ```
12
+ *
13
+ * @augments TempNode
14
+ */
5
15
  class SetNode extends TempNode {
6
16
 
17
+ static get type() {
18
+
19
+ return 'SetNode';
20
+
21
+ }
22
+
23
+ /**
24
+ * Constructs a new set node.
25
+ *
26
+ * @param {Node} sourceNode - The node that should be updated.
27
+ * @param {string} components - The components that should be updated.
28
+ * @param {Node} targetNode - The value node.
29
+ */
7
30
  constructor( sourceNode, components, targetNode ) {
8
31
 
9
32
  super();
10
33
 
34
+ /**
35
+ * The node that should be updated.
36
+ *
37
+ * @type {Node}
38
+ */
11
39
  this.sourceNode = sourceNode;
40
+
41
+ /**
42
+ * The components that should be updated.
43
+ *
44
+ * @type {string}
45
+ */
12
46
  this.components = components;
47
+
48
+ /**
49
+ * The value node.
50
+ *
51
+ * @type {Node}
52
+ */
13
53
  this.targetNode = targetNode;
14
54
 
15
55
  }
16
56
 
57
+ /**
58
+ * This method is overwritten since the node type is inferred from {@link SetNode#sourceNode}.
59
+ *
60
+ * @param {NodeBuilder} builder - The current node builder.
61
+ * @return {string} The node type.
62
+ */
17
63
  getNodeType( builder ) {
18
64
 
19
65
  return this.sourceNode.getNodeType( builder );
@@ -25,7 +71,9 @@ class SetNode extends TempNode {
25
71
  const { sourceNode, components, targetNode } = this;
26
72
 
27
73
  const sourceType = this.getNodeType( builder );
28
- const targetType = builder.getTypeFromLength( components.length );
74
+
75
+ const componentType = builder.getComponentType( targetNode.getNodeType( builder ) );
76
+ const targetType = builder.getTypeFromLength( components.length, componentType );
29
77
 
30
78
  const targetSnippet = targetNode.build( builder, targetType );
31
79
  const sourceSnippet = sourceNode.build( builder, sourceType );
@@ -58,5 +106,3 @@ class SetNode extends TempNode {
58
106
  }
59
107
 
60
108
  export default SetNode;
61
-
62
- addNodeClass( 'SetNode', SetNode );