super-three 0.171.0 → 0.173.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +594 -427
  4. package/build/three.core.js +515 -81
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +79 -350
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +20 -7
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +29362 -3427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +29361 -3427
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -5
  15. package/examples/jsm/animation/CCDIKSolver.js +9 -7
  16. package/examples/jsm/capabilities/WebGPU.js +1 -1
  17. package/examples/jsm/controls/ArcballControls.js +48 -37
  18. package/examples/jsm/controls/OrbitControls.js +5 -4
  19. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  20. package/examples/jsm/curves/NURBSCurve.js +1 -1
  21. package/examples/jsm/curves/NURBSUtils.js +3 -0
  22. package/examples/jsm/effects/OutlineEffect.js +1 -1
  23. package/examples/jsm/exporters/GLTFExporter.js +34 -29
  24. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  25. package/examples/jsm/exporters/PLYExporter.js +2 -2
  26. package/examples/jsm/geometries/TextGeometry.js +1 -12
  27. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  28. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  29. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  30. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  31. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  32. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  33. package/examples/jsm/loaders/3MFLoader.js +6 -3
  34. package/examples/jsm/loaders/BVHLoader.js +1 -1
  35. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  36. package/examples/jsm/loaders/DDSLoader.js +42 -0
  37. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  38. package/examples/jsm/loaders/GLTFLoader.js +22 -4
  39. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  40. package/examples/jsm/loaders/KTXLoader.js +4 -4
  41. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  42. package/examples/jsm/loaders/LottieLoader.js +1 -1
  43. package/examples/jsm/loaders/MTLLoader.js +1 -0
  44. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  45. package/examples/jsm/loaders/PLYLoader.js +7 -7
  46. package/examples/jsm/loaders/PVRLoader.js +1 -1
  47. package/examples/jsm/loaders/SVGLoader.js +2 -2
  48. package/examples/jsm/loaders/TDSLoader.js +1 -2
  49. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  50. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  51. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  52. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  53. package/examples/jsm/math/ConvexHull.js +1 -1
  54. package/examples/jsm/math/OBB.js +17 -0
  55. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  56. package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
  57. package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
  58. package/examples/jsm/misc/Volume.js +27 -17
  59. package/examples/jsm/misc/VolumeSlice.js +7 -5
  60. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  61. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  62. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  63. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  64. package/examples/jsm/objects/Sky.js +2 -2
  65. package/examples/jsm/objects/SkyMesh.js +3 -3
  66. package/examples/jsm/objects/Water2.js +1 -1
  67. package/examples/jsm/objects/Water2Mesh.js +2 -2
  68. package/examples/jsm/objects/WaterMesh.js +29 -24
  69. package/examples/jsm/physics/JoltPhysics.js +7 -7
  70. package/examples/jsm/physics/RapierPhysics.js +4 -4
  71. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  72. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  73. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  74. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  75. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  76. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  77. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  78. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  79. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  80. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  81. package/examples/jsm/shaders/BokehShader2.js +1 -1
  82. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  83. package/examples/jsm/shaders/OutputShader.js +5 -1
  84. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  85. package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
  86. package/examples/jsm/transpiler/TSLEncoder.js +2 -0
  87. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  88. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  89. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  90. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  91. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  92. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  93. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  94. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  95. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  96. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  97. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  98. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  99. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  100. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  101. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  102. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  103. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  104. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  105. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  106. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  107. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  108. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  109. package/examples/jsm/tsl/display/Sepia.js +9 -0
  110. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  111. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  112. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  113. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  114. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  115. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  116. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  117. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  118. package/examples/jsm/utils/CameraUtils.js +4 -1
  119. package/examples/jsm/utils/GeometryUtils.js +22 -19
  120. package/examples/jsm/utils/SceneUtils.js +2 -2
  121. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  122. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  123. package/package.json +8 -3
  124. package/src/Three.Core.js +4 -0
  125. package/src/Three.Legacy.js +0 -21
  126. package/src/Three.TSL.js +18 -5
  127. package/src/Three.WebGPU.Nodes.js +2 -2
  128. package/src/Three.WebGPU.js +2 -2
  129. package/src/animation/PropertyBinding.js +2 -2
  130. package/src/cameras/ArrayCamera.js +1 -0
  131. package/src/cameras/PerspectiveCamera.js +18 -2
  132. package/src/constants.js +6 -1
  133. package/src/core/BufferAttribute.js +4 -0
  134. package/src/core/EventDispatcher.js +8 -6
  135. package/src/core/RenderTarget.js +18 -0
  136. package/src/core/RenderTarget3D.js +22 -0
  137. package/src/core/RenderTargetArray.js +22 -0
  138. package/src/extras/Earcut.js +1 -1
  139. package/src/extras/ImageUtils.js +1 -11
  140. package/src/extras/PMREMGenerator.js +20 -0
  141. package/src/extras/TextureUtils.js +6 -0
  142. package/src/helpers/CameraHelper.js +16 -13
  143. package/src/loaders/nodes/NodeLoader.js +59 -0
  144. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  145. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  146. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  147. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  148. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  149. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  150. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  151. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  152. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  153. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  154. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  155. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  156. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  157. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  158. package/src/materials/nodes/NodeMaterial.js +476 -23
  159. package/src/materials/nodes/NodeMaterials.js +0 -1
  160. package/src/materials/nodes/PointsNodeMaterial.js +121 -10
  161. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  162. package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
  163. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  164. package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
  165. package/src/nodes/Nodes.js +5 -6
  166. package/src/nodes/TSL.js +6 -3
  167. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  168. package/src/nodes/accessors/Arrays.js +47 -6
  169. package/src/nodes/accessors/BatchNode.js +42 -6
  170. package/src/nodes/accessors/Bitangent.js +37 -0
  171. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  172. package/src/nodes/accessors/BufferNode.js +63 -0
  173. package/src/nodes/accessors/BuiltinNode.js +38 -0
  174. package/src/nodes/accessors/Camera.js +113 -3
  175. package/src/nodes/accessors/ClippingNode.js +71 -2
  176. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  177. package/src/nodes/accessors/InstanceNode.js +85 -2
  178. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  179. package/src/nodes/accessors/Lights.js +50 -1
  180. package/src/nodes/accessors/MaterialNode.js +306 -12
  181. package/src/nodes/accessors/MaterialProperties.js +7 -0
  182. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  183. package/src/nodes/accessors/ModelNode.js +100 -5
  184. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  185. package/src/nodes/accessors/MorphNode.js +48 -4
  186. package/src/nodes/accessors/Normal.js +65 -5
  187. package/src/nodes/accessors/Object3DNode.js +101 -1
  188. package/src/nodes/accessors/PointUVNode.js +26 -0
  189. package/src/nodes/accessors/Position.js +56 -7
  190. package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
  191. package/src/nodes/accessors/ReferenceNode.js +201 -2
  192. package/src/nodes/accessors/ReflectVector.js +24 -0
  193. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  194. package/src/nodes/accessors/SceneNode.js +54 -0
  195. package/src/nodes/accessors/SkinningNode.js +127 -1
  196. package/src/nodes/accessors/StorageBufferNode.js +209 -8
  197. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  198. package/src/nodes/accessors/Tangent.js +38 -2
  199. package/src/nodes/accessors/Texture3DNode.js +91 -7
  200. package/src/nodes/accessors/TextureBicubic.js +12 -2
  201. package/src/nodes/accessors/TextureNode.js +316 -10
  202. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  203. package/src/nodes/accessors/UV.js +10 -1
  204. package/src/nodes/accessors/UniformArrayNode.js +231 -25
  205. package/src/nodes/accessors/UserDataNode.js +46 -0
  206. package/src/nodes/accessors/VelocityNode.js +80 -0
  207. package/src/nodes/accessors/VertexColorNode.js +39 -2
  208. package/src/nodes/code/CodeNode.js +95 -1
  209. package/src/nodes/code/ExpressionNode.js +28 -0
  210. package/src/nodes/code/FunctionCallNode.js +37 -0
  211. package/src/nodes/code/FunctionNode.js +45 -0
  212. package/src/nodes/code/ScriptableNode.js +223 -1
  213. package/src/nodes/code/ScriptableValueNode.js +85 -1
  214. package/src/nodes/core/ArrayNode.js +125 -0
  215. package/src/nodes/core/AssignNode.js +48 -2
  216. package/src/nodes/core/AttributeNode.js +43 -0
  217. package/src/nodes/core/BypassNode.js +47 -2
  218. package/src/nodes/core/CacheNode.js +53 -2
  219. package/src/nodes/core/ConstNode.js +32 -0
  220. package/src/nodes/core/ContextNode.js +65 -0
  221. package/src/nodes/core/IndexNode.js +68 -7
  222. package/src/nodes/core/InputNode.js +48 -0
  223. package/src/nodes/core/LightingModel.js +60 -0
  224. package/src/nodes/core/MRTNode.js +66 -0
  225. package/src/nodes/core/Node.js +350 -12
  226. package/src/nodes/core/NodeAttribute.js +38 -0
  227. package/src/nodes/core/NodeBuilder.js +1166 -26
  228. package/src/nodes/core/NodeCache.js +41 -2
  229. package/src/nodes/core/NodeCode.js +31 -0
  230. package/src/nodes/core/NodeFrame.js +123 -2
  231. package/src/nodes/core/NodeFunction.js +46 -0
  232. package/src/nodes/core/NodeFunctionInput.js +44 -0
  233. package/src/nodes/core/NodeParser.js +11 -0
  234. package/src/nodes/core/NodeUniform.js +52 -0
  235. package/src/nodes/core/NodeUtils.js +152 -1
  236. package/src/nodes/core/NodeVar.js +47 -1
  237. package/src/nodes/core/NodeVarying.js +28 -0
  238. package/src/nodes/core/OutputStructNode.js +51 -10
  239. package/src/nodes/core/ParameterNode.js +28 -0
  240. package/src/nodes/core/PropertyNode.js +232 -0
  241. package/src/nodes/core/StackNode.js +98 -1
  242. package/src/nodes/core/StructNode.js +121 -0
  243. package/src/nodes/core/StructType.js +13 -0
  244. package/src/nodes/core/StructTypeNode.js +105 -6
  245. package/src/nodes/core/TempNode.js +31 -5
  246. package/src/nodes/core/UniformGroupNode.js +82 -7
  247. package/src/nodes/core/UniformNode.js +66 -0
  248. package/src/nodes/core/VarNode.js +146 -7
  249. package/src/nodes/core/VaryingNode.js +100 -3
  250. package/src/nodes/core/constants.js +36 -0
  251. package/src/nodes/display/BlendModes.js +88 -1
  252. package/src/nodes/display/BumpMapNode.js +37 -0
  253. package/src/nodes/display/ColorAdjustment.js +53 -11
  254. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  255. package/src/nodes/display/ColorSpaceNode.js +82 -0
  256. package/src/nodes/display/FrontFacingNode.js +29 -0
  257. package/src/nodes/display/NormalMapNode.js +43 -0
  258. package/src/nodes/display/PassNode.js +300 -7
  259. package/src/nodes/display/PosterizeNode.js +33 -0
  260. package/src/nodes/display/RenderOutputNode.js +66 -1
  261. package/src/nodes/display/ScreenNode.js +96 -0
  262. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  263. package/src/nodes/display/ToneMappingNode.js +55 -2
  264. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  265. package/src/nodes/display/ViewportDepthNode.js +122 -8
  266. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  267. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  268. package/src/nodes/display/ViewportTextureNode.js +57 -0
  269. package/src/nodes/fog/Fog.js +110 -0
  270. package/src/nodes/functions/BasicLightingModel.js +24 -0
  271. package/src/nodes/functions/PhongLightingModel.js +34 -2
  272. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  273. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  274. package/src/nodes/functions/ToonLightingModel.js +20 -0
  275. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  276. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  277. package/src/nodes/geometry/RangeNode.js +54 -2
  278. package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
  279. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  280. package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
  281. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  282. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  283. package/src/nodes/lighting/AONode.js +18 -0
  284. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  285. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  286. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  287. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  288. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  289. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  290. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  291. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  292. package/src/nodes/lighting/IrradianceNode.js +17 -0
  293. package/src/nodes/lighting/LightProbeNode.js +20 -0
  294. package/src/nodes/lighting/LightUtils.js +12 -0
  295. package/src/nodes/lighting/LightingContextNode.js +48 -0
  296. package/src/nodes/lighting/LightingNode.js +15 -6
  297. package/src/nodes/lighting/LightsNode.js +132 -1
  298. package/src/nodes/lighting/PointLightNode.js +32 -1
  299. package/src/nodes/lighting/PointShadowNode.js +54 -1
  300. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  301. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  302. package/src/nodes/lighting/ShadowNode.js +241 -35
  303. package/src/nodes/lighting/SpotLightNode.js +43 -0
  304. package/src/nodes/math/ConditionalNode.js +78 -4
  305. package/src/nodes/math/Hash.js +9 -0
  306. package/src/nodes/math/MathNode.js +627 -11
  307. package/src/nodes/math/MathUtils.js +45 -1
  308. package/src/nodes/math/OperatorNode.js +329 -18
  309. package/src/nodes/math/TriNoise3D.js +18 -7
  310. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  311. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  312. package/src/nodes/pmrem/PMREMNode.js +133 -0
  313. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  314. package/src/nodes/procedural/Checker.js +9 -0
  315. package/src/nodes/shapes/Shapes.js +33 -0
  316. package/src/nodes/tsl/TSLBase.js +3 -2
  317. package/src/nodes/tsl/TSLCore.js +22 -2
  318. package/src/nodes/utils/ArrayElementNode.js +39 -3
  319. package/src/nodes/utils/ConvertNode.js +31 -0
  320. package/src/nodes/utils/CubeMapNode.js +78 -0
  321. package/src/nodes/utils/Discard.js +16 -0
  322. package/src/nodes/utils/EquirectUVNode.js +31 -1
  323. package/src/nodes/utils/FlipNode.js +38 -0
  324. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  325. package/src/nodes/utils/JoinNode.js +25 -0
  326. package/src/nodes/utils/LoopNode.js +82 -2
  327. package/src/nodes/utils/MatcapUVNode.js +17 -0
  328. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  329. package/src/nodes/utils/MemberNode.js +68 -0
  330. package/src/nodes/utils/Oscillators.js +33 -0
  331. package/src/nodes/utils/Packing.js +17 -0
  332. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  333. package/src/nodes/utils/RTTNode.js +123 -2
  334. package/src/nodes/utils/ReflectorNode.js +174 -4
  335. package/src/nodes/utils/RemapNode.js +79 -0
  336. package/src/nodes/utils/RotateNode.js +41 -0
  337. package/src/nodes/utils/SetNode.js +44 -1
  338. package/src/nodes/utils/SplitNode.js +55 -3
  339. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  340. package/src/nodes/utils/SpriteUtils.js +17 -0
  341. package/src/nodes/utils/StorageArrayElementNode.js +54 -0
  342. package/src/nodes/utils/Timer.js +40 -0
  343. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  344. package/src/nodes/utils/UVUtils.js +20 -0
  345. package/src/nodes/utils/ViewportUtils.js +13 -0
  346. package/src/objects/BatchedMesh.js +2 -3
  347. package/src/objects/ClippingGroup.js +49 -0
  348. package/src/objects/Line.js +6 -6
  349. package/src/renderers/WebGLRenderer.js +30 -4
  350. package/src/renderers/common/Animation.js +85 -0
  351. package/src/renderers/common/Attributes.js +36 -0
  352. package/src/renderers/common/Backend.js +502 -44
  353. package/src/renderers/common/Background.js +48 -1
  354. package/src/renderers/common/BindGroup.js +43 -0
  355. package/src/renderers/common/Binding.js +35 -0
  356. package/src/renderers/common/Bindings.js +93 -1
  357. package/src/renderers/common/Buffer.js +49 -0
  358. package/src/renderers/common/BufferUtils.js +27 -0
  359. package/src/renderers/common/BundleGroup.js +57 -0
  360. package/src/renderers/common/ChainMap.js +45 -6
  361. package/src/renderers/common/ClippingContext.js +108 -15
  362. package/src/renderers/common/Color4.js +40 -0
  363. package/src/renderers/common/ComputePipeline.js +24 -0
  364. package/src/renderers/common/CubeRenderTarget.js +13 -0
  365. package/src/renderers/common/DataMap.js +37 -1
  366. package/src/renderers/common/Geometries.js +91 -14
  367. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  368. package/src/renderers/common/Info.js +78 -35
  369. package/src/renderers/common/Lighting.js +34 -6
  370. package/src/renderers/common/Pipeline.js +22 -0
  371. package/src/renderers/common/Pipelines.js +148 -5
  372. package/src/renderers/common/PostProcessing.js +99 -11
  373. package/src/renderers/common/ProgrammableStage.js +60 -2
  374. package/src/renderers/common/QuadMesh.js +54 -5
  375. package/src/renderers/common/RenderBundle.js +14 -8
  376. package/src/renderers/common/RenderBundles.js +39 -10
  377. package/src/renderers/common/RenderContext.js +201 -2
  378. package/src/renderers/common/RenderContexts.js +59 -6
  379. package/src/renderers/common/RenderList.js +178 -0
  380. package/src/renderers/common/RenderLists.js +40 -3
  381. package/src/renderers/common/RenderObject.js +400 -17
  382. package/src/renderers/common/RenderObjects.js +103 -7
  383. package/src/renderers/common/RenderPipeline.js +24 -0
  384. package/src/renderers/common/Renderer.js +1170 -86
  385. package/src/renderers/common/RendererUtils.js +193 -0
  386. package/src/renderers/common/SampledTexture.js +120 -0
  387. package/src/renderers/common/Sampler.js +30 -0
  388. package/src/renderers/common/StorageBuffer.js +24 -0
  389. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  390. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  391. package/src/renderers/common/StorageTexture.js +38 -0
  392. package/src/renderers/common/Textures.js +97 -7
  393. package/src/renderers/common/TimestampQueryPool.js +39 -0
  394. package/src/renderers/common/Uniform.js +225 -3
  395. package/src/renderers/common/UniformBuffer.js +19 -0
  396. package/src/renderers/common/UniformsGroup.js +141 -2
  397. package/src/renderers/common/XRManager.js +1193 -0
  398. package/src/renderers/common/XRRenderTarget.js +74 -0
  399. package/src/renderers/common/extras/PMREMGenerator.js +76 -10
  400. package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
  401. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  402. package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
  403. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  404. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  405. package/src/renderers/common/nodes/NodeUniform.js +243 -2
  406. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  407. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  408. package/src/renderers/common/nodes/Nodes.js +352 -78
  409. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  410. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  411. package/src/renderers/webgl/WebGLBackground.js +4 -0
  412. package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
  413. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
  414. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
  415. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  416. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  417. package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
  418. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
  419. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
  420. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  421. package/src/renderers/webgpu/WebGPUBackend.js +578 -164
  422. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
  423. package/src/renderers/webgpu/WebGPURenderer.js +36 -0
  424. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  425. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  426. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
  427. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  428. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  429. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
  430. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
  431. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
  432. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
  433. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
  434. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
  435. package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
  436. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  437. package/src/renderers/webxr/WebXRManager.js +19 -2
  438. package/src/textures/Data3DTexture.js +2 -2
  439. package/src/textures/Texture.js +4 -0
  440. package/src/textures/VideoFrameTexture.js +35 -0
  441. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  442. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  443. package/examples/jsm/exporters/MMDExporter.js +0 -223
  444. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
  445. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  446. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  447. package/examples/jsm/objects/InstancedPoints.js +0 -19
  448. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  449. package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
  450. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
  451. package/src/nodes/core/UniformGroup.js +0 -13
  452. package/src/nodes/fog/FogExp2Node.js +0 -35
  453. package/src/nodes/fog/FogNode.js +0 -50
  454. package/src/nodes/fog/FogRangeNode.js +0 -36
  455. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -1,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 ) );
@@ -11,8 +11,13 @@ import { NodeUpdateType } from '../core/constants.js';
11
11
  const _matrix41 = /*@__PURE__*/ new Matrix4();
12
12
  const _matrix42 = /*@__PURE__*/ new Matrix4();
13
13
 
14
- let ltcLib = null;
14
+ let _ltcLib = null;
15
15
 
16
+ /**
17
+ * Module for representing rect area lights as nodes.
18
+ *
19
+ * @augments AnalyticLightNode
20
+ */
16
21
  class RectAreaLightNode extends AnalyticLightNode {
17
22
 
18
23
  static get type() {
@@ -21,17 +26,45 @@ class RectAreaLightNode extends AnalyticLightNode {
21
26
 
22
27
  }
23
28
 
29
+ /**
30
+ * Constructs a new rect area light node.
31
+ *
32
+ * @param {RectAreaLight?} [light=null] - The rect area light source.
33
+ */
24
34
  constructor( light = null ) {
25
35
 
26
36
  super( light );
27
37
 
38
+ /**
39
+ * Uniform node representing the half height of the are light.
40
+ *
41
+ * @type {UniformNode<vec3>}
42
+ */
28
43
  this.halfHeight = uniform( new Vector3() ).setGroup( renderGroup );
44
+
45
+ /**
46
+ * Uniform node representing the half width of the are light.
47
+ *
48
+ * @type {UniformNode<vec3>}
49
+ */
29
50
  this.halfWidth = uniform( new Vector3() ).setGroup( renderGroup );
30
51
 
52
+ /**
53
+ * The `updateType` is set to `NodeUpdateType.RENDER` since the light
54
+ * relies on `viewMatrix` which might vary per render call.
55
+ *
56
+ * @type {String}
57
+ * @default 'render'
58
+ */
31
59
  this.updateType = NodeUpdateType.RENDER;
32
60
 
33
61
  }
34
62
 
63
+ /**
64
+ * Overwritten to updated rect area light specific uniforms.
65
+ *
66
+ * @param {NodeFrame} frame - A reference to the current node frame.
67
+ */
35
68
  update( frame ) {
36
69
 
37
70
  super.update( frame );
@@ -61,13 +94,13 @@ class RectAreaLightNode extends AnalyticLightNode {
61
94
 
62
95
  if ( builder.isAvailable( 'float32Filterable' ) ) {
63
96
 
64
- ltc_1 = texture( ltcLib.LTC_FLOAT_1 );
65
- ltc_2 = texture( ltcLib.LTC_FLOAT_2 );
97
+ ltc_1 = texture( _ltcLib.LTC_FLOAT_1 );
98
+ ltc_2 = texture( _ltcLib.LTC_FLOAT_2 );
66
99
 
67
100
  } else {
68
101
 
69
- ltc_1 = texture( ltcLib.LTC_HALF_1 );
70
- ltc_2 = texture( ltcLib.LTC_HALF_2 );
102
+ ltc_1 = texture( _ltcLib.LTC_HALF_1 );
103
+ ltc_2 = texture( _ltcLib.LTC_HALF_2 );
71
104
 
72
105
  }
73
106
 
@@ -89,9 +122,14 @@ class RectAreaLightNode extends AnalyticLightNode {
89
122
 
90
123
  }
91
124
 
125
+ /**
126
+ * Used to configure the internal BRDF approximation texture data.
127
+ *
128
+ * @param {RectAreaLightTexturesLib} ltc - The BRDF approximation texture data.
129
+ */
92
130
  static setLTC( ltc ) {
93
131
 
94
- ltcLib = ltc;
132
+ _ltcLib = ltc;
95
133
 
96
134
  }
97
135
 
@@ -0,0 +1,93 @@
1
+ import Node from '../core/Node.js';
2
+ import { NodeUpdateType } from '../core/constants.js';
3
+ import { vec3 } from '../tsl/TSLBase.js';
4
+ import { positionWorld } from '../accessors/Position.js';
5
+
6
+ /** @module ShadowBaseNode **/
7
+
8
+ /**
9
+ * Base class for all shadow nodes.
10
+ *
11
+ * Shadow nodes encapsulate shadow related logic and are always coupled to lighting nodes.
12
+ * Lighting nodes might share the same shadow node type or use specific ones depending on
13
+ * their requirements.
14
+ *
15
+ * @augments Node
16
+ */
17
+ class ShadowBaseNode extends Node {
18
+
19
+ static get type() {
20
+
21
+ return 'ShadowBaseNode';
22
+
23
+ }
24
+
25
+ /**
26
+ * Constructs a new shadow base node.
27
+ *
28
+ * @param {Light} light - The shadow casting light.
29
+ */
30
+ constructor( light ) {
31
+
32
+ super();
33
+
34
+ /**
35
+ * The shadow casting light.
36
+ *
37
+ * @type {Light}
38
+ */
39
+ this.light = light;
40
+
41
+ /**
42
+ * Overwritten since shadows are updated by default per render.
43
+ *
44
+ * @type {String}
45
+ * @default 'render'
46
+ */
47
+ this.updateBeforeType = NodeUpdateType.RENDER;
48
+
49
+ /**
50
+ * This flag can be used for type testing.
51
+ *
52
+ * @type {Boolean}
53
+ * @readonly
54
+ * @default true
55
+ */
56
+ this.isShadowBaseNode = true;
57
+
58
+ }
59
+
60
+ /**
61
+ * Setups the shadow position node which is by default the predefined TSL node object `shadowPositionWorld`.
62
+ *
63
+ * @param {(NodeBuilder|{Material})} object - A configuration object that must at least hold a material reference.
64
+ */
65
+ setupShadowPosition( { material } ) {
66
+
67
+ // Use assign inside an Fn()
68
+
69
+ shadowPositionWorld.assign( material.shadowPositionNode || positionWorld );
70
+
71
+ }
72
+
73
+ /**
74
+ * Can be called when the shadow isn't required anymore. That can happen when
75
+ * a lighting node stops casting shadows by setting {@link Object3D#castShadow}
76
+ * to `false`.
77
+ */
78
+ dispose() {
79
+
80
+ this.updateBeforeType = NodeUpdateType.NONE;
81
+
82
+ }
83
+
84
+ }
85
+
86
+ /**
87
+ * TSL object that represents the vertex position in world space during the shadow pass.
88
+ *
89
+ * @type {Node<vec3>}
90
+ */
91
+ export const shadowPositionWorld = /*@__PURE__*/ vec3().toVar( 'shadowPositionWorld' );
92
+
93
+ export default ShadowBaseNode;