super-three 0.170.1 → 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
@@ -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 {InstancedInterleavedBuffer}
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 );
@@ -1,6 +1,14 @@
1
1
  import MaterialNode from './MaterialNode.js';
2
2
  import { nodeImmutable } from '../tsl/TSLBase.js';
3
3
 
4
+ /** @module InstancedPointsMaterialNode **/
5
+
6
+ /**
7
+ * An extension of material node to provide pre-defined
8
+ * TSL objects in context of `InstancedPointsNodeMaterial`.
9
+ *
10
+ * @augments module:MaterialNode~MaterialNode
11
+ */
4
12
  class InstancedPointsMaterialNode extends MaterialNode {
5
13
 
6
14
  static get type() {
@@ -21,4 +29,9 @@ InstancedPointsMaterialNode.POINT_WIDTH = 'pointWidth';
21
29
 
22
30
  export default InstancedPointsMaterialNode;
23
31
 
32
+ /**
33
+ * TSL object that represents the point width of the current points material.
34
+ *
35
+ * @type {InstancedPointsMaterialNode<float>}
36
+ */
24
37
  export const materialPointWidth = /*@__PURE__*/ nodeImmutable( InstancedPointsMaterialNode, InstancedPointsMaterialNode.POINT_WIDTH );
@@ -4,6 +4,8 @@ import { Vector3 } from '../../math/Vector3.js';
4
4
  import { cameraViewMatrix } from './Camera.js';
5
5
  import { positionWorld } from './Position.js';
6
6
 
7
+ /** @module Lights **/
8
+
7
9
  let uniformsLib;
8
10
 
9
11
  function getLightData( light ) {
@@ -18,13 +20,24 @@ function getLightData( light ) {
18
20
 
19
21
  }
20
22
 
23
+ /**
24
+ * TSL function for getting a shadow matrix uniform node for the given light.
25
+ *
26
+ * @function
27
+ * @param {Light} light -The light source.
28
+ * @returns {UniformNode<mat4>} The shadow matrix uniform node.
29
+ */
21
30
  export function lightShadowMatrix( light ) {
22
31
 
23
32
  const data = getLightData( light );
24
33
 
25
34
  return data.shadowMatrix || ( data.shadowMatrix = uniform( 'mat4' ).setGroup( renderGroup ).onRenderUpdate( () => {
26
35
 
27
- light.shadow.updateMatrices( light );
36
+ if ( light.castShadow !== true ) {
37
+
38
+ light.shadow.updateMatrices( light );
39
+
40
+ }
28
41
 
29
42
  return light.shadow.matrix;
30
43
 
@@ -32,6 +45,14 @@ export function lightShadowMatrix( light ) {
32
45
 
33
46
  }
34
47
 
48
+ /**
49
+ * TSL function for getting projected uv coordinates for the given light.
50
+ * Relevant when using maps with spot lights.
51
+ *
52
+ * @function
53
+ * @param {Light} light -The light source.
54
+ * @returns {Node<vec3>} The projected uvs.
55
+ */
35
56
  export function lightProjectionUV( light ) {
36
57
 
37
58
  const data = getLightData( light );
@@ -49,6 +70,13 @@ export function lightProjectionUV( light ) {
49
70
 
50
71
  }
51
72
 
73
+ /**
74
+ * TSL function for getting the position in world space for the given light.
75
+ *
76
+ * @function
77
+ * @param {Light} light -The light source.
78
+ * @returns {UniformNode<vec3>} The light's position in world space.
79
+ */
52
80
  export function lightPosition( light ) {
53
81
 
54
82
  const data = getLightData( light );
@@ -57,6 +85,13 @@ export function lightPosition( light ) {
57
85
 
58
86
  }
59
87
 
88
+ /**
89
+ * TSL function for getting the light target position in world space for the given light.
90
+ *
91
+ * @function
92
+ * @param {Light} light -The light source.
93
+ * @returns {UniformNode<vec3>} The light target position in world space.
94
+ */
60
95
  export function lightTargetPosition( light ) {
61
96
 
62
97
  const data = getLightData( light );
@@ -65,6 +100,13 @@ export function lightTargetPosition( light ) {
65
100
 
66
101
  }
67
102
 
103
+ /**
104
+ * TSL function for getting the position in view space for the given light.
105
+ *
106
+ * @function
107
+ * @param {Light} light -The light source.
108
+ * @returns {UniformNode<vec3>} The light's position in view space.
109
+ */
68
110
  export function lightViewPosition( light ) {
69
111
 
70
112
  const data = getLightData( light );
@@ -80,4 +122,11 @@ export function lightViewPosition( light ) {
80
122
 
81
123
  }
82
124
 
125
+ /**
126
+ * TSL function for getting the light target direction for the given light.
127
+ *
128
+ * @function
129
+ * @param {Light} light -The light source.
130
+ * @returns {Node<vec3>} The light's target direction.
131
+ */
83
132
  export const lightTargetDirection = ( light ) => cameraViewMatrix.transformDirection( lightPosition( light ).sub( lightTargetPosition( light ) ) );