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
@@ -4,6 +4,31 @@ import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
4
4
  import { NoColorSpace, NoToneMapping } from '../../constants.js';
5
5
  import { ColorManagement } from '../../math/ColorManagement.js';
6
6
 
7
+ /** @module RenderOutputNode **/
8
+
9
+ /**
10
+ * Normally, tone mapping and color conversion happens automatically
11
+ * before outputting pixel too the default (screen) framebuffer. In certain
12
+ * post processing setups this happens to late because certain effects
13
+ * require e.g. sRGB input. For such scenarios, `RenderOutputNode` can be used
14
+ * to apply tone mapping and color space conversion at an arbitrary point
15
+ * in the effect chain.
16
+ *
17
+ * When applying tone mapping and color space conversion manually with this node,
18
+ * you have to set {@link PostProcessing#outputColorTransform} to `false`.
19
+ *
20
+ * ```js
21
+ * const postProcessing = new PostProcessing( renderer );
22
+ * postProcessing.outputColorTransform = false;
23
+ *
24
+ * const scenePass = pass( scene, camera );
25
+ * const outputPass = renderOutput( scenePass );
26
+ *
27
+ * postProcessing.outputNode = outputPass;
28
+ * ```
29
+ *
30
+ * @augments TempNode
31
+ */
7
32
  class RenderOutputNode extends TempNode {
8
33
 
9
34
  static get type() {
@@ -12,15 +37,46 @@ class RenderOutputNode extends TempNode {
12
37
 
13
38
  }
14
39
 
40
+ /**
41
+ * Constructs a new render output node.
42
+ *
43
+ * @param {Node} colorNode - The color node to process.
44
+ * @param {Number} toneMapping - The tone mapping type.
45
+ * @param {String} outputColorSpace - The output color space.
46
+ */
15
47
  constructor( colorNode, toneMapping, outputColorSpace ) {
16
48
 
17
49
  super( 'vec4' );
18
50
 
51
+ /**
52
+ * The color node to process.
53
+ *
54
+ * @type {Node}
55
+ */
19
56
  this.colorNode = colorNode;
57
+
58
+ /**
59
+ * The tone mapping type.
60
+ *
61
+ * @type {Number?}
62
+ */
20
63
  this.toneMapping = toneMapping;
64
+
65
+ /**
66
+ * The output color space.
67
+ *
68
+ * @type {String?}
69
+ */
21
70
  this.outputColorSpace = outputColorSpace;
22
71
 
23
- this.isRenderOutput = true;
72
+ /**
73
+ * This flag can be used for type testing.
74
+ *
75
+ * @type {Boolean}
76
+ * @readonly
77
+ * @default true
78
+ */
79
+ this.isRenderOutputNode = true;
24
80
 
25
81
  }
26
82
 
@@ -55,6 +111,15 @@ class RenderOutputNode extends TempNode {
55
111
 
56
112
  export default RenderOutputNode;
57
113
 
114
+ /**
115
+ * TSL function for creating a posterize node.
116
+ *
117
+ * @function
118
+ * @param {Node} color - The color node to process.
119
+ * @param {Number?} [toneMapping=null] - The tone mapping type.
120
+ * @param {String?} [outputColorSpace=null] - The output color space.
121
+ * @returns {RenderOutputNode}
122
+ */
58
123
  export const renderOutput = ( color, toneMapping = null, outputColorSpace = null ) => nodeObject( new RenderOutputNode( nodeObject( color ), toneMapping, outputColorSpace ) );
59
124
 
60
125
  addMethodChaining( 'renderOutput', renderOutput );
@@ -6,8 +6,17 @@ import { Fn, nodeImmutable, vec2 } from '../tsl/TSLBase.js';
6
6
  import { Vector2 } from '../../math/Vector2.js';
7
7
  import { Vector4 } from '../../math/Vector4.js';
8
8
 
9
+ /** @module ScreenNode **/
10
+
9
11
  let screenSizeVec, viewportVec;
10
12
 
13
+ /**
14
+ * This node provides a collection of screen related metrics.
15
+ * Depending on {@link module:ScreenNode~ScreenNode#scope}, the nodes can represent
16
+ * resolution or viewport data as well as fragment or uv coordinates.
17
+ *
18
+ * @augments Node
19
+ */
11
20
  class ScreenNode extends Node {
12
21
 
13
22
  static get type() {
@@ -16,16 +25,43 @@ class ScreenNode extends Node {
16
25
 
17
26
  }
18
27
 
28
+ /**
29
+ * Constructs a new screen node.
30
+ *
31
+ * @param {('coordinate'|'viewport'|'size'|'uv')} scope - The node's scope.
32
+ */
19
33
  constructor( scope ) {
20
34
 
21
35
  super();
22
36
 
37
+ /**
38
+ * The node represents different metric depending on which scope is selected.
39
+ *
40
+ * - `ScreenNode.COORDINATE`: Window-relative coordinates of the current fragment according to WebGPU standards.
41
+ * - `ScreenNode.VIEWPORT`: The current viewport defined as a four-dimensional vector.
42
+ * - `ScreenNode.SIZE`: The dimensions of the current bound framebuffer.
43
+ * - `ScreenNode.UV`: Normalized coordinates.
44
+ *
45
+ * @type {('coordinate'|'viewport'|'size'|'uv')}
46
+ */
23
47
  this.scope = scope;
24
48
 
49
+ /**
50
+ * This flag can be used for type testing.
51
+ *
52
+ * @type {Boolean}
53
+ * @readonly
54
+ * @default true
55
+ */
25
56
  this.isViewportNode = true;
26
57
 
27
58
  }
28
59
 
60
+ /**
61
+ * This method is overwritten since the node type depends on the selected scope.
62
+ *
63
+ * @return {('vec2'|'vec4')} The node type.
64
+ */
29
65
  getNodeType() {
30
66
 
31
67
  if ( this.scope === ScreenNode.VIEWPORT ) return 'vec4';
@@ -33,6 +69,11 @@ class ScreenNode extends Node {
33
69
 
34
70
  }
35
71
 
72
+ /**
73
+ * This method is overwritten since the node's update type depends on the selected scope.
74
+ *
75
+ * @return {NodeUpdateType} The update type.
76
+ */
36
77
  getUpdateType() {
37
78
 
38
79
  let updateType = NodeUpdateType.NONE;
@@ -49,6 +90,12 @@ class ScreenNode extends Node {
49
90
 
50
91
  }
51
92
 
93
+ /**
94
+ * `ScreenNode` implements {@link Node#update} to retrieve viewport and size information
95
+ * from the current renderer.
96
+ *
97
+ * @param {NodeFrame} frame - A reference to the current node frame.
98
+ */
52
99
  update( { renderer } ) {
53
100
 
54
101
  const renderTarget = renderer.getRenderTarget();
@@ -143,19 +190,62 @@ export default ScreenNode;
143
190
 
144
191
  // Screen
145
192
 
193
+ /**
194
+ * TSL object that represents normalized screen coordinates, unitless in `[0, 1]`.
195
+ *
196
+ * @type {ScreenNode<vec2>}
197
+ */
146
198
  export const screenUV = /*@__PURE__*/ nodeImmutable( ScreenNode, ScreenNode.UV );
199
+
200
+ /**
201
+ * TSL object that represents the screen resolution in physical pixel units.
202
+ *
203
+ * @type {ScreenNode<vec2>}
204
+ */
147
205
  export const screenSize = /*@__PURE__*/ nodeImmutable( ScreenNode, ScreenNode.SIZE );
206
+
207
+ /**
208
+ * TSL object that represents the current `x`/`y` pixel position on the screen in physical pixel units.
209
+ *
210
+ * @type {ScreenNode<vec2>}
211
+ */
148
212
  export const screenCoordinate = /*@__PURE__*/ nodeImmutable( ScreenNode, ScreenNode.COORDINATE );
149
213
 
150
214
  // Viewport
151
215
 
216
+ /**
217
+ * TSL object that represents the viewport rectangle as `x`, `y`, `width` and `height` in physical pixel units.
218
+ *
219
+ * @type {ScreenNode<vec4>}
220
+ */
152
221
  export const viewport = /*@__PURE__*/ nodeImmutable( ScreenNode, ScreenNode.VIEWPORT );
222
+
223
+ /**
224
+ * TSL object that represents the viewport resolution in physical pixel units.
225
+ *
226
+ * @type {ScreenNode<vec2>}
227
+ */
153
228
  export const viewportSize = viewport.zw;
229
+
230
+ /**
231
+ * TSL object that represents the current `x`/`y` pixel position on the viewport in physical pixel units.
232
+ *
233
+ * @type {ScreenNode<vec2>}
234
+ */
154
235
  export const viewportCoordinate = /*@__PURE__*/ screenCoordinate.sub( viewport.xy );
236
+
237
+ /**
238
+ * TSL object that represents normalized viewport coordinates, unitless in `[0, 1]`.
239
+ *
240
+ * @type {ScreenNode<vec2>}
241
+ */
155
242
  export const viewportUV = /*@__PURE__*/ viewportCoordinate.div( viewportSize );
156
243
 
157
244
  // Deprecated
158
245
 
246
+ /**
247
+ * @deprecated since r169. Use {@link screenSize} instead.
248
+ */
159
249
  export const viewportResolution = /*@__PURE__*/ ( Fn( () => { // @deprecated, r169
160
250
 
161
251
  console.warn( 'TSL.ViewportNode: "viewportResolution" is deprecated. Use "screenSize" instead.' );
@@ -164,6 +254,9 @@ export const viewportResolution = /*@__PURE__*/ ( Fn( () => { // @deprecated, r1
164
254
 
165
255
  }, 'vec2' ).once() )();
166
256
 
257
+ /**
258
+ * @deprecated since r168. Use {@link screenUV} instead.
259
+ */
167
260
  export const viewportTopLeft = /*@__PURE__*/ ( Fn( () => { // @deprecated, r168
168
261
 
169
262
  console.warn( 'TSL.ViewportNode: "viewportTopLeft" is deprecated. Use "screenUV" instead.' );
@@ -172,6 +265,9 @@ export const viewportTopLeft = /*@__PURE__*/ ( Fn( () => { // @deprecated, r168
172
265
 
173
266
  }, 'vec2' ).once() )();
174
267
 
268
+ /**
269
+ * @deprecated since r168. Use `screenUV.flipY()` instead.
270
+ */
175
271
  export const viewportBottomLeft = /*@__PURE__*/ ( Fn( () => { // @deprecated, r168
176
272
 
177
273
  console.warn( 'TSL.ViewportNode: "viewportBottomLeft" is deprecated. Use "screenUV.flipY()" instead.' );
@@ -3,8 +3,16 @@ import { select } from '../math/ConditionalNode.js';
3
3
  import { clamp, log2, max, min, pow, mix } from '../math/MathNode.js';
4
4
  import { mul, sub, div } from '../math/OperatorNode.js';
5
5
 
6
- // exposure only
7
-
6
+ /** @module ToneMappingFunctions **/
7
+
8
+ /**
9
+ * Linear tone mapping, exposure only.
10
+ *
11
+ * @method
12
+ * @param {Node<vec3>} color - The color that should be tone mapped.
13
+ * @param {Node<float>} exposure - The exposure.
14
+ * @return {Node<vec3>} The tone mapped color.
15
+ */
8
16
  export const linearToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
9
17
 
10
18
  return color.mul( exposure ).clamp();
@@ -18,8 +26,16 @@ export const linearToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
18
26
  ]
19
27
  } );
20
28
 
21
- // source: https://www.cs.utah.edu/docs/techreports/2002/pdf/UUCS-02-001.pdf
22
-
29
+ /**
30
+ * Reinhard tone mapping.
31
+ *
32
+ * Reference: {@link https://www.cs.utah.edu/docs/techreports/2002/pdf/UUCS-02-001.pdf}
33
+ *
34
+ * @method
35
+ * @param {Node<vec3>} color - The color that should be tone mapped.
36
+ * @param {Node<float>} exposure - The exposure.
37
+ * @return {Node<vec3>} The tone mapped color.
38
+ */
23
39
  export const reinhardToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
24
40
 
25
41
  color = color.mul( exposure );
@@ -35,8 +51,16 @@ export const reinhardToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) =>
35
51
  ]
36
52
  } );
37
53
 
38
- // source: http://filmicworlds.com/blog/filmic-tonemapping-operators/
39
-
54
+ /**
55
+ * Cineon tone mapping.
56
+ *
57
+ * Reference: {@link http://filmicworlds.com/blog/filmic-tonemapping-operators/}
58
+ *
59
+ * @method
60
+ * @param {Node<vec3>} color - The color that should be tone mapped.
61
+ * @param {Node<float>} exposure - The exposure.
62
+ * @return {Node<vec3>} The tone mapped color.
63
+ */
40
64
  export const cineonToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
41
65
 
42
66
  // filmic operator by Jim Hejl and Richard Burgess-Dawson
@@ -68,8 +92,16 @@ const RRTAndODTFit = /*@__PURE__*/ Fn( ( [ color ] ) => {
68
92
 
69
93
  } );
70
94
 
71
- // source: https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs
72
-
95
+ /**
96
+ * ACESFilmic tone mapping.
97
+ *
98
+ * Reference: {@link https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs}
99
+ *
100
+ * @method
101
+ * @param {Node<vec3>} color - The color that should be tone mapped.
102
+ * @param {Node<float>} exposure - The exposure.
103
+ * @return {Node<vec3>} The tone mapped color.
104
+ */
73
105
  export const acesFilmicToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
74
106
 
75
107
  // sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT
@@ -120,6 +152,14 @@ const agxDefaultContrastApprox = /*@__PURE__*/ Fn( ( [ x_immutable ] ) => {
120
152
 
121
153
  } );
122
154
 
155
+ /**
156
+ * AgX tone mapping.
157
+ *
158
+ * @method
159
+ * @param {Node<vec3>} color - The color that should be tone mapped.
160
+ * @param {Node<float>} exposure - The exposure.
161
+ * @return {Node<vec3>} The tone mapped color.
162
+ */
123
163
  export const agxToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
124
164
 
125
165
  const colortone = vec3( color ).toVar();
@@ -151,8 +191,16 @@ export const agxToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
151
191
  ]
152
192
  } );
153
193
 
154
- // https://modelviewer.dev/examples/tone-mapping
155
-
194
+ /**
195
+ * Neutral tone mapping.
196
+ *
197
+ * Reference: {@link https://modelviewer.dev/examples/tone-mapping}
198
+ *
199
+ * @method
200
+ * @param {Node<vec3>} color - The color that should be tone mapped.
201
+ * @param {Node<float>} exposure - The exposure.
202
+ * @return {Node<vec3>} The tone mapped color.
203
+ */
156
204
  export const neutralToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {
157
205
 
158
206
  const StartCompression = float( 0.8 - 0.04 );
@@ -5,6 +5,13 @@ import { rendererReference } from '../accessors/RendererReferenceNode.js';
5
5
  import { NoToneMapping } from '../../constants.js';
6
6
  import { hash } from '../core/NodeUtils.js';
7
7
 
8
+ /** @module ToneMappingNode **/
9
+
10
+ /**
11
+ * This node represents a tone mapping operation.
12
+ *
13
+ * @augments TempNode
14
+ */
8
15
  class ToneMappingNode extends TempNode {
9
16
 
10
17
  static get type() {
@@ -13,20 +20,51 @@ class ToneMappingNode extends TempNode {
13
20
 
14
21
  }
15
22
 
23
+ /**
24
+ * Constructs a new tone mapping node.
25
+ *
26
+ * @param {Number} toneMapping - The tone mapping type.
27
+ * @param {Node} exposureNode - The tone mapping exposure.
28
+ * @param {Node} [colorNode=null] - The color node to process.
29
+ */
16
30
  constructor( toneMapping, exposureNode = toneMappingExposure, colorNode = null ) {
17
31
 
18
32
  super( 'vec3' );
19
33
 
34
+ /**
35
+ * The tone mapping type.
36
+ *
37
+ * @type {Number}
38
+ */
20
39
  this.toneMapping = toneMapping;
21
40
 
41
+ /**
42
+ * The tone mapping exposure.
43
+ *
44
+ * @type {Node}
45
+ * @default null
46
+ */
22
47
  this.exposureNode = exposureNode;
48
+
49
+ /**
50
+ * Represents the color to process.
51
+ *
52
+ * @type {Node?}
53
+ * @default null
54
+ */
23
55
  this.colorNode = colorNode;
24
56
 
25
57
  }
26
58
 
27
- getCacheKey() {
59
+ /**
60
+ * Overwrites the default `customCacheKey()` implementation by including the tone
61
+ * mapping type into the cache key.
62
+ *
63
+ * @return {Number} The hash.
64
+ */
65
+ customCacheKey() {
28
66
 
29
- return hash( super.getCacheKey(), this.toneMapping );
67
+ return hash( this.toneMapping );
30
68
 
31
69
  }
32
70
 
@@ -61,7 +99,22 @@ class ToneMappingNode extends TempNode {
61
99
 
62
100
  export default ToneMappingNode;
63
101
 
102
+ /**
103
+ * TSL function for creating a tone mapping node.
104
+ *
105
+ * @function
106
+ * @param {Number} mapping - The tone mapping type.
107
+ * @param {Node<float> | Number} exposure - The tone mapping exposure.
108
+ * @param {Node<vec3> | Color} color - The color node to process.
109
+ * @returns {ToneMappingNode<vec3>}
110
+ */
64
111
  export const toneMapping = ( mapping, exposure, color ) => nodeObject( new ToneMappingNode( mapping, nodeObject( exposure ), nodeObject( color ) ) );
112
+
113
+ /**
114
+ * TSL object that represents the global tone mapping exposure of the renderer.
115
+ *
116
+ * @type {RendererReferenceNode<vec3>}
117
+ */
65
118
  export const toneMappingExposure = /*@__PURE__*/ rendererReference( 'toneMappingExposure', 'float' );
66
119
 
67
120
  addMethodChaining( 'toneMapping', ( color, mapping, exposure ) => toneMapping( mapping, exposure, color ) );
@@ -8,6 +8,22 @@ import { normalLocal } from '../../nodes/accessors/Normal.js';
8
8
  import { BackSide } from '../../constants.js';
9
9
  import PassNode from './PassNode.js';
10
10
 
11
+ /** @module ToonOutlinePassNode **/
12
+
13
+ /**
14
+ * Represents a render pass for producing a toon outline effect on compatible objects.
15
+ * Only 3D objects with materials of type `MeshToonMaterial` and `MeshToonNodeMaterial`
16
+ * will receive the outline.
17
+ *
18
+ * ```js
19
+ * const postProcessing = new PostProcessing( renderer );
20
+ *
21
+ * const scenePass = toonOutlinePass( scene, camera );
22
+ *
23
+ * postProcessing.outputNode = scenePass;
24
+ * ```
25
+ * @augments PassNode
26
+ */
11
27
  class ToonOutlinePassNode extends PassNode {
12
28
 
13
29
  static get type() {
@@ -16,14 +32,46 @@ class ToonOutlinePassNode extends PassNode {
16
32
 
17
33
  }
18
34
 
35
+ /**
36
+ * Constructs a new outline pass node.
37
+ *
38
+ * @param {Scene} scene - A reference to the scene.
39
+ * @param {Camera} camera - A reference to the camera.
40
+ * @param {Node} colorNode - Defines the outline's color.
41
+ * @param {Node} thicknessNode - Defines the outline's thickness.
42
+ * @param {Node} alphaNode - Defines the outline's alpha.
43
+ */
19
44
  constructor( scene, camera, colorNode, thicknessNode, alphaNode ) {
20
45
 
21
46
  super( PassNode.COLOR, scene, camera );
22
47
 
48
+ /**
49
+ * Defines the outline's color.
50
+ *
51
+ * @type {Node}
52
+ */
23
53
  this.colorNode = colorNode;
54
+
55
+ /**
56
+ * Defines the outline's thickness.
57
+ *
58
+ * @type {Node}
59
+ */
24
60
  this.thicknessNode = thicknessNode;
61
+
62
+ /**
63
+ * Defines the outline's alpha.
64
+ *
65
+ * @type {Node}
66
+ */
25
67
  this.alphaNode = alphaNode;
26
68
 
69
+ /**
70
+ * An internal material cache.
71
+ *
72
+ * @private
73
+ * @type {WeakMap<Material, NodeMaterial>}
74
+ */
27
75
  this._materialCache = new WeakMap();
28
76
 
29
77
  }
@@ -61,6 +109,12 @@ class ToonOutlinePassNode extends PassNode {
61
109
 
62
110
  }
63
111
 
112
+ /**
113
+ * Creates the material used for outline rendering.
114
+ *
115
+ * @private
116
+ * @return {NodeMaterial} The outline material.
117
+ */
64
118
  _createMaterial() {
65
119
 
66
120
  const material = new NodeMaterial();
@@ -88,6 +142,14 @@ class ToonOutlinePassNode extends PassNode {
88
142
 
89
143
  }
90
144
 
145
+ /**
146
+ * For the given toon material, this method returns a corresponding
147
+ * outline material.
148
+ *
149
+ * @private
150
+ * @param {(MeshToonMaterial|MeshToonNodeMaterial)} originalMaterial - The toon material.
151
+ * @return {NodeMaterial} The outline material.
152
+ */
91
153
  _getOutlineMaterial( originalMaterial ) {
92
154
 
93
155
  let outlineMaterial = this._materialCache.get( originalMaterial );
@@ -108,4 +170,15 @@ class ToonOutlinePassNode extends PassNode {
108
170
 
109
171
  export default ToonOutlinePassNode;
110
172
 
173
+ /**
174
+ * TSL function for creating a toon outline pass node.
175
+ *
176
+ * @function
177
+ * @param {Scene} scene - A reference to the scene.
178
+ * @param {Camera} camera - A reference to the camera.
179
+ * @param {Color} color - Defines the outline's color.
180
+ * @param {Number} [thickness=0.003] - Defines the outline's thickness.
181
+ * @param {Number} [alpha=1] - Defines the outline's alpha.
182
+ * @returns {ToonOutlinePassNode}
183
+ */
111
184
  export const toonOutlinePass = ( scene, camera, color = new Color( 0, 0, 0 ), thickness = 0.003, alpha = 1 ) => nodeObject( new ToonOutlinePassNode( scene, camera, nodeObject( color ), nodeObject( thickness ), nodeObject( alpha ) ) );