super-three 0.171.0 → 0.172.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (413) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +157 -49
  3. package/build/three.core.js +104 -42
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +53 -8
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +10 -5
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +21191 -1008
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +21189 -1008
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -5
  14. package/examples/jsm/animation/CCDIKSolver.js +3 -2
  15. package/examples/jsm/controls/ArcballControls.js +28 -19
  16. package/examples/jsm/controls/OrbitControls.js +5 -4
  17. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  18. package/examples/jsm/curves/NURBSCurve.js +1 -1
  19. package/examples/jsm/curves/NURBSUtils.js +3 -0
  20. package/examples/jsm/effects/OutlineEffect.js +1 -1
  21. package/examples/jsm/exporters/GLTFExporter.js +11 -7
  22. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  23. package/examples/jsm/exporters/PLYExporter.js +2 -2
  24. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  25. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  26. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  27. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  28. package/examples/jsm/loaders/3MFLoader.js +6 -3
  29. package/examples/jsm/loaders/BVHLoader.js +1 -1
  30. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  31. package/examples/jsm/loaders/DDSLoader.js +42 -0
  32. package/examples/jsm/loaders/GCodeLoader.js +1 -1
  33. package/examples/jsm/loaders/GLTFLoader.js +22 -2
  34. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  35. package/examples/jsm/loaders/KTXLoader.js +4 -4
  36. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  37. package/examples/jsm/loaders/LottieLoader.js +1 -1
  38. package/examples/jsm/loaders/MTLLoader.js +1 -0
  39. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  40. package/examples/jsm/loaders/PLYLoader.js +7 -7
  41. package/examples/jsm/loaders/PVRLoader.js +1 -1
  42. package/examples/jsm/loaders/SVGLoader.js +2 -2
  43. package/examples/jsm/loaders/TDSLoader.js +1 -1
  44. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  45. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  46. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  47. package/examples/jsm/math/ConvexHull.js +1 -1
  48. package/examples/jsm/math/OBB.js +17 -0
  49. package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
  50. package/examples/jsm/misc/Volume.js +20 -12
  51. package/examples/jsm/misc/VolumeSlice.js +2 -2
  52. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  53. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  54. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  55. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  56. package/examples/jsm/objects/Sky.js +2 -2
  57. package/examples/jsm/objects/SkyMesh.js +3 -3
  58. package/examples/jsm/objects/Water2.js +1 -1
  59. package/examples/jsm/objects/Water2Mesh.js +2 -2
  60. package/examples/jsm/objects/WaterMesh.js +4 -4
  61. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  62. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  63. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  64. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  65. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  66. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  67. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  68. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  69. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  70. package/examples/jsm/shaders/BokehShader2.js +1 -1
  71. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  72. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  73. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  74. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  75. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  76. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  77. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  78. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  79. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  80. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  81. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  82. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  83. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  84. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  85. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  86. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  87. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  88. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  89. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  90. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  91. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  92. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  93. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  94. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  95. package/examples/jsm/tsl/display/Sepia.js +9 -0
  96. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  97. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  98. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  99. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  100. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  101. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  102. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  103. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  104. package/examples/jsm/utils/CameraUtils.js +4 -1
  105. package/examples/jsm/utils/GeometryUtils.js +22 -19
  106. package/examples/jsm/utils/SceneUtils.js +2 -2
  107. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  108. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  109. package/package.json +8 -3
  110. package/src/Three.Core.js +2 -0
  111. package/src/Three.Legacy.js +0 -21
  112. package/src/Three.TSL.js +9 -4
  113. package/src/Three.WebGPU.Nodes.js +2 -2
  114. package/src/Three.WebGPU.js +2 -2
  115. package/src/animation/PropertyBinding.js +2 -2
  116. package/src/cameras/PerspectiveCamera.js +18 -2
  117. package/src/constants.js +1 -1
  118. package/src/core/RenderTarget.js +18 -0
  119. package/src/core/RenderTarget3D.js +22 -0
  120. package/src/core/RenderTargetArray.js +22 -0
  121. package/src/extras/Earcut.js +1 -1
  122. package/src/extras/PMREMGenerator.js +20 -0
  123. package/src/extras/TextureUtils.js +6 -0
  124. package/src/helpers/CameraHelper.js +16 -13
  125. package/src/loaders/nodes/NodeLoader.js +59 -0
  126. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  127. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  128. package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
  129. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  130. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  131. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  132. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  133. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  134. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  135. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  136. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  137. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  138. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  139. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  140. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  141. package/src/materials/nodes/NodeMaterial.js +474 -21
  142. package/src/materials/nodes/PointsNodeMaterial.js +22 -13
  143. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  144. package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
  145. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  146. package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
  147. package/src/nodes/Nodes.js +1 -6
  148. package/src/nodes/TSL.js +2 -3
  149. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  150. package/src/nodes/accessors/Arrays.js +24 -5
  151. package/src/nodes/accessors/BatchNode.js +39 -3
  152. package/src/nodes/accessors/Bitangent.js +37 -0
  153. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  154. package/src/nodes/accessors/BufferNode.js +63 -0
  155. package/src/nodes/accessors/BuiltinNode.js +38 -0
  156. package/src/nodes/accessors/Camera.js +49 -0
  157. package/src/nodes/accessors/ClippingNode.js +71 -2
  158. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  159. package/src/nodes/accessors/InstanceNode.js +85 -2
  160. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  161. package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
  162. package/src/nodes/accessors/Lights.js +50 -1
  163. package/src/nodes/accessors/MaterialNode.js +302 -8
  164. package/src/nodes/accessors/MaterialProperties.js +7 -0
  165. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  166. package/src/nodes/accessors/ModelNode.js +100 -5
  167. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  168. package/src/nodes/accessors/MorphNode.js +48 -4
  169. package/src/nodes/accessors/Normal.js +59 -3
  170. package/src/nodes/accessors/Object3DNode.js +102 -1
  171. package/src/nodes/accessors/PointUVNode.js +26 -0
  172. package/src/nodes/accessors/Position.js +53 -4
  173. package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
  174. package/src/nodes/accessors/ReferenceNode.js +202 -2
  175. package/src/nodes/accessors/ReflectVector.js +24 -0
  176. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  177. package/src/nodes/accessors/SceneNode.js +54 -0
  178. package/src/nodes/accessors/SkinningNode.js +127 -1
  179. package/src/nodes/accessors/StorageBufferNode.js +168 -4
  180. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  181. package/src/nodes/accessors/Tangent.js +36 -0
  182. package/src/nodes/accessors/Texture3DNode.js +89 -5
  183. package/src/nodes/accessors/TextureBicubic.js +12 -2
  184. package/src/nodes/accessors/TextureNode.js +309 -10
  185. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  186. package/src/nodes/accessors/UV.js +10 -1
  187. package/src/nodes/accessors/UniformArrayNode.js +223 -23
  188. package/src/nodes/accessors/UserDataNode.js +46 -0
  189. package/src/nodes/accessors/VelocityNode.js +82 -0
  190. package/src/nodes/accessors/VertexColorNode.js +39 -2
  191. package/src/nodes/code/CodeNode.js +95 -1
  192. package/src/nodes/code/ExpressionNode.js +28 -0
  193. package/src/nodes/code/FunctionCallNode.js +37 -0
  194. package/src/nodes/code/FunctionNode.js +45 -0
  195. package/src/nodes/code/ScriptableNode.js +223 -1
  196. package/src/nodes/code/ScriptableValueNode.js +85 -1
  197. package/src/nodes/core/AssignNode.js +48 -2
  198. package/src/nodes/core/AttributeNode.js +43 -0
  199. package/src/nodes/core/BypassNode.js +47 -2
  200. package/src/nodes/core/CacheNode.js +53 -2
  201. package/src/nodes/core/ConstNode.js +24 -0
  202. package/src/nodes/core/ContextNode.js +65 -0
  203. package/src/nodes/core/IndexNode.js +68 -7
  204. package/src/nodes/core/InputNode.js +48 -0
  205. package/src/nodes/core/LightingModel.js +60 -0
  206. package/src/nodes/core/MRTNode.js +66 -0
  207. package/src/nodes/core/Node.js +337 -12
  208. package/src/nodes/core/NodeAttribute.js +38 -0
  209. package/src/nodes/core/NodeBuilder.js +945 -15
  210. package/src/nodes/core/NodeCache.js +41 -2
  211. package/src/nodes/core/NodeCode.js +31 -0
  212. package/src/nodes/core/NodeFrame.js +123 -2
  213. package/src/nodes/core/NodeFunction.js +46 -0
  214. package/src/nodes/core/NodeFunctionInput.js +44 -0
  215. package/src/nodes/core/NodeParser.js +11 -0
  216. package/src/nodes/core/NodeUniform.js +52 -0
  217. package/src/nodes/core/NodeUtils.js +141 -0
  218. package/src/nodes/core/NodeVar.js +30 -0
  219. package/src/nodes/core/NodeVarying.js +28 -0
  220. package/src/nodes/core/OutputStructNode.js +33 -2
  221. package/src/nodes/core/ParameterNode.js +28 -0
  222. package/src/nodes/core/PropertyNode.js +232 -0
  223. package/src/nodes/core/StackNode.js +78 -0
  224. package/src/nodes/core/StructTypeNode.js +39 -1
  225. package/src/nodes/core/TempNode.js +30 -4
  226. package/src/nodes/core/UniformGroupNode.js +82 -7
  227. package/src/nodes/core/UniformNode.js +66 -0
  228. package/src/nodes/core/VarNode.js +52 -0
  229. package/src/nodes/core/VaryingNode.js +83 -2
  230. package/src/nodes/core/constants.js +36 -0
  231. package/src/nodes/display/BumpMapNode.js +37 -0
  232. package/src/nodes/display/ColorAdjustment.js +53 -11
  233. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  234. package/src/nodes/display/ColorSpaceNode.js +82 -0
  235. package/src/nodes/display/FrontFacingNode.js +29 -0
  236. package/src/nodes/display/NormalMapNode.js +43 -0
  237. package/src/nodes/display/PassNode.js +298 -7
  238. package/src/nodes/display/PosterizeNode.js +33 -0
  239. package/src/nodes/display/RenderOutputNode.js +66 -1
  240. package/src/nodes/display/ScreenNode.js +87 -0
  241. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  242. package/src/nodes/display/ToneMappingNode.js +55 -2
  243. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  244. package/src/nodes/display/ViewportDepthNode.js +122 -8
  245. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  246. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  247. package/src/nodes/display/ViewportTextureNode.js +57 -0
  248. package/src/nodes/fog/Fog.js +93 -0
  249. package/src/nodes/functions/BasicLightingModel.js +24 -0
  250. package/src/nodes/functions/PhongLightingModel.js +34 -2
  251. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  252. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  253. package/src/nodes/functions/ToonLightingModel.js +20 -0
  254. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  255. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  256. package/src/nodes/geometry/RangeNode.js +54 -2
  257. package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
  258. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  259. package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
  260. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  261. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  262. package/src/nodes/lighting/AONode.js +18 -0
  263. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  264. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  265. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  266. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  267. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  268. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  269. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  270. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  271. package/src/nodes/lighting/IrradianceNode.js +17 -0
  272. package/src/nodes/lighting/LightProbeNode.js +20 -0
  273. package/src/nodes/lighting/LightUtils.js +12 -0
  274. package/src/nodes/lighting/LightingContextNode.js +48 -0
  275. package/src/nodes/lighting/LightingNode.js +15 -6
  276. package/src/nodes/lighting/LightsNode.js +132 -1
  277. package/src/nodes/lighting/PointLightNode.js +32 -1
  278. package/src/nodes/lighting/PointShadowNode.js +54 -1
  279. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  280. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  281. package/src/nodes/lighting/ShadowNode.js +240 -34
  282. package/src/nodes/lighting/SpotLightNode.js +43 -0
  283. package/src/nodes/math/ConditionalNode.js +70 -3
  284. package/src/nodes/math/Hash.js +9 -0
  285. package/src/nodes/math/MathNode.js +614 -11
  286. package/src/nodes/math/MathUtils.js +45 -1
  287. package/src/nodes/math/OperatorNode.js +233 -0
  288. package/src/nodes/math/TriNoise3D.js +18 -7
  289. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  290. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  291. package/src/nodes/pmrem/PMREMNode.js +133 -0
  292. package/src/nodes/pmrem/PMREMUtils.js +1 -1
  293. package/src/nodes/procedural/Checker.js +9 -0
  294. package/src/nodes/tsl/TSLBase.js +2 -2
  295. package/src/nodes/utils/ArrayElementNode.js +38 -2
  296. package/src/nodes/utils/ConvertNode.js +31 -0
  297. package/src/nodes/utils/CubeMapNode.js +78 -0
  298. package/src/nodes/utils/Discard.js +16 -0
  299. package/src/nodes/utils/EquirectUVNode.js +31 -1
  300. package/src/nodes/utils/FlipNode.js +38 -0
  301. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  302. package/src/nodes/utils/JoinNode.js +25 -0
  303. package/src/nodes/utils/LoopNode.js +74 -1
  304. package/src/nodes/utils/MatcapUVNode.js +17 -0
  305. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  306. package/src/nodes/utils/Oscillators.js +33 -0
  307. package/src/nodes/utils/Packing.js +17 -0
  308. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  309. package/src/nodes/utils/RTTNode.js +123 -2
  310. package/src/nodes/utils/ReflectorNode.js +174 -4
  311. package/src/nodes/utils/RemapNode.js +79 -0
  312. package/src/nodes/utils/RotateNode.js +41 -0
  313. package/src/nodes/utils/SetNode.js +44 -1
  314. package/src/nodes/utils/SplitNode.js +55 -3
  315. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  316. package/src/nodes/utils/SpriteUtils.js +17 -0
  317. package/src/nodes/utils/StorageArrayElementNode.js +40 -0
  318. package/src/nodes/utils/Timer.js +19 -0
  319. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  320. package/src/nodes/utils/UVUtils.js +20 -0
  321. package/src/nodes/utils/ViewportUtils.js +13 -0
  322. package/src/objects/BatchedMesh.js +1 -2
  323. package/src/objects/ClippingGroup.js +49 -0
  324. package/src/renderers/WebGLRenderer.js +23 -4
  325. package/src/renderers/common/Animation.js +63 -0
  326. package/src/renderers/common/Attributes.js +36 -0
  327. package/src/renderers/common/Backend.js +467 -52
  328. package/src/renderers/common/Background.js +34 -1
  329. package/src/renderers/common/BindGroup.js +43 -0
  330. package/src/renderers/common/Binding.js +35 -0
  331. package/src/renderers/common/Bindings.js +93 -1
  332. package/src/renderers/common/Buffer.js +49 -0
  333. package/src/renderers/common/BufferUtils.js +27 -0
  334. package/src/renderers/common/BundleGroup.js +57 -0
  335. package/src/renderers/common/ChainMap.js +38 -1
  336. package/src/renderers/common/ClippingContext.js +107 -14
  337. package/src/renderers/common/Color4.js +36 -0
  338. package/src/renderers/common/ComputePipeline.js +24 -0
  339. package/src/renderers/common/CubeRenderTarget.js +13 -0
  340. package/src/renderers/common/DataMap.js +37 -1
  341. package/src/renderers/common/Geometries.js +98 -0
  342. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  343. package/src/renderers/common/Info.js +87 -0
  344. package/src/renderers/common/Lighting.js +26 -0
  345. package/src/renderers/common/Pipeline.js +22 -0
  346. package/src/renderers/common/Pipelines.js +148 -5
  347. package/src/renderers/common/PostProcessing.js +75 -3
  348. package/src/renderers/common/ProgrammableStage.js +60 -2
  349. package/src/renderers/common/QuadMesh.js +54 -5
  350. package/src/renderers/common/RenderBundle.js +14 -8
  351. package/src/renderers/common/RenderBundles.js +33 -10
  352. package/src/renderers/common/RenderContext.js +169 -4
  353. package/src/renderers/common/RenderContexts.js +42 -2
  354. package/src/renderers/common/RenderList.js +178 -0
  355. package/src/renderers/common/RenderLists.js +31 -0
  356. package/src/renderers/common/RenderObject.js +328 -4
  357. package/src/renderers/common/RenderObjects.js +101 -7
  358. package/src/renderers/common/RenderPipeline.js +24 -0
  359. package/src/renderers/common/Renderer.js +1096 -31
  360. package/src/renderers/common/RendererUtils.js +193 -0
  361. package/src/renderers/common/SampledTexture.js +121 -0
  362. package/src/renderers/common/Sampler.js +30 -0
  363. package/src/renderers/common/StorageBuffer.js +24 -0
  364. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  365. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  366. package/src/renderers/common/StorageTexture.js +38 -0
  367. package/src/renderers/common/Textures.js +83 -0
  368. package/src/renderers/common/Uniform.js +188 -2
  369. package/src/renderers/common/UniformBuffer.js +19 -0
  370. package/src/renderers/common/UniformsGroup.js +139 -2
  371. package/src/renderers/common/extras/PMREMGenerator.js +24 -3
  372. package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
  373. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  374. package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
  375. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  376. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  377. package/src/renderers/common/nodes/NodeUniform.js +189 -0
  378. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  379. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  380. package/src/renderers/common/nodes/Nodes.js +327 -60
  381. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  382. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  383. package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
  384. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
  385. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
  386. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
  387. package/src/renderers/webgpu/WebGPUBackend.js +480 -49
  388. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
  389. package/src/renderers/webgpu/WebGPURenderer.js +35 -0
  390. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  391. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  392. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
  393. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  394. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  395. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
  396. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
  397. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
  398. package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
  399. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  400. package/src/renderers/webxr/WebXRManager.js +7 -1
  401. package/src/textures/Data3DTexture.js +2 -2
  402. package/src/textures/Texture.js +4 -0
  403. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  404. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  405. package/examples/jsm/exporters/MMDExporter.js +0 -223
  406. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  407. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  408. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  409. package/src/nodes/core/UniformGroup.js +0 -13
  410. package/src/nodes/fog/FogExp2Node.js +0 -35
  411. package/src/nodes/fog/FogNode.js +0 -50
  412. package/src/nodes/fog/FogRangeNode.js +0 -36
  413. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -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,15 +190,55 @@ 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
@@ -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 ) ) );
@@ -4,6 +4,15 @@ import { cameraNear, cameraFar } from '../accessors/Camera.js';
4
4
  import { positionView } from '../accessors/Position.js';
5
5
  import { viewportDepthTexture } from './ViewportDepthTextureNode.js';
6
6
 
7
+ /** @module ViewportDepthNode **/
8
+
9
+ /**
10
+ * This node offers a collection of features in context of the depth logic in the fragment shader.
11
+ * Depending on {@link ViewportDepthNode#scope}, it can be used to define a depth value for the current
12
+ * fragment or for depth evaluation purposes.
13
+ *
14
+ * @augments Node
15
+ */
7
16
  class ViewportDepthNode extends Node {
8
17
 
9
18
  static get type() {
@@ -12,13 +21,44 @@ class ViewportDepthNode extends Node {
12
21
 
13
22
  }
14
23
 
24
+ /**
25
+ * Constructs a new viewport depth node.
26
+ *
27
+ * @param {('depth'|'depthBase'|'linearDepth')} scope - The node's scope.
28
+ * @param {Node?} [valueNode=null] - The value node.
29
+ */
15
30
  constructor( scope, valueNode = null ) {
16
31
 
17
32
  super( 'float' );
18
33
 
34
+ /**
35
+ * The node behaves differently depending on which scope is selected.
36
+ *
37
+ * - `ViewportDepthNode.DEPTH_BASE`: Allows to define a value for the current fragment's depth.
38
+ * - `ViewportDepthNode.DEPTH`: Represents the depth value for the current fragment (`valueNode` is ignored).
39
+ * - `ViewportDepthNode.LINEAR_DEPTH`: Represents the linear (orthographic) depth value of the current fragment.
40
+ * If a `valueNode` is set, the scope can be used to convert perspective depth data to linear data.
41
+ *
42
+ * @type {('depth'|'depthBase'|'linearDepth')}
43
+ */
19
44
  this.scope = scope;
45
+
46
+ /**
47
+ * Can be used to define a custom depth value.
48
+ * The property is ignored in the `ViewportDepthNode.DEPTH` scope.
49
+ *
50
+ * @type {Node?}
51
+ * @default null
52
+ */
20
53
  this.valueNode = valueNode;
21
54
 
55
+ /**
56
+ * This flag can be used for type testing.
57
+ *
58
+ * @type {Boolean}
59
+ * @readonly
60
+ * @default true
61
+ */
22
62
  this.isViewportDepthNode = true;
23
63
 
24
64
  }
@@ -102,21 +142,61 @@ export default ViewportDepthNode;
102
142
 
103
143
  // NOTE: viewZ, the z-coordinate in camera space, is negative for points in front of the camera
104
144
 
105
- // -near maps to 0; -far maps to 1
145
+ /**
146
+ * TSL function for converting a viewZ value to an orthographic depth value.
147
+ *
148
+ * @function
149
+ * @param {Node<float>} viewZ - The viewZ node.
150
+ * @param {Node<float>} near - The camera's near value.
151
+ * @param {Node<float>} far - The camera's far value.
152
+ * @returns {Node<float>}
153
+ */
106
154
  export const viewZToOrthographicDepth = ( viewZ, near, far ) => viewZ.add( near ).div( near.sub( far ) );
107
155
 
108
- // maps orthographic depth in [ 0, 1 ] to viewZ
156
+ /**
157
+ * TSL function for converting an orthographic depth value to a viewZ value.
158
+ *
159
+ * @function
160
+ * @param {Node<float>} depth - The orthographic depth.
161
+ * @param {Node<float>} near - The camera's near value.
162
+ * @param {Node<float>} far - The camera's far value.
163
+ * @returns {Node<float>}
164
+ */
109
165
  export const orthographicDepthToViewZ = ( depth, near, far ) => near.sub( far ).mul( depth ).sub( near );
110
166
 
111
- // NOTE: https://twitter.com/gonnavis/status/1377183786949959682
112
-
113
- // -near maps to 0; -far maps to 1
167
+ /**
168
+ * TSL function for converting a viewZ value to a perspective depth value.
169
+ *
170
+ * Note: {link https://twitter.com/gonnavis/status/1377183786949959682}.
171
+ *
172
+ * @function
173
+ * @param {Node<float>} viewZ - The viewZ node.
174
+ * @param {Node<float>} near - The camera's near value.
175
+ * @param {Node<float>} far - The camera's far value.
176
+ * @returns {Node<float>}
177
+ */
114
178
  export const viewZToPerspectiveDepth = ( viewZ, near, far ) => near.add( viewZ ).mul( far ).div( far.sub( near ).mul( viewZ ) );
115
179
 
116
- // maps perspective depth in [ 0, 1 ] to viewZ
180
+ /**
181
+ * TSL function for converting a perspective depth value to a viewZ value.
182
+ *
183
+ * @function
184
+ * @param {Node<float>} depth - The perspective depth.
185
+ * @param {Node<float>} near - The camera's near value.
186
+ * @param {Node<float>} far - The camera's far value.
187
+ * @returns {Node<float>}
188
+ */
117
189
  export const perspectiveDepthToViewZ = ( depth, near, far ) => near.mul( far ).div( far.sub( near ).mul( depth ).sub( far ) );
118
190
 
119
- // -near maps to 0; -far maps to 1
191
+ /**
192
+ * TSL function for converting a viewZ value to a logarithmic depth value.
193
+ *
194
+ * @function
195
+ * @param {Node<float>} viewZ - The viewZ node.
196
+ * @param {Node<float>} near - The camera's near value.
197
+ * @param {Node<float>} far - The camera's far value.
198
+ * @returns {Node<float>}
199
+ */
120
200
  export const viewZToLogarithmicDepth = ( viewZ, near, far ) => {
121
201
 
122
202
  // NOTE: viewZ must be negative--see explanation at the end of this comment block.
@@ -152,7 +232,15 @@ export const viewZToLogarithmicDepth = ( viewZ, near, far ) => {
152
232
 
153
233
  };
154
234
 
155
- // maps logarithmic depth in [ 0, 1 ] to viewZ
235
+ /**
236
+ * TSL function for converting a logarithmic depth value to a viewZ value.
237
+ *
238
+ * @function
239
+ * @param {Node<float>} depth - The logarithmic depth.
240
+ * @param {Node<float>} near - The camera's near value.
241
+ * @param {Node<float>} far - The camera's far value.
242
+ * @returns {Node<float>}
243
+ */
156
244
  export const logarithmicDepthToViewZ = ( depth, near, far ) => {
157
245
 
158
246
  // NOTE: we add a 'negate()' call to the return value here to maintain consistency with
@@ -163,10 +251,36 @@ export const logarithmicDepthToViewZ = ( depth, near, far ) => {
163
251
 
164
252
  };
165
253
 
254
+ /**
255
+ * TSL function for defining a value for the current fragment's depth.
256
+ *
257
+ * @function
258
+ * @param {Node<float>} value - The depth value to set.
259
+ * @returns {ViewportDepthNode<float>}
260
+ */
166
261
  const depthBase = /*@__PURE__*/ nodeProxy( ViewportDepthNode, ViewportDepthNode.DEPTH_BASE );
167
262
 
263
+ /**
264
+ * TSL object that represents the depth value for the current fragment.
265
+ *
266
+ * @type {ViewportDepthNode}
267
+ */
168
268
  export const depth = /*@__PURE__*/ nodeImmutable( ViewportDepthNode, ViewportDepthNode.DEPTH );
269
+
270
+ /**
271
+ * TSL function for converting a perspective depth value to linear depth.
272
+ *
273
+ * @function
274
+ * @param {Node<float>} value - The perspective depth.
275
+ * @returns {ViewportDepthNode<float>}
276
+ */
169
277
  export const linearDepth = /*@__PURE__*/ nodeProxy( ViewportDepthNode, ViewportDepthNode.LINEAR_DEPTH );
278
+
279
+ /**
280
+ * TSL object that represents the linear (orthographic) depth value of the current fragment
281
+ *
282
+ * @type {ViewportDepthNode}
283
+ */
170
284
  export const viewportLinearDepth = /*@__PURE__*/ linearDepth( viewportDepthTexture() );
171
285
 
172
286
  depth.assign = ( value ) => depthBase( value );
@@ -4,8 +4,17 @@ import { screenUV } from './ScreenNode.js';
4
4
 
5
5
  import { DepthTexture } from '../../textures/DepthTexture.js';
6
6
 
7
+ /** @module ViewportDepthTextureNode **/
8
+
7
9
  let sharedDepthbuffer = null;
8
10
 
11
+ /**
12
+ * Represents the depth of the current viewport as a texture. This module
13
+ * can be used in combination with viewport texture to achieve effects
14
+ * that require depth evaluation.
15
+ *
16
+ * @augments module:ViewportTextureNode~ViewportTextureNode
17
+ */
9
18
  class ViewportDepthTextureNode extends ViewportTextureNode {
10
19
 
11
20
  static get type() {
@@ -14,6 +23,12 @@ class ViewportDepthTextureNode extends ViewportTextureNode {
14
23
 
15
24
  }
16
25
 
26
+ /**
27
+ * Constructs a new viewport depth texture node.
28
+ *
29
+ * @param {Node} [uvNode=screenUV] - The uv node.
30
+ * @param {Node?} [levelNode=null] - The level node.
31
+ */
17
32
  constructor( uvNode = screenUV, levelNode = null ) {
18
33
 
19
34
  if ( sharedDepthbuffer === null ) {
@@ -30,4 +45,12 @@ class ViewportDepthTextureNode extends ViewportTextureNode {
30
45
 
31
46
  export default ViewportDepthTextureNode;
32
47
 
48
+ /**
49
+ * TSL function for a viewport depth texture node.
50
+ *
51
+ * @function
52
+ * @param {Node} [uvNode=screenUV] - The uv node.
53
+ * @param {Node?} [levelNode=null] - The level node.
54
+ * @returns {ViewportDepthTextureNode}
55
+ */
33
56
  export const viewportDepthTexture = /*@__PURE__*/ nodeProxy( ViewportDepthTextureNode );