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
@@ -2,12 +2,32 @@ import ArrayElementNode from '../utils/ArrayElementNode.js';
2
2
  import { nodeObject } from '../tsl/TSLCore.js';
3
3
  import Node from '../core/Node.js';
4
4
 
5
+ /** @module WorkgroupInfoNode **/
6
+
7
+ /**
8
+ * Represents an element of a 'workgroup' scoped buffer.
9
+ *
10
+ * @augments ArrayElementNode
11
+ */
5
12
  class WorkgroupInfoElementNode extends ArrayElementNode {
6
13
 
14
+ /**
15
+ * Constructs a new workgroup info element node.
16
+ *
17
+ * @param {Node} workgroupInfoNode - The workgroup info node.
18
+ * @param {Node} indexNode - The index node that defines the element access.
19
+ */
7
20
  constructor( workgroupInfoNode, indexNode ) {
8
21
 
9
22
  super( workgroupInfoNode, indexNode );
10
23
 
24
+ /**
25
+ * This flag can be used for type testing.
26
+ *
27
+ * @type {Boolean}
28
+ * @readonly
29
+ * @default true
30
+ */
11
31
  this.isWorkgroupInfoElementNode = true;
12
32
 
13
33
  }
@@ -35,22 +55,77 @@ class WorkgroupInfoElementNode extends ArrayElementNode {
35
55
 
36
56
  }
37
57
 
38
-
58
+ /**
59
+ * A node allowing the user to create a 'workgroup' scoped buffer within the
60
+ * context of a compute shader. Typically, workgroup scoped buffers are
61
+ * created to hold data that is transferred from a global storage scope into
62
+ * a local workgroup scope. For invocations within a workgroup, data
63
+ * access speeds on 'workgroup' scoped buffers can be significantly faster
64
+ * than similar access operations on globally accessible storage buffers.
65
+ *
66
+ * This node can only be used with a WebGPU backend.
67
+ *
68
+ * @augments Node
69
+ */
39
70
  class WorkgroupInfoNode extends Node {
40
71
 
72
+ /**
73
+ * Constructs a new buffer scoped to type scope.
74
+ *
75
+ * @param {String} scope - TODO.
76
+ * @param {String} bufferType - The data type of a 'workgroup' scoped buffer element.
77
+ * @param {Number} [bufferCount=0] - The number of elements in the buffer.
78
+ */
41
79
  constructor( scope, bufferType, bufferCount = 0 ) {
42
80
 
43
81
  super( bufferType );
44
82
 
83
+ /**
84
+ * The buffer type.
85
+ *
86
+ * @type {String}
87
+ */
45
88
  this.bufferType = bufferType;
89
+
90
+ /**
91
+ * The buffer count.
92
+ *
93
+ * @type {Number}
94
+ * @default 0
95
+ */
46
96
  this.bufferCount = bufferCount;
47
97
 
98
+ /**
99
+ * This flag can be used for type testing.
100
+ *
101
+ * @type {Boolean}
102
+ * @readonly
103
+ * @default true
104
+ */
48
105
  this.isWorkgroupInfoNode = true;
49
106
 
107
+ /**
108
+ * The data type of the array buffer.
109
+ *
110
+ * @type {String}
111
+ */
112
+ this.elementType = bufferType;
113
+
114
+ /**
115
+ * TODO.
116
+ *
117
+ * @type {String}
118
+ */
50
119
  this.scope = scope;
51
120
 
52
121
  }
53
122
 
123
+ /**
124
+ * Sets the name/label of this node.
125
+ *
126
+ * @param {String} name - The name to set.
127
+ * @return {WorkgroupInfoNode} A reference to this node.
128
+ */
54
129
  label( name ) {
55
130
 
56
131
  this.name = name;
@@ -59,26 +134,51 @@ class WorkgroupInfoNode extends Node {
59
134
 
60
135
  }
61
136
 
62
- getHash() {
137
+ /**
138
+ * Sets the scope of this node.
139
+ *
140
+ * @param {String} scope - The scope to set.
141
+ * @return {WorkgroupInfoNode} A reference to this node.
142
+ */
143
+ setScope( scope ) {
144
+
145
+ this.scope = scope;
63
146
 
64
- return this.uuid;
147
+ return this;
65
148
 
66
149
  }
67
150
 
68
- setScope( scope ) {
69
151
 
70
- this.scope = scope;
152
+ /**
153
+ * The data type of the array buffer.
154
+ *
155
+ * @return {String} The element type.
156
+ */
157
+ getElementType() {
71
158
 
72
- return this;
159
+ return this.elementType;
73
160
 
74
161
  }
75
162
 
163
+ /**
164
+ * Overwrites the default implementation since the input type
165
+ * is inferred from the scope.
166
+ *
167
+ * @param {NodeBuilder} builder - The current node builder.
168
+ * @return {String} The input type.
169
+ */
76
170
  getInputType( /*builder*/ ) {
77
171
 
78
172
  return `${this.scope}Array`;
79
173
 
80
174
  }
81
175
 
176
+ /**
177
+ * This method can be used to access elements via an index node.
178
+ *
179
+ * @param {IndexNode} indexNode - indexNode.
180
+ * @return {WorkgroupInfoElementNode} A reference to an element.
181
+ */
82
182
  element( indexNode ) {
83
183
 
84
184
  return nodeObject( new WorkgroupInfoElementNode( this, indexNode ) );
@@ -95,6 +195,15 @@ class WorkgroupInfoNode extends Node {
95
195
 
96
196
  export default WorkgroupInfoNode;
97
197
 
198
+ /**
199
+ * TSL function for creating a workgroup info node.
200
+ * Creates a new 'workgroup' scoped array buffer.
201
+ *
202
+ * @function
203
+ * @param {String} type - The data type of a 'workgroup' scoped buffer element.
204
+ * @param {Number} [count=0] - The number of elements in the buffer.
205
+ * @returns {WorkgroupInfoNode}
206
+ */
98
207
  export const workgroupArray = ( type, count ) => nodeObject( new WorkgroupInfoNode( 'Workgroup', type, count ) );
99
208
 
100
209
 
@@ -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
+ * ambient occlusion to the scene. E.g. an ambient occlusion map
6
+ * node can be used as input for this module. Used in {@link NodeMaterial}.
7
+ *
8
+ * @augments LightingNode
9
+ */
3
10
  class AONode extends LightingNode {
4
11
 
5
12
  static get type() {
@@ -8,10 +15,21 @@ class AONode extends LightingNode {
8
15
 
9
16
  }
10
17
 
18
+ /**
19
+ * Constructs a new AO node.
20
+ *
21
+ * @param {Node<float>?} [aoNode=null] - The ambient occlusion node.
22
+ */
11
23
  constructor( aoNode = null ) {
12
24
 
13
25
  super();
14
26
 
27
+ /**
28
+ * The ambient occlusion node.
29
+ *
30
+ * @type {Node<float>?}
31
+ * @default null
32
+ */
15
33
  this.aoNode = aoNode;
16
34
 
17
35
  }
@@ -1,5 +1,10 @@
1
1
  import AnalyticLightNode from './AnalyticLightNode.js';
2
2
 
3
+ /**
4
+ * Module for representing ambient lights as nodes.
5
+ *
6
+ * @augments AnalyticLightNode
7
+ */
3
8
  class AmbientLightNode extends AnalyticLightNode {
4
9
 
5
10
  static get type() {
@@ -8,6 +13,11 @@ class AmbientLightNode extends AnalyticLightNode {
8
13
 
9
14
  }
10
15
 
16
+ /**
17
+ * Constructs a new ambient light node.
18
+ *
19
+ * @param {AmbientLight?} [light=null] - The ambient light source.
20
+ */
11
21
  constructor( light = null ) {
12
22
 
13
23
  super( light );
@@ -7,6 +7,11 @@ import { hash } from '../core/NodeUtils.js';
7
7
  import { shadow } from './ShadowNode.js';
8
8
  import { nodeObject } from '../tsl/TSLCore.js';
9
9
 
10
+ /**
11
+ * Base class for analytic light nodes.
12
+ *
13
+ * @augments LightingNode
14
+ */
10
15
  class AnalyticLightNode extends LightingNode {
11
16
 
12
17
  static get type() {
@@ -15,29 +20,92 @@ class AnalyticLightNode extends LightingNode {
15
20
 
16
21
  }
17
22
 
23
+ /**
24
+ * Constructs a new analytic light node.
25
+ *
26
+ * @param {Light?} [light=null] - The light source.
27
+ */
18
28
  constructor( light = null ) {
19
29
 
20
30
  super();
21
31
 
32
+ /**
33
+ * The light source.
34
+ *
35
+ * @type {Light?}
36
+ * @default null
37
+ */
22
38
  this.light = light;
23
39
 
40
+ /**
41
+ * The light's color value.
42
+ *
43
+ * @type {Color}
44
+ */
24
45
  this.color = new Color();
46
+
47
+ /**
48
+ * The light's color node. Points to `colorNode` of the light source, if set. Otherwise
49
+ * it creates a uniform node based on {@link AnalyticLightNode#color}.
50
+ *
51
+ * @type {Node}
52
+ */
25
53
  this.colorNode = ( light && light.colorNode ) || uniform( this.color ).setGroup( renderGroup );
26
54
 
55
+ /**
56
+ * This property is used to retain a reference to the original value of {@link AnalyticLightNode#colorNode}.
57
+ * The final color node is represented by a different node when using shadows.
58
+ *
59
+ * @type {Node?}
60
+ * @default null
61
+ */
27
62
  this.baseColorNode = null;
28
63
 
64
+ /**
65
+ * Represents the light's shadow.
66
+ *
67
+ * @type {ShadowNode?}
68
+ * @default null
69
+ */
29
70
  this.shadowNode = null;
71
+
72
+ /**
73
+ * Represents the light's shadow color.
74
+ *
75
+ * @type {Node?}
76
+ * @default null
77
+ */
30
78
  this.shadowColorNode = null;
31
79
 
80
+ /**
81
+ * This flag can be used for type testing.
82
+ *
83
+ * @type {Boolean}
84
+ * @readonly
85
+ * @default true
86
+ */
32
87
  this.isAnalyticLightNode = true;
33
88
 
89
+ /**
90
+ * Overwritten since analytic light nodes are updated
91
+ * once per frame.
92
+ *
93
+ * @type {String}
94
+ * @default 'frame'
95
+ */
34
96
  this.updateType = NodeUpdateType.FRAME;
35
97
 
36
98
  }
37
99
 
38
- getCacheKey() {
100
+ /**
101
+ * Overwrites the default {@link Node#customCacheKey} implementation by including the
102
+ * `light.id` and `light.castShadow` into the cache key.
103
+ *
104
+ * @return {Number} The custom cache key.
105
+ */
106
+ customCacheKey() {
39
107
 
40
- return hash( super.getCacheKey(), this.light.id, this.light.castShadow ? 1 : 0 );
108
+ return hash( this.light.id, this.light.castShadow ? 1 : 0 );
41
109
 
42
110
  }
43
111
 
@@ -47,12 +115,25 @@ class AnalyticLightNode extends LightingNode {
47
115
 
48
116
  }
49
117
 
118
+ /**
119
+ * Setups the shadow node for this light. The method exists so concrete light classes
120
+ * can setup different types of shadow nodes.
121
+ *
122
+ * @return {ShadowNode} The created shadow node.
123
+ */
50
124
  setupShadowNode() {
51
125
 
52
126
  return shadow( this.light );
53
127
 
54
128
  }
55
129
 
130
+ /**
131
+ * Setups the shadow for this light. This method is only executed if the light
132
+ * cast shadows and the current build object receives shadows. It incorporates
133
+ * shadows into the lighting computation.
134
+ *
135
+ * @param {NodeBuilder} builder - The current node builder.
136
+ */
56
137
  setupShadow( builder ) {
57
138
 
58
139
  const { renderer } = builder;
@@ -91,6 +172,13 @@ class AnalyticLightNode extends LightingNode {
91
172
 
92
173
  }
93
174
 
175
+ /**
176
+ * Unlike most other nodes, lighting nodes do not return a output node in {@link Node#setup}.
177
+ * The main purpose of lighting nodes is to configure the current {@link LightingModel} and/or
178
+ * invocate the respective interface methods.
179
+ *
180
+ * @param {NodeBuilder} builder - The current node builder.
181
+ */
94
182
  setup( builder ) {
95
183
 
96
184
  this.colorNode = this.baseColorNode || this.colorNode;
@@ -113,6 +201,13 @@ class AnalyticLightNode extends LightingNode {
113
201
 
114
202
  }
115
203
 
204
+ /**
205
+ * The update method is used to update light uniforms per frame.
206
+ * Potentially overwritten in concrete light nodes to update light
207
+ * specific uniforms.
208
+ *
209
+ * @param {NodeFrame} frame - A reference to the current node frame.
210
+ */
116
211
  update( /*frame*/ ) {
117
212
 
118
213
  const { light } = this;
@@ -1,6 +1,14 @@
1
1
  import LightingNode from './LightingNode.js';
2
2
  import { cubeMapNode } from '../utils/CubeMapNode.js';
3
3
 
4
+ /**
5
+ * Represents a basic model for Image-based lighting (IBL). The environment
6
+ * is defined via environment maps in the equirectangular or cube map format.
7
+ * `BasicEnvironmentNode` is intended for non-PBR materials like {@link MeshBasicNodeMaterial}
8
+ * or {@link MeshPhongNodeMaterial}.
9
+ *
10
+ * @augments LightingNode
11
+ */
4
12
  class BasicEnvironmentNode extends LightingNode {
5
13
 
6
14
  static get type() {
@@ -9,10 +17,21 @@ class BasicEnvironmentNode extends LightingNode {
9
17
 
10
18
  }
11
19
 
20
+ /**
21
+ * Constructs a new basic environment node.
22
+ *
23
+ * @param {Node} [envNode=null] - A node representing the environment.
24
+ */
12
25
  constructor( envNode = null ) {
13
26
 
14
27
  super();
15
28
 
29
+ /**
30
+ * A node representing the environment.
31
+ *
32
+ * @type {Node}
33
+ * @default null
34
+ */
16
35
  this.envNode = envNode;
17
36
 
18
37
  }
@@ -1,6 +1,13 @@
1
1
  import LightingNode from './LightingNode.js';
2
2
  import { float } from '../tsl/TSLBase.js';
3
3
 
4
+ /**
5
+ * A specific version of {@link IrradianceNode} that is only relevant
6
+ * for {@link MeshBasicNodeMaterial}. Since the material is unlit, it
7
+ * requires a special scaling factor for the light map.
8
+ *
9
+ * @augments LightingNode
10
+ */
4
11
  class BasicLightMapNode extends LightingNode {
5
12
 
6
13
  static get type() {
@@ -9,10 +16,20 @@ class BasicLightMapNode extends LightingNode {
9
16
 
10
17
  }
11
18
 
19
+ /**
20
+ * Constructs a new basic light map node.
21
+ *
22
+ * @param {Node<vec3>?} [lightMapNode=null] - The light map node.
23
+ */
12
24
  constructor( lightMapNode = null ) {
13
25
 
14
26
  super();
15
27
 
28
+ /**
29
+ * The light map node.
30
+ *
31
+ * @type {Node<vec3>?}
32
+ */
16
33
  this.lightMapNode = lightMapNode;
17
34
 
18
35
  }
@@ -1,6 +1,11 @@
1
1
  import AnalyticLightNode from './AnalyticLightNode.js';
2
2
  import { lightTargetDirection } from '../accessors/Lights.js';
3
3
 
4
+ /**
5
+ * Module for representing directional lights as nodes.
6
+ *
7
+ * @augments AnalyticLightNode
8
+ */
4
9
  class DirectionalLightNode extends AnalyticLightNode {
5
10
 
6
11
  static get type() {
@@ -9,6 +14,11 @@ class DirectionalLightNode extends AnalyticLightNode {
9
14
 
10
15
  }
11
16
 
17
+ /**
18
+ * Constructs a new directional light node.
19
+ *
20
+ * @param {DirectionalLight?} [light=null] - The directional light source.
21
+ */
12
22
  constructor( light = null ) {
13
23
 
14
24
  super( light );
@@ -11,6 +11,13 @@ import { pmremTexture } from '../pmrem/PMREMNode.js';
11
11
 
12
12
  const _envNodeCache = new WeakMap();
13
13
 
14
+ /**
15
+ * Represents a physical model for Image-based lighting (IBL). The environment
16
+ * is defined via environment maps in the equirectangular, cube map or cubeUV (PMREM) format.
17
+ * `EnvironmentNode` is intended for PBR materials like {@link MeshStandardNodeMaterial}.
18
+ *
19
+ * @augments LightingNode
20
+ */
14
21
  class EnvironmentNode extends LightingNode {
15
22
 
16
23
  static get type() {
@@ -19,10 +26,21 @@ class EnvironmentNode extends LightingNode {
19
26
 
20
27
  }
21
28
 
29
+ /**
30
+ * Constructs a new environment node.
31
+ *
32
+ * @param {Node} [envNode=null] - A node representing the environment.
33
+ */
22
34
  constructor( envNode = null ) {
23
35
 
24
36
  super();
25
37
 
38
+ /**
39
+ * A node representing the environment.
40
+ *
41
+ * @type {Node?}
42
+ * @default null
43
+ */
26
44
  this.envNode = envNode;
27
45
 
28
46
  }
@@ -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;