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
@@ -81,10 +81,10 @@ class OutlinePass extends Pass {
81
81
  const MAX_EDGE_THICKNESS = 4;
82
82
  const MAX_EDGE_GLOW = 4;
83
83
 
84
- this.separableBlurMaterial1 = this.getSeperableBlurMaterial( MAX_EDGE_THICKNESS );
84
+ this.separableBlurMaterial1 = this.getSeparableBlurMaterial( MAX_EDGE_THICKNESS );
85
85
  this.separableBlurMaterial1.uniforms[ 'texSize' ].value.set( resx, resy );
86
86
  this.separableBlurMaterial1.uniforms[ 'kernelRadius' ].value = 1;
87
- this.separableBlurMaterial2 = this.getSeperableBlurMaterial( MAX_EDGE_GLOW );
87
+ this.separableBlurMaterial2 = this.getSeparableBlurMaterial( MAX_EDGE_GLOW );
88
88
  this.separableBlurMaterial2.uniforms[ 'texSize' ].value.set( Math.round( resx / 2 ), Math.round( resy / 2 ) );
89
89
  this.separableBlurMaterial2.uniforms[ 'kernelRadius' ].value = MAX_EDGE_GLOW;
90
90
 
@@ -241,7 +241,7 @@ class OutlinePass extends Pass {
241
241
 
242
242
  } else if ( object.isPoints || object.isLine ) {
243
243
 
244
- // the visibilty of points and lines is always set to false in order to
244
+ // the visibility of points and lines is always set to false in order to
245
245
  // not affect the outline computation
246
246
 
247
247
  if ( bVisible === true ) {
@@ -521,7 +521,7 @@ class OutlinePass extends Pass {
521
521
 
522
522
  }
523
523
 
524
- getSeperableBlurMaterial( maxRadius ) {
524
+ getSeparableBlurMaterial( maxRadius ) {
525
525
 
526
526
  return new ShaderMaterial( {
527
527
 
@@ -8,6 +8,7 @@ import {
8
8
  AgXToneMapping,
9
9
  ACESFilmicToneMapping,
10
10
  NeutralToneMapping,
11
+ CustomToneMapping,
11
12
  SRGBTransfer
12
13
  } from 'three';
13
14
  import { Pass, FullScreenQuad } from './Pass.js';
@@ -63,6 +64,7 @@ class OutputPass extends Pass {
63
64
  else if ( this._toneMapping === ACESFilmicToneMapping ) this.material.defines.ACES_FILMIC_TONE_MAPPING = '';
64
65
  else if ( this._toneMapping === AgXToneMapping ) this.material.defines.AGX_TONE_MAPPING = '';
65
66
  else if ( this._toneMapping === NeutralToneMapping ) this.material.defines.NEUTRAL_TONE_MAPPING = '';
67
+ else if ( this._toneMapping === CustomToneMapping ) this.material.defines.CUSTOM_TONE_MAPPING = '';
66
68
 
67
69
  this.material.needsUpdate = true;
68
70
 
@@ -19,8 +19,7 @@ import {
19
19
  } from 'three';
20
20
  import { Pass, FullScreenQuad } from './Pass.js';
21
21
  import { SAOShader } from '../shaders/SAOShader.js';
22
- import { DepthLimitedBlurShader } from '../shaders/DepthLimitedBlurShader.js';
23
- import { BlurShaderUtils } from '../shaders/DepthLimitedBlurShader.js';
22
+ import { BlurShaderUtils, DepthLimitedBlurShader } from '../shaders/DepthLimitedBlurShader.js';
24
23
  import { CopyShader } from '../shaders/CopyShader.js';
25
24
 
26
25
  /**
@@ -8,9 +8,7 @@ import {
8
8
  WebGLRenderTarget
9
9
  } from 'three';
10
10
  import { Pass, FullScreenQuad } from './Pass.js';
11
- import { SMAAEdgesShader } from '../shaders/SMAAShader.js';
12
- import { SMAAWeightsShader } from '../shaders/SMAAShader.js';
13
- import { SMAABlendShader } from '../shaders/SMAAShader.js';
11
+ import { SMAABlendShader, SMAAEdgesShader, SMAAWeightsShader } from '../shaders/SMAAShader.js';
14
12
 
15
13
  class SMAAPass extends Pass {
16
14
 
@@ -24,9 +24,7 @@ import {
24
24
  } from 'three';
25
25
  import { Pass, FullScreenQuad } from './Pass.js';
26
26
  import { SimplexNoise } from '../math/SimplexNoise.js';
27
- import { SSAOShader } from '../shaders/SSAOShader.js';
28
- import { SSAOBlurShader } from '../shaders/SSAOShader.js';
29
- import { SSAODepthShader } from '../shaders/SSAOShader.js';
27
+ import { SSAOBlurShader, SSAODepthShader, SSAOShader } from '../shaders/SSAOShader.js';
30
28
  import { CopyShader } from '../shaders/CopyShader.js';
31
29
 
32
30
  class SSAOPass extends Pass {
@@ -169,7 +167,7 @@ class SSAOPass extends Pass {
169
167
  this.copyMaterial.dispose();
170
168
  this.depthRenderMaterial.dispose();
171
169
 
172
- // dipsose full screen quad
170
+ // dispose full screen quad
173
171
 
174
172
  this.fsQuad.dispose();
175
173
 
@@ -16,9 +16,7 @@ import {
16
16
  HalfFloatType,
17
17
  } from 'three';
18
18
  import { Pass, FullScreenQuad } from './Pass.js';
19
- import { SSRShader } from '../shaders/SSRShader.js';
20
- import { SSRBlurShader } from '../shaders/SSRShader.js';
21
- import { SSRDepthShader } from '../shaders/SSRShader.js';
19
+ import { SSRBlurShader, SSRDepthShader, SSRShader } from '../shaders/SSRShader.js';
22
20
  import { CopyShader } from '../shaders/CopyShader.js';
23
21
 
24
22
  class SSRPass extends Pass {
@@ -337,7 +335,7 @@ class SSRPass extends Pass {
337
335
  this.copyMaterial.dispose();
338
336
  this.depthRenderMaterial.dispose();
339
337
 
340
- // dipsose full screen quad
338
+ // dispose full screen quad
341
339
 
342
340
  this.fsQuad.dispose();
343
341
 
@@ -92,7 +92,7 @@ class UnrealBloomPass extends Pass {
92
92
 
93
93
  for ( let i = 0; i < this.nMips; i ++ ) {
94
94
 
95
- this.separableBlurMaterials.push( this.getSeperableBlurMaterial( kernelSizeArray[ i ] ) );
95
+ this.separableBlurMaterials.push( this.getSeparableBlurMaterial( kernelSizeArray[ i ] ) );
96
96
 
97
97
  this.separableBlurMaterials[ i ].uniforms[ 'invSize' ].value = new Vector2( 1 / resx, 1 / resy );
98
98
 
@@ -296,7 +296,7 @@ class UnrealBloomPass extends Pass {
296
296
 
297
297
  }
298
298
 
299
- getSeperableBlurMaterial( kernelRadius ) {
299
+ getSeparableBlurMaterial( kernelRadius ) {
300
300
 
301
301
  const coefficients = [];
302
302
 
@@ -8,10 +8,12 @@ import {
8
8
  SRGBColorSpace,
9
9
  Vector3
10
10
  } from 'three';
11
- import { Projector } from '../renderers/Projector.js';
12
- import { RenderableFace } from '../renderers/Projector.js';
13
- import { RenderableLine } from '../renderers/Projector.js';
14
- import { RenderableSprite } from '../renderers/Projector.js';
11
+ import {
12
+ Projector,
13
+ RenderableFace,
14
+ RenderableLine,
15
+ RenderableSprite
16
+ } from '../renderers/Projector.js';
15
17
 
16
18
  class SVGObject extends Object3D {
17
19
 
@@ -104,7 +104,7 @@ const BokehShader = {
104
104
 
105
105
  float vignout = 1.3; // vignetting outer border
106
106
  float vignin = 0.0; // vignetting inner border
107
- float vignfade = 22.0; // f-stops till vignete fades
107
+ float vignfade = 22.0; // f-stops till vignette fades
108
108
 
109
109
  uniform bool shaderFocus;
110
110
  // disable if you use external focalDepth value
@@ -12,7 +12,7 @@ import {
12
12
  * sample count to produce a blur filter with large support.
13
13
  *
14
14
  * My implementation performs 3 passes, similar to the implementation from Sousa. I found
15
- * just 6 samples per pass produced acceptible results. The blur is applied three times,
15
+ * just 6 samples per pass produced acceptable results. The blur is applied three times,
16
16
  * with decreasing filter support. The result is equivalent to a single pass with
17
17
  * 6*6*6 = 216 samples.
18
18
  *
@@ -136,12 +136,12 @@ const GodRaysGenerateShader = {
136
136
  // - see http://code.google.com/p/chromium/issues/detail?id=153105
137
137
 
138
138
  /*
139
- // Unrolling didnt do much on my hardware (ATI Mobility Radeon 3450),
139
+ // Unrolling didn't do much on my hardware (ATI Mobility Radeon 3450),
140
140
  // so i've just left the loop
141
141
 
142
142
  "for ( float i = 0.0; i < TAPS_PER_PASS; i += 1.0 ) {",
143
143
 
144
- // Accumulate samples, making sure we dont walk past the light source.
144
+ // Accumulate samples, making sure we don't walk past the light source.
145
145
 
146
146
  // The check for uv.y < 1 would not be necessary with "border" UV wrap
147
147
  // mode, with a black border color. I don't think this is currently
@@ -28,7 +28,7 @@ const OutputShader = {
28
28
  }`,
29
29
 
30
30
  fragmentShader: /* glsl */`
31
-
31
+
32
32
  precision highp float;
33
33
 
34
34
  uniform sampler2D tDiffuse;
@@ -68,6 +68,10 @@ const OutputShader = {
68
68
 
69
69
  gl_FragColor.rgb = NeutralToneMapping( gl_FragColor.rgb );
70
70
 
71
+ #elif defined( CUSTOM_TONE_MAPPING )
72
+
73
+ gl_FragColor.rgb = CustomToneMapping( gl_FragColor.rgb );
74
+
71
75
  #endif
72
76
 
73
77
  // color space
@@ -79,7 +79,7 @@ const SobelOperatorShader = {
79
79
  Gy[0][1] * tx0y1 + Gy[1][1] * tx1y1 + Gy[2][1] * tx2y1 +
80
80
  Gy[0][2] * tx0y2 + Gy[1][2] * tx1y2 + Gy[2][2] * tx2y2;
81
81
 
82
- // magnitute of the total gradient
82
+ // magnitude of the total gradient
83
83
 
84
84
  float G = sqrt( ( valueGx * valueGx ) + ( valueGy * valueGy ) );
85
85
 
@@ -461,11 +461,11 @@ class GLSLDecoder {
461
461
  const isHex = /^(0x)/.test( firstToken.str );
462
462
 
463
463
  if ( isHex ) type = 'int';
464
- else if ( /u$/.test( firstToken.str ) ) type = 'uint';
464
+ else if ( /u$|U$/.test( firstToken.str ) ) type = 'uint';
465
465
  else if ( /f|e|\./.test( firstToken.str ) ) type = 'float';
466
466
  else type = 'int';
467
467
 
468
- let str = firstToken.str.replace( /u|i$/, '' );
468
+ let str = firstToken.str.replace( /u|U|i$/, '' );
469
469
 
470
470
  if ( isHex === false ) {
471
471
 
@@ -255,6 +255,8 @@ class TSLEncoder {
255
255
 
256
256
  code = node.expression.type + '( ' + node.type + ' ' + node.expression.value + ' )';
257
257
 
258
+ this.addImport( node.expression.type );
259
+
258
260
  } else if ( node.isUnary ) {
259
261
 
260
262
  let type = unaryLib[ node.type ];
@@ -1,11 +1,18 @@
1
- import { RenderTarget, Vector2, QuadMesh, NodeMaterial, PostProcessingUtils, TempNode, NodeUpdateType } from 'three/webgpu';
1
+ import { RenderTarget, Vector2, QuadMesh, NodeMaterial, RendererUtils, TempNode, NodeUpdateType } from 'three/webgpu';
2
2
  import { nodeObject, Fn, float, vec4, uv, texture, passTexture, uniform, sign, max, convertToTexture } from 'three/tsl';
3
3
 
4
+ /** @module AfterImageNode **/
5
+
4
6
  const _size = /*@__PURE__*/ new Vector2();
5
7
  const _quadMeshComp = /*@__PURE__*/ new QuadMesh();
6
8
 
7
9
  let _rendererState;
8
10
 
11
+ /**
12
+ * Post processing node for creating an after image effect.
13
+ *
14
+ * @augments TempNode
15
+ */
9
16
  class AfterImageNode extends TempNode {
10
17
 
11
18
  static get type() {
@@ -14,32 +21,91 @@ class AfterImageNode extends TempNode {
14
21
 
15
22
  }
16
23
 
24
+ /**
25
+ * Constructs a new after image node.
26
+ *
27
+ * @param {TextureNode} textureNode - The texture node that represents the input of the effect.
28
+ * @param {Number} [damp=0.96] - The damping intensity. A higher value means a stronger after image effect.
29
+ */
17
30
  constructor( textureNode, damp = 0.96 ) {
18
31
 
19
32
  super( 'vec4' );
20
33
 
34
+ /**
35
+ * The texture node that represents the input of the effect.
36
+ *
37
+ * @type {TextureNode}
38
+ */
21
39
  this.textureNode = textureNode;
40
+
41
+ /**
42
+ * The texture represents the pervious frame.
43
+ *
44
+ * @type {TextureNode}
45
+ */
22
46
  this.textureNodeOld = texture();
47
+
48
+ /**
49
+ * The damping intensity as a uniform node.
50
+ *
51
+ * @type {UniformNode<float>}
52
+ */
23
53
  this.damp = uniform( damp );
24
54
 
55
+ /**
56
+ * The render target used for compositing the effect.
57
+ *
58
+ * @private
59
+ * @type {RenderTarget}
60
+ */
25
61
  this._compRT = new RenderTarget( 1, 1, { depthBuffer: false } );
26
62
  this._compRT.texture.name = 'AfterImageNode.comp';
27
63
 
64
+ /**
65
+ * The render target that represents the previous frame.
66
+ *
67
+ * @private
68
+ * @type {RenderTarget}
69
+ */
28
70
  this._oldRT = new RenderTarget( 1, 1, { depthBuffer: false } );
29
71
  this._oldRT.texture.name = 'AfterImageNode.old';
30
72
 
73
+ /**
74
+ * The result of the effect is represented as a separate texture node.
75
+ *
76
+ * @private
77
+ * @type {PassTextureNode}
78
+ */
31
79
  this._textureNode = passTexture( this, this._compRT.texture );
32
80
 
81
+ /**
82
+ * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
83
+ * its effect once per frame in `updateBefore()`.
84
+ *
85
+ * @type {String}
86
+ * @default 'frame'
87
+ */
33
88
  this.updateBeforeType = NodeUpdateType.FRAME;
34
89
 
35
90
  }
36
91
 
92
+ /**
93
+ * Returns the result of the effect as a texture node.
94
+ *
95
+ * @return {PassTextureNode} A texture node that represents the result of the effect.
96
+ */
37
97
  getTextureNode() {
38
98
 
39
99
  return this._textureNode;
40
100
 
41
101
  }
42
102
 
103
+ /**
104
+ * Sets the size of the effect.
105
+ *
106
+ * @param {Number} width - The width of the effect.
107
+ * @param {Number} height - The height of the effect.
108
+ */
43
109
  setSize( width, height ) {
44
110
 
45
111
  this._compRT.setSize( width, height );
@@ -47,11 +113,16 @@ class AfterImageNode extends TempNode {
47
113
 
48
114
  }
49
115
 
116
+ /**
117
+ * This method is used to render the effect once per frame.
118
+ *
119
+ * @param {NodeFrame} frame - The current node frame.
120
+ */
50
121
  updateBefore( frame ) {
51
122
 
52
123
  const { renderer } = frame;
53
124
 
54
- _rendererState = PostProcessingUtils.resetRendererState( renderer, _rendererState );
125
+ _rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
55
126
 
56
127
  //
57
128
 
@@ -86,10 +157,16 @@ class AfterImageNode extends TempNode {
86
157
 
87
158
  textureNode.value = currentTexture;
88
159
 
89
- PostProcessingUtils.restoreRendererState( renderer, _rendererState );
160
+ RendererUtils.restoreRendererState( renderer, _rendererState );
90
161
 
91
162
  }
92
163
 
164
+ /**
165
+ * This method is used to setup the effect's TSL code.
166
+ *
167
+ * @param {NodeBuilder} builder - The current node builder.
168
+ * @return {PassTextureNode}
169
+ */
93
170
  setup( builder ) {
94
171
 
95
172
  const textureNode = this.textureNode;
@@ -101,7 +178,7 @@ class AfterImageNode extends TempNode {
101
178
 
102
179
  textureNodeOld.uvNode = uvNode;
103
180
 
104
- const sampleTexture = ( uv ) => textureNode.uv( uv );
181
+ const sampleTexture = ( uv ) => textureNode.sample( uv );
105
182
 
106
183
  const when_gt = Fn( ( [ x_immutable, y_immutable ] ) => {
107
184
 
@@ -141,6 +218,10 @@ class AfterImageNode extends TempNode {
141
218
 
142
219
  }
143
220
 
221
+ /**
222
+ * Frees internal resources. This method should be called
223
+ * when the effect is no longer required.
224
+ */
144
225
  dispose() {
145
226
 
146
227
  this._compRT.dispose();
@@ -150,6 +231,14 @@ class AfterImageNode extends TempNode {
150
231
 
151
232
  }
152
233
 
234
+ /**
235
+ * TSL function for creating an after image node for post processing.
236
+ *
237
+ * @function
238
+ * @param {Node<vec4>} node - The node that represents the input of the effect.
239
+ * @param {Number} [damp=0.96] - The damping intensity. A higher value means a stronger after image effect.
240
+ * @returns {AfterImageNode}
241
+ */
153
242
  export const afterImage = ( node, damp ) => nodeObject( new AfterImageNode( convertToTexture( node ), damp ) );
154
243
 
155
244
  export default AfterImageNode;
@@ -2,6 +2,13 @@ import { Matrix3, NodeMaterial } from 'three/webgpu';
2
2
  import { clamp, nodeObject, Fn, vec4, uv, uniform, max } from 'three/tsl';
3
3
  import StereoCompositePassNode from './StereoCompositePassNode.js';
4
4
 
5
+ /** @module AnaglyphPassNode **/
6
+
7
+ /**
8
+ * A render pass node that creates an anaglyph effect.
9
+ *
10
+ * @augments StereoCompositePassNode
11
+ */
5
12
  class AnaglyphPassNode extends StereoCompositePassNode {
6
13
 
7
14
  static get type() {
@@ -10,20 +17,43 @@ class AnaglyphPassNode extends StereoCompositePassNode {
10
17
 
11
18
  }
12
19
 
20
+ /**
21
+ * Constructs a new anaglyph pass node.
22
+ *
23
+ * @param {Scene} scene - The scene to render.
24
+ * @param {Camera} camera - The camera to render the scene with.
25
+ */
13
26
  constructor( scene, camera ) {
14
27
 
15
28
  super( scene, camera );
16
29
 
30
+ /**
31
+ * This flag can be used for type testing.
32
+ *
33
+ * @type {Boolean}
34
+ * @readonly
35
+ * @default true
36
+ */
17
37
  this.isAnaglyphPassNode = true;
18
38
 
19
39
  // Dubois matrices from https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.7.6968&rep=rep1&type=pdf#page=4
20
40
 
41
+ /**
42
+ * Color matrix node for the left eye.
43
+ *
44
+ * @type {UniformNode<mat3>}
45
+ */
21
46
  this._colorMatrixLeft = uniform( new Matrix3().fromArray( [
22
47
  0.456100, - 0.0400822, - 0.0152161,
23
48
  0.500484, - 0.0378246, - 0.0205971,
24
49
  0.176381, - 0.0157589, - 0.00546856
25
50
  ] ) );
26
51
 
52
+ /**
53
+ * Color matrix node for the right eye.
54
+ *
55
+ * @type {UniformNode<mat3>}
56
+ */
27
57
  this._colorMatrixRight = uniform( new Matrix3().fromArray( [
28
58
  - 0.0434706, 0.378476, - 0.0721527,
29
59
  - 0.0879388, 0.73364, - 0.112961,
@@ -32,14 +62,20 @@ class AnaglyphPassNode extends StereoCompositePassNode {
32
62
 
33
63
  }
34
64
 
65
+ /**
66
+ * This method is used to setup the effect's TSL code.
67
+ *
68
+ * @param {NodeBuilder} builder - The current node builder.
69
+ * @return {PassTextureNode}
70
+ */
35
71
  setup( builder ) {
36
72
 
37
73
  const uvNode = uv();
38
74
 
39
75
  const anaglyph = Fn( () => {
40
76
 
41
- const colorL = this._mapLeft.uv( uvNode );
42
- const colorR = this._mapRight.uv( uvNode );
77
+ const colorL = this._mapLeft.sample( uvNode );
78
+ const colorR = this._mapRight.sample( uvNode );
43
79
 
44
80
  const color = clamp( this._colorMatrixLeft.mul( colorL.rgb ).add( this._colorMatrixRight.mul( colorR.rgb ) ) );
45
81
 
@@ -60,4 +96,12 @@ class AnaglyphPassNode extends StereoCompositePassNode {
60
96
 
61
97
  export default AnaglyphPassNode;
62
98
 
99
+ /**
100
+ * TSL function for creating an anaglyph pass node.
101
+ *
102
+ * @function
103
+ * @param {Scene} scene - The scene to render.
104
+ * @param {Camera} camera - The camera to render the scene with.
105
+ * @returns {AnaglyphPassNode}
106
+ */
63
107
  export const anaglyphPass = ( scene, camera ) => nodeObject( new AnaglyphPassNode( scene, camera ) );