super-three 0.171.0 → 0.172.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 (413) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +157 -49
  3. package/build/three.core.js +104 -42
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +53 -8
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +10 -5
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +21191 -1008
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +21189 -1008
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -5
  14. package/examples/jsm/animation/CCDIKSolver.js +3 -2
  15. package/examples/jsm/controls/ArcballControls.js +28 -19
  16. package/examples/jsm/controls/OrbitControls.js +5 -4
  17. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  18. package/examples/jsm/curves/NURBSCurve.js +1 -1
  19. package/examples/jsm/curves/NURBSUtils.js +3 -0
  20. package/examples/jsm/effects/OutlineEffect.js +1 -1
  21. package/examples/jsm/exporters/GLTFExporter.js +11 -7
  22. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  23. package/examples/jsm/exporters/PLYExporter.js +2 -2
  24. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  25. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  26. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  27. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  28. package/examples/jsm/loaders/3MFLoader.js +6 -3
  29. package/examples/jsm/loaders/BVHLoader.js +1 -1
  30. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  31. package/examples/jsm/loaders/DDSLoader.js +42 -0
  32. package/examples/jsm/loaders/GCodeLoader.js +1 -1
  33. package/examples/jsm/loaders/GLTFLoader.js +22 -2
  34. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  35. package/examples/jsm/loaders/KTXLoader.js +4 -4
  36. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  37. package/examples/jsm/loaders/LottieLoader.js +1 -1
  38. package/examples/jsm/loaders/MTLLoader.js +1 -0
  39. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  40. package/examples/jsm/loaders/PLYLoader.js +7 -7
  41. package/examples/jsm/loaders/PVRLoader.js +1 -1
  42. package/examples/jsm/loaders/SVGLoader.js +2 -2
  43. package/examples/jsm/loaders/TDSLoader.js +1 -1
  44. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  45. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  46. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  47. package/examples/jsm/math/ConvexHull.js +1 -1
  48. package/examples/jsm/math/OBB.js +17 -0
  49. package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
  50. package/examples/jsm/misc/Volume.js +20 -12
  51. package/examples/jsm/misc/VolumeSlice.js +2 -2
  52. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  53. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  54. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  55. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  56. package/examples/jsm/objects/Sky.js +2 -2
  57. package/examples/jsm/objects/SkyMesh.js +3 -3
  58. package/examples/jsm/objects/Water2.js +1 -1
  59. package/examples/jsm/objects/Water2Mesh.js +2 -2
  60. package/examples/jsm/objects/WaterMesh.js +4 -4
  61. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  62. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  63. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  64. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  65. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  66. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  67. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  68. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  69. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  70. package/examples/jsm/shaders/BokehShader2.js +1 -1
  71. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  72. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  73. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  74. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  75. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  76. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  77. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  78. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  79. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  80. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  81. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  82. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  83. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  84. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  85. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  86. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  87. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  88. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  89. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  90. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  91. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  92. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  93. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  94. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  95. package/examples/jsm/tsl/display/Sepia.js +9 -0
  96. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  97. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  98. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  99. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  100. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  101. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  102. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  103. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  104. package/examples/jsm/utils/CameraUtils.js +4 -1
  105. package/examples/jsm/utils/GeometryUtils.js +22 -19
  106. package/examples/jsm/utils/SceneUtils.js +2 -2
  107. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  108. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  109. package/package.json +8 -3
  110. package/src/Three.Core.js +2 -0
  111. package/src/Three.Legacy.js +0 -21
  112. package/src/Three.TSL.js +9 -4
  113. package/src/Three.WebGPU.Nodes.js +2 -2
  114. package/src/Three.WebGPU.js +2 -2
  115. package/src/animation/PropertyBinding.js +2 -2
  116. package/src/cameras/PerspectiveCamera.js +18 -2
  117. package/src/constants.js +1 -1
  118. package/src/core/RenderTarget.js +18 -0
  119. package/src/core/RenderTarget3D.js +22 -0
  120. package/src/core/RenderTargetArray.js +22 -0
  121. package/src/extras/Earcut.js +1 -1
  122. package/src/extras/PMREMGenerator.js +20 -0
  123. package/src/extras/TextureUtils.js +6 -0
  124. package/src/helpers/CameraHelper.js +16 -13
  125. package/src/loaders/nodes/NodeLoader.js +59 -0
  126. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  127. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  128. package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
  129. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  130. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  131. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  132. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  133. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  134. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  135. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  136. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  137. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  138. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  139. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  140. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  141. package/src/materials/nodes/NodeMaterial.js +474 -21
  142. package/src/materials/nodes/PointsNodeMaterial.js +22 -13
  143. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  144. package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
  145. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  146. package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
  147. package/src/nodes/Nodes.js +1 -6
  148. package/src/nodes/TSL.js +2 -3
  149. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  150. package/src/nodes/accessors/Arrays.js +24 -5
  151. package/src/nodes/accessors/BatchNode.js +39 -3
  152. package/src/nodes/accessors/Bitangent.js +37 -0
  153. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  154. package/src/nodes/accessors/BufferNode.js +63 -0
  155. package/src/nodes/accessors/BuiltinNode.js +38 -0
  156. package/src/nodes/accessors/Camera.js +49 -0
  157. package/src/nodes/accessors/ClippingNode.js +71 -2
  158. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  159. package/src/nodes/accessors/InstanceNode.js +85 -2
  160. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  161. package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
  162. package/src/nodes/accessors/Lights.js +50 -1
  163. package/src/nodes/accessors/MaterialNode.js +302 -8
  164. package/src/nodes/accessors/MaterialProperties.js +7 -0
  165. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  166. package/src/nodes/accessors/ModelNode.js +100 -5
  167. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  168. package/src/nodes/accessors/MorphNode.js +48 -4
  169. package/src/nodes/accessors/Normal.js +59 -3
  170. package/src/nodes/accessors/Object3DNode.js +102 -1
  171. package/src/nodes/accessors/PointUVNode.js +26 -0
  172. package/src/nodes/accessors/Position.js +53 -4
  173. package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
  174. package/src/nodes/accessors/ReferenceNode.js +202 -2
  175. package/src/nodes/accessors/ReflectVector.js +24 -0
  176. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  177. package/src/nodes/accessors/SceneNode.js +54 -0
  178. package/src/nodes/accessors/SkinningNode.js +127 -1
  179. package/src/nodes/accessors/StorageBufferNode.js +168 -4
  180. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  181. package/src/nodes/accessors/Tangent.js +36 -0
  182. package/src/nodes/accessors/Texture3DNode.js +89 -5
  183. package/src/nodes/accessors/TextureBicubic.js +12 -2
  184. package/src/nodes/accessors/TextureNode.js +309 -10
  185. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  186. package/src/nodes/accessors/UV.js +10 -1
  187. package/src/nodes/accessors/UniformArrayNode.js +223 -23
  188. package/src/nodes/accessors/UserDataNode.js +46 -0
  189. package/src/nodes/accessors/VelocityNode.js +82 -0
  190. package/src/nodes/accessors/VertexColorNode.js +39 -2
  191. package/src/nodes/code/CodeNode.js +95 -1
  192. package/src/nodes/code/ExpressionNode.js +28 -0
  193. package/src/nodes/code/FunctionCallNode.js +37 -0
  194. package/src/nodes/code/FunctionNode.js +45 -0
  195. package/src/nodes/code/ScriptableNode.js +223 -1
  196. package/src/nodes/code/ScriptableValueNode.js +85 -1
  197. package/src/nodes/core/AssignNode.js +48 -2
  198. package/src/nodes/core/AttributeNode.js +43 -0
  199. package/src/nodes/core/BypassNode.js +47 -2
  200. package/src/nodes/core/CacheNode.js +53 -2
  201. package/src/nodes/core/ConstNode.js +24 -0
  202. package/src/nodes/core/ContextNode.js +65 -0
  203. package/src/nodes/core/IndexNode.js +68 -7
  204. package/src/nodes/core/InputNode.js +48 -0
  205. package/src/nodes/core/LightingModel.js +60 -0
  206. package/src/nodes/core/MRTNode.js +66 -0
  207. package/src/nodes/core/Node.js +337 -12
  208. package/src/nodes/core/NodeAttribute.js +38 -0
  209. package/src/nodes/core/NodeBuilder.js +945 -15
  210. package/src/nodes/core/NodeCache.js +41 -2
  211. package/src/nodes/core/NodeCode.js +31 -0
  212. package/src/nodes/core/NodeFrame.js +123 -2
  213. package/src/nodes/core/NodeFunction.js +46 -0
  214. package/src/nodes/core/NodeFunctionInput.js +44 -0
  215. package/src/nodes/core/NodeParser.js +11 -0
  216. package/src/nodes/core/NodeUniform.js +52 -0
  217. package/src/nodes/core/NodeUtils.js +141 -0
  218. package/src/nodes/core/NodeVar.js +30 -0
  219. package/src/nodes/core/NodeVarying.js +28 -0
  220. package/src/nodes/core/OutputStructNode.js +33 -2
  221. package/src/nodes/core/ParameterNode.js +28 -0
  222. package/src/nodes/core/PropertyNode.js +232 -0
  223. package/src/nodes/core/StackNode.js +78 -0
  224. package/src/nodes/core/StructTypeNode.js +39 -1
  225. package/src/nodes/core/TempNode.js +30 -4
  226. package/src/nodes/core/UniformGroupNode.js +82 -7
  227. package/src/nodes/core/UniformNode.js +66 -0
  228. package/src/nodes/core/VarNode.js +52 -0
  229. package/src/nodes/core/VaryingNode.js +83 -2
  230. package/src/nodes/core/constants.js +36 -0
  231. package/src/nodes/display/BumpMapNode.js +37 -0
  232. package/src/nodes/display/ColorAdjustment.js +53 -11
  233. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  234. package/src/nodes/display/ColorSpaceNode.js +82 -0
  235. package/src/nodes/display/FrontFacingNode.js +29 -0
  236. package/src/nodes/display/NormalMapNode.js +43 -0
  237. package/src/nodes/display/PassNode.js +298 -7
  238. package/src/nodes/display/PosterizeNode.js +33 -0
  239. package/src/nodes/display/RenderOutputNode.js +66 -1
  240. package/src/nodes/display/ScreenNode.js +87 -0
  241. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  242. package/src/nodes/display/ToneMappingNode.js +55 -2
  243. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  244. package/src/nodes/display/ViewportDepthNode.js +122 -8
  245. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  246. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  247. package/src/nodes/display/ViewportTextureNode.js +57 -0
  248. package/src/nodes/fog/Fog.js +93 -0
  249. package/src/nodes/functions/BasicLightingModel.js +24 -0
  250. package/src/nodes/functions/PhongLightingModel.js +34 -2
  251. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  252. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  253. package/src/nodes/functions/ToonLightingModel.js +20 -0
  254. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  255. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  256. package/src/nodes/geometry/RangeNode.js +54 -2
  257. package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
  258. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  259. package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
  260. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  261. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  262. package/src/nodes/lighting/AONode.js +18 -0
  263. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  264. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  265. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  266. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  267. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  268. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  269. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  270. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  271. package/src/nodes/lighting/IrradianceNode.js +17 -0
  272. package/src/nodes/lighting/LightProbeNode.js +20 -0
  273. package/src/nodes/lighting/LightUtils.js +12 -0
  274. package/src/nodes/lighting/LightingContextNode.js +48 -0
  275. package/src/nodes/lighting/LightingNode.js +15 -6
  276. package/src/nodes/lighting/LightsNode.js +132 -1
  277. package/src/nodes/lighting/PointLightNode.js +32 -1
  278. package/src/nodes/lighting/PointShadowNode.js +54 -1
  279. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  280. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  281. package/src/nodes/lighting/ShadowNode.js +240 -34
  282. package/src/nodes/lighting/SpotLightNode.js +43 -0
  283. package/src/nodes/math/ConditionalNode.js +70 -3
  284. package/src/nodes/math/Hash.js +9 -0
  285. package/src/nodes/math/MathNode.js +614 -11
  286. package/src/nodes/math/MathUtils.js +45 -1
  287. package/src/nodes/math/OperatorNode.js +233 -0
  288. package/src/nodes/math/TriNoise3D.js +18 -7
  289. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  290. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  291. package/src/nodes/pmrem/PMREMNode.js +133 -0
  292. package/src/nodes/pmrem/PMREMUtils.js +1 -1
  293. package/src/nodes/procedural/Checker.js +9 -0
  294. package/src/nodes/tsl/TSLBase.js +2 -2
  295. package/src/nodes/utils/ArrayElementNode.js +38 -2
  296. package/src/nodes/utils/ConvertNode.js +31 -0
  297. package/src/nodes/utils/CubeMapNode.js +78 -0
  298. package/src/nodes/utils/Discard.js +16 -0
  299. package/src/nodes/utils/EquirectUVNode.js +31 -1
  300. package/src/nodes/utils/FlipNode.js +38 -0
  301. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  302. package/src/nodes/utils/JoinNode.js +25 -0
  303. package/src/nodes/utils/LoopNode.js +74 -1
  304. package/src/nodes/utils/MatcapUVNode.js +17 -0
  305. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  306. package/src/nodes/utils/Oscillators.js +33 -0
  307. package/src/nodes/utils/Packing.js +17 -0
  308. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  309. package/src/nodes/utils/RTTNode.js +123 -2
  310. package/src/nodes/utils/ReflectorNode.js +174 -4
  311. package/src/nodes/utils/RemapNode.js +79 -0
  312. package/src/nodes/utils/RotateNode.js +41 -0
  313. package/src/nodes/utils/SetNode.js +44 -1
  314. package/src/nodes/utils/SplitNode.js +55 -3
  315. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  316. package/src/nodes/utils/SpriteUtils.js +17 -0
  317. package/src/nodes/utils/StorageArrayElementNode.js +40 -0
  318. package/src/nodes/utils/Timer.js +19 -0
  319. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  320. package/src/nodes/utils/UVUtils.js +20 -0
  321. package/src/nodes/utils/ViewportUtils.js +13 -0
  322. package/src/objects/BatchedMesh.js +1 -2
  323. package/src/objects/ClippingGroup.js +49 -0
  324. package/src/renderers/WebGLRenderer.js +23 -4
  325. package/src/renderers/common/Animation.js +63 -0
  326. package/src/renderers/common/Attributes.js +36 -0
  327. package/src/renderers/common/Backend.js +467 -52
  328. package/src/renderers/common/Background.js +34 -1
  329. package/src/renderers/common/BindGroup.js +43 -0
  330. package/src/renderers/common/Binding.js +35 -0
  331. package/src/renderers/common/Bindings.js +93 -1
  332. package/src/renderers/common/Buffer.js +49 -0
  333. package/src/renderers/common/BufferUtils.js +27 -0
  334. package/src/renderers/common/BundleGroup.js +57 -0
  335. package/src/renderers/common/ChainMap.js +38 -1
  336. package/src/renderers/common/ClippingContext.js +107 -14
  337. package/src/renderers/common/Color4.js +36 -0
  338. package/src/renderers/common/ComputePipeline.js +24 -0
  339. package/src/renderers/common/CubeRenderTarget.js +13 -0
  340. package/src/renderers/common/DataMap.js +37 -1
  341. package/src/renderers/common/Geometries.js +98 -0
  342. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  343. package/src/renderers/common/Info.js +87 -0
  344. package/src/renderers/common/Lighting.js +26 -0
  345. package/src/renderers/common/Pipeline.js +22 -0
  346. package/src/renderers/common/Pipelines.js +148 -5
  347. package/src/renderers/common/PostProcessing.js +75 -3
  348. package/src/renderers/common/ProgrammableStage.js +60 -2
  349. package/src/renderers/common/QuadMesh.js +54 -5
  350. package/src/renderers/common/RenderBundle.js +14 -8
  351. package/src/renderers/common/RenderBundles.js +33 -10
  352. package/src/renderers/common/RenderContext.js +169 -4
  353. package/src/renderers/common/RenderContexts.js +42 -2
  354. package/src/renderers/common/RenderList.js +178 -0
  355. package/src/renderers/common/RenderLists.js +31 -0
  356. package/src/renderers/common/RenderObject.js +328 -4
  357. package/src/renderers/common/RenderObjects.js +101 -7
  358. package/src/renderers/common/RenderPipeline.js +24 -0
  359. package/src/renderers/common/Renderer.js +1096 -31
  360. package/src/renderers/common/RendererUtils.js +193 -0
  361. package/src/renderers/common/SampledTexture.js +121 -0
  362. package/src/renderers/common/Sampler.js +30 -0
  363. package/src/renderers/common/StorageBuffer.js +24 -0
  364. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  365. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  366. package/src/renderers/common/StorageTexture.js +38 -0
  367. package/src/renderers/common/Textures.js +83 -0
  368. package/src/renderers/common/Uniform.js +188 -2
  369. package/src/renderers/common/UniformBuffer.js +19 -0
  370. package/src/renderers/common/UniformsGroup.js +139 -2
  371. package/src/renderers/common/extras/PMREMGenerator.js +24 -3
  372. package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
  373. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  374. package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
  375. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  376. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  377. package/src/renderers/common/nodes/NodeUniform.js +189 -0
  378. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  379. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  380. package/src/renderers/common/nodes/Nodes.js +327 -60
  381. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  382. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  383. package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
  384. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
  385. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
  386. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
  387. package/src/renderers/webgpu/WebGPUBackend.js +480 -49
  388. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
  389. package/src/renderers/webgpu/WebGPURenderer.js +35 -0
  390. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  391. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  392. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
  393. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  394. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  395. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
  396. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
  397. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
  398. package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
  399. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  400. package/src/renderers/webxr/WebXRManager.js +7 -1
  401. package/src/textures/Data3DTexture.js +2 -2
  402. package/src/textures/Texture.js +4 -0
  403. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  404. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  405. package/examples/jsm/exporters/MMDExporter.js +0 -223
  406. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  407. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  408. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  409. package/src/nodes/core/UniformGroup.js +0 -13
  410. package/src/nodes/fog/FogExp2Node.js +0 -35
  411. package/src/nodes/fog/FogNode.js +0 -50
  412. package/src/nodes/fog/FogRangeNode.js +0 -36
  413. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -1,11 +1,16 @@
1
1
  import { NodeUpdateType } from './constants.js';
2
- import { getNodeChildren, getCacheKey } from './NodeUtils.js';
2
+ import { getNodeChildren, getCacheKey, hash } from './NodeUtils.js';
3
3
 
4
4
  import { EventDispatcher } from '../../core/EventDispatcher.js';
5
5
  import { MathUtils } from '../../math/MathUtils.js';
6
6
 
7
7
  let _nodeId = 0;
8
8
 
9
+ /**
10
+ * Base class for all nodes.
11
+ *
12
+ * @augments EventDispatcher
13
+ */
9
14
  class Node extends EventDispatcher {
10
15
 
11
16
  static get type() {
@@ -14,31 +19,114 @@ class Node extends EventDispatcher {
14
19
 
15
20
  }
16
21
 
22
+ /**
23
+ * Constructs a new node.
24
+ *
25
+ * @param {String?} nodeType - The node type.
26
+ */
17
27
  constructor( nodeType = null ) {
18
28
 
19
29
  super();
20
30
 
31
+ /**
32
+ * The node type. This represents the result type of the node (e.g. `float` or `vec3`).
33
+ *
34
+ * @type {String?}
35
+ * @default null
36
+ */
21
37
  this.nodeType = nodeType;
22
38
 
39
+ /**
40
+ * The update type of the node's {@link Node#update} method. Possible values are listed in {@link NodeUpdateType}.
41
+ *
42
+ * @type {String}
43
+ * @default 'none'
44
+ */
23
45
  this.updateType = NodeUpdateType.NONE;
46
+
47
+ /**
48
+ * The update type of the node's {@link Node#updateBefore} method. Possible values are listed in {@link NodeUpdateType}.
49
+ *
50
+ * @type {String}
51
+ * @default 'none'
52
+ */
24
53
  this.updateBeforeType = NodeUpdateType.NONE;
54
+
55
+ /**
56
+ * The update type of the node's {@link Node#updateAfter} method. Possible values are listed in {@link NodeUpdateType}.
57
+ *
58
+ * @type {String}
59
+ * @default 'none'
60
+ */
25
61
  this.updateAfterType = NodeUpdateType.NONE;
26
62
 
63
+ /**
64
+ * The UUID of the node.
65
+ *
66
+ * @type {String}
67
+ * @readonly
68
+ */
27
69
  this.uuid = MathUtils.generateUUID();
28
70
 
71
+ /**
72
+ * The version of the node. The version automatically is increased when {@link Node#needsUpdate} is set to `true`.
73
+ *
74
+ * @type {Number}
75
+ * @readonly
76
+ * @default 0
77
+ */
29
78
  this.version = 0;
30
79
 
31
- this._cacheKey = null;
32
- this._cacheKeyVersion = 0;
33
-
80
+ /**
81
+ * Whether this node is global or not. This property is relevant for the internal
82
+ * node caching system. All nodes which should be declared just once should
83
+ * set this flag to `true` (a typical example is {@link AttributeNode}).
84
+ *
85
+ * @type {Boolean}
86
+ * @default false
87
+ */
34
88
  this.global = false;
35
89
 
90
+ /**
91
+ * This flag can be used for type testing.
92
+ *
93
+ * @type {Boolean}
94
+ * @readonly
95
+ * @default true
96
+ */
36
97
  this.isNode = true;
37
98
 
99
+ // private
100
+
101
+ /**
102
+ * The cache key of this node.
103
+ *
104
+ * @private
105
+ * @type {Number?}
106
+ * @default null
107
+ */
108
+ this._cacheKey = null;
109
+
110
+ /**
111
+ * The cache key 's version.
112
+ *
113
+ * @private
114
+ * @type {Number}
115
+ * @default 0
116
+ */
117
+ this._cacheKeyVersion = 0;
118
+
38
119
  Object.defineProperty( this, 'id', { value: _nodeId ++ } );
39
120
 
40
121
  }
41
122
 
123
+ /**
124
+ * Set this property to `true` when the node should be regenerated.
125
+ *
126
+ * @type {Boolean}
127
+ * @default false
128
+ * @param {boolean} value
129
+ */
42
130
  set needsUpdate( value ) {
43
131
 
44
132
  if ( value === true ) {
@@ -49,12 +137,25 @@ class Node extends EventDispatcher {
49
137
 
50
138
  }
51
139
 
140
+ /**
141
+ * The type of the class. The value is usually the constructor name.
142
+ *
143
+ * @type {String}
144
+ * @readonly
145
+ */
52
146
  get type() {
53
147
 
54
148
  return this.constructor.type;
55
149
 
56
150
  }
57
151
 
152
+ /**
153
+ * Convenient method for defining {@link Node#update}.
154
+ *
155
+ * @param {Function} callback - The update method.
156
+ * @param {String} updateType - The update type.
157
+ * @return {Node} A reference to this node.
158
+ */
58
159
  onUpdate( callback, updateType ) {
59
160
 
60
161
  this.updateType = updateType;
@@ -64,24 +165,51 @@ class Node extends EventDispatcher {
64
165
 
65
166
  }
66
167
 
168
+ /**
169
+ * Convenient method for defining {@link Node#update}. Similar to {@link Node#onUpdate}, but
170
+ * this method automatically sets the update type to `FRAME`.
171
+ *
172
+ * @param {Function} callback - The update method.
173
+ * @return {Node} A reference to this node.
174
+ */
67
175
  onFrameUpdate( callback ) {
68
176
 
69
177
  return this.onUpdate( callback, NodeUpdateType.FRAME );
70
178
 
71
179
  }
72
180
 
181
+ /**
182
+ * Convenient method for defining {@link Node#update}. Similar to {@link Node#onUpdate}, but
183
+ * this method automatically sets the update type to `RENDER`.
184
+ *
185
+ * @param {Function} callback - The update method.
186
+ * @return {Node} A reference to this node.
187
+ */
73
188
  onRenderUpdate( callback ) {
74
189
 
75
190
  return this.onUpdate( callback, NodeUpdateType.RENDER );
76
191
 
77
192
  }
78
193
 
194
+ /**
195
+ * Convenient method for defining {@link Node#update}. Similar to {@link Node#onUpdate}, but
196
+ * this method automatically sets the update type to `OBJECT`.
197
+ *
198
+ * @param {Function} callback - The update method.
199
+ * @return {Node} A reference to this node.
200
+ */
79
201
  onObjectUpdate( callback ) {
80
202
 
81
203
  return this.onUpdate( callback, NodeUpdateType.OBJECT );
82
204
 
83
205
  }
84
206
 
207
+ /**
208
+ * Convenient method for defining {@link Node#updateReference}.
209
+ *
210
+ * @param {Function} callback - The update method.
211
+ * @return {Node} A reference to this node.
212
+ */
85
213
  onReference( callback ) {
86
214
 
87
215
  this.updateReference = callback.bind( this.getSelf() );
@@ -90,6 +218,12 @@ class Node extends EventDispatcher {
90
218
 
91
219
  }
92
220
 
221
+ /**
222
+ * The `this` reference might point to a Proxy so this method can be used
223
+ * to get the reference to the actual node instance.
224
+ *
225
+ * @return {Node} A reference to the node.
226
+ */
93
227
  getSelf() {
94
228
 
95
229
  // Returns non-node object.
@@ -98,18 +232,39 @@ class Node extends EventDispatcher {
98
232
 
99
233
  }
100
234
 
235
+ /**
236
+ * Nodes might refer to other objects like materials. This method allows to dynamically update the reference
237
+ * to such objects based on a given state (e.g. the current node frame or builder).
238
+ *
239
+ * @param {Any} state - This method can be invocated in different contexts so `state` can refer to any object type.
240
+ * @return {Any} The updated reference.
241
+ */
101
242
  updateReference( /*state*/ ) {
102
243
 
103
244
  return this;
104
245
 
105
246
  }
106
247
 
248
+ /**
249
+ * By default this method returns the value of the {@link Node#global} flag. This method
250
+ * can be overwritten in derived classes if an analytical way is required to determine the
251
+ * global status.
252
+ *
253
+ * @param {NodeBuilder} builder - The current node builder.
254
+ * @return {Boolean} Whether this node is global or not.
255
+ */
107
256
  isGlobal( /*builder*/ ) {
108
257
 
109
258
  return this.global;
110
259
 
111
260
  }
112
261
 
262
+ /**
263
+ * Generator function that can be used to iterate over the child nodes.
264
+ *
265
+ * @generator
266
+ * @yields {Node} A child node.
267
+ */
113
268
  * getChildren() {
114
269
 
115
270
  for ( const { childNode } of getNodeChildren( this ) ) {
@@ -120,12 +275,28 @@ class Node extends EventDispatcher {
120
275
 
121
276
  }
122
277
 
278
+ /**
279
+ * Calling this method dispatches the `dispose` event. This event can be used
280
+ * to register event listeners for clean up tasks.
281
+ */
123
282
  dispose() {
124
283
 
125
284
  this.dispatchEvent( { type: 'dispose' } );
126
285
 
127
286
  }
128
287
 
288
+ /**
289
+ * Callback for {@link Node#traverse}.
290
+ *
291
+ * @callback traverseCallback
292
+ * @param {Node} node - The current node.
293
+ */
294
+
295
+ /**
296
+ * Can be used to traverse through the node's hierarchy.
297
+ *
298
+ * @param {traverseCallback} callback - A callback that is executed per node.
299
+ */
129
300
  traverse( callback ) {
130
301
 
131
302
  callback( this );
@@ -138,13 +309,19 @@ class Node extends EventDispatcher {
138
309
 
139
310
  }
140
311
 
312
+ /**
313
+ * Returns the cache key for this node.
314
+ *
315
+ * @param {Boolean} [force=false] - When set to `true`, a recomputation of the cache key is forced.
316
+ * @return {Number} The cache key of the node.
317
+ */
141
318
  getCacheKey( force = false ) {
142
319
 
143
320
  force = force || this.version !== this._cacheKeyVersion;
144
321
 
145
322
  if ( force === true || this._cacheKey === null ) {
146
323
 
147
- this._cacheKey = getCacheKey( this, force );
324
+ this._cacheKey = hash( getCacheKey( this, force ), this.customCacheKey() );
148
325
  this._cacheKeyVersion = this.version;
149
326
 
150
327
  }
@@ -153,36 +330,83 @@ class Node extends EventDispatcher {
153
330
 
154
331
  }
155
332
 
333
+ /**
334
+ * Generate a custom cache key for this node.
335
+ *
336
+ * @return {Number} The cache key of the node.
337
+ */
338
+ customCacheKey() {
339
+
340
+ return 0;
341
+
342
+ }
343
+
344
+ /**
345
+ * Returns the references to this node which is by default `this`.
346
+ *
347
+ * @return {Node} A reference to this node.
348
+ */
156
349
  getScope() {
157
350
 
158
351
  return this;
159
352
 
160
353
  }
161
354
 
355
+ /**
356
+ * Returns the hash of the node which is used to identify the node. By default it's
357
+ * the {@link Node#uuid} however derived node classes might have to overwrite this method
358
+ * depending on their implementation.
359
+ *
360
+ * @param {NodeBuilder} builder - The current node builder.
361
+ * @return {String} The hash.
362
+ */
162
363
  getHash( /*builder*/ ) {
163
364
 
164
365
  return this.uuid;
165
366
 
166
367
  }
167
368
 
369
+ /**
370
+ * Returns the update type of {@link Node#update}.
371
+ *
372
+ * @return {NodeUpdateType} The update type.
373
+ */
168
374
  getUpdateType() {
169
375
 
170
376
  return this.updateType;
171
377
 
172
378
  }
173
379
 
380
+ /**
381
+ * Returns the update type of {@link Node#updateBefore}.
382
+ *
383
+ * @return {NodeUpdateType} The update type.
384
+ */
174
385
  getUpdateBeforeType() {
175
386
 
176
387
  return this.updateBeforeType;
177
388
 
178
389
  }
179
390
 
391
+ /**
392
+ * Returns the update type of {@link Node#updateAfter}.
393
+ *
394
+ * @return {NodeUpdateType} The update type.
395
+ */
180
396
  getUpdateAfterType() {
181
397
 
182
398
  return this.updateAfterType;
183
399
 
184
400
  }
185
401
 
402
+ /**
403
+ * Certain types are composed of multiple elements. For example a `vec3`
404
+ * is composed of three `float` values. This method returns the type of
405
+ * these elements.
406
+ *
407
+ * @param {NodeBuilder} builder - The current node builder.
408
+ * @return {String} The type of the node.
409
+ */
186
410
  getElementType( builder ) {
187
411
 
188
412
  const type = this.getNodeType( builder );
@@ -192,6 +416,12 @@ class Node extends EventDispatcher {
192
416
 
193
417
  }
194
418
 
419
+ /**
420
+ * Returns the node's type.
421
+ *
422
+ * @param {NodeBuilder} builder - The current node builder.
423
+ * @return {String} The type of the node.
424
+ */
195
425
  getNodeType( builder ) {
196
426
 
197
427
  const nodeProperties = builder.getNodeProperties( this );
@@ -206,6 +436,15 @@ class Node extends EventDispatcher {
206
436
 
207
437
  }
208
438
 
439
+ /**
440
+ * This method is used during the build process of a node and ensures
441
+ * equal nodes are not built multiple times but just once. For example if
442
+ * `attribute( 'uv' )` is used multiple times by the user, the build
443
+ * process makes sure to process just the first node.
444
+ *
445
+ * @param {NodeBuilder} builder - The current node builder.
446
+ * @return {Node} The shared node if possible. Otherwise `this` is returned.
447
+ */
209
448
  getShared( builder ) {
210
449
 
211
450
  const hash = this.getHash( builder );
@@ -215,6 +454,14 @@ class Node extends EventDispatcher {
215
454
 
216
455
  }
217
456
 
457
+ /**
458
+ * Represents the setup stage which is the first step of the build process, see {@link Node#build} method.
459
+ * This method is often overwritten in derived modules to prepare the node which is used as the output/result.
460
+ * The output node must be returned in the `return` statement.
461
+ *
462
+ * @param {NodeBuilder} builder - The current node builder.
463
+ * @return {Node?} The output node.
464
+ */
218
465
  setup( builder ) {
219
466
 
220
467
  const nodeProperties = builder.getNodeProperties( this );
@@ -227,11 +474,18 @@ class Node extends EventDispatcher {
227
474
 
228
475
  }
229
476
 
230
- // return a outputNode if exists
231
- return null;
477
+ // return a outputNode if exists or null
478
+
479
+ return nodeProperties.outputNode || null;
232
480
 
233
481
  }
234
482
 
483
+ /**
484
+ * Represents the analyze stage which is the second step of the build process, see {@link Node#build} method.
485
+ * This stage analyzes the node hierarchy and ensures descendent nodes are built.
486
+ *
487
+ * @param {NodeBuilder} builder - The current node builder.
488
+ */
235
489
  analyze( builder ) {
236
490
 
237
491
  const usageCount = builder.increaseUsage( this );
@@ -256,6 +510,14 @@ class Node extends EventDispatcher {
256
510
 
257
511
  }
258
512
 
513
+ /**
514
+ * Represents the generate stage which is the third step of the build process, see {@link Node#build} method.
515
+ * This state builds the output node and returns the resulting shader string.
516
+ *
517
+ * @param {NodeBuilder} builder - The current node builder.
518
+ * @param {String?} output - Can be used to define the output type.
519
+ * @return {String?} The generated shader string.
520
+ */
259
521
  generate( builder, output ) {
260
522
 
261
523
  const { outputNode } = builder.getNodeProperties( this );
@@ -268,24 +530,56 @@ class Node extends EventDispatcher {
268
530
 
269
531
  }
270
532
 
533
+ /**
534
+ * The method can be implemented to update the node's internal state before it is used to render an object.
535
+ * The {@link Node#updateBeforeType} property defines how often the update is executed.
536
+ *
537
+ * @abstract
538
+ * @param {NodeFrame} frame - A reference to the current node frame.
539
+ * @return {Boolean?} An optional bool that indicates whether the implementation actually performed an update or not (e.g. due to caching).
540
+ */
271
541
  updateBefore( /*frame*/ ) {
272
542
 
273
543
  console.warn( 'Abstract function.' );
274
544
 
275
545
  }
276
546
 
547
+ /**
548
+ * The method can be implemented to update the node's internal state after it was used to render an object.
549
+ * The {@link Node#updateAfterType} property defines how often the update is executed.
550
+ *
551
+ * @abstract
552
+ * @param {NodeFrame} frame - A reference to the current node frame.
553
+ * @return {Boolean?} An optional bool that indicates whether the implementation actually performed an update or not (e.g. due to caching).
554
+ */
277
555
  updateAfter( /*frame*/ ) {
278
556
 
279
557
  console.warn( 'Abstract function.' );
280
558
 
281
559
  }
282
560
 
561
+ /**
562
+ * The method can be implemented to update the node's internal state when it is used to render an object.
563
+ * The {@link Node#updateType} property defines how often the update is executed.
564
+ *
565
+ * @abstract
566
+ * @param {NodeFrame} frame - A reference to the current node frame.
567
+ * @return {Boolean?} An optional bool that indicates whether the implementation actually performed an update or not (e.g. due to caching).
568
+ */
283
569
  update( /*frame*/ ) {
284
570
 
285
571
  console.warn( 'Abstract function.' );
286
572
 
287
573
  }
288
574
 
575
+ /**
576
+ * This method performs the build of a node. The behavior of this method as well as its return value depend
577
+ * on the current build stage (setup, analyze or generate).
578
+ *
579
+ * @param {NodeBuilder} builder - The current node builder.
580
+ * @param {String?} output - Can be used to define the output type.
581
+ * @return {String?} When this method is executed in the setup or analyze stage, `null` is returned. In the generate stage, the generated shader string.
582
+ */
289
583
  build( builder, output = null ) {
290
584
 
291
585
  const refNode = this.getShared( builder );
@@ -316,17 +610,19 @@ class Node extends EventDispatcher {
316
610
 
317
611
  if ( properties.initialized !== true ) {
318
612
 
319
- const stackNodesBeforeSetup = builder.stack.nodes.length;
613
+ //const stackNodesBeforeSetup = builder.stack.nodes.length;
320
614
 
321
615
  properties.initialized = true;
322
- properties.outputNode = this.setup( builder );
323
616
 
324
- if ( properties.outputNode !== null && builder.stack.nodes.length !== stackNodesBeforeSetup ) {
617
+ const outputNode = this.setup( builder ); // return a node or null
618
+ const isNodeOutput = outputNode && outputNode.isNode === true;
619
+
620
+ /*if ( isNodeOutput && builder.stack.nodes.length !== stackNodesBeforeSetup ) {
325
621
 
326
622
  // !! no outputNode !!
327
- //properties.outputNode = builder.stack;
623
+ //outputNode = builder.stack;
328
624
 
329
- }
625
+ }*/
330
626
 
331
627
  for ( const childNode of Object.values( properties ) ) {
332
628
 
@@ -338,6 +634,14 @@ class Node extends EventDispatcher {
338
634
 
339
635
  }
340
636
 
637
+ if ( isNodeOutput ) {
638
+
639
+ outputNode.build( builder );
640
+
641
+ }
642
+
643
+ properties.outputNode = outputNode;
644
+
341
645
  }
342
646
 
343
647
  } else if ( buildStage === 'analyze' ) {
@@ -384,12 +688,22 @@ class Node extends EventDispatcher {
384
688
 
385
689
  }
386
690
 
691
+ /**
692
+ * Returns the child nodes as a JSON object.
693
+ *
694
+ * @return {Object} The serialized child objects as JSON.
695
+ */
387
696
  getSerializeChildren() {
388
697
 
389
698
  return getNodeChildren( this );
390
699
 
391
700
  }
392
701
 
702
+ /**
703
+ * Serializes the node to JSON.
704
+ *
705
+ * @param {Object} json - The output JSON object.
706
+ */
393
707
  serialize( json ) {
394
708
 
395
709
  const nodeChildren = this.getSerializeChildren();
@@ -424,6 +738,11 @@ class Node extends EventDispatcher {
424
738
 
425
739
  }
426
740
 
741
+ /**
742
+ * Deserializes the node from the given JSON.
743
+ *
744
+ * @param {Object} json - The JSON object.
745
+ */
427
746
  deserialize( json ) {
428
747
 
429
748
  if ( json.inputNodes !== undefined ) {
@@ -472,6 +791,12 @@ class Node extends EventDispatcher {
472
791
 
473
792
  }
474
793
 
794
+ /**
795
+ * Serializes the node into the three.js JSON Object/Scene format.
796
+ *
797
+ * @param {Object?} meta - An optional JSON object that already holds serialized data from other scene objects.
798
+ * @return {Object} The serialized node.
799
+ */
475
800
  toJSON( meta ) {
476
801
 
477
802
  const { uuid, type } = this;
@@ -1,11 +1,49 @@
1
+ /**
2
+ * {@link NodeBuilder} is going to create instances of this class during the build process
3
+ * of nodes. They represent the final shader attributes that are going to be generated
4
+ * by the builder. Arrays of node attributes is maintained in {@link NodeBuilder#attributes}
5
+ * and {@link NodeBuilder#bufferAttributes} for this purpose.
6
+ */
1
7
  class NodeAttribute {
2
8
 
9
+ /**
10
+ * Constructs a new node attribute.
11
+ *
12
+ * @param {String} name - The name of the attribute.
13
+ * @param {String} type - The type of the attribute.
14
+ * @param {Node?} node - An optional reference to the node.
15
+ */
3
16
  constructor( name, type, node = null ) {
4
17
 
18
+ /**
19
+ * This flag can be used for type testing.
20
+ *
21
+ * @type {Boolean}
22
+ * @readonly
23
+ * @default true
24
+ */
5
25
  this.isNodeAttribute = true;
6
26
 
27
+ /**
28
+ * The name of the attribute.
29
+ *
30
+ * @type {String}
31
+ */
7
32
  this.name = name;
33
+
34
+ /**
35
+ * The type of the attribute.
36
+ *
37
+ * @type {String}
38
+ */
8
39
  this.type = type;
40
+
41
+ /**
42
+ * An optional reference to the node.
43
+ *
44
+ * @type {Node?}
45
+ * @default null
46
+ */
9
47
  this.node = node;
10
48
 
11
49
  }