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
@@ -7,6 +7,11 @@ import { renderGroup } from '../core/UniformGroupNode.js';
7
7
 
8
8
  import { Color } from '../../math/Color.js';
9
9
 
10
+ /**
11
+ * Module for representing hemisphere lights as nodes.
12
+ *
13
+ * @augments AnalyticLightNode
14
+ */
10
15
  class HemisphereLightNode extends AnalyticLightNode {
11
16
 
12
17
  static get type() {
@@ -15,17 +20,43 @@ class HemisphereLightNode extends AnalyticLightNode {
15
20
 
16
21
  }
17
22
 
23
+ /**
24
+ * Constructs a new hemisphere light node.
25
+ *
26
+ * @param {HemisphereLight?} [light=null] - The hemisphere light source.
27
+ */
18
28
  constructor( light = null ) {
19
29
 
20
30
  super( light );
21
31
 
32
+ /**
33
+ * Uniform node representing the light's position.
34
+ *
35
+ * @type {UniformNode<vec3>}
36
+ */
22
37
  this.lightPositionNode = lightPosition( light );
38
+
39
+ /**
40
+ * A node representing the light's direction.
41
+ *
42
+ * @type {Node<vec3>}
43
+ */
23
44
  this.lightDirectionNode = this.lightPositionNode.normalize();
24
45
 
46
+ /**
47
+ * Uniform node representing the light's ground color.
48
+ *
49
+ * @type {UniformNode<vec3>}
50
+ */
25
51
  this.groundColorNode = uniform( new Color() ).setGroup( renderGroup );
26
52
 
27
53
  }
28
54
 
55
+ /**
56
+ * Overwritten to updated hemisphere light specific uniforms.
57
+ *
58
+ * @param {NodeFrame} frame - A reference to the current node frame.
59
+ */
29
60
  update( frame ) {
30
61
 
31
62
  const { light } = this;
@@ -2,6 +2,11 @@ import SpotLightNode from './SpotLightNode.js';
2
2
  import { texture } from '../accessors/TextureNode.js';
3
3
  import { vec2 } from '../tsl/TSLBase.js';
4
4
 
5
+ /**
6
+ * An IES version of the default spot light node.
7
+ *
8
+ * @augments SpotLightNode
9
+ */
5
10
  class IESSpotLightNode extends SpotLightNode {
6
11
 
7
12
  static get type() {
@@ -10,6 +15,12 @@ class IESSpotLightNode extends SpotLightNode {
10
15
 
11
16
  }
12
17
 
18
+ /**
19
+ * Overwrites the default implementation to compute an IES conform spot attenuation.
20
+ *
21
+ * @param {Node<float>} angleCosine - The angle to compute the spot attenuation for.
22
+ * @return {Node<float>} The spot attenuation.
23
+ */
13
24
  getSpotAttenuation( angleCosine ) {
14
25
 
15
26
  const iesMap = this.light.iesMap;
@@ -1,5 +1,12 @@
1
1
  import LightingNode from './LightingNode.js';
2
2
 
3
+ /**
4
+ * A generic class that can be used by nodes which contribute
5
+ * irradiance to the scene. E.g. a light map node can be used
6
+ * as input for this module. Used in {@link NodeMaterial}.
7
+ *
8
+ * @augments LightingNode
9
+ */
3
10
  class IrradianceNode extends LightingNode {
4
11
 
5
12
  static get type() {
@@ -8,10 +15,20 @@ class IrradianceNode extends LightingNode {
8
15
 
9
16
  }
10
17
 
18
+ /**
19
+ * Constructs a new irradiance node.
20
+ *
21
+ * @param {Node<vec3>} node - A node contributing irradiance.
22
+ */
11
23
  constructor( node ) {
12
24
 
13
25
  super();
14
26
 
27
+ /**
28
+ * A node contributing irradiance.
29
+ *
30
+ * @type {Node<vec3>}
31
+ */
15
32
  this.node = node;
16
33
 
17
34
  }
@@ -4,6 +4,11 @@ import { uniformArray } from '../accessors/UniformArrayNode.js';
4
4
  import { Vector3 } from '../../math/Vector3.js';
5
5
  import getShIrradianceAt from '../functions/material/getShIrradianceAt.js';
6
6
 
7
+ /**
8
+ * Module for representing light probes as nodes.
9
+ *
10
+ * @augments AnalyticLightNode
11
+ */
7
12
  class LightProbeNode extends AnalyticLightNode {
8
13
 
9
14
  static get type() {
@@ -12,6 +17,11 @@ class LightProbeNode extends AnalyticLightNode {
12
17
 
13
18
  }
14
19
 
20
+ /**
21
+ * Constructs a new light probe node.
22
+ *
23
+ * @param {LightProbe?} [light=null] - The light probe.
24
+ */
15
25
  constructor( light = null ) {
16
26
 
17
27
  super( light );
@@ -20,10 +30,20 @@ class LightProbeNode extends AnalyticLightNode {
20
30
 
21
31
  for ( let i = 0; i < 9; i ++ ) array.push( new Vector3() );
22
32
 
33
+ /**
34
+ * Light probe represented as a uniform of spherical harmonics.
35
+ *
36
+ * @type {UniformArrayNode}
37
+ */
23
38
  this.lightProbe = uniformArray( array );
24
39
 
25
40
  }
26
41
 
42
+ /**
43
+ * Overwritten to updated light probe specific uniforms.
44
+ *
45
+ * @param {NodeFrame} frame - A reference to the current node frame.
46
+ */
27
47
  update( frame ) {
28
48
 
29
49
  const { light } = this;
@@ -1,5 +1,17 @@
1
1
  import { Fn } from '../tsl/TSLBase.js';
2
2
 
3
+ /** @module LightUtils **/
4
+
5
+ /**
6
+ * Represents a `discard` shader operation in TSL.
7
+ *
8
+ * @method
9
+ * @param {Object} inputs - The input parameter object.
10
+ * @param {Node<float>} inputs.lightDistance - The distance of the light's position to the current fragment position.
11
+ * @param {Node<float>} inputs.cutoffDistance - The light's cutoff distance.
12
+ * @param {Node<float>} inputs.decayExponent - The light's decay exponent.
13
+ * @return {Node<float>} The distance falloff.
14
+ */
3
15
  export const getDistanceAttenuation = /*@__PURE__*/ Fn( ( inputs ) => {
4
16
 
5
17
  const { lightDistance, cutoffDistance, decayExponent } = inputs;
@@ -1,6 +1,13 @@
1
1
  import ContextNode from '../core/ContextNode.js';
2
2
  import { nodeProxy, float, vec3 } from '../tsl/TSLBase.js';
3
3
 
4
+ /**
5
+ * `LightingContextNode` represents an extension of the {@link module:ContextNode~ContextNode} module
6
+ * by adding lighting specific context data. It represents the runtime context of
7
+ * {@link LightsNode}.
8
+ *
9
+ * @augments ContextNode
10
+ */
4
11
  class LightingContextNode extends ContextNode {
5
12
 
6
13
  static get type() {
@@ -9,18 +16,59 @@ class LightingContextNode extends ContextNode {
9
16
 
10
17
  }
11
18
 
19
+ /**
20
+ * Constructs a new lighting context node.
21
+ *
22
+ * @param {LightsNode} node - The lights node.
23
+ * @param {LightingModel?} [lightingModel=null] - The current lighting model.
24
+ * @param {Node<vec3>?} [backdropNode=null] - A backdrop node.
25
+ * @param {Node<float>?} [backdropAlphaNode=null] - A backdrop alpha node.
26
+ */
12
27
  constructor( node, lightingModel = null, backdropNode = null, backdropAlphaNode = null ) {
13
28
 
14
29
  super( node );
15
30
 
31
+ /**
32
+ * The current lighting model.
33
+ *
34
+ * @type {LightingModel?}
35
+ * @default null
36
+ */
16
37
  this.lightingModel = lightingModel;
38
+
39
+ /**
40
+ * A backdrop node.
41
+ *
42
+ * @type {Node<vec3>?}
43
+ * @default null
44
+ */
17
45
  this.backdropNode = backdropNode;
46
+
47
+ /**
48
+ * A backdrop alpha node.
49
+ *
50
+ * @type {Node<float>?}
51
+ * @default null
52
+ */
18
53
  this.backdropAlphaNode = backdropAlphaNode;
19
54
 
20
55
  this._value = null;
21
56
 
22
57
  }
23
58
 
59
+ /**
60
+ * Returns a lighting context object.
61
+ *
62
+ * @return {{
63
+ * radiance: Node<vec3>,
64
+ * irradiance: Node<vec3>,
65
+ * iblIrradiance: Node<vec3>,
66
+ * ambientOcclusion: Node<float>,
67
+ * reflectedLight: {directDiffuse: Node<vec3>, directSpecular: Node<vec3>, indirectDiffuse: Node<vec3>, indirectSpecular: Node<vec3>},
68
+ * backdrop: Node<vec3>,
69
+ * backdropAlpha: Node<float>
70
+ * }} The lighting context object.
71
+ */
24
72
  getContext() {
25
73
 
26
74
  const { backdropNode, backdropAlphaNode } = this;
@@ -1,5 +1,10 @@
1
1
  import Node from '../core/Node.js';
2
2
 
3
+ /**
4
+ * Base class for lighting nodes.
5
+ *
6
+ * @augments Node
7
+ */
3
8
  class LightingNode extends Node {
4
9
 
5
10
  static get type() {
@@ -8,20 +13,24 @@ class LightingNode extends Node {
8
13
 
9
14
  }
10
15
 
16
+ /**
17
+ * Constructs a new lighting node.
18
+ */
11
19
  constructor() {
12
20
 
13
21
  super( 'vec3' );
14
22
 
23
+ /**
24
+ * This flag can be used for type testing.
25
+ *
26
+ * @type {Boolean}
27
+ * @readonly
28
+ * @default true
29
+ */
15
30
  this.isLightingNode = true;
16
31
 
17
32
  }
18
33
 
19
- generate( /*builder*/ ) {
20
-
21
- console.warn( 'Abstract function.' );
22
-
23
- }
24
-
25
34
  }
26
35
 
27
36
  export default LightingNode;
@@ -1,5 +1,8 @@
1
1
  import Node from '../core/Node.js';
2
2
  import { nodeObject, vec3 } from '../tsl/TSLBase.js';
3
+ import { hashArray } from '../core/NodeUtils.js';
4
+
5
+ /** @module LightsNode **/
3
6
 
4
7
  const sortLights = ( lights ) => {
5
8
 
@@ -25,6 +28,13 @@ const getLightNodeById = ( id, lightNodes ) => {
25
28
 
26
29
  const _lightsNodeRef = /*@__PURE__*/ new WeakMap();
27
30
 
31
+ /**
32
+ * This node represents the scene's lighting and manages the lighting model's life cycle
33
+ * for the current build 3D object. It is responsible for computing the total outgoing
34
+ * light in a given lighting context.
35
+ *
36
+ * @augments Node
37
+ */
28
38
  class LightsNode extends Node {
29
39
 
30
40
  static get type() {
@@ -33,24 +43,98 @@ class LightsNode extends Node {
33
43
 
34
44
  }
35
45
 
46
+ /**
47
+ * Constructs a new lights node.
48
+ */
36
49
  constructor() {
37
50
 
38
51
  super( 'vec3' );
39
52
 
53
+ /**
54
+ * A node representing the total diffuse light.
55
+ *
56
+ * @type {Node<vec3>}
57
+ */
40
58
  this.totalDiffuseNode = vec3().toVar( 'totalDiffuse' );
59
+
60
+ /**
61
+ * A node representing the total specular light.
62
+ *
63
+ * @type {Node<vec3>}
64
+ */
41
65
  this.totalSpecularNode = vec3().toVar( 'totalSpecular' );
42
66
 
67
+ /**
68
+ * A node representing the outgoing light.
69
+ *
70
+ * @type {Node<vec3>}
71
+ */
43
72
  this.outgoingLightNode = vec3().toVar( 'outgoingLight' );
44
73
 
74
+ /**
75
+ * An array representing the lights in the scene.
76
+ *
77
+ * @private
78
+ * @type {Array<Light>}
79
+ */
45
80
  this._lights = [];
46
81
 
82
+ /**
83
+ * For each light in the scene, this node will create a
84
+ * corresponding light node.
85
+ *
86
+ * @private
87
+ * @type {Array<LightingNode>?}
88
+ * @default null
89
+ */
47
90
  this._lightNodes = null;
91
+
92
+ /**
93
+ * A hash for identifying the current light nodes setup.
94
+ *
95
+ * @private
96
+ * @type {String?}
97
+ * @default null
98
+ */
48
99
  this._lightNodesHash = null;
49
100
 
101
+ /**
102
+ * `LightsNode` sets this property to `true` by default.
103
+ *
104
+ * @type {Boolean}
105
+ * @default true
106
+ */
50
107
  this.global = true;
51
108
 
52
109
  }
53
110
 
111
+ /**
112
+ * Overwrites the default {@link Node#customCacheKey} implementation by including the
113
+ * light IDs into the cache key.
114
+ *
115
+ * @return {Number} The custom cache key.
116
+ */
117
+ customCacheKey() {
118
+
119
+ const lightIDs = [];
120
+ const lights = this._lights;
121
+
122
+ for ( let i = 0; i < lights.length; i ++ ) {
123
+
124
+ lightIDs.push( lights[ i ].id );
125
+
126
+ }
127
+
128
+ return hashArray( lightIDs );
129
+
130
+ }
131
+
132
+ /**
133
+ * Computes a hash value for identifying the current light nodes setup.
134
+ *
135
+ * @param {NodeBuilder} builder - A reference to the current node builder.
136
+ * @return {String} The computed hash.
137
+ */
54
138
  getHash( builder ) {
55
139
 
56
140
  if ( this._lightNodesHash === null ) {
@@ -85,6 +169,12 @@ class LightsNode extends Node {
85
169
 
86
170
  }
87
171
 
172
+ /**
173
+ * Creates lighting nodes for each scene light. This makes it possible to further
174
+ * process lights in the node system.
175
+ *
176
+ * @param {NodeBuilder} builder - A reference to the current node builder.
177
+ */
88
178
  setupLightsNode( builder ) {
89
179
 
90
180
  const lightNodes = [];
@@ -106,12 +196,14 @@ class LightsNode extends Node {
106
196
 
107
197
  if ( previousLightNodes !== null ) {
108
198
 
109
- lightNode = getLightNodeById( light.id, previousLightNodes ); // resuse existing light node
199
+ lightNode = getLightNodeById( light.id, previousLightNodes ); // reuse existing light node
110
200
 
111
201
  }
112
202
 
113
203
  if ( lightNode === null ) {
114
204
 
205
+ // find the corresponding node type for a given light
206
+
115
207
  const lightNodeClass = nodeLibrary.getLightNodeClass( light.constructor );
116
208
 
117
209
  if ( lightNodeClass === null ) {
@@ -146,6 +238,13 @@ class LightsNode extends Node {
146
238
 
147
239
  }
148
240
 
241
+ /**
242
+ * Setups the internal lights by building all respective
243
+ * light nodes.
244
+ *
245
+ * @param {NodeBuilder} builder - A reference to the current node builder.
246
+ * @param {Array<LightingNode>} lightNodes - An array of lighting nodes.
247
+ */
149
248
  setupLights( builder, lightNodes ) {
150
249
 
151
250
  for ( const lightNode of lightNodes ) {
@@ -156,6 +255,14 @@ class LightsNode extends Node {
156
255
 
157
256
  }
158
257
 
258
+ /**
259
+ * The implementation makes sure that for each light in the scene
260
+ * there is a corresponding light node. By building the light nodes
261
+ * and evaluating the lighting model the outgoing light is computed.
262
+ *
263
+ * @param {NodeBuilder} builder - A reference to the current node builder.
264
+ * @return {Node<vec3>} A node representing the outgoing light.
265
+ */
159
266
  setup( builder ) {
160
267
 
161
268
  if ( this._lightNodes === null ) this.setupLightsNode( builder );
@@ -232,6 +339,12 @@ class LightsNode extends Node {
232
339
 
233
340
  }
234
341
 
342
+ /**
343
+ * Configures this node with an array of lights.
344
+ *
345
+ * @param {Array<Light>} lights - An array of lights.
346
+ * @return {LightsNode} A reference to this node.
347
+ */
235
348
  setLights( lights ) {
236
349
 
237
350
  this._lights = lights;
@@ -243,12 +356,22 @@ class LightsNode extends Node {
243
356
 
244
357
  }
245
358
 
359
+ /**
360
+ * Returns an array of the scene's lights.
361
+ *
362
+ * @return {Array<Light>} The scene's lights.
363
+ */
246
364
  getLights() {
247
365
 
248
366
  return this._lights;
249
367
 
250
368
  }
251
369
 
370
+ /**
371
+ * Whether the scene has lights or not.
372
+ *
373
+ * @type {Boolean}
374
+ */
252
375
  get hasLights() {
253
376
 
254
377
  return this._lights.length > 0;
@@ -259,4 +382,12 @@ class LightsNode extends Node {
259
382
 
260
383
  export default LightsNode;
261
384
 
385
+ /**
386
+ * TSL function for creating an instance of `LightsNode` and configuring
387
+ * it with the given array of lights.
388
+ *
389
+ * @function
390
+ * @param {Array<Light>} lights - An array of lights.
391
+ * @return {LightsNode} The created lights node.
392
+ */
262
393
  export const lights = ( lights = [] ) => nodeObject( new LightsNode() ).setLights( lights );
@@ -34,6 +34,11 @@ export const directPointLight = Fn( ( { color, lightViewPosition, cutoffDistance
34
34
 
35
35
  } );
36
36
 
37
+ /**
38
+ * Module for representing point lights as nodes.
39
+ *
40
+ * @augments AnalyticLightNode
41
+ */
37
42
  class PointLightNode extends AnalyticLightNode {
38
43
 
39
44
  static get type() {
@@ -42,15 +47,36 @@ class PointLightNode extends AnalyticLightNode {
42
47
 
43
48
  }
44
49
 
50
+ /**
51
+ * Constructs a new point light node.
52
+ *
53
+ * @param {PointLight?} [light=null] - The point light source.
54
+ */
45
55
  constructor( light = null ) {
46
56
 
47
57
  super( light );
48
58
 
59
+ /**
60
+ * Uniform node representing the cutoff distance.
61
+ *
62
+ * @type {UniformNode<float>}
63
+ */
49
64
  this.cutoffDistanceNode = uniform( 0 ).setGroup( renderGroup );
50
- this.decayExponentNode = uniform( 0 ).setGroup( renderGroup );
65
+
66
+ /**
67
+ * Uniform node representing the decay exponent.
68
+ *
69
+ * @type {UniformNode<float>}
70
+ */
71
+ this.decayExponentNode = uniform( 2 ).setGroup( renderGroup );
51
72
 
52
73
  }
53
74
 
75
+ /**
76
+ * Overwritten to updated point light specific uniforms.
77
+ *
78
+ * @param {NodeFrame} frame - A reference to the current node frame.
79
+ */
54
80
  update( frame ) {
55
81
 
56
82
  const { light } = this;
@@ -62,6 +88,11 @@ class PointLightNode extends AnalyticLightNode {
62
88
 
63
89
  }
64
90
 
91
+ /**
92
+ * Overwritten to setup point light specific shadow.
93
+ *
94
+ * @return {PointShadowNode}
95
+ */
65
96
  setupShadowNode() {
66
97
 
67
98
  return pointShadow( this.light );
@@ -11,6 +11,8 @@ import { Vector4 } from '../../math/Vector4.js';
11
11
  import { Color } from '../../math/Color.js';
12
12
  import { BasicShadowMap } from '../../constants.js';
13
13
 
14
+ /** @module PointShadowNode **/
15
+
14
16
  const _clearColor = /*@__PURE__*/ new Color();
15
17
 
16
18
  // cubeToUV() maps a 3D direction vector suitable for cube texture mapping to a 2D
@@ -157,8 +159,12 @@ const _viewport = /*@__PURE__*/ new Vector4();
157
159
  const _viewportSize = /*@__PURE__*/ new Vector2();
158
160
  const _shadowMapSize = /*@__PURE__*/ new Vector2();
159
161
 
160
- //
161
162
 
163
+ /**
164
+ * Represents the shadow implementation for point light nodes.
165
+ *
166
+ * @augments module:ShadowNode~ShadowNode
167
+ */
162
168
  class PointShadowNode extends ShadowNode {
163
169
 
164
170
  static get type() {
@@ -167,30 +173,69 @@ class PointShadowNode extends ShadowNode {
167
173
 
168
174
  }
169
175
 
176
+ /**
177
+ * Constructs a new point shadow node.
178
+ *
179
+ * @param {PointLight} light - The shadow casting point light.
180
+ * @param {PointLightShadow?} [shadow=null] - An optional point light shadow.
181
+ */
170
182
  constructor( light, shadow = null ) {
171
183
 
172
184
  super( light, shadow );
173
185
 
174
186
  }
175
187
 
188
+ /**
189
+ * Overwrites the default implementation to return point light shadow specific
190
+ * filtering functions.
191
+ *
192
+ * @param {Number} type - The shadow type.
193
+ * @return {Function} The filtering function.
194
+ */
176
195
  getShadowFilterFn( type ) {
177
196
 
178
197
  return type === BasicShadowMap ? BasicPointShadowFilter : PointShadowFilter;
179
198
 
180
199
  }
181
200
 
201
+ /**
202
+ * Overwrites the default implementation so the unaltered shadow position is used.
203
+ *
204
+ * @param {NodeBuilder} builder - A reference to the current node builder.
205
+ * @param {Node<vec3>} shadowPosition - A node representing the shadow position.
206
+ * @return {Node<vec3>} The shadow coordinates.
207
+ */
182
208
  setupShadowCoord( builder, shadowPosition ) {
183
209
 
184
210
  return shadowPosition;
185
211
 
186
212
  }
187
213
 
214
+ /**
215
+ * Overwrites the default implementation to only use point light specific
216
+ * shadow filter functions.
217
+ *
218
+ * @param {NodeBuilder} builder - A reference to the current node builder.
219
+ * @param {Object} inputs - A configuration object that defines the shadow filtering.
220
+ * @param {Function} inputs.filterFn - This function defines the filtering type of the shadow map e.g. PCF.
221
+ * @param {Texture} inputs.shadowTexture - A reference to the shadow map's texture.
222
+ * @param {DepthTexture} inputs.depthTexture - A reference to the shadow map's texture data.
223
+ * @param {Node<vec3>} inputs.shadowCoord - Shadow coordinates which are used to sample from the shadow map.
224
+ * @param {LightShadow} inputs.shadow - The light shadow.
225
+ * @return {Node<float>} The result node of the shadow filtering.
226
+ */
188
227
  setupShadowFilter( builder, { filterFn, shadowTexture, depthTexture, shadowCoord, shadow } ) {
189
228
 
190
229
  return pointShadowFilter( { filterFn, shadowTexture, depthTexture, shadowCoord, shadow } );
191
230
 
192
231
  }
193
232
 
233
+ /**
234
+ * Overwrites the default implementation with point light specific
235
+ * rendering code.
236
+ *
237
+ * @param {NodeFrame} frame - A reference to the current node frame.
238
+ */
194
239
  renderShadow( frame ) {
195
240
 
196
241
  const { shadow, shadowMap, light } = this;
@@ -251,4 +296,12 @@ class PointShadowNode extends ShadowNode {
251
296
 
252
297
  export default PointShadowNode;
253
298
 
299
+ /**
300
+ * TSL function for creating an instance of `PointShadowNode`.
301
+ *
302
+ * @function
303
+ * @param {PointLight} light - The shadow casting point light.
304
+ * @param {PointLightShadow?} [shadow=null] - An optional point light shadow.
305
+ * @return {PointShadowNode} The created point shadow node.
306
+ */
254
307
  export const pointShadow = ( light, shadow ) => nodeObject( new PointShadowNode( light, shadow ) );