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,6 +2,19 @@ import TempNode from '../core/TempNode.js';
2
2
  import { positionWorldDirection } from '../accessors/Position.js';
3
3
  import { nodeProxy, vec2 } from '../tsl/TSLBase.js';
4
4
 
5
+ /** @module EquirectUVNode **/
6
+
7
+ /**
8
+ * Can be used to compute texture coordinates for projecting an
9
+ * equirectangular texture onto a mesh for using it as the scene's
10
+ * background.
11
+ *
12
+ * ```js
13
+ * scene.backgroundNode = texture( equirectTexture, equirectUV() );
14
+ * ```
15
+ *
16
+ * @augments TempNode
17
+ */
5
18
  class EquirectUVNode extends TempNode {
6
19
 
7
20
  static get type() {
@@ -10,10 +23,20 @@ class EquirectUVNode extends TempNode {
10
23
 
11
24
  }
12
25
 
26
+ /**
27
+ * Constructs a new equirect uv node.
28
+ *
29
+ * @param {Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
30
+ */
13
31
  constructor( dirNode = positionWorldDirection ) {
14
32
 
15
33
  super( 'vec2' );
16
34
 
35
+ /**
36
+ * A direction vector for sampling why is by default `positionWorldDirection`.
37
+ *
38
+ * @type {Node<vec3>}
39
+ */
17
40
  this.dirNode = dirNode;
18
41
 
19
42
  }
@@ -22,7 +45,7 @@ class EquirectUVNode extends TempNode {
22
45
 
23
46
  const dir = this.dirNode;
24
47
 
25
- const u = dir.z.atan2( dir.x ).mul( 1 / ( Math.PI * 2 ) ).add( 0.5 );
48
+ const u = dir.z.atan( dir.x ).mul( 1 / ( Math.PI * 2 ) ).add( 0.5 );
26
49
  const v = dir.y.clamp( - 1.0, 1.0 ).asin().mul( 1 / Math.PI ).add( 0.5 );
27
50
 
28
51
  return vec2( u, v );
@@ -33,4 +56,11 @@ class EquirectUVNode extends TempNode {
33
56
 
34
57
  export default EquirectUVNode;
35
58
 
59
+ /**
60
+ * TSL function for creating an equirect uv node.
61
+ *
62
+ * @function
63
+ * @param {Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
64
+ * @returns {EquirectUVNode}
65
+ */
36
66
  export const equirectUV = /*@__PURE__*/ nodeProxy( EquirectUVNode );
@@ -1,6 +1,21 @@
1
1
  import TempNode from '../core/TempNode.js';
2
2
  import { vectorComponents } from '../core/constants.js';
3
3
 
4
+ /**
5
+ * This module is part of the TSL core and usually not used in app level code.
6
+ * It represents a flip operation during the shader generation process
7
+ * meaning it flips normalized values with the following formula:
8
+ * ```
9
+ * x = 1 - x;
10
+ * ```
11
+ * `FlipNode` is internally used to implement any `flipXYZW()`, `flipRGBA()` and
12
+ * `flipSTPQ()` method invocations on node objects. For example:
13
+ * ```js
14
+ * uvNode = uvNode.flipY();
15
+ * ```
16
+ *
17
+ * @augments TempNode
18
+ */
4
19
  class FlipNode extends TempNode {
5
20
 
6
21
  static get type() {
@@ -9,15 +24,38 @@ class FlipNode extends TempNode {
9
24
 
10
25
  }
11
26
 
27
+ /**
28
+ * Constructs a new flip node.
29
+ *
30
+ * @param {Node} sourceNode - The node which component(s) should be flipped.
31
+ * @param {String} components - The components that should be flipped e.g. `'x'` or `'xy'`.
32
+ */
12
33
  constructor( sourceNode, components ) {
13
34
 
14
35
  super();
15
36
 
37
+ /**
38
+ * The node which component(s) should be flipped.
39
+ *
40
+ * @type {Node}
41
+ */
16
42
  this.sourceNode = sourceNode;
43
+
44
+ /**
45
+ * The components that should be flipped e.g. `'x'` or `'xy'`.
46
+ *
47
+ * @type {String}
48
+ */
17
49
  this.components = components;
18
50
 
19
51
  }
20
52
 
53
+ /**
54
+ * This method is overwritten since the node type is inferred from the source node.
55
+ *
56
+ * @param {NodeBuilder} builder - The current node builder.
57
+ * @return {String} The node type.
58
+ */
21
59
  getNodeType( builder ) {
22
60
 
23
61
  return this.sourceNode.getNodeType( builder );
@@ -1,6 +1,15 @@
1
1
  import Node from '../core/Node.js';
2
- import { nodeProxy } from '../tsl/TSLBase.js';
2
+ import { nodeProxy } from '../tsl/TSLCore.js';
3
3
 
4
+ /** @module FunctionOverloadingNode **/
5
+
6
+ /**
7
+ * This class allows to define multiple overloaded versions
8
+ * of the same function. Depending on the parameters of the function
9
+ * call, the node picks the best-fit overloaded version.
10
+ *
11
+ * @augments Node
12
+ */
4
13
  class FunctionOverloadingNode extends Node {
5
14
 
6
15
  static get type() {
@@ -9,19 +18,55 @@ class FunctionOverloadingNode extends Node {
9
18
 
10
19
  }
11
20
 
21
+ /**
22
+ * Constructs a new function overloading node.
23
+ *
24
+ * @param {Array<Function>} functionNodes - Array of `Fn` function definitions.
25
+ * @param {...Node} parametersNodes - A list of parameter nodes.
26
+ */
12
27
  constructor( functionNodes = [], ...parametersNodes ) {
13
28
 
14
29
  super();
15
30
 
31
+ /**
32
+ * Array of `Fn` function definitions.
33
+ *
34
+ * @type {Array<Function>}
35
+ */
16
36
  this.functionNodes = functionNodes;
37
+
38
+ /**
39
+ * A list of parameter nodes.
40
+ *
41
+ * @type {Array<Node>}
42
+ */
17
43
  this.parametersNodes = parametersNodes;
18
44
 
45
+ /**
46
+ * The selected overloaded function call.
47
+ *
48
+ * @private
49
+ * @type {ShaderCallNodeInternal}
50
+ */
19
51
  this._candidateFnCall = null;
20
52
 
53
+ /**
54
+ * This node is marked as global.
55
+ *
56
+ * @type {Boolean}
57
+ * @default true
58
+ */
21
59
  this.global = true;
22
60
 
23
61
  }
24
62
 
63
+ /**
64
+ * This method is overwritten since the node type is inferred from
65
+ * the function's return type.
66
+ *
67
+ * @param {NodeBuilder} builder - The current node builder.
68
+ * @return {String} The node type.
69
+ */
25
70
  getNodeType() {
26
71
 
27
72
  return this.functionNodes[ 0 ].shaderNode.layout.type;
@@ -98,4 +143,11 @@ export default FunctionOverloadingNode;
98
143
 
99
144
  const overloadingBaseFn = /*@__PURE__*/ nodeProxy( FunctionOverloadingNode );
100
145
 
146
+ /**
147
+ * TSL function for creating a function overloading node.
148
+ *
149
+ * @function
150
+ * @param {Array<Function>} functionNodes - Array of `Fn` function definitions.
151
+ * @returns {FunctionOverloadingNode}
152
+ */
101
153
  export const overloadingFn = ( functionNodes ) => ( ...params ) => overloadingBaseFn( functionNodes, ...params );
@@ -1,5 +1,12 @@
1
1
  import TempNode from '../core/TempNode.js';
2
2
 
3
+ /**
4
+ * This module is part of the TSL core and usually not used in app level code.
5
+ * It represents a join operation during the shader generation process.
6
+ * For example in can compose/join two single floats into a `vec2` type.
7
+ *
8
+ * @augments TempNode
9
+ */
3
10
  class JoinNode extends TempNode {
4
11
 
5
12
  static get type() {
@@ -8,14 +15,32 @@ class JoinNode extends TempNode {
8
15
 
9
16
  }
10
17
 
18
+ /**
19
+ * Constructs a new join node.
20
+ *
21
+ * @param {Array<Node>} nodes - An array of nodes that should be joined.
22
+ * @param {String?} [nodeType=null] - The node type.
23
+ */
11
24
  constructor( nodes = [], nodeType = null ) {
12
25
 
13
26
  super( nodeType );
14
27
 
28
+ /**
29
+ * An array of nodes that should be joined.
30
+ *
31
+ * @type {Array<Node>}
32
+ */
15
33
  this.nodes = nodes;
16
34
 
17
35
  }
18
36
 
37
+ /**
38
+ * This method is overwritten since the node type must be inferred from the
39
+ * joined data length if not explicitly defined.
40
+ *
41
+ * @param {NodeBuilder} builder - The current node builder.
42
+ * @return {String} The node type.
43
+ */
19
44
  getNodeType( builder ) {
20
45
 
21
46
  if ( this.nodeType !== null ) {
@@ -2,6 +2,34 @@ import Node from '../core/Node.js';
2
2
  import { expression } from '../code/ExpressionNode.js';
3
3
  import { nodeObject, nodeArray } from '../tsl/TSLBase.js';
4
4
 
5
+ /** @module LoopNode **/
6
+
7
+ /**
8
+ * This module offers a variety of ways to implement loops in TSL. In it's basic form it's:
9
+ * ```js
10
+ * Loop( count, ( { i } ) => {
11
+ *
12
+ * } );
13
+ * ```
14
+ * However, it is also possible to define a start and end ranges, data types and loop conditions:
15
+ * ```js
16
+ * Loop( { start: int( 0 ), end: int( 10 ), type: 'int', condition: '<' }, ( { i } ) => {
17
+ *
18
+ * } );
19
+ *```
20
+ * Nested loops can be defined in a compacted form:
21
+ * ```js
22
+ * Loop( 10, 5, ( { i, j } ) => {
23
+ *
24
+ * } );
25
+ * ```
26
+ * Loops that should run backwards can be defined like so:
27
+ * ```js
28
+ * Loop( { start: 10 }, () => {} );
29
+ * ```
30
+ * The module also provides `Break()` and `Continue()` TSL expression for loop control.
31
+ * @augments Node
32
+ */
5
33
  class LoopNode extends Node {
6
34
 
7
35
  static get type() {
@@ -10,6 +38,11 @@ class LoopNode extends Node {
10
38
 
11
39
  }
12
40
 
41
+ /**
42
+ * Constructs a new loop node.
43
+ *
44
+ * @param {Array<Any>} params - Depending on the loop type, array holds different parameterization values for the loop.
45
+ */
13
46
  constructor( params = [] ) {
14
47
 
15
48
  super();
@@ -18,12 +51,25 @@ class LoopNode extends Node {
18
51
 
19
52
  }
20
53
 
54
+ /**
55
+ * Returns a loop variable name based on an index. The pattern is
56
+ * `0` = `i`, `1`= `j`, `2`= `k` and so on.
57
+ *
58
+ * @param {Number} index - The index.
59
+ * @return {String} The loop variable name.
60
+ */
21
61
  getVarName( index ) {
22
62
 
23
- return String.fromCharCode( 'i'.charCodeAt() + index );
63
+ return String.fromCharCode( 'i'.charCodeAt( 0 ) + index );
24
64
 
25
65
  }
26
66
 
67
+ /**
68
+ * Returns properties about this node.
69
+ *
70
+ * @param {NodeBuilder} builder - The current node builder.
71
+ * @return {Object} The node properties.
72
+ */
27
73
  getProperties( builder ) {
28
74
 
29
75
  const properties = builder.getNodeProperties( this );
@@ -56,6 +102,12 @@ class LoopNode extends Node {
56
102
 
57
103
  }
58
104
 
105
+ /**
106
+ * This method is overwritten since the node type is inferred based on the loop configuration.
107
+ *
108
+ * @param {NodeBuilder} builder - The current node builder.
109
+ * @return {String} The node type.
110
+ */
59
111
  getNodeType( builder ) {
60
112
 
61
113
  const { returnsNode } = this.getProperties( builder );
@@ -197,12 +249,40 @@ class LoopNode extends Node {
197
249
 
198
250
  export default LoopNode;
199
251
 
252
+ /**
253
+ * TSL function for creating a loop node.
254
+ *
255
+ * @function
256
+ * @param {...Any} params - A list of parameters.
257
+ * @returns {LoopNode}
258
+ */
200
259
  export const Loop = ( ...params ) => nodeObject( new LoopNode( nodeArray( params, 'int' ) ) ).append();
260
+
261
+ /**
262
+ * TSL function for creating a `Continue()` expression.
263
+ *
264
+ * @function
265
+ * @returns {ExpressionNode}
266
+ */
201
267
  export const Continue = () => expression( 'continue' ).append();
268
+
269
+ /**
270
+ * TSL function for creating a `Break()` expression.
271
+ *
272
+ * @function
273
+ * @returns {ExpressionNode}
274
+ */
202
275
  export const Break = () => expression( 'break' ).append();
203
276
 
204
- //
277
+ // Deprecated
205
278
 
279
+ /**
280
+ * @function
281
+ * @deprecated since r168. Use {@link Loop} instead.
282
+ *
283
+ * @param {...any} params
284
+ * @returns {LoopNode}
285
+ */
206
286
  export const loop = ( ...params ) => { // @deprecated, r168
207
287
 
208
288
  console.warn( 'TSL.LoopNode: loop() has been renamed to Loop().' );
@@ -3,6 +3,14 @@ import { transformedNormalView } from '../accessors/Normal.js';
3
3
  import { positionViewDirection } from '../accessors/Position.js';
4
4
  import { nodeImmutable, vec2, vec3 } from '../tsl/TSLBase.js';
5
5
 
6
+ /** @module MatcapUVNode **/
7
+
8
+ /**
9
+ * Can be used to compute texture coordinates for projecting a
10
+ * matcap onto a mesh. Used by {@link MeshMatcapNodeMaterial}.
11
+ *
12
+ * @augments TempNode
13
+ */
6
14
  class MatcapUVNode extends TempNode {
7
15
 
8
16
  static get type() {
@@ -11,6 +19,9 @@ class MatcapUVNode extends TempNode {
11
19
 
12
20
  }
13
21
 
22
+ /**
23
+ * Constructs a new matcap uv node.
24
+ */
14
25
  constructor() {
15
26
 
16
27
  super( 'vec2' );
@@ -30,4 +41,10 @@ class MatcapUVNode extends TempNode {
30
41
 
31
42
  export default MatcapUVNode;
32
43
 
44
+ /**
45
+ * TSL function for creating a matcap uv node.
46
+ *
47
+ * @function
48
+ * @returns {MatcapUVNode}
49
+ */
33
50
  export const matcapUV = /*@__PURE__*/ nodeImmutable( MatcapUVNode );
@@ -2,6 +2,18 @@ import UniformNode from '../core/UniformNode.js';
2
2
  import { NodeUpdateType } from '../core/constants.js';
3
3
  import { nodeProxy } from '../tsl/TSLBase.js';
4
4
 
5
+ /** @module MatcapUVNode **/
6
+
7
+ /**
8
+ * A special type of uniform node that computes the
9
+ * maximum mipmap level for a given texture node.
10
+ *
11
+ * ```js
12
+ * const level = maxMipLevel( textureNode );
13
+ * ```
14
+ *
15
+ * @augments module:UniformNode~UniformNode
16
+ */
5
17
  class MaxMipLevelNode extends UniformNode {
6
18
 
7
19
  static get type() {
@@ -10,22 +22,52 @@ class MaxMipLevelNode extends UniformNode {
10
22
 
11
23
  }
12
24
 
25
+ /**
26
+ * Constructs a new max mip level node.
27
+ *
28
+ * @param {TextureNode} textureNode - The texture node to compute the max mip level for.
29
+ */
13
30
  constructor( textureNode ) {
14
31
 
15
32
  super( 0 );
16
33
 
34
+ /**
35
+ * The texture node to compute the max mip level for.
36
+ *
37
+ * @private
38
+ * @type {TextureNode}
39
+ */
17
40
  this._textureNode = textureNode;
18
41
 
42
+ /**
43
+ * The `updateType` is set to `NodeUpdateType.FRAME` since the node updates
44
+ * the texture once per frame in its {@link MaxMipLevelNode#update} method.
45
+ *
46
+ * @type {String}
47
+ * @default 'frame'
48
+ */
19
49
  this.updateType = NodeUpdateType.FRAME;
20
50
 
21
51
  }
22
52
 
53
+ /**
54
+ * The texture node to compute the max mip level for.
55
+ *
56
+ * @readonly
57
+ * @type {TextureNode}
58
+ */
23
59
  get textureNode() {
24
60
 
25
61
  return this._textureNode;
26
62
 
27
63
  }
28
64
 
65
+ /**
66
+ * The texture.
67
+ *
68
+ * @readonly
69
+ * @type {Texture}
70
+ */
29
71
  get texture() {
30
72
 
31
73
  return this._textureNode.value;
@@ -52,4 +94,11 @@ class MaxMipLevelNode extends UniformNode {
52
94
 
53
95
  export default MaxMipLevelNode;
54
96
 
97
+ /**
98
+ * TSL function for creating a max mip level node.
99
+ *
100
+ * @function
101
+ * @param {TextureNode} textureNode - The texture node to compute the max mip level for.
102
+ * @returns {MaxMipLevelNode}
103
+ */
55
104
  export const maxMipLevel = /*@__PURE__*/ nodeProxy( MaxMipLevelNode );
@@ -0,0 +1,68 @@
1
+ import Node from '../core/Node.js';
2
+
3
+ /**
4
+ * Base class for representing member access on an object-like
5
+ * node data structures.
6
+ *
7
+ * @augments Node
8
+ */
9
+ class MemberNode extends Node {
10
+
11
+ static get type() {
12
+
13
+ return 'MemberNode';
14
+
15
+ }
16
+
17
+ /**
18
+ * Constructs an array element node.
19
+ *
20
+ * @param {Node} node - The array-like node.
21
+ * @param {String} property - The property name.
22
+ */
23
+ constructor( node, property ) {
24
+
25
+ super();
26
+
27
+ /**
28
+ * The array-like node.
29
+ *
30
+ * @type {Node}
31
+ */
32
+ this.node = node;
33
+
34
+ /**
35
+ * The property name.
36
+ *
37
+ * @type {Node}
38
+ */
39
+ this.property = property;
40
+
41
+ /**
42
+ * This flag can be used for type testing.
43
+ *
44
+ * @type {Boolean}
45
+ * @readonly
46
+ * @default true
47
+ */
48
+ this.isMemberNode = true;
49
+
50
+ }
51
+
52
+ getNodeType( builder ) {
53
+
54
+ return this.node.getMemberType( builder, this.property );
55
+
56
+ }
57
+
58
+ generate( builder ) {
59
+
60
+ const propertyName = this.node.build( builder );
61
+
62
+ return propertyName + '.' + this.property;
63
+
64
+ }
65
+
66
+ }
67
+
68
+ export default MemberNode;
@@ -1,6 +1,39 @@
1
1
  import { time } from './Timer.js';
2
2
 
3
+ /** @module Oscillators **/
4
+
5
+ /**
6
+ * Generates a sine wave oscillation based on a timer.
7
+ *
8
+ * @method
9
+ * @param {Node<float>} t - The timer to generate the oscillation with.
10
+ * @return {Node<float>} The oscillation node.
11
+ */
3
12
  export const oscSine = ( t = time ) => t.add( 0.75 ).mul( Math.PI * 2 ).sin().mul( 0.5 ).add( 0.5 );
13
+
14
+ /**
15
+ * Generates a square wave oscillation based on a timer.
16
+ *
17
+ * @method
18
+ * @param {Node<float>} t - The timer to generate the oscillation with.
19
+ * @return {Node<float>} The oscillation node.
20
+ */
4
21
  export const oscSquare = ( t = time ) => t.fract().round();
22
+
23
+ /**
24
+ * Generates a triangle wave oscillation based on a timer.
25
+ *
26
+ * @method
27
+ * @param {Node<float>} t - The timer to generate the oscillation with.
28
+ * @return {Node<float>} The oscillation node.
29
+ */
5
30
  export const oscTriangle = ( t = time ) => t.add( 0.5 ).fract().mul( 2 ).sub( 1 ).abs();
31
+
32
+ /**
33
+ * Generates a sawtooth wave oscillation based on a timer.
34
+ *
35
+ * @method
36
+ * @param {Node<float>} t - The timer to generate the oscillation with.
37
+ * @return {Node<float>} The oscillation node.
38
+ */
6
39
  export const oscSawtooth = ( t = time ) => t.fract();
@@ -1,4 +1,21 @@
1
1
  import { nodeObject } from '../tsl/TSLBase.js';
2
2
 
3
+ /** @module Packing **/
4
+
5
+ /**
6
+ * Packs a direction vector into a color value.
7
+ *
8
+ * @method
9
+ * @param {Node<vec3>} node - The direction to pack.
10
+ * @return {Node<vec3>} The color.
11
+ */
3
12
  export const directionToColor = ( node ) => nodeObject( node ).mul( 0.5 ).add( 0.5 );
13
+
14
+ /**
15
+ * Unpacks a color value into a direction vector.
16
+ *
17
+ * @method
18
+ * @param {Node<vec3>} node - The color to unpack.
19
+ * @return {Node<vec3>} The direction.
20
+ */
4
21
  export const colorToDirection = ( node ) => nodeObject( node ).mul( 2.0 ).sub( 1 );
@@ -3,15 +3,18 @@ import { textureSize } from '../accessors/TextureSizeNode.js';
3
3
  import { textureLoad } from '../accessors/TextureNode.js';
4
4
  import { WebGPUCoordinateSystem } from '../../constants.js';
5
5
 
6
+ /** @module PostProcessingUtils **/
7
+
6
8
  /**
7
- * Computes a position in view space based on a fragment's screen position expressed as uv coordinates, the fragments
8
- * depth value and the camera's inverse projection matrix.
9
- *
10
- * @param {vec2} screenPosition - The fragment's screen position expressed as uv coordinates.
11
- * @param {float} depth - The fragment's depth value.
12
- * @param {mat4} projectionMatrixInverse - The camera's inverse projection matrix.
13
- * @return {vec3} The fragments position in view space.
14
- */
9
+ * Computes a position in view space based on a fragment's screen position expressed as uv coordinates, the fragments
10
+ * depth value and the camera's inverse projection matrix.
11
+ *
12
+ * @method
13
+ * @param {Node<vec2>} screenPosition - The fragment's screen position expressed as uv coordinates.
14
+ * @param {Node<float>} depth - The fragment's depth value.
15
+ * @param {Node<mat4>} projectionMatrixInverse - The camera's inverse projection matrix.
16
+ * @return {Node<vec3>} The fragments position in view space.
17
+ */
15
18
  export const getViewPosition = /*@__PURE__*/ Fn( ( [ screenPosition, depth, projectionMatrixInverse ], builder ) => {
16
19
 
17
20
  let clipSpacePosition;
@@ -34,13 +37,14 @@ export const getViewPosition = /*@__PURE__*/ Fn( ( [ screenPosition, depth, proj
34
37
  } );
35
38
 
36
39
  /**
37
- * Computes a screen position expressed as uv coordinates based on a fragment's position in view space
38
- * and the camera's projection matrix
39
- *
40
- * @param {vec3} viewPosition - The fragments position in view space.
41
- * @param {mat4} projectionMatrix - The camera's projection matrix.
42
- * @return {vec2} The fragment's screen position expressed as uv coordinates.
43
- */
40
+ * Computes a screen position expressed as uv coordinates based on a fragment's position in view space
41
+ * and the camera's projection matrix
42
+ *
43
+ * @method
44
+ * @param {Node<vec3>} viewPosition - The fragments position in view space.
45
+ * @param {Node<mat4>} projectionMatrix - The camera's projection matrix.
46
+ * @return {Node<vec2>} The fragment's screen position expressed as uv coordinates.
47
+ */
44
48
  export const getScreenPosition = /*@__PURE__*/ Fn( ( [ viewPosition, projectionMatrix ] ) => {
45
49
 
46
50
  const sampleClipPos = projectionMatrix.mul( vec4( viewPosition, 1.0 ) );
@@ -50,14 +54,15 @@ export const getScreenPosition = /*@__PURE__*/ Fn( ( [ viewPosition, projectionM
50
54
  } );
51
55
 
52
56
  /**
53
- * Computes a normal vector based on depth data. Can be used as a fallback when no normal render
54
- * target is available or if flat surface normals are required.
55
- *
56
- * @param {vec2} uv - The texture coordinate.
57
- * @param {DepthTexture} depthTexture - The depth texture.
58
- * @param {mat4} projectionMatrixInverse - The camera's inverse projection matrix.
59
- * @return {vec3} The computed normal vector.
60
- */
57
+ * Computes a normal vector based on depth data. Can be used as a fallback when no normal render
58
+ * target is available or if flat surface normals are required.
59
+ *
60
+ * @method
61
+ * @param {Node<vec2>} uv - The texture coordinate.
62
+ * @param {DepthTexture} depthTexture - The depth texture.
63
+ * @param {Node<mat4>} projectionMatrixInverse - The camera's inverse projection matrix.
64
+ * @return {Node<vec3>} The computed normal vector.
65
+ */
61
66
  export const getNormalFromDepth = /*@__PURE__*/ Fn( ( [ uv, depthTexture, projectionMatrixInverse ] ) => {
62
67
 
63
68
  const size = textureSize( textureLoad( depthTexture ) );