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,14 +1,36 @@
1
- import { DataTexture, RenderTarget, RepeatWrapping, Vector2, Vector3, TempNode, QuadMesh, NodeMaterial, PostProcessingUtils } from 'three/webgpu';
1
+ import { DataTexture, RenderTarget, RepeatWrapping, Vector2, Vector3, TempNode, QuadMesh, NodeMaterial, RendererUtils } from 'three/webgpu';
2
2
  import { reference, logarithmicDepthToViewZ, viewZToPerspectiveDepth, getNormalFromDepth, getScreenPosition, getViewPosition, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, vec2, vec3, vec4, int, dot, max, pow, abs, If, textureSize, sin, cos, PI, texture, passTexture, mat3, add, normalize, mul, cross, div, mix, sqrt, sub, acos, clamp } from 'three/tsl';
3
3
 
4
+ /** @module GTAONode **/
5
+
4
6
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
5
7
  const _size = /*@__PURE__*/ new Vector2();
6
8
 
7
9
  let _rendererState;
8
10
 
9
11
  /**
10
- * References:
11
- * https://www.activision.com/cdn/research/Practical_Real_Time_Strategies_for_Accurate_Indirect_Occlusion_NEW%20VERSION_COLOR.pdf
12
+ * Post processing node for applying Ground Truth Ambient Occlusion (GTAO) to a scene.
13
+ * ```js
14
+ * const postProcessing = new THREE.PostProcessing( renderer );
15
+ *
16
+ * const scenePass = pass( scene, camera );
17
+ * scenePass.setMRT( mrt( {
18
+ * output: output,
19
+ * normal: normalView
20
+ * } ) );
21
+ *
22
+ * const scenePassColor = scenePass.getTextureNode( 'output' );
23
+ * const scenePassNormal = scenePass.getTextureNode( 'normal' );
24
+ * const scenePassDepth = scenePass.getTextureNode( 'depth' );
25
+ *
26
+ * const aoPass = ao( scenePassDepth, scenePassNormal, camera );
27
+ *
28
+ * postProcessing.outputNod = aoPass.getTextureNode().mul( scenePassColor );
29
+ * ```
30
+ *
31
+ * Reference: {@link https://www.activision.com/cdn/research/Practical_Real_Time_Strategies_for_Accurate_Indirect_Occlusion_NEW%20VERSION_COLOR.pdf}.
32
+ *
33
+ * @augments TempNode
12
34
  */
13
35
  class GTAONode extends TempNode {
14
36
 
@@ -18,55 +40,193 @@ class GTAONode extends TempNode {
18
40
 
19
41
  }
20
42
 
43
+ /**
44
+ * Constructs a new GTAO node.
45
+ *
46
+ * @param {Node<float>} depthNode - A node that represents the scene's depth.
47
+ * @param {Node<vec3>?} normalNode - A node that represents the scene's normals.
48
+ * @param {Camera} camera - The camera the scene is rendered with.
49
+ */
21
50
  constructor( depthNode, normalNode, camera ) {
22
51
 
23
52
  super( 'vec4' );
24
53
 
54
+ /**
55
+ * A node that represents the scene's depth.
56
+ *
57
+ * @type {Node<float>}
58
+ */
25
59
  this.depthNode = depthNode;
60
+
61
+ /**
62
+ * A node that represents the scene's normals. If no normals are passed to the
63
+ * constructor (because MRT is not available), normals can be automatically
64
+ * reconstructed from depth values in the shader.
65
+ *
66
+ * @type {Node<vec3>?}
67
+ */
26
68
  this.normalNode = normalNode;
27
69
 
70
+ /**
71
+ * The resolution scale. By default the effect is rendered in full resolution
72
+ * for best quality but a value of `0.5` should be sufficient for most scenes.
73
+ *
74
+ * @type {Number}
75
+ * @default 1
76
+ */
28
77
  this.resolutionScale = 1;
29
78
 
79
+ /**
80
+ * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
81
+ * its effect once per frame in `updateBefore()`.
82
+ *
83
+ * @type {String}
84
+ * @default 'frame'
85
+ */
30
86
  this.updateBeforeType = NodeUpdateType.FRAME;
31
87
 
32
- // render targets
33
-
88
+ /**
89
+ * The render target the ambient occlusion is rendered into.
90
+ *
91
+ * @private
92
+ * @type {RenderTarget}
93
+ */
34
94
  this._aoRenderTarget = new RenderTarget( 1, 1, { depthBuffer: false } );
35
95
  this._aoRenderTarget.texture.name = 'GTAONode.AO';
36
96
 
37
97
  // uniforms
38
98
 
99
+ /**
100
+ * The radius of the ambient occlusion.
101
+ *
102
+ * @type {UniformNode<float>}
103
+ */
39
104
  this.radius = uniform( 0.25 );
105
+
106
+ /**
107
+ * The resolution of the effect. Can be scaled via
108
+ * `resolutionScale`.
109
+ *
110
+ * @type {UniformNode<vec2>}
111
+ */
40
112
  this.resolution = uniform( new Vector2() );
113
+
114
+ /**
115
+ * The thickness of the ambient occlusion.
116
+ *
117
+ * @type {UniformNode<float>}
118
+ */
41
119
  this.thickness = uniform( 1 );
120
+
121
+ /**
122
+ * Another option to tweak the occlusion. The recommended range is
123
+ * `[1,2]` for attenuating the AO.
124
+ *
125
+ * @type {UniformNode<float>}
126
+ */
42
127
  this.distanceExponent = uniform( 1 );
128
+
129
+ /**
130
+ * The distance fall off value of the ambient occlusion.
131
+ * A lower value leads to a larger AO effect. The value
132
+ * should lie in the range `[0,1]`.
133
+ *
134
+ * @type {UniformNode<float>}
135
+ */
43
136
  this.distanceFallOff = uniform( 1 );
137
+
138
+ /**
139
+ * The scale of the ambient occlusion.
140
+ *
141
+ * @type {UniformNode<float>}
142
+ */
44
143
  this.scale = uniform( 1 );
144
+
145
+ /**
146
+ * How many samples are used to compute the AO.
147
+ * A higher value results in better quality but also
148
+ * in a more expensive runtime behavior.
149
+ *
150
+ * @type {UniformNode<float>}
151
+ */
45
152
  this.samples = uniform( 16 );
46
153
 
154
+ /**
155
+ * The node represents the internal noise texture used by the AO.
156
+ *
157
+ * @private
158
+ * @type {TextureNode}
159
+ */
47
160
  this._noiseNode = texture( generateMagicSquareNoise() );
161
+
162
+ /**
163
+ * Represents the projection matrix of the scene's camera.
164
+ *
165
+ * @private
166
+ * @type {UniformNode<mat4>}
167
+ */
48
168
  this._cameraProjectionMatrix = uniform( camera.projectionMatrix );
169
+
170
+ /**
171
+ * Represents the inverse projection matrix of the scene's camera.
172
+ *
173
+ * @private
174
+ * @type {UniformNode<mat4>}
175
+ */
49
176
  this._cameraProjectionMatrixInverse = uniform( camera.projectionMatrixInverse );
177
+
178
+ /**
179
+ * Represents the near value of the scene's camera.
180
+ *
181
+ * @private
182
+ * @type {ReferenceNode<float>}
183
+ */
50
184
  this._cameraNear = reference( 'near', 'float', camera );
51
- this._cameraFar = reference( 'far', 'float', camera );
52
185
 
53
- // materials
186
+ /**
187
+ * Represents the far value of the scene's camera.
188
+ *
189
+ * @private
190
+ * @type {ReferenceNode<float>}
191
+ */
192
+ this._cameraFar = reference( 'far', 'float', camera );
54
193
 
194
+ /**
195
+ * The material that is used to render the effect.
196
+ *
197
+ * @private
198
+ * @type {NodeMaterial}
199
+ */
55
200
  this._material = new NodeMaterial();
56
201
  this._material.name = 'GTAO';
57
202
 
58
- //
59
-
203
+ /**
204
+ * The result of the effect is represented as a separate texture node.
205
+ *
206
+ * @private
207
+ * @type {PassTextureNode}
208
+ */
60
209
  this._textureNode = passTexture( this, this._aoRenderTarget.texture );
61
210
 
62
211
  }
63
212
 
213
+ /**
214
+ * Returns the result of the effect as a texture node.
215
+ *
216
+ * @return {PassTextureNode} A texture node that represents the result of the effect.
217
+ */
64
218
  getTextureNode() {
65
219
 
66
220
  return this._textureNode;
67
221
 
68
222
  }
69
223
 
224
+ /**
225
+ * Sets the size of the effect.
226
+ *
227
+ * @param {Number} width - The width of the effect.
228
+ * @param {Number} height - The height of the effect.
229
+ */
70
230
  setSize( width, height ) {
71
231
 
72
232
  width = Math.round( this.resolutionScale * width );
@@ -77,11 +237,16 @@ class GTAONode extends TempNode {
77
237
 
78
238
  }
79
239
 
240
+ /**
241
+ * This method is used to render the effect once per frame.
242
+ *
243
+ * @param {NodeFrame} frame - The current node frame.
244
+ */
80
245
  updateBefore( frame ) {
81
246
 
82
247
  const { renderer } = frame;
83
248
 
84
- _rendererState = PostProcessingUtils.resetRendererState( renderer, _rendererState );
249
+ _rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
85
250
 
86
251
  //
87
252
 
@@ -101,17 +266,23 @@ class GTAONode extends TempNode {
101
266
 
102
267
  // restore
103
268
 
104
- PostProcessingUtils.restoreRendererState( renderer, _rendererState );
269
+ RendererUtils.restoreRendererState( renderer, _rendererState );
105
270
 
106
271
  }
107
272
 
273
+ /**
274
+ * This method is used to setup the effect's TSL code.
275
+ *
276
+ * @param {NodeBuilder} builder - The current node builder.
277
+ * @return {PassTextureNode}
278
+ */
108
279
  setup( builder ) {
109
280
 
110
281
  const uvNode = uv();
111
282
 
112
283
  const sampleDepth = ( uv ) => {
113
284
 
114
- const depth = this.depthNode.uv( uv ).r;
285
+ const depth = this.depthNode.sample( uv ).r;
115
286
 
116
287
  if ( builder.renderer.logarithmicDepthBuffer === true ) {
117
288
 
@@ -125,8 +296,8 @@ class GTAONode extends TempNode {
125
296
 
126
297
  };
127
298
 
128
- const sampleNoise = ( uv ) => this._noiseNode.uv( uv );
129
- const sampleNormal = ( uv ) => ( this.normalNode !== null ) ? this.normalNode.uv( uv ).rgb.normalize() : getNormalFromDepth( uv, this.depthNode.value, this._cameraProjectionMatrixInverse );
299
+ const sampleNoise = ( uv ) => this._noiseNode.sample( uv );
300
+ const sampleNormal = ( uv ) => ( this.normalNode !== null ) ? this.normalNode.sample( uv ).rgb.normalize() : getNormalFromDepth( uv, this.depthNode.value, this._cameraProjectionMatrixInverse );
130
301
 
131
302
  const ao = Fn( () => {
132
303
 
@@ -227,6 +398,10 @@ class GTAONode extends TempNode {
227
398
 
228
399
  }
229
400
 
401
+ /**
402
+ * Frees internal resources. This method should be called
403
+ * when the effect is no longer required.
404
+ */
230
405
  dispose() {
231
406
 
232
407
  this._aoRenderTarget.dispose();
@@ -239,6 +414,12 @@ class GTAONode extends TempNode {
239
414
 
240
415
  export default GTAONode;
241
416
 
417
+ /**
418
+ * Generates the AO's noise texture for the given size.
419
+ *
420
+ * @param {Number} [size=5] - The noise size.
421
+ * @return {DataTexture} The generated noise texture.
422
+ */
242
423
  function generateMagicSquareNoise( size = 5 ) {
243
424
 
244
425
  const noiseSize = Math.floor( size ) % 2 === 0 ? Math.floor( size ) + 1 : Math.floor( size );
@@ -271,6 +452,12 @@ function generateMagicSquareNoise( size = 5 ) {
271
452
 
272
453
  }
273
454
 
455
+ /**
456
+ * Computes an array of magic square values required to generate the noise texture.
457
+ *
458
+ * @param {Number} size - The noise size.
459
+ * @return {Array<Number>} The magic square values.
460
+ */
274
461
  function generateMagicSquare( size ) {
275
462
 
276
463
  const noiseSize = Math.floor( size ) % 2 === 0 ? Math.floor( size ) + 1 : Math.floor( size );
@@ -323,4 +510,13 @@ function generateMagicSquare( size ) {
323
510
 
324
511
  }
325
512
 
513
+ /**
514
+ * TSL function for creating a Ground Truth Ambient Occlusion (GTAO) effect.
515
+ *
516
+ * @function
517
+ * @param {Node<float>} depthNode - A node that represents the scene's depth.
518
+ * @param {Node<vec3>?} normalNode - A node that represents the scene's normals.
519
+ * @param {Camera} camera - The camera the scene is rendered with.
520
+ * @returns {GTAONode}
521
+ */
326
522
  export const ao = ( depthNode, normalNode, camera ) => nodeObject( new GTAONode( nodeObject( depthNode ), nodeObject( normalNode ), camera ) );
@@ -1,8 +1,7 @@
1
- import { RenderTarget, Vector2, NodeMaterial, PostProcessingUtils, QuadMesh, TempNode, NodeUpdateType } from 'three/webgpu';
1
+ import { RenderTarget, Vector2, NodeMaterial, RendererUtils, QuadMesh, TempNode, NodeUpdateType } from 'three/webgpu';
2
2
  import { nodeObject, Fn, If, float, uv, uniform, convertToTexture, vec2, vec4, passTexture, mul } from 'three/tsl';
3
3
 
4
- // WebGPU: The use of a single QuadMesh for both gaussian blur passes results in a single RenderObject with a SampledTexture binding that
5
- // alternates between source textures and triggers creation of new BindGroups and BindGroupLayouts every frame.
4
+ /** @module GaussianBlurNode **/
6
5
 
7
6
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
8
7
 
@@ -34,6 +33,11 @@ const unpremult = /*@__PURE__*/ Fn( ( [ color ] ) => {
34
33
  ]
35
34
  } );
36
35
 
36
+ /**
37
+ * Post processing node for creating a gaussian blur effect.
38
+ *
39
+ * @augments TempNode
40
+ */
37
41
  class GaussianBlurNode extends TempNode {
38
42
 
39
43
  static get type() {
@@ -42,33 +46,116 @@ class GaussianBlurNode extends TempNode {
42
46
 
43
47
  }
44
48
 
49
+ /**
50
+ * Constructs a new gaussian blur node.
51
+ *
52
+ * @param {TextureNode} textureNode - The texture node that represents the input of the effect.
53
+ * @param {Node<vec2|float>} directionNode - Defines the direction and radius of the blur.
54
+ * @param {Number} sigma - Controls the kernel of the blur filter. Higher values mean a wider blur radius.
55
+ */
45
56
  constructor( textureNode, directionNode = null, sigma = 2 ) {
46
57
 
47
58
  super( 'vec4' );
48
59
 
60
+ /**
61
+ * The texture node that represents the input of the effect.
62
+ *
63
+ * @type {TextureNode}
64
+ */
49
65
  this.textureNode = textureNode;
66
+
67
+ /**
68
+ * Defines the direction and radius of the blur.
69
+ *
70
+ * @type {Node<vec2|float>}
71
+ */
50
72
  this.directionNode = directionNode;
73
+
74
+ /**
75
+ * Controls the kernel of the blur filter. Higher values mean a wider blur radius.
76
+ *
77
+ * @type {Number}
78
+ */
51
79
  this.sigma = sigma;
52
80
 
81
+ /**
82
+ * A uniform node holding the inverse resolution value.
83
+ *
84
+ * @private
85
+ * @type {UniformNode<vec2>}
86
+ */
53
87
  this._invSize = uniform( new Vector2() );
88
+
89
+ /**
90
+ * Gaussian blur is applied in two passes (horizontal, vertical).
91
+ * This node controls the direction of each pass.
92
+ *
93
+ * @private
94
+ * @type {UniformNode<vec2>}
95
+ */
54
96
  this._passDirection = uniform( new Vector2() );
55
97
 
98
+ /**
99
+ * The render target used for the horizontal pass.
100
+ *
101
+ * @private
102
+ * @type {RenderTarget}
103
+ */
56
104
  this._horizontalRT = new RenderTarget( 1, 1, { depthBuffer: false } );
57
105
  this._horizontalRT.texture.name = 'GaussianBlurNode.horizontal';
106
+
107
+ /**
108
+ * The render target used for the vertical pass.
109
+ *
110
+ * @private
111
+ * @type {RenderTarget}
112
+ */
58
113
  this._verticalRT = new RenderTarget( 1, 1, { depthBuffer: false } );
59
114
  this._verticalRT.texture.name = 'GaussianBlurNode.vertical';
60
115
 
116
+ /**
117
+ * The result of the effect is represented as a separate texture node.
118
+ *
119
+ * @private
120
+ * @type {PassTextureNode}
121
+ */
61
122
  this._textureNode = passTexture( this, this._verticalRT.texture );
62
123
  this._textureNode.uvNode = textureNode.uvNode;
63
124
 
125
+ /**
126
+ * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
127
+ * its effect once per frame in `updateBefore()`.
128
+ *
129
+ * @type {String}
130
+ * @default 'frame'
131
+ */
64
132
  this.updateBeforeType = NodeUpdateType.FRAME;
65
133
 
134
+ /**
135
+ * Controls the resolution of the effect.
136
+ *
137
+ * @type {Vector2}
138
+ * @default (1,1)
139
+ */
66
140
  this.resolution = new Vector2( 1, 1 );
67
141
 
142
+ /**
143
+ * Whether the effect should use premultiplied alpha or not. Set this to `true`
144
+ * if you are going to blur texture input with transparency.
145
+ *
146
+ * @type {Boolean}
147
+ * @default false
148
+ */
68
149
  this.premultipliedAlpha = false;
69
150
 
70
151
  }
71
152
 
153
+ /**
154
+ * Sets the given premultiplied alpha value.
155
+ *
156
+ * @param {Boolean} value - Whether the effect should use premultiplied alpha or not.
157
+ * @return {GaussianBlurNode} height - A reference to this node.
158
+ */
72
159
  setPremultipliedAlpha( value ) {
73
160
 
74
161
  this.premultipliedAlpha = value;
@@ -77,12 +164,23 @@ class GaussianBlurNode extends TempNode {
77
164
 
78
165
  }
79
166
 
167
+ /**
168
+ * Returns the premultiplied alpha value.
169
+ *
170
+ * @return {Boolean} Whether the effect should use premultiplied alpha or not.
171
+ */
80
172
  getPremultipliedAlpha() {
81
173
 
82
174
  return this.premultipliedAlpha;
83
175
 
84
176
  }
85
177
 
178
+ /**
179
+ * Sets the size of the effect.
180
+ *
181
+ * @param {Number} width - The width of the effect.
182
+ * @param {Number} height - The height of the effect.
183
+ */
86
184
  setSize( width, height ) {
87
185
 
88
186
  width = Math.max( Math.round( width * this.resolution.x ), 1 );
@@ -94,11 +192,16 @@ class GaussianBlurNode extends TempNode {
94
192
 
95
193
  }
96
194
 
195
+ /**
196
+ * This method is used to render the effect once per frame.
197
+ *
198
+ * @param {NodeFrame} frame - The current node frame.
199
+ */
97
200
  updateBefore( frame ) {
98
201
 
99
202
  const { renderer } = frame;
100
203
 
101
- _rendererState = PostProcessingUtils.resetRendererState( renderer, _rendererState );
204
+ _rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
102
205
 
103
206
  //
104
207
 
@@ -137,23 +240,34 @@ class GaussianBlurNode extends TempNode {
137
240
 
138
241
  textureNode.value = currentTexture;
139
242
 
140
- PostProcessingUtils.restoreRendererState( renderer, _rendererState );
243
+ RendererUtils.restoreRendererState( renderer, _rendererState );
141
244
 
142
245
  }
143
246
 
247
+ /**
248
+ * Returns the result of the effect as a texture node.
249
+ *
250
+ * @return {PassTextureNode} A texture node that represents the result of the effect.
251
+ */
144
252
  getTextureNode() {
145
253
 
146
254
  return this._textureNode;
147
255
 
148
256
  }
149
257
 
258
+ /**
259
+ * This method is used to setup the effect's TSL code.
260
+ *
261
+ * @param {NodeBuilder} builder - The current node builder.
262
+ * @return {PassTextureNode}
263
+ */
150
264
  setup( builder ) {
151
265
 
152
266
  const textureNode = this.textureNode;
153
267
 
154
268
  //
155
269
 
156
- const uvNode = textureNode.uvNode || uv();
270
+ const uvNode = uv();
157
271
  const directionNode = vec2( this.directionNode || 1 );
158
272
 
159
273
  let sampleTexture, output;
@@ -162,12 +276,12 @@ class GaussianBlurNode extends TempNode {
162
276
 
163
277
  // https://lisyarus.github.io/blog/posts/blur-coefficients-generator.html
164
278
 
165
- sampleTexture = ( uv ) => premult( textureNode.uv( uv ) );
279
+ sampleTexture = ( uv ) => premult( textureNode.sample( uv ) );
166
280
  output = ( color ) => unpremult( color );
167
281
 
168
282
  } else {
169
283
 
170
- sampleTexture = ( uv ) => textureNode.uv( uv );
284
+ sampleTexture = ( uv ) => textureNode.sample( uv );
171
285
  output = ( color ) => color;
172
286
 
173
287
  }
@@ -220,6 +334,10 @@ class GaussianBlurNode extends TempNode {
220
334
 
221
335
  }
222
336
 
337
+ /**
338
+ * Frees internal resources. This method should be called
339
+ * when the effect is no longer required.
340
+ */
223
341
  dispose() {
224
342
 
225
343
  this._horizontalRT.dispose();
@@ -227,6 +345,13 @@ class GaussianBlurNode extends TempNode {
227
345
 
228
346
  }
229
347
 
348
+ /**
349
+ * Computes gaussian coefficients depending on the given kernel radius.
350
+ *
351
+ * @private
352
+ * @param {Number} kernelRadius - The kernel radius.
353
+ * @return {Array<Number>}
354
+ */
230
355
  _getCoefficients( kernelRadius ) {
231
356
 
232
357
  const coefficients = [];
@@ -245,5 +370,24 @@ class GaussianBlurNode extends TempNode {
245
370
 
246
371
  export default GaussianBlurNode;
247
372
 
373
+ /**
374
+ * TSL function for creating a gaussian blur node for post processing.
375
+ *
376
+ * @function
377
+ * @param {Node<vec4>} node - The node that represents the input of the effect.
378
+ * @param {Node<vec2|float>} directionNode - Defines the direction and radius of the blur.
379
+ * @param {Number} sigma - Controls the kernel of the blur filter. Higher values mean a wider blur radius.
380
+ * @returns {GaussianBlurNode}
381
+ */
248
382
  export const gaussianBlur = ( node, directionNode, sigma ) => nodeObject( new GaussianBlurNode( convertToTexture( node ), directionNode, sigma ) );
383
+
384
+ /**
385
+ * TSL function for creating a gaussian blur node for post processing with enabled premultiplied alpha.
386
+ *
387
+ * @function
388
+ * @param {Node<vec4>} node - The node that represents the input of the effect.
389
+ * @param {Node<vec2|float>} directionNode - Defines the direction and radius of the blur.
390
+ * @param {Number} sigma - Controls the kernel of the blur filter. Higher values mean a wider blur radius.
391
+ * @returns {GaussianBlurNode}
392
+ */
249
393
  export const premultipliedGaussianBlur = ( node, directionNode, sigma ) => nodeObject( new GaussianBlurNode( convertToTexture( node ), directionNode, sigma ).setPremultipliedAlpha( true ) );