super-three 0.170.1 → 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
@@ -10,8 +10,15 @@ import { Vector2 } from '../../math/Vector2.js';
10
10
  import { DepthTexture } from '../../textures/DepthTexture.js';
11
11
  import { RenderTarget } from '../../core/RenderTarget.js';
12
12
 
13
+ /** @module PassNode **/
14
+
13
15
  const _size = /*@__PURE__*/ new Vector2();
14
16
 
17
+ /**
18
+ * Represents the texture of a pass node.
19
+ *
20
+ * @augments module:TextureNode~TextureNode
21
+ */
15
22
  class PassTextureNode extends TextureNode {
16
23
 
17
24
  static get type() {
@@ -20,10 +27,21 @@ class PassTextureNode extends TextureNode {
20
27
 
21
28
  }
22
29
 
30
+ /**
31
+ * Constructs a new pass texture node.
32
+ *
33
+ * @param {PassNode} passNode - The pass node.
34
+ * @param {Texture} texture - The output texture.
35
+ */
23
36
  constructor( passNode, texture ) {
24
37
 
25
38
  super( texture );
26
39
 
40
+ /**
41
+ * A reference to the pass node.
42
+ *
43
+ * @type {PassNode}
44
+ */
27
45
  this.passNode = passNode;
28
46
 
29
47
  this.setUpdateMatrix( false );
@@ -46,6 +64,12 @@ class PassTextureNode extends TextureNode {
46
64
 
47
65
  }
48
66
 
67
+ /**
68
+ * An extension of `PassTextureNode` which allows to manage more than one
69
+ * internal texture. Relevant for the `getPreviousTexture()` related API.
70
+ *
71
+ * @augments module:PassTextureNode~PassTextureNode
72
+ */
49
73
  class PassMultipleTextureNode extends PassTextureNode {
50
74
 
51
75
  static get type() {
@@ -54,15 +78,40 @@ class PassMultipleTextureNode extends PassTextureNode {
54
78
 
55
79
  }
56
80
 
81
+ /**
82
+ * Constructs a new pass texture node.
83
+ *
84
+ * @param {PassNode} passNode - The pass node.
85
+ * @param {String} textureName - The output texture name.
86
+ * @param {Boolean} [previousTexture=false] - Whether previous frame data should be used or not.
87
+ */
57
88
  constructor( passNode, textureName, previousTexture = false ) {
58
89
 
90
+ // null is passed to the super call since this class does not
91
+ // use an external texture for rendering pass data into. Instead
92
+ // the texture is managed by the pass node itself
93
+
59
94
  super( passNode, null );
60
95
 
96
+ /**
97
+ * The output texture name.
98
+ *
99
+ * @type {String}
100
+ */
61
101
  this.textureName = textureName;
102
+
103
+ /**
104
+ * Whether previous frame data should be used or not.
105
+ *
106
+ * @type {Boolean}
107
+ */
62
108
  this.previousTexture = previousTexture;
63
109
 
64
110
  }
65
111
 
112
+ /**
113
+ * Updates the texture reference of this node.
114
+ */
66
115
  updateTexture() {
67
116
 
68
117
  this.value = this.previousTexture ? this.passNode.getPreviousTexture( this.textureName ) : this.passNode.getTexture( this.textureName );
@@ -85,6 +134,21 @@ class PassMultipleTextureNode extends PassTextureNode {
85
134
 
86
135
  }
87
136
 
137
+ /**
138
+ * Represents a render pass (sometimes called beauty pass) in context of post processing.
139
+ * This pass produces a render for the given scene and camera and can provide multiple outputs
140
+ * via MRT for further processing.
141
+ *
142
+ * ```js
143
+ * const postProcessing = new PostProcessing( renderer );
144
+ *
145
+ * const scenePass = pass( scene, camera );
146
+ *
147
+ * postProcessing.outputNode = scenePass;
148
+ * ```
149
+ *
150
+ * @augments TempNode
151
+ */
88
152
  class PassNode extends TempNode {
89
153
 
90
154
  static get type() {
@@ -93,17 +157,69 @@ class PassNode extends TempNode {
93
157
 
94
158
  }
95
159
 
160
+ /**
161
+ * Constructs a new pass node.
162
+ *
163
+ * @param {('color'|'depth')} scope - The scope of the pass. The scope determines whether the node outputs color or depth.
164
+ * @param {Scene} scene - A reference to the scene.
165
+ * @param {Camera} camera - A reference to the camera.
166
+ * @param {Object} options - Options for the internal render target.
167
+ */
96
168
  constructor( scope, scene, camera, options = {} ) {
97
169
 
98
170
  super( 'vec4' );
99
171
 
172
+ /**
173
+ * The scope of the pass. The scope determines whether the node outputs color or depth.
174
+ *
175
+ * @type {('color'|'depth')}
176
+ */
100
177
  this.scope = scope;
178
+
179
+ /**
180
+ * A reference to the scene.
181
+ *
182
+ * @type {Scene}
183
+ */
101
184
  this.scene = scene;
185
+
186
+ /**
187
+ * A reference to the camera.
188
+ *
189
+ * @type {Camera}
190
+ */
102
191
  this.camera = camera;
192
+
193
+ /**
194
+ * Options for the internal render target.
195
+ *
196
+ * @type {Object}
197
+ */
103
198
  this.options = options;
104
199
 
200
+ /**
201
+ * The pass's pixel ratio. Will be kept automatically kept in sync with the renderer's pixel ratio.
202
+ *
203
+ * @private
204
+ * @type {Number}
205
+ * @default 1
206
+ */
105
207
  this._pixelRatio = 1;
208
+
209
+ /**
210
+ * The pass's pixel width. Will be kept automatically kept in sync with the renderer's width.
211
+ * @private
212
+ * @type {Number}
213
+ * @default 1
214
+ */
106
215
  this._width = 1;
216
+
217
+ /**
218
+ * The pass's pixel height. Will be kept automatically kept in sync with the renderer's height.
219
+ * @private
220
+ * @type {Number}
221
+ * @default 1
222
+ */
107
223
  this._height = 1;
108
224
 
109
225
  const depthTexture = new DepthTexture();
@@ -115,31 +231,117 @@ class PassNode extends TempNode {
115
231
  renderTarget.texture.name = 'output';
116
232
  renderTarget.depthTexture = depthTexture;
117
233
 
234
+ /**
235
+ * The pass's render target.
236
+ *
237
+ * @type {RenderTarget}
238
+ */
118
239
  this.renderTarget = renderTarget;
119
240
 
120
- this.updateBeforeType = NodeUpdateType.FRAME;
121
-
241
+ /**
242
+ * A dictionary holding the internal result textures.
243
+ *
244
+ * @private
245
+ * @type {Object<String, Texture>}
246
+ */
122
247
  this._textures = {
123
248
  output: renderTarget.texture,
124
249
  depth: depthTexture
125
250
  };
126
251
 
252
+ /**
253
+ * A dictionary holding the internal texture nodes.
254
+ *
255
+ * @private
256
+ * @type {Object<String, TextureNode>}
257
+ */
127
258
  this._textureNodes = {};
259
+
260
+ /**
261
+ * A dictionary holding the internal depth nodes.
262
+ *
263
+ * @private
264
+ * @type {Object}
265
+ */
128
266
  this._linearDepthNodes = {};
267
+
268
+ /**
269
+ * A dictionary holding the internal viewZ nodes.
270
+ *
271
+ * @private
272
+ * @type {Object}
273
+ */
129
274
  this._viewZNodes = {};
130
275
 
276
+ /**
277
+ * A dictionary holding the texture data of the previous frame.
278
+ * Used for computing velocity/motion vectors.
279
+ *
280
+ * @private
281
+ * @type {Object<String, Texture>}
282
+ */
131
283
  this._previousTextures = {};
284
+
285
+ /**
286
+ * A dictionary holding the texture nodes of the previous frame.
287
+ * Used for computing velocity/motion vectors.
288
+ *
289
+ * @private
290
+ * @type {Object<String, TextureNode>}
291
+ */
132
292
  this._previousTextureNodes = {};
133
293
 
294
+ /**
295
+ * The `near` property of the camera as a uniform.
296
+ *
297
+ * @private
298
+ * @type {UniformNode}
299
+ */
134
300
  this._cameraNear = uniform( 0 );
301
+
302
+ /**
303
+ * The `far` property of the camera as a uniform.
304
+ *
305
+ * @private
306
+ * @type {UniformNode}
307
+ */
135
308
  this._cameraFar = uniform( 0 );
136
309
 
310
+ /**
311
+ * A MRT node configuring the MRT settings.
312
+ *
313
+ * @private
314
+ * @type {MRTNode?}
315
+ * @default null
316
+ */
137
317
  this._mrt = null;
138
318
 
319
+ /**
320
+ * This flag can be used for type testing.
321
+ *
322
+ * @type {Boolean}
323
+ * @readonly
324
+ * @default true
325
+ */
139
326
  this.isPassNode = true;
140
327
 
328
+ /**
329
+ * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders the
330
+ * scene once per frame in its {@link PassNode#updateBefore} method.
331
+ *
332
+ * @type {String}
333
+ * @default 'frame'
334
+ */
335
+ this.updateBeforeType = NodeUpdateType.FRAME;
336
+
141
337
  }
142
338
 
339
+ /**
340
+ * Sets the given MRT node to setup MRT for this pass.
341
+ *
342
+ * @param {MRTNode} mrt - The MRT object.
343
+ * @return {PassNode} A reference to this pass.
344
+ */
143
345
  setMRT( mrt ) {
144
346
 
145
347
  this._mrt = mrt;
@@ -148,18 +350,34 @@ class PassNode extends TempNode {
148
350
 
149
351
  }
150
352
 
353
+ /**
354
+ * Returns the current MRT node.
355
+ *
356
+ * @return {MRTNode} The current MRT node.
357
+ */
151
358
  getMRT() {
152
359
 
153
360
  return this._mrt;
154
361
 
155
362
  }
156
363
 
364
+ /**
365
+ * The method is overwritten so it always returns `true`.
366
+ *
367
+ * @return {Boolean} Whether this node is global or not.
368
+ */
157
369
  isGlobal() {
158
370
 
159
371
  return true;
160
372
 
161
373
  }
162
374
 
375
+ /**
376
+ * Returns the texture for the given output name.
377
+ *
378
+ * @param {String} name - The output name to get the texture for.
379
+ * @return {Texture} The texture.
380
+ */
163
381
  getTexture( name ) {
164
382
 
165
383
  let texture = this._textures[ name ];
@@ -169,7 +387,6 @@ class PassNode extends TempNode {
169
387
  const refTexture = this.renderTarget.texture;
170
388
 
171
389
  texture = refTexture.clone();
172
- texture.isRenderTargetTexture = true;
173
390
  texture.name = name;
174
391
 
175
392
  this._textures[ name ] = texture;
@@ -182,6 +399,12 @@ class PassNode extends TempNode {
182
399
 
183
400
  }
184
401
 
402
+ /**
403
+ * Returns the texture holding the data of the previous frame for the given output name.
404
+ *
405
+ * @param {String} name - The output name to get the texture for.
406
+ * @return {Texture} The texture holding the data of the previous frame.
407
+ */
185
408
  getPreviousTexture( name ) {
186
409
 
187
410
  let texture = this._previousTextures[ name ];
@@ -189,7 +412,6 @@ class PassNode extends TempNode {
189
412
  if ( texture === undefined ) {
190
413
 
191
414
  texture = this.getTexture( name ).clone();
192
- texture.isRenderTargetTexture = true;
193
415
 
194
416
  this._previousTextures[ name ] = texture;
195
417
 
@@ -199,6 +421,11 @@ class PassNode extends TempNode {
199
421
 
200
422
  }
201
423
 
424
+ /**
425
+ * Switches current and previous textures for the given output name.
426
+ *
427
+ * @param {String} name - The output name.
428
+ */
202
429
  toggleTexture( name ) {
203
430
 
204
431
  const prevTexture = this._previousTextures[ name ];
@@ -220,6 +447,12 @@ class PassNode extends TempNode {
220
447
 
221
448
  }
222
449
 
450
+ /**
451
+ * Returns the texture node for the given output name.
452
+ *
453
+ * @param {String} [name='output'] - The output name to get the texture node for.
454
+ * @return {TextureNode} The texture node.
455
+ */
223
456
  getTextureNode( name = 'output' ) {
224
457
 
225
458
  let textureNode = this._textureNodes[ name ];
@@ -236,6 +469,12 @@ class PassNode extends TempNode {
236
469
 
237
470
  }
238
471
 
472
+ /**
473
+ * Returns the previous texture node for the given output name.
474
+ *
475
+ * @param {String} [name='output'] - The output name to get the previous texture node for.
476
+ * @return {TextureNode} The previous texture node.
477
+ */
239
478
  getPreviousTextureNode( name = 'output' ) {
240
479
 
241
480
  let textureNode = this._previousTextureNodes[ name ];
@@ -254,6 +493,12 @@ class PassNode extends TempNode {
254
493
 
255
494
  }
256
495
 
496
+ /**
497
+ * Returns a viewZ node of this pass.
498
+ *
499
+ * @param {String} [name='depth'] - The output name to get the viewZ node for. In most cases the default `'depth'` can be used however the parameter exists for custom depth outputs.
500
+ * @return {Node} The viewZ node.
501
+ */
257
502
  getViewZNode( name = 'depth' ) {
258
503
 
259
504
  let viewZNode = this._viewZNodes[ name ];
@@ -271,6 +516,12 @@ class PassNode extends TempNode {
271
516
 
272
517
  }
273
518
 
519
+ /**
520
+ * Returns a linear depth node of this pass.
521
+ *
522
+ * @param {String} [name='depth'] - The output name to get the linear depth node for. In most cases the default `'depth'` can be used however the parameter exists for custom depth outputs.
523
+ * @return {Node} The linear depth node.
524
+ */
274
525
  getLinearDepthNode( name = 'depth' ) {
275
526
 
276
527
  let linearDepthNode = this._linearDepthNodes[ name ];
@@ -302,8 +553,6 @@ class PassNode extends TempNode {
302
553
 
303
554
  }
304
555
 
305
- this.renderTarget.depthTexture.isMultisampleRenderTargetTexture = this.renderTarget.samples > 1;
306
-
307
556
  return this.scope === PassNode.COLOR ? this.getTextureNode() : this.getLinearDepthNode();
308
557
 
309
558
  }
@@ -341,6 +590,12 @@ class PassNode extends TempNode {
341
590
 
342
591
  }
343
592
 
593
+ /**
594
+ * Sets the size of the pass's render target. Honors the pixel ratio.
595
+ *
596
+ * @param {Number} width - The width to set.
597
+ * @param {Number} height - The height to set.
598
+ */
344
599
  setSize( width, height ) {
345
600
 
346
601
  this._width = width;
@@ -353,6 +608,11 @@ class PassNode extends TempNode {
353
608
 
354
609
  }
355
610
 
611
+ /**
612
+ * Sets the pixel ratio the pass's render target and updates the size.
613
+ *
614
+ * @param {Number} pixelRatio - The pixel ratio to set.
615
+ */
356
616
  setPixelRatio( pixelRatio ) {
357
617
 
358
618
  this._pixelRatio = pixelRatio;
@@ -361,6 +621,9 @@ class PassNode extends TempNode {
361
621
 
362
622
  }
363
623
 
624
+ /**
625
+ * Frees internal resources. Should be called when the node is no longer in use.
626
+ */
364
627
  dispose() {
365
628
 
366
629
  this.renderTarget.dispose();
@@ -375,6 +638,34 @@ PassNode.DEPTH = 'depth';
375
638
 
376
639
  export default PassNode;
377
640
 
641
+ /**
642
+ * TSL function for creating a pass node.
643
+ *
644
+ * @function
645
+ * @param {Scene} scene - A reference to the scene.
646
+ * @param {Camera} camera - A reference to the camera.
647
+ * @param {Object} options - Options for the internal render target.
648
+ * @returns {PassNode}
649
+ */
378
650
  export const pass = ( scene, camera, options ) => nodeObject( new PassNode( PassNode.COLOR, scene, camera, options ) );
651
+
652
+ /**
653
+ * TSL function for creating a pass texture node.
654
+ *
655
+ * @function
656
+ * @param {PassNode} pass - The pass node.
657
+ * @param {Texture} texture - The output texture.
658
+ * @returns {PassTextureNode}
659
+ */
379
660
  export const passTexture = ( pass, texture ) => nodeObject( new PassTextureNode( pass, texture ) );
380
- export const depthPass = ( scene, camera ) => nodeObject( new PassNode( PassNode.DEPTH, scene, camera ) );
661
+
662
+ /**
663
+ * TSL function for creating a depth pass node.
664
+ *
665
+ * @function
666
+ * @param {Scene} scene - A reference to the scene.
667
+ * @param {Camera} camera - A reference to the camera.
668
+ * @param {Object} options - Options for the internal render target.
669
+ * @returns {PassNode}
670
+ */
671
+ export const depthPass = ( scene, camera, options ) => nodeObject( new PassNode( PassNode.DEPTH, scene, camera, options ) );
@@ -1,6 +1,14 @@
1
1
  import TempNode from '../core/TempNode.js';
2
2
  import { nodeProxy } from '../tsl/TSLBase.js';
3
3
 
4
+ /** @module PosterizeNode **/
5
+
6
+ /**
7
+ * Represents a posterize effect which reduces the number of colors
8
+ * in an image, resulting in a more blocky and stylized appearance.
9
+ *
10
+ * @augments TempNode
11
+ */
4
12
  class PosterizeNode extends TempNode {
5
13
 
6
14
  static get type() {
@@ -9,11 +17,28 @@ class PosterizeNode extends TempNode {
9
17
 
10
18
  }
11
19
 
20
+ /**
21
+ * Constructs a new posterize node.
22
+ *
23
+ * @param {Node} sourceNode - The input color.
24
+ * @param {Node} stepsNode - Controls the intensity of the posterization effect. A lower number results in a more blocky appearance.
25
+ */
12
26
  constructor( sourceNode, stepsNode ) {
13
27
 
14
28
  super();
15
29
 
30
+ /**
31
+ * The input color.
32
+ *
33
+ * @type {Node}
34
+ */
16
35
  this.sourceNode = sourceNode;
36
+
37
+ /**
38
+ * Controls the intensity of the posterization effect. A lower number results in a more blocky appearance.
39
+ *
40
+ * @type {Node}
41
+ */
17
42
  this.stepsNode = stepsNode;
18
43
 
19
44
  }
@@ -30,4 +55,12 @@ class PosterizeNode extends TempNode {
30
55
 
31
56
  export default PosterizeNode;
32
57
 
58
+ /**
59
+ * TSL function for creating a posterize node.
60
+ *
61
+ * @function
62
+ * @param {Node} sourceNode - The input color.
63
+ * @param {Node} stepsNode - Controls the intensity of the posterization effect. A lower number results in a more blocky appearance.
64
+ * @returns {PosterizeNode}
65
+ */
33
66
  export const posterize = /*@__PURE__*/ nodeProxy( PosterizeNode );
@@ -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 );