super-three 0.171.0 → 0.173.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +594 -427
  4. package/build/three.core.js +515 -81
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +79 -350
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +20 -7
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +29362 -3427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +29361 -3427
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -5
  15. package/examples/jsm/animation/CCDIKSolver.js +9 -7
  16. package/examples/jsm/capabilities/WebGPU.js +1 -1
  17. package/examples/jsm/controls/ArcballControls.js +48 -37
  18. package/examples/jsm/controls/OrbitControls.js +5 -4
  19. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  20. package/examples/jsm/curves/NURBSCurve.js +1 -1
  21. package/examples/jsm/curves/NURBSUtils.js +3 -0
  22. package/examples/jsm/effects/OutlineEffect.js +1 -1
  23. package/examples/jsm/exporters/GLTFExporter.js +34 -29
  24. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  25. package/examples/jsm/exporters/PLYExporter.js +2 -2
  26. package/examples/jsm/geometries/TextGeometry.js +1 -12
  27. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  28. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  29. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  30. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  31. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  32. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  33. package/examples/jsm/loaders/3MFLoader.js +6 -3
  34. package/examples/jsm/loaders/BVHLoader.js +1 -1
  35. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  36. package/examples/jsm/loaders/DDSLoader.js +42 -0
  37. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  38. package/examples/jsm/loaders/GLTFLoader.js +22 -4
  39. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  40. package/examples/jsm/loaders/KTXLoader.js +4 -4
  41. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  42. package/examples/jsm/loaders/LottieLoader.js +1 -1
  43. package/examples/jsm/loaders/MTLLoader.js +1 -0
  44. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  45. package/examples/jsm/loaders/PLYLoader.js +7 -7
  46. package/examples/jsm/loaders/PVRLoader.js +1 -1
  47. package/examples/jsm/loaders/SVGLoader.js +2 -2
  48. package/examples/jsm/loaders/TDSLoader.js +1 -2
  49. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  50. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  51. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  52. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  53. package/examples/jsm/math/ConvexHull.js +1 -1
  54. package/examples/jsm/math/OBB.js +17 -0
  55. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  56. package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
  57. package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
  58. package/examples/jsm/misc/Volume.js +27 -17
  59. package/examples/jsm/misc/VolumeSlice.js +7 -5
  60. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  61. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  62. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  63. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  64. package/examples/jsm/objects/Sky.js +2 -2
  65. package/examples/jsm/objects/SkyMesh.js +3 -3
  66. package/examples/jsm/objects/Water2.js +1 -1
  67. package/examples/jsm/objects/Water2Mesh.js +2 -2
  68. package/examples/jsm/objects/WaterMesh.js +29 -24
  69. package/examples/jsm/physics/JoltPhysics.js +7 -7
  70. package/examples/jsm/physics/RapierPhysics.js +4 -4
  71. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  72. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  73. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  74. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  75. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  76. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  77. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  78. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  79. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  80. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  81. package/examples/jsm/shaders/BokehShader2.js +1 -1
  82. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  83. package/examples/jsm/shaders/OutputShader.js +5 -1
  84. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  85. package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
  86. package/examples/jsm/transpiler/TSLEncoder.js +2 -0
  87. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  88. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  89. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  90. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  91. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  92. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  93. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  94. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  95. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  96. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  97. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  98. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  99. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  100. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  101. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  102. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  103. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  104. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  105. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  106. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  107. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  108. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  109. package/examples/jsm/tsl/display/Sepia.js +9 -0
  110. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  111. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  112. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  113. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  114. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  115. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  116. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  117. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  118. package/examples/jsm/utils/CameraUtils.js +4 -1
  119. package/examples/jsm/utils/GeometryUtils.js +22 -19
  120. package/examples/jsm/utils/SceneUtils.js +2 -2
  121. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  122. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  123. package/package.json +8 -3
  124. package/src/Three.Core.js +4 -0
  125. package/src/Three.Legacy.js +0 -21
  126. package/src/Three.TSL.js +18 -5
  127. package/src/Three.WebGPU.Nodes.js +2 -2
  128. package/src/Three.WebGPU.js +2 -2
  129. package/src/animation/PropertyBinding.js +2 -2
  130. package/src/cameras/ArrayCamera.js +1 -0
  131. package/src/cameras/PerspectiveCamera.js +18 -2
  132. package/src/constants.js +6 -1
  133. package/src/core/BufferAttribute.js +4 -0
  134. package/src/core/EventDispatcher.js +8 -6
  135. package/src/core/RenderTarget.js +18 -0
  136. package/src/core/RenderTarget3D.js +22 -0
  137. package/src/core/RenderTargetArray.js +22 -0
  138. package/src/extras/Earcut.js +1 -1
  139. package/src/extras/ImageUtils.js +1 -11
  140. package/src/extras/PMREMGenerator.js +20 -0
  141. package/src/extras/TextureUtils.js +6 -0
  142. package/src/helpers/CameraHelper.js +16 -13
  143. package/src/loaders/nodes/NodeLoader.js +59 -0
  144. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  145. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  146. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  147. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  148. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  149. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  150. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  151. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  152. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  153. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  154. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  155. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  156. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  157. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  158. package/src/materials/nodes/NodeMaterial.js +476 -23
  159. package/src/materials/nodes/NodeMaterials.js +0 -1
  160. package/src/materials/nodes/PointsNodeMaterial.js +121 -10
  161. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  162. package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
  163. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  164. package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
  165. package/src/nodes/Nodes.js +5 -6
  166. package/src/nodes/TSL.js +6 -3
  167. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  168. package/src/nodes/accessors/Arrays.js +47 -6
  169. package/src/nodes/accessors/BatchNode.js +42 -6
  170. package/src/nodes/accessors/Bitangent.js +37 -0
  171. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  172. package/src/nodes/accessors/BufferNode.js +63 -0
  173. package/src/nodes/accessors/BuiltinNode.js +38 -0
  174. package/src/nodes/accessors/Camera.js +113 -3
  175. package/src/nodes/accessors/ClippingNode.js +71 -2
  176. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  177. package/src/nodes/accessors/InstanceNode.js +85 -2
  178. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  179. package/src/nodes/accessors/Lights.js +50 -1
  180. package/src/nodes/accessors/MaterialNode.js +306 -12
  181. package/src/nodes/accessors/MaterialProperties.js +7 -0
  182. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  183. package/src/nodes/accessors/ModelNode.js +100 -5
  184. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  185. package/src/nodes/accessors/MorphNode.js +48 -4
  186. package/src/nodes/accessors/Normal.js +65 -5
  187. package/src/nodes/accessors/Object3DNode.js +101 -1
  188. package/src/nodes/accessors/PointUVNode.js +26 -0
  189. package/src/nodes/accessors/Position.js +56 -7
  190. package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
  191. package/src/nodes/accessors/ReferenceNode.js +201 -2
  192. package/src/nodes/accessors/ReflectVector.js +24 -0
  193. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  194. package/src/nodes/accessors/SceneNode.js +54 -0
  195. package/src/nodes/accessors/SkinningNode.js +127 -1
  196. package/src/nodes/accessors/StorageBufferNode.js +209 -8
  197. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  198. package/src/nodes/accessors/Tangent.js +38 -2
  199. package/src/nodes/accessors/Texture3DNode.js +91 -7
  200. package/src/nodes/accessors/TextureBicubic.js +12 -2
  201. package/src/nodes/accessors/TextureNode.js +316 -10
  202. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  203. package/src/nodes/accessors/UV.js +10 -1
  204. package/src/nodes/accessors/UniformArrayNode.js +231 -25
  205. package/src/nodes/accessors/UserDataNode.js +46 -0
  206. package/src/nodes/accessors/VelocityNode.js +80 -0
  207. package/src/nodes/accessors/VertexColorNode.js +39 -2
  208. package/src/nodes/code/CodeNode.js +95 -1
  209. package/src/nodes/code/ExpressionNode.js +28 -0
  210. package/src/nodes/code/FunctionCallNode.js +37 -0
  211. package/src/nodes/code/FunctionNode.js +45 -0
  212. package/src/nodes/code/ScriptableNode.js +223 -1
  213. package/src/nodes/code/ScriptableValueNode.js +85 -1
  214. package/src/nodes/core/ArrayNode.js +125 -0
  215. package/src/nodes/core/AssignNode.js +48 -2
  216. package/src/nodes/core/AttributeNode.js +43 -0
  217. package/src/nodes/core/BypassNode.js +47 -2
  218. package/src/nodes/core/CacheNode.js +53 -2
  219. package/src/nodes/core/ConstNode.js +32 -0
  220. package/src/nodes/core/ContextNode.js +65 -0
  221. package/src/nodes/core/IndexNode.js +68 -7
  222. package/src/nodes/core/InputNode.js +48 -0
  223. package/src/nodes/core/LightingModel.js +60 -0
  224. package/src/nodes/core/MRTNode.js +66 -0
  225. package/src/nodes/core/Node.js +350 -12
  226. package/src/nodes/core/NodeAttribute.js +38 -0
  227. package/src/nodes/core/NodeBuilder.js +1166 -26
  228. package/src/nodes/core/NodeCache.js +41 -2
  229. package/src/nodes/core/NodeCode.js +31 -0
  230. package/src/nodes/core/NodeFrame.js +123 -2
  231. package/src/nodes/core/NodeFunction.js +46 -0
  232. package/src/nodes/core/NodeFunctionInput.js +44 -0
  233. package/src/nodes/core/NodeParser.js +11 -0
  234. package/src/nodes/core/NodeUniform.js +52 -0
  235. package/src/nodes/core/NodeUtils.js +152 -1
  236. package/src/nodes/core/NodeVar.js +47 -1
  237. package/src/nodes/core/NodeVarying.js +28 -0
  238. package/src/nodes/core/OutputStructNode.js +51 -10
  239. package/src/nodes/core/ParameterNode.js +28 -0
  240. package/src/nodes/core/PropertyNode.js +232 -0
  241. package/src/nodes/core/StackNode.js +98 -1
  242. package/src/nodes/core/StructNode.js +121 -0
  243. package/src/nodes/core/StructType.js +13 -0
  244. package/src/nodes/core/StructTypeNode.js +105 -6
  245. package/src/nodes/core/TempNode.js +31 -5
  246. package/src/nodes/core/UniformGroupNode.js +82 -7
  247. package/src/nodes/core/UniformNode.js +66 -0
  248. package/src/nodes/core/VarNode.js +146 -7
  249. package/src/nodes/core/VaryingNode.js +100 -3
  250. package/src/nodes/core/constants.js +36 -0
  251. package/src/nodes/display/BlendModes.js +88 -1
  252. package/src/nodes/display/BumpMapNode.js +37 -0
  253. package/src/nodes/display/ColorAdjustment.js +53 -11
  254. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  255. package/src/nodes/display/ColorSpaceNode.js +82 -0
  256. package/src/nodes/display/FrontFacingNode.js +29 -0
  257. package/src/nodes/display/NormalMapNode.js +43 -0
  258. package/src/nodes/display/PassNode.js +300 -7
  259. package/src/nodes/display/PosterizeNode.js +33 -0
  260. package/src/nodes/display/RenderOutputNode.js +66 -1
  261. package/src/nodes/display/ScreenNode.js +96 -0
  262. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  263. package/src/nodes/display/ToneMappingNode.js +55 -2
  264. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  265. package/src/nodes/display/ViewportDepthNode.js +122 -8
  266. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  267. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  268. package/src/nodes/display/ViewportTextureNode.js +57 -0
  269. package/src/nodes/fog/Fog.js +110 -0
  270. package/src/nodes/functions/BasicLightingModel.js +24 -0
  271. package/src/nodes/functions/PhongLightingModel.js +34 -2
  272. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  273. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  274. package/src/nodes/functions/ToonLightingModel.js +20 -0
  275. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  276. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  277. package/src/nodes/geometry/RangeNode.js +54 -2
  278. package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
  279. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  280. package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
  281. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  282. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  283. package/src/nodes/lighting/AONode.js +18 -0
  284. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  285. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  286. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  287. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  288. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  289. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  290. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  291. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  292. package/src/nodes/lighting/IrradianceNode.js +17 -0
  293. package/src/nodes/lighting/LightProbeNode.js +20 -0
  294. package/src/nodes/lighting/LightUtils.js +12 -0
  295. package/src/nodes/lighting/LightingContextNode.js +48 -0
  296. package/src/nodes/lighting/LightingNode.js +15 -6
  297. package/src/nodes/lighting/LightsNode.js +132 -1
  298. package/src/nodes/lighting/PointLightNode.js +32 -1
  299. package/src/nodes/lighting/PointShadowNode.js +54 -1
  300. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  301. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  302. package/src/nodes/lighting/ShadowNode.js +241 -35
  303. package/src/nodes/lighting/SpotLightNode.js +43 -0
  304. package/src/nodes/math/ConditionalNode.js +78 -4
  305. package/src/nodes/math/Hash.js +9 -0
  306. package/src/nodes/math/MathNode.js +627 -11
  307. package/src/nodes/math/MathUtils.js +45 -1
  308. package/src/nodes/math/OperatorNode.js +329 -18
  309. package/src/nodes/math/TriNoise3D.js +18 -7
  310. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  311. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  312. package/src/nodes/pmrem/PMREMNode.js +133 -0
  313. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  314. package/src/nodes/procedural/Checker.js +9 -0
  315. package/src/nodes/shapes/Shapes.js +33 -0
  316. package/src/nodes/tsl/TSLBase.js +3 -2
  317. package/src/nodes/tsl/TSLCore.js +22 -2
  318. package/src/nodes/utils/ArrayElementNode.js +39 -3
  319. package/src/nodes/utils/ConvertNode.js +31 -0
  320. package/src/nodes/utils/CubeMapNode.js +78 -0
  321. package/src/nodes/utils/Discard.js +16 -0
  322. package/src/nodes/utils/EquirectUVNode.js +31 -1
  323. package/src/nodes/utils/FlipNode.js +38 -0
  324. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  325. package/src/nodes/utils/JoinNode.js +25 -0
  326. package/src/nodes/utils/LoopNode.js +82 -2
  327. package/src/nodes/utils/MatcapUVNode.js +17 -0
  328. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  329. package/src/nodes/utils/MemberNode.js +68 -0
  330. package/src/nodes/utils/Oscillators.js +33 -0
  331. package/src/nodes/utils/Packing.js +17 -0
  332. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  333. package/src/nodes/utils/RTTNode.js +123 -2
  334. package/src/nodes/utils/ReflectorNode.js +174 -4
  335. package/src/nodes/utils/RemapNode.js +79 -0
  336. package/src/nodes/utils/RotateNode.js +41 -0
  337. package/src/nodes/utils/SetNode.js +44 -1
  338. package/src/nodes/utils/SplitNode.js +55 -3
  339. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  340. package/src/nodes/utils/SpriteUtils.js +17 -0
  341. package/src/nodes/utils/StorageArrayElementNode.js +54 -0
  342. package/src/nodes/utils/Timer.js +40 -0
  343. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  344. package/src/nodes/utils/UVUtils.js +20 -0
  345. package/src/nodes/utils/ViewportUtils.js +13 -0
  346. package/src/objects/BatchedMesh.js +2 -3
  347. package/src/objects/ClippingGroup.js +49 -0
  348. package/src/objects/Line.js +6 -6
  349. package/src/renderers/WebGLRenderer.js +30 -4
  350. package/src/renderers/common/Animation.js +85 -0
  351. package/src/renderers/common/Attributes.js +36 -0
  352. package/src/renderers/common/Backend.js +502 -44
  353. package/src/renderers/common/Background.js +48 -1
  354. package/src/renderers/common/BindGroup.js +43 -0
  355. package/src/renderers/common/Binding.js +35 -0
  356. package/src/renderers/common/Bindings.js +93 -1
  357. package/src/renderers/common/Buffer.js +49 -0
  358. package/src/renderers/common/BufferUtils.js +27 -0
  359. package/src/renderers/common/BundleGroup.js +57 -0
  360. package/src/renderers/common/ChainMap.js +45 -6
  361. package/src/renderers/common/ClippingContext.js +108 -15
  362. package/src/renderers/common/Color4.js +40 -0
  363. package/src/renderers/common/ComputePipeline.js +24 -0
  364. package/src/renderers/common/CubeRenderTarget.js +13 -0
  365. package/src/renderers/common/DataMap.js +37 -1
  366. package/src/renderers/common/Geometries.js +91 -14
  367. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  368. package/src/renderers/common/Info.js +78 -35
  369. package/src/renderers/common/Lighting.js +34 -6
  370. package/src/renderers/common/Pipeline.js +22 -0
  371. package/src/renderers/common/Pipelines.js +148 -5
  372. package/src/renderers/common/PostProcessing.js +99 -11
  373. package/src/renderers/common/ProgrammableStage.js +60 -2
  374. package/src/renderers/common/QuadMesh.js +54 -5
  375. package/src/renderers/common/RenderBundle.js +14 -8
  376. package/src/renderers/common/RenderBundles.js +39 -10
  377. package/src/renderers/common/RenderContext.js +201 -2
  378. package/src/renderers/common/RenderContexts.js +59 -6
  379. package/src/renderers/common/RenderList.js +178 -0
  380. package/src/renderers/common/RenderLists.js +40 -3
  381. package/src/renderers/common/RenderObject.js +400 -17
  382. package/src/renderers/common/RenderObjects.js +103 -7
  383. package/src/renderers/common/RenderPipeline.js +24 -0
  384. package/src/renderers/common/Renderer.js +1170 -86
  385. package/src/renderers/common/RendererUtils.js +193 -0
  386. package/src/renderers/common/SampledTexture.js +120 -0
  387. package/src/renderers/common/Sampler.js +30 -0
  388. package/src/renderers/common/StorageBuffer.js +24 -0
  389. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  390. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  391. package/src/renderers/common/StorageTexture.js +38 -0
  392. package/src/renderers/common/Textures.js +97 -7
  393. package/src/renderers/common/TimestampQueryPool.js +39 -0
  394. package/src/renderers/common/Uniform.js +225 -3
  395. package/src/renderers/common/UniformBuffer.js +19 -0
  396. package/src/renderers/common/UniformsGroup.js +141 -2
  397. package/src/renderers/common/XRManager.js +1193 -0
  398. package/src/renderers/common/XRRenderTarget.js +74 -0
  399. package/src/renderers/common/extras/PMREMGenerator.js +76 -10
  400. package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
  401. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  402. package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
  403. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  404. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  405. package/src/renderers/common/nodes/NodeUniform.js +243 -2
  406. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  407. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  408. package/src/renderers/common/nodes/Nodes.js +352 -78
  409. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  410. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  411. package/src/renderers/webgl/WebGLBackground.js +4 -0
  412. package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
  413. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
  414. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
  415. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  416. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  417. package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
  418. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
  419. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
  420. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  421. package/src/renderers/webgpu/WebGPUBackend.js +578 -164
  422. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
  423. package/src/renderers/webgpu/WebGPURenderer.js +36 -0
  424. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  425. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  426. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
  427. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  428. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  429. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
  430. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
  431. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
  432. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
  433. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
  434. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
  435. package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
  436. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  437. package/src/renderers/webxr/WebXRManager.js +19 -2
  438. package/src/textures/Data3DTexture.js +2 -2
  439. package/src/textures/Texture.js +4 -0
  440. package/src/textures/VideoFrameTexture.js +35 -0
  441. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  442. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  443. package/examples/jsm/exporters/MMDExporter.js +0 -223
  444. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
  445. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  446. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  447. package/examples/jsm/objects/InstancedPoints.js +0 -19
  448. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  449. package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
  450. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
  451. package/src/nodes/core/UniformGroup.js +0 -13
  452. package/src/nodes/fog/FogExp2Node.js +0 -35
  453. package/src/nodes/fog/FogNode.js +0 -50
  454. package/src/nodes/fog/FogRangeNode.js +0 -36
  455. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -1,4 +1,4 @@
1
- import { RenderTarget, StereoCamera, HalfFloatType, LinearFilter, NearestFilter, Vector2, PassNode, QuadMesh, PostProcessingUtils } from 'three/webgpu';
1
+ import { RenderTarget, StereoCamera, HalfFloatType, LinearFilter, NearestFilter, Vector2, PassNode, QuadMesh, RendererUtils } from 'three/webgpu';
2
2
  import { texture } from 'three/tsl';
3
3
 
4
4
  const _size = /*@__PURE__*/ new Vector2();
@@ -6,6 +6,16 @@ const _quadMesh = /*@__PURE__*/ new QuadMesh();
6
6
 
7
7
  let _rendererState;
8
8
 
9
+ /**
10
+ * A special (abstract) render pass node that renders the scene
11
+ * as a stereoscopic image. Unlike {@link StereoPassNode}, this
12
+ * node merges the image for the left and right eye
13
+ * into a single one. That is required for effects like
14
+ * anaglyph or parallax barrier.
15
+ *
16
+ * @abstract
17
+ * @augments PassNode
18
+ */
9
19
  class StereoCompositePassNode extends PassNode {
10
20
 
11
21
  static get type() {
@@ -14,25 +24,76 @@ class StereoCompositePassNode extends PassNode {
14
24
 
15
25
  }
16
26
 
27
+ /**
28
+ * Constructs a new stereo composite pass node.
29
+ *
30
+ * @param {Scene} scene - The scene to render.
31
+ * @param {Camera} camera - The camera to render the scene with.
32
+ */
17
33
  constructor( scene, camera ) {
18
34
 
19
35
  super( PassNode.COLOR, scene, camera );
20
36
 
37
+ /**
38
+ * This flag can be used for type testing.
39
+ *
40
+ * @type {Boolean}
41
+ * @readonly
42
+ * @default true
43
+ */
21
44
  this.isStereoCompositePassNode = true;
22
45
 
46
+ /**
47
+ * The internal stereo camera that is used to render the scene.
48
+ *
49
+ * @type {StereoCamera}
50
+ */
23
51
  this.stereo = new StereoCamera();
24
52
  const _params = { minFilter: LinearFilter, magFilter: NearestFilter, type: HalfFloatType };
25
53
 
54
+ /**
55
+ * The render target for rendering the left eye's view.
56
+ *
57
+ * @type {RenderTarget}
58
+ */
26
59
  this._renderTargetL = new RenderTarget( 1, 1, _params );
60
+
61
+ /**
62
+ * The render target for rendering the right eye's view.
63
+ *
64
+ * @type {RenderTarget}
65
+ */
27
66
  this._renderTargetR = new RenderTarget( 1, 1, _params );
28
67
 
68
+ /**
69
+ * A texture node representing the left's eye view.
70
+ *
71
+ * @type {TextureNode}
72
+ */
29
73
  this._mapLeft = texture( this._renderTargetL.texture );
74
+
75
+ /**
76
+ * A texture node representing the right's eye view.
77
+ *
78
+ * @type {TextureNode}
79
+ */
30
80
  this._mapRight = texture( this._renderTargetR.texture );
31
81
 
82
+ /**
83
+ * The node material that implements the composite. All
84
+ * derived effect passes must provide an instance for rendering.
85
+ *
86
+ * @type {NodeMaterial}
87
+ */
32
88
  this._material = null;
33
89
 
34
90
  }
35
91
 
92
+ /**
93
+ * Updates the internal stereo camera.
94
+ *
95
+ * @param {Number} coordinateSystem - The current coordinate system.
96
+ */
36
97
  updateStereoCamera( coordinateSystem ) {
37
98
 
38
99
  this.stereo.cameraL.coordinateSystem = coordinateSystem;
@@ -41,6 +102,12 @@ class StereoCompositePassNode extends PassNode {
41
102
 
42
103
  }
43
104
 
105
+ /**
106
+ * Sets the size of the pass.
107
+ *
108
+ * @param {Number} width - The width of the pass.
109
+ * @param {Number} height - The height of the pass.
110
+ */
44
111
  setSize( width, height ) {
45
112
 
46
113
  super.setSize( width, height );
@@ -50,12 +117,17 @@ class StereoCompositePassNode extends PassNode {
50
117
 
51
118
  }
52
119
 
120
+ /**
121
+ * This method is used to render the effect once per frame.
122
+ *
123
+ * @param {NodeFrame} frame - The current node frame.
124
+ */
53
125
  updateBefore( frame ) {
54
126
 
55
127
  const { renderer } = frame;
56
128
  const { scene, stereo, renderTarget } = this;
57
129
 
58
- _rendererState = PostProcessingUtils.resetRendererState( renderer, _rendererState );
130
+ _rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
59
131
 
60
132
  //
61
133
 
@@ -84,10 +156,14 @@ class StereoCompositePassNode extends PassNode {
84
156
 
85
157
  // restore
86
158
 
87
- PostProcessingUtils.restoreRendererState( renderer, _rendererState );
159
+ RendererUtils.restoreRendererState( renderer, _rendererState );
88
160
 
89
161
  }
90
162
 
163
+ /**
164
+ * Frees internal resources. This method should be called
165
+ * when the pass is no longer required.
166
+ */
91
167
  dispose() {
92
168
 
93
169
  super.dispose();
@@ -1,10 +1,17 @@
1
- import { StereoCamera, Vector2, PassNode, PostProcessingUtils } from 'three/webgpu';
1
+ import { StereoCamera, Vector2, PassNode, RendererUtils } from 'three/webgpu';
2
2
  import { nodeObject } from 'three/tsl';
3
3
 
4
+ /** @module StereoPassNode **/
5
+
4
6
  const _size = /*@__PURE__*/ new Vector2();
5
7
 
6
8
  let _rendererState;
7
9
 
10
+ /**
11
+ * A special render pass node that renders the scene as a stereoscopic image.
12
+ *
13
+ * @augments PassNode
14
+ */
8
15
  class StereoPassNode extends PassNode {
9
16
 
10
17
  static get type() {
@@ -13,23 +20,46 @@ class StereoPassNode extends PassNode {
13
20
 
14
21
  }
15
22
 
23
+ /**
24
+ * Constructs a new stereo pass node.
25
+ *
26
+ * @param {Scene} scene - The scene to render.
27
+ * @param {Camera} camera - The camera to render the scene with.
28
+ */
16
29
  constructor( scene, camera ) {
17
30
 
18
31
  super( PassNode.COLOR, scene, camera );
19
32
 
33
+ /**
34
+ * This flag can be used for type testing.
35
+ *
36
+ * @type {Boolean}
37
+ * @readonly
38
+ * @default true
39
+ */
20
40
  this.isStereoPassNode = true;
21
41
 
42
+ /**
43
+ * The internal stereo camera that is used to render the scene.
44
+ *
45
+ * @type {StereoCamera}
46
+ */
22
47
  this.stereo = new StereoCamera();
23
48
  this.stereo.aspect = 0.5;
24
49
 
25
50
  }
26
51
 
52
+ /**
53
+ * This method is used to render the stereo effect once per frame.
54
+ *
55
+ * @param {NodeFrame} frame - The current node frame.
56
+ */
27
57
  updateBefore( frame ) {
28
58
 
29
59
  const { renderer } = frame;
30
60
  const { scene, camera, stereo, renderTarget } = this;
31
61
 
32
- _rendererState = PostProcessingUtils.resetRendererState( renderer, _rendererState );
62
+ _rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
33
63
 
34
64
  //
35
65
 
@@ -71,7 +101,7 @@ class StereoPassNode extends PassNode {
71
101
 
72
102
  // restore
73
103
 
74
- PostProcessingUtils.restoreRendererState( renderer, _rendererState );
104
+ RendererUtils.restoreRendererState( renderer, _rendererState );
75
105
 
76
106
  }
77
107
 
@@ -79,4 +109,12 @@ class StereoPassNode extends PassNode {
79
109
 
80
110
  export default StereoPassNode;
81
111
 
112
+ /**
113
+ * TSL function for creating a stereo pass node for stereoscopic rendering.
114
+ *
115
+ * @function
116
+ * @param {Scene} scene - The scene to render.
117
+ * @param {Camera} camera - The camera to render the scene with.
118
+ * @returns {StereoPassNode}
119
+ */
82
120
  export const stereoPass = ( scene, camera ) => nodeObject( new StereoPassNode( scene, camera ) );
@@ -1,19 +1,25 @@
1
- import { Color, Vector2, NearestFilter, Matrix4, PostProcessingUtils, PassNode, QuadMesh, NodeMaterial } from 'three/webgpu';
1
+ import { Color, Vector2, NearestFilter, Matrix4, RendererUtils, PassNode, QuadMesh, NodeMaterial } from 'three/webgpu';
2
2
  import { add, float, If, Loop, int, Fn, min, max, clamp, nodeObject, texture, uniform, uv, vec2, vec4, luminance } from 'three/tsl';
3
3
 
4
+ /** @module TRAAPassNode **/
5
+
4
6
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
5
7
  const _size = /*@__PURE__*/ new Vector2();
6
8
 
7
9
  let _rendererState;
8
10
 
11
+
9
12
  /**
10
- * Temporal Reprojection Anti-Aliasing (TRAA).
11
- *
12
- * References:
13
- * https://alextardif.com/TAA.html
14
- * https://www.elopezr.com/temporal-aa-and-the-quest-for-the-holy-trail/
15
- *
16
- */
13
+ * A special render pass node that renders the scene with TRAA (Temporal Reprojection Anti-Aliasing).
14
+ *
15
+ * Note: The current implementation does not yet support MRT setups.
16
+ *
17
+ * References:
18
+ * - {@link https://alextardif.com/TAA.html}
19
+ * - {@link https://www.elopezr.com/temporal-aa-and-the-quest-for-the-holy-trail/}
20
+ *
21
+ * @augments PassNode
22
+ */
17
23
  class TRAAPassNode extends PassNode {
18
24
 
19
25
  static get type() {
@@ -22,34 +28,100 @@ class TRAAPassNode extends PassNode {
22
28
 
23
29
  }
24
30
 
31
+ /**
32
+ * Constructs a new TRAA pass node.
33
+ *
34
+ * @param {Scene} scene - The scene to render.
35
+ * @param {Camera} camera - The camera to render the scene with.
36
+ */
25
37
  constructor( scene, camera ) {
26
38
 
27
39
  super( PassNode.COLOR, scene, camera );
28
40
 
41
+ /**
42
+ * This flag can be used for type testing.
43
+ *
44
+ * @type {Boolean}
45
+ * @readonly
46
+ * @default true
47
+ */
29
48
  this.isTRAAPassNode = true;
30
49
 
50
+ /**
51
+ * The clear color of the pass.
52
+ *
53
+ * @type {Color}
54
+ * @default 0x000000
55
+ */
31
56
  this.clearColor = new Color( 0x000000 );
57
+
58
+ /**
59
+ * The clear alpha of the pass.
60
+ *
61
+ * @type {Number}
62
+ * @default 0
63
+ */
32
64
  this.clearAlpha = 0;
33
65
 
66
+ /**
67
+ * The jitter index selects the current camera offset value.
68
+ *
69
+ * @private
70
+ * @type {Number}
71
+ * @default 0
72
+ */
34
73
  this._jitterIndex = 0;
35
- this._originalProjectionMatrix = new Matrix4();
36
74
 
37
- // uniforms
75
+ /**
76
+ * Used to save the original/unjittered projection matrix.
77
+ *
78
+ * @private
79
+ * @type {Matrix4}
80
+ */
81
+ this._originalProjectionMatrix = new Matrix4();
38
82
 
83
+ /**
84
+ * A uniform node holding the inverse resolution value.
85
+ *
86
+ * @private
87
+ * @type {UniformNode<vec2>}
88
+ */
39
89
  this._invSize = uniform( new Vector2() );
40
90
 
41
- // render targets
42
-
91
+ /**
92
+ * The render target that holds the current sample.
93
+ *
94
+ * @private
95
+ * @type {RenderTarget?}
96
+ */
43
97
  this._sampleRenderTarget = null;
44
- this._historyRenderTarget = null;
45
98
 
46
- // materials
99
+ /**
100
+ * The render target that represents the history of frame data.
101
+ *
102
+ * @private
103
+ * @type {RenderTarget?}
104
+ */
105
+ this._historyRenderTarget = null;
47
106
 
107
+ /**
108
+ * Material used for the resolve step.
109
+ *
110
+ * @private
111
+ * @type {NodeMaterial}
112
+ */
48
113
  this._resolveMaterial = new NodeMaterial();
49
114
  this._resolveMaterial.name = 'TRAA.Resolve';
50
115
 
51
116
  }
52
117
 
118
+ /**
119
+ * Sets the size of the effect.
120
+ *
121
+ * @param {Number} width - The width of the effect.
122
+ * @param {Number} height - The height of the effect.
123
+ * @return {Boolean} Whether the TRAA needs a restart or not. That is required after a resize since buffer data with different sizes can't be resolved.
124
+ */
53
125
  setSize( width, height ) {
54
126
 
55
127
  super.setSize( width, height );
@@ -71,12 +143,17 @@ class TRAAPassNode extends PassNode {
71
143
 
72
144
  }
73
145
 
146
+ /**
147
+ * This method is used to render the effect once per frame.
148
+ *
149
+ * @param {NodeFrame} frame - The current node frame.
150
+ */
74
151
  updateBefore( frame ) {
75
152
 
76
153
  const { renderer } = frame;
77
154
  const { scene, camera } = this;
78
155
 
79
- _rendererState = PostProcessingUtils.resetRendererAndSceneState( renderer, scene, _rendererState );
156
+ _rendererState = RendererUtils.resetRendererAndSceneState( renderer, scene, _rendererState );
80
157
 
81
158
  //
82
159
 
@@ -214,10 +291,16 @@ class TRAAPassNode extends PassNode {
214
291
 
215
292
  velocityOutput.setProjectionMatrix( null );
216
293
 
217
- PostProcessingUtils.restoreRendererAndSceneState( renderer, scene, _rendererState );
294
+ RendererUtils.restoreRendererAndSceneState( renderer, scene, _rendererState );
218
295
 
219
296
  }
220
297
 
298
+ /**
299
+ * This method is used to setup the effect's render targets and TSL code.
300
+ *
301
+ * @param {NodeBuilder} builder - The current node builder.
302
+ * @return {PassTextureNode}
303
+ */
221
304
  setup( builder ) {
222
305
 
223
306
  if ( this._sampleRenderTarget === null ) {
@@ -260,12 +343,12 @@ class TRAAPassNode extends PassNode {
260
343
  Loop( { start: int( - 1 ), end: int( 1 ), type: 'int', condition: '<=', name: 'y' }, ( { y } ) => {
261
344
 
262
345
  const uvNeighbor = uvNode.add( vec2( float( x ), float( y ) ).mul( this._invSize ) ).toVar();
263
- const colorNeighbor = max( vec4( 0 ), sampleTexture.uv( uvNeighbor ) ).toVar(); // use max() to avoid propagate garbage values
346
+ const colorNeighbor = max( vec4( 0 ), sampleTexture.sample( uvNeighbor ) ).toVar(); // use max() to avoid propagate garbage values
264
347
 
265
348
  minColor.assign( min( minColor, colorNeighbor ) );
266
349
  maxColor.assign( max( maxColor, colorNeighbor ) );
267
350
 
268
- const currentDepth = depthTexture.uv( uvNeighbor ).r.toVar();
351
+ const currentDepth = depthTexture.sample( uvNeighbor ).r.toVar();
269
352
 
270
353
  // find the sample position of the closest depth in the neighborhood (used for velocity)
271
354
 
@@ -282,10 +365,10 @@ class TRAAPassNode extends PassNode {
282
365
 
283
366
  // sampling/reprojection
284
367
 
285
- const offset = velocityTexture.uv( closestDepthPixelPosition ).xy.mul( vec2( 0.5, - 0.5 ) ); // NDC to uv offset
368
+ const offset = velocityTexture.sample( closestDepthPixelPosition ).xy.mul( vec2( 0.5, - 0.5 ) ); // NDC to uv offset
286
369
 
287
- const currentColor = sampleTexture.uv( uvNode );
288
- const historyColor = historyTexture.uv( uvNode.sub( offset ) );
370
+ const currentColor = sampleTexture.sample( uvNode );
371
+ const historyColor = historyTexture.sample( uvNode.sub( offset ) );
289
372
 
290
373
  // clamping
291
374
 
@@ -317,6 +400,10 @@ class TRAAPassNode extends PassNode {
317
400
 
318
401
  }
319
402
 
403
+ /**
404
+ * Frees internal resources. This method should be called
405
+ * when the effect is no longer required.
406
+ */
320
407
  dispose() {
321
408
 
322
409
  super.dispose();
@@ -352,4 +439,12 @@ const _JitterVectors = [
352
439
  [ 2, 5 ], [ 7, 5 ], [ 5, 6 ], [ 3, 7 ]
353
440
  ];
354
441
 
442
+ /**
443
+ * TSL function for creating a TRAA pass node for Temporal Reprojection Anti-Aliasing.
444
+ *
445
+ * @function
446
+ * @param {Scene} scene - The scene to render.
447
+ * @param {Camera} camera - The camera to render the scene with.
448
+ * @returns {TRAAPassNode}
449
+ */
355
450
  export const traaPass = ( scene, camera ) => nodeObject( new TRAAPassNode( scene, camera ) );
@@ -1,6 +1,13 @@
1
1
  import { TempNode } from 'three/webgpu';
2
2
  import { nodeObject, Fn, float, uv, convertToTexture, vec4, If, int, clamp, sub, mix } from 'three/tsl';
3
3
 
4
+ /** @module TransitionNode **/
5
+
6
+ /**
7
+ * Post processing node for creating a transition effect between scenes.
8
+ *
9
+ * @augments TempNode
10
+ */
4
11
  class TransitionNode extends TempNode {
5
12
 
6
13
  static get type() {
@@ -9,24 +16,70 @@ class TransitionNode extends TempNode {
9
16
 
10
17
  }
11
18
 
19
+ /**
20
+ * Constructs a new transition node.
21
+ *
22
+ * @param {TextureNode} textureNodeA - A texture node that represents the beauty pass of the first scene.
23
+ * @param {TextureNode} textureNodeB - A texture node that represents the beauty pass of the second scene.
24
+ * @param {TextureNode} mixTextureNode - A texture node that defines how the transition effect should look like.
25
+ * @param {Node<float>} mixRatioNode - The interpolation factor that controls the mix.
26
+ * @param {Node<float>} thresholdNode - Can be used to tweak the linear interpolation.
27
+ * @param {Node<float>} useTextureNode - Whether `mixTextureNode` should influence the transition or not.
28
+ */
12
29
  constructor( textureNodeA, textureNodeB, mixTextureNode, mixRatioNode, thresholdNode, useTextureNode ) {
13
30
 
14
31
  super( 'vec4' );
15
32
 
16
- // Input textures
17
-
33
+ /**
34
+ * A texture node that represents the beauty pass of the first scene.
35
+ *
36
+ * @type {TextureNode}
37
+ */
18
38
  this.textureNodeA = textureNodeA;
39
+
40
+ /**
41
+ * A texture node that represents the beauty pass of the second scene.
42
+ *
43
+ * @type {TextureNode}
44
+ */
19
45
  this.textureNodeB = textureNodeB;
20
- this.mixTextureNode = mixTextureNode;
21
46
 
22
- // Uniforms
47
+ /**
48
+ * A texture that defines how the transition effect should look like.
49
+ *
50
+ * @type {TextureNode}
51
+ */
52
+ this.mixTextureNode = mixTextureNode;
23
53
 
54
+ /**
55
+ * The interpolation factor that controls the mix.
56
+ *
57
+ * @type {Node<float>}
58
+ */
24
59
  this.mixRatioNode = mixRatioNode;
60
+
61
+ /**
62
+ * Can be used to tweak the linear interpolation.
63
+ *
64
+ * @type {Node<float>}
65
+ */
25
66
  this.thresholdNode = thresholdNode;
67
+
68
+ /**
69
+ * Whether `mixTextureNode` should influence the transition or not.
70
+ *
71
+ * @type {Node<float>}
72
+ */
26
73
  this.useTextureNode = useTextureNode;
27
74
 
28
75
  }
29
76
 
77
+ /**
78
+ * This method is used to setup the effect's TSL code.
79
+ *
80
+ * @param {NodeBuilder} builder - The current node builder.
81
+ * @return {ShaderCallNodeInternal}
82
+ */
30
83
  setup() {
31
84
 
32
85
  const { textureNodeA, textureNodeB, mixTextureNode, mixRatioNode, thresholdNode, useTextureNode } = this;
@@ -34,7 +87,7 @@ class TransitionNode extends TempNode {
34
87
  const sampleTexture = ( textureNode ) => {
35
88
 
36
89
  const uvNodeTexture = textureNode.uvNode || uv();
37
- return textureNode.uv( uvNodeTexture );
90
+ return textureNode.sample( uvNodeTexture );
38
91
 
39
92
  };
40
93
 
@@ -73,4 +126,16 @@ class TransitionNode extends TempNode {
73
126
 
74
127
  export default TransitionNode;
75
128
 
76
- export const transition = ( nodeA, nodeB, mixTexture, mixRatio = 0.0, threshold = 0.1, useTexture = 0 ) => nodeObject( new TransitionNode( convertToTexture( nodeA ), convertToTexture( nodeB ), convertToTexture( mixTexture ), nodeObject( mixRatio ), nodeObject( threshold ), nodeObject( useTexture ) ) );
129
+ /**
130
+ * TSL function for creating a transition node for post processing.
131
+ *
132
+ * @function
133
+ * @param {Node<vec4>} nodeA - A texture node that represents the beauty pass of the first scene.
134
+ * @param {Node<vec4>} nodeB - A texture node that represents the beauty pass of the second scene.
135
+ * @param {Node<vec4>} mixTextureNode - A texture that defines how the transition effect should look like.
136
+ * @param {Node<float> | Number} mixRatio - The interpolation factor that controls the mix.
137
+ * @param {Node<float> | Number} threshold - Can be used to tweak the linear interpolation.
138
+ * @param {Node<float> | Number} useTexture - Whether `mixTextureNode` should influence the transition or not.
139
+ * @returns {TransitionNode}
140
+ */
141
+ export const transition = ( nodeA, nodeB, mixTextureNode, mixRatio, threshold, useTexture ) => nodeObject( new TransitionNode( convertToTexture( nodeA ), convertToTexture( nodeB ), convertToTexture( mixTextureNode ), nodeObject( mixRatio ), nodeObject( threshold ), nodeObject( useTexture ) ) );
@@ -1,10 +1,21 @@
1
1
  import { float, Fn, vec2, uv, sin, rand, degrees, cos, Loop, vec4 } from 'three/tsl';
2
2
 
3
- // https://www.shadertoy.com/view/4lXXWn
4
-
3
+ /** @module HashBlur **/
4
+
5
+ /**
6
+ * Applies a hash blur effect to the given texture node.
7
+ *
8
+ * Reference: {@link https://www.shadertoy.com/view/4lXXWn}.
9
+ *
10
+ * @function
11
+ * @param {Node<vec4>} textureNode - The texture node that should be blurred.
12
+ * @param {Node<float>} [bluramount=float(0.1)] - This node determines the amount of blur.
13
+ * @param {Node<float>} [repeats=float(45)] - This node determines the quality of the blur. A higher value produces a less grainy result but is also more expensive.
14
+ * @return {Node<vec4>} The blurred texture node.
15
+ */
5
16
  export const hashBlur = /*#__PURE__*/ Fn( ( [ textureNode, bluramount = float( 0.1 ), repeats = float( 45 ) ] ) => {
6
17
 
7
- const draw = ( uv ) => textureNode.uv( uv );
18
+ const draw = ( uv ) => textureNode.sample( uv );
8
19
 
9
20
  const targetUV = textureNode.uvNode || uv();
10
21
  const blurred_image = vec4( 0. ).toVar();