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
@@ -2,6 +2,18 @@ import Node from './Node.js';
2
2
  import { NodeShaderStage } from './constants.js';
3
3
  import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
4
4
 
5
+ /** @module VaryingNode **/
6
+
7
+ /**
8
+ * Class for representing shader varyings as nodes. Varyings are create from
9
+ * existing nodes like the following:
10
+ *
11
+ * ```js
12
+ * const positionLocal = positionGeometry.toVarying( 'vPositionLocal' );
13
+ * ```
14
+ *
15
+ * @augments Node
16
+ */
5
17
  class VaryingNode extends Node {
6
18
 
7
19
  static get type() {
@@ -10,18 +22,50 @@ class VaryingNode extends Node {
10
22
 
11
23
  }
12
24
 
25
+ /**
26
+ * Constructs a new varying node.
27
+ *
28
+ * @param {Node} node - The node for which a varying should be created.
29
+ * @param {String?} name - The name of the varying in the shader.
30
+ */
13
31
  constructor( node, name = null ) {
14
32
 
15
33
  super();
16
34
 
35
+ /**
36
+ * The node for which a varying should be created.
37
+ *
38
+ * @type {Node}
39
+ */
17
40
  this.node = node;
41
+
42
+ /**
43
+ * The name of the varying in the shader. If no name is defined,
44
+ * the node system auto-generates one.
45
+ *
46
+ * @type {String?}
47
+ * @default null
48
+ */
18
49
  this.name = name;
19
50
 
51
+ /**
52
+ * This flag can be used for type testing.
53
+ *
54
+ * @type {Boolean}
55
+ * @readonly
56
+ * @default true
57
+ */
20
58
  this.isVaryingNode = true;
21
59
 
22
60
  }
23
61
 
24
- isGlobal() {
62
+ /**
63
+ * The method is overwritten so it always returns `true`.
64
+ *
65
+ * @param {NodeBuilder} builder - The current node builder.
66
+ * @return {Boolean} Whether this node is global or not.
67
+ */
68
+ isGlobal( /*builder*/ ) {
25
69
 
26
70
  return true;
27
71
 
@@ -41,6 +85,12 @@ class VaryingNode extends Node {
41
85
 
42
86
  }
43
87
 
88
+ /**
89
+ * This method performs the setup of a varying node with the current node builder.
90
+ *
91
+ * @param {NodeBuilder} builder - The current node builder.
92
+ * @return {NodeVarying} The node varying from the node builder.
93
+ */
44
94
  setupVarying( builder ) {
45
95
 
46
96
  const properties = builder.getNodeProperties( this );
@@ -83,7 +133,9 @@ class VaryingNode extends Node {
83
133
  const properties = builder.getNodeProperties( this );
84
134
  const varying = this.setupVarying( builder );
85
135
 
86
- if ( properties.propertyName === undefined ) {
136
+ const needsReassign = builder.shaderStage === 'fragment' && properties.reassignPosition === true && builder.context.needsPositionReassign;
137
+
138
+ if ( properties.propertyName === undefined || needsReassign ) {
87
139
 
88
140
  const type = this.getNodeType( builder );
89
141
  const propertyName = builder.getPropertyName( varying, NodeShaderStage.VERTEX );
@@ -93,6 +145,17 @@ class VaryingNode extends Node {
93
145
 
94
146
  properties.propertyName = propertyName;
95
147
 
148
+ if ( needsReassign ) {
149
+
150
+ // once reassign varying in fragment stage
151
+ properties.reassignPosition = false;
152
+
153
+ } else if ( properties.reassignPosition === undefined && builder.context.isPositionNodeInput ) {
154
+
155
+ properties.reassignPosition = true;
156
+
157
+ }
158
+
96
159
  }
97
160
 
98
161
  return builder.getPropertyName( varying );
@@ -103,6 +166,40 @@ class VaryingNode extends Node {
103
166
 
104
167
  export default VaryingNode;
105
168
 
169
+ /**
170
+ * TSL function for creating a varying node.
171
+ *
172
+ * @function
173
+ * @param {Node} node - The node for which a varying should be created.
174
+ * @param {String?} name - The name of the varying in the shader.
175
+ * @returns {VaryingNode}
176
+ */
106
177
  export const varying = /*@__PURE__*/ nodeProxy( VaryingNode );
107
178
 
108
- addMethodChaining( 'varying', varying );
179
+ /**
180
+ * Computes a node in the vertex stage.
181
+ *
182
+ * @function
183
+ * @param {Node} node - The node which should be executed in the vertex stage.
184
+ * @returns {VaryingNode}
185
+ */
186
+ export const vertexStage = ( node ) => varying( node );
187
+
188
+ addMethodChaining( 'toVarying', varying );
189
+ addMethodChaining( 'toVertexStage', vertexStage );
190
+
191
+ // Deprecated
192
+
193
+ addMethodChaining( 'varying', ( ...params ) => { // @deprecated, r173
194
+
195
+ console.warn( 'TSL.VaryingNode: .varying() has been renamed to .toVarying().' );
196
+ return varying( ...params );
197
+
198
+ } );
199
+
200
+ addMethodChaining( 'vertexStage', ( ...params ) => { // @deprecated, r173
201
+
202
+ console.warn( 'TSL.VaryingNode: .vertexStage() has been renamed to .toVertexStage().' );
203
+ return varying( ...params );
204
+
205
+ } );
@@ -1,8 +1,24 @@
1
+ /** @module NodeConstants **/
2
+
3
+ /**
4
+ * Possible shader stages.
5
+ *
6
+ * @property {string} VERTEX The vertex shader stage.
7
+ * @property {string} FRAGMENT The fragment shader stage.
8
+ */
1
9
  export const NodeShaderStage = {
2
10
  VERTEX: 'vertex',
3
11
  FRAGMENT: 'fragment'
4
12
  };
5
13
 
14
+ /**
15
+ * Update types of a node.
16
+ *
17
+ * @property {string} NONE The update method is not executed.
18
+ * @property {string} FRAME The update method is executed per frame.
19
+ * @property {string} RENDER The update method is executed per render. A frame might be produced by multiple render calls so this value allows more detailed updates than FRAME.
20
+ * @property {string} OBJECT The update method is executed per {@link Object3D} that uses the node for rendering.
21
+ */
6
22
  export const NodeUpdateType = {
7
23
  NONE: 'none',
8
24
  FRAME: 'frame',
@@ -10,6 +26,19 @@ export const NodeUpdateType = {
10
26
  OBJECT: 'object'
11
27
  };
12
28
 
29
+ /**
30
+ * Data types of a node.
31
+ *
32
+ * @property {string} BOOLEAN Boolean type.
33
+ * @property {string} INTEGER Integer type.
34
+ * @property {string} FLOAT Float type.
35
+ * @property {string} VECTOR2 Two-dimensional vector type.
36
+ * @property {string} VECTOR3 Three-dimensional vector type.
37
+ * @property {string} VECTOR4 Four-dimensional vector type.
38
+ * @property {string} MATRIX2 2x2 matrix type.
39
+ * @property {string} MATRIX3 3x3 matrix type.
40
+ * @property {string} MATRIX4 4x4 matrix type.
41
+ */
13
42
  export const NodeType = {
14
43
  BOOLEAN: 'bool',
15
44
  INTEGER: 'int',
@@ -22,6 +51,13 @@ export const NodeType = {
22
51
  MATRIX4: 'mat4'
23
52
  };
24
53
 
54
+ /**
55
+ * Access types of a node. These are relevant for compute and storage usage.
56
+ *
57
+ * @property {string} READ_ONLY Read-only access
58
+ * @property {string} WRITE_ONLY Write-only access.
59
+ * @property {string} READ_WRITE Read and write access.
60
+ */
25
61
  export const NodeAccess = {
26
62
  READ_ONLY: 'readOnly',
27
63
  WRITE_ONLY: 'writeOnly',
@@ -1,6 +1,20 @@
1
1
  import { Fn, vec4 } from '../tsl/TSLBase.js';
2
2
  import { mix, min, step } from '../math/MathNode.js';
3
3
 
4
+ /** @module BlendModes **/
5
+
6
+ /**
7
+ * Represents a "Color Burn" blend mode.
8
+ *
9
+ * It's designed to darken the base layer's colors based on the color of the blend layer.
10
+ * It significantly increases the contrast of the base layer, making the colors more vibrant and saturated.
11
+ * The darker the color in the blend layer, the stronger the darkening and contrast effect on the base layer.
12
+ *
13
+ * @method
14
+ * @param {Node<vec3>} base - The base color.
15
+ * @param {Node<vec3>} blend - The blend color. A white (#ffffff) blend color does not alter the base color.
16
+ * @return {Node<vec3>} The result.
17
+ */
4
18
  export const blendBurn = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
5
19
 
6
20
  return min( 1.0, base.oneMinus().div( blend ) ).oneMinus();
@@ -14,6 +28,18 @@ export const blendBurn = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
14
28
  ]
15
29
  } );
16
30
 
31
+ /**
32
+ * Represents a "Color Dodge" blend mode.
33
+ *
34
+ * It's designed to lighten the base layer's colors based on the color of the blend layer.
35
+ * It significantly increases the brightness of the base layer, making the colors lighter and more vibrant.
36
+ * The brighter the color in the blend layer, the stronger the lightening and contrast effect on the base layer.
37
+ *
38
+ * @method
39
+ * @param {Node<vec3>} base - The base color.
40
+ * @param {Node<vec3>} blend - The blend color. A black (#000000) blend color does not alter the base color.
41
+ * @return {Node<vec3>} The result.
42
+ */
17
43
  export const blendDodge = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
18
44
 
19
45
  return min( base.div( blend.oneMinus() ), 1.0 );
@@ -27,6 +53,18 @@ export const blendDodge = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
27
53
  ]
28
54
  } );
29
55
 
56
+ /**
57
+ * Represents a "Screen" blend mode.
58
+ *
59
+ * Similar to `blendDodge()`, this mode also lightens the base layer's colors based on the color of the blend layer.
60
+ * The "Screen" blend mode is better for general brightening whereas the "Dodge" results in more subtle and nuanced
61
+ * effects.
62
+ *
63
+ * @method
64
+ * @param {Node<vec3>} base - The base color.
65
+ * @param {Node<vec3>} blend - The blend color. A black (#000000) blend color does not alter the base color.
66
+ * @return {Node<vec3>} The result.
67
+ */
30
68
  export const blendScreen = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
31
69
 
32
70
  return base.oneMinus().mul( blend.oneMinus() ).oneMinus();
@@ -40,6 +78,18 @@ export const blendScreen = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
40
78
  ]
41
79
  } );
42
80
 
81
+ /**
82
+ * Represents a "Overlay" blend mode.
83
+ *
84
+ * It's designed to increase the contrast of the base layer based on the color of the blend layer.
85
+ * It amplifies the existing colors and contrast in the base layer, making lighter areas lighter and darker areas darker.
86
+ * The color of the blend layer significantly influences the resulting contrast and color shift in the base layer.
87
+ *
88
+ * @method
89
+ * @param {Node<vec3>} base - The base color.
90
+ * @param {Node<vec3>} blend - The blend color
91
+ * @return {Node<vec3>} The result.
92
+ */
43
93
  export const blendOverlay = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
44
94
 
45
95
  return mix( base.mul( 2.0 ).mul( blend ), base.oneMinus().mul( 2.0 ).mul( blend.oneMinus() ).oneMinus(), step( 0.5, base ) );
@@ -53,6 +103,15 @@ export const blendOverlay = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
53
103
  ]
54
104
  } );
55
105
 
106
+ /**
107
+ * This function blends two color based on their alpha values by replicating the behavior of `THREE.NormalBlending`.
108
+ * It assumes both input colors have non-preumiltiplied alpha.
109
+ *
110
+ * @method
111
+ * @param {Node<vec4>} base - The base color.
112
+ * @param {Node<vec4>} blend - The blend color
113
+ * @return {Node<vec4>} The result.
114
+ */
56
115
  export const blendColor = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
57
116
 
58
117
  const outAlpha = blend.a.add( base.a.mul( blend.a.oneMinus() ) );
@@ -68,8 +127,15 @@ export const blendColor = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
68
127
  ]
69
128
  } );
70
129
 
71
- // deprecated
130
+ // Deprecated
72
131
 
132
+ /**
133
+ * @function
134
+ * @deprecated since r171. Use {@link blendBurn} instead.
135
+ *
136
+ * @param {...any} params
137
+ * @returns {Function}
138
+ */
73
139
  export const burn = ( ...params ) => { // @deprecated, r171
74
140
 
75
141
  console.warn( 'THREE.TSL: "burn" has been renamed. Use "blendBurn" instead.' );
@@ -77,6 +143,13 @@ export const burn = ( ...params ) => { // @deprecated, r171
77
143
 
78
144
  };
79
145
 
146
+ /**
147
+ * @function
148
+ * @deprecated since r171. Use {@link blendDodge} instead.
149
+ *
150
+ * @param {...any} params
151
+ * @returns {Function}
152
+ */
80
153
  export const dodge = ( ...params ) => { // @deprecated, r171
81
154
 
82
155
  console.warn( 'THREE.TSL: "dodge" has been renamed. Use "blendDodge" instead.' );
@@ -84,6 +157,13 @@ export const dodge = ( ...params ) => { // @deprecated, r171
84
157
 
85
158
  };
86
159
 
160
+ /**
161
+ * @method
162
+ * @deprecated since r171. Use {@link blendScreen} instead.
163
+ *
164
+ * @param {...any} params
165
+ * @returns {Function}
166
+ */
87
167
  export const screen = ( ...params ) => { // @deprecated, r171
88
168
 
89
169
  console.warn( 'THREE.TSL: "screen" has been renamed. Use "blendScreen" instead.' );
@@ -91,6 +171,13 @@ export const screen = ( ...params ) => { // @deprecated, r171
91
171
 
92
172
  };
93
173
 
174
+ /**
175
+ * @method
176
+ * @deprecated since r171. Use {@link blendOverlay} instead.
177
+ *
178
+ * @param {...any} params
179
+ * @returns {Function}
180
+ */
94
181
  export const overlay = ( ...params ) => { // @deprecated, r171
95
182
 
96
183
  console.warn( 'THREE.TSL: "overlay" has been renamed. Use "blendOverlay" instead.' );
@@ -5,6 +5,8 @@ import { positionView } from '../accessors/Position.js';
5
5
  import { faceDirection } from './FrontFacingNode.js';
6
6
  import { Fn, nodeProxy, float, vec2 } from '../tsl/TSLBase.js';
7
7
 
8
+ /** @module BumpMapNode **/
9
+
8
10
  // Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen
9
11
  // https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf
10
12
 
@@ -44,6 +46,15 @@ const perturbNormalArb = Fn( ( inputs ) => {
44
46
 
45
47
  } );
46
48
 
49
+ /**
50
+ * This class can be used for applying bump maps to materials.
51
+ *
52
+ * ```js
53
+ * material.normalNode = bumpMap( texture( bumpTex ) );
54
+ * ```
55
+ *
56
+ * @augments TempNode
57
+ */
47
58
  class BumpMapNode extends TempNode {
48
59
 
49
60
  static get type() {
@@ -52,11 +63,29 @@ class BumpMapNode extends TempNode {
52
63
 
53
64
  }
54
65
 
66
+ /**
67
+ * Constructs a new bump map node.
68
+ *
69
+ * @param {Node<float>} textureNode - Represents the bump map data.
70
+ * @param {Node<float>?} [scaleNode=null] - Controls the intensity of the bump effect.
71
+ */
55
72
  constructor( textureNode, scaleNode = null ) {
56
73
 
57
74
  super( 'vec3' );
58
75
 
76
+ /**
77
+ * Represents the bump map data.
78
+ *
79
+ * @type {Node<float>}
80
+ */
59
81
  this.textureNode = textureNode;
82
+
83
+ /**
84
+ * Controls the intensity of the bump effect.
85
+ *
86
+ * @type {Node<float>?}
87
+ * @default null
88
+ */
60
89
  this.scaleNode = scaleNode;
61
90
 
62
91
  }
@@ -78,4 +107,12 @@ class BumpMapNode extends TempNode {
78
107
 
79
108
  export default BumpMapNode;
80
109
 
110
+ /**
111
+ * TSL function for creating a bump map node.
112
+ *
113
+ * @function
114
+ * @param {Node<float>} textureNode - Represents the bump map data.
115
+ * @param {Node<float>?} [scaleNode=null] - Controls the intensity of the bump effect.
116
+ * @returns {BumpMapNode}
117
+ */
81
118
  export const bumpMap = /*@__PURE__*/ nodeProxy( BumpMapNode );
@@ -5,18 +5,45 @@ import { ColorManagement } from '../../math/ColorManagement.js';
5
5
  import { Vector3 } from '../../math/Vector3.js';
6
6
  import { LinearSRGBColorSpace } from '../../constants.js';
7
7
 
8
+ /** @module ColorAdjustment **/
9
+
10
+ /**
11
+ * Computes a grayscale value for the given RGB color value.
12
+ *
13
+ * @method
14
+ * @param {Node<vec3>} color - The color value to compute the grayscale for.
15
+ * @return {Node<vec3>} The grayscale color.
16
+ */
8
17
  export const grayscale = /*@__PURE__*/ Fn( ( [ color ] ) => {
9
18
 
10
19
  return luminance( color.rgb );
11
20
 
12
21
  } );
13
22
 
23
+ /**
24
+ * Super-saturates or desaturates the given RGB color.
25
+ *
26
+ * @method
27
+ * @param {Node<vec3>} color - The input color.
28
+ * @param {Node<float>} [adjustment=1] - Specifies the amount of the conversion. A value under `1` desaturates the color, a value over `1` super-saturates it.
29
+ * @return {Node<vec3>} The saturated color.
30
+ */
14
31
  export const saturation = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
15
32
 
16
33
  return adjustment.mix( luminance( color.rgb ), color.rgb );
17
34
 
18
35
  } );
19
36
 
37
+ /**
38
+ * Selectively enhance the intensity of less saturated RGB colors. Can result
39
+ * in a more natural and visually appealing image with enhanced color depth
40
+ * compared to {@link ColorAdjustment#saturation}.
41
+ *
42
+ * @method
43
+ * @param {Node<vec3>} color - The input color.
44
+ * @param {Node<float>} [adjustment=1] - Controls the intensity of the vibrance effect.
45
+ * @return {Node<vec3>} The updated color.
46
+ */
20
47
  export const vibrance = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
21
48
 
22
49
  const average = add( color.r, color.g, color.b ).div( 3.0 );
@@ -28,6 +55,14 @@ export const vibrance = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] )
28
55
 
29
56
  } );
30
57
 
58
+ /**
59
+ * Updates the hue component of the given RGB color while preserving its luminance and saturation.
60
+ *
61
+ * @method
62
+ * @param {Node<vec3>} color - The input color.
63
+ * @param {Node<float>} [adjustment=1] - Defines the degree of hue rotation in radians. A positive value rotates the hue clockwise, while a negative value rotates it counterclockwise.
64
+ * @return {Node<vec3>} The updated color.
65
+ */
31
66
  export const hue = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
32
67
 
33
68
  const k = vec3( 0.57735, 0.57735, 0.57735 );
@@ -38,13 +73,19 @@ export const hue = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
38
73
 
39
74
  } );
40
75
 
76
+ /**
77
+ * Computes the luminance for the given RGB color value.
78
+ *
79
+ * @method
80
+ * @param {Node<vec3>} color - The color value to compute the luminance for.
81
+ * @param {Node<vec3>?} luminanceCoefficients - The luminance coefficients. By default predefined values of the current working color space are used.
82
+ * @return {Node<vec3>} The luminance.
83
+ */
41
84
  export const luminance = (
42
85
  color,
43
86
  luminanceCoefficients = vec3( ColorManagement.getLuminanceCoefficients( new Vector3() ) )
44
87
  ) => dot( color, luminanceCoefficients );
45
88
 
46
- export const threshold = ( color, threshold ) => mix( vec3( 0.0 ), color, luminance( color ).sub( threshold ).max( 0 ) );
47
-
48
89
  /**
49
90
  * Color Decision List (CDL) v1.2
50
91
  *
@@ -52,18 +93,19 @@ export const threshold = ( color, threshold ) => mix( vec3( 0.0 ), color, lumina
52
93
  * saturation. The CDL should be typically be given input in a log space (such as LogC, ACEScc,
53
94
  * or AgX Log), and will return output in the same space. Output may require clamping >=0.
54
95
  *
55
- * @param {vec4} color Input (-Infinity < input < +Infinity)
56
- * @param {number | vec3} slope Slope (0 slope < +Infinity)
57
- * @param {number | vec3} offset Offset (-Infinity < offset < +Infinity; typically -1 < offset < 1)
58
- * @param {number | vec3} power Power (0 < power < +Infinity)
59
- * @param {number} saturation Saturation (0 saturation < +Infinity; typically 0 ≤ saturation < 4)
60
- * @param {vec3} luminanceCoefficients Luminance coefficients for saturation term, typically Rec. 709
61
- * @return Output, -Infinity < output < +Infinity
96
+ * @method
97
+ * @param {Node<vec4>} color Input (-Infinity < input < +Infinity)
98
+ * @param {Node<vec3>} slope Slope (0 slope < +Infinity)
99
+ * @param {Node<vec3>} offset Offset (-Infinity < offset < +Infinity; typically -1 < offset < 1)
100
+ * @param {Node<vec3>} power Power (0 < power < +Infinity)
101
+ * @param {Node<float>} saturation Saturation (0 saturation < +Infinity; typically 0 ≤ saturation < 4)
102
+ * @param {Node<vec3>} luminanceCoefficients Luminance coefficients for saturation term, typically Rec. 709
103
+ * @return {Node<vec4>} Output, -Infinity < output < +Infinity
62
104
  *
63
105
  * References:
64
106
  * - ASC CDL v1.2
65
- * - https://blender.stackexchange.com/a/55239/43930
66
- * - https://docs.acescentral.com/specifications/acescc/
107
+ * - {@link https://blender.stackexchange.com/a/55239/43930}
108
+ * - {@link https://docs.acescentral.com/specifications/acescc/}
67
109
  */
68
110
  export const cdl = /*@__PURE__*/ Fn( ( [
69
111
  color,
@@ -1,6 +1,15 @@
1
1
  import { mix } from '../math/MathNode.js';
2
2
  import { Fn } from '../tsl/TSLCore.js';
3
3
 
4
+ /** @module ColorSpaceFunctions **/
5
+
6
+ /**
7
+ * Converts the given color value from sRGB to linear-sRGB color space.
8
+ *
9
+ * @method
10
+ * @param {Node<vec3>} color - The sRGB color.
11
+ * @return {Node<vec3>} The linear-sRGB color.
12
+ */
4
13
  export const sRGBTransferEOTF = /*@__PURE__*/ Fn( ( [ color ] ) => {
5
14
 
6
15
  const a = color.mul( 0.9478672986 ).add( 0.0521327014 ).pow( 2.4 );
@@ -19,6 +28,13 @@ export const sRGBTransferEOTF = /*@__PURE__*/ Fn( ( [ color ] ) => {
19
28
  ]
20
29
  } );
21
30
 
31
+ /**
32
+ * Converts the given color value from linear-sRGB to sRGB color space.
33
+ *
34
+ * @method
35
+ * @param {Node<vec3>} color - The linear-sRGB color.
36
+ * @return {Node<vec3>} The sRGB color.
37
+ */
22
38
  export const sRGBTransferOETF = /*@__PURE__*/ Fn( ( [ color ] ) => {
23
39
 
24
40
  const a = color.pow( 0.41666 ).mul( 1.055 ).sub( 0.055 );
@@ -6,9 +6,17 @@ import { ColorManagement } from '../../math/ColorManagement.js';
6
6
  import { sRGBTransferEOTF, sRGBTransferOETF } from './ColorSpaceFunctions.js';
7
7
  import { Matrix3 } from '../../math/Matrix3.js';
8
8
 
9
+ /** @module ColorSpaceNode **/
10
+
9
11
  const WORKING_COLOR_SPACE = 'WorkingColorSpace';
10
12
  const OUTPUT_COLOR_SPACE = 'OutputColorSpace';
11
13
 
14
+ /**
15
+ * This node represents a color space conversion. Meaning it converts
16
+ * a color value from a source to a target color space.
17
+ *
18
+ * @augments TempNode
19
+ */
12
20
  class ColorSpaceNode extends TempNode {
13
21
 
14
22
  static get type() {
@@ -17,16 +25,49 @@ class ColorSpaceNode extends TempNode {
17
25
 
18
26
  }
19
27
 
28
+ /**
29
+ * Constructs a new color space node.
30
+ *
31
+ * @param {Node} colorNode - Represents the color to convert.
32
+ * @param {String} source - The source color space.
33
+ * @param {String} target - The target color space.
34
+ */
20
35
  constructor( colorNode, source, target ) {
21
36
 
22
37
  super( 'vec4' );
23
38
 
39
+ /**
40
+ * Represents the color to convert.
41
+ *
42
+ * @type {Node}
43
+ */
24
44
  this.colorNode = colorNode;
45
+
46
+ /**
47
+ * The source color space.
48
+ *
49
+ * @type {String}
50
+ */
25
51
  this.source = source;
52
+
53
+ /**
54
+ * The target color space.
55
+ *
56
+ * @type {String}
57
+ */
26
58
  this.target = target;
27
59
 
28
60
  }
29
61
 
62
+ /**
63
+ * This method resolves the constants `WORKING_COLOR_SPACE` and
64
+ * `OUTPUT_COLOR_SPACE` based on the current configuration of the
65
+ * color management and renderer.
66
+ *
67
+ * @param {NodeBuilder} builder - The current node builder.
68
+ * @param {String} colorSpace - The color space to resolve.
69
+ * @return {String} The resolved color space.
70
+ */
30
71
  resolveColorSpace( builder, colorSpace ) {
31
72
 
32
73
  if ( colorSpace === WORKING_COLOR_SPACE ) {
@@ -87,12 +128,53 @@ class ColorSpaceNode extends TempNode {
87
128
 
88
129
  export default ColorSpaceNode;
89
130
 
131
+ /**
132
+ * TSL function for converting a given color node to the current output color space.
133
+ *
134
+ * @function
135
+ * @param {Node} node - Represents the node to convert.
136
+ * @returns {ColorSpaceNode}
137
+ */
90
138
  export const toOutputColorSpace = ( node ) => nodeObject( new ColorSpaceNode( nodeObject( node ), WORKING_COLOR_SPACE, OUTPUT_COLOR_SPACE ) );
139
+
140
+ /**
141
+ * TSL function for converting a given color node to the current working color space.
142
+ *
143
+ * @function
144
+ * @param {Node} node - Represents the node to convert.
145
+ * @returns {ColorSpaceNode}
146
+ */
91
147
  export const toWorkingColorSpace = ( node ) => nodeObject( new ColorSpaceNode( nodeObject( node ), OUTPUT_COLOR_SPACE, WORKING_COLOR_SPACE ) );
92
148
 
149
+ /**
150
+ * TSL function for converting a given color node from the current working color space to the given color space.
151
+ *
152
+ * @function
153
+ * @param {Node} node - Represents the node to convert.
154
+ * @param {String} colorSpace - The target color space.
155
+ * @returns {ColorSpaceNode}
156
+ */
93
157
  export const workingToColorSpace = ( node, colorSpace ) => nodeObject( new ColorSpaceNode( nodeObject( node ), WORKING_COLOR_SPACE, colorSpace ) );
158
+
159
+ /**
160
+ * TSL function for converting a given color node from the given color space to the current working color space.
161
+ *
162
+ * @function
163
+ * @param {Node} node - Represents the node to convert.
164
+ * @param {String} colorSpace - The source color space.
165
+ * @returns {ColorSpaceNode}
166
+ */
94
167
  export const colorSpaceToWorking = ( node, colorSpace ) => nodeObject( new ColorSpaceNode( nodeObject( node ), colorSpace, WORKING_COLOR_SPACE ) );
95
168
 
169
+ /**
170
+ * TSL function for converting a given color node from one color space to another one.
171
+ *
172
+ * @function
173
+ * @param {Node} node - Represents the node to convert.
174
+ * @param {String} sourceColorSpace - The source color space.
175
+ * @param {String} targetColorSpace - The target color space.
176
+ * @returns {ColorSpaceNode}
177
+ */
96
178
  export const convertColorSpace = ( node, sourceColorSpace, targetColorSpace ) => nodeObject( new ColorSpaceNode( nodeObject( node ), sourceColorSpace, targetColorSpace ) );
97
179
 
98
180
  addMethodChaining( 'toOutputColorSpace', toOutputColorSpace );