super-three 0.171.0 → 0.173.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 (455) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +594 -427
  4. package/build/three.core.js +515 -81
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +79 -350
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +20 -7
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +29362 -3427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +29361 -3427
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -5
  15. package/examples/jsm/animation/CCDIKSolver.js +9 -7
  16. package/examples/jsm/capabilities/WebGPU.js +1 -1
  17. package/examples/jsm/controls/ArcballControls.js +48 -37
  18. package/examples/jsm/controls/OrbitControls.js +5 -4
  19. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  20. package/examples/jsm/curves/NURBSCurve.js +1 -1
  21. package/examples/jsm/curves/NURBSUtils.js +3 -0
  22. package/examples/jsm/effects/OutlineEffect.js +1 -1
  23. package/examples/jsm/exporters/GLTFExporter.js +34 -29
  24. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  25. package/examples/jsm/exporters/PLYExporter.js +2 -2
  26. package/examples/jsm/geometries/TextGeometry.js +1 -12
  27. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  28. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  29. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  30. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  31. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  32. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  33. package/examples/jsm/loaders/3MFLoader.js +6 -3
  34. package/examples/jsm/loaders/BVHLoader.js +1 -1
  35. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  36. package/examples/jsm/loaders/DDSLoader.js +42 -0
  37. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  38. package/examples/jsm/loaders/GLTFLoader.js +22 -4
  39. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  40. package/examples/jsm/loaders/KTXLoader.js +4 -4
  41. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  42. package/examples/jsm/loaders/LottieLoader.js +1 -1
  43. package/examples/jsm/loaders/MTLLoader.js +1 -0
  44. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  45. package/examples/jsm/loaders/PLYLoader.js +7 -7
  46. package/examples/jsm/loaders/PVRLoader.js +1 -1
  47. package/examples/jsm/loaders/SVGLoader.js +2 -2
  48. package/examples/jsm/loaders/TDSLoader.js +1 -2
  49. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  50. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  51. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  52. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  53. package/examples/jsm/math/ConvexHull.js +1 -1
  54. package/examples/jsm/math/OBB.js +17 -0
  55. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  56. package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
  57. package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
  58. package/examples/jsm/misc/Volume.js +27 -17
  59. package/examples/jsm/misc/VolumeSlice.js +7 -5
  60. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  61. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  62. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  63. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  64. package/examples/jsm/objects/Sky.js +2 -2
  65. package/examples/jsm/objects/SkyMesh.js +3 -3
  66. package/examples/jsm/objects/Water2.js +1 -1
  67. package/examples/jsm/objects/Water2Mesh.js +2 -2
  68. package/examples/jsm/objects/WaterMesh.js +29 -24
  69. package/examples/jsm/physics/JoltPhysics.js +7 -7
  70. package/examples/jsm/physics/RapierPhysics.js +4 -4
  71. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  72. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  73. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  74. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  75. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  76. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  77. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  78. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  79. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  80. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  81. package/examples/jsm/shaders/BokehShader2.js +1 -1
  82. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  83. package/examples/jsm/shaders/OutputShader.js +5 -1
  84. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  85. package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
  86. package/examples/jsm/transpiler/TSLEncoder.js +2 -0
  87. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  88. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  89. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  90. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  91. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  92. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  93. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  94. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  95. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  96. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  97. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  98. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  99. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  100. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  101. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  102. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  103. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  104. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  105. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  106. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  107. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  108. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  109. package/examples/jsm/tsl/display/Sepia.js +9 -0
  110. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  111. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  112. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  113. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  114. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  115. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  116. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  117. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  118. package/examples/jsm/utils/CameraUtils.js +4 -1
  119. package/examples/jsm/utils/GeometryUtils.js +22 -19
  120. package/examples/jsm/utils/SceneUtils.js +2 -2
  121. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  122. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  123. package/package.json +8 -3
  124. package/src/Three.Core.js +4 -0
  125. package/src/Three.Legacy.js +0 -21
  126. package/src/Three.TSL.js +18 -5
  127. package/src/Three.WebGPU.Nodes.js +2 -2
  128. package/src/Three.WebGPU.js +2 -2
  129. package/src/animation/PropertyBinding.js +2 -2
  130. package/src/cameras/ArrayCamera.js +1 -0
  131. package/src/cameras/PerspectiveCamera.js +18 -2
  132. package/src/constants.js +6 -1
  133. package/src/core/BufferAttribute.js +4 -0
  134. package/src/core/EventDispatcher.js +8 -6
  135. package/src/core/RenderTarget.js +18 -0
  136. package/src/core/RenderTarget3D.js +22 -0
  137. package/src/core/RenderTargetArray.js +22 -0
  138. package/src/extras/Earcut.js +1 -1
  139. package/src/extras/ImageUtils.js +1 -11
  140. package/src/extras/PMREMGenerator.js +20 -0
  141. package/src/extras/TextureUtils.js +6 -0
  142. package/src/helpers/CameraHelper.js +16 -13
  143. package/src/loaders/nodes/NodeLoader.js +59 -0
  144. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  145. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  146. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  147. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  148. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  149. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  150. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  151. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  152. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  153. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  154. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  155. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  156. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  157. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  158. package/src/materials/nodes/NodeMaterial.js +476 -23
  159. package/src/materials/nodes/NodeMaterials.js +0 -1
  160. package/src/materials/nodes/PointsNodeMaterial.js +121 -10
  161. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  162. package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
  163. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  164. package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
  165. package/src/nodes/Nodes.js +5 -6
  166. package/src/nodes/TSL.js +6 -3
  167. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  168. package/src/nodes/accessors/Arrays.js +47 -6
  169. package/src/nodes/accessors/BatchNode.js +42 -6
  170. package/src/nodes/accessors/Bitangent.js +37 -0
  171. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  172. package/src/nodes/accessors/BufferNode.js +63 -0
  173. package/src/nodes/accessors/BuiltinNode.js +38 -0
  174. package/src/nodes/accessors/Camera.js +113 -3
  175. package/src/nodes/accessors/ClippingNode.js +71 -2
  176. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  177. package/src/nodes/accessors/InstanceNode.js +85 -2
  178. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  179. package/src/nodes/accessors/Lights.js +50 -1
  180. package/src/nodes/accessors/MaterialNode.js +306 -12
  181. package/src/nodes/accessors/MaterialProperties.js +7 -0
  182. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  183. package/src/nodes/accessors/ModelNode.js +100 -5
  184. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  185. package/src/nodes/accessors/MorphNode.js +48 -4
  186. package/src/nodes/accessors/Normal.js +65 -5
  187. package/src/nodes/accessors/Object3DNode.js +101 -1
  188. package/src/nodes/accessors/PointUVNode.js +26 -0
  189. package/src/nodes/accessors/Position.js +56 -7
  190. package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
  191. package/src/nodes/accessors/ReferenceNode.js +201 -2
  192. package/src/nodes/accessors/ReflectVector.js +24 -0
  193. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  194. package/src/nodes/accessors/SceneNode.js +54 -0
  195. package/src/nodes/accessors/SkinningNode.js +127 -1
  196. package/src/nodes/accessors/StorageBufferNode.js +209 -8
  197. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  198. package/src/nodes/accessors/Tangent.js +38 -2
  199. package/src/nodes/accessors/Texture3DNode.js +91 -7
  200. package/src/nodes/accessors/TextureBicubic.js +12 -2
  201. package/src/nodes/accessors/TextureNode.js +316 -10
  202. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  203. package/src/nodes/accessors/UV.js +10 -1
  204. package/src/nodes/accessors/UniformArrayNode.js +231 -25
  205. package/src/nodes/accessors/UserDataNode.js +46 -0
  206. package/src/nodes/accessors/VelocityNode.js +80 -0
  207. package/src/nodes/accessors/VertexColorNode.js +39 -2
  208. package/src/nodes/code/CodeNode.js +95 -1
  209. package/src/nodes/code/ExpressionNode.js +28 -0
  210. package/src/nodes/code/FunctionCallNode.js +37 -0
  211. package/src/nodes/code/FunctionNode.js +45 -0
  212. package/src/nodes/code/ScriptableNode.js +223 -1
  213. package/src/nodes/code/ScriptableValueNode.js +85 -1
  214. package/src/nodes/core/ArrayNode.js +125 -0
  215. package/src/nodes/core/AssignNode.js +48 -2
  216. package/src/nodes/core/AttributeNode.js +43 -0
  217. package/src/nodes/core/BypassNode.js +47 -2
  218. package/src/nodes/core/CacheNode.js +53 -2
  219. package/src/nodes/core/ConstNode.js +32 -0
  220. package/src/nodes/core/ContextNode.js +65 -0
  221. package/src/nodes/core/IndexNode.js +68 -7
  222. package/src/nodes/core/InputNode.js +48 -0
  223. package/src/nodes/core/LightingModel.js +60 -0
  224. package/src/nodes/core/MRTNode.js +66 -0
  225. package/src/nodes/core/Node.js +350 -12
  226. package/src/nodes/core/NodeAttribute.js +38 -0
  227. package/src/nodes/core/NodeBuilder.js +1166 -26
  228. package/src/nodes/core/NodeCache.js +41 -2
  229. package/src/nodes/core/NodeCode.js +31 -0
  230. package/src/nodes/core/NodeFrame.js +123 -2
  231. package/src/nodes/core/NodeFunction.js +46 -0
  232. package/src/nodes/core/NodeFunctionInput.js +44 -0
  233. package/src/nodes/core/NodeParser.js +11 -0
  234. package/src/nodes/core/NodeUniform.js +52 -0
  235. package/src/nodes/core/NodeUtils.js +152 -1
  236. package/src/nodes/core/NodeVar.js +47 -1
  237. package/src/nodes/core/NodeVarying.js +28 -0
  238. package/src/nodes/core/OutputStructNode.js +51 -10
  239. package/src/nodes/core/ParameterNode.js +28 -0
  240. package/src/nodes/core/PropertyNode.js +232 -0
  241. package/src/nodes/core/StackNode.js +98 -1
  242. package/src/nodes/core/StructNode.js +121 -0
  243. package/src/nodes/core/StructType.js +13 -0
  244. package/src/nodes/core/StructTypeNode.js +105 -6
  245. package/src/nodes/core/TempNode.js +31 -5
  246. package/src/nodes/core/UniformGroupNode.js +82 -7
  247. package/src/nodes/core/UniformNode.js +66 -0
  248. package/src/nodes/core/VarNode.js +146 -7
  249. package/src/nodes/core/VaryingNode.js +100 -3
  250. package/src/nodes/core/constants.js +36 -0
  251. package/src/nodes/display/BlendModes.js +88 -1
  252. package/src/nodes/display/BumpMapNode.js +37 -0
  253. package/src/nodes/display/ColorAdjustment.js +53 -11
  254. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  255. package/src/nodes/display/ColorSpaceNode.js +82 -0
  256. package/src/nodes/display/FrontFacingNode.js +29 -0
  257. package/src/nodes/display/NormalMapNode.js +43 -0
  258. package/src/nodes/display/PassNode.js +300 -7
  259. package/src/nodes/display/PosterizeNode.js +33 -0
  260. package/src/nodes/display/RenderOutputNode.js +66 -1
  261. package/src/nodes/display/ScreenNode.js +96 -0
  262. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  263. package/src/nodes/display/ToneMappingNode.js +55 -2
  264. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  265. package/src/nodes/display/ViewportDepthNode.js +122 -8
  266. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  267. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  268. package/src/nodes/display/ViewportTextureNode.js +57 -0
  269. package/src/nodes/fog/Fog.js +110 -0
  270. package/src/nodes/functions/BasicLightingModel.js +24 -0
  271. package/src/nodes/functions/PhongLightingModel.js +34 -2
  272. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  273. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  274. package/src/nodes/functions/ToonLightingModel.js +20 -0
  275. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  276. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  277. package/src/nodes/geometry/RangeNode.js +54 -2
  278. package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
  279. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  280. package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
  281. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  282. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  283. package/src/nodes/lighting/AONode.js +18 -0
  284. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  285. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  286. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  287. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  288. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  289. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  290. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  291. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  292. package/src/nodes/lighting/IrradianceNode.js +17 -0
  293. package/src/nodes/lighting/LightProbeNode.js +20 -0
  294. package/src/nodes/lighting/LightUtils.js +12 -0
  295. package/src/nodes/lighting/LightingContextNode.js +48 -0
  296. package/src/nodes/lighting/LightingNode.js +15 -6
  297. package/src/nodes/lighting/LightsNode.js +132 -1
  298. package/src/nodes/lighting/PointLightNode.js +32 -1
  299. package/src/nodes/lighting/PointShadowNode.js +54 -1
  300. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  301. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  302. package/src/nodes/lighting/ShadowNode.js +241 -35
  303. package/src/nodes/lighting/SpotLightNode.js +43 -0
  304. package/src/nodes/math/ConditionalNode.js +78 -4
  305. package/src/nodes/math/Hash.js +9 -0
  306. package/src/nodes/math/MathNode.js +627 -11
  307. package/src/nodes/math/MathUtils.js +45 -1
  308. package/src/nodes/math/OperatorNode.js +329 -18
  309. package/src/nodes/math/TriNoise3D.js +18 -7
  310. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  311. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  312. package/src/nodes/pmrem/PMREMNode.js +133 -0
  313. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  314. package/src/nodes/procedural/Checker.js +9 -0
  315. package/src/nodes/shapes/Shapes.js +33 -0
  316. package/src/nodes/tsl/TSLBase.js +3 -2
  317. package/src/nodes/tsl/TSLCore.js +22 -2
  318. package/src/nodes/utils/ArrayElementNode.js +39 -3
  319. package/src/nodes/utils/ConvertNode.js +31 -0
  320. package/src/nodes/utils/CubeMapNode.js +78 -0
  321. package/src/nodes/utils/Discard.js +16 -0
  322. package/src/nodes/utils/EquirectUVNode.js +31 -1
  323. package/src/nodes/utils/FlipNode.js +38 -0
  324. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  325. package/src/nodes/utils/JoinNode.js +25 -0
  326. package/src/nodes/utils/LoopNode.js +82 -2
  327. package/src/nodes/utils/MatcapUVNode.js +17 -0
  328. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  329. package/src/nodes/utils/MemberNode.js +68 -0
  330. package/src/nodes/utils/Oscillators.js +33 -0
  331. package/src/nodes/utils/Packing.js +17 -0
  332. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  333. package/src/nodes/utils/RTTNode.js +123 -2
  334. package/src/nodes/utils/ReflectorNode.js +174 -4
  335. package/src/nodes/utils/RemapNode.js +79 -0
  336. package/src/nodes/utils/RotateNode.js +41 -0
  337. package/src/nodes/utils/SetNode.js +44 -1
  338. package/src/nodes/utils/SplitNode.js +55 -3
  339. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  340. package/src/nodes/utils/SpriteUtils.js +17 -0
  341. package/src/nodes/utils/StorageArrayElementNode.js +54 -0
  342. package/src/nodes/utils/Timer.js +40 -0
  343. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  344. package/src/nodes/utils/UVUtils.js +20 -0
  345. package/src/nodes/utils/ViewportUtils.js +13 -0
  346. package/src/objects/BatchedMesh.js +2 -3
  347. package/src/objects/ClippingGroup.js +49 -0
  348. package/src/objects/Line.js +6 -6
  349. package/src/renderers/WebGLRenderer.js +30 -4
  350. package/src/renderers/common/Animation.js +85 -0
  351. package/src/renderers/common/Attributes.js +36 -0
  352. package/src/renderers/common/Backend.js +502 -44
  353. package/src/renderers/common/Background.js +48 -1
  354. package/src/renderers/common/BindGroup.js +43 -0
  355. package/src/renderers/common/Binding.js +35 -0
  356. package/src/renderers/common/Bindings.js +93 -1
  357. package/src/renderers/common/Buffer.js +49 -0
  358. package/src/renderers/common/BufferUtils.js +27 -0
  359. package/src/renderers/common/BundleGroup.js +57 -0
  360. package/src/renderers/common/ChainMap.js +45 -6
  361. package/src/renderers/common/ClippingContext.js +108 -15
  362. package/src/renderers/common/Color4.js +40 -0
  363. package/src/renderers/common/ComputePipeline.js +24 -0
  364. package/src/renderers/common/CubeRenderTarget.js +13 -0
  365. package/src/renderers/common/DataMap.js +37 -1
  366. package/src/renderers/common/Geometries.js +91 -14
  367. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  368. package/src/renderers/common/Info.js +78 -35
  369. package/src/renderers/common/Lighting.js +34 -6
  370. package/src/renderers/common/Pipeline.js +22 -0
  371. package/src/renderers/common/Pipelines.js +148 -5
  372. package/src/renderers/common/PostProcessing.js +99 -11
  373. package/src/renderers/common/ProgrammableStage.js +60 -2
  374. package/src/renderers/common/QuadMesh.js +54 -5
  375. package/src/renderers/common/RenderBundle.js +14 -8
  376. package/src/renderers/common/RenderBundles.js +39 -10
  377. package/src/renderers/common/RenderContext.js +201 -2
  378. package/src/renderers/common/RenderContexts.js +59 -6
  379. package/src/renderers/common/RenderList.js +178 -0
  380. package/src/renderers/common/RenderLists.js +40 -3
  381. package/src/renderers/common/RenderObject.js +400 -17
  382. package/src/renderers/common/RenderObjects.js +103 -7
  383. package/src/renderers/common/RenderPipeline.js +24 -0
  384. package/src/renderers/common/Renderer.js +1170 -86
  385. package/src/renderers/common/RendererUtils.js +193 -0
  386. package/src/renderers/common/SampledTexture.js +120 -0
  387. package/src/renderers/common/Sampler.js +30 -0
  388. package/src/renderers/common/StorageBuffer.js +24 -0
  389. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  390. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  391. package/src/renderers/common/StorageTexture.js +38 -0
  392. package/src/renderers/common/Textures.js +97 -7
  393. package/src/renderers/common/TimestampQueryPool.js +39 -0
  394. package/src/renderers/common/Uniform.js +225 -3
  395. package/src/renderers/common/UniformBuffer.js +19 -0
  396. package/src/renderers/common/UniformsGroup.js +141 -2
  397. package/src/renderers/common/XRManager.js +1193 -0
  398. package/src/renderers/common/XRRenderTarget.js +74 -0
  399. package/src/renderers/common/extras/PMREMGenerator.js +76 -10
  400. package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
  401. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  402. package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
  403. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  404. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  405. package/src/renderers/common/nodes/NodeUniform.js +243 -2
  406. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  407. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  408. package/src/renderers/common/nodes/Nodes.js +352 -78
  409. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  410. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  411. package/src/renderers/webgl/WebGLBackground.js +4 -0
  412. package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
  413. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
  414. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
  415. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  416. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  417. package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
  418. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
  419. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
  420. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  421. package/src/renderers/webgpu/WebGPUBackend.js +578 -164
  422. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
  423. package/src/renderers/webgpu/WebGPURenderer.js +36 -0
  424. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  425. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  426. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
  427. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  428. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  429. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
  430. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
  431. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
  432. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
  433. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
  434. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
  435. package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
  436. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  437. package/src/renderers/webxr/WebXRManager.js +19 -2
  438. package/src/textures/Data3DTexture.js +2 -2
  439. package/src/textures/Texture.js +4 -0
  440. package/src/textures/VideoFrameTexture.js +35 -0
  441. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  442. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  443. package/examples/jsm/exporters/MMDExporter.js +0 -223
  444. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
  445. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  446. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  447. package/examples/jsm/objects/InstancedPoints.js +0 -19
  448. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  449. package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
  450. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
  451. package/src/nodes/core/UniformGroup.js +0 -13
  452. package/src/nodes/fog/FogExp2Node.js +0 -35
  453. package/src/nodes/fog/FogNode.js +0 -50
  454. package/src/nodes/fog/FogRangeNode.js +0 -36
  455. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -1,18 +1,49 @@
1
1
  import Node from '../core/Node.js';
2
2
  import { nodeProxy } from '../tsl/TSLBase.js';
3
3
 
4
+ /** @module BuiltinNode **/
5
+
6
+ /**
7
+ * The node allows to set values for built-in shader variables. That is
8
+ * required for features like hardware-accelerated vertex clipping.
9
+ *
10
+ * @augments Node
11
+ */
4
12
  class BuiltinNode extends Node {
5
13
 
14
+ /**
15
+ * Constructs a new builtin node.
16
+ *
17
+ * @param {String} name - The name of the built-in shader variable.
18
+ */
6
19
  constructor( name ) {
7
20
 
8
21
  super( 'float' );
9
22
 
23
+ /**
24
+ * The name of the built-in shader variable.
25
+ *
26
+ * @type {String}
27
+ */
10
28
  this.name = name;
11
29
 
30
+ /**
31
+ * This flag can be used for type testing.
32
+ *
33
+ * @type {Boolean}
34
+ * @readonly
35
+ * @default true
36
+ */
12
37
  this.isBuiltinNode = true;
13
38
 
14
39
  }
15
40
 
41
+ /**
42
+ * Generates the code snippet of the builtin node.
43
+ *
44
+ * @param {NodeBuilder} builder - The current node builder.
45
+ * @return {String} The generated code snippet.
46
+ */
16
47
  generate( /* builder */ ) {
17
48
 
18
49
  return this.name;
@@ -23,4 +54,11 @@ class BuiltinNode extends Node {
23
54
 
24
55
  export default BuiltinNode;
25
56
 
57
+ /**
58
+ * TSL function for creating a builtin node.
59
+ *
60
+ * @function
61
+ * @param {String} name - The name of the built-in shader variable.
62
+ * @returns {BuiltinNode}
63
+ */
26
64
  export const builtin = nodeProxy( BuiltinNode );
@@ -1,12 +1,122 @@
1
1
  import { uniform } from '../core/UniformNode.js';
2
- import { renderGroup } from '../core/UniformGroupNode.js';
2
+ import { renderGroup, sharedUniformGroup } from '../core/UniformGroupNode.js';
3
3
  import { Vector3 } from '../../math/Vector3.js';
4
+ import { Fn } from '../tsl/TSLBase.js';
5
+ import { uniformArray } from './UniformArrayNode.js';
4
6
 
7
+ /** @module Camera **/
8
+
9
+ /**
10
+ * TSL object that represents the current `index` value of the camera if used ArrayCamera.
11
+ *
12
+ * @type {UniformNode<uint>}
13
+ */
14
+ export const cameraIndex = /*@__PURE__*/ uniform( 0, 'uint' ).setGroup( sharedUniformGroup( 'cameraIndex' ) ).toVarying( 'v_cameraIndex' );
15
+
16
+ /**
17
+ * TSL object that represents the `near` value of the camera used for the current render.
18
+ *
19
+ * @type {UniformNode<float>}
20
+ */
5
21
  export const cameraNear = /*@__PURE__*/ uniform( 'float' ).label( 'cameraNear' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.near );
22
+
23
+ /**
24
+ * TSL object that represents the `far` value of the camera used for the current render.
25
+ *
26
+ * @type {UniformNode<float>}
27
+ */
6
28
  export const cameraFar = /*@__PURE__*/ uniform( 'float' ).label( 'cameraFar' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.far );
7
- export const cameraProjectionMatrix = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraProjectionMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrix );
29
+
30
+ /**
31
+ * TSL object that represents the projection matrix of the camera used for the current render.
32
+ *
33
+ * @type {UniformNode<mat4>}
34
+ */
35
+ export const cameraProjectionMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
36
+
37
+ let cameraProjectionMatrix;
38
+
39
+ if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
40
+
41
+ const matrices = [];
42
+
43
+ for ( const subCamera of camera.cameras ) {
44
+
45
+ matrices.push( subCamera.projectionMatrix );
46
+
47
+ }
48
+
49
+ const cameraProjectionMatrices = uniformArray( matrices ).setGroup( renderGroup ).label( 'cameraProjectionMatrices' );
50
+
51
+ cameraProjectionMatrix = cameraProjectionMatrices.element( cameraIndex ).toVar( 'cameraProjectionMatrix' );
52
+
53
+ } else {
54
+
55
+ cameraProjectionMatrix = uniform( 'mat4' ).label( 'cameraProjectionMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrix );
56
+
57
+ }
58
+
59
+ return cameraProjectionMatrix;
60
+
61
+ } ).once() )();
62
+
63
+ /**
64
+ * TSL object that represents the inverse projection matrix of the camera used for the current render.
65
+ *
66
+ * @type {UniformNode<mat4>}
67
+ */
8
68
  export const cameraProjectionMatrixInverse = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraProjectionMatrixInverse' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrixInverse );
9
- export const cameraViewMatrix = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraViewMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorldInverse );
69
+
70
+ /**
71
+ * TSL object that represents the view matrix of the camera used for the current render.
72
+ *
73
+ * @type {UniformNode<mat4>}
74
+ */
75
+ export const cameraViewMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
76
+
77
+ let cameraViewMatrix;
78
+
79
+ if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
80
+
81
+ const matrices = [];
82
+
83
+ for ( const subCamera of camera.cameras ) {
84
+
85
+ matrices.push( subCamera.matrixWorldInverse );
86
+
87
+ }
88
+
89
+ const cameraViewMatrices = uniformArray( matrices ).setGroup( renderGroup ).label( 'cameraViewMatrices' );
90
+
91
+ cameraViewMatrix = cameraViewMatrices.element( cameraIndex ).toVar( 'cameraViewMatrix' );
92
+
93
+ } else {
94
+
95
+ cameraViewMatrix = uniform( 'mat4' ).label( 'cameraViewMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorldInverse );
96
+
97
+ }
98
+
99
+ return cameraViewMatrix;
100
+
101
+ } ).once() )();
102
+
103
+ /**
104
+ * TSL object that represents the world matrix of the camera used for the current render.
105
+ *
106
+ * @type {UniformNode<mat4>}
107
+ */
10
108
  export const cameraWorldMatrix = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraWorldMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorld );
109
+
110
+ /**
111
+ * TSL object that represents the normal matrix of the camera used for the current render.
112
+ *
113
+ * @type {UniformNode<mat3>}
114
+ */
11
115
  export const cameraNormalMatrix = /*@__PURE__*/ uniform( 'mat3' ).label( 'cameraNormalMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.normalMatrix );
116
+
117
+ /**
118
+ * TSL object that represents the position in world space of the camera used for the current render.
119
+ *
120
+ * @type {UniformNode<vec3>}
121
+ */
12
122
  export const cameraPosition = /*@__PURE__*/ uniform( new Vector3() ).label( 'cameraPosition' ).setGroup( renderGroup ).onRenderUpdate( ( { camera }, self ) => self.value.setFromMatrixPosition( camera.matrixWorld ) );
@@ -8,6 +8,16 @@ import { smoothstep } from '../math/MathNode.js';
8
8
  import { uniformArray } from './UniformArrayNode.js';
9
9
  import { builtin } from './BuiltinNode.js';
10
10
 
11
+ /** @module ClippingNode **/
12
+
13
+ /**
14
+ * ```
15
+ * This node is used in {@link NodeMaterial} to setup the clipping
16
+ * which can happen hardware-accelerated (if supported) and optionally
17
+ * use alpha-to-coverage for anti-aliasing clipped edges.
18
+ * ```
19
+ * @augments Node
20
+ */
11
21
  class ClippingNode extends Node {
12
22
 
13
23
  static get type() {
@@ -16,14 +26,32 @@ class ClippingNode extends Node {
16
26
 
17
27
  }
18
28
 
29
+ /**
30
+ * Constructs a new clipping node.
31
+ *
32
+ * @param {('default'|'hardware'|'alphaToCoverage')} [scope='default'] - The node's scope. Similar to other nodes,
33
+ * the selected scope influences the behavior of the node and what type of code is generated.
34
+ */
19
35
  constructor( scope = ClippingNode.DEFAULT ) {
20
36
 
21
37
  super();
22
38
 
39
+ /**
40
+ * The node's scope. Similar to other nodes, the selected scope influences
41
+ * the behavior of the node and what type of code is generated.
42
+ *
43
+ * @type {('default'|'hardware'|'alphaToCoverage')}
44
+ */
23
45
  this.scope = scope;
24
46
 
25
47
  }
26
48
 
49
+ /**
50
+ * Setups the node depending on the selected scope.
51
+ *
52
+ * @param {NodeBuilder} builder - The current node builder.
53
+ * @return {Node} The result node.
54
+ */
27
55
  setup( builder ) {
28
56
 
29
57
  super.setup( builder );
@@ -49,6 +77,13 @@ class ClippingNode extends Node {
49
77
 
50
78
  }
51
79
 
80
+ /**
81
+ * Setups alpha to coverage.
82
+ *
83
+ * @param {Array<Vector4>} intersectionPlanes - The intersection planes.
84
+ * @param {Array<Vector4>} unionPlanes - The union planes.
85
+ * @return {Node} The result node.
86
+ */
52
87
  setupAlphaToCoverage( intersectionPlanes, unionPlanes ) {
53
88
 
54
89
  return Fn( () => {
@@ -60,7 +95,7 @@ class ClippingNode extends Node {
60
95
 
61
96
  const numUnionPlanes = unionPlanes.length;
62
97
 
63
- if ( ! this.hardwareClipping && numUnionPlanes > 0 ) {
98
+ if ( this.hardwareClipping === false && numUnionPlanes > 0 ) {
64
99
 
65
100
  const clippingPlanes = uniformArray( unionPlanes );
66
101
 
@@ -107,13 +142,20 @@ class ClippingNode extends Node {
107
142
 
108
143
  }
109
144
 
145
+ /**
146
+ * Setups the default clipping.
147
+ *
148
+ * @param {Array<Vector4>} intersectionPlanes - The intersection planes.
149
+ * @param {Array<Vector4>} unionPlanes - The union planes.
150
+ * @return {Node} The result node.
151
+ */
110
152
  setupDefault( intersectionPlanes, unionPlanes ) {
111
153
 
112
154
  return Fn( () => {
113
155
 
114
156
  const numUnionPlanes = unionPlanes.length;
115
157
 
116
- if ( ! this.hardwareClipping && numUnionPlanes > 0 ) {
158
+ if ( this.hardwareClipping === false && numUnionPlanes > 0 ) {
117
159
 
118
160
  const clippingPlanes = uniformArray( unionPlanes );
119
161
 
@@ -148,6 +190,13 @@ class ClippingNode extends Node {
148
190
 
149
191
  }
150
192
 
193
+ /**
194
+ * Setups hardware clipping.
195
+ *
196
+ * @param {Array<Vector4>} unionPlanes - The union planes.
197
+ * @param {NodeBuilder} builder - The current node builder.
198
+ * @return {Node} The result node.
199
+ */
151
200
  setupHardwareClipping( unionPlanes, builder ) {
152
201
 
153
202
  const numUnionPlanes = unionPlanes.length;
@@ -180,6 +229,26 @@ ClippingNode.HARDWARE = 'hardware';
180
229
 
181
230
  export default ClippingNode;
182
231
 
232
+ /**
233
+ * TSL function for setting up the default clipping logic.
234
+ *
235
+ * @function
236
+ * @returns {ClippingNode}
237
+ */
183
238
  export const clipping = () => nodeObject( new ClippingNode() );
239
+
240
+ /**
241
+ * TSL function for setting up alpha to coverage.
242
+ *
243
+ * @function
244
+ * @returns {ClippingNode}
245
+ */
184
246
  export const clippingAlpha = () => nodeObject( new ClippingNode( ClippingNode.ALPHA_TO_COVERAGE ) );
247
+
248
+ /**
249
+ * TSL function for setting up hardware-based clipping.
250
+ *
251
+ * @function
252
+ * @returns {ClippingNode}
253
+ */
185
254
  export const hardwareClipping = () => nodeObject( new ClippingNode( ClippingNode.HARDWARE ) );
@@ -4,6 +4,13 @@ import { nodeProxy, vec3 } from '../tsl/TSLBase.js';
4
4
 
5
5
  import { CubeReflectionMapping, CubeRefractionMapping, WebGPUCoordinateSystem } from '../../constants.js';
6
6
 
7
+ /** @module CubeTextureNode **/
8
+
9
+ /**
10
+ * This type of uniform node represents a cube texture.
11
+ *
12
+ * @augments module:TextureNode~TextureNode
13
+ */
7
14
  class CubeTextureNode extends TextureNode {
8
15
 
9
16
  static get type() {
@@ -12,20 +19,46 @@ class CubeTextureNode extends TextureNode {
12
19
 
13
20
  }
14
21
 
22
+ /**
23
+ * Constructs a new cube texture node.
24
+ *
25
+ * @param {CubeTexture} value - The cube texture.
26
+ * @param {Node<vec3>?} [uvNode=null] - The uv node.
27
+ * @param {Node<int>?} [levelNode=null] - The level node.
28
+ * @param {Node<float>?} [biasNode=null] - The bias node.
29
+ */
15
30
  constructor( value, uvNode = null, levelNode = null, biasNode = null ) {
16
31
 
17
32
  super( value, uvNode, levelNode, biasNode );
18
33
 
34
+ /**
35
+ * This flag can be used for type testing.
36
+ *
37
+ * @type {Boolean}
38
+ * @readonly
39
+ * @default true
40
+ */
19
41
  this.isCubeTextureNode = true;
20
42
 
21
43
  }
22
44
 
45
+ /**
46
+ * Overwrites the default implementation to return a fixed value `'cubeTexture'`.
47
+ *
48
+ * @param {NodeBuilder} builder - The current node builder.
49
+ * @return {String} The input type.
50
+ */
23
51
  getInputType( /*builder*/ ) {
24
52
 
25
53
  return 'cubeTexture';
26
54
 
27
55
  }
28
56
 
57
+ /**
58
+ * Returns a default uvs based on the mapping type of the cube texture.
59
+ *
60
+ * @return {Node<vec3>} The default uv attribute.
61
+ */
29
62
  getDefaultUV() {
30
63
 
31
64
  const texture = this.value;
@@ -48,8 +81,22 @@ class CubeTextureNode extends TextureNode {
48
81
 
49
82
  }
50
83
 
84
+ /**
85
+ * Overwritten with an empty implementation since the `updateMatrix` flag is ignored
86
+ * for cube textures. The uv transformation matrix is not applied to cube textures.
87
+ *
88
+ * @param {Boolean} value - The update toggle.
89
+ */
51
90
  setUpdateMatrix( /*updateMatrix*/ ) { } // Ignore .updateMatrix for CubeTextureNode
52
91
 
92
+ /**
93
+ * Setups the uv node. Depending on the backend as well as the texture type, it might be necessary
94
+ * to modify the uv node for correct sampling.
95
+ *
96
+ * @param {NodeBuilder} builder - The current node builder.
97
+ * @param {Node} uvNode - The uv node to setup.
98
+ * @return {Node} The updated uv node.
99
+ */
53
100
  setupUV( builder, uvNode ) {
54
101
 
55
102
  const texture = this.value;
@@ -66,6 +113,13 @@ class CubeTextureNode extends TextureNode {
66
113
 
67
114
  }
68
115
 
116
+ /**
117
+ * Generates the uv code snippet.
118
+ *
119
+ * @param {NodeBuilder} builder - The current node builder.
120
+ * @param {Node} cubeUV - The uv node to generate code for.
121
+ * @return {String} The generated code snippet.
122
+ */
69
123
  generateUV( builder, cubeUV ) {
70
124
 
71
125
  return cubeUV.build( builder, 'vec3' );
@@ -76,4 +130,14 @@ class CubeTextureNode extends TextureNode {
76
130
 
77
131
  export default CubeTextureNode;
78
132
 
133
+ /**
134
+ * TSL function for creating a cube texture node.
135
+ *
136
+ * @function
137
+ * @param {CubeTexture} value - The cube texture.
138
+ * @param {Node<vec3>?} [uvNode=null] - The uv node.
139
+ * @param {Node<int>?} [levelNode=null] - The level node.
140
+ * @param {Node<float>?} [biasNode=null] - The bias node.
141
+ * @returns {CubeTextureNode}
142
+ */
79
143
  export const cubeTexture = /*@__PURE__*/ nodeProxy( CubeTextureNode );
@@ -12,6 +12,16 @@ import { InstancedInterleavedBuffer } from '../../core/InstancedInterleavedBuffe
12
12
  import { InstancedBufferAttribute } from '../../core/InstancedBufferAttribute.js';
13
13
  import { DynamicDrawUsage } from '../../constants.js';
14
14
 
15
+ /** @module InstanceNode **/
16
+
17
+ /**
18
+ * This node implements the vertex shader logic which is required
19
+ * when rendering 3D objects via instancing. The code makes sure
20
+ * vertex positions, normals and colors can be modified via instanced
21
+ * data.
22
+ *
23
+ * @augments Node
24
+ */
15
25
  class InstanceNode extends Node {
16
26
 
17
27
  static get type() {
@@ -20,25 +30,84 @@ class InstanceNode extends Node {
20
30
 
21
31
  }
22
32
 
33
+ /**
34
+ * Constructs a new instance node.
35
+ *
36
+ * @param {Number} count - The number of instances.
37
+ * @param {InstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.
38
+ * @param {InstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
39
+ */
23
40
  constructor( count, instanceMatrix, instanceColor ) {
24
41
 
25
42
  super( 'void' );
26
43
 
44
+ /**
45
+ * The number of instances.
46
+ *
47
+ * @type {Number}
48
+ */
27
49
  this.count = count;
50
+
51
+ /**
52
+ * Instanced buffer attribute representing the transformation of instances.
53
+ *
54
+ * @type {InstancedBufferAttribute}
55
+ */
28
56
  this.instanceMatrix = instanceMatrix;
57
+
58
+ /**
59
+ * Instanced buffer attribute representing the color of instances.
60
+ *
61
+ * @type {InstancedBufferAttribute}
62
+ */
29
63
  this.instanceColor = instanceColor;
30
64
 
65
+ /**
66
+ * The node that represents the instance matrix data.
67
+ *
68
+ * @type {Node}
69
+ */
31
70
  this.instanceMatrixNode = null;
32
71
 
72
+ /**
73
+ * The node that represents the instance color data.
74
+ *
75
+ * @type {Node}
76
+ */
33
77
  this.instanceColorNode = null;
34
78
 
79
+ /**
80
+ * The update type is set to `frame` since an update
81
+ * of instanced buffer data must be checked per frame.
82
+ *
83
+ * @type {String}
84
+ * @default 'frame'
85
+ */
35
86
  this.updateType = NodeUpdateType.FRAME;
36
87
 
88
+ /**
89
+ * A reference to a buffer that is used by `instanceMatrixNode`.
90
+ *
91
+ * @type {InstancedInterleavedBuffer}
92
+ */
37
93
  this.buffer = null;
94
+
95
+ /**
96
+ * A reference to a buffer that is used by `instanceColorNode`.
97
+ *
98
+ * @type {InstancedBufferAttribute}
99
+ */
38
100
  this.bufferColor = null;
39
101
 
40
102
  }
41
103
 
104
+ /**
105
+ * Setups the internal buffers and nodes and assigns the transformed vertex data
106
+ * to predefined node variables for accumulation. That follows the same patterns
107
+ * like with morph and skinning nodes.
108
+ *
109
+ * @param {NodeBuilder} builder - The current node builder.
110
+ */
42
111
  setup( builder ) {
43
112
 
44
113
  const { count, instanceMatrix, instanceColor } = this;
@@ -118,15 +187,20 @@ class InstanceNode extends Node {
118
187
 
119
188
  }
120
189
 
190
+ /**
191
+ * Checks if the internal buffers required an update.
192
+ *
193
+ * @param {NodeFrame} frame - The current node frame.
194
+ */
121
195
  update( /*frame*/ ) {
122
196
 
123
- if ( this.instanceMatrix.usage !== DynamicDrawUsage && this.buffer != null && this.instanceMatrix.version !== this.buffer.version ) {
197
+ if ( this.instanceMatrix.usage !== DynamicDrawUsage && this.buffer !== null && this.instanceMatrix.version !== this.buffer.version ) {
124
198
 
125
199
  this.buffer.version = this.instanceMatrix.version;
126
200
 
127
201
  }
128
202
 
129
- if ( this.instanceColor && this.instanceColor.usage !== DynamicDrawUsage && this.bufferColor != null && this.instanceColor.version !== this.bufferColor.version ) {
203
+ if ( this.instanceColor && this.instanceColor.usage !== DynamicDrawUsage && this.bufferColor !== null && this.instanceColor.version !== this.bufferColor.version ) {
130
204
 
131
205
  this.bufferColor.version = this.instanceColor.version;
132
206
 
@@ -138,4 +212,13 @@ class InstanceNode extends Node {
138
212
 
139
213
  export default InstanceNode;
140
214
 
215
+ /**
216
+ * TSL function for creating an instance node.
217
+ *
218
+ * @function
219
+ * @param {Number} count - The number of instances.
220
+ * @param {InstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.
221
+ * @param {InstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
222
+ * @returns {InstanceNode}
223
+ */
141
224
  export const instance = /*@__PURE__*/ nodeProxy( InstanceNode );
@@ -1,6 +1,14 @@
1
1
  import InstanceNode from './InstanceNode.js';
2
2
  import { nodeProxy } from '../tsl/TSLBase.js';
3
3
 
4
+ /** @module InstancedMeshNode **/
5
+
6
+ /**
7
+ * This is a special version of `InstanceNode` which requires the usage of {@link InstancedMesh}.
8
+ * It allows an easier setup of the instance node.
9
+ *
10
+ * @augments module:InstanceNode~InstanceNode
11
+ */
4
12
  class InstancedMeshNode extends InstanceNode {
5
13
 
6
14
  static get type() {
@@ -9,13 +17,23 @@ class InstancedMeshNode extends InstanceNode {
9
17
 
10
18
  }
11
19
 
12
- constructor( instanceMesh ) {
20
+ /**
21
+ * Constructs a new instanced mesh node.
22
+ *
23
+ * @param {InstancedMesh} instancedMesh - The instanced mesh.
24
+ */
25
+ constructor( instancedMesh ) {
13
26
 
14
- const { count, instanceMatrix, instanceColor } = instanceMesh;
27
+ const { count, instanceMatrix, instanceColor } = instancedMesh;
15
28
 
16
29
  super( count, instanceMatrix, instanceColor );
17
30
 
18
- this.instanceMesh = instanceMesh;
31
+ /**
32
+ * A reference to the instanced mesh.
33
+ *
34
+ * @type {InstancedMesh}
35
+ */
36
+ this.instancedMesh = instancedMesh;
19
37
 
20
38
  }
21
39
 
@@ -23,4 +41,11 @@ class InstancedMeshNode extends InstanceNode {
23
41
 
24
42
  export default InstancedMeshNode;
25
43
 
44
+ /**
45
+ * TSL function for creating an instanced mesh node.
46
+ *
47
+ * @function
48
+ * @param {InstancedMesh} instancedMesh - The instancedMesh.
49
+ * @returns {InstancedMeshNode}
50
+ */
26
51
  export const instancedMesh = /*@__PURE__*/ nodeProxy( InstancedMeshNode );