super-three 0.170.1 → 0.172.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 (413) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +157 -49
  3. package/build/three.core.js +104 -42
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +53 -8
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +10 -5
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +21191 -1008
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +21189 -1008
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -5
  14. package/examples/jsm/animation/CCDIKSolver.js +3 -2
  15. package/examples/jsm/controls/ArcballControls.js +28 -19
  16. package/examples/jsm/controls/OrbitControls.js +5 -4
  17. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  18. package/examples/jsm/curves/NURBSCurve.js +1 -1
  19. package/examples/jsm/curves/NURBSUtils.js +3 -0
  20. package/examples/jsm/effects/OutlineEffect.js +1 -1
  21. package/examples/jsm/exporters/GLTFExporter.js +11 -7
  22. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  23. package/examples/jsm/exporters/PLYExporter.js +2 -2
  24. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  25. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  26. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  27. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  28. package/examples/jsm/loaders/3MFLoader.js +6 -3
  29. package/examples/jsm/loaders/BVHLoader.js +1 -1
  30. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  31. package/examples/jsm/loaders/DDSLoader.js +42 -0
  32. package/examples/jsm/loaders/GCodeLoader.js +1 -1
  33. package/examples/jsm/loaders/GLTFLoader.js +22 -2
  34. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  35. package/examples/jsm/loaders/KTXLoader.js +4 -4
  36. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  37. package/examples/jsm/loaders/LottieLoader.js +1 -1
  38. package/examples/jsm/loaders/MTLLoader.js +1 -0
  39. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  40. package/examples/jsm/loaders/PLYLoader.js +7 -7
  41. package/examples/jsm/loaders/PVRLoader.js +1 -1
  42. package/examples/jsm/loaders/SVGLoader.js +2 -2
  43. package/examples/jsm/loaders/TDSLoader.js +1 -1
  44. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  45. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  46. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  47. package/examples/jsm/math/ConvexHull.js +1 -1
  48. package/examples/jsm/math/OBB.js +17 -0
  49. package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
  50. package/examples/jsm/misc/Volume.js +20 -12
  51. package/examples/jsm/misc/VolumeSlice.js +2 -2
  52. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  53. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  54. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  55. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  56. package/examples/jsm/objects/Sky.js +2 -2
  57. package/examples/jsm/objects/SkyMesh.js +3 -3
  58. package/examples/jsm/objects/Water2.js +1 -1
  59. package/examples/jsm/objects/Water2Mesh.js +2 -2
  60. package/examples/jsm/objects/WaterMesh.js +4 -4
  61. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  62. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  63. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  64. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  65. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  66. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  67. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  68. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  69. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  70. package/examples/jsm/shaders/BokehShader2.js +1 -1
  71. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  72. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  73. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  74. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  75. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  76. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  77. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  78. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  79. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  80. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  81. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  82. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  83. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  84. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  85. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  86. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  87. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  88. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  89. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  90. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  91. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  92. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  93. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  94. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  95. package/examples/jsm/tsl/display/Sepia.js +9 -0
  96. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  97. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  98. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  99. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  100. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  101. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  102. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  103. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  104. package/examples/jsm/utils/CameraUtils.js +4 -1
  105. package/examples/jsm/utils/GeometryUtils.js +22 -19
  106. package/examples/jsm/utils/SceneUtils.js +2 -2
  107. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  108. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  109. package/package.json +8 -3
  110. package/src/Three.Core.js +2 -0
  111. package/src/Three.Legacy.js +0 -21
  112. package/src/Three.TSL.js +9 -4
  113. package/src/Three.WebGPU.Nodes.js +2 -2
  114. package/src/Three.WebGPU.js +2 -2
  115. package/src/animation/PropertyBinding.js +2 -2
  116. package/src/cameras/PerspectiveCamera.js +18 -2
  117. package/src/constants.js +1 -1
  118. package/src/core/RenderTarget.js +18 -0
  119. package/src/core/RenderTarget3D.js +22 -0
  120. package/src/core/RenderTargetArray.js +22 -0
  121. package/src/extras/Earcut.js +1 -1
  122. package/src/extras/PMREMGenerator.js +20 -0
  123. package/src/extras/TextureUtils.js +6 -0
  124. package/src/helpers/CameraHelper.js +16 -13
  125. package/src/loaders/nodes/NodeLoader.js +59 -0
  126. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  127. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  128. package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
  129. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  130. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  131. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  132. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  133. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  134. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  135. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  136. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  137. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  138. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  139. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  140. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  141. package/src/materials/nodes/NodeMaterial.js +474 -21
  142. package/src/materials/nodes/PointsNodeMaterial.js +22 -13
  143. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  144. package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
  145. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  146. package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
  147. package/src/nodes/Nodes.js +1 -6
  148. package/src/nodes/TSL.js +2 -3
  149. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  150. package/src/nodes/accessors/Arrays.js +24 -5
  151. package/src/nodes/accessors/BatchNode.js +39 -3
  152. package/src/nodes/accessors/Bitangent.js +37 -0
  153. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  154. package/src/nodes/accessors/BufferNode.js +63 -0
  155. package/src/nodes/accessors/BuiltinNode.js +38 -0
  156. package/src/nodes/accessors/Camera.js +49 -0
  157. package/src/nodes/accessors/ClippingNode.js +71 -2
  158. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  159. package/src/nodes/accessors/InstanceNode.js +85 -2
  160. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  161. package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
  162. package/src/nodes/accessors/Lights.js +50 -1
  163. package/src/nodes/accessors/MaterialNode.js +302 -8
  164. package/src/nodes/accessors/MaterialProperties.js +7 -0
  165. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  166. package/src/nodes/accessors/ModelNode.js +100 -5
  167. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  168. package/src/nodes/accessors/MorphNode.js +48 -4
  169. package/src/nodes/accessors/Normal.js +59 -3
  170. package/src/nodes/accessors/Object3DNode.js +102 -1
  171. package/src/nodes/accessors/PointUVNode.js +26 -0
  172. package/src/nodes/accessors/Position.js +53 -4
  173. package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
  174. package/src/nodes/accessors/ReferenceNode.js +202 -2
  175. package/src/nodes/accessors/ReflectVector.js +24 -0
  176. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  177. package/src/nodes/accessors/SceneNode.js +54 -0
  178. package/src/nodes/accessors/SkinningNode.js +127 -1
  179. package/src/nodes/accessors/StorageBufferNode.js +168 -4
  180. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  181. package/src/nodes/accessors/Tangent.js +36 -0
  182. package/src/nodes/accessors/Texture3DNode.js +89 -5
  183. package/src/nodes/accessors/TextureBicubic.js +12 -2
  184. package/src/nodes/accessors/TextureNode.js +309 -10
  185. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  186. package/src/nodes/accessors/UV.js +10 -1
  187. package/src/nodes/accessors/UniformArrayNode.js +223 -23
  188. package/src/nodes/accessors/UserDataNode.js +46 -0
  189. package/src/nodes/accessors/VelocityNode.js +82 -0
  190. package/src/nodes/accessors/VertexColorNode.js +39 -2
  191. package/src/nodes/code/CodeNode.js +95 -1
  192. package/src/nodes/code/ExpressionNode.js +28 -0
  193. package/src/nodes/code/FunctionCallNode.js +37 -0
  194. package/src/nodes/code/FunctionNode.js +45 -0
  195. package/src/nodes/code/ScriptableNode.js +223 -1
  196. package/src/nodes/code/ScriptableValueNode.js +85 -1
  197. package/src/nodes/core/AssignNode.js +48 -2
  198. package/src/nodes/core/AttributeNode.js +43 -0
  199. package/src/nodes/core/BypassNode.js +47 -2
  200. package/src/nodes/core/CacheNode.js +53 -2
  201. package/src/nodes/core/ConstNode.js +24 -0
  202. package/src/nodes/core/ContextNode.js +65 -0
  203. package/src/nodes/core/IndexNode.js +68 -7
  204. package/src/nodes/core/InputNode.js +48 -0
  205. package/src/nodes/core/LightingModel.js +60 -0
  206. package/src/nodes/core/MRTNode.js +66 -0
  207. package/src/nodes/core/Node.js +337 -12
  208. package/src/nodes/core/NodeAttribute.js +38 -0
  209. package/src/nodes/core/NodeBuilder.js +945 -15
  210. package/src/nodes/core/NodeCache.js +41 -2
  211. package/src/nodes/core/NodeCode.js +31 -0
  212. package/src/nodes/core/NodeFrame.js +123 -2
  213. package/src/nodes/core/NodeFunction.js +46 -0
  214. package/src/nodes/core/NodeFunctionInput.js +44 -0
  215. package/src/nodes/core/NodeParser.js +11 -0
  216. package/src/nodes/core/NodeUniform.js +52 -0
  217. package/src/nodes/core/NodeUtils.js +141 -0
  218. package/src/nodes/core/NodeVar.js +30 -0
  219. package/src/nodes/core/NodeVarying.js +28 -0
  220. package/src/nodes/core/OutputStructNode.js +33 -2
  221. package/src/nodes/core/ParameterNode.js +28 -0
  222. package/src/nodes/core/PropertyNode.js +232 -0
  223. package/src/nodes/core/StackNode.js +78 -0
  224. package/src/nodes/core/StructTypeNode.js +39 -1
  225. package/src/nodes/core/TempNode.js +30 -4
  226. package/src/nodes/core/UniformGroupNode.js +82 -7
  227. package/src/nodes/core/UniformNode.js +66 -0
  228. package/src/nodes/core/VarNode.js +52 -0
  229. package/src/nodes/core/VaryingNode.js +83 -2
  230. package/src/nodes/core/constants.js +36 -0
  231. package/src/nodes/display/BumpMapNode.js +37 -0
  232. package/src/nodes/display/ColorAdjustment.js +53 -11
  233. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  234. package/src/nodes/display/ColorSpaceNode.js +82 -0
  235. package/src/nodes/display/FrontFacingNode.js +29 -0
  236. package/src/nodes/display/NormalMapNode.js +43 -0
  237. package/src/nodes/display/PassNode.js +298 -7
  238. package/src/nodes/display/PosterizeNode.js +33 -0
  239. package/src/nodes/display/RenderOutputNode.js +66 -1
  240. package/src/nodes/display/ScreenNode.js +87 -0
  241. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  242. package/src/nodes/display/ToneMappingNode.js +55 -2
  243. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  244. package/src/nodes/display/ViewportDepthNode.js +122 -8
  245. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  246. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  247. package/src/nodes/display/ViewportTextureNode.js +57 -0
  248. package/src/nodes/fog/Fog.js +93 -0
  249. package/src/nodes/functions/BasicLightingModel.js +24 -0
  250. package/src/nodes/functions/PhongLightingModel.js +34 -2
  251. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  252. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  253. package/src/nodes/functions/ToonLightingModel.js +20 -0
  254. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  255. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  256. package/src/nodes/geometry/RangeNode.js +54 -2
  257. package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
  258. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  259. package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
  260. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  261. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  262. package/src/nodes/lighting/AONode.js +18 -0
  263. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  264. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  265. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  266. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  267. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  268. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  269. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  270. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  271. package/src/nodes/lighting/IrradianceNode.js +17 -0
  272. package/src/nodes/lighting/LightProbeNode.js +20 -0
  273. package/src/nodes/lighting/LightUtils.js +12 -0
  274. package/src/nodes/lighting/LightingContextNode.js +48 -0
  275. package/src/nodes/lighting/LightingNode.js +15 -6
  276. package/src/nodes/lighting/LightsNode.js +132 -1
  277. package/src/nodes/lighting/PointLightNode.js +32 -1
  278. package/src/nodes/lighting/PointShadowNode.js +54 -1
  279. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  280. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  281. package/src/nodes/lighting/ShadowNode.js +240 -34
  282. package/src/nodes/lighting/SpotLightNode.js +43 -0
  283. package/src/nodes/math/ConditionalNode.js +70 -3
  284. package/src/nodes/math/Hash.js +9 -0
  285. package/src/nodes/math/MathNode.js +614 -11
  286. package/src/nodes/math/MathUtils.js +45 -1
  287. package/src/nodes/math/OperatorNode.js +233 -0
  288. package/src/nodes/math/TriNoise3D.js +18 -7
  289. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  290. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  291. package/src/nodes/pmrem/PMREMNode.js +133 -0
  292. package/src/nodes/pmrem/PMREMUtils.js +1 -1
  293. package/src/nodes/procedural/Checker.js +9 -0
  294. package/src/nodes/tsl/TSLBase.js +2 -2
  295. package/src/nodes/utils/ArrayElementNode.js +38 -2
  296. package/src/nodes/utils/ConvertNode.js +31 -0
  297. package/src/nodes/utils/CubeMapNode.js +78 -0
  298. package/src/nodes/utils/Discard.js +16 -0
  299. package/src/nodes/utils/EquirectUVNode.js +31 -1
  300. package/src/nodes/utils/FlipNode.js +38 -0
  301. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  302. package/src/nodes/utils/JoinNode.js +25 -0
  303. package/src/nodes/utils/LoopNode.js +74 -1
  304. package/src/nodes/utils/MatcapUVNode.js +17 -0
  305. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  306. package/src/nodes/utils/Oscillators.js +33 -0
  307. package/src/nodes/utils/Packing.js +17 -0
  308. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  309. package/src/nodes/utils/RTTNode.js +123 -2
  310. package/src/nodes/utils/ReflectorNode.js +174 -4
  311. package/src/nodes/utils/RemapNode.js +79 -0
  312. package/src/nodes/utils/RotateNode.js +41 -0
  313. package/src/nodes/utils/SetNode.js +44 -1
  314. package/src/nodes/utils/SplitNode.js +55 -3
  315. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  316. package/src/nodes/utils/SpriteUtils.js +17 -0
  317. package/src/nodes/utils/StorageArrayElementNode.js +40 -0
  318. package/src/nodes/utils/Timer.js +19 -0
  319. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  320. package/src/nodes/utils/UVUtils.js +20 -0
  321. package/src/nodes/utils/ViewportUtils.js +13 -0
  322. package/src/objects/BatchedMesh.js +1 -2
  323. package/src/objects/ClippingGroup.js +49 -0
  324. package/src/renderers/WebGLRenderer.js +23 -4
  325. package/src/renderers/common/Animation.js +63 -0
  326. package/src/renderers/common/Attributes.js +36 -0
  327. package/src/renderers/common/Backend.js +467 -52
  328. package/src/renderers/common/Background.js +34 -1
  329. package/src/renderers/common/BindGroup.js +43 -0
  330. package/src/renderers/common/Binding.js +35 -0
  331. package/src/renderers/common/Bindings.js +93 -1
  332. package/src/renderers/common/Buffer.js +49 -0
  333. package/src/renderers/common/BufferUtils.js +27 -0
  334. package/src/renderers/common/BundleGroup.js +57 -0
  335. package/src/renderers/common/ChainMap.js +38 -1
  336. package/src/renderers/common/ClippingContext.js +107 -14
  337. package/src/renderers/common/Color4.js +36 -0
  338. package/src/renderers/common/ComputePipeline.js +24 -0
  339. package/src/renderers/common/CubeRenderTarget.js +13 -0
  340. package/src/renderers/common/DataMap.js +37 -1
  341. package/src/renderers/common/Geometries.js +98 -0
  342. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  343. package/src/renderers/common/Info.js +87 -0
  344. package/src/renderers/common/Lighting.js +26 -0
  345. package/src/renderers/common/Pipeline.js +22 -0
  346. package/src/renderers/common/Pipelines.js +148 -5
  347. package/src/renderers/common/PostProcessing.js +75 -3
  348. package/src/renderers/common/ProgrammableStage.js +60 -2
  349. package/src/renderers/common/QuadMesh.js +54 -5
  350. package/src/renderers/common/RenderBundle.js +14 -8
  351. package/src/renderers/common/RenderBundles.js +33 -10
  352. package/src/renderers/common/RenderContext.js +169 -4
  353. package/src/renderers/common/RenderContexts.js +42 -2
  354. package/src/renderers/common/RenderList.js +178 -0
  355. package/src/renderers/common/RenderLists.js +31 -0
  356. package/src/renderers/common/RenderObject.js +328 -4
  357. package/src/renderers/common/RenderObjects.js +101 -7
  358. package/src/renderers/common/RenderPipeline.js +24 -0
  359. package/src/renderers/common/Renderer.js +1096 -31
  360. package/src/renderers/common/RendererUtils.js +193 -0
  361. package/src/renderers/common/SampledTexture.js +121 -0
  362. package/src/renderers/common/Sampler.js +30 -0
  363. package/src/renderers/common/StorageBuffer.js +24 -0
  364. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  365. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  366. package/src/renderers/common/StorageTexture.js +38 -0
  367. package/src/renderers/common/Textures.js +83 -0
  368. package/src/renderers/common/Uniform.js +188 -2
  369. package/src/renderers/common/UniformBuffer.js +19 -0
  370. package/src/renderers/common/UniformsGroup.js +139 -2
  371. package/src/renderers/common/extras/PMREMGenerator.js +24 -3
  372. package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
  373. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  374. package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
  375. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  376. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  377. package/src/renderers/common/nodes/NodeUniform.js +189 -0
  378. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  379. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  380. package/src/renderers/common/nodes/Nodes.js +327 -60
  381. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  382. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  383. package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
  384. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
  385. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
  386. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
  387. package/src/renderers/webgpu/WebGPUBackend.js +480 -49
  388. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
  389. package/src/renderers/webgpu/WebGPURenderer.js +35 -0
  390. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  391. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  392. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
  393. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  394. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  395. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
  396. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
  397. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
  398. package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
  399. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  400. package/src/renderers/webxr/WebXRManager.js +7 -1
  401. package/src/textures/Data3DTexture.js +2 -2
  402. package/src/textures/Texture.js +4 -0
  403. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  404. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  405. package/examples/jsm/exporters/MMDExporter.js +0 -223
  406. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  407. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  408. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  409. package/src/nodes/core/UniformGroup.js +0 -13
  410. package/src/nodes/fog/FogExp2Node.js +0 -35
  411. package/src/nodes/fog/FogNode.js +0 -50
  412. package/src/nodes/fog/FogRangeNode.js +0 -36
  413. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -1,5 +1,7 @@
1
- import { Color, DepthTexture, FloatType, RenderTarget, Vector2, TempNode, QuadMesh, NodeMaterial, PostProcessingUtils, NodeUpdateType } from 'three/webgpu';
2
- import { Loop, int, exp, min, float, mul, uv, vec2, vec3, Fn, textureSize, orthographicDepthToViewZ, screenUV, nodeObject, uniform, vec4, passTexture, texture, perspectiveDepthToViewZ, positionView } from 'three/tsl';
1
+ import { DepthTexture, FloatType, RenderTarget, Vector2, TempNode, QuadMesh, NodeMaterial, RendererUtils, NodeUpdateType } from 'three/webgpu';
2
+ import { Loop, int, exp, min, float, mul, uv, vec2, vec3, Fn, textureSize, orthographicDepthToViewZ, screenUV, nodeObject, uniform, vec4, passTexture, texture, perspectiveDepthToViewZ, positionView, reference } from 'three/tsl';
3
+
4
+ /** @module OutlineNode **/
3
5
 
4
6
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
5
7
  const _size = /*@__PURE__*/ new Vector2();
@@ -8,6 +10,39 @@ const _BLUR_DIRECTION_Y = /*@__PURE__*/ new Vector2( 0.0, 1.0 );
8
10
 
9
11
  let _rendererState;
10
12
 
13
+ /**
14
+ * Post processing node for rendering outlines around selected objects. The node
15
+ * gives you great flexibility in composing the final outline look depending on
16
+ * your requirements.
17
+ * ```js
18
+ * const postProcessing = new THREE.PostProcessing( renderer );
19
+ *
20
+ * const scenePass = pass( scene, camera );
21
+ *
22
+ * // outline parameter
23
+ *
24
+ * const edgeStrength = uniform( 3.0 );
25
+ * const edgeGlow = uniform( 0.0 );
26
+ * const edgeThickness = uniform( 1.0 );
27
+ * const visibleEdgeColor = uniform( new THREE.Color( 0xffffff ) );
28
+ * const hiddenEdgeColor = uniform( new THREE.Color( 0x4e3636 ) );
29
+ *
30
+ * outlinePass = outline( scene, camera, {
31
+ * selectedObjects,
32
+ * edgeGlow,
33
+ * edgeThickness
34
+ * } );
35
+ *
36
+ * // compose custom outline
37
+ *
38
+ * const { visibleEdge, hiddenEdge } = outlinePass;
39
+ * const outlineColor = visibleEdge.mul( visibleEdgeColor ).add( hiddenEdge.mul( hiddenEdgeColor ) ).mul( edgeStrength );
40
+ *
41
+ * postProcessing.outputNode = outlineColor.add( scenePass );
42
+ * ```
43
+ *
44
+ * @augments TempNode
45
+ */
11
46
  class OutlineNode extends TempNode {
12
47
 
13
48
  static get type() {
@@ -16,6 +51,17 @@ class OutlineNode extends TempNode {
16
51
 
17
52
  }
18
53
 
54
+ /**
55
+ * Constructs a new outline node.
56
+ *
57
+ * @param {Scene} scene - A reference to the scene.
58
+ * @param {Camera} camera - The camera the scene is rendered with.
59
+ * @param {Object} params - The configuration parameters.
60
+ * @param {Array<Object3D>} params.selectedObjects - An array of selected objects.
61
+ * @param {Node<float>} [params.edgeThickness=float(1)] - The thickness of the edges.
62
+ * @param {Node<float>} [params.edgeGlow=float(0)] - Can be used for an animated glow/pulse effects.
63
+ * @param {Number} [params.downSampleRatio=2] - The downsample ratio.
64
+ */
19
65
  constructor( scene, camera, params = {} ) {
20
66
 
21
67
  super( 'vec4' );
@@ -27,101 +73,341 @@ class OutlineNode extends TempNode {
27
73
  downSampleRatio = 2
28
74
  } = params;
29
75
 
76
+ /**
77
+ * A reference to the scene.
78
+ *
79
+ * @type {Scene}
80
+ */
30
81
  this.scene = scene;
82
+
83
+ /**
84
+ * The camera the scene is rendered with.
85
+ *
86
+ * @type {Camera}
87
+ */
31
88
  this.camera = camera;
89
+
90
+ /**
91
+ * An array of selected objects.
92
+ *
93
+ * @type {Array<Object3D>}
94
+ */
32
95
  this.selectedObjects = selectedObjects;
96
+
97
+ /**
98
+ * The thickness of the edges.
99
+ *
100
+ * @type {Node<float>}
101
+ */
33
102
  this.edgeThicknessNode = nodeObject( edgeThickness );
103
+
104
+ /**
105
+ * Can be used for an animated glow/pulse effect.
106
+ *
107
+ * @type {Node<float>}
108
+ */
34
109
  this.edgeGlowNode = nodeObject( edgeGlow );
110
+
111
+ /**
112
+ * The downsample ratio.
113
+ *
114
+ * @type {Number}
115
+ * @default 2
116
+ */
35
117
  this.downSampleRatio = downSampleRatio;
36
118
 
119
+ /**
120
+ * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
121
+ * its effect once per frame in `updateBefore()`.
122
+ *
123
+ * @type {String}
124
+ * @default 'frame'
125
+ */
37
126
  this.updateBeforeType = NodeUpdateType.FRAME;
38
127
 
39
128
  // render targets
40
129
 
130
+ /**
131
+ * The render target for the depth pre-pass.
132
+ *
133
+ * @private
134
+ * @type {RenderTarget}
135
+ */
41
136
  this._renderTargetDepthBuffer = new RenderTarget();
42
137
  this._renderTargetDepthBuffer.depthTexture = new DepthTexture();
43
138
  this._renderTargetDepthBuffer.depthTexture.type = FloatType;
44
139
 
140
+ /**
141
+ * The render target for the mask pass.
142
+ *
143
+ * @private
144
+ * @type {RenderTarget}
145
+ */
45
146
  this._renderTargetMaskBuffer = new RenderTarget();
147
+
148
+ /**
149
+ * The render target for the mask downsample.
150
+ *
151
+ * @private
152
+ * @type {RenderTarget}
153
+ */
46
154
  this._renderTargetMaskDownSampleBuffer = new RenderTarget( 1, 1, { depthBuffer: false } );
155
+
156
+ /**
157
+ * The first render target for the edge detection.
158
+ *
159
+ * @private
160
+ * @type {RenderTarget}
161
+ */
47
162
  this._renderTargetEdgeBuffer1 = new RenderTarget( 1, 1, { depthBuffer: false } );
163
+
164
+ /**
165
+ * The second render target for the edge detection.
166
+ *
167
+ * @private
168
+ * @type {RenderTarget}
169
+ */
48
170
  this._renderTargetEdgeBuffer2 = new RenderTarget( 1, 1, { depthBuffer: false } );
171
+
172
+ /**
173
+ * The first render target for the blur pass.
174
+ *
175
+ * @private
176
+ * @type {RenderTarget}
177
+ */
49
178
  this._renderTargetBlurBuffer1 = new RenderTarget( 1, 1, { depthBuffer: false } );
179
+
180
+ /**
181
+ * The second render target for the blur pass.
182
+ *
183
+ * @private
184
+ * @type {RenderTarget}
185
+ */
50
186
  this._renderTargetBlurBuffer2 = new RenderTarget( 1, 1, { depthBuffer: false } );
187
+
188
+ /**
189
+ * The render target for the final composite.
190
+ *
191
+ * @private
192
+ * @type {RenderTarget}
193
+ */
51
194
  this._renderTargetComposite = new RenderTarget( 1, 1, { depthBuffer: false } );
52
195
 
53
196
  // uniforms
54
197
 
55
- this._cameraNear = uniform( camera.near );
56
- this._cameraFar = uniform( camera.far );
198
+ /**
199
+ * Represents the near value of the scene's camera.
200
+ *
201
+ * @private
202
+ * @type {ReferenceNode<float>}
203
+ */
204
+ this._cameraNear = reference( 'near', 'float', camera );
205
+
206
+ /**
207
+ * Represents the far value of the scene's camera.
208
+ *
209
+ * @private
210
+ * @type {ReferenceNode<float>}
211
+ */
212
+ this._cameraFar = reference( 'far', 'float', camera );
213
+
214
+ /**
215
+ * Uniform that represents the blur direction of the pass.
216
+ *
217
+ * @private
218
+ * @type {UniformNode<vec2>}
219
+ */
57
220
  this._blurDirection = uniform( new Vector2() );
58
221
 
222
+ /**
223
+ * Texture node that holds the data from the depth pre-pass.
224
+ *
225
+ * @private
226
+ * @type {TextureNode}
227
+ */
59
228
  this._depthTextureUniform = texture( this._renderTargetDepthBuffer.depthTexture );
229
+
230
+ /**
231
+ * Texture node that holds the data from the mask pass.
232
+ *
233
+ * @private
234
+ * @type {TextureNode}
235
+ */
60
236
  this._maskTextureUniform = texture( this._renderTargetMaskBuffer.texture );
237
+
238
+ /**
239
+ * Texture node that holds the data from the mask downsample pass.
240
+ *
241
+ * @private
242
+ * @type {TextureNode}
243
+ */
61
244
  this._maskTextureDownsSampleUniform = texture( this._renderTargetMaskDownSampleBuffer.texture );
245
+
246
+ /**
247
+ * Texture node that holds the data from the first edge detection pass.
248
+ *
249
+ * @private
250
+ * @type {TextureNode}
251
+ */
62
252
  this._edge1TextureUniform = texture( this._renderTargetEdgeBuffer1.texture );
253
+
254
+ /**
255
+ * Texture node that holds the data from the second edge detection pass.
256
+ *
257
+ * @private
258
+ * @type {TextureNode}
259
+ */
63
260
  this._edge2TextureUniform = texture( this._renderTargetEdgeBuffer2.texture );
261
+
262
+ /**
263
+ * Texture node that holds the current blurred color data.
264
+ *
265
+ * @private
266
+ * @type {TextureNode}
267
+ */
64
268
  this._blurColorTextureUniform = texture( this._renderTargetEdgeBuffer1.texture );
65
269
 
66
270
  // constants
67
271
 
272
+ /**
273
+ * Visible edge color.
274
+ *
275
+ * @private
276
+ * @type {Node<vec3>}
277
+ */
68
278
  this._visibleEdgeColor = vec3( 1, 0, 0 );
279
+
280
+ /**
281
+ * Hidden edge color.
282
+ *
283
+ * @private
284
+ * @type {Node<vec3>}
285
+ */
69
286
  this._hiddenEdgeColor = vec3( 0, 1, 0 );
70
287
 
71
288
  // materials
72
289
 
290
+ /**
291
+ * The material for the depth pre-pass.
292
+ *
293
+ * @private
294
+ * @type {NodeMaterial}
295
+ */
73
296
  this._depthMaterial = new NodeMaterial();
74
297
  this._depthMaterial.fragmentNode = vec4( 0, 0, 0, 1 );
75
298
  this._depthMaterial.name = 'OutlineNode.depth';
76
299
 
300
+ /**
301
+ * The material for preparing the mask.
302
+ *
303
+ * @private
304
+ * @type {NodeMaterial}
305
+ */
77
306
  this._prepareMaskMaterial = new NodeMaterial();
78
307
  this._prepareMaskMaterial.name = 'OutlineNode.prepareMask';
79
308
 
309
+ /**
310
+ * The copy material
311
+ *
312
+ * @private
313
+ * @type {NodeMaterial}
314
+ */
80
315
  this._materialCopy = new NodeMaterial();
81
316
  this._materialCopy.name = 'OutlineNode.copy';
82
317
 
318
+ /**
319
+ * The edge detection material.
320
+ *
321
+ * @private
322
+ * @type {NodeMaterial}
323
+ */
83
324
  this._edgeDetectionMaterial = new NodeMaterial();
84
325
  this._edgeDetectionMaterial.name = 'OutlineNode.edgeDetection';
85
326
 
327
+ /**
328
+ * The material that is used to render in the blur pass.
329
+ *
330
+ * @private
331
+ * @type {NodeMaterial}
332
+ */
86
333
  this._separableBlurMaterial = new NodeMaterial();
87
334
  this._separableBlurMaterial.name = 'OutlineNode.separableBlur';
88
335
 
336
+ /**
337
+ * The material that is used to render in the blur pass.
338
+ *
339
+ * @private
340
+ * @type {NodeMaterial}
341
+ */
89
342
  this._separableBlurMaterial2 = new NodeMaterial();
90
343
  this._separableBlurMaterial2.name = 'OutlineNode.separableBlur2';
91
344
 
345
+ /**
346
+ * The final composite material.
347
+ *
348
+ * @private
349
+ * @type {NodeMaterial}
350
+ */
92
351
  this._compositeMaterial = new NodeMaterial();
93
352
  this._compositeMaterial.name = 'OutlineNode.composite';
94
353
 
95
- //
96
-
354
+ /**
355
+ * A set to cache selected objects in the scene.
356
+ *
357
+ * @private
358
+ * @type {Set<Object3D>}
359
+ */
97
360
  this._selectionCache = new Set();
98
- this._tempPulseColor1 = new Color();
99
- this._tempPulseColor2 = new Color();
100
-
101
- //
102
361
 
362
+ /**
363
+ * The result of the effect is represented as a separate texture node.
364
+ *
365
+ * @private
366
+ * @type {PassTextureNode}
367
+ */
103
368
  this._textureNode = passTexture( this, this._renderTargetComposite.texture );
104
369
 
105
370
  }
106
371
 
372
+ /**
373
+ * A mask value that represents the visible edge.
374
+ *
375
+ * @return {Node<float>} The visible edge.
376
+ */
107
377
  get visibleEdge() {
108
378
 
109
379
  return this.r;
110
380
 
111
381
  }
112
382
 
383
+ /**
384
+ * A mask value that represents the hidden edge.
385
+ *
386
+ * @return {Node<float>} The hidden edge.
387
+ */
113
388
  get hiddenEdge() {
114
389
 
115
390
  return this.g;
116
391
 
117
392
  }
118
393
 
394
+ /**
395
+ * Returns the result of the effect as a texture node.
396
+ *
397
+ * @return {PassTextureNode} A texture node that represents the result of the effect.
398
+ */
119
399
  getTextureNode() {
120
400
 
121
401
  return this._textureNode;
122
402
 
123
403
  }
124
404
 
405
+ /**
406
+ * Sets the size of the effect.
407
+ *
408
+ * @param {Number} width - The width of the effect.
409
+ * @param {Number} height - The height of the effect.
410
+ */
125
411
  setSize( width, height ) {
126
412
 
127
413
  this._renderTargetDepthBuffer.setSize( width, height );
@@ -147,12 +433,17 @@ class OutlineNode extends TempNode {
147
433
 
148
434
  }
149
435
 
436
+ /**
437
+ * This method is used to render the effect once per frame.
438
+ *
439
+ * @param {NodeFrame} frame - The current node frame.
440
+ */
150
441
  updateBefore( frame ) {
151
442
 
152
443
  const { renderer } = frame;
153
444
  const { camera, scene } = this;
154
445
 
155
- _rendererState = PostProcessingUtils.resetRendererAndSceneState( renderer, scene, _rendererState );
446
+ _rendererState = RendererUtils.resetRendererAndSceneState( renderer, scene, _rendererState );
156
447
 
157
448
  //
158
449
 
@@ -255,17 +546,23 @@ class OutlineNode extends TempNode {
255
546
 
256
547
  // restore
257
548
 
258
- PostProcessingUtils.restoreRendererAndSceneState( renderer, scene, _rendererState );
549
+ RendererUtils.restoreRendererAndSceneState( renderer, scene, _rendererState );
259
550
 
260
551
  }
261
552
 
553
+ /**
554
+ * This method is used to setup the effect's TSL code.
555
+ *
556
+ * @param {NodeBuilder} builder - The current node builder.
557
+ * @return {PassTextureNode}
558
+ */
262
559
  setup() {
263
560
 
264
561
  // prepare mask material
265
562
 
266
563
  const prepareMask = () => {
267
564
 
268
- const depth = this._depthTextureUniform.uv( screenUV );
565
+ const depth = this._depthTextureUniform.sample( screenUV );
269
566
 
270
567
  let viewZNode;
271
568
 
@@ -301,10 +598,10 @@ class OutlineNode extends TempNode {
301
598
  const uvOffset = vec4( 1.0, 0.0, 0.0, 1.0 ).mul( vec4( invSize, invSize ) );
302
599
 
303
600
  const uvNode = uv();
304
- const c1 = this._maskTextureDownsSampleUniform.uv( uvNode.add( uvOffset.xy ) ).toVar();
305
- const c2 = this._maskTextureDownsSampleUniform.uv( uvNode.sub( uvOffset.xy ) ).toVar();
306
- const c3 = this._maskTextureDownsSampleUniform.uv( uvNode.add( uvOffset.yw ) ).toVar();
307
- const c4 = this._maskTextureDownsSampleUniform.uv( uvNode.sub( uvOffset.yw ) ).toVar();
601
+ const c1 = this._maskTextureDownsSampleUniform.sample( uvNode.add( uvOffset.xy ) ).toVar();
602
+ const c2 = this._maskTextureDownsSampleUniform.sample( uvNode.sub( uvOffset.xy ) ).toVar();
603
+ const c3 = this._maskTextureDownsSampleUniform.sample( uvNode.add( uvOffset.yw ) ).toVar();
604
+ const c4 = this._maskTextureDownsSampleUniform.sample( uvNode.sub( uvOffset.yw ) ).toVar();
308
605
 
309
606
  const diff1 = mul( c1.r.sub( c2.r ), 0.5 );
310
607
  const diff2 = mul( c3.r.sub( c4.r ), 0.5 );
@@ -320,7 +617,7 @@ class OutlineNode extends TempNode {
320
617
  this._edgeDetectionMaterial.fragmentNode = edgeDetection();
321
618
  this._edgeDetectionMaterial.needsUpdate = true;
322
619
 
323
- // seperable blur material
620
+ // separable blur material
324
621
 
325
622
  const MAX_RADIUS = 4;
326
623
 
@@ -330,7 +627,7 @@ class OutlineNode extends TempNode {
330
627
 
331
628
  } );
332
629
 
333
- const seperableBlur = Fn( ( [ kernelRadius ] ) => {
630
+ const separableBlur = Fn( ( [ kernelRadius ] ) => {
334
631
 
335
632
  const resolution = textureSize( this._maskTextureDownsSampleUniform );
336
633
  const invSize = vec2( 1 ).div( resolution ).toVar();
@@ -338,7 +635,7 @@ class OutlineNode extends TempNode {
338
635
 
339
636
  const sigma = kernelRadius.div( 2 ).toVar();
340
637
  const weightSum = gaussianPdf( 0, sigma ).toVar();
341
- const diffuseSum = this._blurColorTextureUniform.uv( uvNode ).mul( weightSum ).toVar();
638
+ const diffuseSum = this._blurColorTextureUniform.sample( uvNode ).mul( weightSum ).toVar();
342
639
  const delta = this._blurDirection.mul( invSize ).mul( kernelRadius ).div( MAX_RADIUS ).toVar();
343
640
 
344
641
  const uvOffset = delta.toVar();
@@ -347,8 +644,8 @@ class OutlineNode extends TempNode {
347
644
 
348
645
  const x = kernelRadius.mul( float( i ) ).div( MAX_RADIUS );
349
646
  const w = gaussianPdf( x, sigma );
350
- const sample1 = this._blurColorTextureUniform.uv( uvNode.add( uvOffset ) );
351
- const sample2 = this._blurColorTextureUniform.uv( uvNode.sub( uvOffset ) );
647
+ const sample1 = this._blurColorTextureUniform.sample( uvNode.add( uvOffset ) );
648
+ const sample2 = this._blurColorTextureUniform.sample( uvNode.sub( uvOffset ) );
352
649
 
353
650
  diffuseSum.addAssign( sample1.add( sample2 ).mul( w ) );
354
651
  weightSum.addAssign( w.mul( 2 ) );
@@ -360,10 +657,10 @@ class OutlineNode extends TempNode {
360
657
 
361
658
  } );
362
659
 
363
- this._separableBlurMaterial.fragmentNode = seperableBlur( this.edgeThicknessNode );
660
+ this._separableBlurMaterial.fragmentNode = separableBlur( this.edgeThicknessNode );
364
661
  this._separableBlurMaterial.needsUpdate = true;
365
662
 
366
- this._separableBlurMaterial2.fragmentNode = seperableBlur( MAX_RADIUS );
663
+ this._separableBlurMaterial2.fragmentNode = separableBlur( MAX_RADIUS );
367
664
  this._separableBlurMaterial2.needsUpdate = true;
368
665
 
369
666
  // composite material
@@ -387,6 +684,10 @@ class OutlineNode extends TempNode {
387
684
 
388
685
  }
389
686
 
687
+ /**
688
+ * Frees internal resources. This method should be called
689
+ * when the effect is no longer required.
690
+ */
390
691
  dispose() {
391
692
 
392
693
  this.selectedObjects.length = 0;
@@ -410,8 +711,11 @@ class OutlineNode extends TempNode {
410
711
 
411
712
  }
412
713
 
413
- //
414
-
714
+ /**
715
+ * Updates the selection cache based on the selected objects.
716
+ *
717
+ * @private
718
+ */
415
719
  _updateSelectionCache() {
416
720
 
417
721
  for ( let i = 0; i < this.selectedObjects.length; i ++ ) {
@@ -431,4 +735,17 @@ class OutlineNode extends TempNode {
431
735
 
432
736
  export default OutlineNode;
433
737
 
738
+ /**
739
+ * TSL function for creating an outline effect around selected objects.
740
+ *
741
+ * @function
742
+ * @param {Scene} scene - A reference to the scene.
743
+ * @param {Camera} camera - The camera the scene is rendered with.
744
+ * @param {Object} params - The configuration parameters.
745
+ * @param {Array<Object3D>} params.selectedObjects - An array of selected objects.
746
+ * @param {Node<float>} [params.edgeThickness=float(1)] - The thickness of the edges.
747
+ * @param {Node<float>} [params.edgeGlow=float(0)] - Can be used for animated glow/pulse effects.
748
+ * @param {Number} [params.downSampleRatio=2] - The downsample ratio.
749
+ * @returns {OutlineNode}
750
+ */
434
751
  export const outline = ( scene, camera, params ) => nodeObject( new OutlineNode( scene, camera, params ) );
@@ -2,6 +2,13 @@ import { NodeMaterial } from 'three/webgpu';
2
2
  import { nodeObject, Fn, vec4, uv, If, mod, screenCoordinate } from 'three/tsl';
3
3
  import StereoCompositePassNode from './StereoCompositePassNode.js';
4
4
 
5
+ /** @module ParallaxBarrierPassNode **/
6
+
7
+ /**
8
+ * A render pass node that creates a parallax barrier effect.
9
+ *
10
+ * @augments StereoCompositePassNode
11
+ */
5
12
  class ParallaxBarrierPassNode extends StereoCompositePassNode {
6
13
 
7
14
  static get type() {
@@ -10,14 +17,33 @@ class ParallaxBarrierPassNode extends StereoCompositePassNode {
10
17
 
11
18
  }
12
19
 
20
+ /**
21
+ * Constructs a new parallax barrier 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.isParallaxBarrierPassNode = true;
18
38
 
19
39
  }
20
40
 
41
+ /**
42
+ * This method is used to setup the effect's TSL code.
43
+ *
44
+ * @param {NodeBuilder} builder - The current node builder.
45
+ * @return {PassTextureNode}
46
+ */
21
47
  setup( builder ) {
22
48
 
23
49
  const uvNode = uv();
@@ -28,11 +54,11 @@ class ParallaxBarrierPassNode extends StereoCompositePassNode {
28
54
 
29
55
  If( mod( screenCoordinate.y, 2 ).greaterThan( 1 ), () => {
30
56
 
31
- color.assign( this._mapLeft.uv( uvNode ) );
57
+ color.assign( this._mapLeft.sample( uvNode ) );
32
58
 
33
59
  } ).Else( () => {
34
60
 
35
- color.assign( this._mapRight.uv( uvNode ) );
61
+ color.assign( this._mapRight.sample( uvNode ) );
36
62
 
37
63
  } );
38
64
 
@@ -52,4 +78,12 @@ class ParallaxBarrierPassNode extends StereoCompositePassNode {
52
78
 
53
79
  export default ParallaxBarrierPassNode;
54
80
 
81
+ /**
82
+ * TSL function for creating an parallax barrier pass node.
83
+ *
84
+ * @function
85
+ * @param {Scene} scene - The scene to render.
86
+ * @param {Camera} camera - The camera to render the scene with.
87
+ * @returns {ParallaxBarrierPassNode}
88
+ */
55
89
  export const parallaxBarrierPass = ( scene, camera ) => nodeObject( new ParallaxBarrierPassNode( scene, camera ) );