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
@@ -36,49 +36,254 @@ function getKeys( obj ) {
36
36
 
37
37
  }
38
38
 
39
+ /**
40
+ * A render object is the renderer's representation of single entity that gets drawn
41
+ * with a draw command. There is no unique mapping of render objects to 3D objects in the
42
+ * scene since render objects also depend from the used material, the current render context
43
+ * and the current scene's lighting.
44
+ *
45
+ * In general, the basic process of the renderer is:
46
+ *
47
+ * - Analyze the 3D objects in the scene and generate render lists containing render items.
48
+ * - Process the render lists by calling one or more render commands for each render item.
49
+ * - For each render command, request a render object and perform the draw.
50
+ *
51
+ * The module provides an interface to get data required for the draw command like the actual
52
+ * draw parameters or vertex buffers. It also holds a series of caching related methods since
53
+ * creating render objects should only be done when necessary.
54
+ *
55
+ * @private
56
+ */
39
57
  export default class RenderObject {
40
58
 
59
+ /**
60
+ * Constructs a new render object.
61
+ *
62
+ * @param {Nodes} nodes - Renderer component for managing nodes related logic.
63
+ * @param {Geometries} geometries - Renderer component for managing geometries.
64
+ * @param {Renderer} renderer - The renderer.
65
+ * @param {Object3D} object - The 3D object.
66
+ * @param {Material} material - The 3D object's material.
67
+ * @param {Scene} scene - The scene the 3D object belongs to.
68
+ * @param {Camera} camera - The camera the object should be rendered with.
69
+ * @param {LightsNode} lightsNode - The lights node.
70
+ * @param {RenderContext} renderContext - The render context.
71
+ * @param {ClippingContext} clippingContext - The clipping context.
72
+ */
41
73
  constructor( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext, clippingContext ) {
42
74
 
75
+ this.id = _id ++;
76
+
77
+ /**
78
+ * Renderer component for managing nodes related logic.
79
+ *
80
+ * @type {Nodes}
81
+ * @private
82
+ */
43
83
  this._nodes = nodes;
44
- this._geometries = geometries;
45
84
 
46
- this.id = _id ++;
85
+ /**
86
+ * Renderer component for managing geometries.
87
+ *
88
+ * @type {Geometries}
89
+ * @private
90
+ */
91
+ this._geometries = geometries;
47
92
 
93
+ /**
94
+ * The renderer.
95
+ *
96
+ * @type {Renderer}
97
+ */
48
98
  this.renderer = renderer;
99
+
100
+ /**
101
+ * The 3D object.
102
+ *
103
+ * @type {Object3D}
104
+ */
49
105
  this.object = object;
106
+
107
+ /**
108
+ * The 3D object's material.
109
+ *
110
+ * @type {Material}
111
+ */
50
112
  this.material = material;
113
+
114
+ /**
115
+ * The scene the 3D object belongs to.
116
+ *
117
+ * @type {Scene}
118
+ */
51
119
  this.scene = scene;
120
+
121
+ /**
122
+ * The camera the 3D object should be rendered with.
123
+ *
124
+ * @type {Camera}
125
+ */
52
126
  this.camera = camera;
127
+
128
+ /**
129
+ * The lights node.
130
+ *
131
+ * @type {LightsNode}
132
+ */
53
133
  this.lightsNode = lightsNode;
134
+
135
+ /**
136
+ * The render context.
137
+ *
138
+ * @type {RenderContext}
139
+ */
54
140
  this.context = renderContext;
55
141
 
142
+ /**
143
+ * The 3D object's geometry.
144
+ *
145
+ * @type {BufferGeometry}
146
+ */
56
147
  this.geometry = object.geometry;
148
+
149
+ /**
150
+ * The render object's version.
151
+ *
152
+ * @type {Number}
153
+ */
57
154
  this.version = material.version;
58
155
 
156
+ /**
157
+ * The draw range of the geometry.
158
+ *
159
+ * @type {Object?}
160
+ * @default null
161
+ */
59
162
  this.drawRange = null;
60
163
 
164
+ /**
165
+ * An array holding the buffer attributes
166
+ * of the render object. This entails attribute
167
+ * definitions on geometry and node level.
168
+ *
169
+ * @type {Array<BufferAttribute>?}
170
+ * @default null
171
+ */
61
172
  this.attributes = null;
173
+
174
+ /**
175
+ * A reference to a render pipeline the render
176
+ * object is processed with.
177
+ *
178
+ * @type {RenderPipeline}
179
+ * @default null
180
+ */
62
181
  this.pipeline = null;
182
+
183
+ /**
184
+ * An array holding the vertex buffers which can
185
+ * be buffer attributes but also interleaved buffers.
186
+ *
187
+ * @type {Array<BufferAttribute|InterleavedBuffer>?}
188
+ * @default null
189
+ */
63
190
  this.vertexBuffers = null;
191
+
192
+ /**
193
+ * The parameters for the draw command.
194
+ *
195
+ * @type {Object?}
196
+ * @default null
197
+ */
64
198
  this.drawParams = null;
65
199
 
200
+ /**
201
+ * If this render object is used inside a render bundle,
202
+ * this property points to the respective bundle group.
203
+ *
204
+ * @type {BundleGroup?}
205
+ * @default null
206
+ */
66
207
  this.bundle = null;
67
208
 
209
+ /**
210
+ * The clipping context.
211
+ *
212
+ * @type {ClippingContext}
213
+ */
68
214
  this.clippingContext = clippingContext;
215
+
216
+ /**
217
+ * The clipping context's cache key.
218
+ *
219
+ * @type {String}
220
+ */
69
221
  this.clippingContextCacheKey = clippingContext !== null ? clippingContext.cacheKey : '';
70
222
 
223
+ /**
224
+ * The initial node cache key.
225
+ *
226
+ * @type {Number}
227
+ */
71
228
  this.initialNodesCacheKey = this.getDynamicCacheKey();
229
+
230
+ /**
231
+ * The initial cache key.
232
+ *
233
+ * @type {Number}
234
+ */
72
235
  this.initialCacheKey = this.getCacheKey();
73
236
 
237
+ /**
238
+ * The node builder state.
239
+ *
240
+ * @type {NodeBuilderState?}
241
+ * @private
242
+ * @default null
243
+ */
74
244
  this._nodeBuilderState = null;
245
+
246
+ /**
247
+ * An array of bindings.
248
+ *
249
+ * @type {Array<BindGroup>?}
250
+ * @private
251
+ * @default null
252
+ */
75
253
  this._bindings = null;
254
+
255
+ /**
256
+ * Reference to the node material observer.
257
+ *
258
+ * @type {NodeMaterialObserver?}
259
+ * @private
260
+ * @default null
261
+ */
76
262
  this._monitor = null;
77
263
 
264
+ /**
265
+ * An event listener which is defined by `RenderObjects`. It performs
266
+ * clean up tasks when `dispose()` on this render object.
267
+ *
268
+ * @method
269
+ */
78
270
  this.onDispose = null;
79
271
 
272
+ /**
273
+ * This flag can be used for type testing.
274
+ *
275
+ * @type {Boolean}
276
+ * @readonly
277
+ * @default true
278
+ */
80
279
  this.isRenderObject = true;
81
280
 
281
+ /**
282
+ * An event listener which is executed when `dispose()` is called on
283
+ * the render object's material.
284
+ *
285
+ * @method
286
+ */
82
287
  this.onMaterialDispose = () => {
83
288
 
84
289
  this.dispose();
@@ -89,12 +294,23 @@ export default class RenderObject {
89
294
 
90
295
  }
91
296
 
92
- updateClipping( parent ) {
297
+ /**
298
+ * Updates the clipping context.
299
+ *
300
+ * @param {ClippingContext} context - The clipping context to set.
301
+ */
302
+ updateClipping( context ) {
93
303
 
94
- this.clippingContext = parent;
304
+ this.clippingContext = context;
95
305
 
96
306
  }
97
307
 
308
+ /**
309
+ * Whether the clipping requires an update or not.
310
+ *
311
+ * @type {Boolean}
312
+ * @readonly
313
+ */
98
314
  get clippingNeedsUpdate() {
99
315
 
100
316
  if ( this.clippingContext === null || this.clippingContext.cacheKey === this.clippingContextCacheKey ) return false;
@@ -105,48 +321,90 @@ export default class RenderObject {
105
321
 
106
322
  }
107
323
 
324
+ /**
325
+ * The number of clipping planes defined in context of hardware clipping.
326
+ *
327
+ * @type {Number}
328
+ * @readonly
329
+ */
108
330
  get hardwareClippingPlanes() {
109
331
 
110
332
  return this.material.hardwareClipping === true ? this.clippingContext.unionClippingCount : 0;
111
333
 
112
334
  }
113
335
 
336
+ /**
337
+ * Returns the node builder state of this render object.
338
+ *
339
+ * @return {NodeBuilderState} The node buider state.
340
+ */
114
341
  getNodeBuilderState() {
115
342
 
116
343
  return this._nodeBuilderState || ( this._nodeBuilderState = this._nodes.getForRender( this ) );
117
344
 
118
345
  }
119
346
 
347
+ /**
348
+ * Returns the node material observer of this render object.
349
+ *
350
+ * @return {NodeMaterialObserver} The node material observer.
351
+ */
120
352
  getMonitor() {
121
353
 
122
354
  return this._monitor || ( this._monitor = this.getNodeBuilderState().monitor );
123
355
 
124
356
  }
125
357
 
358
+ /**
359
+ * Returns an array of bind groups of this render object.
360
+ *
361
+ * @return {Array<BindGroup>} The bindings.
362
+ */
126
363
  getBindings() {
127
364
 
128
365
  return this._bindings || ( this._bindings = this.getNodeBuilderState().createBindings() );
129
366
 
130
367
  }
131
368
 
369
+ /**
370
+ * Returns the index of the render object's geometry.
371
+ *
372
+ * @return {BufferAttribute?} The index. Returns `null` for non-indexed geometries.
373
+ */
132
374
  getIndex() {
133
375
 
134
376
  return this._geometries.getIndex( this );
135
377
 
136
378
  }
137
379
 
380
+ /**
381
+ * Returns the indirect buffer attribute.
382
+ *
383
+ * @return {BufferAttribute?} The indirect attribute. `null` if no indirect drawing is used.
384
+ */
138
385
  getIndirect() {
139
386
 
140
387
  return this._geometries.getIndirect( this );
141
388
 
142
389
  }
143
390
 
391
+ /**
392
+ * Returns an array that acts as a key for identifying the render object in a chain map.
393
+ *
394
+ * @return {Array<Object>} An array with object references.
395
+ */
144
396
  getChainArray() {
145
397
 
146
398
  return [ this.object, this.material, this.context, this.lightsNode ];
147
399
 
148
400
  }
149
401
 
402
+ /**
403
+ * This method is used when the geometry of a 3D object has been exchanged and the
404
+ * respective render object now requires an update.
405
+ *
406
+ * @param {BufferGeometry} geometry - The geometry to set.
407
+ */
150
408
  setGeometry( geometry ) {
151
409
 
152
410
  this.geometry = geometry;
@@ -154,6 +412,12 @@ export default class RenderObject {
154
412
 
155
413
  }
156
414
 
415
+ /**
416
+ * Returns the buffer attributes of the render object. The returned array holds
417
+ * attribute definitions on geometry and node level.
418
+ *
419
+ * @return {Array<BufferAttribute>} An array with buffer attributes.
420
+ */
157
421
  getAttributes() {
158
422
 
159
423
  if ( this.attributes !== null ) return this.attributes;
@@ -184,6 +448,11 @@ export default class RenderObject {
184
448
 
185
449
  }
186
450
 
451
+ /**
452
+ * Returns the vertex buffers of the render object.
453
+ *
454
+ * @return {Array<BufferAttribute|InterleavedBuffer>} An array with buffer attribute or interleaved buffers.
455
+ */
187
456
  getVertexBuffers() {
188
457
 
189
458
  if ( this.vertexBuffers === null ) this.getAttributes();
@@ -192,6 +461,11 @@ export default class RenderObject {
192
461
 
193
462
  }
194
463
 
464
+ /**
465
+ * Returns the draw parameters for the render object.
466
+ *
467
+ * @return {{vertexCount: Number, firstVertex: Number, instanceCount: Number, firstInstance: Number}} The draw parameters.
468
+ */
195
469
  getDrawParameters() {
196
470
 
197
471
  const { object, material, geometry, group, drawRange } = this;
@@ -258,6 +532,13 @@ export default class RenderObject {
258
532
 
259
533
  }
260
534
 
535
+ /**
536
+ * Returns the render object's geometry cache key.
537
+ *
538
+ * The geometry cache key is part of the material cache key.
539
+ *
540
+ * @return {String} The geometry cache key.
541
+ */
261
542
  getGeometryCacheKey() {
262
543
 
263
544
  const { geometry } = this;
@@ -287,6 +568,13 @@ export default class RenderObject {
287
568
 
288
569
  }
289
570
 
571
+ /**
572
+ * Returns the render object's material cache key.
573
+ *
574
+ * The material cache key is part of the render object cache key.
575
+ *
576
+ * @return {String} The material cache key.
577
+ */
290
578
  getMaterialCacheKey() {
291
579
 
292
580
  const { object, material } = this;
@@ -385,18 +673,46 @@ export default class RenderObject {
385
673
 
386
674
  }
387
675
 
676
+ /**
677
+ * Whether the geometry requires an update or not.
678
+ *
679
+ * @type {Boolean}
680
+ * @readonly
681
+ */
388
682
  get needsGeometryUpdate() {
389
683
 
390
684
  return this.geometry.id !== this.object.geometry.id;
391
685
 
392
686
  }
393
687
 
688
+ /**
689
+ * Whether the render object requires an update or not.
690
+ *
691
+ * Note: There are two distinct places where render objects are checked for an update.
692
+ *
693
+ * 1. In `RenderObjects.get()` which is executed when the render object is request. This
694
+ * method checks the `needsUpdate` flag and recreates the render object if necessary.
695
+ * 2. In `Renderer._renderObjectDirect()` right after getting the render object via
696
+ * `RenderObjects.get()`. The render object's NodeMaterialObserver is then used to detect
697
+ * a need for a refresh due to material, geometry or object related value changes.
698
+ *
699
+ * TODO: Investigate if it's possible to merge boths steps so there is only a single place
700
+ * that performs the 'needsUpdate' check.
701
+ *
702
+ * @type {Boolean}
703
+ * @readonly
704
+ */
394
705
  get needsUpdate() {
395
706
 
396
707
  return /*this.object.static !== true &&*/ ( this.initialNodesCacheKey !== this.getDynamicCacheKey() || this.clippingNeedsUpdate );
397
708
 
398
709
  }
399
710
 
711
+ /**
712
+ * Returns the dynamic cache key which represents a key that is computed per draw command.
713
+ *
714
+ * @return {String} The cache key.
715
+ */
400
716
  getDynamicCacheKey() {
401
717
 
402
718
  // Environment Nodes Cache Key
@@ -413,12 +729,20 @@ export default class RenderObject {
413
729
 
414
730
  }
415
731
 
732
+ /**
733
+ * Returns the render object's cache key.
734
+ *
735
+ * @return {String} The cache key.
736
+ */
416
737
  getCacheKey() {
417
738
 
418
739
  return this.getMaterialCacheKey() + this.getDynamicCacheKey();
419
740
 
420
741
  }
421
742
 
743
+ /**
744
+ * Frees internal resources.
745
+ */
422
746
  dispose() {
423
747
 
424
748
  this.material.removeEventListener( 'dispose', this.onMaterialDispose );
@@ -1,40 +1,109 @@
1
1
  import ChainMap from './ChainMap.js';
2
2
  import RenderObject from './RenderObject.js';
3
3
 
4
- const chainArray = [];
4
+ const _chainArray = [];
5
5
 
6
+ /**
7
+ * This module manages the render objects of the renderer.
8
+ *
9
+ * @private
10
+ */
6
11
  class RenderObjects {
7
12
 
13
+ /**
14
+ * Constructs a new render object management component.
15
+ *
16
+ * @param {Renderer} renderer - The renderer.
17
+ * @param {Nodes} nodes - Renderer component for managing nodes related logic.
18
+ * @param {Geometries} geometries - Renderer component for managing geometries.
19
+ * @param {Pipelines} pipelines - Renderer component for managing pipelines.
20
+ * @param {Bindings} bindings - Renderer component for managing bindings.
21
+ * @param {Info} info - Renderer component for managing metrics and monitoring data.
22
+ */
8
23
  constructor( renderer, nodes, geometries, pipelines, bindings, info ) {
9
24
 
25
+ /**
26
+ * The renderer.
27
+ *
28
+ * @type {Renderer}
29
+ */
10
30
  this.renderer = renderer;
31
+
32
+ /**
33
+ * Renderer component for managing nodes related logic.
34
+ *
35
+ * @type {Nodes}
36
+ */
11
37
  this.nodes = nodes;
38
+
39
+ /**
40
+ * Renderer component for managing geometries.
41
+ *
42
+ * @type {Geometries}
43
+ */
12
44
  this.geometries = geometries;
45
+
46
+ /**
47
+ * Renderer component for managing pipelines.
48
+ *
49
+ * @type {Pipelines}
50
+ */
13
51
  this.pipelines = pipelines;
52
+
53
+ /**
54
+ * Renderer component for managing bindings.
55
+ *
56
+ * @type {Bindings}
57
+ */
14
58
  this.bindings = bindings;
59
+
60
+ /**
61
+ * Renderer component for managing metrics and monitoring data.
62
+ *
63
+ * @type {Info}
64
+ */
15
65
  this.info = info;
16
66
 
67
+ /**
68
+ * A dictionary that manages render contexts in chain maps
69
+ * for each pass ID.
70
+ *
71
+ * @type {Object<String,ChainMap>}
72
+ */
17
73
  this.chainMaps = {};
18
74
 
19
75
  }
20
76
 
77
+ /**
78
+ * Returns a render object for the given object and state data.
79
+ *
80
+ * @param {Object3D} object - The 3D object.
81
+ * @param {Material} material - The 3D object's material.
82
+ * @param {Scene} scene - The scene the 3D object belongs to.
83
+ * @param {Camera} camera - The camera the 3D object should be rendered with.
84
+ * @param {LightsNode} lightsNode - The lights node.
85
+ * @param {RenderContext} renderContext - The render context.
86
+ * @param {ClippingContext} clippingContext - The clipping context.
87
+ * @param {String?} passId - An optional ID for identifying the pass.
88
+ * @return {RenderObject} The render object.
89
+ */
21
90
  get( object, material, scene, camera, lightsNode, renderContext, clippingContext, passId ) {
22
91
 
23
92
  const chainMap = this.getChainMap( passId );
24
93
 
25
94
  // reuse chainArray
26
- chainArray[ 0 ] = object;
27
- chainArray[ 1 ] = material;
28
- chainArray[ 2 ] = renderContext;
29
- chainArray[ 3 ] = lightsNode;
95
+ _chainArray[ 0 ] = object;
96
+ _chainArray[ 1 ] = material;
97
+ _chainArray[ 2 ] = renderContext;
98
+ _chainArray[ 3 ] = lightsNode;
30
99
 
31
- let renderObject = chainMap.get( chainArray );
100
+ let renderObject = chainMap.get( _chainArray );
32
101
 
33
102
  if ( renderObject === undefined ) {
34
103
 
35
104
  renderObject = this.createRenderObject( this.nodes, this.geometries, this.renderer, object, material, scene, camera, lightsNode, renderContext, clippingContext, passId );
36
105
 
37
- chainMap.set( chainArray, renderObject );
106
+ chainMap.set( _chainArray, renderObject );
38
107
 
39
108
  } else {
40
109
 
@@ -68,18 +137,43 @@ class RenderObjects {
68
137
 
69
138
  }
70
139
 
140
+ /**
141
+ * Returns a chain map for the given pass ID.
142
+ *
143
+ * @param {String} [passId='default'] - The pass ID.
144
+ * @return {ChainMap} The chain map.
145
+ */
71
146
  getChainMap( passId = 'default' ) {
72
147
 
73
148
  return this.chainMaps[ passId ] || ( this.chainMaps[ passId ] = new ChainMap() );
74
149
 
75
150
  }
76
151
 
152
+ /**
153
+ * Frees internal resources.
154
+ */
77
155
  dispose() {
78
156
 
79
157
  this.chainMaps = {};
80
158
 
81
159
  }
82
160
 
161
+ /**
162
+ * Factory method for creating render objects with the given list of parameters.
163
+ *
164
+ * @param {Nodes} nodes - Renderer component for managing nodes related logic.
165
+ * @param {Geometries} geometries - Renderer component for managing geometries.
166
+ * @param {Renderer} renderer - The renderer.
167
+ * @param {Object3D} object - The 3D object.
168
+ * @param {Material} material - The object's material.
169
+ * @param {Scene} scene - The scene the 3D object belongs to.
170
+ * @param {Camera} camera - The camera the object should be rendered with.
171
+ * @param {LightsNode} lightsNode - The lights node.
172
+ * @param {RenderContext} renderContext - The render context.
173
+ * @param {ClippingContext} clippingContext - The clipping context.
174
+ * @param {String?} passId - An optional ID for identifying the pass.
175
+ * @return {RenderObject} The render object.
176
+ */
83
177
  createRenderObject( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext, clippingContext, passId ) {
84
178
 
85
179
  const chainMap = this.getChainMap( passId );
@@ -1,12 +1,36 @@
1
1
  import Pipeline from './Pipeline.js';
2
2
 
3
+ /**
4
+ * Class for representing render pipelines.
5
+ *
6
+ * @private
7
+ * @augments Pipeline
8
+ */
3
9
  class RenderPipeline extends Pipeline {
4
10
 
11
+ /**
12
+ * Constructs a new render pipeline.
13
+ *
14
+ * @param {String} cacheKey - The pipeline's cache key.
15
+ * @param {ProgrammableStage} vertexProgram - The pipeline's vertex shader.
16
+ * @param {ProgrammableStage} fragmentProgram - The pipeline's fragment shader.
17
+ */
5
18
  constructor( cacheKey, vertexProgram, fragmentProgram ) {
6
19
 
7
20
  super( cacheKey );
8
21
 
22
+ /**
23
+ * The pipeline's vertex shader.
24
+ *
25
+ * @type {ProgrammableStage}
26
+ */
9
27
  this.vertexProgram = vertexProgram;
28
+
29
+ /**
30
+ * The pipeline's fragment shader.
31
+ *
32
+ * @type {ProgrammableStage}
33
+ */
10
34
  this.fragmentProgram = fragmentProgram;
11
35
 
12
36
  }