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,18 @@ import { DataTexture, RepeatWrapping, Vector2, Vector3, TempNode } from 'three/w
2
2
  import { texture, getNormalFromDepth, getViewPosition, convertToTexture, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, luminance, vec2, vec3, vec4, uniformArray, int, dot, max, pow, abs, If, textureSize, sin, cos, mat2, PI } from 'three/tsl';
3
3
  import { SimplexNoise } from '../../math/SimplexNoise.js';
4
4
 
5
+ /** @module DenoiseNode **/
6
+
7
+ /**
8
+ * Post processing node for denoising data like raw screen-space ambient occlusion output.
9
+ * Denoise can noticeably improve the quality of ambient occlusion but also add quite some
10
+ * overhead to the post processing setup. It's best to make its usage optional (e.g. via
11
+ * graphic settings).
12
+ *
13
+ * Reference: {@link https://openaccess.thecvf.com/content/WACV2021/papers/Khademi_Self-Supervised_Poisson-Gaussian_Denoising_WACV_2021_paper.pdf}.
14
+ *
15
+ * @augments TempNode
16
+ */
5
17
  class DenoiseNode extends TempNode {
6
18
 
7
19
  static get type() {
@@ -10,32 +22,123 @@ class DenoiseNode extends TempNode {
10
22
 
11
23
  }
12
24
 
25
+ /**
26
+ * Constructs a new denoise node.
27
+ *
28
+ * @param {TextureNode} textureNode - The texture node that represents the input of the effect (e.g. AO).
29
+ * @param {Node<float>} depthNode - A node that represents the scene's depth.
30
+ * @param {Node<vec3>?} normalNode - A node that represents the scene's normals.
31
+ * @param {Camera} camera - The camera the scene is rendered with.
32
+ */
13
33
  constructor( textureNode, depthNode, normalNode, camera ) {
14
34
 
15
35
  super( 'vec4' );
16
36
 
37
+ /**
38
+ * The texture node that represents the input of the effect (e.g. AO).
39
+ *
40
+ * @type {TextureNode}
41
+ */
17
42
  this.textureNode = textureNode;
43
+
44
+ /**
45
+ * A node that represents the scene's depth.
46
+ *
47
+ * @type {Node<float>}
48
+ */
18
49
  this.depthNode = depthNode;
50
+
51
+ /**
52
+ * A node that represents the scene's normals. If no normals are passed to the
53
+ * constructor (because MRT is not available), normals can be automatically
54
+ * reconstructed from depth values in the shader.
55
+ *
56
+ * @type {Node<vec3>?}
57
+ */
19
58
  this.normalNode = normalNode;
20
59
 
60
+ /**
61
+ * The node represents the internal noise texture.
62
+ *
63
+ * @type {TextureNode}
64
+ */
21
65
  this.noiseNode = texture( generateDefaultNoise() );
22
66
 
67
+ /**
68
+ * The luma Phi value.
69
+ *
70
+ * @type {UniformNode<float>}
71
+ */
23
72
  this.lumaPhi = uniform( 5 );
73
+
74
+ /**
75
+ * The depth Phi value.
76
+ *
77
+ * @type {UniformNode<float>}
78
+ */
24
79
  this.depthPhi = uniform( 5 );
80
+
81
+ /**
82
+ * The normal Phi value.
83
+ *
84
+ * @type {UniformNode<float>}
85
+ */
25
86
  this.normalPhi = uniform( 5 );
87
+
88
+ /**
89
+ * The radius.
90
+ *
91
+ * @type {UniformNode<float>}
92
+ */
26
93
  this.radius = uniform( 5 );
94
+
95
+ /**
96
+ * The index.
97
+ *
98
+ * @type {UniformNode<float>}
99
+ */
27
100
  this.index = uniform( 0 );
28
101
 
102
+ /**
103
+ * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node updates
104
+ * its internal uniforms once per frame in `updateBefore()`.
105
+ *
106
+ * @type {String}
107
+ * @default 'frame'
108
+ */
29
109
  this.updateBeforeType = NodeUpdateType.FRAME;
30
110
 
31
- // uniforms
32
-
111
+ /**
112
+ * The resolution of the effect.
113
+ *
114
+ * @private
115
+ * @type {UniformNode<vec2>}
116
+ */
33
117
  this._resolution = uniform( new Vector2() );
34
- this._sampleVectors = uniformArray( generatePdSamplePointInitializer( 16, 2, 1 ) );
118
+
119
+ /**
120
+ * An array of sample vectors.
121
+ *
122
+ * @private
123
+ * @type {UniformArrayNode<vec3>}
124
+ */
125
+ this._sampleVectors = uniformArray( generateDenoiseSamples( 16, 2, 1 ) );
126
+
127
+ /**
128
+ * Represents the inverse projection matrix of the scene's camera.
129
+ *
130
+ * @private
131
+ * @type {UniformNode<mat4>}
132
+ */
35
133
  this._cameraProjectionMatrixInverse = uniform( camera.projectionMatrixInverse );
36
134
 
37
135
  }
38
136
 
137
+ /**
138
+ * This method is used to update internal uniforms once per frame.
139
+ *
140
+ * @param {NodeFrame} frame - The current node frame.
141
+ */
39
142
  updateBefore() {
40
143
 
41
144
  const map = this.textureNode.value;
@@ -44,14 +147,20 @@ class DenoiseNode extends TempNode {
44
147
 
45
148
  }
46
149
 
47
- setup() {
150
+ /**
151
+ * This method is used to setup the effect's TSL code.
152
+ *
153
+ * @param {NodeBuilder} builder - The current node builder.
154
+ * @return {ShaderCallNodeInternal}
155
+ */
156
+ setup( /* builder */ ) {
48
157
 
49
158
  const uvNode = uv();
50
159
 
51
- const sampleTexture = ( uv ) => this.textureNode.uv( uv );
52
- const sampleDepth = ( uv ) => this.depthNode.uv( uv ).x;
53
- const sampleNormal = ( uv ) => ( this.normalNode !== null ) ? this.normalNode.uv( uv ).rgb.normalize() : getNormalFromDepth( uv, this.depthNode.value, this._cameraProjectionMatrixInverse );
54
- const sampleNoise = ( uv ) => this.noiseNode.uv( uv );
160
+ const sampleTexture = ( uv ) => this.textureNode.sample( uv );
161
+ const sampleDepth = ( uv ) => this.depthNode.sample( uv ).x;
162
+ const sampleNormal = ( uv ) => ( this.normalNode !== null ) ? this.normalNode.sample( uv ).rgb.normalize() : getNormalFromDepth( uv, this.depthNode.value, this._cameraProjectionMatrixInverse );
163
+ const sampleNoise = ( uv ) => this.noiseNode.sample( uv );
55
164
 
56
165
  const denoiseSample = Fn( ( [ center, viewNormal, viewPosition, sampleUv ] ) => {
57
166
 
@@ -149,23 +258,14 @@ class DenoiseNode extends TempNode {
149
258
 
150
259
  export default DenoiseNode;
151
260
 
152
- function generatePdSamplePointInitializer( samples, rings, radiusExponent ) {
153
-
154
- const poissonDisk = generateDenoiseSamples( samples, rings, radiusExponent );
155
-
156
- const array = [];
157
-
158
- for ( let i = 0; i < samples; i ++ ) {
159
-
160
- const sample = poissonDisk[ i ];
161
- array.push( sample );
162
-
163
- }
164
-
165
- return array;
166
-
167
- }
168
-
261
+ /**
262
+ * Generates denoise samples based on the given parameters.
263
+ *
264
+ * @param {Number} numSamples - The number of samples.
265
+ * @param {Number} numRings - The number of rings.
266
+ * @param {Number} radiusExponent - The radius exponent.
267
+ * @return {Array<Vector3>} The denoise samples.
268
+ */
169
269
  function generateDenoiseSamples( numSamples, numRings, radiusExponent ) {
170
270
 
171
271
  const samples = [];
@@ -182,6 +282,12 @@ function generateDenoiseSamples( numSamples, numRings, radiusExponent ) {
182
282
 
183
283
  }
184
284
 
285
+ /**
286
+ * Generates a default noise texture for the given size.
287
+ *
288
+ * @param {Number} [size=64] - The texture size.
289
+ * @return {DataTexture} The generated noise texture.
290
+ */
185
291
  function generateDefaultNoise( size = 64 ) {
186
292
 
187
293
  const simplex = new SimplexNoise();
@@ -214,4 +320,14 @@ function generateDefaultNoise( size = 64 ) {
214
320
 
215
321
  }
216
322
 
323
+ /**
324
+ * TSL function for creating a denoise effect.
325
+ *
326
+ * @function
327
+ * @param {Node} node - The node that represents the input of the effect (e.g. AO).
328
+ * @param {Node<float>} depthNode - A node that represents the scene's depth.
329
+ * @param {Node<vec3>?} normalNode - A node that represents the scene's normals.
330
+ * @param {Camera} camera - The camera the scene is rendered with.
331
+ * @returns {DenoiseNode}
332
+ */
217
333
  export const denoise = ( node, depthNode, normalNode, camera ) => nodeObject( new DenoiseNode( convertToTexture( node ), nodeObject( depthNode ), nodeObject( normalNode ), camera ) );
@@ -1,6 +1,13 @@
1
1
  import { TempNode, NodeUpdateType } from 'three/webgpu';
2
2
  import { convertToTexture, nodeObject, Fn, uv, uniform, vec2, vec4, clamp } from 'three/tsl';
3
3
 
4
+ /** @module DepthOfFieldNode **/
5
+
6
+ /**
7
+ * Post processing node for creating depth of field (DOF) effect.
8
+ *
9
+ * @augments TempNode
10
+ */
4
11
  class DepthOfFieldNode extends TempNode {
5
12
 
6
13
  static get type() {
@@ -9,23 +16,78 @@ class DepthOfFieldNode extends TempNode {
9
16
 
10
17
  }
11
18
 
19
+ /**
20
+ * Constructs a new DOF node.
21
+ *
22
+ * @param {TextureNode} textureNode - The texture node that represents the input of the effect.
23
+ * @param {Node<float>} viewZNode - Represents the viewZ depth values of the scene.
24
+ * @param {Node<float>} focusNode - Defines the effect's focus which is the distance along the camera's look direction in world units.
25
+ * @param {Node<float>} apertureNode - Defines the effect's aperture.
26
+ * @param {Node<float>} maxblurNode - Defines the effect's maximum blur.
27
+ */
12
28
  constructor( textureNode, viewZNode, focusNode, apertureNode, maxblurNode ) {
13
29
 
14
30
  super( 'vec4' );
15
31
 
32
+ /**
33
+ * The texture node that represents the input of the effect.
34
+ *
35
+ * @type {TextureNode}
36
+ */
16
37
  this.textureNode = textureNode;
38
+
39
+ /**
40
+ * Represents the viewZ depth values of the scene.
41
+ *
42
+ * @type {Node<float>}
43
+ */
17
44
  this.viewZNode = viewZNode;
18
45
 
46
+ /**
47
+ * Defines the effect's focus which is the distance along the camera's look direction in world units.
48
+ *
49
+ * @type {Node<float>}
50
+ */
19
51
  this.focusNode = focusNode;
52
+
53
+ /**
54
+ * Defines the effect's aperture.
55
+ *
56
+ * @type {Node<float>}
57
+ */
20
58
  this.apertureNode = apertureNode;
59
+
60
+ /**
61
+ * Defines the effect's maximum blur.
62
+ *
63
+ * @type {Node<float>}
64
+ */
21
65
  this.maxblurNode = maxblurNode;
22
66
 
67
+ /**
68
+ * Represents the input's aspect ratio.
69
+ *
70
+ * @private
71
+ * @type {UniformNode<float>}
72
+ */
23
73
  this._aspect = uniform( 0 );
24
74
 
75
+ /**
76
+ * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node updates
77
+ * its internal uniforms once per frame in `updateBefore()`.
78
+ *
79
+ * @type {String}
80
+ * @default 'frame'
81
+ */
25
82
  this.updateBeforeType = NodeUpdateType.FRAME;
26
83
 
27
84
  }
28
85
 
86
+ /**
87
+ * This method is used to update the effect's uniforms once per frame.
88
+ *
89
+ * @param {NodeFrame} frame - The current node frame.
90
+ */
29
91
  updateBefore() {
30
92
 
31
93
  const map = this.textureNode.value;
@@ -34,12 +96,18 @@ class DepthOfFieldNode extends TempNode {
34
96
 
35
97
  }
36
98
 
99
+ /**
100
+ * This method is used to setup the effect's TSL code.
101
+ *
102
+ * @param {NodeBuilder} builder - The current node builder.
103
+ * @return {ShaderCallNodeInternal}
104
+ */
37
105
  setup() {
38
106
 
39
107
  const textureNode = this.textureNode;
40
108
  const uvNode = textureNode.uvNode || uv();
41
109
 
42
- const sampleTexture = ( uv ) => textureNode.uv( uv );
110
+ const sampleTexture = ( uv ) => textureNode.sample( uv );
43
111
 
44
112
  const dof = Fn( () => {
45
113
 
@@ -116,4 +184,15 @@ class DepthOfFieldNode extends TempNode {
116
184
 
117
185
  export default DepthOfFieldNode;
118
186
 
187
+ /**
188
+ * TSL function for creating a depth-of-field effect (DOF) for post processing.
189
+ *
190
+ * @function
191
+ * @param {Node<vec4>} node - The node that represents the input of the effect.
192
+ * @param {Node<float>} viewZNode - Represents the viewZ depth values of the scene.
193
+ * @param {Node<float> | Number} focus - Defines the effect's focus which is the distance along the camera's look direction in world units.
194
+ * @param {Node<float> | Number} aperture - Defines the effect's aperture.
195
+ * @param {Node<float> | Number} maxblur - Defines the effect's maximum blur.
196
+ * @returns {DepthOfFieldNode}
197
+ */
119
198
  export const dof = ( node, viewZNode, focus = 1, aperture = 0.025, maxblur = 1 ) => nodeObject( new DepthOfFieldNode( convertToTexture( node ), nodeObject( viewZNode ), nodeObject( focus ), nodeObject( aperture ), nodeObject( maxblur ) ) );
@@ -1,6 +1,13 @@
1
- import { Vector2, TempNode } from 'three/webgpu';
1
+ import { TempNode } from 'three/webgpu';
2
2
  import { nodeObject, Fn, uv, uniform, vec2, vec3, sin, cos, add, vec4, screenSize } from 'three/tsl';
3
3
 
4
+ /** @module DotScreenNode **/
5
+
6
+ /**
7
+ * Post processing node for creating dot-screen effect.
8
+ *
9
+ * @augments TempNode
10
+ */
4
11
  class DotScreenNode extends TempNode {
5
12
 
6
13
  static get type() {
@@ -9,17 +16,46 @@ class DotScreenNode extends TempNode {
9
16
 
10
17
  }
11
18
 
12
- constructor( inputNode, center = new Vector2( 0.5, 0.5 ), angle = 1.57, scale = 1 ) {
19
+ /**
20
+ * Constructs a new dot screen node.
21
+ *
22
+ * @param {Node} inputNode - The node that represents the input of the effect.
23
+ * @param {Number} [angle=1.57] - The rotation of the effect in radians.
24
+ * @param {Number} [scale=1] - The scale of the effect. A higher value means smaller dots.
25
+ */
26
+ constructor( inputNode, angle = 1.57, scale = 1 ) {
13
27
 
14
28
  super( 'vec4' );
15
29
 
30
+ /**
31
+ * The node that represents the input of the effect.
32
+ *
33
+ * @type {Node}
34
+ */
16
35
  this.inputNode = inputNode;
17
- this.center = uniform( center );
36
+
37
+ /**
38
+ * A uniform node that represents the rotation of the effect in radians.
39
+ *
40
+ * @type {UniformNode<float>}
41
+ */
18
42
  this.angle = uniform( angle );
43
+
44
+ /**
45
+ * A uniform node that represents the scale of the effect. A higher value means smaller dots.
46
+ *
47
+ * @type {UniformNode<float>}
48
+ */
19
49
  this.scale = uniform( scale );
20
50
 
21
51
  }
22
52
 
53
+ /**
54
+ * This method is used to setup the effect's TSL code.
55
+ *
56
+ * @param {NodeBuilder} builder - The current node builder.
57
+ * @return {ShaderCallNodeInternal}
58
+ */
23
59
  setup() {
24
60
 
25
61
  const inputNode = this.inputNode;
@@ -29,7 +65,7 @@ class DotScreenNode extends TempNode {
29
65
  const s = sin( this.angle );
30
66
  const c = cos( this.angle );
31
67
 
32
- const tex = uv().mul( screenSize ).sub( this.center );
68
+ const tex = uv().mul( screenSize );
33
69
  const point = vec2( c.mul( tex.x ).sub( s.mul( tex.y ) ), s.mul( tex.x ).add( c.mul( tex.y ) ) ).mul( this.scale );
34
70
 
35
71
  return sin( point.x ).mul( sin( point.y ) ).mul( 4 );
@@ -56,4 +92,13 @@ class DotScreenNode extends TempNode {
56
92
 
57
93
  export default DotScreenNode;
58
94
 
59
- export const dotScreen = ( node, center, angle, scale ) => nodeObject( new DotScreenNode( nodeObject( node ), center, angle, scale ) );
95
+ /**
96
+ * TSL function for creating a dot-screen node for post processing.
97
+ *
98
+ * @function
99
+ * @param {Node<vec4>} node - The node that represents the input of the effect.
100
+ * @param {Number} [angle=1.57] - The rotation of the effect in radians.
101
+ * @param {Number} [scale=1] - The scale of the effect. A higher value means smaller dots.
102
+ * @returns {DotScreenNode}
103
+ */
104
+ export const dotScreen = ( node, angle, scale ) => nodeObject( new DotScreenNode( nodeObject( node ), angle, scale ) );
@@ -1,6 +1,14 @@
1
1
  import { Vector2, TempNode } from 'three/webgpu';
2
2
  import { nodeObject, Fn, uniformArray, select, float, NodeUpdateType, uv, dot, clamp, uniform, convertToTexture, smoothstep, bool, vec2, vec3, If, Loop, max, min, Break, abs } from 'three/tsl';
3
3
 
4
+ /** @module FXAANode **/
5
+
6
+ /**
7
+ * Post processing node for applying FXAA. This node requires sRGB input
8
+ * so tone mapping and color space conversion must happen before the anti-aliasing.
9
+ *
10
+ * @augments TempNode
11
+ */
4
12
  class FXAANode extends TempNode {
5
13
 
6
14
  static get type() {
@@ -9,19 +17,47 @@ class FXAANode extends TempNode {
9
17
 
10
18
  }
11
19
 
20
+ /**
21
+ * Constructs a new FXAA node.
22
+ *
23
+ * @param {TextureNode} textureNode - The texture node that represents the input of the effect.
24
+ */
12
25
  constructor( textureNode ) {
13
26
 
14
27
  super( 'vec4' );
15
28
 
29
+ /**
30
+ * The texture node that represents the input of the effect.
31
+ *
32
+ * @type {TextureNode}
33
+ */
16
34
  this.textureNode = textureNode;
17
35
 
36
+ /**
37
+ * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node updates
38
+ * its internal uniforms once per frame in `updateBefore()`.
39
+ *
40
+ * @type {String}
41
+ * @default 'frame'
42
+ */
18
43
  this.updateBeforeType = NodeUpdateType.FRAME;
19
44
 
45
+ /**
46
+ * A uniform node holding the inverse resolution value.
47
+ *
48
+ * @private
49
+ * @type {UniformNode<vec2>}
50
+ */
20
51
  this._invSize = uniform( new Vector2() );
21
52
 
22
53
  }
23
54
 
24
- updateBefore() {
55
+ /**
56
+ * This method is used to update the effect's uniforms once per frame.
57
+ *
58
+ * @param {NodeFrame} frame - The current node frame.
59
+ */
60
+ updateBefore( /* frame */ ) {
25
61
 
26
62
  const map = this.textureNode.value;
27
63
 
@@ -29,7 +65,13 @@ class FXAANode extends TempNode {
29
65
 
30
66
  }
31
67
 
32
- setup() {
68
+ /**
69
+ * This method is used to setup the effect's TSL code.
70
+ *
71
+ * @param {NodeBuilder} builder - The current node builder.
72
+ * @return {ShaderCallNodeInternal}
73
+ */
74
+ setup( /* builder */ ) {
33
75
 
34
76
  const textureNode = this.textureNode.bias( - 100 );
35
77
  const uvNode = textureNode.uvNode || uv();
@@ -44,7 +86,7 @@ class FXAANode extends TempNode {
44
86
 
45
87
  const Sample = Fn( ( [ uv ] ) => {
46
88
 
47
- return textureNode.uv( uv );
89
+ return textureNode.sample( uv );
48
90
 
49
91
  } );
50
92
 
@@ -313,4 +355,11 @@ class FXAANode extends TempNode {
313
355
 
314
356
  export default FXAANode;
315
357
 
358
+ /**
359
+ * TSL function for creating a FXAA node for anti-aliasing via post processing.
360
+ *
361
+ * @function
362
+ * @param {Node<vec4>} node - The node that represents the input of the effect.
363
+ * @returns {FXAANode}
364
+ */
316
365
  export const fxaa = ( node ) => nodeObject( new FXAANode( convertToTexture( node ) ) );
@@ -1,6 +1,13 @@
1
1
  import { TempNode } from 'three/webgpu';
2
2
  import { rand, Fn, fract, time, uv, clamp, mix, vec4, nodeProxy } from 'three/tsl';
3
3
 
4
+ /** @module FilmNode **/
5
+
6
+ /**
7
+ * Post processing node for creating a film grain effect.
8
+ *
9
+ * @augments TempNode
10
+ */
4
11
  class FilmNode extends TempNode {
5
12
 
6
13
  static get type() {
@@ -9,17 +16,47 @@ class FilmNode extends TempNode {
9
16
 
10
17
  }
11
18
 
19
+ /**
20
+ * Constructs a new film node.
21
+ *
22
+ * @param {Node} inputNode - The node that represents the input of the effect.
23
+ * @param {Node<float>?} [intensityNode=null] - A node that represents the effect's intensity.
24
+ * @param {Node<vec2>?} [uvNode=null] - A node that allows to pass custom (e.g. animated) uv data.
25
+ */
12
26
  constructor( inputNode, intensityNode = null, uvNode = null ) {
13
27
 
14
28
  super( 'vec4' );
15
29
 
30
+ /**
31
+ * The node that represents the input of the effect.
32
+ *
33
+ * @type {Node}
34
+ */
16
35
  this.inputNode = inputNode;
36
+
37
+ /**
38
+ * A node that represents the effect's intensity.
39
+ *
40
+ * @type {Node<float>}
41
+ */
17
42
  this.intensityNode = intensityNode;
43
+
44
+ /**
45
+ * A node that allows to pass custom (e.g. animated) uv data.
46
+ *
47
+ * @type {Node<vec2>}
48
+ */
18
49
  this.uvNode = uvNode;
19
50
 
20
51
  }
21
52
 
22
- setup() {
53
+ /**
54
+ * This method is used to setup the effect's TSL code.
55
+ *
56
+ * @param {NodeBuilder} builder - The current node builder.
57
+ * @return {ShaderCallNodeInternal}
58
+ */
59
+ setup( /* builder */ ) {
23
60
 
24
61
  const uvNode = this.uvNode || uv();
25
62
 
@@ -50,4 +87,13 @@ class FilmNode extends TempNode {
50
87
 
51
88
  export default FilmNode;
52
89
 
90
+ /**
91
+ * TSL function for creating a film node for post processing.
92
+ *
93
+ * @function
94
+ * @param {Node<vec4>} inputNode - The node that represents the input of the effect.
95
+ * @param {Node<float>?} [intensityNode=null] - A node that represents the effect's intensity.
96
+ * @param {Node<vec2>?} [uvNode=null] - A node that allows to pass custom (e.g. animated) uv data.
97
+ * @returns {FilmNode}
98
+ */
53
99
  export const film = /*@__PURE__*/ nodeProxy( FilmNode );