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,10 +1,17 @@
1
- import { RenderTarget, Vector2, TempNode, QuadMesh, NodeMaterial, PostProcessingUtils } from 'three/webgpu';
2
- import { nodeObject, Fn, float, NodeUpdateType, uv, passTexture, uniform, convertToTexture, vec2, vec3, Loop, threshold } from 'three/tsl';
1
+ import { RenderTarget, Vector2, TempNode, QuadMesh, NodeMaterial, RendererUtils } from 'three/webgpu';
2
+ import { nodeObject, Fn, float, NodeUpdateType, uv, passTexture, uniform, convertToTexture, vec2, vec3, Loop, mix, luminance } from 'three/tsl';
3
+
4
+ /** @module AnamorphicNode **/
3
5
 
4
6
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
5
7
 
6
8
  let _rendererState;
7
9
 
10
+ /**
11
+ * Post processing node for adding an anamorphic flare effect.
12
+ *
13
+ * @augments TempNode
14
+ */
8
15
  class AnamorphicNode extends TempNode {
9
16
 
10
17
  static get type() {
@@ -13,34 +20,113 @@ class AnamorphicNode extends TempNode {
13
20
 
14
21
  }
15
22
 
23
+ /**
24
+ * Constructs a new anamorphic node.
25
+ *
26
+ * @param {TextureNode} textureNode - The texture node that represents the input of the effect.
27
+ * @param {Node<float>} tresholdNode - The threshold is one option to control the intensity and size of the effect.
28
+ * @param {Node<float>} scaleNode - Defines the vertical scale of the flares.
29
+ * @param {Number} samples - More samples result in larger flares and a more expensive runtime behavior.
30
+ */
16
31
  constructor( textureNode, tresholdNode, scaleNode, samples ) {
17
32
 
18
33
  super( 'vec4' );
19
34
 
35
+ /**
36
+ * The texture node that represents the input of the effect.
37
+ *
38
+ * @type {TextureNode}
39
+ */
20
40
  this.textureNode = textureNode;
41
+
42
+ /**
43
+ * The threshold is one option to control the intensity and size of the effect.
44
+ *
45
+ * @type {Node<float>}
46
+ */
21
47
  this.tresholdNode = tresholdNode;
48
+
49
+ /**
50
+ * Defines the vertical scale of the flares.
51
+ *
52
+ * @type {Node<float>}
53
+ */
22
54
  this.scaleNode = scaleNode;
55
+
56
+ /**
57
+ * The color of the flares.
58
+ *
59
+ * @type {Node<vec3>}
60
+ */
23
61
  this.colorNode = vec3( 0.1, 0.0, 1.0 );
62
+
63
+ /**
64
+ * More samples result in larger flares and a more expensive runtime behavior.
65
+ *
66
+ * @type {Node<float>}
67
+ */
24
68
  this.samples = samples;
69
+
70
+ /**
71
+ * The resolution scale.
72
+ *
73
+ * @type {Vector2}
74
+ */
25
75
  this.resolution = new Vector2( 1, 1 );
26
76
 
77
+ /**
78
+ * The internal render target of the effect.
79
+ *
80
+ * @private
81
+ * @type {RenderTarget}
82
+ */
27
83
  this._renderTarget = new RenderTarget( 1, 1, { depthBuffer: false } );
28
84
  this._renderTarget.texture.name = 'anamorphic';
29
85
 
86
+ /**
87
+ * A uniform node holding the inverse resolution value.
88
+ *
89
+ * @private
90
+ * @type {UniformNode<vec2>}
91
+ */
30
92
  this._invSize = uniform( new Vector2() );
31
93
 
94
+ /**
95
+ * The result of the effect is represented as a separate texture node.
96
+ *
97
+ * @private
98
+ * @type {PassTextureNode}
99
+ */
32
100
  this._textureNode = passTexture( this, this._renderTarget.texture );
33
101
 
102
+ /**
103
+ * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
104
+ * its effect once per frame in `updateBefore()`.
105
+ *
106
+ * @type {String}
107
+ * @default 'frame'
108
+ */
34
109
  this.updateBeforeType = NodeUpdateType.FRAME;
35
110
 
36
111
  }
37
112
 
113
+ /**
114
+ * Returns the result of the effect as a texture node.
115
+ *
116
+ * @return {PassTextureNode} A texture node that represents the result of the effect.
117
+ */
38
118
  getTextureNode() {
39
119
 
40
120
  return this._textureNode;
41
121
 
42
122
  }
43
123
 
124
+ /**
125
+ * Sets the size of the effect.
126
+ *
127
+ * @param {Number} width - The width of the effect.
128
+ * @param {Number} height - The height of the effect.
129
+ */
44
130
  setSize( width, height ) {
45
131
 
46
132
  this._invSize.value.set( 1 / width, 1 / height );
@@ -52,11 +138,16 @@ class AnamorphicNode extends TempNode {
52
138
 
53
139
  }
54
140
 
141
+ /**
142
+ * This method is used to render the effect once per frame.
143
+ *
144
+ * @param {NodeFrame} frame - The current node frame.
145
+ */
55
146
  updateBefore( frame ) {
56
147
 
57
148
  const { renderer } = frame;
58
149
 
59
- _rendererState = PostProcessingUtils.resetRendererState( renderer, _rendererState );
150
+ _rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
60
151
 
61
152
  //
62
153
 
@@ -81,16 +172,24 @@ class AnamorphicNode extends TempNode {
81
172
 
82
173
  textureNode.value = currentTexture;
83
174
 
84
- PostProcessingUtils.restoreRendererState( renderer, _rendererState );
175
+ RendererUtils.restoreRendererState( renderer, _rendererState );
85
176
 
86
177
  }
87
178
 
179
+ /**
180
+ * This method is used to setup the effect's TSL code.
181
+ *
182
+ * @param {NodeBuilder} builder - The current node builder.
183
+ * @return {PassTextureNode}
184
+ */
88
185
  setup( builder ) {
89
186
 
90
187
  const textureNode = this.textureNode;
91
188
  const uvNode = textureNode.uvNode || uv();
92
189
 
93
- const sampleTexture = ( uv ) => textureNode.uv( uv );
190
+ const sampleTexture = ( uv ) => textureNode.sample( uv );
191
+
192
+ const threshold = ( color, threshold ) => mix( vec3( 0.0 ), color, luminance( color ).sub( threshold ).max( 0 ) );
94
193
 
95
194
  const anamorph = Fn( () => {
96
195
 
@@ -132,6 +231,10 @@ class AnamorphicNode extends TempNode {
132
231
 
133
232
  }
134
233
 
234
+ /**
235
+ * Frees internal resources. This method should be called
236
+ * when the effect is no longer required.
237
+ */
135
238
  dispose() {
136
239
 
137
240
  this._renderTarget.dispose();
@@ -140,6 +243,16 @@ class AnamorphicNode extends TempNode {
140
243
 
141
244
  }
142
245
 
246
+ /**
247
+ * TSL function for creating an anamorphic flare effect.
248
+ *
249
+ * @function
250
+ * @param {TextureNode} node - The node that represents the input of the effect.
251
+ * @param {Node<float> | Number} [threshold=0.9] - The threshold is one option to control the intensity and size of the effect.
252
+ * @param {Node<float> | Number} [scale=3] - Defines the vertical scale of the flares.
253
+ * @param {Number} [samples=32] - More samples result in larger flares and a more expensive runtime behavior.
254
+ * @returns {AnamorphicNode}
255
+ */
143
256
  export const anamorphic = ( node, threshold = .9, scale = 3, samples = 32 ) => nodeObject( new AnamorphicNode( convertToTexture( node ), nodeObject( threshold ), nodeObject( scale ), samples ) );
144
257
 
145
258
  export default AnamorphicNode;
@@ -1,5 +1,15 @@
1
1
  import { float, Fn, vec3, vec4, min, max, mix, luminance } from 'three/tsl';
2
2
 
3
+ /** @module BleachBypass **/
4
+
5
+ /**
6
+ * Applies a bleach bypass effect to the given color node.
7
+ *
8
+ * @function
9
+ * @param {Node<vec4>} color - The color node to apply the sepia for.
10
+ * @param {Node<float>} [opacity=1] - Influences how strong the effect is blended with the original color.
11
+ * @return {Node<vec4>} The updated color node.
12
+ */
3
13
  export const bleach = /*@__PURE__*/ Fn( ( [ color, opacity = 1 ] ) => {
4
14
 
5
15
  const base = color;
@@ -1,6 +1,8 @@
1
- import { HalfFloatType, RenderTarget, Vector2, Vector3, TempNode, QuadMesh, NodeMaterial, PostProcessingUtils, NodeUpdateType } from 'three/webgpu';
1
+ import { HalfFloatType, RenderTarget, Vector2, Vector3, TempNode, QuadMesh, NodeMaterial, RendererUtils, NodeUpdateType } from 'three/webgpu';
2
2
  import { nodeObject, Fn, float, uv, passTexture, uniform, Loop, texture, luminance, smoothstep, mix, vec4, uniformArray, add, int } from 'three/tsl';
3
3
 
4
+ /** @module BloomNode **/
5
+
4
6
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
5
7
  const _size = /*@__PURE__*/ new Vector2();
6
8
 
@@ -9,6 +11,38 @@ const _BlurDirectionY = /*@__PURE__*/ new Vector2( 0.0, 1.0 );
9
11
 
10
12
  let _rendererState;
11
13
 
14
+ /**
15
+ * Post processing node for creating a bloom effect.
16
+ * ```js
17
+ * const postProcessing = new THREE.PostProcessing( renderer );
18
+ *
19
+ * const scenePass = pass( scene, camera );
20
+ * const scenePassColor = scenePass.getTextureNode( 'output' );
21
+ *
22
+ * const bloomPass = bloom( scenePassColor );
23
+ *
24
+ * postProcessing.outputNode = scenePassColor.add( bloomPass );
25
+ * ```
26
+ * By default, the node affects the entire image. For a selective bloom,
27
+ * use the `emissive` material property to control which objects should
28
+ * contribute to bloom or not. This can be achieved via MRT.
29
+ * ```js
30
+ * const postProcessing = new THREE.PostProcessing( renderer );
31
+ *
32
+ * const scenePass = pass( scene, camera );
33
+ * scenePass.setMRT( mrt( {
34
+ * output,
35
+ * emissive
36
+ * } ) );
37
+ *
38
+ * const scenePassColor = scenePass.getTextureNode( 'output' );
39
+ * const emissivePass = scenePass.getTextureNode( 'emissive' );
40
+ *
41
+ * const bloomPass = bloom( emissivePass );
42
+ * postProcessing.outputNode = scenePassColor.add( bloomPass );
43
+ * ```
44
+ * @augments TempNode
45
+ */
12
46
  class BloomNode extends TempNode {
13
47
 
14
48
  static get type() {
@@ -17,29 +51,89 @@ class BloomNode extends TempNode {
17
51
 
18
52
  }
19
53
 
54
+ /**
55
+ * Constructs a new bloom node.
56
+ *
57
+ * @param {Node<vec4>} inputNode - The node that represents the input of the effect.
58
+ * @param {Number} [strength=1] - The strength of the bloom.
59
+ * @param {Number} [radius=0] - The radius of the bloom.
60
+ * @param {Number} [threshold=0] - The luminance threshold limits which bright areas contribute to the bloom effect.
61
+ */
20
62
  constructor( inputNode, strength = 1, radius = 0, threshold = 0 ) {
21
63
 
22
64
  super( 'vec4' );
23
65
 
66
+ /**
67
+ * The node that represents the input of the effect.
68
+ *
69
+ * @type {Node<vec4>}
70
+ */
24
71
  this.inputNode = inputNode;
72
+
73
+ /**
74
+ * The strength of the bloom.
75
+ *
76
+ * @type {UniformNode<float>}
77
+ */
25
78
  this.strength = uniform( strength );
79
+
80
+ /**
81
+ * The radius of the bloom.
82
+ *
83
+ * @type {UniformNode<float>}
84
+ */
26
85
  this.radius = uniform( radius );
86
+
87
+ /**
88
+ * The luminance threshold limits which bright areas contribute to the bloom effect.
89
+ *
90
+ * @type {UniformNode<float>}
91
+ */
27
92
  this.threshold = uniform( threshold );
28
93
 
94
+ /**
95
+ * Can be used to tweak the extracted luminance from the scene.
96
+ *
97
+ * @type {UniformNode<float>}
98
+ */
29
99
  this.smoothWidth = uniform( 0.01 );
30
100
 
31
- //
32
-
101
+ /**
102
+ * An array that holds the render targets for the horizontal blur passes.
103
+ *
104
+ * @private
105
+ * @type {Array<RenderTarget>}
106
+ */
33
107
  this._renderTargetsHorizontal = [];
108
+
109
+ /**
110
+ * An array that holds the render targets for the vertical blur passes.
111
+ *
112
+ * @private
113
+ * @type {Array<RenderTarget>}
114
+ */
34
115
  this._renderTargetsVertical = [];
35
- this._nMips = 5;
36
116
 
37
- // render targets
117
+ /**
118
+ * The number if blur mips.
119
+ *
120
+ * @private
121
+ * @type {Number}
122
+ */
123
+ this._nMips = 5;
38
124
 
125
+ /**
126
+ * The render target for the luminance pass.
127
+ *
128
+ * @private
129
+ * @type {RenderTarget}
130
+ */
39
131
  this._renderTargetBright = new RenderTarget( 1, 1, { depthBuffer: false, type: HalfFloatType } );
40
132
  this._renderTargetBright.texture.name = 'UnrealBloomPass.bright';
41
133
  this._renderTargetBright.texture.generateMipmaps = false;
42
134
 
135
+ //
136
+
43
137
  for ( let i = 0; i < this._nMips; i ++ ) {
44
138
 
45
139
  const renderTargetHorizontal = new RenderTarget( 1, 1, { depthBuffer: false, type: HalfFloatType } );
@@ -58,33 +152,114 @@ class BloomNode extends TempNode {
58
152
 
59
153
  }
60
154
 
61
- // materials
62
-
155
+ /**
156
+ * The material for the composite pass.
157
+ *
158
+ * @private
159
+ * @type {NodeMaterial?}
160
+ */
63
161
  this._compositeMaterial = null;
162
+
163
+ /**
164
+ * The material for the luminance pass.
165
+ *
166
+ * @private
167
+ * @type {NodeMaterial?}
168
+ */
64
169
  this._highPassFilterMaterial = null;
65
- this._separableBlurMaterials = [];
66
170
 
67
- // pass and texture nodes
171
+ /**
172
+ * The materials for the blur pass.
173
+ *
174
+ * @private
175
+ * @type {Array<NodeMaterial>}
176
+ */
177
+ this._separableBlurMaterials = [];
68
178
 
179
+ /**
180
+ * The result of the luminance pass as a texture node for further processing.
181
+ *
182
+ * @private
183
+ * @type {TextureNode}
184
+ */
69
185
  this._textureNodeBright = texture( this._renderTargetBright.texture );
186
+
187
+ /**
188
+ * The result of the first blur pass as a texture node for further processing.
189
+ *
190
+ * @private
191
+ * @type {TextureNode}
192
+ */
70
193
  this._textureNodeBlur0 = texture( this._renderTargetsVertical[ 0 ].texture );
194
+
195
+ /**
196
+ * The result of the second blur pass as a texture node for further processing.
197
+ *
198
+ * @private
199
+ * @type {TextureNode}
200
+ */
71
201
  this._textureNodeBlur1 = texture( this._renderTargetsVertical[ 1 ].texture );
202
+
203
+ /**
204
+ * The result of the third blur pass as a texture node for further processing.
205
+ *
206
+ * @private
207
+ * @type {TextureNode}
208
+ */
72
209
  this._textureNodeBlur2 = texture( this._renderTargetsVertical[ 2 ].texture );
210
+
211
+ /**
212
+ * The result of the fourth blur pass as a texture node for further processing.
213
+ *
214
+ * @private
215
+ * @type {TextureNode}
216
+ */
73
217
  this._textureNodeBlur3 = texture( this._renderTargetsVertical[ 3 ].texture );
218
+
219
+ /**
220
+ * The result of the fifth blur pass as a texture node for further processing.
221
+ *
222
+ * @private
223
+ * @type {TextureNode}
224
+ */
74
225
  this._textureNodeBlur4 = texture( this._renderTargetsVertical[ 4 ].texture );
75
226
 
227
+ /**
228
+ * The result of the effect is represented as a separate texture node.
229
+ *
230
+ * @private
231
+ * @type {PassTextureNode}
232
+ */
76
233
  this._textureOutput = passTexture( this, this._renderTargetsHorizontal[ 0 ].texture );
77
234
 
235
+ /**
236
+ * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
237
+ * its effect once per frame in `updateBefore()`.
238
+ *
239
+ * @type {String}
240
+ * @default 'frame'
241
+ */
78
242
  this.updateBeforeType = NodeUpdateType.FRAME;
79
243
 
80
244
  }
81
245
 
246
+ /**
247
+ * Returns the result of the effect as a texture node.
248
+ *
249
+ * @return {PassTextureNode} A texture node that represents the result of the effect.
250
+ */
82
251
  getTextureNode() {
83
252
 
84
253
  return this._textureOutput;
85
254
 
86
255
  }
87
256
 
257
+ /**
258
+ * Sets the size of the effect.
259
+ *
260
+ * @param {Number} width - The width of the effect.
261
+ * @param {Number} height - The height of the effect.
262
+ */
88
263
  setSize( width, height ) {
89
264
 
90
265
  let resx = Math.round( width / 2 );
@@ -106,24 +281,29 @@ class BloomNode extends TempNode {
106
281
 
107
282
  }
108
283
 
284
+ /**
285
+ * This method is used to render the effect once per frame.
286
+ *
287
+ * @param {NodeFrame} frame - The current node frame.
288
+ */
109
289
  updateBefore( frame ) {
110
290
 
111
291
  const { renderer } = frame;
112
292
 
113
- _rendererState = PostProcessingUtils.resetRendererState( renderer, _rendererState );
293
+ _rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
114
294
 
115
295
  //
116
296
 
117
297
  const size = renderer.getDrawingBufferSize( _size );
118
298
  this.setSize( size.width, size.height );
119
299
 
120
- // 1. Extract Bright Areas
300
+ // 1. Extract bright areas
121
301
 
122
302
  renderer.setRenderTarget( this._renderTargetBright );
123
303
  _quadMesh.material = this._highPassFilterMaterial;
124
304
  _quadMesh.render( renderer );
125
305
 
126
- // 2. Blur All the mips progressively
306
+ // 2. Blur all the mips progressively
127
307
 
128
308
  let inputRenderTarget = this._renderTargetBright;
129
309
 
@@ -145,7 +325,7 @@ class BloomNode extends TempNode {
145
325
 
146
326
  }
147
327
 
148
- // 3. Composite All the mips
328
+ // 3. Composite all the mips
149
329
 
150
330
  renderer.setRenderTarget( this._renderTargetsHorizontal[ 0 ] );
151
331
  _quadMesh.material = this._compositeMaterial;
@@ -153,10 +333,16 @@ class BloomNode extends TempNode {
153
333
 
154
334
  // restore
155
335
 
156
- PostProcessingUtils.restoreRendererState( renderer, _rendererState );
336
+ RendererUtils.restoreRendererState( renderer, _rendererState );
157
337
 
158
338
  }
159
339
 
340
+ /**
341
+ * This method is used to setup the effect's TSL code.
342
+ *
343
+ * @param {NodeBuilder} builder - The current node builder.
344
+ * @return {PassTextureNode}
345
+ */
160
346
  setup( builder ) {
161
347
 
162
348
  // luminosity high pass material
@@ -183,7 +369,7 @@ class BloomNode extends TempNode {
183
369
 
184
370
  for ( let i = 0; i < this._nMips; i ++ ) {
185
371
 
186
- this._separableBlurMaterials.push( this._getSeperableBlurMaterial( builder, kernelSizeArray[ i ] ) );
372
+ this._separableBlurMaterials.push( this._getSeparableBlurMaterial( builder, kernelSizeArray[ i ] ) );
187
373
 
188
374
  }
189
375
 
@@ -232,6 +418,10 @@ class BloomNode extends TempNode {
232
418
 
233
419
  }
234
420
 
421
+ /**
422
+ * Frees internal resources. This method should be called
423
+ * when the effect is no longer required.
424
+ */
235
425
  dispose() {
236
426
 
237
427
  for ( let i = 0; i < this._renderTargetsHorizontal.length; i ++ ) {
@@ -250,7 +440,14 @@ class BloomNode extends TempNode {
250
440
 
251
441
  }
252
442
 
253
- _getSeperableBlurMaterial( builder, kernelRadius ) {
443
+ /**
444
+ * Create a separable blur material for the given kernel radius.
445
+ *
446
+ * @param {NodeBuilder} builder - The current node builder.
447
+ * @param {Number} kernelRadius - The kernel radius.
448
+ * @return {NodeMaterial}
449
+ */
450
+ _getSeparableBlurMaterial( builder, kernelRadius ) {
254
451
 
255
452
  const coefficients = [];
256
453
 
@@ -268,9 +465,9 @@ class BloomNode extends TempNode {
268
465
  const direction = uniform( new Vector2( 0.5, 0.5 ) );
269
466
 
270
467
  const uvNode = uv();
271
- const sampleTexel = ( uv ) => colorTexture.uv( uv );
468
+ const sampleTexel = ( uv ) => colorTexture.sample( uv );
272
469
 
273
- const seperableBlurPass = Fn( () => {
470
+ const separableBlurPass = Fn( () => {
274
471
 
275
472
  const weightSum = gaussianCoefficients.element( 0 ).toVar();
276
473
  const diffuseSum = sampleTexel( uvNode ).rgb.mul( weightSum ).toVar();
@@ -291,22 +488,32 @@ class BloomNode extends TempNode {
291
488
 
292
489
  } );
293
490
 
294
- const seperableBlurMaterial = new NodeMaterial();
295
- seperableBlurMaterial.fragmentNode = seperableBlurPass().context( builder.getSharedContext() );
296
- seperableBlurMaterial.name = 'Bloom_seperable';
297
- seperableBlurMaterial.needsUpdate = true;
491
+ const separableBlurMaterial = new NodeMaterial();
492
+ separableBlurMaterial.fragmentNode = separableBlurPass().context( builder.getSharedContext() );
493
+ separableBlurMaterial.name = 'Bloom_separable';
494
+ separableBlurMaterial.needsUpdate = true;
298
495
 
299
496
  // uniforms
300
- seperableBlurMaterial.colorTexture = colorTexture;
301
- seperableBlurMaterial.direction = direction;
302
- seperableBlurMaterial.invSize = invSize;
497
+ separableBlurMaterial.colorTexture = colorTexture;
498
+ separableBlurMaterial.direction = direction;
499
+ separableBlurMaterial.invSize = invSize;
303
500
 
304
- return seperableBlurMaterial;
501
+ return separableBlurMaterial;
305
502
 
306
503
  }
307
504
 
308
505
  }
309
506
 
507
+ /**
508
+ * TSL function for creating a bloom effect.
509
+ *
510
+ * @function
511
+ * @param {Node<vec4>} node - The node that represents the input of the effect.
512
+ * @param {Number} [strength=1] - The strength of the bloom.
513
+ * @param {Number} [radius=0] - The radius of the bloom.
514
+ * @param {Number} [threshold=0] - The luminance threshold limits which bright areas contribute to the bloom effect.
515
+ * @returns {BloomNode}
516
+ */
310
517
  export const bloom = ( node, strength, radius, threshold ) => nodeObject( new BloomNode( nodeObject( node ), strength, radius, threshold ) );
311
518
 
312
519
  export default BloomNode;