Mr.doob 18 часов назад
Родитель
Сommit
4315ae7ffb
100 измененных файлов с 5087 добавлено и 1615 удалено
  1. 440 181
      build/three.cjs
  2. 440 181
      build/three.core.js
  3. 0 0
      build/three.core.min.js
  4. 0 0
      build/three.module.js
  5. 0 0
      build/three.module.min.js
  6. 10 3
      build/three.tsl.js
  7. 0 0
      build/three.tsl.min.js
  8. 0 0
      build/three.webgpu.js
  9. 0 0
      build/three.webgpu.min.js
  10. 0 0
      build/three.webgpu.nodes.js
  11. 0 0
      build/three.webgpu.nodes.min.js
  12. 38 6
      docs/TSL.md
  13. 114 12
      docs/index.html
  14. 65 21
      docs/llms-full.txt
  15. 2 2
      docs/llms.txt
  16. 1 1
      docs/pages/ARButton.html
  17. 1 1
      docs/pages/ARButton.html.md
  18. 4 5
      docs/pages/AmmoPhysics.html
  19. 3 7
      docs/pages/AmmoPhysics.html.md
  20. 0 222
      docs/pages/AnamorphicNode.html
  21. 0 127
      docs/pages/AnamorphicNode.html.md
  22. 0 32
      docs/pages/AnimationClip.html
  23. 0 16
      docs/pages/AnimationClip.html.md
  24. 3 0
      docs/pages/ArcballControls.html
  25. 2 0
      docs/pages/ArcballControls.html.md
  26. 1473 0
      docs/pages/Backend.html
  27. 707 0
      docs/pages/Backend.html.md
  28. 0 89
      docs/pages/BatchNode.html
  29. 0 43
      docs/pages/BatchNode.html.md
  30. 2 5
      docs/pages/BezierInterpolant.html
  31. 1 4
      docs/pages/BezierInterpolant.html.md
  32. 43 7
      docs/pages/BloomNode.html
  33. 28 10
      docs/pages/BloomNode.html.md
  34. 4 0
      docs/pages/Box3.html
  35. 2 0
      docs/pages/Box3.html.md
  36. 5 6
      docs/pages/BufferAttributeNode.html
  37. 6 8
      docs/pages/BufferAttributeNode.html.md
  38. 16 0
      docs/pages/CSMFrustum.html
  39. 9 0
      docs/pages/CSMFrustum.html.md
  40. 43 0
      docs/pages/CityGenerator.html
  41. 20 0
      docs/pages/CityGenerator.html.md
  42. 120 0
      docs/pages/ClusteredLighting.html
  43. 74 0
      docs/pages/ClusteredLighting.html.md
  44. 86 0
      docs/pages/ClusteredLightsNode.html
  45. 47 0
      docs/pages/ClusteredLightsNode.html.md
  46. 3 4
      docs/pages/Color.html
  47. 5 7
      docs/pages/Color.html.md
  48. 0 1
      docs/pages/ConditionalNode.html
  49. 0 2
      docs/pages/ConditionalNode.html.md
  50. 14 6
      docs/pages/DRACOExporter.html
  51. 11 4
      docs/pages/DRACOExporter.html.md
  52. 7 5
      docs/pages/DRACOLoader.html
  53. 6 5
      docs/pages/DRACOLoader.html.md
  54. 23 0
      docs/pages/DataTextureLoader.html
  55. 10 0
      docs/pages/DataTextureLoader.html.md
  56. 34 0
      docs/pages/EnvMapCDFGenerator.html
  57. 11 0
      docs/pages/EnvMapCDFGenerator.html.md
  58. 1 3
      docs/pages/ExternalTexture.html
  59. 0 2
      docs/pages/ExternalTexture.html.md
  60. 46 0
      docs/pages/FaceFrame.html
  61. 21 0
      docs/pages/FaceFrame.html.md
  62. 8 0
      docs/pages/FirstPersonControls.html
  63. 6 0
      docs/pages/FirstPersonControls.html.md
  64. 2 3
      docs/pages/FlipNode.html
  65. 3 5
      docs/pages/FlipNode.html.md
  66. 47 0
      docs/pages/ForestGenerator.html
  67. 20 0
      docs/pages/ForestGenerator.html.md
  68. 46 44
      docs/pages/FrustumArray.html
  69. 37 27
      docs/pages/FrustumArray.html.md
  70. 139 1
      docs/pages/GLSLNodeBuilder.html
  71. 69 1
      docs/pages/GLSLNodeBuilder.html.md
  72. 4 1
      docs/pages/GLTFExporter.html
  73. 2 2
      docs/pages/GLTFExporter.html.md
  74. 2 3
      docs/pages/GPUComputationRenderer.html
  75. 4 6
      docs/pages/GPUComputationRenderer.html.md
  76. 46 1
      docs/pages/IESSpotLightNode.html
  77. 27 1
      docs/pages/IESSpotLightNode.html.md
  78. 2 3
      docs/pages/ImageBitmapLoader.html
  79. 4 6
      docs/pages/ImageBitmapLoader.html.md
  80. 267 0
      docs/pages/ImportanceSampledEnvironment.html
  81. 103 0
      docs/pages/ImportanceSampledEnvironment.html.md
  82. 82 26
      docs/pages/Info.html
  83. 52 26
      docs/pages/Info.html.md
  84. 0 209
      docs/pages/InstanceNode.html
  85. 0 115
      docs/pages/InstanceNode.html.md
  86. 0 8
      docs/pages/InstancedMesh.html
  87. 0 6
      docs/pages/InstancedMesh.html.md
  88. 0 57
      docs/pages/InstancedMeshNode.html
  89. 0 25
      docs/pages/InstancedMeshNode.html.md
  90. 2 2
      docs/pages/KTX2Loader.html
  91. 2 2
      docs/pages/KTX2Loader.html.md
  92. 3 0
      docs/pages/LWOLoader.html
  93. 2 0
      docs/pages/LWOLoader.html.md
  94. 15 1
      docs/pages/LightProbeGrid.html
  95. 9 1
      docs/pages/LightProbeGrid.html.md
  96. 1 1
      docs/pages/LightProbeGridHelper.html
  97. 1 1
      docs/pages/LightProbeGridHelper.html.md
  98. 12 1
      docs/pages/LightingContextNode.html
  99. 7 1
      docs/pages/LightingContextNode.html.md
  100. 60 1
      docs/pages/LightsNode.html

Разница между файлами не показана из-за своего большого размера
+ 440 - 181
build/three.cjs


Разница между файлами не показана из-за своего большого размера
+ 440 - 181
build/three.core.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
build/three.core.min.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
build/three.module.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
build/three.module.min.js


Разница между файлами не показана из-за своего большого размера
+ 10 - 3
build/three.tsl.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
build/three.tsl.min.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
build/three.webgpu.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
build/three.webgpu.min.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
build/three.webgpu.nodes.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
build/three.webgpu.nodes.min.js


+ 38 - 6
docs/TSL.md

@@ -52,6 +52,7 @@ An Approach to Productive and Maintainable Shader Creation.
 - [Storage](#storage)
 - [Struct](#struct)
 - [Flow Control](#flow-control)
+- [Override Node](#override-node)
 - [Fog](#fog)
 - [Color Adjustments](#color-adjustments)
 - [Utilities](#utilities)
@@ -490,7 +491,7 @@ It's possible use `xyzw`, `rgba` or `stpq`.
 | Name | Description |
 | -- | -- |
 | `.add( node \| value, ... )` | Return the addition of two or more value. |
-| `.sub( node \| value )` | Return the subraction of two or more value. |
+| `.sub( node \| value )` | Return the subtraction of two or more value. |
 | `.mul( node \| value )` | Return the multiplication of two or more value. |
 | `.div( node \| value )` | Return the division of two or more value. |
 | `.mod( node \| value )` | Computes the remainder of dividing the first node by the second. |
@@ -903,6 +904,8 @@ The module also provides `Break()` and `Continue()` TSL expression for loop cont
 | `step( edge, x )` | Generate a step function by comparing two values. |
 | `tan( x )` | Return the tangent of the parameter. |
 | `transformDirection( dir, matrix )` | Transform the direction of a vector by a matrix and then normalize the result. |
+| `transformNormalByViewMatrix( normal, viewMatrix )` | Transform a normal vector (given in world space) by the view matrix and normalize the result. |
+| `transformNormalByInverseViewMatrix( normal, viewMatrix )` | Transform a normal vector (given in view space) by the inverse of the view matrix and normalize the result. |
 | `trunc( x )` | Truncate the parameter, removing the fractional part. |
 
 ```js
@@ -1086,6 +1089,7 @@ Screen nodes will return the values related to the current `frame buffer`, eithe
 | `spherizeUV( uv, strength, centerNode = vec2( 0.5 ) )` | Distorts UV coordinates with a spherical effect around a center point. | `vec2` |
 | `spritesheetUV( count, uv = uv(), frame = float( 0 ) )` | Computes UV coordinates for a sprite sheet based on the number of frames, UV coordinates, and frame index. | `vec2` |
 | `equirectUV( direction = positionWorldDirection )` | Computes UV coordinates for equirectangular mapping based on the direction vector. | `vec2` |
+| `equirectDirection( uv = uv() )` | Computes a direction vector from the given equirectangular UV coordinates (inverse of `equirectUV`). | `vec3` |
 
 ```js
 import { texture, matcapUV } from 'three/tsl';
@@ -1133,8 +1137,8 @@ const matcap = texture( matcapMap, matcapUV );
 
 | Variable | Description | Type |
 | -- | -- | -- |
-| `directionToColor( value )` | Converts direction vector to color. | `color` |
-| `colorToDirection( value )` | Converts color to direction vector. | `vec3` |
+| `packNormalToRGB( value )` | Converts normal vector to color. | `color` |
+| `unpackRGBToNormal( value )` | Converts color to normal vector. | `vec3` |
 
 ## Render Pipeline
 
@@ -1172,18 +1176,18 @@ MRT allows capturing multiple outputs from a single render pass. Instead of rend
 Use `setMRT()` with the `mrt()` function to define which outputs to capture:
 
 ```js
-import { pass, mrt, output, normalView, velocity, directionToColor } from 'three/tsl';
+import { pass, mrt, output, normalView, velocity, packNormalToRGB } from 'three/tsl';
 
 const scenePass = pass( scene, camera );
 
 scenePass.setMRT( mrt( {
 	output: output,                          // Final color output
-	normal: directionToColor( normalView ),  // View-space normals encoded as colors
+	normal: packNormalToRGB( normalView ),   // View-space normals encoded as colors
 	velocity: velocity                       // Motion vectors for temporal effects
 } ) );
 ```
 
-Each MRT entry accepts any TSL node, allowing you to customize outputs using formulas, encoders, or material accessors. For example, `directionToColor( normalView )` encodes view-space normals into RGB values. You can use any TSL function to transform, combine, or encode data before writing to the render target.
+Each MRT entry accepts any TSL node, allowing you to customize outputs using formulas, encoders, or material accessors. For example, `packNormalToRGB( normalView )` encodes view-space normals into RGB values. You can use any TSL function to transform, combine, or encode data before writing to the render target.
 
 Within a TSL function `Fn( ( { material, object } ) => { ... } )`, you have complete access to the current material and object being rendered, enabling full customization of outputs.
 
@@ -1420,6 +1424,33 @@ const customFragment = Fn( () => {
 material.colorNode = customFragment();
 ```
 
+## Override Node
+
+Override nodes allow you to replace specific target nodes within a node sub-graph or flow dynamically during compilation, without having to reconstruct or duplicate the source nodes. This is useful, for example, to inject a custom `positionLocal` or normal into an existing flow through the material's `contextNode`.
+
+| Name | Description |
+| -- | -- |
+| `overrideNode( targetNode, callback = null, flowNode = null )` | Overrides a single target node. `callback` returns the overriding node (receiving the builder as argument) or can be the overriding node itself. |
+| `overrideNodes( overrides, flowNode = null )` | Overrides multiple target nodes at once using a `Map` or an array of `[ targetNode, callback \| node ]` pairs. |
+
+Example:
+
+```js
+import { overrideNode, overrideNodes, positionLocal, positionView, vec3 } from 'three/tsl';
+
+// Override a single node through the material context
+material.contextNode = overrideNode( positionLocal, () => positionLocal.add( vec3( 1, 0, 0 ) ) );
+
+// Override multiple nodes at once
+material.contextNode = overrideNodes( [
+	[ positionView, customPositionView ], // You can use a node directly like customPositionView.
+	[ positionLocal, ( builder ) => positionLocal.add( vec3( 1, 0, 0 ) ) ]
+] );
+
+// Method chaining is also supported
+node.overrideNode( positionLocal, () => positionLocal.add( vec3( 1, 0, 0 ) ) );
+```
+
 ## Fog
 
 Functions for creating fog effects in the scene. Assign the fog node to `scene.fogNode`.
@@ -1477,6 +1508,7 @@ Utility functions for common shader tasks.
 | -- | -- | -- |
 | `billboarding( { position, horizontal, vertical } )` | Orients flat meshes always towards the camera. `position`: vertex positions in world space (default: `null`). `horizontal`: follow camera horizontally (default: `true`). `vertical`: follow camera vertically (default: `false`). | `vec3` |
 | `checker( coord )` | Creates a 2x2 checkerboard pattern. | `float` |
+| `negateOnBackSide( vector )` | Negates a vector when rendering the back side of a face, according to the material's `side` configuration (`BackSide`, `DoubleSide` or `FrontSide`). | `vec3` |
 
 Example:
 

+ 114 - 12
docs/index.html

@@ -301,7 +301,6 @@
 						<li><a href="BasicEnvironmentNode.html">BasicEnvironmentNode</a></li>
 						<li><a href="BasicLightMapNode.html">BasicLightMapNode</a></li>
 						<li><a href="BasicLightingModel.html">BasicLightingModel</a></li>
-						<li><a href="BatchNode.html">BatchNode</a></li>
 						<li><a href="BitcastNode.html">BitcastNode</a></li>
 						<li><a href="BitcountNode.html">BitcountNode</a></li>
 						<li><a href="BufferAttributeNode.html">BufferAttributeNode</a></li>
@@ -336,8 +335,6 @@
 						<li><a href="IndexNode.html">IndexNode</a></li>
 						<li><a href="InputNode.html">InputNode</a></li>
 						<li><a href="InspectorNode.html">InspectorNode</a></li>
-						<li><a href="InstanceNode.html">InstanceNode</a></li>
-						<li><a href="InstancedMeshNode.html">InstancedMeshNode</a></li>
 						<li><a href="IrradianceNode.html">IrradianceNode</a></li>
 						<li><a href="IsolateNode.html">IsolateNode</a></li>
 						<li><a href="JoinNode.html">JoinNode</a></li>
@@ -354,7 +351,6 @@
 						<li><a href="MaxMipLevelNode.html">MaxMipLevelNode</a></li>
 						<li><a href="MemberNode.html">MemberNode</a></li>
 						<li><a href="ModelNode.html">ModelNode</a></li>
-						<li><a href="MorphNode.html">MorphNode</a></li>
 						<li><a href="Node.html">Node</a></li>
 						<li><a href="NodeAttribute.html">NodeAttribute</a></li>
 						<li><a href="NodeBuilder.html">NodeBuilder</a></li>
@@ -372,6 +368,7 @@
 						<li><a href="Object3DNode.html">Object3DNode</a></li>
 						<li><a href="OperatorNode.html">OperatorNode</a></li>
 						<li><a href="OutputStructNode.html">OutputStructNode</a></li>
+						<li><a href="OverrideContextNode.html">OverrideContextNode</a></li>
 						<li><a href="PMREMNode.html">PMREMNode</a></li>
 						<li><a href="PackFloatNode.html">PackFloatNode</a></li>
 						<li><a href="ParameterNode.html">ParameterNode</a></li>
@@ -401,13 +398,13 @@
 						<li><a href="ShadowBaseNode.html">ShadowBaseNode</a></li>
 						<li><a href="ShadowMaskModel.html">ShadowMaskModel</a></li>
 						<li><a href="ShadowNode.html">ShadowNode</a></li>
-						<li><a href="SkinningNode.html">SkinningNode</a></li>
 						<li><a href="SplitNode.html">SplitNode</a></li>
 						<li><a href="SpotLightNode.html">SpotLightNode</a></li>
 						<li><a href="StackNode.html">StackNode</a></li>
 						<li><a href="StackTrace.html">StackTrace</a></li>
 						<li><a href="StorageArrayElementNode.html">StorageArrayElementNode</a></li>
 						<li><a href="StorageBufferNode.html">StorageBufferNode</a></li>
+						<li><a href="StorageTexture3DNode.html">StorageTexture3DNode</a></li>
 						<li><a href="StorageTextureNode.html">StorageTextureNode</a></li>
 						<li><a href="StructNode.html">StructNode</a></li>
 						<li><a href="StructTypeNode.html">StructTypeNode</a></li>
@@ -457,6 +454,7 @@
 					</ul>
 					<h3>Renderers</h3>
 					<ul>
+						<li><a href="Backend.html">Backend</a></li>
 						<li><a href="BlendMode.html">BlendMode</a></li>
 						<li><a href="BundleGroup.html">BundleGroup</a></li>
 						<li><a href="CanvasTarget.html">CanvasTarget</a></li>
@@ -470,6 +468,7 @@
 						<li><a href="ReadbackBuffer.html">ReadbackBuffer</a></li>
 						<li><a href="RenderPipeline.html">RenderPipeline</a></li>
 						<li><a href="Renderer.html">Renderer</a></li>
+						<li><a href="StandardNodeLibrary.html">StandardNodeLibrary</a></li>
 						<li><a href="Storage3DTexture.html">Storage3DTexture</a></li>
 						<li><a href="StorageArrayTexture.html">StorageArrayTexture</a></li>
 						<li><a href="StorageBufferAttribute.html">StorageBufferAttribute</a></li>
@@ -596,11 +595,22 @@
 						<li><a href="STLExporter.html">STLExporter</a></li>
 						<li><a href="USDZExporter.html">USDZExporter</a></li>
 					</ul>
+					<h3>Generators</h3>
+					<ul>
+						<li><a href="CityGenerator.html">CityGenerator</a></li>
+						<li><a href="FaceFrame.html">FaceFrame</a></li>
+						<li><a href="ForestGenerator.html">ForestGenerator</a></li>
+						<li><a href="SidewalkGenerator.html">SidewalkGenerator</a></li>
+						<li><a href="SkyscraperGenerator.html">SkyscraperGenerator</a></li>
+						<li><a href="TerrainGenerator.html">TerrainGenerator</a></li>
+						<li><a href="TreeGenerator.html">TreeGenerator</a></li>
+					</ul>
 					<h3>Geometries</h3>
 					<ul>
 						<li><a href="BoxLineGeometry.html">BoxLineGeometry</a></li>
 						<li><a href="ConvexGeometry.html">ConvexGeometry</a></li>
 						<li><a href="DecalGeometry.html">DecalGeometry</a></li>
+						<li><a href="LoftGeometry.html">LoftGeometry</a></li>
 						<li><a href="ParametricGeometry.html">ParametricGeometry</a></li>
 						<li><a href="RoundedBoxGeometry.html">RoundedBoxGeometry</a></li>
 						<li><a href="TeapotGeometry.html">TeapotGeometry</a></li>
@@ -642,9 +652,9 @@
 					</ul>
 					<h3>Lighting</h3>
 					<ul>
+						<li><a href="ClusteredLighting.html">ClusteredLighting</a></li>
 						<li><a href="DynamicLighting.html">DynamicLighting</a></li>
 						<li><a href="LightProbeGrid.html">LightProbeGrid</a></li>
-						<li><a href="TiledLighting.html">TiledLighting</a></li>
 					</ul>
 					<h3>Lights</h3>
 					<ul>
@@ -747,6 +757,7 @@
 						<li><a href="RollerCoasterLiftersGeometry.html">RollerCoasterLiftersGeometry</a></li>
 						<li><a href="RollerCoasterShadowGeometry.html">RollerCoasterShadowGeometry</a></li>
 						<li><a href="SkyGeometry.html">SkyGeometry</a></li>
+						<li><a href="TileCreasedNormalsPlugin.html">TileCreasedNormalsPlugin</a></li>
 						<li><a href="TreesGeometry.html">TreesGeometry</a></li>
 						<li><a href="TubePainter.html">TubePainter</a></li>
 						<li><a href="Volume.html">Volume</a></li>
@@ -886,15 +897,16 @@
 						<li><a href="AfterImageNode.html">AfterImageNode</a></li>
 						<li><a href="AmbientLightDataNode.html">AmbientLightDataNode</a></li>
 						<li><a href="AnaglyphPassNode.html">AnaglyphPassNode</a></li>
-						<li><a href="AnamorphicNode.html">AnamorphicNode</a></li>
 						<li><a href="BilateralBlurNode.html">BilateralBlurNode</a></li>
 						<li><a href="BloomNode.html">BloomNode</a></li>
 						<li><a href="ChromaticAberrationNode.html">ChromaticAberrationNode</a></li>
+						<li><a href="ClusteredLightsNode.html">ClusteredLightsNode</a></li>
 						<li><a href="DenoiseNode.html">DenoiseNode</a></li>
 						<li><a href="DepthOfFieldNode.html">DepthOfFieldNode</a></li>
 						<li><a href="DirectionalLightDataNode.html">DirectionalLightDataNode</a></li>
 						<li><a href="DotScreenNode.html">DotScreenNode</a></li>
 						<li><a href="DynamicLightsNode.html">DynamicLightsNode</a></li>
+						<li><a href="EnvMapCDFGenerator.html">EnvMapCDFGenerator</a></li>
 						<li><a href="FSR1Node.html">FSR1Node</a></li>
 						<li><a href="FXAANode.html">FXAANode</a></li>
 						<li><a href="FilmNode.html">FilmNode</a></li>
@@ -902,6 +914,7 @@
 						<li><a href="GaussianBlurNode.html">GaussianBlurNode</a></li>
 						<li><a href="GodraysNode.html">GodraysNode</a></li>
 						<li><a href="HemisphereLightDataNode.html">HemisphereLightDataNode</a></li>
+						<li><a href="ImportanceSampledEnvironment.html">ImportanceSampledEnvironment</a></li>
 						<li><a href="LensflareNode.html">LensflareNode</a></li>
 						<li><a href="Lut3DNode.html">Lut3DNode</a></li>
 						<li><a href="OutlineNode.html">OutlineNode</a></li>
@@ -910,6 +923,7 @@
 						<li><a href="PixelationPassNode.html">PixelationPassNode</a></li>
 						<li><a href="PointLightDataNode.html">PointLightDataNode</a></li>
 						<li><a href="RGBShiftNode.html">RGBShiftNode</a></li>
+						<li><a href="RecurrentDenoiseNode.html">RecurrentDenoiseNode</a></li>
 						<li><a href="RetroPassNode.html">RetroPassNode</a></li>
 						<li><a href="SMAANode.html">SMAANode</a></li>
 						<li><a href="SSAAPassNode.html">SSAAPassNode</a></li>
@@ -923,12 +937,13 @@
 						<li><a href="StereoPassNode.html">StereoPassNode</a></li>
 						<li><a href="TAAUNode.html">TAAUNode</a></li>
 						<li><a href="TRAANode.html">TRAANode</a></li>
+						<li><a href="TemporalReprojectNode.html">TemporalReprojectNode</a></li>
 						<li><a href="TileShadowNode.html">TileShadowNode</a></li>
 						<li><a href="TileShadowNodeHelper.html">TileShadowNodeHelper</a></li>
-						<li><a href="TiledLightsNode.html">TiledLightsNode</a></li>
 						<li><a href="TransitionNode.html">TransitionNode</a></li>
 						<li><a href="WebGLNodesHandler.html">WebGLNodesHandler</a></li>
 						<li><a href="module-Bayer.html">Bayer</a></li>
+						<li><a href="module-GroundedSkybox.html">GroundedSkybox</a></li>
 						<li><a href="module-Raymarching.html">Raymarching</a></li>
 					</ul>
 					<h3>Textures</h3>
@@ -1001,9 +1016,10 @@
 						<li><a href="TSL.html#afterImage">afterImage</a></li>
 						<li><a href="TSL.html#agxToneMapping">agxToneMapping</a></li>
 						<li><a href="TSL.html#all">all</a></li>
+						<li><a href="TSL.html#alphaLine">alphaLine</a></li>
 						<li><a href="TSL.html#alphaT">alphaT</a></li>
+						<li><a href="TSL.html#ambientOcclusion">ambientOcclusion</a></li>
 						<li><a href="TSL.html#anaglyphPass">anaglyphPass</a></li>
-						<li><a href="TSL.html#anamorphic">anamorphic</a></li>
 						<li><a href="TSL.html#and">and</a></li>
 						<li><a href="TSL.html#anisotropy">anisotropy</a></li>
 						<li><a href="TSL.html#anisotropyB">anisotropyB</a></li>
@@ -1011,6 +1027,7 @@
 						<li><a href="TSL.html#any">any</a></li>
 						<li><a href="TSL.html#ao">ao</a></li>
 						<li><a href="TSL.html#append">append</a></li>
+						<li><a href="TSL.html#applyVarianceClipping">applyVarianceClipping</a></li>
 						<li><a href="TSL.html#array">array</a></li>
 						<li><a href="TSL.html#asin">asin</a></li>
 						<li><a href="TSL.html#asinh">asinh</a></li>
@@ -1039,6 +1056,7 @@
 						<li><a href="TSL.html#barrelUV">barrelUV</a></li>
 						<li><a href="TSL.html#barrier">barrier</a></li>
 						<li><a href="TSL.html#batch">batch</a></li>
+						<li><a href="TSL.html#beautyTexelFromScreen">beautyTexelFromScreen</a></li>
 						<li><a href="TSL.html#bentNormalView">bentNormalView</a></li>
 						<li><a href="TSL.html#bilateralBlur">bilateralBlur</a></li>
 						<li><a href="TSL.html#billboarding">billboarding</a></li>
@@ -1085,20 +1103,24 @@
 						<li><a href="TSL.html#chromaticAberration">chromaticAberration</a></li>
 						<li><a href="TSL.html#cineonToneMapping">cineonToneMapping</a></li>
 						<li><a href="TSL.html#circle">circle</a></li>
-						<li><a href="TSL.html#circleIntersectsAABB">circleIntersectsAABB</a></li>
 						<li><a href="TSL.html#clamp">clamp</a></li>
 						<li><a href="TSL.html#clearcoat">clearcoat</a></li>
 						<li><a href="TSL.html#clearcoatNormalView">clearcoatNormalView</a></li>
 						<li><a href="TSL.html#clearcoatRoughness">clearcoatRoughness</a></li>
 						<li><a href="TSL.html#clipSpace">clipSpace</a></li>
+						<li><a href="TSL.html#clipToAABB">clipToAABB</a></li>
 						<li><a href="TSL.html#clipping">clipping</a></li>
 						<li><a href="TSL.html#clippingAlpha">clippingAlpha</a></li>
+						<li><a href="TSL.html#clusteredLights">clusteredLights</a></li>
 						<li><a href="TSL.html#code">code</a></li>
+						<li><a href="TSL.html#collectNeighborhood">collectNeighborhood</a></li>
 						<li><a href="TSL.html#colorBleeding">colorBleeding</a></li>
 						<li><a href="TSL.html#colorSpaceToWorking">colorSpaceToWorking</a></li>
 						<li><a href="TSL.html#colorToDirection">colorToDirection</a></li>
 						<li><a href="TSL.html#compute">compute</a></li>
 						<li><a href="TSL.html#computeBuiltin">computeBuiltin</a></li>
+						<li><a href="TSL.html#computeFrustumSize">computeFrustumSize</a></li>
+						<li><a href="TSL.html#computeHitDistFactor">computeHitDistFactor</a></li>
 						<li><a href="TSL.html#computeKernel">computeKernel</a></li>
 						<li><a href="TSL.html#computeSkinning">computeSkinning</a></li>
 						<li><a href="TSL.html#context">context</a></li>
@@ -1114,6 +1136,7 @@
 						<li><a href="TSL.html#cubeMapNode">cubeMapNode</a></li>
 						<li><a href="TSL.html#cubeTexture">cubeTexture</a></li>
 						<li><a href="TSL.html#cubeTextureBase">cubeTextureBase</a></li>
+						<li><a href="TSL.html#curlNoise">curlNoise</a></li>
 						<li><a href="TSL.html#dFdx">dFdx</a></li>
 						<li><a href="TSL.html#dFdy">dFdy</a></li>
 						<li><a href="TSL.html#dashSize">dashSize</a></li>
@@ -1130,6 +1153,7 @@
 						<li><a href="TSL.html#determinant">determinant</a></li>
 						<li><a href="TSL.html#difference">difference</a></li>
 						<li><a href="TSL.html#diffuseColor">diffuseColor</a></li>
+						<li><a href="TSL.html#diffuseColorDistance">diffuseColorDistance</a></li>
 						<li><a href="TSL.html#diffuseContribution">diffuseContribution</a></li>
 						<li><a href="TSL.html#directionToColor">directionToColor</a></li>
 						<li><a href="TSL.html#directionToFaceDirection">directionToFaceDirection</a></li>
@@ -1144,6 +1168,7 @@
 						<li><a href="TSL.html#dynamicLights">dynamicLights</a></li>
 						<li><a href="TSL.html#emissive">emissive</a></li>
 						<li><a href="TSL.html#equal">equal</a></li>
+						<li><a href="TSL.html#equirectDirection">equirectDirection</a></li>
 						<li><a href="TSL.html#equirectUV">equirectUV</a></li>
 						<li><a href="TSL.html#exp">exp</a></li>
 						<li><a href="TSL.html#exp2">exp2</a></li>
@@ -1171,6 +1196,8 @@
 						<li><a href="TSL.html#getScreenPosition">getScreenPosition</a></li>
 						<li><a href="TSL.html#getShadowMaterial">getShadowMaterial</a></li>
 						<li><a href="TSL.html#getShadowRenderObjectFunction">getShadowRenderObjectFunction</a></li>
+						<li><a href="TSL.html#getSpecularDominantDirection">getSpecularDominantDirection</a></li>
+						<li><a href="TSL.html#getTemporalVarianceFactor">getTemporalVarianceFactor</a></li>
 						<li><a href="TSL.html#getViewPosition">getViewPosition</a></li>
 						<li><a href="TSL.html#globalId">globalId</a></li>
 						<li><a href="TSL.html#glsl">glsl</a></li>
@@ -1205,6 +1232,7 @@
 						<li><a href="TSL.html#iridescenceThickness">iridescenceThickness</a></li>
 						<li><a href="TSL.html#isolate">isolate</a></li>
 						<li><a href="TSL.html#js">js</a></li>
+						<li><a href="TSL.html#karisTemporalBlend">karisTemporalBlend</a></li>
 						<li><a href="TSL.html#label">label</a></li>
 						<li><a href="TSL.html#length">length</a></li>
 						<li><a href="TSL.html#lengthSq">lengthSq</a></li>
@@ -1220,12 +1248,15 @@
 						<li><a href="TSL.html#lights">lights</a></li>
 						<li><a href="TSL.html#linearDepth">linearDepth</a></li>
 						<li><a href="TSL.html#linearToneMapping">linearToneMapping</a></li>
+						<li><a href="TSL.html#lobeNormalFalloff">lobeNormalFalloff</a></li>
+						<li><a href="TSL.html#lobeNormalWeight">lobeNormalWeight</a></li>
 						<li><a href="TSL.html#localId">localId</a></li>
 						<li><a href="TSL.html#log">log</a></li>
 						<li><a href="TSL.html#log2">log2</a></li>
 						<li><a href="TSL.html#logarithmicDepthToViewZ">logarithmicDepthToViewZ</a></li>
 						<li><a href="TSL.html#luminance">luminance</a></li>
 						<li><a href="TSL.html#lut3D">lut3D</a></li>
+						<li><a href="TSL.html#mapAo">mapAo</a></li>
 						<li><a href="TSL.html#matcapUV">matcapUV</a></li>
 						<li><a href="TSL.html#materialAO">materialAO</a></li>
 						<li><a href="TSL.html#materialAlphaTest">materialAlphaTest</a></li>
@@ -1274,10 +1305,10 @@
 						<li><a href="TSL.html#mediumpModelViewMatrix">mediumpModelViewMatrix</a></li>
 						<li><a href="TSL.html#metalness">metalness</a></li>
 						<li><a href="TSL.html#min">min</a></li>
+						<li><a href="TSL.html#misPowerHeuristic">misPowerHeuristic</a></li>
 						<li><a href="TSL.html#mix">mix</a></li>
 						<li><a href="TSL.html#mixElement">mixElement</a></li>
 						<li><a href="TSL.html#mod">mod</a></li>
-						<li><a href="TSL.html#modInt">modInt</a></li>
 						<li><a href="TSL.html#modelDirection">modelDirection</a></li>
 						<li><a href="TSL.html#modelNormalMatrix">modelNormalMatrix</a></li>
 						<li><a href="TSL.html#modelPosition">modelPosition</a></li>
@@ -1292,7 +1323,9 @@
 						<li><a href="TSL.html#motionBlur">motionBlur</a></li>
 						<li><a href="TSL.html#mrt">mrt</a></li>
 						<li><a href="TSL.html#mul">mul</a></li>
+						<li><a href="TSL.html#mvpLine">mvpLine</a></li>
 						<li><a href="TSL.html#negate">negate</a></li>
+						<li><a href="TSL.html#negateOnBackSide">negateOnBackSide</a></li>
 						<li><a href="TSL.html#neutralToneMapping">neutralToneMapping</a></li>
 						<li><a href="TSL.html#normalFlat">normalFlat</a></li>
 						<li><a href="TSL.html#normalGeometry">normalGeometry</a></li>
@@ -1324,7 +1357,10 @@
 						<li><a href="TSL.html#output">output</a></li>
 						<li><a href="TSL.html#outputStruct">outputStruct</a></li>
 						<li><a href="TSL.html#overloadingFn">overloadingFn</a></li>
+						<li><a href="TSL.html#overrideNode">overrideNode</a></li>
+						<li><a href="TSL.html#overrideNodes">overrideNodes</a></li>
 						<li><a href="TSL.html#packHalf2x16">packHalf2x16</a></li>
+						<li><a href="TSL.html#packNormalToRGB">packNormalToRGB</a></li>
 						<li><a href="TSL.html#packSnorm2x16">packSnorm2x16</a></li>
 						<li><a href="TSL.html#packUnorm2x16">packUnorm2x16</a></li>
 						<li><a href="TSL.html#parabola">parabola</a></li>
@@ -1335,8 +1371,10 @@
 						<li><a href="TSL.html#pass">pass</a></li>
 						<li><a href="TSL.html#passTexture">passTexture</a></li>
 						<li><a href="TSL.html#pcurve">pcurve</a></li>
+						<li><a href="TSL.html#permute">permute</a></li>
 						<li><a href="TSL.html#perspectiveDepthToViewZ">perspectiveDepthToViewZ</a></li>
 						<li><a href="TSL.html#pixelationPass">pixelationPass</a></li>
+						<li><a href="TSL.html#planeDistance">planeDistance</a></li>
 						<li><a href="TSL.html#pmremTexture">pmremTexture</a></li>
 						<li><a href="TSL.html#pointShadow">pointShadow</a></li>
 						<li><a href="TSL.html#pointUV">pointUV</a></li>
@@ -1355,6 +1393,7 @@
 						<li><a href="TSL.html#pow4">pow4</a></li>
 						<li><a href="TSL.html#premultipliedGaussianBlur">premultipliedGaussianBlur</a></li>
 						<li><a href="TSL.html#premultiplyAlpha">premultiplyAlpha</a></li>
+						<li><a href="TSL.html#projectWorldToUV">projectWorldToUV</a></li>
 						<li><a href="TSL.html#property">property</a></li>
 						<li><a href="TSL.html#quadBroadcast">quadBroadcast</a></li>
 						<li><a href="TSL.html#quadSwapDiagonal">quadSwapDiagonal</a></li>
@@ -1366,6 +1405,7 @@
 						<li><a href="TSL.html#range">range</a></li>
 						<li><a href="TSL.html#rangeFogFactor">rangeFogFactor</a></li>
 						<li><a href="TSL.html#reciprocal">reciprocal</a></li>
+						<li><a href="TSL.html#recurrentDenoise">recurrentDenoise</a></li>
 						<li><a href="TSL.html#reference">reference</a></li>
 						<li><a href="TSL.html#referenceBuffer">referenceBuffer</a></li>
 						<li><a href="TSL.html#reflect">reflect</a></li>
@@ -1382,6 +1422,8 @@
 						<li><a href="TSL.html#renderOutput">renderOutput</a></li>
 						<li><a href="TSL.html#rendererReference">rendererReference</a></li>
 						<li><a href="TSL.html#replaceDefaultUV">replaceDefaultUV</a></li>
+						<li><a href="TSL.html#reprojectHitPoint">reprojectHitPoint</a></li>
+						<li><a href="TSL.html#reprojectionStretchConfidence">reprojectionStretchConfidence</a></li>
 						<li><a href="TSL.html#retroPass">retroPass</a></li>
 						<li><a href="TSL.html#rgbShift">rgbShift</a></li>
 						<li><a href="TSL.html#rotate">rotate</a></li>
@@ -1391,6 +1433,8 @@
 						<li><a href="TSL.html#rtt">rtt</a></li>
 						<li><a href="TSL.html#sRGBTransferEOTF">sRGBTransferEOTF</a></li>
 						<li><a href="TSL.html#sRGBTransferOETF">sRGBTransferOETF</a></li>
+						<li><a href="TSL.html#sampleBilinearTap">sampleBilinearTap</a></li>
+						<li><a href="TSL.html#sampleHistory4Tap">sampleHistory4Tap</a></li>
 						<li><a href="TSL.html#sampler">sampler</a></li>
 						<li><a href="TSL.html#samplerComparison">samplerComparison</a></li>
 						<li><a href="TSL.html#saturate">saturate</a></li>
@@ -1421,10 +1465,13 @@
 						<li><a href="TSL.html#smaa">smaa</a></li>
 						<li><a href="TSL.html#smoothstep">smoothstep</a></li>
 						<li><a href="TSL.html#smoothstepElement">smoothstepElement</a></li>
+						<li><a href="TSL.html#snoise">snoise</a></li>
+						<li><a href="TSL.html#snoiseVec3">snoiseVec3</a></li>
 						<li><a href="TSL.html#sobel">sobel</a></li>
 						<li><a href="TSL.html#specularColor">specularColor</a></li>
 						<li><a href="TSL.html#specularColorBlended">specularColorBlended</a></li>
 						<li><a href="TSL.html#specularF90">specularF90</a></li>
+						<li><a href="TSL.html#specularLobeTanHalfAngle">specularLobeTanHalfAngle</a></li>
 						<li><a href="TSL.html#spherizeUV">spherizeUV</a></li>
 						<li><a href="TSL.html#spritesheetUV">spritesheetUV</a></li>
 						<li><a href="TSL.html#sqrt">sqrt</a></li>
@@ -1440,6 +1487,7 @@
 						<li><a href="TSL.html#storageBarrier">storageBarrier</a></li>
 						<li><a href="TSL.html#storageElement">storageElement</a></li>
 						<li><a href="TSL.html#storageTexture">storageTexture</a></li>
+						<li><a href="TSL.html#storageTexture3D">storageTexture3D</a></li>
 						<li><a href="TSL.html#struct">struct</a></li>
 						<li><a href="TSL.html#sub">sub</a></li>
 						<li><a href="TSL.html#subBuild">subBuild</a></li>
@@ -1486,7 +1534,6 @@
 						<li><a href="TSL.html#textureSize">textureSize</a></li>
 						<li><a href="TSL.html#textureStore">textureStore</a></li>
 						<li><a href="TSL.html#thickness">thickness</a></li>
-						<li><a href="TSL.html#tiledLights">tiledLights</a></li>
 						<li><a href="TSL.html#time">time</a></li>
 						<li><a href="TSL.html#toneMapping">toneMapping</a></li>
 						<li><a href="TSL.html#toneMappingExposure">toneMappingExposure</a></li>
@@ -1494,6 +1541,8 @@
 						<li><a href="TSL.html#traa">traa</a></li>
 						<li><a href="TSL.html#transformDirection">transformDirection</a></li>
 						<li><a href="TSL.html#transformNormal">transformNormal</a></li>
+						<li><a href="TSL.html#transformNormalByInverseViewMatrix">transformNormalByInverseViewMatrix</a></li>
+						<li><a href="TSL.html#transformNormalByViewMatrix">transformNormalByViewMatrix</a></li>
 						<li><a href="TSL.html#transformNormalToView">transformNormalToView</a></li>
 						<li><a href="TSL.html#transformedClearcoatNormalView">transformedClearcoatNormalView</a></li>
 						<li><a href="TSL.html#transformedNormalView">transformedNormalView</a></li>
@@ -1514,6 +1563,7 @@
 						<li><a href="TSL.html#uniformTexture">uniformTexture</a></li>
 						<li><a href="TSL.html#unpackHalf2x16">unpackHalf2x16</a></li>
 						<li><a href="TSL.html#unpackNormal">unpackNormal</a></li>
+						<li><a href="TSL.html#unpackRGBToNormal">unpackRGBToNormal</a></li>
 						<li><a href="TSL.html#unpackSnorm2x16">unpackSnorm2x16</a></li>
 						<li><a href="TSL.html#unpackUnorm2x16">unpackUnorm2x16</a></li>
 						<li><a href="TSL.html#unpremultiplyAlpha">unpremultiplyAlpha</a></li>
@@ -1522,6 +1572,7 @@
 						<li><a href="TSL.html#varying">varying</a></li>
 						<li><a href="TSL.html#varyingProperty">varyingProperty</a></li>
 						<li><a href="TSL.html#velocity">velocity</a></li>
+						<li><a href="TSL.html#velocityToUVOffset">velocityToUVOffset</a></li>
 						<li><a href="TSL.html#vertexColor">vertexColor</a></li>
 						<li><a href="TSL.html#vertexIndex">vertexIndex</a></li>
 						<li><a href="TSL.html#vertexStage">vertexStage</a></li>
@@ -1543,6 +1594,7 @@
 						<li><a href="TSL.html#viewportTexture">viewportTexture</a></li>
 						<li><a href="TSL.html#viewportUV">viewportUV</a></li>
 						<li><a href="TSL.html#vignette">vignette</a></li>
+						<li><a href="TSL.html#vogelDisk">vogelDisk</a></li>
 						<li><a href="TSL.html#vogelDiskSample">vogelDiskSample</a></li>
 						<li><a href="TSL.html#wgsl">wgsl</a></li>
 						<li><a href="TSL.html#workgroupArray">workgroupArray</a></li>
@@ -1598,11 +1650,14 @@
 						<li><a href="global.html#DynamicCopyUsage">DynamicCopyUsage</a></li>
 						<li><a href="global.html#DynamicDrawUsage">DynamicDrawUsage</a></li>
 						<li><a href="global.html#DynamicReadUsage">DynamicReadUsage</a></li>
+						<li><a href="global.html#ENV_RAY_LENGTH">ENV_RAY_LENGTH</a></li>
+						<li><a href="global.html#ENV_RAY_LENGTH_THRESHOLD">ENV_RAY_LENGTH_THRESHOLD</a></li>
 						<li><a href="global.html#EqualCompare">EqualCompare</a></li>
 						<li><a href="global.html#EqualDepth">EqualDepth</a></li>
 						<li><a href="global.html#EqualStencilFunc">EqualStencilFunc</a></li>
 						<li><a href="global.html#EquirectangularReflectionMapping">EquirectangularReflectionMapping</a></li>
 						<li><a href="global.html#EquirectangularRefractionMapping">EquirectangularRefractionMapping</a></li>
+						<li><a href="global.html#F_Schlick">F_Schlick</a></li>
 						<li><a href="global.html#FloatType">FloatType</a></li>
 						<li><a href="global.html#FrontSide">FrontSide</a></li>
 						<li><a href="global.html#GLSL1">GLSL1</a></li>
@@ -1782,20 +1837,41 @@
 						<li><a href="global.html#ZeroFactor">ZeroFactor</a></li>
 						<li><a href="global.html#ZeroSlopeEnding">ZeroSlopeEnding</a></li>
 						<li><a href="global.html#ZeroStencilOp">ZeroStencilOp</a></li>
+						<li><a href="global.html#addArcade">addArcade</a></li>
+						<li><a href="global.html#addCornice">addCornice</a></li>
+						<li><a href="global.html#addParapet">addParapet</a></li>
+						<li><a href="global.html#addSpandrelBands">addSpandrelBands</a></li>
+						<li><a href="global.html#bakeGroups">bakeGroups</a></li>
+						<li><a href="global.html#batchColor">batchColor</a></li>
+						<li><a href="global.html#bilinearHistoryTap">bilinearHistoryTap</a></li>
+						<li><a href="global.html#bindAnalyticNoise">bindAnalyticNoise</a></li>
+						<li><a href="global.html#bindTemporalCameraUniforms">bindTemporalCameraUniforms</a></li>
 						<li><a href="global.html#buildData3DTexture">buildData3DTexture</a></li>
+						<li><a href="global.html#buildFaces">buildFaces</a></li>
+						<li><a href="global.html#buildFootprint">buildFootprint</a></li>
 						<li><a href="global.html#buildMesh">buildMesh</a></li>
+						<li><a href="global.html#buildingPalette">buildingPalette</a></li>
 						<li><a href="global.html#ceilPowerOfTwo">ceilPowerOfTwo</a></li>
+						<li><a href="global.html#closestLineToLine">closestLineToLine</a></li>
 						<li><a href="global.html#contain">contain</a></li>
 						<li><a href="global.html#convertArray">convertArray</a></li>
 						<li><a href="global.html#cover">cover</a></li>
+						<li><a href="global.html#createBuildingMaterial">createBuildingMaterial</a></li>
 						<li><a href="global.html#createCanvasElement">createCanvasElement</a></li>
 						<li><a href="global.html#createEvent">createEvent</a></li>
+						<li><a href="global.html#createForestMaterial">createForestMaterial</a></li>
+						<li><a href="global.html#createInstanceMatrixNode">createInstanceMatrixNode</a></li>
+						<li><a href="global.html#createRoadMaterial">createRoadMaterial</a></li>
+						<li><a href="global.html#createSkyscraperMaterial">createSkyscraperMaterial</a></li>
+						<li><a href="global.html#createTreeMaterial">createTreeMaterial</a></li>
 						<li><a href="global.html#damp">damp</a></li>
+						<li><a href="global.html#dampenForVarianceClip">dampenForVarianceClip</a></li>
 						<li><a href="global.html#degToRad">degToRad</a></li>
 						<li><a href="global.html#denormalize">denormalize</a></li>
 						<li><a href="global.html#depthAwareBlend">depthAwareBlend</a></li>
 						<li><a href="global.html#disposeShadowMaterial">disposeShadowMaterial</a></li>
 						<li><a href="global.html#enhanceLogMessage">enhanceLogMessage</a></li>
+						<li><a href="global.html#equirectUvToDir">equirectUvToDir</a></li>
 						<li><a href="global.html#error">error</a></li>
 						<li><a href="global.html#euclideanModulo">euclideanModulo</a></li>
 						<li><a href="global.html#fill">fill</a></li>
@@ -1805,47 +1881,73 @@
 						<li><a href="global.html#generateMagicSquare">generateMagicSquare</a></li>
 						<li><a href="global.html#generateMagicSquareNoise">generateMagicSquareNoise</a></li>
 						<li><a href="global.html#generateUUID">generateUUID</a></li>
+						<li><a href="global.html#getBatchingColor">getBatchingColor</a></li>
 						<li><a href="global.html#getByteLength">getByteLength</a></li>
 						<li><a href="global.html#getCacheKey">getCacheKey</a></li>
 						<li><a href="global.html#getConsoleFunction">getConsoleFunction</a></li>
 						<li><a href="global.html#getDistanceAttenuation">getDistanceAttenuation</a></li>
 						<li><a href="global.html#getElementsByTagName">getElementsByTagName</a></li>
+						<li><a href="global.html#getEntry">getEntry</a></li>
 						<li><a href="global.html#getFilteredStack">getFilteredStack</a></li>
 						<li><a href="global.html#getFloatLength">getFloatLength</a></li>
 						<li><a href="global.html#getFormat">getFormat</a></li>
+						<li><a href="global.html#getIndirectIndex">getIndirectIndex</a></li>
 						<li><a href="global.html#getKeyframeOrder">getKeyframeOrder</a></li>
 						<li><a href="global.html#getMembersLayout">getMembersLayout</a></li>
+						<li><a href="global.html#getMorph">getMorph</a></li>
+						<li><a href="global.html#getPreviousInstance">getPreviousInstance</a></li>
+						<li><a href="global.html#getPreviousSkinnedPosition">getPreviousSkinnedPosition</a></li>
+						<li><a href="global.html#getSkinnedNormalAndTangent">getSkinnedNormalAndTangent</a></li>
+						<li><a href="global.html#getSkinnedPosition">getSkinnedPosition</a></li>
+						<li><a href="global.html#getSpecularDominantFactor">getSpecularDominantFactor</a></li>
 						<li><a href="global.html#getStrideLength">getStrideLength</a></li>
 						<li><a href="global.html#getTextureIndex">getTextureIndex</a></li>
 						<li><a href="global.html#getUniforms">getUniforms</a></li>
 						<li><a href="global.html#getVectorLength">getVectorLength</a></li>
 						<li><a href="global.html#getViewZNode">getViewZNode</a></li>
+						<li><a href="global.html#ggxReflectionSample">ggxReflectionSample</a></li>
+						<li><a href="global.html#ggxReflectionStruct">ggxReflectionStruct</a></li>
+						<li><a href="global.html#instanceColor">instanceColor</a></li>
 						<li><a href="global.html#inverseLerp">inverseLerp</a></li>
 						<li><a href="global.html#isPowerOfTwo">isPowerOfTwo</a></li>
 						<li><a href="global.html#isTypedArray">isTypedArray</a></li>
 						<li><a href="global.html#lerp">lerp</a></li>
+						<li><a href="global.html#lineDistance">lineDistance</a></li>
 						<li><a href="global.html#makeClipAdditive">makeClipAdditive</a></li>
 						<li><a href="global.html#mapLinear">mapLinear</a></li>
+						<li><a href="global.html#outgoingLight">outgoingLight</a></li>
+						<li><a href="global.html#pickBuildingColor">pickBuildingColor</a></li>
 						<li><a href="global.html#pingpong">pingpong</a></li>
 						<li><a href="global.html#radToDeg">radToDeg</a></li>
 						<li><a href="global.html#randFloat">randFloat</a></li>
 						<li><a href="global.html#randFloatSpread">randFloatSpread</a></li>
 						<li><a href="global.html#randInt">randInt</a></li>
+						<li><a href="global.html#rgbToYCoCg">rgbToYCoCg</a></li>
 						<li><a href="global.html#sample">sample</a></li>
 						<li><a href="global.html#seededRandom">seededRandom</a></li>
 						<li><a href="global.html#setConsoleFunction">setConsoleFunction</a></li>
 						<li><a href="global.html#setProjectionFromUnion">setProjectionFromUnion</a></li>
 						<li><a href="global.html#setQuaternionFromProperEuler">setQuaternionFromProperEuler</a></li>
+						<li><a href="global.html#setupWebGLXRFallback">setupWebGLXRFallback</a></li>
 						<li><a href="global.html#shadowRenderObjectFunction">shadowRenderObjectFunction</a></li>
+						<li><a href="global.html#slab">slab</a></li>
 						<li><a href="global.html#smootherstep">smootherstep</a></li>
 						<li><a href="global.html#sortedArray">sortedArray</a></li>
 						<li><a href="global.html#subclip">subclip</a></li>
+						<li><a href="global.html#temporalReproject">temporalReproject</a></li>
 						<li><a href="global.html#toHalfFloat">toHalfFloat</a></li>
+						<li><a href="global.html#totalDiffuse">totalDiffuse</a></li>
+						<li><a href="global.html#totalSpecular">totalSpecular</a></li>
+						<li><a href="global.html#trimSegmentAlpha">trimSegmentAlpha</a></li>
 						<li><a href="global.html#updateCamera">updateCamera</a></li>
 						<li><a href="global.html#updateUserCamera">updateUserCamera</a></li>
 						<li><a href="global.html#viewportResolution">viewportResolution</a></li>
 						<li><a href="global.html#warn">warn</a></li>
 						<li><a href="global.html#warnOnce">warnOnce</a></li>
+						<li><a href="global.html#worldEnd">worldEnd</a></li>
+						<li><a href="global.html#worldPos">worldPos</a></li>
+						<li><a href="global.html#worldStart">worldStart</a></li>
+						<li><a href="global.html#ycocgToRGB">ycocgToRGB</a></li>
 						<li><a href="global.html#yieldToMain">yieldToMain</a></li>
 					</ul>
 

+ 65 - 21
docs/llms-full.txt

@@ -18,8 +18,8 @@ CORRECT - modern pattern (always use latest version):
 <script type="importmap">
 {
   "imports": {
-    "three": "https://cdn.jsdelivr.net/npm/three@0.184.0/build/three.module.js",
-    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.184.0/examples/jsm/"
+    "three": "https://cdn.jsdelivr.net/npm/three@0.185.0/build/three.module.js",
+    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.185.0/examples/jsm/"
   }
 }
 </script>
@@ -100,8 +100,8 @@ When using TSL, use node-based materials:
 <script type="importmap">
 {
   "imports": {
-    "three": "https://cdn.jsdelivr.net/npm/three@0.184.0/build/three.module.js",
-    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.184.0/examples/jsm/"
+    "three": "https://cdn.jsdelivr.net/npm/three@0.185.0/build/three.module.js",
+    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.185.0/examples/jsm/"
   }
 }
 </script>
@@ -175,9 +175,9 @@ renderer.setAnimationLoop( animate );
 <script type="importmap">
 {
   "imports": {
-    "three": "https://cdn.jsdelivr.net/npm/three@0.184.0/build/three.webgpu.js",
-    "three/tsl": "https://cdn.jsdelivr.net/npm/three@0.184.0/build/three.tsl.js",
-    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.184.0/examples/jsm/"
+    "three": "https://cdn.jsdelivr.net/npm/three@0.185.0/build/three.webgpu.js",
+    "three/tsl": "https://cdn.jsdelivr.net/npm/three@0.185.0/build/three.tsl.js",
+    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.185.0/examples/jsm/"
   }
 }
 </script>
@@ -322,6 +322,7 @@ An Approach to Productive and Maintainable Shader Creation.
 - [Storage](#storage)
 - [Struct](#struct)
 - [Flow Control](#flow-control)
+- [Override Node](#override-node)
 - [Fog](#fog)
 - [Color Adjustments](#color-adjustments)
 - [Utilities](#utilities)
@@ -760,7 +761,7 @@ It's possible use `xyzw`, `rgba` or `stpq`.
 | Name | Description |
 | -- | -- |
 | `.add( node \| value, ... )` | Return the addition of two or more value. |
-| `.sub( node \| value )` | Return the subraction of two or more value. |
+| `.sub( node \| value )` | Return the subtraction of two or more value. |
 | `.mul( node \| value )` | Return the multiplication of two or more value. |
 | `.div( node \| value )` | Return the division of two or more value. |
 | `.mod( node \| value )` | Computes the remainder of dividing the first node by the second. |
@@ -1173,6 +1174,8 @@ The module also provides `Break()` and `Continue()` TSL expression for loop cont
 | `step( edge, x )` | Generate a step function by comparing two values. |
 | `tan( x )` | Return the tangent of the parameter. |
 | `transformDirection( dir, matrix )` | Transform the direction of a vector by a matrix and then normalize the result. |
+| `transformNormalByViewMatrix( normal, viewMatrix )` | Transform a normal vector (given in world space) by the view matrix and normalize the result. |
+| `transformNormalByInverseViewMatrix( normal, viewMatrix )` | Transform a normal vector (given in view space) by the inverse of the view matrix and normalize the result. |
 | `trunc( x )` | Truncate the parameter, removing the fractional part. |
 
 ```js
@@ -1356,6 +1359,7 @@ Screen nodes will return the values related to the current `frame buffer`, eithe
 | `spherizeUV( uv, strength, centerNode = vec2( 0.5 ) )` | Distorts UV coordinates with a spherical effect around a center point. | `vec2` |
 | `spritesheetUV( count, uv = uv(), frame = float( 0 ) )` | Computes UV coordinates for a sprite sheet based on the number of frames, UV coordinates, and frame index. | `vec2` |
 | `equirectUV( direction = positionWorldDirection )` | Computes UV coordinates for equirectangular mapping based on the direction vector. | `vec2` |
+| `equirectDirection( uv = uv() )` | Computes a direction vector from the given equirectangular UV coordinates (inverse of `equirectUV`). | `vec3` |
 
 ```js
 import { texture, matcapUV } from 'three/tsl';
@@ -1403,8 +1407,8 @@ const matcap = texture( matcapMap, matcapUV );
 
 | Variable | Description | Type |
 | -- | -- | -- |
-| `directionToColor( value )` | Converts direction vector to color. | `color` |
-| `colorToDirection( value )` | Converts color to direction vector. | `vec3` |
+| `packNormalToRGB( value )` | Converts normal vector to color. | `color` |
+| `unpackRGBToNormal( value )` | Converts color to normal vector. | `vec3` |
 
 ## Render Pipeline
 
@@ -1442,18 +1446,18 @@ MRT allows capturing multiple outputs from a single render pass. Instead of rend
 Use `setMRT()` with the `mrt()` function to define which outputs to capture:
 
 ```js
-import { pass, mrt, output, normalView, velocity, directionToColor } from 'three/tsl';
+import { pass, mrt, output, normalView, velocity, packNormalToRGB } from 'three/tsl';
 
 const scenePass = pass( scene, camera );
 
 scenePass.setMRT( mrt( {
 	output: output,                          // Final color output
-	normal: directionToColor( normalView ),  // View-space normals encoded as colors
+	normal: packNormalToRGB( normalView ),   // View-space normals encoded as colors
 	velocity: velocity                       // Motion vectors for temporal effects
 } ) );
 ```
 
-Each MRT entry accepts any TSL node, allowing you to customize outputs using formulas, encoders, or material accessors. For example, `directionToColor( normalView )` encodes view-space normals into RGB values. You can use any TSL function to transform, combine, or encode data before writing to the render target.
+Each MRT entry accepts any TSL node, allowing you to customize outputs using formulas, encoders, or material accessors. For example, `packNormalToRGB( normalView )` encodes view-space normals into RGB values. You can use any TSL function to transform, combine, or encode data before writing to the render target.
 
 Within a TSL function `Fn( ( { material, object } ) => { ... } )`, you have complete access to the current material and object being rendered, enabling full customization of outputs.
 
@@ -1690,6 +1694,33 @@ const customFragment = Fn( () => {
 material.colorNode = customFragment();
 ```
 
+## Override Node
+
+Override nodes allow you to replace specific target nodes within a node sub-graph or flow dynamically during compilation, without having to reconstruct or duplicate the source nodes. This is useful, for example, to inject a custom `positionLocal` or normal into an existing flow through the material's `contextNode`.
+
+| Name | Description |
+| -- | -- |
+| `overrideNode( targetNode, callback = null, flowNode = null )` | Overrides a single target node. `callback` returns the overriding node (receiving the builder as argument) or can be the overriding node itself. |
+| `overrideNodes( overrides, flowNode = null )` | Overrides multiple target nodes at once using a `Map` or an array of `[ targetNode, callback \| node ]` pairs. |
+
+Example:
+
+```js
+import { overrideNode, overrideNodes, positionLocal, positionView, vec3 } from 'three/tsl';
+
+// Override a single node through the material context
+material.contextNode = overrideNode( positionLocal, () => positionLocal.add( vec3( 1, 0, 0 ) ) );
+
+// Override multiple nodes at once
+material.contextNode = overrideNodes( [
+	[ positionView, customPositionView ], // You can use a node directly like customPositionView.
+	[ positionLocal, ( builder ) => positionLocal.add( vec3( 1, 0, 0 ) ) ]
+] );
+
+// Method chaining is also supported
+node.overrideNode( positionLocal, () => positionLocal.add( vec3( 1, 0, 0 ) ) );
+```
+
 ## Fog
 
 Functions for creating fog effects in the scene. Assign the fog node to `scene.fogNode`.
@@ -1747,6 +1778,7 @@ Utility functions for common shader tasks.
 | -- | -- | -- |
 | `billboarding( { position, horizontal, vertical } )` | Orients flat meshes always towards the camera. `position`: vertex positions in world space (default: `null`). `horizontal`: follow camera horizontally (default: `true`). `vertical`: follow camera vertically (default: `false`). | `vec3` |
 | `checker( coord )` | Creates a 2x2 checkerboard pattern. | `float` |
+| `negateOnBackSide( vector )` | Negates a vector when rendering the back side of a face, according to the material's `side` configuration (`BackSide`, `DoubleSide` or `FrontSide`). | `vec3` |
 
 Example:
 
@@ -1898,6 +1930,7 @@ The following documentation pages are available in markdown format at `https://t
 
 - [ARButton](https://threejs.org/docs/pages/ARButton.html.md)
 - [AmmoPhysics](https://threejs.org/docs/pages/AmmoPhysics.html.md)
+- [Backend](https://threejs.org/docs/pages/Backend.html.md)
 - [BasicLightingModel](https://threejs.org/docs/pages/BasicLightingModel.html.md)
 - [BatchedMesh](https://threejs.org/docs/pages/BatchedMesh.html.md)
 - [BezierInterpolant](https://threejs.org/docs/pages/BezierInterpolant.html.md)
@@ -1919,8 +1952,10 @@ The following documentation pages are available in markdown format at `https://t
 - [CanvasTarget](https://threejs.org/docs/pages/CanvasTarget.html.md)
 - [Capsule](https://threejs.org/docs/pages/Capsule.html.md)
 - [CinquefoilKnot](https://threejs.org/docs/pages/CinquefoilKnot.html.md)
+- [CityGenerator](https://threejs.org/docs/pages/CityGenerator.html.md)
 - [ClippingGroup](https://threejs.org/docs/pages/ClippingGroup.html.md)
 - [Clock](https://threejs.org/docs/pages/Clock.html.md)
+- [ClusteredLighting](https://threejs.org/docs/pages/ClusteredLighting.html.md)
 - [ColladaComposer](https://threejs.org/docs/pages/ColladaComposer.html.md)
 - [ColladaParser](https://threejs.org/docs/pages/ColladaParser.html.md)
 - [ColorConverter](https://threejs.org/docs/pages/ColorConverter.html.md)
@@ -1944,7 +1979,9 @@ The following documentation pages are available in markdown format at `https://t
 - [Earcut](https://threejs.org/docs/pages/Earcut.html.md)
 - [EdgeSplitModifier](https://threejs.org/docs/pages/EdgeSplitModifier.html.md)
 - [EffectComposer](https://threejs.org/docs/pages/EffectComposer.html.md)
+- [EnvMapCDFGenerator](https://threejs.org/docs/pages/EnvMapCDFGenerator.html.md)
 - [EventDispatcher](https://threejs.org/docs/pages/EventDispatcher.html.md)
+- [FaceFrame](https://threejs.org/docs/pages/FaceFrame.html.md)
 - [FigureEightPolynomialKnot](https://threejs.org/docs/pages/FigureEightPolynomialKnot.html.md)
 - [Float16BufferAttribute](https://threejs.org/docs/pages/Float16BufferAttribute.html.md)
 - [Float32BufferAttribute](https://threejs.org/docs/pages/Float32BufferAttribute.html.md)
@@ -1952,6 +1989,7 @@ The following documentation pages are available in markdown format at `https://t
 - [Fog](https://threejs.org/docs/pages/Fog.html.md)
 - [FogExp2](https://threejs.org/docs/pages/FogExp2.html.md)
 - [Font](https://threejs.org/docs/pages/Font.html.md)
+- [ForestGenerator](https://threejs.org/docs/pages/ForestGenerator.html.md)
 - [FullScreenQuad](https://threejs.org/docs/pages/FullScreenQuad.html.md)
 - [GLBufferAttribute](https://threejs.org/docs/pages/GLBufferAttribute.html.md)
 - [GLSLNodeBuilder](https://threejs.org/docs/pages/GLSLNodeBuilder.html.md)
@@ -1965,6 +2003,7 @@ The following documentation pages are available in markdown format at `https://t
 - [Gyroscope](https://threejs.org/docs/pages/Gyroscope.html.md)
 - [HTMLMesh](https://threejs.org/docs/pages/HTMLMesh.html.md)
 - [ImageUtils](https://threejs.org/docs/pages/ImageUtils.html.md)
+- [ImportanceSampledEnvironment](https://threejs.org/docs/pages/ImportanceSampledEnvironment.html.md)
 - [ImprovedNoise](https://threejs.org/docs/pages/ImprovedNoise.html.md)
 - [IndirectStorageBufferAttribute](https://threejs.org/docs/pages/IndirectStorageBufferAttribute.html.md)
 - [Info](https://threejs.org/docs/pages/Info.html.md)
@@ -2072,31 +2111,36 @@ The following documentation pages are available in markdown format at `https://t
 - [Shape](https://threejs.org/docs/pages/Shape.html.md)
 - [ShapePath](https://threejs.org/docs/pages/ShapePath.html.md)
 - [ShapeUtils](https://threejs.org/docs/pages/ShapeUtils.html.md)
+- [SidewalkGenerator](https://threejs.org/docs/pages/SidewalkGenerator.html.md)
 - [SimplexNoise](https://threejs.org/docs/pages/SimplexNoise.html.md)
 - [SimplifyModifier](https://threejs.org/docs/pages/SimplifyModifier.html.md)
 - [Skeleton](https://threejs.org/docs/pages/Skeleton.html.md)
 - [SkinnedMesh](https://threejs.org/docs/pages/SkinnedMesh.html.md)
 - [Sky](https://threejs.org/docs/pages/Sky.html.md)
 - [SkyMesh](https://threejs.org/docs/pages/SkyMesh.html.md)
+- [SkyscraperGenerator](https://threejs.org/docs/pages/SkyscraperGenerator.html.md)
 - [Source](https://threejs.org/docs/pages/Source.html.md)
 - [Spherical](https://threejs.org/docs/pages/Spherical.html.md)
 - [SphericalHarmonics3](https://threejs.org/docs/pages/SphericalHarmonics3.html.md)
 - [SpotLightShadow](https://threejs.org/docs/pages/SpotLightShadow.html.md)
 - [Sprite](https://threejs.org/docs/pages/Sprite.html.md)
 - [StackTrace](https://threejs.org/docs/pages/StackTrace.html.md)
+- [StandardNodeLibrary](https://threejs.org/docs/pages/StandardNodeLibrary.html.md)
 - [StorageBufferAttribute](https://threejs.org/docs/pages/StorageBufferAttribute.html.md)
 - [StorageInstancedBufferAttribute](https://threejs.org/docs/pages/StorageInstancedBufferAttribute.html.md)
 - [StringKeyframeTrack](https://threejs.org/docs/pages/StringKeyframeTrack.html.md)
 - [TSL](https://threejs.org/docs/pages/TSL.html.md)
 - [Tab](https://threejs.org/docs/pages/Tab.html.md)
+- [TerrainGenerator](https://threejs.org/docs/pages/TerrainGenerator.html.md)
 - [TessellateModifier](https://threejs.org/docs/pages/TessellateModifier.html.md)
 - [TextureUtils](https://threejs.org/docs/pages/TextureUtils.html.md)
-- [TiledLighting](https://threejs.org/docs/pages/TiledLighting.html.md)
+- [TileCreasedNormalsPlugin](https://threejs.org/docs/pages/TileCreasedNormalsPlugin.html.md)
 - [Timer](https://threejs.org/docs/pages/Timer.html.md)
 - [TimestampQueryPool](https://threejs.org/docs/pages/TimestampQueryPool.html.md)
 - [ToonLightingModel](https://threejs.org/docs/pages/ToonLightingModel.html.md)
 - [TorusKnot](https://threejs.org/docs/pages/TorusKnot.html.md)
 - [Transpiler](https://threejs.org/docs/pages/Transpiler.html.md)
+- [TreeGenerator](https://threejs.org/docs/pages/TreeGenerator.html.md)
 - [TrefoilKnot](https://threejs.org/docs/pages/TrefoilKnot.html.md)
 - [TrefoilPolynomialKnot](https://threejs.org/docs/pages/TrefoilPolynomialKnot.html.md)
 - [TubePainter](https://threejs.org/docs/pages/TubePainter.html.md)
@@ -2214,6 +2258,7 @@ The following documentation pages are available in markdown format at `https://t
 - [LatheGeometry](https://threejs.org/docs/pages/LatheGeometry.html.md)
 - [LineGeometry](https://threejs.org/docs/pages/LineGeometry.html.md)
 - [LineSegmentsGeometry](https://threejs.org/docs/pages/LineSegmentsGeometry.html.md)
+- [LoftGeometry](https://threejs.org/docs/pages/LoftGeometry.html.md)
 - [OctahedronGeometry](https://threejs.org/docs/pages/OctahedronGeometry.html.md)
 - [ParametricGeometry](https://threejs.org/docs/pages/ParametricGeometry.html.md)
 - [PlaneGeometry](https://threejs.org/docs/pages/PlaneGeometry.html.md)
@@ -2486,7 +2531,6 @@ The following documentation pages are available in markdown format at `https://t
 - [AmbientLightDataNode](https://threejs.org/docs/pages/AmbientLightDataNode.html.md)
 - [AmbientLightNode](https://threejs.org/docs/pages/AmbientLightNode.html.md)
 - [AnalyticLightNode](https://threejs.org/docs/pages/AnalyticLightNode.html.md)
-- [AnamorphicNode](https://threejs.org/docs/pages/AnamorphicNode.html.md)
 - [ArrayElementNode](https://threejs.org/docs/pages/ArrayElementNode.html.md)
 - [ArrayNode](https://threejs.org/docs/pages/ArrayNode.html.md)
 - [AssignNode](https://threejs.org/docs/pages/AssignNode.html.md)
@@ -2495,7 +2539,6 @@ The following documentation pages are available in markdown format at `https://t
 - [BarrierNode](https://threejs.org/docs/pages/BarrierNode.html.md)
 - [BasicEnvironmentNode](https://threejs.org/docs/pages/BasicEnvironmentNode.html.md)
 - [BasicLightMapNode](https://threejs.org/docs/pages/BasicLightMapNode.html.md)
-- [BatchNode](https://threejs.org/docs/pages/BatchNode.html.md)
 - [BilateralBlurNode](https://threejs.org/docs/pages/BilateralBlurNode.html.md)
 - [BitcastNode](https://threejs.org/docs/pages/BitcastNode.html.md)
 - [BitcountNode](https://threejs.org/docs/pages/BitcountNode.html.md)
@@ -2508,6 +2551,7 @@ The following documentation pages are available in markdown format at `https://t
 - [CSMShadowNode](https://threejs.org/docs/pages/CSMShadowNode.html.md)
 - [ChromaticAberrationNode](https://threejs.org/docs/pages/ChromaticAberrationNode.html.md)
 - [ClippingNode](https://threejs.org/docs/pages/ClippingNode.html.md)
+- [ClusteredLightsNode](https://threejs.org/docs/pages/ClusteredLightsNode.html.md)
 - [CodeNode](https://threejs.org/docs/pages/CodeNode.html.md)
 - [ColorSpaceNode](https://threejs.org/docs/pages/ColorSpaceNode.html.md)
 - [ComputeBuiltinNode](https://threejs.org/docs/pages/ComputeBuiltinNode.html.md)
@@ -2544,8 +2588,6 @@ The following documentation pages are available in markdown format at `https://t
 - [IndexNode](https://threejs.org/docs/pages/IndexNode.html.md)
 - [InputNode](https://threejs.org/docs/pages/InputNode.html.md)
 - [InspectorNode](https://threejs.org/docs/pages/InspectorNode.html.md)
-- [InstanceNode](https://threejs.org/docs/pages/InstanceNode.html.md)
-- [InstancedMeshNode](https://threejs.org/docs/pages/InstancedMeshNode.html.md)
 - [IrradianceNode](https://threejs.org/docs/pages/IrradianceNode.html.md)
 - [IsolateNode](https://threejs.org/docs/pages/IsolateNode.html.md)
 - [JoinNode](https://threejs.org/docs/pages/JoinNode.html.md)
@@ -2563,13 +2605,13 @@ The following documentation pages are available in markdown format at `https://t
 - [MaxMipLevelNode](https://threejs.org/docs/pages/MaxMipLevelNode.html.md)
 - [MemberNode](https://threejs.org/docs/pages/MemberNode.html.md)
 - [ModelNode](https://threejs.org/docs/pages/ModelNode.html.md)
-- [MorphNode](https://threejs.org/docs/pages/MorphNode.html.md)
 - [Node](https://threejs.org/docs/pages/Node.html.md)
 - [NormalMapNode](https://threejs.org/docs/pages/NormalMapNode.html.md)
 - [Object3DNode](https://threejs.org/docs/pages/Object3DNode.html.md)
 - [OperatorNode](https://threejs.org/docs/pages/OperatorNode.html.md)
 - [OutlineNode](https://threejs.org/docs/pages/OutlineNode.html.md)
 - [OutputStructNode](https://threejs.org/docs/pages/OutputStructNode.html.md)
+- [OverrideContextNode](https://threejs.org/docs/pages/OverrideContextNode.html.md)
 - [PMREMNode](https://threejs.org/docs/pages/PMREMNode.html.md)
 - [PackFloatNode](https://threejs.org/docs/pages/PackFloatNode.html.md)
 - [ParameterNode](https://threejs.org/docs/pages/ParameterNode.html.md)
@@ -2586,6 +2628,7 @@ The following documentation pages are available in markdown format at `https://t
 - [RTTNode](https://threejs.org/docs/pages/RTTNode.html.md)
 - [RangeNode](https://threejs.org/docs/pages/RangeNode.html.md)
 - [RectAreaLightNode](https://threejs.org/docs/pages/RectAreaLightNode.html.md)
+- [RecurrentDenoiseNode](https://threejs.org/docs/pages/RecurrentDenoiseNode.html.md)
 - [ReferenceBaseNode](https://threejs.org/docs/pages/ReferenceBaseNode.html.md)
 - [ReferenceElementNode](https://threejs.org/docs/pages/ReferenceElementNode.html.md)
 - [ReferenceNode](https://threejs.org/docs/pages/ReferenceNode.html.md)
@@ -2603,7 +2646,6 @@ The following documentation pages are available in markdown format at `https://t
 - [ShadowBaseNode](https://threejs.org/docs/pages/ShadowBaseNode.html.md)
 - [ShadowNode](https://threejs.org/docs/pages/ShadowNode.html.md)
 - [SharpenNode](https://threejs.org/docs/pages/SharpenNode.html.md)
-- [SkinningNode](https://threejs.org/docs/pages/SkinningNode.html.md)
 - [SobelOperatorNode](https://threejs.org/docs/pages/SobelOperatorNode.html.md)
 - [SplitNode](https://threejs.org/docs/pages/SplitNode.html.md)
 - [SpotLightDataNode](https://threejs.org/docs/pages/SpotLightDataNode.html.md)
@@ -2611,6 +2653,7 @@ The following documentation pages are available in markdown format at `https://t
 - [StackNode](https://threejs.org/docs/pages/StackNode.html.md)
 - [StorageArrayElementNode](https://threejs.org/docs/pages/StorageArrayElementNode.html.md)
 - [StorageBufferNode](https://threejs.org/docs/pages/StorageBufferNode.html.md)
+- [StorageTexture3DNode](https://threejs.org/docs/pages/StorageTexture3DNode.html.md)
 - [StorageTextureNode](https://threejs.org/docs/pages/StorageTextureNode.html.md)
 - [StructNode](https://threejs.org/docs/pages/StructNode.html.md)
 - [StructTypeNode](https://threejs.org/docs/pages/StructTypeNode.html.md)
@@ -2619,11 +2662,11 @@ The following documentation pages are available in markdown format at `https://t
 - [TAAUNode](https://threejs.org/docs/pages/TAAUNode.html.md)
 - [TRAANode](https://threejs.org/docs/pages/TRAANode.html.md)
 - [TempNode](https://threejs.org/docs/pages/TempNode.html.md)
+- [TemporalReprojectNode](https://threejs.org/docs/pages/TemporalReprojectNode.html.md)
 - [Texture3DNode](https://threejs.org/docs/pages/Texture3DNode.html.md)
 - [TextureNode](https://threejs.org/docs/pages/TextureNode.html.md)
 - [TextureSizeNode](https://threejs.org/docs/pages/TextureSizeNode.html.md)
 - [TileShadowNode](https://threejs.org/docs/pages/TileShadowNode.html.md)
-- [TiledLightsNode](https://threejs.org/docs/pages/TiledLightsNode.html.md)
 - [ToneMappingNode](https://threejs.org/docs/pages/ToneMappingNode.html.md)
 - [TransitionNode](https://threejs.org/docs/pages/TransitionNode.html.md)
 - [UniformArrayElementNode](https://threejs.org/docs/pages/UniformArrayElementNode.html.md)
@@ -2691,6 +2734,7 @@ The following documentation pages are available in markdown format at `https://t
 - [module-GammaCorrectionShader](https://threejs.org/docs/pages/module-GammaCorrectionShader.html.md)
 - [module-GeometryCompressionUtils](https://threejs.org/docs/pages/module-GeometryCompressionUtils.html.md)
 - [module-GeometryUtils](https://threejs.org/docs/pages/module-GeometryUtils.html.md)
+- [module-GroundedSkybox](https://threejs.org/docs/pages/module-GroundedSkybox.html.md)
 - [module-HalftoneShader](https://threejs.org/docs/pages/module-HalftoneShader.html.md)
 - [module-HorizontalBlurShader](https://threejs.org/docs/pages/module-HorizontalBlurShader.html.md)
 - [module-HorizontalTiltShiftShader](https://threejs.org/docs/pages/module-HorizontalTiltShiftShader.html.md)

+ 2 - 2
docs/llms.txt

@@ -18,8 +18,8 @@ CORRECT - modern pattern (always use latest version):
 <script type="importmap">
 {
   "imports": {
-    "three": "https://cdn.jsdelivr.net/npm/three@0.184.0/build/three.module.js",
-    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.184.0/examples/jsm/"
+    "three": "https://cdn.jsdelivr.net/npm/three@0.185.0/build/three.module.js",
+    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.185.0/examples/jsm/"
   }
 }
 </script>

+ 1 - 1
docs/pages/ARButton.html

@@ -14,7 +14,7 @@
 			<header>
 				<div class="class-description"><p>A utility class for creating a button that allows to initiate
 immersive AR sessions based on WebXR. The button can be created
-with a factory method and then appended ot the website's DOM.</p></div>
+with a factory method and then appended to the website's DOM.</p></div>
 				<h2>Code Example</h2>
 				<div translate="no"><pre><code class="language-js">document.body.appendChild( ARButton.createButton( renderer ) );
 </code></pre></div>

+ 1 - 1
docs/pages/ARButton.html.md

@@ -1,6 +1,6 @@
 # ARButton
 
-A utility class for creating a button that allows to initiate immersive AR sessions based on WebXR. The button can be created with a factory method and then appended ot the website's DOM.
+A utility class for creating a button that allows to initiate immersive AR sessions based on WebXR. The button can be created with a factory method and then appended to the website's DOM.
 
 ## Code Example
 

+ 4 - 5
docs/pages/AmmoPhysics.html

@@ -13,12 +13,11 @@
 		<section>
 			<header>
 				<div class="class-description"><p>Can be used to include Ammo.js as a Physics engine into
-<code>three.js</code> apps. Make sure to include <code>ammo.wasm.js</code> first:</p>
-<p>It is then possible to initialize the API via:</p>
-<pre><code class="language-js">const physics = await AmmoPhysics();
-</code></pre></div>
+<code>three.js</code> apps. The API can be initialized via:</p>
+<p>The component automatically imports Ammo.js from a CDN so make sure
+to use the component with an active Internet connection.</p></div>
 				<h2>Code Example</h2>
-				<div translate="no"><pre class="prettyprint source"><code>&lt;script src=&quot;jsm/libs/ammo.wasm.js&quot;>&lt;/script>
+				<div translate="no"><pre><code class="language-js">const physics = await AmmoPhysics();
 </code></pre></div>
 			</header>
 			<article>

+ 3 - 7
docs/pages/AmmoPhysics.html.md

@@ -1,17 +1,13 @@
 # AmmoPhysics
 
-Can be used to include Ammo.js as a Physics engine into `three.js` apps. Make sure to include `ammo.wasm.js` first:
+Can be used to include Ammo.js as a Physics engine into `three.js` apps. The API can be initialized via:
 
-It is then possible to initialize the API via:
-
-```js
-const physics = await AmmoPhysics();
-```
+The component automatically imports Ammo.js from a CDN so make sure to use the component with an active Internet connection.
 
 ## Code Example
 
 ```js
-<script src="jsm/libs/ammo.wasm.js"></script>
+const physics = await AmmoPhysics();
 ```
 
 ## Import

+ 0 - 222
docs/pages/AnamorphicNode.html

@@ -1,222 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<meta charset="utf-8">
-	<title>AnamorphicNode - Three.js Docs</title>
-	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
-	<script src="../scripts/highlight.min.js"></script>
-	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
-	<link type="text/css" rel="stylesheet" href="../styles/page.css">
-</head>
-<body>
-		<p class="inheritance" translate="no"><a href="EventDispatcher.html">EventDispatcher</a> → <a href="Node.html">Node</a> → <a href="TempNode.html">TempNode</a> → </p>
-	<h1 translate="no">AnamorphicNode</h1>
-		<section>
-			<header>
-				<div class="class-description"><p>Post processing node for adding an anamorphic flare effect.</p></div>
-			</header>
-			<article>
-				<h2 class="subsection-title">Import</h2>
-				<p><span translate="no">AnamorphicNode</span> is an addon, and must be imported explicitly, see <a href="https://threejs.org/manual/#en/installation" target="_blank" rel="noopener">Installation#Addons</a>.</p>
-				<pre><code class="language-js">import { anamorphic } from 'three/addons/tsl/display/AnamorphicNode.js';</code></pre>
-				<div class="container-overview">
-					<h2>Constructor</h2>
-					<h3 class="name name-method" id="AnamorphicNode" translate="no">new <a href="#AnamorphicNode">AnamorphicNode</a><span class="signature">( textureNode : <span class="param-type"><a href="TextureNode.html">TextureNode</a></span>, thresholdNode : <span class="param-type"><a href="Node.html">Node</a>.&lt;float></span>, scaleNode : <span class="param-type"><a href="Node.html">Node</a>.&lt;float></span>, samples : <span class="param-type">number</span> )</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Constructs a new anamorphic node.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">textureNode</strong>
-									</td>
-									<td class="description last">
-										<p>The texture node that represents the input of the effect.</p>
-									</td>
-								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">thresholdNode</strong>
-									</td>
-									<td class="description last">
-										<p>The threshold is one option to control the intensity and size of the effect.</p>
-									</td>
-								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">scaleNode</strong>
-									</td>
-									<td class="description last">
-										<p>Defines the vertical scale of the flares.</p>
-									</td>
-								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">samples</strong>
-									</td>
-									<td class="description last">
-										<p>More samples result in larger flares and a more expensive runtime behavior.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-					</div>
-				</div>
-				<h2 class="subsection-title">Properties</h2>
-				<div class="member">
-					<h3 class="name" id="colorNode" translate="no">.<a href="#colorNode">colorNode</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;vec3></span> </h3>
-					<div class="description">
-						<p>The color of the flares.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="resolution" translate="no">.<a href="#resolution">resolution</a><span class="type-signature"> : <a href="Vector2.html">Vector2</a></span> </h3>
-					<div class="description">
-						<p>The resolution scale.</p>
-						<p>Default is <code>{(1,1)}</code>.</p>
-					</div>
-						<dl class="details">
-							<dt class="important tag-deprecated"><strong>Deprecated:</strong> Yes</dt>
-						</dl>
-				</div>
-				<div class="member">
-					<h3 class="name" id="resolutionScale" translate="no">.<a href="#resolutionScale">resolutionScale</a><span class="type-signature"> : number</span> </h3>
-					<div class="description">
-						<p>The resolution scale.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="samples" translate="no">.<a href="#samples">samples</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;float></span> </h3>
-					<div class="description">
-						<p>More samples result in larger flares and a more expensive runtime behavior.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="scaleNode" translate="no">.<a href="#scaleNode">scaleNode</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;float></span> </h3>
-					<div class="description">
-						<p>Defines the vertical scale of the flares.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="textureNode" translate="no">.<a href="#textureNode">textureNode</a><span class="type-signature"> : <a href="TextureNode.html">TextureNode</a></span> </h3>
-					<div class="description">
-						<p>The texture node that represents the input of the effect.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="thresholdNode" translate="no">.<a href="#thresholdNode">thresholdNode</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;float></span> </h3>
-					<div class="description">
-						<p>The threshold is one option to control the intensity and size of the effect.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="updateBeforeType" translate="no">.<a href="#updateBeforeType">updateBeforeType</a><span class="type-signature"> : string</span> </h3>
-					<div class="description">
-						<p>The <code>updateBeforeType</code> is set to <code>NodeUpdateType.FRAME</code> since the node renders
-its effect once per frame in <code>updateBefore()</code>.</p>
-						<p>Default is <code>'frame'</code>.</p>
-					</div>
-						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#updateBeforeType">TempNode#updateBeforeType</a></dt>
-						</dl>
-				</div>
-				<h2 class="subsection-title">Methods</h2>
-					<h3 class="name name-method" id="dispose" translate="no">.<a href="#dispose">dispose</a><span class="signature">()</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Frees internal resources. This method should be called
-when the effect is no longer required.</p>
-						</div>
-						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#dispose">TempNode#dispose</a></dt>
-						</dl>
-					</div>
-					<h3 class="name name-method" id="getTextureNode" translate="no">.<a href="#getTextureNode">getTextureNode</a><span class="signature">()</span><span class="type-signature"> : <a href="PassTextureNode.html">PassTextureNode</a></span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Returns the result of the effect as a texture node.</p>
-						</div>
-						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> A texture node that represents the result of the effect.</dt>
-						</dl>
-					</div>
-					<h3 class="name name-method" id="setSize" translate="no">.<a href="#setSize">setSize</a><span class="signature">( width : <span class="param-type">number</span>, height : <span class="param-type">number</span> )</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Sets the size of the effect.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">width</strong>
-									</td>
-									<td class="description last">
-										<p>The width of the effect.</p>
-									</td>
-								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">height</strong>
-									</td>
-									<td class="description last">
-										<p>The height of the effect.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-					</div>
-					<h3 class="name name-method" id="setup" translate="no">.<a href="#setup">setup</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : <a href="PassTextureNode.html">PassTextureNode</a></span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>This method is used to setup the effect's TSL code.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">builder</strong>
-									</td>
-									<td class="description last">
-										<p>The current node builder.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#setup">TempNode#setup</a></dt>
-						</dl>
-					</div>
-					<h3 class="name name-method" id="updateBefore" translate="no">.<a href="#updateBefore">updateBefore</a><span class="signature">( frame : <span class="param-type"><a href="NodeFrame.html">NodeFrame</a></span> )</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>This method is used to render the effect once per frame.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">frame</strong>
-									</td>
-									<td class="description last">
-										<p>The current node frame.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#updateBefore">TempNode#updateBefore</a></dt>
-						</dl>
-					</div>
-				<h2 class="subsection-title">Source</h2>
-				<p>
-					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/display/AnamorphicNode.js" translate="no" target="_blank" rel="noopener">examples/jsm/tsl/display/AnamorphicNode.js</a>
-				</p>
-			</article>
-		</section>
-<script src="../scripts/linenumber.js"></script>
-<script src="../scripts/page.js"></script>
-</body>
-</html>

+ 0 - 127
docs/pages/AnamorphicNode.html.md

@@ -1,127 +0,0 @@
-*Inheritance: EventDispatcher → Node → TempNode →*
-
-# AnamorphicNode
-
-Post processing node for adding an anamorphic flare effect.
-
-## Import
-
-AnamorphicNode is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
-
-```js
-import { anamorphic } from 'three/addons/tsl/display/AnamorphicNode.js';
-```
-
-## Constructor
-
-### new AnamorphicNode( textureNode : TextureNode, thresholdNode : Node.<float>, scaleNode : Node.<float>, samples : number )
-
-Constructs a new anamorphic node.
-
-**textureNode**
-
-The texture node that represents the input of the effect.
-
-**thresholdNode**
-
-The threshold is one option to control the intensity and size of the effect.
-
-**scaleNode**
-
-Defines the vertical scale of the flares.
-
-**samples**
-
-More samples result in larger flares and a more expensive runtime behavior.
-
-## Properties
-
-### .colorNode : Node.<vec3>
-
-The color of the flares.
-
-### .resolution : Vector2
-
-The resolution scale.
-
-Default is `{(1,1)}`.
-
-**Deprecated:** Yes
-
-### .resolutionScale : number
-
-The resolution scale.
-
-### .samples : Node.<float>
-
-More samples result in larger flares and a more expensive runtime behavior.
-
-### .scaleNode : Node.<float>
-
-Defines the vertical scale of the flares.
-
-### .textureNode : TextureNode
-
-The texture node that represents the input of the effect.
-
-### .thresholdNode : Node.<float>
-
-The threshold is one option to control the intensity and size of the effect.
-
-### .updateBeforeType : string
-
-The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders its effect once per frame in `updateBefore()`.
-
-Default is `'frame'`.
-
-**Overrides:** [TempNode#updateBeforeType](TempNode.html#updateBeforeType)
-
-## Methods
-
-### .dispose()
-
-Frees internal resources. This method should be called when the effect is no longer required.
-
-**Overrides:** [TempNode#dispose](TempNode.html#dispose)
-
-### .getTextureNode() : PassTextureNode
-
-Returns the result of the effect as a texture node.
-
-**Returns:** A texture node that represents the result of the effect.
-
-### .setSize( width : number, height : number )
-
-Sets the size of the effect.
-
-**width**
-
-The width of the effect.
-
-**height**
-
-The height of the effect.
-
-### .setup( builder : NodeBuilder ) : PassTextureNode
-
-This method is used to setup the effect's TSL code.
-
-**builder**
-
-The current node builder.
-
-**Overrides:** [TempNode#setup](TempNode.html#setup)
-
-### .updateBefore( frame : NodeFrame )
-
-This method is used to render the effect once per frame.
-
-**frame**
-
-The current node frame.
-
-**Overrides:** [TempNode#updateBefore](TempNode.html#updateBefore)
-
-## Source
-
-[examples/jsm/tsl/display/AnamorphicNode.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/display/AnamorphicNode.js)

+ 0 - 32
docs/pages/AnimationClip.html

@@ -305,38 +305,6 @@ array named &quot;animations&quot; property.</p>
 							<dt class="tag-returns"><strong>Returns:</strong> The new animation clip.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id=".parseAnimation" translate="no">.<a href="#.parseAnimation">parseAnimation</a><span class="signature">( animation : <span class="param-type">Object</span>, bones : <span class="param-type">Array.&lt;<a href="Bone.html">Bone</a>></span> )</span><span class="type-signature"> : <a href="AnimationClip.html">AnimationClip</a></span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Parses the <code>animation.hierarchy</code> format and returns a new animation clip.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">animation</strong>
-									</td>
-									<td class="description last">
-										<p>A serialized animation clip as JSON.</p>
-									</td>
-								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">bones</strong>
-									</td>
-									<td class="description last">
-										<p>An array of bones.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-						<dl class="details">
-							<dt class="important tag-deprecated"><strong>Deprecated:</strong> since r175.</dt>
-						</dl>
-						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The new animation clip.</dt>
-						</dl>
-					</div>
 					<h3 class="name name-method" id=".toJSON" translate="no">.<a href="#.toJSON">toJSON</a><span class="signature">( clip : <span class="param-type"><a href="AnimationClip.html">AnimationClip</a></span> )</span><span class="type-signature"> : Object</span> </h3>
 					<div class="method">
 						<div class="description">

+ 0 - 16
docs/pages/AnimationClip.html.md

@@ -166,22 +166,6 @@ The serialized animation clip.
 
 **Returns:** The new animation clip.
 
-### .parseAnimation( animation : Object, bones : Array.<Bone> ) : AnimationClip
-
-Parses the `animation.hierarchy` format and returns a new animation clip.
-
-**animation**
-
-A serialized animation clip as JSON.
-
-**bones**
-
-An array of bones.
-
-**Deprecated:** since r175.
-
-**Returns:** The new animation clip.
-
 ### .toJSON( clip : AnimationClip ) : Object
 
 Serializes the given animation clip into JSON.

+ 3 - 0
docs/pages/ArcballControls.html

@@ -74,6 +74,9 @@ animation loop when animations are on.</p></div>
 						<p>If set to <code>true</code>, the camera's near and far values will be adjusted every time zoom is
 performed trying to maintain the same visible portion given by initial near and far
 values. Only works with perspective cameras.</p>
+<p>This feature only works as expected if the camera's initial state (position, near and far values)
+is correctly configured before creating the controls. Otherwise <a href="ArcballControls.html#setCamera">ArcballControls#setCamera</a>
+must be called by the application.</p>
 						<p>Default is <code>false</code>.</p>
 					</div>
 				</div>

+ 2 - 0
docs/pages/ArcballControls.html.md

@@ -44,6 +44,8 @@ Default is `null`.
 
 If set to `true`, the camera's near and far values will be adjusted every time zoom is performed trying to maintain the same visible portion given by initial near and far values. Only works with perspective cameras.
 
+This feature only works as expected if the camera's initial state (position, near and far values) is correctly configured before creating the controls. Otherwise [ArcballControls#setCamera](ArcballControls.html#setCamera) must be called by the application.
+
 Default is `false`.
 
 ### .cursorZoom : boolean

+ 1473 - 0
docs/pages/Backend.html

@@ -0,0 +1,1473 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>Backend - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+	<h1 translate="no">Backend</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>Most of the rendering related logic is implemented in the
+<a href="Renderer.html">Renderer</a> module and related management components.
+Sometimes it is required though to execute commands which are
+specific to the current 3D backend (which is WebGPU or WebGL 2).
+This abstract base class defines an interface that encapsulates
+all backend-related logic. Derived classes for each backend must
+implement the interface.</p></div>
+			</header>
+			<article>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="Backend" translate="no">new <a href="#Backend">Backend</a><span class="signature">( parameters : <span class="param-type">Object</span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Constructs a new backend.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">parameters</strong>
+									</td>
+									<td class="description last">
+										<p>An object holding parameters for the backend.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</div>
+				<h2 class="subsection-title">Properties</h2>
+				<div class="member">
+					<h3 class="name" id="coordinateSystem" translate="no">.<a href="#coordinateSystem">coordinateSystem</a><span class="type-signature"> : number</span> <span class="type-signature">(abstract, readonly) </span></h3>
+					<div class="description">
+						<p>The coordinate system of the backend.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="data" translate="no">.<a href="#data">data</a><span class="type-signature"> : WeakMap.&lt;Object, Object></span> </h3>
+					<div class="description">
+						<p>This weak map holds backend-specific data of objects
+like textures, attributes or render targets.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="domElement" translate="no">.<a href="#domElement">domElement</a><span class="type-signature"> : HTMLCanvasElement | OffscreenCanvas</span> </h3>
+					<div class="description">
+						<p>A reference to the canvas element the renderer is drawing to.</p>
+						<p>Default is <code>null</code>.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="hasTimestamp" translate="no">.<a href="#hasTimestamp">hasTimestamp</a><span class="type-signature"> : boolean</span> <span class="type-signature">(readonly) </span></h3>
+					<div class="description">
+						<p>Whether the backend supports query timestamps or not.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="parameters" translate="no">.<a href="#parameters">parameters</a><span class="type-signature"> : Object</span> </h3>
+					<div class="description">
+						<p>The parameters of the backend.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="renderer" translate="no">.<a href="#renderer">renderer</a><span class="type-signature"> : <a href="Renderer.html">Renderer</a></span> </h3>
+					<div class="description">
+						<p>A reference to the renderer.</p>
+						<p>Default is <code>null</code>.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="timestampQueryPool" translate="no">.<a href="#timestampQueryPool">timestampQueryPool</a><span class="type-signature"> : Object</span> </h3>
+					<div class="description">
+						<p>A reference to the timestamp query pool.</p>
+					</div>
+				</div>
+				<div class="member">
+					<h3 class="name" id="trackTimestamp" translate="no">.<a href="#trackTimestamp">trackTimestamp</a><span class="type-signature"> : boolean</span> </h3>
+					<div class="description">
+						<p>Whether to track timestamps with a Timestamp Query API or not.</p>
+						<p>Default is <code>false</code>.</p>
+					</div>
+				</div>
+				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="_getQueryPool" translate="no">.<a href="#_getQueryPool">_getQueryPool</a><span class="signature">( uid : <span class="param-type">string</span> )</span><span class="type-signature"> : <a href="TimestampQueryPool.html">TimestampQueryPool</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns the query pool for the given uid.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">uid</strong>
+									</td>
+									<td class="description last">
+										<p>The unique identifier.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The query pool.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="beginCompute" translate="no">.<a href="#beginCompute">beginCompute</a><span class="signature">( computeGroup : <span class="param-type"><a href="Node.html">Node</a> | Array.&lt;<a href="Node.html">Node</a>></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>This method is executed at the beginning of a compute call and
+can be used by the backend to prepare the state for upcoming
+compute tasks.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">computeGroup</strong>
+									</td>
+									<td class="description last">
+										<p>The compute node(s).</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="beginRender" translate="no">.<a href="#beginRender">beginRender</a><span class="signature">( renderContext : <span class="param-type"><a href="RenderContext.html">RenderContext</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>This method is executed at the beginning of a render call and
+can be used by the backend to prepare the state for upcoming
+draw calls.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderContext</strong>
+									</td>
+									<td class="description last">
+										<p>The render context.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="compute" translate="no">.<a href="#compute">compute</a><span class="signature">( computeGroup : <span class="param-type"><a href="Node.html">Node</a> | Array.&lt;<a href="Node.html">Node</a>></span>, computeNode : <span class="param-type"><a href="Node.html">Node</a></span>, bindings : <span class="param-type">Array.&lt;<a href="BindGroup.html">BindGroup</a>></span>, computePipeline : <span class="param-type"><a href="ComputePipeline.html">ComputePipeline</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Executes a compute command for the given compute node.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">computeGroup</strong>
+									</td>
+									<td class="description last">
+										<p>The group of compute nodes of a compute call. Can be a single compute node.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">computeNode</strong>
+									</td>
+									<td class="description last">
+										<p>The compute node.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">bindings</strong>
+									</td>
+									<td class="description last">
+										<p>The bindings.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">computePipeline</strong>
+									</td>
+									<td class="description last">
+										<p>The compute pipeline.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="copyFramebufferToTexture" translate="no">.<a href="#copyFramebufferToTexture">copyFramebufferToTexture</a><span class="signature">( texture : <span class="param-type"><a href="Texture.html">Texture</a></span>, renderContext : <span class="param-type"><a href="RenderContext.html">RenderContext</a></span>, rectangle : <span class="param-type"><a href="Vector4.html">Vector4</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Copies the current bound framebuffer to the given texture.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">texture</strong>
+									</td>
+									<td class="description last">
+										<p>The destination texture.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderContext</strong>
+									</td>
+									<td class="description last">
+										<p>The render context.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">rectangle</strong>
+									</td>
+									<td class="description last">
+										<p>A four dimensional vector defining the origin and dimension of the copy.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="copyTextureToBuffer" translate="no">.<a href="#copyTextureToBuffer">copyTextureToBuffer</a><span class="signature">( texture : <span class="param-type"><a href="Texture.html">Texture</a></span>, x : <span class="param-type">number</span>, y : <span class="param-type">number</span>, width : <span class="param-type">number</span>, height : <span class="param-type">number</span>, faceIndex : <span class="param-type">number</span> )</span><span class="type-signature"> : Promise.&lt;TypedArray></span> <span class="type-signature">(async, abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns texture data as a typed array.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">texture</strong>
+									</td>
+									<td class="description last">
+										<p>The texture to copy.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">x</strong>
+									</td>
+									<td class="description last">
+										<p>The x coordinate of the copy origin.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">y</strong>
+									</td>
+									<td class="description last">
+										<p>The y coordinate of the copy origin.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">width</strong>
+									</td>
+									<td class="description last">
+										<p>The width of the copy.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">height</strong>
+									</td>
+									<td class="description last">
+										<p>The height of the copy.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">faceIndex</strong>
+									</td>
+									<td class="description last">
+										<p>The face index.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A Promise that resolves with a typed array when the copy operation has finished.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="copyTextureToTexture" translate="no">.<a href="#copyTextureToTexture">copyTextureToTexture</a><span class="signature">( srcTexture : <span class="param-type"><a href="Texture.html">Texture</a></span>, dstTexture : <span class="param-type"><a href="Texture.html">Texture</a></span>, srcRegion : <span class="param-type"><a href="Box3.html">Box3</a> | <a href="Box2.html">Box2</a></span>, dstPosition : <span class="param-type"><a href="Vector2.html">Vector2</a> | <a href="Vector3.html">Vector3</a></span>, srcLevel : <span class="param-type">number</span>, dstLevel : <span class="param-type">number</span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Copies data of the given source texture to the given destination texture.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">srcTexture</strong>
+									</td>
+									<td class="description last">
+										<p>The source texture.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">dstTexture</strong>
+									</td>
+									<td class="description last">
+										<p>The destination texture.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">srcRegion</strong>
+									</td>
+									<td class="description last">
+										<p>The region of the source texture to copy.</p>
+										<p>Default is <code>null</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">dstPosition</strong>
+									</td>
+									<td class="description last">
+										<p>The destination position of the copy.</p>
+										<p>Default is <code>null</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">srcLevel</strong>
+									</td>
+									<td class="description last">
+										<p>The source mip level to copy from.</p>
+										<p>Default is <code>0</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">dstLevel</strong>
+									</td>
+									<td class="description last">
+										<p>The destination mip level to copy to.</p>
+										<p>Default is <code>0</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createAttribute" translate="no">.<a href="#createAttribute">createAttribute</a><span class="signature">( attribute : <span class="param-type"><a href="BufferAttribute.html">BufferAttribute</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates the GPU buffer of a shader attribute.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">attribute</strong>
+									</td>
+									<td class="description last">
+										<p>The buffer attribute.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createBindings" translate="no">.<a href="#createBindings">createBindings</a><span class="signature">( bindGroup : <span class="param-type"><a href="BindGroup.html">BindGroup</a></span>, bindings : <span class="param-type">Array.&lt;<a href="BindGroup.html">BindGroup</a>></span>, cacheIndex : <span class="param-type">number</span>, version : <span class="param-type">number</span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates bindings from the given bind group definition.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">bindGroup</strong>
+									</td>
+									<td class="description last">
+										<p>The bind group.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">bindings</strong>
+									</td>
+									<td class="description last">
+										<p>Array of bind groups.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">cacheIndex</strong>
+									</td>
+									<td class="description last">
+										<p>The cache index.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">version</strong>
+									</td>
+									<td class="description last">
+										<p>The version.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createComputePipeline" translate="no">.<a href="#createComputePipeline">createComputePipeline</a><span class="signature">( computePipeline : <span class="param-type"><a href="ComputePipeline.html">ComputePipeline</a></span>, bindings : <span class="param-type">Array.&lt;<a href="BindGroup.html">BindGroup</a>></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates a compute pipeline for the given compute node.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">computePipeline</strong>
+									</td>
+									<td class="description last">
+										<p>The compute pipeline.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">bindings</strong>
+									</td>
+									<td class="description last">
+										<p>The bindings.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createDefaultTexture" translate="no">.<a href="#createDefaultTexture">createDefaultTexture</a><span class="signature">( texture : <span class="param-type"><a href="Texture.html">Texture</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates a default texture for the given texture that can be used
+as a placeholder until the actual texture is ready for usage.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">texture</strong>
+									</td>
+									<td class="description last">
+										<p>The texture to create a default texture for.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createIndexAttribute" translate="no">.<a href="#createIndexAttribute">createIndexAttribute</a><span class="signature">( attribute : <span class="param-type"><a href="BufferAttribute.html">BufferAttribute</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates the GPU buffer of an indexed shader attribute.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">attribute</strong>
+									</td>
+									<td class="description last">
+										<p>The indexed buffer attribute.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createNodeBuilder" translate="no">.<a href="#createNodeBuilder">createNodeBuilder</a><span class="signature">( renderObject : <span class="param-type"><a href="RenderObject.html">RenderObject</a></span>, renderer : <span class="param-type"><a href="Renderer.html">Renderer</a></span> )</span><span class="type-signature"> : <a href="NodeBuilder.html">NodeBuilder</a></span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns a node builder for the given render object.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderObject</strong>
+									</td>
+									<td class="description last">
+										<p>The render object.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderer</strong>
+									</td>
+									<td class="description last">
+										<p>The renderer.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The node builder.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="createProgram" translate="no">.<a href="#createProgram">createProgram</a><span class="signature">( program : <span class="param-type"><a href="ProgrammableStage.html">ProgrammableStage</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates a shader program from the given programmable stage.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">program</strong>
+									</td>
+									<td class="description last">
+										<p>The programmable stage.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createRenderPipeline" translate="no">.<a href="#createRenderPipeline">createRenderPipeline</a><span class="signature">( renderObject : <span class="param-type"><a href="RenderObject.html">RenderObject</a></span>, promises : <span class="param-type">Array.&lt;Promise></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates a render pipeline for the given render object.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderObject</strong>
+									</td>
+									<td class="description last">
+										<p>The render object.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">promises</strong>
+									</td>
+									<td class="description last">
+										<p>An array of compilation promises which are used in <code>compileAsync()</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createStorageAttribute" translate="no">.<a href="#createStorageAttribute">createStorageAttribute</a><span class="signature">( attribute : <span class="param-type"><a href="BufferAttribute.html">BufferAttribute</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates the GPU buffer of a storage attribute.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">attribute</strong>
+									</td>
+									<td class="description last">
+										<p>The buffer attribute.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createTexture" translate="no">.<a href="#createTexture">createTexture</a><span class="signature">( texture : <span class="param-type"><a href="Texture.html">Texture</a></span>, options : <span class="param-type">Object</span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Defines a texture on the GPU for the given texture object.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">texture</strong>
+									</td>
+									<td class="description last">
+										<p>The texture.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">options</strong>
+									</td>
+									<td class="description last">
+										<p>Optional configuration parameter.</p>
+										<p>Default is <code>{}</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="createUniformBuffer" translate="no">.<a href="#createUniformBuffer">createUniformBuffer</a><span class="signature">( uniformBuffer : <span class="param-type"><a href="Buffer.html">Buffer</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates a uniform buffer.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">uniformBuffer</strong>
+									</td>
+									<td class="description last">
+										<p>The uniform buffer.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="delete" translate="no">.<a href="#delete">delete</a><span class="signature">( object : <span class="param-type">Object</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Deletes an object from the internal data structure.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">object</strong>
+									</td>
+									<td class="description last">
+										<p>The object to delete.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="deleteBindGroupData" translate="no">.<a href="#deleteBindGroupData">deleteBindGroupData</a><span class="signature">( bindGroup : <span class="param-type"><a href="BindGroup.html">BindGroup</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Delete GPU data associated with a bind group.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">bindGroup</strong>
+									</td>
+									<td class="description last">
+										<p>The bind group.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="destroyAttribute" translate="no">.<a href="#destroyAttribute">destroyAttribute</a><span class="signature">( attribute : <span class="param-type"><a href="BufferAttribute.html">BufferAttribute</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Destroys the GPU buffer of a shader attribute.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">attribute</strong>
+									</td>
+									<td class="description last">
+										<p>The buffer attribute to destroy.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="destroyProgram" translate="no">.<a href="#destroyProgram">destroyProgram</a><span class="signature">( program : <span class="param-type"><a href="ProgrammableStage.html">ProgrammableStage</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Destroys the shader program of the given programmable stage.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">program</strong>
+									</td>
+									<td class="description last">
+										<p>The programmable stage.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="destroySampler" translate="no">.<a href="#destroySampler">destroySampler</a><span class="signature">( binding : <span class="param-type"><a href="Sampler.html">Sampler</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Frees the GPU sampler for the given sampler binding.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">binding</strong>
+									</td>
+									<td class="description last">
+										<p>The sampler binding to free.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="destroyTexture" translate="no">.<a href="#destroyTexture">destroyTexture</a><span class="signature">( texture : <span class="param-type"><a href="Texture.html">Texture</a></span>, isDefaultTexture : <span class="param-type">boolean</span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Destroys the GPU data for the given texture object.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">texture</strong>
+									</td>
+									<td class="description last">
+										<p>The texture.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">isDefaultTexture</strong>
+									</td>
+									<td class="description last">
+										<p>Whether the texture uses a default GPU texture or not.</p>
+										<p>Default is <code>false</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="destroyUniformBuffer" translate="no">.<a href="#destroyUniformBuffer">destroyUniformBuffer</a><span class="signature">( uniformBuffer : <span class="param-type"><a href="Buffer.html">Buffer</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Destroys a uniform buffer.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">uniformBuffer</strong>
+									</td>
+									<td class="description last">
+										<p>The uniform buffer.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="dispose" translate="no">.<a href="#dispose">dispose</a><span class="signature">()</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Frees internal resources.</p>
+						</div>
+					</div>
+					<h3 class="name name-method" id="draw" translate="no">.<a href="#draw">draw</a><span class="signature">( renderObject : <span class="param-type"><a href="RenderObject.html">RenderObject</a></span>, info : <span class="param-type"><a href="Info.html">Info</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Executes a draw command for the given render object.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderObject</strong>
+									</td>
+									<td class="description last">
+										<p>The render object to draw.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">info</strong>
+									</td>
+									<td class="description last">
+										<p>Holds a series of statistical information about the GPU memory and the rendering process.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="finishCompute" translate="no">.<a href="#finishCompute">finishCompute</a><span class="signature">( computeGroup : <span class="param-type"><a href="Node.html">Node</a> | Array.&lt;<a href="Node.html">Node</a>></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>This method is executed at the end of a compute call and
+can be used by the backend to finalize work after compute
+tasks.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">computeGroup</strong>
+									</td>
+									<td class="description last">
+										<p>The compute node(s).</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="finishRender" translate="no">.<a href="#finishRender">finishRender</a><span class="signature">( renderContext : <span class="param-type"><a href="RenderContext.html">RenderContext</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>This method is executed at the end of a render call and
+can be used by the backend to finalize work after draw
+calls.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderContext</strong>
+									</td>
+									<td class="description last">
+										<p>The render context.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="generateMipmaps" translate="no">.<a href="#generateMipmaps">generateMipmaps</a><span class="signature">( texture : <span class="param-type"><a href="Texture.html">Texture</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Generates mipmaps for the given texture.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">texture</strong>
+									</td>
+									<td class="description last">
+										<p>The texture.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="get" translate="no">.<a href="#get">get</a><span class="signature">( object : <span class="param-type">Object</span> )</span><span class="type-signature"> : Object</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns the dictionary for the given object.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">object</strong>
+									</td>
+									<td class="description last">
+										<p>The object.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The object's dictionary.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getArrayBufferAsync" translate="no">.<a href="#getArrayBufferAsync">getArrayBufferAsync</a><span class="signature">( attribute : <span class="param-type"><a href="StorageBufferAttribute.html">StorageBufferAttribute</a></span> )</span><span class="type-signature"> : Promise.&lt;ArrayBuffer></span> <span class="type-signature">(async) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>This method performs a readback operation by moving buffer data from
+a storage buffer attribute from the GPU to the CPU.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">attribute</strong>
+									</td>
+									<td class="description last">
+										<p>The storage buffer attribute.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A promise that resolves with the buffer data when the data are ready.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getClearColor" translate="no">.<a href="#getClearColor">getClearColor</a><span class="signature">()</span><span class="type-signature"> : <a href="Color4.html">Color4</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns the clear color and alpha into a single
+color object.</p>
+						</div>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The clear color.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getContext" translate="no">.<a href="#getContext">getContext</a><span class="signature">()</span><span class="type-signature"> : Object</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns the backend's rendering context.</p>
+						</div>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The rendering context.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getDomElement" translate="no">.<a href="#getDomElement">getDomElement</a><span class="signature">()</span><span class="type-signature"> : HTMLCanvasElement</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns the DOM element. If no DOM element exists, the backend
+creates a new one.</p>
+						</div>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The DOM element.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getDrawingBufferSize" translate="no">.<a href="#getDrawingBufferSize">getDrawingBufferSize</a><span class="signature">()</span><span class="type-signature"> : <a href="Vector2.html">Vector2</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns the drawing buffer size.</p>
+						</div>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The drawing buffer size.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getRenderCacheKey" translate="no">.<a href="#getRenderCacheKey">getRenderCacheKey</a><span class="signature">( renderObject : <span class="param-type"><a href="RenderObject.html">RenderObject</a></span> )</span><span class="type-signature"> : string</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns a cache key that is used to identify render pipelines.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderObject</strong>
+									</td>
+									<td class="description last">
+										<p>The render object.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The cache key.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getTimestamp" translate="no">.<a href="#getTimestamp">getTimestamp</a><span class="signature">( uid : <span class="param-type">string</span> )</span><span class="type-signature"> : number</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns the timestamp for the given uid.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">uid</strong>
+									</td>
+									<td class="description last">
+										<p>The unique identifier.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The timestamp.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getTimestampFrames" translate="no">.<a href="#getTimestampFrames">getTimestampFrames</a><span class="signature">( type : <span class="param-type">string</span> )</span><span class="type-signature"> : Array.&lt;number></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns all timestamp frames for the given type.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">type</strong>
+									</td>
+									<td class="description last">
+										<p>The type of the time stamp.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The timestamp frames.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="getTimestampUID" translate="no">.<a href="#getTimestampUID">getTimestampUID</a><span class="signature">( abstractRenderContext : <span class="param-type"><a href="RenderContext.html">RenderContext</a> | <a href="ComputeNode.html">ComputeNode</a></span> )</span><span class="type-signature"> : string</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns a unique identifier for the given render context that can be used
+to allocate resources like occlusion queries or timestamp queries.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">abstractRenderContext</strong>
+									</td>
+									<td class="description last">
+										<p>The render context.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The unique identifier.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="has" translate="no">.<a href="#has">has</a><span class="signature">( object : <span class="param-type">Object</span> )</span><span class="type-signature"> : boolean</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Checks if the given object has a dictionary
+with data defined.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">object</strong>
+									</td>
+									<td class="description last">
+										<p>The object.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> Whether a dictionary for the given object as been defined or not.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="hasCompatibility" translate="no">.<a href="#hasCompatibility">hasCompatibility</a><span class="signature">( name : <span class="param-type">string</span> )</span><span class="type-signature"> : boolean</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Checks if the backend has the given compatibility.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">name</strong>
+									</td>
+									<td class="description last">
+										<p>The compatibility.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> Whether the backend has the given compatibility or not.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="hasFeature" translate="no">.<a href="#hasFeature">hasFeature</a><span class="signature">( name : <span class="param-type">string</span> )</span><span class="type-signature"> : boolean</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Checks if the given feature is supported  by the backend.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">name</strong>
+									</td>
+									<td class="description last">
+										<p>The feature's name.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> Whether the feature is supported or not.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="hasFeatureAsync" translate="no">.<a href="#hasFeatureAsync">hasFeatureAsync</a><span class="signature">( name : <span class="param-type">string</span> )</span><span class="type-signature"> : Promise.&lt;boolean></span> <span class="type-signature">(async, abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Checks if the given feature is supported by the backend.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">name</strong>
+									</td>
+									<td class="description last">
+										<p>The feature's name.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A Promise that resolves with a bool that indicates whether the feature is supported or not.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="hasTimestampQuery" translate="no">.<a href="#hasTimestampQuery">hasTimestampQuery</a><span class="signature">( uid : <span class="param-type">string</span> )</span><span class="type-signature"> : boolean</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns <code>true</code> if a timestamp for the given uid is available.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">uid</strong>
+									</td>
+									<td class="description last">
+										<p>The unique identifier.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> Whether the timestamp is available or not.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="init" translate="no">.<a href="#init">init</a><span class="signature">( renderer : <span class="param-type"><a href="Renderer.html">Renderer</a></span> )</span><span class="type-signature"> : Promise</span> <span class="type-signature">(async) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Initializes the backend so it is ready for usage. Concrete backends
+are supposed to implement their rendering context creation and related
+operations in this method.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderer</strong>
+									</td>
+									<td class="description last">
+										<p>The renderer.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A Promise that resolves when the backend has been initialized.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="initRenderTarget" translate="no">.<a href="#initRenderTarget">initRenderTarget</a><span class="signature">( renderContext : <span class="param-type"><a href="RenderContext.html">RenderContext</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Initializes the render target defined in the given render context.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderContext</strong>
+									</td>
+									<td class="description last">
+										<p>The render context.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="isOccluded" translate="no">.<a href="#isOccluded">isOccluded</a><span class="signature">( renderContext : <span class="param-type"><a href="RenderContext.html">RenderContext</a></span>, object : <span class="param-type"><a href="Object3D.html">Object3D</a></span> )</span><span class="type-signature"> : boolean</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns <code>true</code> if the given 3D object is fully occluded by other
+3D objects in the scene. Backends must implement this method by using
+a Occlusion Query API.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderContext</strong>
+									</td>
+									<td class="description last">
+										<p>The render context.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">object</strong>
+									</td>
+									<td class="description last">
+										<p>The 3D object to test.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> Whether the 3D object is fully occluded or not.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="needsRenderUpdate" translate="no">.<a href="#needsRenderUpdate">needsRenderUpdate</a><span class="signature">( renderObject : <span class="param-type"><a href="RenderObject.html">RenderObject</a></span> )</span><span class="type-signature"> : boolean</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Returns <code>true</code> if the render pipeline requires an update.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderObject</strong>
+									</td>
+									<td class="description last">
+										<p>The render object.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> Whether the render pipeline requires an update or not.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="resolveTimestampsAsync" translate="no">.<a href="#resolveTimestampsAsync">resolveTimestampsAsync</a><span class="signature">( type : <span class="param-type">string</span> )</span><span class="type-signature"> : Promise.&lt;number></span> <span class="type-signature">(async, abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Resolves the time stamp for the given render context and type.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">type</strong>
+									</td>
+									<td class="description last">
+										<p>The type of the time stamp.</p>
+										<p>Default is <code>'render'</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A Promise that resolves with the time stamp.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="set" translate="no">.<a href="#set">set</a><span class="signature">( object : <span class="param-type">Object</span>, value : <span class="param-type">Object</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Sets a dictionary for the given object into the
+internal data structure.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">object</strong>
+									</td>
+									<td class="description last">
+										<p>The object.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">value</strong>
+									</td>
+									<td class="description last">
+										<p>The dictionary to set.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="setScissorTest" translate="no">.<a href="#setScissorTest">setScissorTest</a><span class="signature">( boolean : <span class="param-type">boolean</span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Defines the scissor test.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">boolean</strong>
+									</td>
+									<td class="description last">
+										<p>Whether the scissor test should be enabled or not.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="setXRTarget" translate="no">.<a href="#setXRTarget">setXRTarget</a><span class="signature">( xrTarget : <span class="param-type">Object</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Sets the XR rendering destination.</p>
+<p>Backends that render directly into XR framebuffers can override this hook.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">xrTarget</strong>
+									</td>
+									<td class="description last">
+										<p>The XR rendering destination.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="updateAttribute" translate="no">.<a href="#updateAttribute">updateAttribute</a><span class="signature">( attribute : <span class="param-type"><a href="BufferAttribute.html">BufferAttribute</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Updates the GPU buffer of a shader attribute.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">attribute</strong>
+									</td>
+									<td class="description last">
+										<p>The buffer attribute to update.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="updateBinding" translate="no">.<a href="#updateBinding">updateBinding</a><span class="signature">( binding : <span class="param-type"><a href="Buffer.html">Buffer</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Updates a buffer binding.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">binding</strong>
+									</td>
+									<td class="description last">
+										<p>The buffer binding to update.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="updateBindings" translate="no">.<a href="#updateBindings">updateBindings</a><span class="signature">( bindGroup : <span class="param-type"><a href="BindGroup.html">BindGroup</a></span>, bindings : <span class="param-type">Array.&lt;<a href="BindGroup.html">BindGroup</a>></span>, cacheIndex : <span class="param-type">number</span>, version : <span class="param-type">number</span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Updates the given bind group definition.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">bindGroup</strong>
+									</td>
+									<td class="description last">
+										<p>The bind group.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">bindings</strong>
+									</td>
+									<td class="description last">
+										<p>Array of bind groups.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">cacheIndex</strong>
+									</td>
+									<td class="description last">
+										<p>The cache index.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">version</strong>
+									</td>
+									<td class="description last">
+										<p>The version.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="updateSampler" translate="no">.<a href="#updateSampler">updateSampler</a><span class="signature">( binding : <span class="param-type"><a href="Sampler.html">Sampler</a></span> )</span><span class="type-signature"> : string</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Updates a GPU sampler for the given texture.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">binding</strong>
+									</td>
+									<td class="description last">
+										<p>The sampler binding to update.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The current sampler key.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="updateSize" translate="no">.<a href="#updateSize">updateSize</a><span class="signature">()</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Backends can use this method if they have to run
+logic when the renderer gets resized.</p>
+						</div>
+					</div>
+					<h3 class="name name-method" id="updateTexture" translate="no">.<a href="#updateTexture">updateTexture</a><span class="signature">( texture : <span class="param-type"><a href="Texture.html">Texture</a></span>, options : <span class="param-type">Object</span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Uploads the updated texture data to the GPU.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">texture</strong>
+									</td>
+									<td class="description last">
+										<p>The texture.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">options</strong>
+									</td>
+									<td class="description last">
+										<p>Optional configuration parameter.</p>
+										<p>Default is <code>{}</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="updateTimeStampUID" translate="no">.<a href="#updateTimeStampUID">updateTimeStampUID</a><span class="signature">( abstractRenderContext : <span class="param-type"><a href="RenderContext.html">RenderContext</a> | <a href="ComputeNode.html">ComputeNode</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Updates a unique identifier for the given render context that can be used
+to allocate resources like occlusion queries or timestamp queries.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">abstractRenderContext</strong>
+									</td>
+									<td class="description last">
+										<p>The render context.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="updateViewport" translate="no">.<a href="#updateViewport">updateViewport</a><span class="signature">( renderContext : <span class="param-type"><a href="RenderContext.html">RenderContext</a></span> )</span> <span class="type-signature">(abstract) </span></h3>
+					<div class="method">
+						<div class="description">
+							<p>Updates the viewport with the values from the given render context.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">renderContext</strong>
+									</td>
+									<td class="description last">
+										<p>The render context.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/src/renderers/common/Backend.js" translate="no" target="_blank" rel="noopener">src/renderers/common/Backend.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 707 - 0
docs/pages/Backend.html.md

@@ -0,0 +1,707 @@
+# Backend
+
+Most of the rendering related logic is implemented in the [Renderer](Renderer.html) module and related management components. Sometimes it is required though to execute commands which are specific to the current 3D backend (which is WebGPU or WebGL 2). This abstract base class defines an interface that encapsulates all backend-related logic. Derived classes for each backend must implement the interface.
+
+## Constructor
+
+### new Backend( parameters : Object ) (abstract)
+
+Constructs a new backend.
+
+**parameters**
+
+An object holding parameters for the backend.
+
+## Properties
+
+### .coordinateSystem : number (abstract, readonly)
+
+The coordinate system of the backend.
+
+### .data : WeakMap.<Object, Object>
+
+This weak map holds backend-specific data of objects like textures, attributes or render targets.
+
+### .domElement : HTMLCanvasElement | OffscreenCanvas
+
+A reference to the canvas element the renderer is drawing to.
+
+Default is `null`.
+
+### .hasTimestamp : boolean (readonly)
+
+Whether the backend supports query timestamps or not.
+
+### .parameters : Object
+
+The parameters of the backend.
+
+### .renderer : Renderer
+
+A reference to the renderer.
+
+Default is `null`.
+
+### .timestampQueryPool : Object
+
+A reference to the timestamp query pool.
+
+### .trackTimestamp : boolean
+
+Whether to track timestamps with a Timestamp Query API or not.
+
+Default is `false`.
+
+## Methods
+
+### ._getQueryPool( uid : string ) : TimestampQueryPool
+
+Returns the query pool for the given uid.
+
+**uid**
+
+The unique identifier.
+
+**Returns:** The query pool.
+
+### .beginCompute( computeGroup : Node | Array.<Node> ) (abstract)
+
+This method is executed at the beginning of a compute call and can be used by the backend to prepare the state for upcoming compute tasks.
+
+**computeGroup**
+
+The compute node(s).
+
+### .beginRender( renderContext : RenderContext ) (abstract)
+
+This method is executed at the beginning of a render call and can be used by the backend to prepare the state for upcoming draw calls.
+
+**renderContext**
+
+The render context.
+
+### .compute( computeGroup : Node | Array.<Node>, computeNode : Node, bindings : Array.<BindGroup>, computePipeline : ComputePipeline ) (abstract)
+
+Executes a compute command for the given compute node.
+
+**computeGroup**
+
+The group of compute nodes of a compute call. Can be a single compute node.
+
+**computeNode**
+
+The compute node.
+
+**bindings**
+
+The bindings.
+
+**computePipeline**
+
+The compute pipeline.
+
+### .copyFramebufferToTexture( texture : Texture, renderContext : RenderContext, rectangle : Vector4 ) (abstract)
+
+Copies the current bound framebuffer to the given texture.
+
+**texture**
+
+The destination texture.
+
+**renderContext**
+
+The render context.
+
+**rectangle**
+
+A four dimensional vector defining the origin and dimension of the copy.
+
+### .copyTextureToBuffer( texture : Texture, x : number, y : number, width : number, height : number, faceIndex : number ) : Promise.<TypedArray> (async, abstract)
+
+Returns texture data as a typed array.
+
+**texture**
+
+The texture to copy.
+
+**x**
+
+The x coordinate of the copy origin.
+
+**y**
+
+The y coordinate of the copy origin.
+
+**width**
+
+The width of the copy.
+
+**height**
+
+The height of the copy.
+
+**faceIndex**
+
+The face index.
+
+**Returns:** A Promise that resolves with a typed array when the copy operation has finished.
+
+### .copyTextureToTexture( srcTexture : Texture, dstTexture : Texture, srcRegion : Box3 | Box2, dstPosition : Vector2 | Vector3, srcLevel : number, dstLevel : number ) (abstract)
+
+Copies data of the given source texture to the given destination texture.
+
+**srcTexture**
+
+The source texture.
+
+**dstTexture**
+
+The destination texture.
+
+**srcRegion**
+
+The region of the source texture to copy.
+
+Default is `null`.
+
+**dstPosition**
+
+The destination position of the copy.
+
+Default is `null`.
+
+**srcLevel**
+
+The source mip level to copy from.
+
+Default is `0`.
+
+**dstLevel**
+
+The destination mip level to copy to.
+
+Default is `0`.
+
+### .createAttribute( attribute : BufferAttribute ) (abstract)
+
+Creates the GPU buffer of a shader attribute.
+
+**attribute**
+
+The buffer attribute.
+
+### .createBindings( bindGroup : BindGroup, bindings : Array.<BindGroup>, cacheIndex : number, version : number ) (abstract)
+
+Creates bindings from the given bind group definition.
+
+**bindGroup**
+
+The bind group.
+
+**bindings**
+
+Array of bind groups.
+
+**cacheIndex**
+
+The cache index.
+
+**version**
+
+The version.
+
+### .createComputePipeline( computePipeline : ComputePipeline, bindings : Array.<BindGroup> ) (abstract)
+
+Creates a compute pipeline for the given compute node.
+
+**computePipeline**
+
+The compute pipeline.
+
+**bindings**
+
+The bindings.
+
+### .createDefaultTexture( texture : Texture ) (abstract)
+
+Creates a default texture for the given texture that can be used as a placeholder until the actual texture is ready for usage.
+
+**texture**
+
+The texture to create a default texture for.
+
+### .createIndexAttribute( attribute : BufferAttribute ) (abstract)
+
+Creates the GPU buffer of an indexed shader attribute.
+
+**attribute**
+
+The indexed buffer attribute.
+
+### .createNodeBuilder( renderObject : RenderObject, renderer : Renderer ) : NodeBuilder (abstract)
+
+Returns a node builder for the given render object.
+
+**renderObject**
+
+The render object.
+
+**renderer**
+
+The renderer.
+
+**Returns:** The node builder.
+
+### .createProgram( program : ProgrammableStage ) (abstract)
+
+Creates a shader program from the given programmable stage.
+
+**program**
+
+The programmable stage.
+
+### .createRenderPipeline( renderObject : RenderObject, promises : Array.<Promise> ) (abstract)
+
+Creates a render pipeline for the given render object.
+
+**renderObject**
+
+The render object.
+
+**promises**
+
+An array of compilation promises which are used in `compileAsync()`.
+
+### .createStorageAttribute( attribute : BufferAttribute ) (abstract)
+
+Creates the GPU buffer of a storage attribute.
+
+**attribute**
+
+The buffer attribute.
+
+### .createTexture( texture : Texture, options : Object ) (abstract)
+
+Defines a texture on the GPU for the given texture object.
+
+**texture**
+
+The texture.
+
+**options**
+
+Optional configuration parameter.
+
+Default is `{}`.
+
+### .createUniformBuffer( uniformBuffer : Buffer ) (abstract)
+
+Creates a uniform buffer.
+
+**uniformBuffer**
+
+The uniform buffer.
+
+### .delete( object : Object )
+
+Deletes an object from the internal data structure.
+
+**object**
+
+The object to delete.
+
+### .deleteBindGroupData( bindGroup : BindGroup ) (abstract)
+
+Delete GPU data associated with a bind group.
+
+**bindGroup**
+
+The bind group.
+
+### .destroyAttribute( attribute : BufferAttribute ) (abstract)
+
+Destroys the GPU buffer of a shader attribute.
+
+**attribute**
+
+The buffer attribute to destroy.
+
+### .destroyProgram( program : ProgrammableStage ) (abstract)
+
+Destroys the shader program of the given programmable stage.
+
+**program**
+
+The programmable stage.
+
+### .destroySampler( binding : Sampler ) (abstract)
+
+Frees the GPU sampler for the given sampler binding.
+
+**binding**
+
+The sampler binding to free.
+
+### .destroyTexture( texture : Texture, isDefaultTexture : boolean ) (abstract)
+
+Destroys the GPU data for the given texture object.
+
+**texture**
+
+The texture.
+
+**isDefaultTexture**
+
+Whether the texture uses a default GPU texture or not.
+
+Default is `false`.
+
+### .destroyUniformBuffer( uniformBuffer : Buffer ) (abstract)
+
+Destroys a uniform buffer.
+
+**uniformBuffer**
+
+The uniform buffer.
+
+### .dispose() (abstract)
+
+Frees internal resources.
+
+### .draw( renderObject : RenderObject, info : Info ) (abstract)
+
+Executes a draw command for the given render object.
+
+**renderObject**
+
+The render object to draw.
+
+**info**
+
+Holds a series of statistical information about the GPU memory and the rendering process.
+
+### .finishCompute( computeGroup : Node | Array.<Node> ) (abstract)
+
+This method is executed at the end of a compute call and can be used by the backend to finalize work after compute tasks.
+
+**computeGroup**
+
+The compute node(s).
+
+### .finishRender( renderContext : RenderContext ) (abstract)
+
+This method is executed at the end of a render call and can be used by the backend to finalize work after draw calls.
+
+**renderContext**
+
+The render context.
+
+### .generateMipmaps( texture : Texture ) (abstract)
+
+Generates mipmaps for the given texture.
+
+**texture**
+
+The texture.
+
+### .get( object : Object ) : Object
+
+Returns the dictionary for the given object.
+
+**object**
+
+The object.
+
+**Returns:** The object's dictionary.
+
+### .getArrayBufferAsync( attribute : StorageBufferAttribute ) : Promise.<ArrayBuffer> (async)
+
+This method performs a readback operation by moving buffer data from a storage buffer attribute from the GPU to the CPU.
+
+**attribute**
+
+The storage buffer attribute.
+
+**Returns:** A promise that resolves with the buffer data when the data are ready.
+
+### .getClearColor() : Color4
+
+Returns the clear color and alpha into a single color object.
+
+**Returns:** The clear color.
+
+### .getContext() : Object (abstract)
+
+Returns the backend's rendering context.
+
+**Returns:** The rendering context.
+
+### .getDomElement() : HTMLCanvasElement
+
+Returns the DOM element. If no DOM element exists, the backend creates a new one.
+
+**Returns:** The DOM element.
+
+### .getDrawingBufferSize() : Vector2
+
+Returns the drawing buffer size.
+
+**Returns:** The drawing buffer size.
+
+### .getRenderCacheKey( renderObject : RenderObject ) : string (abstract)
+
+Returns a cache key that is used to identify render pipelines.
+
+**renderObject**
+
+The render object.
+
+**Returns:** The cache key.
+
+### .getTimestamp( uid : string ) : number
+
+Returns the timestamp for the given uid.
+
+**uid**
+
+The unique identifier.
+
+**Returns:** The timestamp.
+
+### .getTimestampFrames( type : string ) : Array.<number>
+
+Returns all timestamp frames for the given type.
+
+**type**
+
+The type of the time stamp.
+
+**Returns:** The timestamp frames.
+
+### .getTimestampUID( abstractRenderContext : RenderContext | ComputeNode ) : string
+
+Returns a unique identifier for the given render context that can be used to allocate resources like occlusion queries or timestamp queries.
+
+**abstractRenderContext**
+
+The render context.
+
+**Returns:** The unique identifier.
+
+### .has( object : Object ) : boolean
+
+Checks if the given object has a dictionary with data defined.
+
+**object**
+
+The object.
+
+**Returns:** Whether a dictionary for the given object as been defined or not.
+
+### .hasCompatibility( name : string ) : boolean (abstract)
+
+Checks if the backend has the given compatibility.
+
+**name**
+
+The compatibility.
+
+**Returns:** Whether the backend has the given compatibility or not.
+
+### .hasFeature( name : string ) : boolean (abstract)
+
+Checks if the given feature is supported by the backend.
+
+**name**
+
+The feature's name.
+
+**Returns:** Whether the feature is supported or not.
+
+### .hasFeatureAsync( name : string ) : Promise.<boolean> (async, abstract)
+
+Checks if the given feature is supported by the backend.
+
+**name**
+
+The feature's name.
+
+**Returns:** A Promise that resolves with a bool that indicates whether the feature is supported or not.
+
+### .hasTimestampQuery( uid : string ) : boolean
+
+Returns `true` if a timestamp for the given uid is available.
+
+**uid**
+
+The unique identifier.
+
+**Returns:** Whether the timestamp is available or not.
+
+### .init( renderer : Renderer ) : Promise (async)
+
+Initializes the backend so it is ready for usage. Concrete backends are supposed to implement their rendering context creation and related operations in this method.
+
+**renderer**
+
+The renderer.
+
+**Returns:** A Promise that resolves when the backend has been initialized.
+
+### .initRenderTarget( renderContext : RenderContext ) (abstract)
+
+Initializes the render target defined in the given render context.
+
+**renderContext**
+
+The render context.
+
+### .isOccluded( renderContext : RenderContext, object : Object3D ) : boolean (abstract)
+
+Returns `true` if the given 3D object is fully occluded by other 3D objects in the scene. Backends must implement this method by using a Occlusion Query API.
+
+**renderContext**
+
+The render context.
+
+**object**
+
+The 3D object to test.
+
+**Returns:** Whether the 3D object is fully occluded or not.
+
+### .needsRenderUpdate( renderObject : RenderObject ) : boolean (abstract)
+
+Returns `true` if the render pipeline requires an update.
+
+**renderObject**
+
+The render object.
+
+**Returns:** Whether the render pipeline requires an update or not.
+
+### .resolveTimestampsAsync( type : string ) : Promise.<number> (async, abstract)
+
+Resolves the time stamp for the given render context and type.
+
+**type**
+
+The type of the time stamp.
+
+Default is `'render'`.
+
+**Returns:** A Promise that resolves with the time stamp.
+
+### .set( object : Object, value : Object )
+
+Sets a dictionary for the given object into the internal data structure.
+
+**object**
+
+The object.
+
+**value**
+
+The dictionary to set.
+
+### .setScissorTest( boolean : boolean ) (abstract)
+
+Defines the scissor test.
+
+**boolean**
+
+Whether the scissor test should be enabled or not.
+
+### .setXRTarget( xrTarget : Object )
+
+Sets the XR rendering destination.
+
+Backends that render directly into XR framebuffers can override this hook.
+
+**xrTarget**
+
+The XR rendering destination.
+
+### .updateAttribute( attribute : BufferAttribute ) (abstract)
+
+Updates the GPU buffer of a shader attribute.
+
+**attribute**
+
+The buffer attribute to update.
+
+### .updateBinding( binding : Buffer ) (abstract)
+
+Updates a buffer binding.
+
+**binding**
+
+The buffer binding to update.
+
+### .updateBindings( bindGroup : BindGroup, bindings : Array.<BindGroup>, cacheIndex : number, version : number ) (abstract)
+
+Updates the given bind group definition.
+
+**bindGroup**
+
+The bind group.
+
+**bindings**
+
+Array of bind groups.
+
+**cacheIndex**
+
+The cache index.
+
+**version**
+
+The version.
+
+### .updateSampler( binding : Sampler ) : string (abstract)
+
+Updates a GPU sampler for the given texture.
+
+**binding**
+
+The sampler binding to update.
+
+**Returns:** The current sampler key.
+
+### .updateSize() (abstract)
+
+Backends can use this method if they have to run logic when the renderer gets resized.
+
+### .updateTexture( texture : Texture, options : Object ) (abstract)
+
+Uploads the updated texture data to the GPU.
+
+**texture**
+
+The texture.
+
+**options**
+
+Optional configuration parameter.
+
+Default is `{}`.
+
+### .updateTimeStampUID( abstractRenderContext : RenderContext | ComputeNode )
+
+Updates a unique identifier for the given render context that can be used to allocate resources like occlusion queries or timestamp queries.
+
+**abstractRenderContext**
+
+The render context.
+
+### .updateViewport( renderContext : RenderContext ) (abstract)
+
+Updates the viewport with the values from the given render context.
+
+**renderContext**
+
+The render context.
+
+## Source
+
+[src/renderers/common/Backend.js](https://github.com/mrdoob/three.js/blob/master/src/renderers/common/Backend.js)

+ 0 - 89
docs/pages/BatchNode.html

@@ -1,89 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<meta charset="utf-8">
-	<title>BatchNode - Three.js Docs</title>
-	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
-	<script src="../scripts/highlight.min.js"></script>
-	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
-	<link type="text/css" rel="stylesheet" href="../styles/page.css">
-</head>
-<body>
-		<p class="inheritance" translate="no"><a href="EventDispatcher.html">EventDispatcher</a> → <a href="Node.html">Node</a> → </p>
-	<h1 translate="no">BatchNode</h1>
-		<section>
-			<header>
-				<div class="class-description"><p>This node implements the vertex shader logic which is required
-when rendering 3D objects via batching. <code>BatchNode</code> must be used
-with instances of <a href="BatchedMesh.html">BatchedMesh</a>.</p></div>
-			</header>
-			<article>
-				<div class="container-overview">
-					<h2>Constructor</h2>
-					<h3 class="name name-method" id="BatchNode" translate="no">new <a href="#BatchNode">BatchNode</a><span class="signature">( batchMesh : <span class="param-type"><a href="BatchedMesh.html">BatchedMesh</a></span> )</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Constructs a new batch node.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">batchMesh</strong>
-									</td>
-									<td class="description last">
-										<p>A reference to batched mesh.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-					</div>
-				</div>
-				<h2 class="subsection-title">Properties</h2>
-				<div class="member">
-					<h3 class="name" id="batchMesh" translate="no">.<a href="#batchMesh">batchMesh</a><span class="type-signature"> : <a href="BatchedMesh.html">BatchedMesh</a></span> </h3>
-					<div class="description">
-						<p>A reference to batched mesh.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="batchingIdNode" translate="no">.<a href="#batchingIdNode">batchingIdNode</a><span class="type-signature"> : <a href="IndexNode.html">IndexNode</a></span> </h3>
-					<div class="description">
-						<p>The batching index node.</p>
-						<p>Default is <code>null</code>.</p>
-					</div>
-				</div>
-				<h2 class="subsection-title">Methods</h2>
-					<h3 class="name name-method" id="setup" translate="no">.<a href="#setup">setup</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Setups the internal buffers and nodes and assigns the transformed vertex data
-to predefined node variables for accumulation. That follows the same patterns
-like with morph and skinning nodes.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">builder</strong>
-									</td>
-									<td class="description last">
-										<p>The current node builder.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#setup">Node#setup</a></dt>
-						</dl>
-					</div>
-				<h2 class="subsection-title">Source</h2>
-				<p>
-					<a href="https://github.com/mrdoob/three.js/blob/master/src/nodes/accessors/BatchNode.js" translate="no" target="_blank" rel="noopener">src/nodes/accessors/BatchNode.js</a>
-				</p>
-			</article>
-		</section>
-<script src="../scripts/linenumber.js"></script>
-<script src="../scripts/page.js"></script>
-</body>
-</html>

+ 0 - 43
docs/pages/BatchNode.html.md

@@ -1,43 +0,0 @@
-*Inheritance: EventDispatcher → Node →*
-
-# BatchNode
-
-This node implements the vertex shader logic which is required when rendering 3D objects via batching. `BatchNode` must be used with instances of [BatchedMesh](BatchedMesh.html).
-
-## Constructor
-
-### new BatchNode( batchMesh : BatchedMesh )
-
-Constructs a new batch node.
-
-**batchMesh**
-
-A reference to batched mesh.
-
-## Properties
-
-### .batchMesh : BatchedMesh
-
-A reference to batched mesh.
-
-### .batchingIdNode : IndexNode
-
-The batching index node.
-
-Default is `null`.
-
-## Methods
-
-### .setup( builder : NodeBuilder )
-
-Setups the internal buffers and nodes and assigns the transformed vertex data to predefined node variables for accumulation. That follows the same patterns like with morph and skinning nodes.
-
-**builder**
-
-The current node builder.
-
-**Overrides:** [Node#setup](Node.html#setup)
-
-## Source
-
-[src/nodes/accessors/BatchNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/accessors/BatchNode.js)

+ 2 - 5
docs/pages/BezierInterpolant.html

@@ -17,11 +17,8 @@
 <p>This interpolant supports the COLLADA/Maya style of Bezier animation where
 each keyframe has explicit in/out tangent control points specified as
 2D coordinates (time, value).</p>
-<p>The tangent data must be provided via the <code>settings</code> object:</p>
-<ul>
-<li><code>settings.inTangents</code>: Float32Array with [time, value] pairs per keyframe per component</li>
-<li><code>settings.outTangents</code>: Float32Array with [time, value] pairs per keyframe per component</li>
-</ul>
+<p>Tangent data is read from <code>inTangents</code> and <code>outTangents</code> on the interpolant
+(populated by <code>KeyframeTrack.InterpolantFactoryMethodBezier</code>).</p>
 <p>For a track with N keyframes and stride S:</p>
 <ul>
 <li>Each tangent array has N * S * 2 values</li>

+ 1 - 4
docs/pages/BezierInterpolant.html.md

@@ -6,10 +6,7 @@ A Bezier interpolant using cubic Bezier curves with 2D control points.
 
 This interpolant supports the COLLADA/Maya style of Bezier animation where each keyframe has explicit in/out tangent control points specified as 2D coordinates (time, value).
 
-The tangent data must be provided via the `settings` object:
-
-*   `settings.inTangents`: Float32Array with \[time, value\] pairs per keyframe per component
-*   `settings.outTangents`: Float32Array with \[time, value\] pairs per keyframe per component
+Tangent data is read from `inTangents` and `outTangents` on the interpolant (populated by `KeyframeTrack.InterpolantFactoryMethodBezier`).
 
 For a track with N keyframes and stride S:
 

+ 43 - 7
docs/pages/BloomNode.html

@@ -14,6 +14,12 @@
 		<section>
 			<header>
 				<div class="class-description"><p>Post processing node for creating a bloom effect.</p>
+<pre><code class="language-js">const renderPipeline = new THREE.RenderPipeline( renderer );
+const scenePass = pass( scene, camera );
+const scenePassColor = scenePass.getTextureNode( 'output' );
+const bloomPass = bloom( scenePassColor );
+renderPipeline.outputNode = scenePassColor.add( bloomPass );
+</code></pre>
 <p>By default, the node affects the entire image. For a selective bloom,
 use the <code>emissive</code> material property to control which objects should
 contribute to bloom or not. This can be achieved via MRT.</p>
@@ -27,13 +33,6 @@ const scenePassColor = scenePass.getTextureNode( 'output' );
 const emissivePass = scenePass.getTextureNode( 'emissive' );
 const bloomPass = bloom( emissivePass );
 renderPipeline.outputNode = scenePassColor.add( bloomPass );
-</code></pre></div>
-				<h2>Code Example</h2>
-				<div translate="no"><pre><code class="language-js">const renderPipeline = new THREE.RenderPipeline( renderer );
-const scenePass = pass( scene, camera );
-const scenePassColor = scenePass.getTextureNode( 'output' );
-const bloomPass = bloom( scenePassColor );
-renderPipeline.outputNode = scenePassColor.add( bloomPass );
 </code></pre></div>
 			</header>
 			<article>
@@ -89,6 +88,12 @@ renderPipeline.outputNode = scenePassColor.add( bloomPass );
 					</div>
 				</div>
 				<h2 class="subsection-title">Properties</h2>
+				<div class="member">
+					<h3 class="name" id="highPassFn" translate="no">.<a href="#highPassFn">highPassFn</a><span class="type-signature"> : function</span> </h3>
+					<div class="description">
+						<p>Can be used to inject a custom high pass filter (e.g., for anamorphic effects).</p>
+					</div>
+				</div>
 				<div class="member">
 					<h3 class="name" id="inputNode" translate="no">.<a href="#inputNode">inputNode</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;vec4></span> </h3>
 					<div class="description">
@@ -141,6 +146,15 @@ when the effect is no longer required.</p>
 							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#dispose">TempNode#dispose</a></dt>
 						</dl>
 					</div>
+					<h3 class="name name-method" id="getResolutionScale" translate="no">.<a href="#getResolutionScale">getResolutionScale</a><span class="signature">()</span><span class="type-signature"> : number</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Gets the current resolution scale of the pass.</p>
+						</div>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The current resolution scale. A value of <code>1</code> means full resolution.</dt>
+						</dl>
+					</div>
 					<h3 class="name name-method" id="getTextureNode" translate="no">.<a href="#getTextureNode">getTextureNode</a><span class="signature">()</span><span class="type-signature"> : <a href="PassTextureNode.html">PassTextureNode</a></span> </h3>
 					<div class="method">
 						<div class="description">
@@ -150,6 +164,28 @@ when the effect is no longer required.</p>
 							<dt class="tag-returns"><strong>Returns:</strong> A texture node that represents the result of the effect.</dt>
 						</dl>
 					</div>
+					<h3 class="name name-method" id="setResolutionScale" translate="no">.<a href="#setResolutionScale">setResolutionScale</a><span class="signature">( resolutionScale : <span class="param-type">number</span> )</span><span class="type-signature"> : <a href="BloomNode.html">BloomNode</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Sets the resolution scale for the pass.
+The resolution scale is a factor that is multiplied with the renderer's width and height.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">resolutionScale</strong>
+									</td>
+									<td class="description last">
+										<p>The resolution scale to set. A value of <code>1</code> means full resolution.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> A reference to this node.</dt>
+						</dl>
+					</div>
 					<h3 class="name name-method" id="setSize" translate="no">.<a href="#setSize">setSize</a><span class="signature">( width : <span class="param-type">number</span>, height : <span class="param-type">number</span> )</span> </h3>
 					<div class="method">
 						<div class="description">

+ 28 - 10
docs/pages/BloomNode.html.md

@@ -4,28 +4,26 @@
 
 Post processing node for creating a bloom effect.
 
-By default, the node affects the entire image. For a selective bloom, use the `emissive` material property to control which objects should contribute to bloom or not. This can be achieved via MRT.
-
 ```js
 const renderPipeline = new THREE.RenderPipeline( renderer );
 const scenePass = pass( scene, camera );
-scenePass.setMRT( mrt( {
-	output,
-	emissive
-} ) );
 const scenePassColor = scenePass.getTextureNode( 'output' );
-const emissivePass = scenePass.getTextureNode( 'emissive' );
-const bloomPass = bloom( emissivePass );
+const bloomPass = bloom( scenePassColor );
 renderPipeline.outputNode = scenePassColor.add( bloomPass );
 ```
 
-## Code Example
+By default, the node affects the entire image. For a selective bloom, use the `emissive` material property to control which objects should contribute to bloom or not. This can be achieved via MRT.
 
 ```js
 const renderPipeline = new THREE.RenderPipeline( renderer );
 const scenePass = pass( scene, camera );
+scenePass.setMRT( mrt( {
+	output,
+	emissive
+} ) );
 const scenePassColor = scenePass.getTextureNode( 'output' );
-const bloomPass = bloom( scenePassColor );
+const emissivePass = scenePass.getTextureNode( 'emissive' );
+const bloomPass = bloom( emissivePass );
 renderPipeline.outputNode = scenePassColor.add( bloomPass );
 ```
 
@@ -67,6 +65,10 @@ Default is `0`.
 
 ## Properties
 
+### .highPassFn : function
+
+Can be used to inject a custom high pass filter (e.g., for anamorphic effects).
+
 ### .inputNode : Node.<vec4>
 
 The node that represents the input of the effect.
@@ -103,12 +105,28 @@ Frees internal resources. This method should be called when the effect is no lon
 
 **Overrides:** [TempNode#dispose](TempNode.html#dispose)
 
+### .getResolutionScale() : number
+
+Gets the current resolution scale of the pass.
+
+**Returns:** The current resolution scale. A value of `1` means full resolution.
+
 ### .getTextureNode() : PassTextureNode
 
 Returns the result of the effect as a texture node.
 
 **Returns:** A texture node that represents the result of the effect.
 
+### .setResolutionScale( resolutionScale : number ) : BloomNode
+
+Sets the resolution scale for the pass. The resolution scale is a factor that is multiplied with the renderer's width and height.
+
+**resolutionScale**
+
+The resolution scale to set. A value of `1` means full resolution.
+
+**Returns:** A reference to this node.
+
 ### .setSize( width : number, height : number )
 
 Sets the size of the effect.

+ 4 - 0
docs/pages/Box3.html

@@ -686,6 +686,10 @@ depth to the given size values.</p>
 							<p>Computes the world-axis-aligned bounding box for the given 3D object
 (including its children), accounting for the object's, and children's,
 world transforms. The function may result in a larger box than strictly necessary.</p>
+<p>Note: To compute the correct bounding box, make sure the given 3D object
+has an up-to-date world matrix that reflects the current transformation of its
+ancestor nodes. Call <code>object.updateWorldMatrix( true, false )</code> beforehand if
+you're unsure.</p>
 						</div>
 						<table class="params">
 							<tbody>

+ 2 - 0
docs/pages/Box3.html.md

@@ -332,6 +332,8 @@ The x, y and z dimensions of the box.
 
 Computes the world-axis-aligned bounding box for the given 3D object (including its children), accounting for the object's, and children's, world transforms. The function may result in a larger box than strictly necessary.
 
+Note: To compute the correct bounding box, make sure the given 3D object has an up-to-date world matrix that reflects the current transformation of its ancestor nodes. Call `object.updateWorldMatrix( true, false )` beforehand if you're unsure.
+
 **object**
 
 The 3D object to compute the bounding box for.

+ 5 - 6
docs/pages/BufferAttributeNode.html

@@ -16,18 +16,17 @@
 				<div class="class-description"><p>In earlier <code>three.js</code> versions it was only possible to define attribute data
 on geometry level. With <code>BufferAttributeNode</code>, it is also possible to do this
 on the node level.</p>
-<p>This new approach is especially interesting when geometry data are generated via
-compute shaders. The below line converts a storage buffer into an attribute node.</p>
-<pre><code class="language-js">material.positionNode = positionBuffer.toAttribute();
-</code></pre></div>
-				<h2>Code Example</h2>
-				<div translate="no"><pre><code class="language-js">const geometry = new THREE.PlaneGeometry();
+<pre><code class="language-js">const geometry = new THREE.PlaneGeometry();
 const positionAttribute = geometry.getAttribute( 'position' );
 const colors = [];
 for ( let i = 0; i &lt; position.count; i ++ ) {
 	colors.push( 1, 0, 0 );
 }
 material.colorNode = bufferAttribute( new THREE.Float32BufferAttribute( colors, 3 ) );
+</code></pre>
+<p>This new approach is especially interesting when geometry data are generated via
+compute shaders. The below line converts a storage buffer into an attribute node.</p>
+<pre><code class="language-js">material.positionNode = positionBuffer.toAttribute();
 </code></pre></div>
 			</header>
 			<article>

+ 6 - 8
docs/pages/BufferAttributeNode.html.md

@@ -4,14 +4,6 @@
 
 In earlier `three.js` versions it was only possible to define attribute data on geometry level. With `BufferAttributeNode`, it is also possible to do this on the node level.
 
-This new approach is especially interesting when geometry data are generated via compute shaders. The below line converts a storage buffer into an attribute node.
-
-```js
-material.positionNode = positionBuffer.toAttribute();
-```
-
-## Code Example
-
 ```js
 const geometry = new THREE.PlaneGeometry();
 const positionAttribute = geometry.getAttribute( 'position' );
@@ -22,6 +14,12 @@ for ( let i = 0; i < position.count; i ++ ) {
 material.colorNode = bufferAttribute( new THREE.Float32BufferAttribute( colors, 3 ) );
 ```
 
+This new approach is especially interesting when geometry data are generated via compute shaders. The below line converts a storage buffer into an attribute node.
+
+```js
+material.positionNode = positionBuffer.toAttribute();
+```
+
 ## Constructor
 
 ### new BufferAttributeNode( value : BufferAttribute | InterleavedBuffer | TypedArray, bufferType : string, bufferStride : number, bufferOffset : number )

+ 16 - 0
docs/pages/CSMFrustum.html

@@ -47,6 +47,12 @@
 far plane in view space.</p>
 					</div>
 				</div>
+				<div class="member">
+					<h3 class="name" id="zFar" translate="no">.<a href="#zFar">zFar</a><span class="type-signature"> : number</span> </h3>
+					<div class="description">
+						<p>The zFar value.</p>
+					</div>
+				</div>
 				<div class="member">
 					<h3 class="name" id="zNear" translate="no">.<a href="#zNear">zNear</a><span class="type-signature"> : number</span> </h3>
 					<div class="description">
@@ -158,6 +164,16 @@ given camera matrix.</p>
 				<p>Whether this CSM frustum is used with WebGL or WebGPU.</p>
 			</td>
 		</tr>
+		<tr>
+				<td class="name">
+					<strong>reversedDepth</strong>
+						<br>
+<span class="param-type">boolean</span>
+				</td>
+			<td class="description last">
+				<p>Whether reversed depth buffer is enabled.</p>
+			</td>
+		</tr>
 		<tr>
 				<td class="name">
 					<strong>projectionMatrix</strong>

+ 9 - 0
docs/pages/CSMFrustum.html.md

@@ -26,6 +26,10 @@ The CSM data.
 
 An object representing the vertices of the near and far plane in view space.
 
+### .zFar : number
+
+The zFar value.
+
 ### .zNear : number
 
 The zNear value. This value depends on whether the CSM is used with WebGL or WebGPU. Both API use different conventions for their projection matrices.
@@ -81,6 +85,11 @@ boolean
 
 Whether this CSM frustum is used with WebGL or WebGPU.
 
+**reversedDepth**  
+boolean
+
+Whether reversed depth buffer is enabled.
+
 **projectionMatrix**  
 [Matrix4](Matrix4.html)
 

+ 43 - 0
docs/pages/CityGenerator.html

@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>CityGenerator - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+	<h1 translate="no">CityGenerator</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>Lays out a grid of city blocks and fills each lot with a <a href="SkyscraperGenerator.html">SkyscraperGenerator</a>
+tower of its own seed, height and footprint, optionally on raised sidewalk
+slabs (curbs). Returns a <code>THREE.Group</code> ready to add to a scene.</p>
+<p>Pass a building material to dress the towers; the sidewalks dress themselves
+via <a href="SidewalkGenerator.html">SidewalkGenerator</a>. The layout is exposed as
+CityGenerator#layout so the surrounding scene (road markings, etc.)
+can align to the same grid.</p></div>
+				<h2>Code Example</h2>
+				<div translate="no"><pre><code class="language-js">const city = new CityGenerator( { seed: 1 } );
+scene.add( city.build( materials ) );
+</code></pre></div>
+			</header>
+			<article>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="CityGenerator" translate="no">new <a href="#CityGenerator">CityGenerator</a><span class="signature">()</span> </h3>
+					<div class="method">
+					</div>
+				</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/generators/CityGenerator.js" translate="no" target="_blank" rel="noopener">examples/jsm/generators/CityGenerator.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 20 - 0
docs/pages/CityGenerator.html.md

@@ -0,0 +1,20 @@
+# CityGenerator
+
+Lays out a grid of city blocks and fills each lot with a [SkyscraperGenerator](SkyscraperGenerator.html) tower of its own seed, height and footprint, optionally on raised sidewalk slabs (curbs). Returns a `THREE.Group` ready to add to a scene.
+
+Pass a building material to dress the towers; the sidewalks dress themselves via [SidewalkGenerator](SidewalkGenerator.html). The layout is exposed as CityGenerator#layout so the surrounding scene (road markings, etc.) can align to the same grid.
+
+## Code Example
+
+```js
+const city = new CityGenerator( { seed: 1 } );
+scene.add( city.build( materials ) );
+```
+
+## Constructor
+
+### new CityGenerator()
+
+## Source
+
+[examples/jsm/generators/CityGenerator.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/generators/CityGenerator.js)

+ 120 - 0
docs/pages/ClusteredLighting.html

@@ -0,0 +1,120 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>ClusteredLighting - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+		<p class="inheritance" translate="no"><a href="Lighting.html">Lighting</a> → </p>
+	<h1 translate="no">ClusteredLighting</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>A custom lighting implementation based on Forward+ Clustered Shading that
+overwrites the default lighting system in <a href="WebGPURenderer.html">WebGPURenderer</a>. Suitable
+for 3D scenes with many point lights and real depth complexity — the view
+frustum is partitioned into a 3D cluster grid so only the lights actually
+reaching each fragment are evaluated.</p></div>
+				<h2>Code Example</h2>
+				<div translate="no"><pre><code class="language-js">const lighting = new ClusteredLighting();
+renderer.lighting = lighting; // set lighting system
+</code></pre></div>
+			</header>
+			<article>
+				<h2 class="subsection-title">Import</h2>
+				<p><span translate="no">ClusteredLighting</span> is an addon, and must be imported explicitly, see <a href="https://threejs.org/manual/#en/installation" target="_blank" rel="noopener">Installation#Addons</a>.</p>
+				<pre><code class="language-js">import { ClusteredLighting } from 'three/addons/lighting/ClusteredLighting.js';</code></pre>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="ClusteredLighting" translate="no">new <a href="#ClusteredLighting">ClusteredLighting</a><span class="signature">( maxLights : <span class="param-type">number</span>, tileSize : <span class="param-type">number</span>, zSlices : <span class="param-type">number</span>, maxLightsPerCluster : <span class="param-type">number</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Constructs a new clustered lighting system.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">maxLights</strong>
+									</td>
+									<td class="description last">
+										<p>Maximum number of point lights.</p>
+										<p>Default is <code>1024</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">tileSize</strong>
+									</td>
+									<td class="description last">
+										<p>Screen tile size in pixels (cluster XY size).</p>
+										<p>Default is <code>32</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">zSlices</strong>
+									</td>
+									<td class="description last">
+										<p>Number of exponential depth slices.</p>
+										<p>Default is <code>24</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">maxLightsPerCluster</strong>
+									</td>
+									<td class="description last">
+										<p>Per-cluster light-list capacity.</p>
+										<p>Default is <code>64</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</div>
+				<h2 class="subsection-title">Classes</h2>
+				<dl>
+					<dt><a href="ClusteredLighting.html">ClusteredLighting</a></dt>
+					<dd></dd>
+				</dl>
+				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="createNode" translate="no">.<a href="#createNode">createNode</a><span class="signature">( lights : <span class="param-type">Array.&lt;<a href="Light.html">Light</a>></span> )</span><span class="type-signature"> : <a href="ClusteredLightsNode.html">ClusteredLightsNode</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Creates a new clustered lights node for the given array of lights.</p>
+<p>This method is called internally by the renderer and must be overwritten by
+all custom lighting implementations.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">lights</strong>
+									</td>
+									<td class="description last">
+										<p>The lights.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Lighting.html#createNode">Lighting#createNode</a></dt>
+						</dl>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The clustered lights node.</dt>
+						</dl>
+					</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/lighting/ClusteredLighting.js" translate="no" target="_blank" rel="noopener">examples/jsm/lighting/ClusteredLighting.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 74 - 0
docs/pages/ClusteredLighting.html.md

@@ -0,0 +1,74 @@
+*Inheritance: Lighting →*
+
+# ClusteredLighting
+
+A custom lighting implementation based on Forward+ Clustered Shading that overwrites the default lighting system in [WebGPURenderer](WebGPURenderer.html). Suitable for 3D scenes with many point lights and real depth complexity — the view frustum is partitioned into a 3D cluster grid so only the lights actually reaching each fragment are evaluated.
+
+## Code Example
+
+```js
+const lighting = new ClusteredLighting();
+renderer.lighting = lighting; // set lighting system
+```
+
+## Import
+
+ClusteredLighting is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { ClusteredLighting } from 'three/addons/lighting/ClusteredLighting.js';
+```
+
+## Constructor
+
+### new ClusteredLighting( maxLights : number, tileSize : number, zSlices : number, maxLightsPerCluster : number )
+
+Constructs a new clustered lighting system.
+
+**maxLights**
+
+Maximum number of point lights.
+
+Default is `1024`.
+
+**tileSize**
+
+Screen tile size in pixels (cluster XY size).
+
+Default is `32`.
+
+**zSlices**
+
+Number of exponential depth slices.
+
+Default is `24`.
+
+**maxLightsPerCluster**
+
+Per-cluster light-list capacity.
+
+Default is `64`.
+
+## Classes
+
+[ClusteredLighting](ClusteredLighting.html)
+
+## Methods
+
+### .createNode( lights : Array.<Light> ) : ClusteredLightsNode
+
+Creates a new clustered lights node for the given array of lights.
+
+This method is called internally by the renderer and must be overwritten by all custom lighting implementations.
+
+**lights**
+
+The lights.
+
+**Overrides:** [Lighting#createNode](Lighting.html#createNode)
+
+**Returns:** The clustered lights node.
+
+## Source
+
+[examples/jsm/lighting/ClusteredLighting.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/lighting/ClusteredLighting.js)

+ 86 - 0
docs/pages/ClusteredLightsNode.html

@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>ClusteredLightsNode - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+		<p class="inheritance" translate="no"><a href="EventDispatcher.html">EventDispatcher</a> → <a href="Node.html">Node</a> → <a href="LightsNode.html">LightsNode</a> → </p>
+	<h1 translate="no">ClusteredLightsNode</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>A custom version of <code>LightsNode</code> implementing Forward+ clustered shading:
+the view frustum is subdivided into a 3D grid of clusters (X × Y screen tiles
+times an exponentially-spaced set of Z depth slices), and each cluster holds
+only the point lights whose spheres intersect it. At shading time each fragment
+looks up its cluster and loops over just that cluster's lights. Unlike 2D tiled
+lighting, clustered shading culls lights that share screen pixels but lie at
+different depths — suitable for 3D scenes with real depth complexity.</p></div>
+			</header>
+			<article>
+				<h2 class="subsection-title">Import</h2>
+				<p><span translate="no">ClusteredLightsNode</span> is an addon, and must be imported explicitly, see <a href="https://threejs.org/manual/#en/installation" target="_blank" rel="noopener">Installation#Addons</a>.</p>
+				<pre><code class="language-js">import { clusteredLights } from 'three/addons/tsl/lighting/ClusteredLightsNode.js';</code></pre>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="ClusteredLightsNode" translate="no">new <a href="#ClusteredLightsNode">ClusteredLightsNode</a><span class="signature">( maxLights : <span class="param-type">number</span>, tileSize : <span class="param-type">number</span>, zSlices : <span class="param-type">number</span>, maxLightsPerCluster : <span class="param-type">number</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Constructs a new clustered lights node.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">maxLights</strong>
+									</td>
+									<td class="description last">
+										<p>Maximum number of point lights.</p>
+										<p>Default is <code>1024</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">tileSize</strong>
+									</td>
+									<td class="description last">
+										<p>Screen tile size in pixels (cluster XY size).</p>
+										<p>Default is <code>32</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">zSlices</strong>
+									</td>
+									<td class="description last">
+										<p>Number of exponential depth slices.</p>
+										<p>Default is <code>24</code>.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">maxLightsPerCluster</strong>
+									</td>
+									<td class="description last">
+										<p>Per-cluster light-list capacity.</p>
+										<p>Default is <code>64</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/lighting/ClusteredLightsNode.js" translate="no" target="_blank" rel="noopener">examples/jsm/tsl/lighting/ClusteredLightsNode.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 47 - 0
docs/pages/ClusteredLightsNode.html.md

@@ -0,0 +1,47 @@
+*Inheritance: EventDispatcher → Node → LightsNode →*
+
+# ClusteredLightsNode
+
+A custom version of `LightsNode` implementing Forward+ clustered shading: the view frustum is subdivided into a 3D grid of clusters (X × Y screen tiles times an exponentially-spaced set of Z depth slices), and each cluster holds only the point lights whose spheres intersect it. At shading time each fragment looks up its cluster and loops over just that cluster's lights. Unlike 2D tiled lighting, clustered shading culls lights that share screen pixels but lie at different depths — suitable for 3D scenes with real depth complexity.
+
+## Import
+
+ClusteredLightsNode is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).
+
+```js
+import { clusteredLights } from 'three/addons/tsl/lighting/ClusteredLightsNode.js';
+```
+
+## Constructor
+
+### new ClusteredLightsNode( maxLights : number, tileSize : number, zSlices : number, maxLightsPerCluster : number )
+
+Constructs a new clustered lights node.
+
+**maxLights**
+
+Maximum number of point lights.
+
+Default is `1024`.
+
+**tileSize**
+
+Screen tile size in pixels (cluster XY size).
+
+Default is `32`.
+
+**zSlices**
+
+Number of exponential depth slices.
+
+Default is `24`.
+
+**maxLightsPerCluster**
+
+Per-cluster light-list capacity.
+
+Default is `64`.
+
+## Source
+
+[examples/jsm/tsl/lighting/ClusteredLightsNode.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/lighting/ClusteredLightsNode.js)

+ 3 - 4
docs/pages/Color.html

@@ -16,6 +16,9 @@
 color space</i>, which defaults to <code>LinearSRGBColorSpace</code>. Inputs
 conventionally using <code>SRGBColorSpace</code> (such as hexadecimals and CSS
 strings) are converted to the working color space automatically.</p>
+<pre><code class="language-js">// converted automatically from SRGBColorSpace to LinearSRGBColorSpace
+const color = new THREE.Color().setHex( 0x112233 );
+</code></pre>
 <p>Source color spaces may be specified explicitly, to ensure correct conversions.</p>
 <pre><code class="language-js">// assumed already LinearSRGBColorSpace; no conversion
 const color = new THREE.Color().setRGB( 0.5, 0.5, 0.5 );
@@ -40,10 +43,6 @@ const color5 = new THREE.Color( 'skyblue' );
 const color6 = new THREE.Color(&quot;hsl(0, 100%, 50%)&quot;);
 //Separate RGB values between 0 and 1
 const color7 = new THREE.Color( 1, 0, 0 );
-</code></pre></div>
-				<h2>Code Example</h2>
-				<div translate="no"><pre><code class="language-js">// converted automatically from SRGBColorSpace to LinearSRGBColorSpace
-const color = new THREE.Color().setHex( 0x112233 );
 </code></pre></div>
 			</header>
 			<article>

+ 5 - 7
docs/pages/Color.html.md

@@ -2,6 +2,11 @@
 
 A Color instance is represented by RGB components in the linear _working color space_, which defaults to `LinearSRGBColorSpace`. Inputs conventionally using `SRGBColorSpace` (such as hexadecimals and CSS strings) are converted to the working color space automatically.
 
+```js
+// converted automatically from SRGBColorSpace to LinearSRGBColorSpace
+const color = new THREE.Color().setHex( 0x112233 );
+```
+
 Source color spaces may be specified explicitly, to ensure correct conversions.
 
 ```js
@@ -30,13 +35,6 @@ const color6 = new THREE.Color("hsl(0, 100%, 50%)");
 const color7 = new THREE.Color( 1, 0, 0 );
 ```
 
-## Code Example
-
-```js
-// converted automatically from SRGBColorSpace to LinearSRGBColorSpace
-const color = new THREE.Color().setHex( 0x112233 );
-```
-
 ## Constructor
 
 ### new Color( r : number | string | Color, g : number, b : number )

+ 0 - 1
docs/pages/ConditionalNode.html

@@ -15,7 +15,6 @@
 			<header>
 				<div class="class-description"><p>Represents a logical <code>if/else</code> statement. Can be used as an alternative
 to the <code>If()</code>/<code>Else()</code> syntax.</p>
-<p>The corresponding TSL <code>select()</code> looks like so:</p>
 <p>The <code>select()</code> method is called in a chaining fashion on a condition. The parameter nodes of <code>select()</code>
 determine the outcome of the entire statement.</p></div>
 				<h2>Code Example</h2>

+ 0 - 2
docs/pages/ConditionalNode.html.md

@@ -4,8 +4,6 @@
 
 Represents a logical `if/else` statement. Can be used as an alternative to the `If()`/`Else()` syntax.
 
-The corresponding TSL `select()` looks like so:
-
 The `select()` method is called in a chaining fashion on a condition. The parameter nodes of `select()` determine the outcome of the entire statement.
 
 ## Code Example

+ 14 - 6
docs/pages/DRACOExporter.html

@@ -20,10 +20,12 @@ at the cost of additional decoding time on the client device.</p>
 normals, colors, and other attributes. Draco files <em>do not</em> contain materials,
 textures, animation, or node hierarchies – to use these features, embed Draco geometry
 inside of a glTF file. A normal glTF file can be converted to a Draco-compressed glTF file
-using <a href="https://github.com/AnalyticalGraphicsInc/gltf-pipeline" target="_blank" rel="noopener">glTF-Pipeline</a>.</p></div>
-				<h2>Code Example</h2>
-				<div translate="no"><pre><code class="language-js">const exporter = new DRACOExporter();
-const data = exporter.parse( mesh, options );
+using <a href="https://github.com/AnalyticalGraphicsInc/gltf-pipeline" target="_blank" rel="noopener">glTF-Pipeline</a>.</p>
+<p>The exporter requires the Draco encoder to be loaded as a global script in advance:</p>
+<pre><code class="language-html">&lt;script src=&quot;https://cdn.jsdelivr.net/gh/google/draco@1.5.7/javascript/draco_encoder.js&quot;>&lt;/script>
+</code></pre>
+<pre><code class="language-js">const exporter = new DRACOExporter();
+const data = await exporter.parseAsync( mesh, options );
 </code></pre></div>
 			</header>
 			<article>
@@ -52,7 +54,13 @@ const data = exporter.parse( mesh, options );
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
-					<h3 class="name name-method" id="parse" translate="no">.<a href="#parse">parse</a><span class="signature">( object : <span class="param-type"><a href="Mesh.html">Mesh</a> | <a href="Points.html">Points</a></span>, options : <span class="param-type"><a href="DRACOExporter.html#~Options">DRACOExporter~Options</a></span> )</span><span class="type-signature"> : Int8Array</span> </h3>
+					<h3 class="name name-method" id="parse" translate="no">.<a href="#parse">parse</a><span class="signature">()</span> </h3>
+					<div class="method">
+						<dl class="details">
+							<dt class="important tag-deprecated"><strong>Deprecated:</strong> Use <a href="DRACOExporter.html#parseAsync">DRACOExporter#parseAsync</a> instead.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="parseAsync" translate="no">.<a href="#parseAsync">parseAsync</a><span class="signature">( object : <span class="param-type"><a href="Mesh.html">Mesh</a> | <a href="Points.html">Points</a></span>, options : <span class="param-type"><a href="DRACOExporter.html#~Options">DRACOExporter~Options</a></span> )</span><span class="type-signature"> : Promise.&lt;Int8Array></span> <span class="type-signature">(async) </span></h3>
 					<div class="method">
 						<div class="description">
 							<p>Parses the given mesh or point cloud and generates the Draco output.</p>
@@ -78,7 +86,7 @@ const data = exporter.parse( mesh, options );
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The exported Draco.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> A Promise that resolves with the exported Draco.</dt>
 						</dl>
 					</div>
 				<h2 class="subsection-title">Type Definitions</h2>

+ 11 - 4
docs/pages/DRACOExporter.html.md

@@ -6,11 +6,14 @@ An exporter to compress geometry with the Draco library.
 
 Standalone Draco files have a `.drc` extension, and contain vertex positions, normals, colors, and other attributes. Draco files _do not_ contain materials, textures, animation, or node hierarchies – to use these features, embed Draco geometry inside of a glTF file. A normal glTF file can be converted to a Draco-compressed glTF file using [glTF-Pipeline](https://github.com/AnalyticalGraphicsInc/gltf-pipeline).
 
-## Code Example
+The exporter requires the Draco encoder to be loaded as a global script in advance:
 
+```js
+<script src="https://cdn.jsdelivr.net/gh/google/draco@1.5.7/javascript/draco_encoder.js"></script>
+```
 ```js
 const exporter = new DRACOExporter();
-const data = exporter.parse( mesh, options );
+const data = await exporter.parseAsync( mesh, options );
 ```
 
 ## Import
@@ -41,7 +44,11 @@ Default is `0`.
 
 ## Methods
 
-### .parse( object : Mesh | Points, options : DRACOExporter~Options ) : Int8Array
+### .parse()
+
+**Deprecated:** Use [DRACOExporter#parseAsync](DRACOExporter.html#parseAsync) instead.
+
+### .parseAsync( object : Mesh | Points, options : DRACOExporter~Options ) : Promise.<Int8Array> (async)
 
 Parses the given mesh or point cloud and generates the Draco output.
 
@@ -53,7 +60,7 @@ The mesh or point cloud to export.
 
 The export options.
 
-**Returns:** The exported Draco.
+**Returns:** A Promise that resolves with the exported Draco.
 
 ## Type Definitions
 

+ 7 - 5
docs/pages/DRACOLoader.html

@@ -28,10 +28,9 @@ multiple decoder instances.</p>
 browser capabilities.</p></div>
 				<h2>Code Example</h2>
 				<div translate="no"><pre><code class="language-js">const loader = new DRACOLoader();
-loader.setDecoderPath( '/examples/jsm/libs/draco/' );
-const geometry = await dracoLoader.loadAsync( 'models/draco/bunny.drc' );
+const geometry = await loader.loadAsync( 'models/draco/bunny.drc' );
 geometry.computeVertexNormals(); // optional
-dracoLoader.dispose();
+loader.dispose();
 </code></pre></div>
 			</header>
 			<article>
@@ -160,11 +159,14 @@ to the <code>onLoad()</code> callback.</p>
 								</tr>
 							</tbody>
 						</table>
+						<dl class="details">
+							<dt class="important tag-deprecated"><strong>Deprecated:</strong> Yes</dt>
+						</dl>
 						<dl class="details">
 							<dt class="tag-returns"><strong>Returns:</strong> A reference to this loader.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="setDecoderPath" translate="no">.<a href="#setDecoderPath">setDecoderPath</a><span class="signature">( path : <span class="param-type">string</span> )</span><span class="type-signature"> : <a href="DRACOLoader.html">DRACOLoader</a></span> </h3>
+					<h3 class="name name-method" id="setDecoderPath" translate="no">.<a href="#setDecoderPath">setDecoderPath</a><span class="signature">( path : <span class="param-type">string | Object</span> )</span><span class="type-signature"> : <a href="DRACOLoader.html">DRACOLoader</a></span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>Provides configuration for the decoder libraries. Configuration cannot be changed after decoding begins.</p>
@@ -176,7 +178,7 @@ to the <code>onLoad()</code> callback.</p>
 										<strong translate="no">path</strong>
 									</td>
 									<td class="description last">
-										<p>The decoder path.</p>
+										<p>The decoder path, or a config object with explicit URLs for each decoder file.</p>
 									</td>
 								</tr>
 							</tbody>

+ 6 - 5
docs/pages/DRACOLoader.html.md

@@ -16,10 +16,9 @@ It is recommended to create one DRACOLoader instance and reuse it to avoid loadi
 
 ```js
 const loader = new DRACOLoader();
-loader.setDecoderPath( '/examples/jsm/libs/draco/' );
-const geometry = await dracoLoader.loadAsync( 'models/draco/bunny.drc' );
+const geometry = await loader.loadAsync( 'models/draco/bunny.drc' );
 geometry.computeVertexNormals(); // optional
-dracoLoader.dispose();
+loader.dispose();
 ```
 
 ## Import
@@ -90,15 +89,17 @@ Provides configuration for the decoder libraries. Configuration cannot be change
 
 The decoder config.
 
+**Deprecated:** Yes
+
 **Returns:** A reference to this loader.
 
-### .setDecoderPath( path : string ) : DRACOLoader
+### .setDecoderPath( path : string | Object ) : DRACOLoader
 
 Provides configuration for the decoder libraries. Configuration cannot be changed after decoding begins.
 
 **path**
 
-The decoder path.
+The decoder path, or a config object with explicit URLs for each decoder file.
 
 **Returns:** A reference to this loader.
 

+ 23 - 0
docs/pages/DataTextureLoader.html

@@ -41,6 +41,29 @@ for the respective format.</p></div>
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="createDataTexture" translate="no">.<a href="#createDataTexture">createDataTexture</a><span class="signature">( buffer : <span class="param-type">ArrayBuffer</span> )</span><span class="type-signature"> : <a href="DataTexture.html">DataTexture</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Parses the given buffer and returns a configured data texture. Use this method
+for parsing texture data that is already in memory (e.g. drag and drop or data
+loaded from a server) without going through <a href="DataTextureLoader.html#load">DataTextureLoader#load</a>.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">buffer</strong>
+									</td>
+									<td class="description last">
+										<p>The raw texture data.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The data texture.</dt>
+						</dl>
+					</div>
 					<h3 class="name name-method" id="load" translate="no">.<a href="#load">load</a><span class="signature">( url : <span class="param-type">string</span>, onLoad : <span class="param-type">function</span>, onProgress : <span class="param-type"><a href="global.html#onProgressCallback">onProgressCallback</a></span>, onError : <span class="param-type"><a href="global.html#onErrorCallback">onErrorCallback</a></span> )</span><span class="type-signature"> : <a href="DataTexture.html">DataTexture</a></span> </h3>
 					<div class="method">
 						<div class="description">

+ 10 - 0
docs/pages/DataTextureLoader.html.md

@@ -18,6 +18,16 @@ The loading manager.
 
 ## Methods
 
+### .createDataTexture( buffer : ArrayBuffer ) : DataTexture
+
+Parses the given buffer and returns a configured data texture. Use this method for parsing texture data that is already in memory (e.g. drag and drop or data loaded from a server) without going through [DataTextureLoader#load](DataTextureLoader.html#load).
+
+**buffer**
+
+The raw texture data.
+
+**Returns:** The data texture.
+
 ### .load( url : string, onLoad : function, onProgress : onProgressCallback, onError : onErrorCallback ) : DataTexture
 
 Starts loading from the given URL and passes the loaded data texture to the `onLoad()` callback. The method also returns a new texture object which can directly be used for material creation. If you do it this way, the texture may pop up in your scene once the respective loading process is finished.

+ 34 - 0
docs/pages/EnvMapCDFGenerator.html

@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>EnvMapCDFGenerator - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+	<h1 translate="no">EnvMapCDFGenerator</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>Precomputes marginal and conditional CDF textures from an equirectangular HDR environment map
+for luminance importance sampling.</p></div>
+			</header>
+			<article>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="EnvMapCDFGenerator" translate="no">new <a href="#EnvMapCDFGenerator">EnvMapCDFGenerator</a><span class="signature">()</span> </h3>
+					<div class="method">
+					</div>
+				</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/display/ImportanceSampledEnvironment.js" translate="no" target="_blank" rel="noopener">examples/jsm/tsl/display/ImportanceSampledEnvironment.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 11 - 0
docs/pages/EnvMapCDFGenerator.html.md

@@ -0,0 +1,11 @@
+# EnvMapCDFGenerator
+
+Precomputes marginal and conditional CDF textures from an equirectangular HDR environment map for luminance importance sampling.
+
+## Constructor
+
+### new EnvMapCDFGenerator()
+
+## Source
+
+[examples/jsm/tsl/display/ImportanceSampledEnvironment.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/display/ImportanceSampledEnvironment.js)

+ 1 - 3
docs/pages/ExternalTexture.html

@@ -15,9 +15,7 @@
 			<header>
 				<div class="class-description"><p>Represents a texture created externally with the same renderer context.</p>
 <p>This may be a texture from a protected media stream, device camera feed,
-or other data feeds like a depth sensor.</p>
-<p>Note that this class is only supported in <a href="WebGLRenderer.html">WebGLRenderer</a>, and in
-the <a href="WebGPURenderer.html">WebGPURenderer</a> WebGPU backend.</p></div>
+or other data feeds like a depth sensor.</p></div>
 			</header>
 			<article>
 				<div class="container-overview">

+ 0 - 2
docs/pages/ExternalTexture.html.md

@@ -6,8 +6,6 @@ Represents a texture created externally with the same renderer context.
 
 This may be a texture from a protected media stream, device camera feed, or other data feeds like a depth sensor.
 
-Note that this class is only supported in [WebGLRenderer](WebGLRenderer.html), and in the [WebGPURenderer](WebGPURenderer.html) WebGPU backend.
-
 ## Constructor
 
 ### new ExternalTexture( sourceTexture : WebGLTexture | GPUTexture )

+ 46 - 0
docs/pages/FaceFrame.html

@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>FaceFrame - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+	<h1 translate="no">FaceFrame</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>A face's local ( u along edge, v up, n outward ) frame in world space.</p></div>
+			</header>
+			<article>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="FaceFrame" translate="no">new <a href="#FaceFrame">FaceFrame</a><span class="signature">()</span> </h3>
+					<div class="method">
+					</div>
+				</div>
+				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="bays" translate="no">.<a href="#bays">bays</a><span class="signature">()</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>How many bays of <code>bayWidth</code> fit, with the remainder split into end margins.</p>
+						</div>
+					</div>
+					<h3 class="name name-method" id="matrix" translate="no">.<a href="#matrix">matrix</a><span class="signature">()</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Places a piece authored in the canonical local frame ( x across, y up, z outward ).</p>
+						</div>
+					</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/generators/city/SkyscraperGenerator.js" translate="no" target="_blank" rel="noopener">examples/jsm/generators/city/SkyscraperGenerator.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 21 - 0
docs/pages/FaceFrame.html.md

@@ -0,0 +1,21 @@
+# FaceFrame
+
+A face's local ( u along edge, v up, n outward ) frame in world space.
+
+## Constructor
+
+### new FaceFrame()
+
+## Methods
+
+### .bays()
+
+How many bays of `bayWidth` fit, with the remainder split into end margins.
+
+### .matrix()
+
+Places a piece authored in the canonical local frame ( x across, y up, z outward ).
+
+## Source
+
+[examples/jsm/generators/city/SkyscraperGenerator.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/generators/city/SkyscraperGenerator.js)

+ 8 - 0
docs/pages/FirstPersonControls.html

@@ -64,6 +64,14 @@
 						<p>Default is <code>false</code>.</p>
 					</div>
 				</div>
+				<div class="member">
+					<h3 class="name" id="dampingFactor" translate="no">.<a href="#dampingFactor">dampingFactor</a><span class="type-signature"> : number</span> </h3>
+					<div class="description">
+						<p>How quickly the movement and look velocity catches up to the input. Lower
+values feel heavier (more inertia), <code>1</code> disables damping.</p>
+						<p>Default is <code>0.1</code>.</p>
+					</div>
+				</div>
 				<div class="member">
 					<h3 class="name" id="heightCoef" translate="no">.<a href="#heightCoef">heightCoef</a><span class="type-signature"> : number</span> </h3>
 					<div class="description">

+ 6 - 0
docs/pages/FirstPersonControls.html.md

@@ -42,6 +42,12 @@ Whether or not looking around is vertically constrained by `verticalMin` and `ve
 
 Default is `false`.
 
+### .dampingFactor : number
+
+How quickly the movement and look velocity catches up to the input. Lower values feel heavier (more inertia), `1` disables damping.
+
+Default is `0.1`.
+
 ### .heightCoef : number
 
 Determines how much faster the camera moves when it's y-component is near `heightMax`.

+ 2 - 3
docs/pages/FlipNode.html

@@ -16,12 +16,11 @@
 				<div class="class-description"><p>This module is part of the TSL core and usually not used in app level code.
 It represents a flip operation during the shader generation process
 meaning it flips normalized values with the following formula:</p>
+<pre class="prettyprint source"><code>x = 1 - x;
+</code></pre>
 <p><code>FlipNode</code> is internally used to implement any <code>flipXYZW()</code>, <code>flipRGBA()</code> and
 <code>flipSTPQ()</code> method invocations on node objects. For example:</p>
 <pre><code class="language-js">uvNode = uvNode.flipY();
-</code></pre></div>
-				<h2>Code Example</h2>
-				<div translate="no"><pre class="prettyprint source"><code>x = 1 - x;
 </code></pre></div>
 			</header>
 			<article>

+ 3 - 5
docs/pages/FlipNode.html.md

@@ -4,16 +4,14 @@
 
 This module is part of the TSL core and usually not used in app level code. It represents a flip operation during the shader generation process meaning it flips normalized values with the following formula:
 
-`FlipNode` is internally used to implement any `flipXYZW()`, `flipRGBA()` and `flipSTPQ()` method invocations on node objects. For example:
-
 ```js
-uvNode = uvNode.flipY();
+x = 1 - x;
 ```
 
-## Code Example
+`FlipNode` is internally used to implement any `flipXYZW()`, `flipRGBA()` and `flipSTPQ()` method invocations on node objects. For example:
 
 ```js
-x = 1 - x;
+uvNode = uvNode.flipY();
 ```
 
 ## Constructor

+ 47 - 0
docs/pages/ForestGenerator.html

@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>ForestGenerator - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+	<h1 translate="no">ForestGenerator</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>Carpets a <a href="TerrainGenerator.html">TerrainGenerator</a> ( or anything exposing <code>sampleHeight</code>,
+<code>sampleSlope</code>, <code>minY</code>, <code>maxY</code> and <code>parameters.size</code> ) with a forest of hundreds
+of thousands of trees in a single draw call.</p>
+<p>Each tree is the cheapest thing that still reads as a tree: a ~20-face icosphere
+squashed into a tapered teardrop and lumped with a little noise, carrying a baked
+dark-base / bright-top gradient. Tens of triangles each, so a single
+THREE.InstancedMesh of half a million of them costs one draw call. Trees
+are placed by rejection sampling against ecological rules — a min/max altitude
+band ( above the mist floor, below the snowline ), a slope limit ( none on
+cliffs ) and a low-frequency density mask that opens clearings — then jittered in
+yaw, lean and ( squared-biased ) scale so the stand never reads as copies.</p></div>
+				<h2>Code Example</h2>
+				<div translate="no"><pre><code class="language-js">const forest = new ForestGenerator( { count: 500000 } );
+scene.add( forest.build( terrain ) );
+</code></pre></div>
+			</header>
+			<article>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="ForestGenerator" translate="no">new <a href="#ForestGenerator">ForestGenerator</a><span class="signature">()</span> </h3>
+					<div class="method">
+					</div>
+				</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/generators/ForestGenerator.js" translate="no" target="_blank" rel="noopener">examples/jsm/generators/ForestGenerator.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 20 - 0
docs/pages/ForestGenerator.html.md

@@ -0,0 +1,20 @@
+# ForestGenerator
+
+Carpets a [TerrainGenerator](TerrainGenerator.html) ( or anything exposing `sampleHeight`, `sampleSlope`, `minY`, `maxY` and `parameters.size` ) with a forest of hundreds of thousands of trees in a single draw call.
+
+Each tree is the cheapest thing that still reads as a tree: a ~20-face icosphere squashed into a tapered teardrop and lumped with a little noise, carrying a baked dark-base / bright-top gradient. Tens of triangles each, so a single THREE.InstancedMesh of half a million of them costs one draw call. Trees are placed by rejection sampling against ecological rules — a min/max altitude band ( above the mist floor, below the snowline ), a slope limit ( none on cliffs ) and a low-frequency density mask that opens clearings — then jittered in yaw, lean and ( squared-biased ) scale so the stand never reads as copies.
+
+## Code Example
+
+```js
+const forest = new ForestGenerator( { count: 500000 } );
+scene.add( forest.build( terrain ) );
+```
+
+## Constructor
+
+### new ForestGenerator()
+
+## Source
+
+[examples/jsm/generators/ForestGenerator.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/generators/ForestGenerator.js)

+ 46 - 44
docs/pages/FrustumArray.html

@@ -43,11 +43,11 @@ from an array of cameras. This is particularly useful for multi-view renderers.<
 							<dt class="tag-returns"><strong>Returns:</strong> A clone of this instance.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="containsPoint" translate="no">.<a href="#containsPoint">containsPoint</a><span class="signature">( point : <span class="param-type"><a href="Vector3.html">Vector3</a></span>, cameraArray : <span class="param-type">Object</span> )</span><span class="type-signature"> : boolean</span> </h3>
+					<h3 class="name name-method" id="containsPoint" translate="no">.<a href="#containsPoint">containsPoint</a><span class="signature">( point : <span class="param-type"><a href="Vector3.html">Vector3</a></span> )</span><span class="type-signature"> : boolean</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>Returns <code>true</code> if the given point lies within any frustum
-from the camera array.</p>
+							<p>Returns <code>true</code> if the given point lies within any cached frustum.</p>
+<p><a href="FrustumArray.html#setFromArrayCamera">FrustumArray#setFromArrayCamera</a> must be called once per render before this method.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -59,25 +59,38 @@ from the camera array.</p>
 										<p>The point to test.</p>
 									</td>
 								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> Whether the point is visible in any camera.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="copy" translate="no">.<a href="#copy">copy</a><span class="signature">( frustumArray : <span class="param-type"><a href="FrustumArray.html">FrustumArray</a></span> )</span><span class="type-signature"> : <a href="FrustumArray.html">FrustumArray</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Copies the values of the given frustum array to this instance.</p>
+						</div>
+						<table class="params">
+							<tbody>
 								<tr>
 									<td class="name">
-										<strong translate="no">cameraArray</strong>
+										<strong translate="no">frustumArray</strong>
 									</td>
 									<td class="description last">
-										<p>An object with a cameras property containing an array of cameras.</p>
+										<p>The frustum array to copy.</p>
 									</td>
 								</tr>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> Whether the point is visible in any camera.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> A reference to this frustum array.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="intersectsBox" translate="no">.<a href="#intersectsBox">intersectsBox</a><span class="signature">( box : <span class="param-type"><a href="Box3.html">Box3</a></span>, cameraArray : <span class="param-type">Object</span> )</span><span class="type-signature"> : boolean</span> </h3>
+					<h3 class="name name-method" id="intersectsBox" translate="no">.<a href="#intersectsBox">intersectsBox</a><span class="signature">( box : <span class="param-type"><a href="Box3.html">Box3</a></span> )</span><span class="type-signature"> : boolean</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>Returns <code>true</code> if the given bounding box is intersecting any frustum
-from the camera array.</p>
+							<p>Returns <code>true</code> if the given bounding box is intersecting any cached frustum.</p>
+<p><a href="FrustumArray.html#setFromArrayCamera">FrustumArray#setFromArrayCamera</a> must be called once per render before this method.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -89,25 +102,17 @@ from the camera array.</p>
 										<p>The bounding box to test.</p>
 									</td>
 								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">cameraArray</strong>
-									</td>
-									<td class="description last">
-										<p>An object with a cameras property containing an array of cameras.</p>
-									</td>
-								</tr>
 							</tbody>
 						</table>
 						<dl class="details">
 							<dt class="tag-returns"><strong>Returns:</strong> Whether the box is visible in any camera.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="intersectsObject" translate="no">.<a href="#intersectsObject">intersectsObject</a><span class="signature">( object : <span class="param-type"><a href="Object3D.html">Object3D</a></span>, cameraArray : <span class="param-type">Object</span> )</span><span class="type-signature"> : boolean</span> </h3>
+					<h3 class="name name-method" id="intersectsObject" translate="no">.<a href="#intersectsObject">intersectsObject</a><span class="signature">( object : <span class="param-type"><a href="Object3D.html">Object3D</a></span> )</span><span class="type-signature"> : boolean</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>Returns <code>true</code> if the 3D object's bounding sphere is intersecting any frustum
-from the camera array.</p>
+							<p>Returns <code>true</code> if the 3D object's bounding sphere is intersecting any cached frustum.</p>
+<p><a href="FrustumArray.html#setFromArrayCamera">FrustumArray#setFromArrayCamera</a> must be called once per render before this method.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -119,25 +124,17 @@ from the camera array.</p>
 										<p>The 3D object to test.</p>
 									</td>
 								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">cameraArray</strong>
-									</td>
-									<td class="description last">
-										<p>An object with a cameras property containing an array of cameras.</p>
-									</td>
-								</tr>
 							</tbody>
 						</table>
 						<dl class="details">
 							<dt class="tag-returns"><strong>Returns:</strong> Whether the 3D object is visible in any camera.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="intersectsSphere" translate="no">.<a href="#intersectsSphere">intersectsSphere</a><span class="signature">( sphere : <span class="param-type"><a href="Sphere.html">Sphere</a></span>, cameraArray : <span class="param-type">Object</span> )</span><span class="type-signature"> : boolean</span> </h3>
+					<h3 class="name name-method" id="intersectsSphere" translate="no">.<a href="#intersectsSphere">intersectsSphere</a><span class="signature">( sphere : <span class="param-type"><a href="Sphere.html">Sphere</a></span> )</span><span class="type-signature"> : boolean</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>Returns <code>true</code> if the given bounding sphere is intersecting any frustum
-from the camera array.</p>
+							<p>Returns <code>true</code> if the given bounding sphere is intersecting any cached frustum.</p>
+<p><a href="FrustumArray.html#setFromArrayCamera">FrustumArray#setFromArrayCamera</a> must be called once per render before this method.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -149,25 +146,17 @@ from the camera array.</p>
 										<p>The bounding sphere to test.</p>
 									</td>
 								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">cameraArray</strong>
-									</td>
-									<td class="description last">
-										<p>An object with a cameras property containing an array of cameras.</p>
-									</td>
-								</tr>
 							</tbody>
 						</table>
 						<dl class="details">
 							<dt class="tag-returns"><strong>Returns:</strong> Whether the sphere is visible in any camera.</dt>
 						</dl>
 					</div>
-					<h3 class="name name-method" id="intersectsSprite" translate="no">.<a href="#intersectsSprite">intersectsSprite</a><span class="signature">( sprite : <span class="param-type"><a href="Sprite.html">Sprite</a></span>, cameraArray : <span class="param-type">Object</span> )</span><span class="type-signature"> : boolean</span> </h3>
+					<h3 class="name name-method" id="intersectsSprite" translate="no">.<a href="#intersectsSprite">intersectsSprite</a><span class="signature">( sprite : <span class="param-type"><a href="Sprite.html">Sprite</a></span> )</span><span class="type-signature"> : boolean</span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>Returns <code>true</code> if the given sprite is intersecting any frustum
-from the camera array.</p>
+							<p>Returns <code>true</code> if the given sprite is intersecting any cached frustum.</p>
+<p><a href="FrustumArray.html#setFromArrayCamera">FrustumArray#setFromArrayCamera</a> must be called once per render before this method.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -179,18 +168,31 @@ from the camera array.</p>
 										<p>The sprite to test.</p>
 									</td>
 								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> Whether the sprite is visible in any camera.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="setFromArrayCamera" translate="no">.<a href="#setFromArrayCamera">setFromArrayCamera</a><span class="signature">( cameraArray : <span class="param-type"><a href="ArrayCamera.html">ArrayCamera</a></span> )</span><span class="type-signature"> : <a href="FrustumArray.html">FrustumArray</a></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Computes and caches a frustum for each camera of the given array camera.</p>
+						</div>
+						<table class="params">
+							<tbody>
 								<tr>
 									<td class="name">
 										<strong translate="no">cameraArray</strong>
 									</td>
 									<td class="description last">
-										<p>An object with a cameras property containing an array of cameras.</p>
+										<p>The array camera whose sub-cameras define the frustums.</p>
 									</td>
 								</tr>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> Whether the sprite is visible in any camera.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> A reference to this frustum array.</dt>
 						</dl>
 					</div>
 				<h2 class="subsection-title">Source</h2>

+ 37 - 27
docs/pages/FrustumArray.html.md

@@ -24,75 +24,85 @@ Returns a new frustum array with copied values from this instance.
 
 **Returns:** A clone of this instance.
 
-### .containsPoint( point : Vector3, cameraArray : Object ) : boolean
+### .containsPoint( point : Vector3 ) : boolean
 
-Returns `true` if the given point lies within any frustum from the camera array.
+Returns `true` if the given point lies within any cached frustum.
+
+[FrustumArray#setFromArrayCamera](FrustumArray.html#setFromArrayCamera) must be called once per render before this method.
 
 **point**
 
 The point to test.
 
-**cameraArray**
+**Returns:** Whether the point is visible in any camera.
 
-An object with a cameras property containing an array of cameras.
+### .copy( frustumArray : FrustumArray ) : FrustumArray
 
-**Returns:** Whether the point is visible in any camera.
+Copies the values of the given frustum array to this instance.
 
-### .intersectsBox( box : Box3, cameraArray : Object ) : boolean
+**frustumArray**
 
-Returns `true` if the given bounding box is intersecting any frustum from the camera array.
+The frustum array to copy.
 
-**box**
+**Returns:** A reference to this frustum array.
 
-The bounding box to test.
+### .intersectsBox( box : Box3 ) : boolean
 
-**cameraArray**
+Returns `true` if the given bounding box is intersecting any cached frustum.
 
-An object with a cameras property containing an array of cameras.
+[FrustumArray#setFromArrayCamera](FrustumArray.html#setFromArrayCamera) must be called once per render before this method.
+
+**box**
+
+The bounding box to test.
 
 **Returns:** Whether the box is visible in any camera.
 
-### .intersectsObject( object : Object3D, cameraArray : Object ) : boolean
+### .intersectsObject( object : Object3D ) : boolean
+
+Returns `true` if the 3D object's bounding sphere is intersecting any cached frustum.
 
-Returns `true` if the 3D object's bounding sphere is intersecting any frustum from the camera array.
+[FrustumArray#setFromArrayCamera](FrustumArray.html#setFromArrayCamera) must be called once per render before this method.
 
 **object**
 
 The 3D object to test.
 
-**cameraArray**
-
-An object with a cameras property containing an array of cameras.
-
 **Returns:** Whether the 3D object is visible in any camera.
 
-### .intersectsSphere( sphere : Sphere, cameraArray : Object ) : boolean
+### .intersectsSphere( sphere : Sphere ) : boolean
+
+Returns `true` if the given bounding sphere is intersecting any cached frustum.
 
-Returns `true` if the given bounding sphere is intersecting any frustum from the camera array.
+[FrustumArray#setFromArrayCamera](FrustumArray.html#setFromArrayCamera) must be called once per render before this method.
 
 **sphere**
 
 The bounding sphere to test.
 
-**cameraArray**
-
-An object with a cameras property containing an array of cameras.
-
 **Returns:** Whether the sphere is visible in any camera.
 
-### .intersectsSprite( sprite : Sprite, cameraArray : Object ) : boolean
+### .intersectsSprite( sprite : Sprite ) : boolean
 
-Returns `true` if the given sprite is intersecting any frustum from the camera array.
+Returns `true` if the given sprite is intersecting any cached frustum.
+
+[FrustumArray#setFromArrayCamera](FrustumArray.html#setFromArrayCamera) must be called once per render before this method.
 
 **sprite**
 
 The sprite to test.
 
+**Returns:** Whether the sprite is visible in any camera.
+
+### .setFromArrayCamera( cameraArray : ArrayCamera ) : FrustumArray
+
+Computes and caches a frustum for each camera of the given array camera.
+
 **cameraArray**
 
-An object with a cameras property containing an array of cameras.
+The array camera whose sub-cameras define the frustums.
 
-**Returns:** Whether the sprite is visible in any camera.
+**Returns:** A reference to this frustum array.
 
 ## Source
 

+ 139 - 1
docs/pages/GLSLNodeBuilder.html

@@ -379,6 +379,144 @@ against a reference value.</p>
 							<dt class="tag-returns"><strong>Returns:</strong> The GLSL snippet.</dt>
 						</dl>
 					</div>
+					<h3 class="name name-method" id="generateTextureGather" translate="no">.<a href="#generateTextureGather">generateTextureGather</a><span class="signature">( texture : <span class="param-type"><a href="Texture.html">Texture</a></span>, textureProperty : <span class="param-type">string</span>, uvSnippet : <span class="param-type">string</span>, gatherSnippet : <span class="param-type">string</span>, depthSnippet : <span class="param-type">string</span>, offsetSnippet : <span class="param-type">string</span>, flipYSnippet : <span class="param-type">string</span> )</span><span class="type-signature"> : string</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Generates the GLSL snippet for gathering four texels from the given texture.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">texture</strong>
+									</td>
+									<td class="description last">
+										<p>The texture.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">textureProperty</strong>
+									</td>
+									<td class="description last">
+										<p>The name of the texture uniform in the shader.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">uvSnippet</strong>
+									</td>
+									<td class="description last">
+										<p>A GLSL snippet that represents texture coordinates used for sampling.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">gatherSnippet</strong>
+									</td>
+									<td class="description last">
+										<p>A GLSL snippet that represents the index of the channel to read.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">depthSnippet</strong>
+									</td>
+									<td class="description last">
+										<p>A GLSL snippet that represents 0-based texture array index to sample.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">offsetSnippet</strong>
+									</td>
+									<td class="description last">
+										<p>A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">flipYSnippet</strong>
+									</td>
+									<td class="description last">
+										<p>A GLSL snippet that represents the y-flip. Only used for WebGL.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The GLSL snippet.</dt>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="generateTextureGatherCompare" translate="no">.<a href="#generateTextureGatherCompare">generateTextureGatherCompare</a><span class="signature">( texture : <span class="param-type"><a href="Texture.html">Texture</a></span>, textureProperty : <span class="param-type">string</span>, uvSnippet : <span class="param-type">string</span>, compareSnippet : <span class="param-type">string</span>, depthSnippet : <span class="param-type">string</span>, offsetSnippet : <span class="param-type">string</span>, flipYSnippet : <span class="param-type">string</span> )</span><span class="type-signature"> : string</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Generates the GLSL snippet for performing a depth comparison on four texels in the given depth texture.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">texture</strong>
+									</td>
+									<td class="description last">
+										<p>The texture.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">textureProperty</strong>
+									</td>
+									<td class="description last">
+										<p>The name of the texture uniform in the shader.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">uvSnippet</strong>
+									</td>
+									<td class="description last">
+										<p>A GLSL snippet that represents texture coordinates used for sampling.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">compareSnippet</strong>
+									</td>
+									<td class="description last">
+										<p>A GLSL snippet that represents the reference value.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">depthSnippet</strong>
+									</td>
+									<td class="description last">
+										<p>A GLSL snippet that represents 0-based texture array index to sample.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">offsetSnippet</strong>
+									</td>
+									<td class="description last">
+										<p>A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">flipYSnippet</strong>
+									</td>
+									<td class="description last">
+										<p>A GLSL snippet that represents the y-flip. Only used for WebGL.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The GLSL snippet.</dt>
+						</dl>
+					</div>
 					<h3 class="name name-method" id="generateTextureGrad" translate="no">.<a href="#generateTextureGrad">generateTextureGrad</a><span class="signature">( texture : <span class="param-type"><a href="Texture.html">Texture</a></span>, textureProperty : <span class="param-type">string</span>, uvSnippet : <span class="param-type">string</span>, gradSnippet : <span class="param-type">Array.&lt;string></span>, depthSnippet : <span class="param-type">string</span>, offsetSnippet : <span class="param-type">string</span> )</span><span class="type-signature"> : string</span> </h3>
 					<div class="method">
 						<div class="description">
@@ -612,7 +750,7 @@ against a reference value.</p>
 							</tbody>
 						</table>
 						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The resolved WGSL bitcast invocation.</dt>
+							<dt class="tag-returns"><strong>Returns:</strong> The resolved GLSL bitcast invocation.</dt>
 						</dl>
 					</div>
 					<h3 class="name name-method" id="getClipDistance" translate="no">.<a href="#getClipDistance">getClipDistance</a><span class="signature">()</span><span class="type-signature"> : string</span> </h3>

+ 69 - 1
docs/pages/GLSLNodeBuilder.html.md

@@ -192,6 +192,74 @@ Default is `this.shaderStage`.
 
 **Returns:** The GLSL snippet.
 
+### .generateTextureGather( texture : Texture, textureProperty : string, uvSnippet : string, gatherSnippet : string, depthSnippet : string, offsetSnippet : string, flipYSnippet : string ) : string
+
+Generates the GLSL snippet for gathering four texels from the given texture.
+
+**texture**
+
+The texture.
+
+**textureProperty**
+
+The name of the texture uniform in the shader.
+
+**uvSnippet**
+
+A GLSL snippet that represents texture coordinates used for sampling.
+
+**gatherSnippet**
+
+A GLSL snippet that represents the index of the channel to read.
+
+**depthSnippet**
+
+A GLSL snippet that represents 0-based texture array index to sample.
+
+**offsetSnippet**
+
+A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
+
+**flipYSnippet**
+
+A GLSL snippet that represents the y-flip. Only used for WebGL.
+
+**Returns:** The GLSL snippet.
+
+### .generateTextureGatherCompare( texture : Texture, textureProperty : string, uvSnippet : string, compareSnippet : string, depthSnippet : string, offsetSnippet : string, flipYSnippet : string ) : string
+
+Generates the GLSL snippet for performing a depth comparison on four texels in the given depth texture.
+
+**texture**
+
+The texture.
+
+**textureProperty**
+
+The name of the texture uniform in the shader.
+
+**uvSnippet**
+
+A GLSL snippet that represents texture coordinates used for sampling.
+
+**compareSnippet**
+
+A GLSL snippet that represents the reference value.
+
+**depthSnippet**
+
+A GLSL snippet that represents 0-based texture array index to sample.
+
+**offsetSnippet**
+
+A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
+
+**flipYSnippet**
+
+A GLSL snippet that represents the y-flip. Only used for WebGL.
+
+**Returns:** The GLSL snippet.
+
 ### .generateTextureGrad( texture : Texture, textureProperty : string, uvSnippet : string, gradSnippet : Array.<string>, depthSnippet : string, offsetSnippet : string ) : string
 
 Generates the GLSL snippet for sampling/loading the given texture using explicit gradients.
@@ -306,7 +374,7 @@ The output type to bitcast to.
 
 The input type of the.
 
-**Returns:** The resolved WGSL bitcast invocation.
+**Returns:** The resolved GLSL bitcast invocation.
 
 ### .getClipDistance() : string
 

+ 4 - 1
docs/pages/GLTFExporter.html

@@ -299,9 +299,12 @@ corresponding texture utils <a href="WebGLTextureUtils.html">WebGLTextureUtils</
 					<strong>animations</strong>
 						<br>
 <span class="param-type">Array.&lt;<a href="AnimationClip.html">AnimationClip</a>></span>
+|
+<span class="param-type">Array.&lt;Array.&lt;<a href="AnimationClip.html">AnimationClip</a>>></span>
 				</td>
 			<td class="description last">
-				<p>List of animations to be included in the export.</p>
+				<p>List of animations to be included in the export. When exporting a single 3D object or scene, this is a flat list of clips.
+When exporting an array of multiple scenes, this must be a nested array with one list of clips per scene, matched to the input by index.</p>
 						<p>Default is <code>[]</code>.</p>
 			</td>
 		</tr>

+ 2 - 2
docs/pages/GLTFExporter.html.md

@@ -175,9 +175,9 @@ Restricts the image maximum size (both width and height) to the given value.
 Default is `Infinity`.
 
 **animations**  
-Array.<[AnimationClip](AnimationClip.html)\>
+Array.<[AnimationClip](AnimationClip.html)\> | Array.<Array.<[AnimationClip](AnimationClip.html)\>>
 
-List of animations to be included in the export.
+List of animations to be included in the export. When exporting a single 3D object or scene, this is a flat list of clips. When exporting an array of multiple scenes, this must be a nested array with one list of clips per scene, matched to the input by index.
 
 Default is `[]`.
 

+ 2 - 3
docs/pages/GPUComputationRenderer.html

@@ -24,6 +24,8 @@ as inputs to render the textures of the next frame.</p>
 <p>Variable names should be valid identifiers and should not collide with THREE GLSL used identifiers.
 a common approach could be to use 'texture' prefixing the variable name; i.e texturePosition, textureVelocity...</p>
 <p>The size of the computation (sizeX * sizeY) is defined as 'resolution' automatically in the shader. For example:</p>
+<pre class="prettyprint source"><code>#DEFINE resolution vec2( 1024.0, 1024.0 )
+</code></pre>
 <p>Basic use:</p>
 <pre><code class="language-js">// Initialization...
 // Create computation renderer
@@ -68,9 +70,6 @@ myMaterial.uniforms.map.value = outputRenderTarget.texture;
 // And compute each frame, before rendering to screen:
 gpuCompute.doRenderTarget( myFilter1, myRenderTarget );
 gpuCompute.doRenderTarget( myFilter2, outputRenderTarget );
-</code></pre></div>
-				<h2>Code Example</h2>
-				<div translate="no"><pre class="prettyprint source"><code>#DEFINE resolution vec2( 1024.0, 1024.0 )
 </code></pre></div>
 			</header>
 			<article>

+ 4 - 6
docs/pages/GPUComputationRenderer.html.md

@@ -14,6 +14,10 @@ Variable names should be valid identifiers and should not collide with THREE GLS
 
 The size of the computation (sizeX \* sizeY) is defined as 'resolution' automatically in the shader. For example:
 
+```js
+#DEFINE resolution vec2( 1024.0, 1024.0 )
+```
+
 Basic use:
 
 ```js
@@ -64,12 +68,6 @@ gpuCompute.doRenderTarget( myFilter1, myRenderTarget );
 gpuCompute.doRenderTarget( myFilter2, outputRenderTarget );
 ```
 
-## Code Example
-
-```js
-#DEFINE resolution vec2( 1024.0, 1024.0 )
-```
-
 ## Import
 
 GPUComputationRenderer is an addon, and must be imported explicitly, see [Installation#Addons](https://threejs.org/manual/#en/installation).

+ 46 - 1
docs/pages/IESSpotLightNode.html

@@ -18,8 +18,32 @@
 			<article>
 				<div class="container-overview">
 					<h2>Constructor</h2>
-					<h3 class="name name-method" id="IESSpotLightNode" translate="no">new <a href="#IESSpotLightNode">IESSpotLightNode</a><span class="signature">()</span> </h3>
+					<h3 class="name name-method" id="IESSpotLightNode" translate="no">new <a href="#IESSpotLightNode">IESSpotLightNode</a><span class="signature">( light : <span class="param-type"><a href="SpotLight.html">SpotLight</a></span> )</span> </h3>
 					<div class="method">
+						<div class="description">
+							<p>Constructs a new IES spot light node.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">light</strong>
+									</td>
+									<td class="description last">
+										<p>The spot light source.</p>
+										<p>Default is <code>null</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</div>
+				<h2 class="subsection-title">Properties</h2>
+				<div class="member">
+					<h3 class="name" id="_iesTextureNode" translate="no">.<a href="#_iesTextureNode">_iesTextureNode</a><span class="type-signature"> : <a href="TextureNode.html">TextureNode</a></span> </h3>
+					<div class="description">
+						<p>The texture node representing the IES texture.</p>
+						<p>Default is <code>null</code>.</p>
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
@@ -55,6 +79,27 @@
 							<dt class="tag-returns"><strong>Returns:</strong> The spot attenuation.</dt>
 						</dl>
 					</div>
+					<h3 class="name name-method" id="update" translate="no">.<a href="#update">update</a><span class="signature">( frame : <span class="param-type"><a href="NodeFrame.html">NodeFrame</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Overwritten to update the IES spot light texture.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">frame</strong>
+									</td>
+									<td class="description last">
+										<p>A reference to the current node frame.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="SpotLightNode.html#update">SpotLightNode#update</a></dt>
+						</dl>
+					</div>
 				<h2 class="subsection-title">Source</h2>
 				<p>
 					<a href="https://github.com/mrdoob/three.js/blob/master/src/nodes/lighting/IESSpotLightNode.js" translate="no" target="_blank" rel="noopener">src/nodes/lighting/IESSpotLightNode.js</a>

+ 27 - 1
docs/pages/IESSpotLightNode.html.md

@@ -6,7 +6,23 @@ An IES version of the default spot light node.
 
 ## Constructor
 
-### new IESSpotLightNode()
+### new IESSpotLightNode( light : SpotLight )
+
+Constructs a new IES spot light node.
+
+**light**
+
+The spot light source.
+
+Default is `null`.
+
+## Properties
+
+### ._iesTextureNode : TextureNode
+
+The texture node representing the IES texture.
+
+Default is `null`.
 
 ## Methods
 
@@ -26,6 +42,16 @@ The angle to compute the spot attenuation for.
 
 **Returns:** The spot attenuation.
 
+### .update( frame : NodeFrame )
+
+Overwritten to update the IES spot light texture.
+
+**frame**
+
+A reference to the current node frame.
+
+**Overrides:** [SpotLightNode#update](SpotLightNode.html#update)
+
 ## Source
 
 [src/nodes/lighting/IESSpotLightNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/lighting/IESSpotLightNode.js)

+ 2 - 3
docs/pages/ImageBitmapLoader.html

@@ -20,15 +20,14 @@ textures for rendering.</p>
 These options need to be configured via <a href="ImageBitmapLoader.html#setOptions">ImageBitmapLoader#setOptions</a> prior to loading,
 unlike regular images which can be configured on the Texture to set these options on GPU upload instead.</p>
 <p>To match the default behaviour of <a href="Texture.html">Texture</a>, the following options are needed:</p>
+<pre><code class="language-js">{ imageOrientation: 'flipY', premultiplyAlpha: 'none' }
+</code></pre>
 <p>Also note that unlike <a href="FileLoader.html">FileLoader</a>, this loader will only avoid multiple concurrent requests to the same URL if <a href="Cache.html">Cache</a> is enabled.</p>
 <pre><code class="language-js">const loader = new THREE.ImageBitmapLoader();
 loader.setOptions( { imageOrientation: 'flipY' } ); // set options if needed
 const imageBitmap = await loader.loadAsync( 'image.png' );
 const texture = new THREE.Texture( imageBitmap );
 texture.needsUpdate = true;
-</code></pre></div>
-				<h2>Code Example</h2>
-				<div translate="no"><pre><code class="language-js">{ imageOrientation: 'flipY', premultiplyAlpha: 'none' }
 </code></pre></div>
 			</header>
 			<article>

+ 4 - 6
docs/pages/ImageBitmapLoader.html.md

@@ -8,6 +8,10 @@ Note that [Texture#flipY](Texture.html#flipY) and [Texture#premultiplyAlpha](Tex
 
 To match the default behaviour of [Texture](Texture.html), the following options are needed:
 
+```js
+{ imageOrientation: 'flipY', premultiplyAlpha: 'none' }
+```
+
 Also note that unlike [FileLoader](FileLoader.html), this loader will only avoid multiple concurrent requests to the same URL if [Cache](Cache.html) is enabled.
 
 ```js
@@ -18,12 +22,6 @@ const texture = new THREE.Texture( imageBitmap );
 texture.needsUpdate = true;
 ```
 
-## Code Example
-
-```js
-{ imageOrientation: 'flipY', premultiplyAlpha: 'none' }
-```
-
 ## Constructor
 
 ### new ImageBitmapLoader( manager : LoadingManager )

+ 267 - 0
docs/pages/ImportanceSampledEnvironment.html

@@ -0,0 +1,267 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>ImportanceSampledEnvironment - Three.js Docs</title>
+	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+	<script src="../scripts/highlight.min.js"></script>
+	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
+	<link type="text/css" rel="stylesheet" href="../styles/page.css">
+</head>
+<body>
+	<h1 translate="no">ImportanceSampledEnvironment</h1>
+		<section>
+			<header>
+				<div class="class-description"><p>Manages a preprocessed HDR environment map (CDF textures, uniforms) and exposes
+TSL helpers for BRDF-direction lookups and MIS importance sampling.</p></div>
+			</header>
+			<article>
+				<div class="container-overview">
+					<h2>Constructor</h2>
+					<h3 class="name name-method" id="ImportanceSampledEnvironment" translate="no">new <a href="#ImportanceSampledEnvironment">ImportanceSampledEnvironment</a><span class="signature">( importanceSampling : <span class="param-type">boolean</span> )</span> </h3>
+					<div class="method">
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">importanceSampling</strong>
+									</td>
+									<td class="description last">
+										<p>When <code>true</code>, builds luminance CDF tables and enables MIS env sampling.</p>
+										<p>Default is <code>false</code>.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-see">See:</dt>
+							<dd class="tag-see">
+								<ul>
+									<li><a href="https://github.com/gkjohnson/three-gpu-pathtracer" target="_blank" rel="noopener">https://github.com/gkjohnson/three-gpu-pathtracer</a></li>
+								</ul>
+							</dd>
+						</dl>
+					</div>
+				</div>
+				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="sampleEnvironmentBRDF" translate="no">.<a href="#sampleEnvironmentBRDF">sampleEnvironmentBRDF</a><span class="signature">( params : <span class="param-type">Object</span> )</span><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;vec3></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Environment reflection for a screen-space miss using only the BRDF / reflected-ray direction.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">params</strong>
+									</td>
+									<td class="description last">
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">cameraWorldMatrix</strong>
+									</td>
+									<td class="description last">
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">viewReflectDir</strong>
+									</td>
+									<td class="description last">
+										<p>View-space GGX-sampled reflected ray.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">N</strong>
+									</td>
+									<td class="description last">
+										<p>View-space shading normal.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">V</strong>
+									</td>
+									<td class="description last">
+										<p>View-space direction to camera.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">alpha</strong>
+									</td>
+									<td class="description last">
+										<p>GGX roughness (alpha).</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">f0</strong>
+									</td>
+									<td class="description last">
+									</td>
+								</tr>
+							</tbody>
+						</table>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="sampleEnvironmentMIS" translate="no">.<a href="#sampleEnvironmentMIS">sampleEnvironmentMIS</a><span class="signature">( params : <span class="param-type">Object</span> )</span><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;vec3></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Environment reflection for a screen-space miss, estimated with multiple importance
+sampling (MIS) between the BRDF / reflected-ray direction and the env-luminance CDF
+direction. Both techniques use consistent solid-angle PDFs (<code>D·G1(N·V)/(4·N·V)</code>), so
+the power heuristic is unbiased. Adapted from three-gpu-pathtracer.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">params</strong>
+									</td>
+									<td class="description last">
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">cameraWorldMatrix</strong>
+									</td>
+									<td class="description last">
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">viewReflectDir</strong>
+									</td>
+									<td class="description last">
+										<p>View-space GGX-sampled reflected ray.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">N</strong>
+									</td>
+									<td class="description last">
+										<p>View-space shading normal.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">V</strong>
+									</td>
+									<td class="description last">
+										<p>View-space direction to camera.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">alpha</strong>
+									</td>
+									<td class="description last">
+										<p>GGX roughness (alpha).</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">f0</strong>
+									</td>
+									<td class="description last">
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">Xi2</strong>
+									</td>
+									<td class="description last">
+										<p>Second blue-noise sample (zw used for the CDF).</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-see">See:</dt>
+							<dd class="tag-see">
+								<ul>
+									<li><a href="https://github.com/gkjohnson/three-gpu-pathtracer" target="_blank" rel="noopener">https://github.com/gkjohnson/three-gpu-pathtracer</a></li>
+								</ul>
+							</dd>
+						</dl>
+					</div>
+					<h3 class="name name-method" id="sampleReflect" translate="no">.<a href="#sampleReflect">sampleReflect</a><span class="signature">( params : <span class="param-type">Object</span> )</span><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;vec3></span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Simple environment lookup along the reflected direction (no MIS).</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">params</strong>
+									</td>
+									<td class="description last">
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">cameraWorldMatrix</strong>
+									</td>
+									<td class="description last">
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">viewReflectDir</strong>
+									</td>
+									<td class="description last">
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">sampleWeight</strong>
+									</td>
+									<td class="description last">
+										<p>Optional radiance scale (defaults to 1).</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<h3 class="name name-method" id="updateFrom" translate="no">.<a href="#updateFrom">updateFrom</a><span class="signature">( hdr : <span class="param-type"><a href="Texture.html">Texture</a></span> )</span> </h3>
+					<div class="method">
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">hdr</strong>
+									</td>
+									<td class="description last">
+										<p>Equirectangular HDR environment map.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				<h2 class="subsection-title">Source</h2>
+				<p>
+					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/display/ImportanceSampledEnvironment.js" translate="no" target="_blank" rel="noopener">examples/jsm/tsl/display/ImportanceSampledEnvironment.js</a>
+				</p>
+			</article>
+		</section>
+<script src="../scripts/linenumber.js"></script>
+<script src="../scripts/page.js"></script>
+</body>
+</html>

+ 103 - 0
docs/pages/ImportanceSampledEnvironment.html.md

@@ -0,0 +1,103 @@
+# ImportanceSampledEnvironment
+
+Manages a preprocessed HDR environment map (CDF textures, uniforms) and exposes TSL helpers for BRDF-direction lookups and MIS importance sampling.
+
+## Constructor
+
+### new ImportanceSampledEnvironment( importanceSampling : boolean )
+
+**importanceSampling**
+
+When `true`, builds luminance CDF tables and enables MIS env sampling.
+
+Default is `false`.
+
+See:
+
+*   [https://github.com/gkjohnson/three-gpu-pathtracer](https://github.com/gkjohnson/three-gpu-pathtracer)
+
+## Methods
+
+### .sampleEnvironmentBRDF( params : Object ) : Node.<vec3>
+
+Environment reflection for a screen-space miss using only the BRDF / reflected-ray direction.
+
+**params**
+
+**cameraWorldMatrix**
+
+**viewReflectDir**
+
+View-space GGX-sampled reflected ray.
+
+**N**
+
+View-space shading normal.
+
+**V**
+
+View-space direction to camera.
+
+**alpha**
+
+GGX roughness (alpha).
+
+**f0**
+
+### .sampleEnvironmentMIS( params : Object ) : Node.<vec3>
+
+Environment reflection for a screen-space miss, estimated with multiple importance sampling (MIS) between the BRDF / reflected-ray direction and the env-luminance CDF direction. Both techniques use consistent solid-angle PDFs (`D·G1(N·V)/(4·N·V)`), so the power heuristic is unbiased. Adapted from three-gpu-pathtracer.
+
+**params**
+
+**cameraWorldMatrix**
+
+**viewReflectDir**
+
+View-space GGX-sampled reflected ray.
+
+**N**
+
+View-space shading normal.
+
+**V**
+
+View-space direction to camera.
+
+**alpha**
+
+GGX roughness (alpha).
+
+**f0**
+
+**Xi2**
+
+Second blue-noise sample (zw used for the CDF).
+
+See:
+
+*   [https://github.com/gkjohnson/three-gpu-pathtracer](https://github.com/gkjohnson/three-gpu-pathtracer)
+
+### .sampleReflect( params : Object ) : Node.<vec3>
+
+Simple environment lookup along the reflected direction (no MIS).
+
+**params**
+
+**cameraWorldMatrix**
+
+**viewReflectDir**
+
+**sampleWeight**
+
+Optional radiance scale (defaults to 1).
+
+### .updateFrom( hdr : Texture )
+
+**hdr**
+
+Equirectangular HDR environment map.
+
+## Source
+
+[examples/jsm/tsl/display/ImportanceSampledEnvironment.js](https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/display/ImportanceSampledEnvironment.js)

+ 82 - 26
docs/pages/Info.html

@@ -102,32 +102,32 @@ by <code>NodeFrame</code>.</p>
 	<tbody>
 		<tr>
 				<td class="name">
-					<strong>geometries</strong>
+					<strong>attributes</strong>
 						<br>
 <span class="param-type">number</span>
 				</td>
 			<td class="description last">
-				<p>The number of active geometries.</p>
+				<p>The number of active attributes.</p>
 			</td>
 		</tr>
 		<tr>
 				<td class="name">
-					<strong>textures</strong>
+					<strong>attributesSize</strong>
 						<br>
 <span class="param-type">number</span>
 				</td>
 			<td class="description last">
-				<p>The number of active textures.</p>
+				<p>The memory size of active attributes in bytes.</p>
 			</td>
 		</tr>
 		<tr>
 				<td class="name">
-					<strong>attributes</strong>
+					<strong>geometries</strong>
 						<br>
 <span class="param-type">number</span>
 				</td>
 			<td class="description last">
-				<p>The number of active attributes.</p>
+				<p>The number of active geometries.</p>
 			</td>
 		</tr>
 		<tr>
@@ -142,12 +142,12 @@ by <code>NodeFrame</code>.</p>
 		</tr>
 		<tr>
 				<td class="name">
-					<strong>storageAttributes</strong>
+					<strong>indexAttributesSize</strong>
 						<br>
 <span class="param-type">number</span>
 				</td>
 			<td class="description last">
-				<p>The number of active storage attributes.</p>
+				<p>The memory size of active index attributes in bytes.</p>
 			</td>
 		</tr>
 		<tr>
@@ -162,12 +162,12 @@ by <code>NodeFrame</code>.</p>
 		</tr>
 		<tr>
 				<td class="name">
-					<strong>readbackBuffers</strong>
+					<strong>indirectStorageAttributesSize</strong>
 						<br>
 <span class="param-type">number</span>
 				</td>
 			<td class="description last">
-				<p>The number of active readback buffers.</p>
+				<p>The memory size of active indirect storage attributes in bytes.</p>
 			</td>
 		</tr>
 		<tr>
@@ -182,52 +182,52 @@ by <code>NodeFrame</code>.</p>
 		</tr>
 		<tr>
 				<td class="name">
-					<strong>renderTargets</strong>
+					<strong>programsSize</strong>
 						<br>
 <span class="param-type">number</span>
 				</td>
 			<td class="description last">
-				<p>The number of active renderTargets.</p>
+				<p>The memory size of active programs in bytes.</p>
 			</td>
 		</tr>
 		<tr>
 				<td class="name">
-					<strong>total</strong>
+					<strong>readbackBuffers</strong>
 						<br>
 <span class="param-type">number</span>
 				</td>
 			<td class="description last">
-				<p>The total memory size in bytes.</p>
+				<p>The number of active readback buffers.</p>
 			</td>
 		</tr>
 		<tr>
 				<td class="name">
-					<strong>texturesSize</strong>
+					<strong>readbackBuffersSize</strong>
 						<br>
 <span class="param-type">number</span>
 				</td>
 			<td class="description last">
-				<p>The memory size of active textures in bytes.</p>
+				<p>The memory size of active readback buffers in bytes.</p>
 			</td>
 		</tr>
 		<tr>
 				<td class="name">
-					<strong>attributesSize</strong>
+					<strong>renderTargets</strong>
 						<br>
 <span class="param-type">number</span>
 				</td>
 			<td class="description last">
-				<p>The memory size of active attributes in bytes.</p>
+				<p>The number of active renderTargets.</p>
 			</td>
 		</tr>
 		<tr>
 				<td class="name">
-					<strong>indexAttributesSize</strong>
+					<strong>storageAttributes</strong>
 						<br>
 <span class="param-type">number</span>
 				</td>
 			<td class="description last">
-				<p>The memory size of active index attributes in bytes.</p>
+				<p>The number of active storage attributes.</p>
 			</td>
 		</tr>
 		<tr>
@@ -242,32 +242,52 @@ by <code>NodeFrame</code>.</p>
 		</tr>
 		<tr>
 				<td class="name">
-					<strong>indirectStorageAttributesSize</strong>
+					<strong>textures</strong>
 						<br>
 <span class="param-type">number</span>
 				</td>
 			<td class="description last">
-				<p>The memory size of active indirect storage attributes in bytes.</p>
+				<p>The number of active textures.</p>
 			</td>
 		</tr>
 		<tr>
 				<td class="name">
-					<strong>readbackBuffersSize</strong>
+					<strong>texturesSize</strong>
 						<br>
 <span class="param-type">number</span>
 				</td>
 			<td class="description last">
-				<p>The memory size of active readback buffers in bytes.</p>
+				<p>The memory size of active textures in bytes.</p>
 			</td>
 		</tr>
 		<tr>
 				<td class="name">
-					<strong>programsSize</strong>
+					<strong>uniformBuffers</strong>
 						<br>
 <span class="param-type">number</span>
 				</td>
 			<td class="description last">
-				<p>The memory size of active programs in bytes.</p>
+				<p>The number of active uniform buffers.</p>
+			</td>
+		</tr>
+		<tr>
+				<td class="name">
+					<strong>uniformBuffersSize</strong>
+						<br>
+<span class="param-type">number</span>
+				</td>
+			<td class="description last">
+				<p>The memory size of active uniform buffers in bytes.</p>
+			</td>
+		</tr>
+		<tr>
+				<td class="name">
+					<strong>total</strong>
+						<br>
+<span class="param-type">number</span>
+				</td>
+			<td class="description last">
+				<p>The total memory size in bytes.</p>
 			</td>
 		</tr>
 	</tbody>
@@ -479,6 +499,24 @@ by <code>NodeFrame</code>.</p>
 							</tbody>
 						</table>
 					</div>
+					<h3 class="name name-method" id="createUniformBuffer" translate="no">.<a href="#createUniformBuffer">createUniformBuffer</a><span class="signature">( uniformBuffer : <span class="param-type"><a href="UniformBuffer.html">UniformBuffer</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Tracks a uniform buffer memory explicitly.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">uniformBuffer</strong>
+									</td>
+									<td class="description last">
+										<p>The uniform buffer to track.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
 					<h3 class="name name-method" id="destroyAttribute" translate="no">.<a href="#destroyAttribute">destroyAttribute</a><span class="signature">( attribute : <span class="param-type"><a href="BufferAttribute.html">BufferAttribute</a></span> )</span> </h3>
 					<div class="method">
 						<div class="description">
@@ -549,6 +587,24 @@ by <code>NodeFrame</code>.</p>
 							</tbody>
 						</table>
 					</div>
+					<h3 class="name name-method" id="destroyUniformBuffer" translate="no">.<a href="#destroyUniformBuffer">destroyUniformBuffer</a><span class="signature">( uniformBuffer : <span class="param-type"><a href="UniformBuffer.html">UniformBuffer</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Tracks a uniform buffer memory explicitly.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">uniformBuffer</strong>
+									</td>
+									<td class="description last">
+										<p>The uniform buffer to track.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
 					<h3 class="name name-method" id="dispose" translate="no">.<a href="#dispose">dispose</a><span class="signature">()</span> </h3>
 					<div class="method">
 						<div class="description">

+ 52 - 26
docs/pages/Info.html.md

@@ -51,90 +51,100 @@ Default is `0`.
 
 Memory related metrics.
 
-**geometries**  
+**attributes**  
 number
 
-The number of active geometries.
+The number of active attributes.
 
-**textures**  
+**attributesSize**  
 number
 
-The number of active textures.
+The memory size of active attributes in bytes.
 
-**attributes**  
+**geometries**  
 number
 
-The number of active attributes.
+The number of active geometries.
 
 **indexAttributes**  
 number
 
 The number of active index attributes.
 
-**storageAttributes**  
+**indexAttributesSize**  
 number
 
-The number of active storage attributes.
+The memory size of active index attributes in bytes.
 
 **indirectStorageAttributes**  
 number
 
 The number of active indirect storage attributes.
 
-**readbackBuffers**  
+**indirectStorageAttributesSize**  
 number
 
-The number of active readback buffers.
+The memory size of active indirect storage attributes in bytes.
 
 **programs**  
 number
 
 The number of active programs.
 
-**renderTargets**  
+**programsSize**  
 number
 
-The number of active renderTargets.
+The memory size of active programs in bytes.
 
-**total**  
+**readbackBuffers**  
 number
 
-The total memory size in bytes.
+The number of active readback buffers.
 
-**texturesSize**  
+**readbackBuffersSize**  
 number
 
-The memory size of active textures in bytes.
+The memory size of active readback buffers in bytes.
 
-**attributesSize**  
+**renderTargets**  
 number
 
-The memory size of active attributes in bytes.
+The number of active renderTargets.
 
-**indexAttributesSize**  
+**storageAttributes**  
 number
 
-The memory size of active index attributes in bytes.
+The number of active storage attributes.
 
 **storageAttributesSize**  
 number
 
 The memory size of active storage attributes in bytes.
 
-**indirectStorageAttributesSize**  
+**textures**  
 number
 
-The memory size of active indirect storage attributes in bytes.
+The number of active textures.
 
-**readbackBuffersSize**  
+**texturesSize**  
 number
 
-The memory size of active readback buffers in bytes.
+The memory size of active textures in bytes.
 
-**programsSize**  
+**uniformBuffers**  
 number
 
-The memory size of active programs in bytes.
+The number of active uniform buffers.
+
+**uniformBuffersSize**  
+number
+
+The memory size of active uniform buffers in bytes.
+
+**total**  
+number
+
+The total memory size in bytes.
 
 ### .render : Object (readonly)
 
@@ -231,6 +241,14 @@ Tracks texture memory explicitly, updating counts and byte tracking.
 
 **texture**
 
+### .createUniformBuffer( uniformBuffer : UniformBuffer )
+
+Tracks a uniform buffer memory explicitly.
+
+**uniformBuffer**
+
+The uniform buffer to track.
+
 ### .destroyAttribute( attribute : BufferAttribute )
 
 Tracks attribute memory explicitly, updating counts and byte tracking.
@@ -259,6 +277,14 @@ Tracks texture memory explicitly, updating counts and byte tracking.
 
 **texture**
 
+### .destroyUniformBuffer( uniformBuffer : UniformBuffer )
+
+Tracks a uniform buffer memory explicitly.
+
+**uniformBuffer**
+
+The uniform buffer to track.
+
 ### .dispose()
 
 Performs a complete reset of the object.

+ 0 - 209
docs/pages/InstanceNode.html

@@ -1,209 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<meta charset="utf-8">
-	<title>InstanceNode - Three.js Docs</title>
-	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
-	<script src="../scripts/highlight.min.js"></script>
-	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
-	<link type="text/css" rel="stylesheet" href="../styles/page.css">
-</head>
-<body>
-		<p class="inheritance" translate="no"><a href="EventDispatcher.html">EventDispatcher</a> → <a href="Node.html">Node</a> → </p>
-	<h1 translate="no">InstanceNode</h1>
-		<section>
-			<header>
-				<div class="class-description"><p>This node implements the vertex shader logic which is required
-when rendering 3D objects via instancing. The code makes sure
-vertex positions, normals and colors can be modified via instanced
-data.</p></div>
-			</header>
-			<article>
-				<div class="container-overview">
-					<h2>Constructor</h2>
-					<h3 class="name name-method" id="InstanceNode" translate="no">new <a href="#InstanceNode">InstanceNode</a><span class="signature">( count : <span class="param-type">number</span>, instanceMatrix : <span class="param-type"><a href="InstancedBufferAttribute.html">InstancedBufferAttribute</a> | <a href="StorageInstancedBufferAttribute.html">StorageInstancedBufferAttribute</a></span>, instanceColor : <span class="param-type"><a href="InstancedBufferAttribute.html">InstancedBufferAttribute</a> | <a href="StorageInstancedBufferAttribute.html">StorageInstancedBufferAttribute</a></span> )</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Constructs a new instance node.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">count</strong>
-									</td>
-									<td class="description last">
-										<p>The number of instances.</p>
-									</td>
-								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">instanceMatrix</strong>
-									</td>
-									<td class="description last">
-										<p>Instanced buffer attribute representing the instance transformations.</p>
-									</td>
-								</tr>
-								<tr>
-									<td class="name">
-										<strong translate="no">instanceColor</strong>
-									</td>
-									<td class="description last">
-										<p>Instanced buffer attribute representing the instance colors.</p>
-										<p>Default is <code>null</code>.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-					</div>
-				</div>
-				<h2 class="subsection-title">Properties</h2>
-				<div class="member">
-					<h3 class="name" id="buffer" translate="no">.<a href="#buffer">buffer</a><span class="type-signature"> : <a href="InstancedInterleavedBuffer.html">InstancedInterleavedBuffer</a></span> </h3>
-					<div class="description">
-						<p>A reference to a buffer that is used by <code>instanceMatrixNode</code>.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="bufferColor" translate="no">.<a href="#bufferColor">bufferColor</a><span class="type-signature"> : <a href="InstancedBufferAttribute.html">InstancedBufferAttribute</a></span> </h3>
-					<div class="description">
-						<p>A reference to a buffer that is used by <code>instanceColorNode</code>.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="count" translate="no">.<a href="#count">count</a><span class="type-signature"> : number</span> </h3>
-					<div class="description">
-						<p>The number of instances.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="instanceColor" translate="no">.<a href="#instanceColor">instanceColor</a><span class="type-signature"> : <a href="InstancedBufferAttribute.html">InstancedBufferAttribute</a></span> </h3>
-					<div class="description">
-						<p>Instanced buffer attribute representing the color of instances.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="instanceColorNode" translate="no">.<a href="#instanceColorNode">instanceColorNode</a><span class="type-signature"> : <a href="Node.html">Node</a></span> </h3>
-					<div class="description">
-						<p>The node that represents the instance color data.</p>
-						<p>Default is <code>null</code>.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="instanceMatrix" translate="no">.<a href="#instanceMatrix">instanceMatrix</a><span class="type-signature"> : <a href="InstancedBufferAttribute.html">InstancedBufferAttribute</a></span> </h3>
-					<div class="description">
-						<p>Instanced buffer attribute representing the transformation of instances.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="instanceMatrixNode" translate="no">.<a href="#instanceMatrixNode">instanceMatrixNode</a><span class="type-signature"> : <a href="Node.html">Node</a></span> </h3>
-					<div class="description">
-						<p>The node that represents the instance matrix data.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="isStorageColor" translate="no">.<a href="#isStorageColor">isStorageColor</a><span class="type-signature"> : boolean</span> </h3>
-					<div class="description">
-						<p>Tracks whether the color data is provided via a storage buffer.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="isStorageMatrix" translate="no">.<a href="#isStorageMatrix">isStorageMatrix</a><span class="type-signature"> : boolean</span> </h3>
-					<div class="description">
-						<p>Tracks whether the matrix data is provided via a storage buffer.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="previousInstanceMatrixNode" translate="no">.<a href="#previousInstanceMatrixNode">previousInstanceMatrixNode</a><span class="type-signature"> : <a href="Node.html">Node</a></span> </h3>
-					<div class="description">
-						<p>The previous instance matrices. Required for computing motion vectors.</p>
-						<p>Default is <code>null</code>.</p>
-					</div>
-				</div>
-				<div class="member">
-					<h3 class="name" id="updateType" translate="no">.<a href="#updateType">updateType</a><span class="type-signature"> : string</span> </h3>
-					<div class="description">
-						<p>The update type is set to <code>frame</code> since an update
-of instanced buffer data must be checked per frame.</p>
-						<p>Default is <code>'frame'</code>.</p>
-					</div>
-						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#updateType">Node#updateType</a></dt>
-						</dl>
-				</div>
-				<h2 class="subsection-title">Methods</h2>
-					<h3 class="name name-method" id="getPreviousInstancedPosition" translate="no">.<a href="#getPreviousInstancedPosition">getPreviousInstancedPosition</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;vec3></span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Computes the transformed/instanced vertex position of the previous frame.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">builder</strong>
-									</td>
-									<td class="description last">
-										<p>The current node builder.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-						<dl class="details">
-							<dt class="tag-returns"><strong>Returns:</strong> The instanced position from the previous frame.</dt>
-						</dl>
-					</div>
-					<h3 class="name name-method" id="setup" translate="no">.<a href="#setup">setup</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Setups the internal buffers and nodes and assigns the transformed vertex data
-to predefined node variables for accumulation. That follows the same patterns
-like with morph and skinning nodes.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">builder</strong>
-									</td>
-									<td class="description last">
-										<p>The current node builder.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#setup">Node#setup</a></dt>
-						</dl>
-					</div>
-					<h3 class="name name-method" id="update" translate="no">.<a href="#update">update</a><span class="signature">( frame : <span class="param-type"><a href="NodeFrame.html">NodeFrame</a></span> )</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Checks if the internal buffers require an update.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">frame</strong>
-									</td>
-									<td class="description last">
-										<p>The current node frame.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-						<dl class="details">
-							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#update">Node#update</a></dt>
-						</dl>
-					</div>
-				<h2 class="subsection-title">Source</h2>
-				<p>
-					<a href="https://github.com/mrdoob/three.js/blob/master/src/nodes/accessors/InstanceNode.js" translate="no" target="_blank" rel="noopener">src/nodes/accessors/InstanceNode.js</a>
-				</p>
-			</article>
-		</section>
-<script src="../scripts/linenumber.js"></script>
-<script src="../scripts/page.js"></script>
-</body>
-</html>

+ 0 - 115
docs/pages/InstanceNode.html.md

@@ -1,115 +0,0 @@
-*Inheritance: EventDispatcher → Node →*
-
-# InstanceNode
-
-This node implements the vertex shader logic which is required when rendering 3D objects via instancing. The code makes sure vertex positions, normals and colors can be modified via instanced data.
-
-## Constructor
-
-### new InstanceNode( count : number, instanceMatrix : InstancedBufferAttribute | StorageInstancedBufferAttribute, instanceColor : InstancedBufferAttribute | StorageInstancedBufferAttribute )
-
-Constructs a new instance node.
-
-**count**
-
-The number of instances.
-
-**instanceMatrix**
-
-Instanced buffer attribute representing the instance transformations.
-
-**instanceColor**
-
-Instanced buffer attribute representing the instance colors.
-
-Default is `null`.
-
-## Properties
-
-### .buffer : InstancedInterleavedBuffer
-
-A reference to a buffer that is used by `instanceMatrixNode`.
-
-### .bufferColor : InstancedBufferAttribute
-
-A reference to a buffer that is used by `instanceColorNode`.
-
-### .count : number
-
-The number of instances.
-
-### .instanceColor : InstancedBufferAttribute
-
-Instanced buffer attribute representing the color of instances.
-
-### .instanceColorNode : Node
-
-The node that represents the instance color data.
-
-Default is `null`.
-
-### .instanceMatrix : InstancedBufferAttribute
-
-Instanced buffer attribute representing the transformation of instances.
-
-### .instanceMatrixNode : Node
-
-The node that represents the instance matrix data.
-
-### .isStorageColor : boolean
-
-Tracks whether the color data is provided via a storage buffer.
-
-### .isStorageMatrix : boolean
-
-Tracks whether the matrix data is provided via a storage buffer.
-
-### .previousInstanceMatrixNode : Node
-
-The previous instance matrices. Required for computing motion vectors.
-
-Default is `null`.
-
-### .updateType : string
-
-The update type is set to `frame` since an update of instanced buffer data must be checked per frame.
-
-Default is `'frame'`.
-
-**Overrides:** [Node#updateType](Node.html#updateType)
-
-## Methods
-
-### .getPreviousInstancedPosition( builder : NodeBuilder ) : Node.<vec3>
-
-Computes the transformed/instanced vertex position of the previous frame.
-
-**builder**
-
-The current node builder.
-
-**Returns:** The instanced position from the previous frame.
-
-### .setup( builder : NodeBuilder )
-
-Setups the internal buffers and nodes and assigns the transformed vertex data to predefined node variables for accumulation. That follows the same patterns like with morph and skinning nodes.
-
-**builder**
-
-The current node builder.
-
-**Overrides:** [Node#setup](Node.html#setup)
-
-### .update( frame : NodeFrame )
-
-Checks if the internal buffers require an update.
-
-**frame**
-
-The current node frame.
-
-**Overrides:** [Node#update](Node.html#update)
-
-## Source
-
-[src/nodes/accessors/InstanceNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/accessors/InstanceNode.js)

+ 0 - 8
docs/pages/InstancedMesh.html

@@ -114,14 +114,6 @@ via <a href="InstancedMesh.html#setMorphAt">InstancedMesh#setMorphAt</a>.</p>
 						<p>Default is <code>null</code>.</p>
 					</div>
 				</div>
-				<div class="member">
-					<h3 class="name" id="previousInstanceMatrix" translate="no">.<a href="#previousInstanceMatrix">previousInstanceMatrix</a><span class="type-signature"> : <a href="InstancedBufferAttribute.html">InstancedBufferAttribute</a></span> </h3>
-					<div class="description">
-						<p>Represents the local transformation of all instances of the previous frame.
-Required for computing velocity. Maintained in <a href="InstanceNode.html">InstanceNode</a>.</p>
-						<p>Default is <code>null</code>.</p>
-					</div>
-				</div>
 				<h2 class="subsection-title">Methods</h2>
 					<h3 class="name name-method" id="computeBoundingBox" translate="no">.<a href="#computeBoundingBox">computeBoundingBox</a><span class="signature">()</span> </h3>
 					<div class="method">

+ 0 - 6
docs/pages/InstancedMesh.html.md

@@ -64,12 +64,6 @@ Represents the morph target weights of all instances. You have to set its [Textu
 
 Default is `null`.
 
-### .previousInstanceMatrix : InstancedBufferAttribute
-
-Represents the local transformation of all instances of the previous frame. Required for computing velocity. Maintained in [InstanceNode](InstanceNode.html).
-
-Default is `null`.
-
 ## Methods
 
 ### .computeBoundingBox()

+ 0 - 57
docs/pages/InstancedMeshNode.html

@@ -1,57 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<meta charset="utf-8">
-	<title>InstancedMeshNode - Three.js Docs</title>
-	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
-	<script src="../scripts/highlight.min.js"></script>
-	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
-	<link type="text/css" rel="stylesheet" href="../styles/page.css">
-</head>
-<body>
-		<p class="inheritance" translate="no"><a href="EventDispatcher.html">EventDispatcher</a> → <a href="Node.html">Node</a> → <a href="InstanceNode.html">InstanceNode</a> → </p>
-	<h1 translate="no">InstancedMeshNode</h1>
-		<section>
-			<header>
-				<div class="class-description"><p>This is a special version of <code>InstanceNode</code> which requires the usage of <a href="InstancedMesh.html">InstancedMesh</a>.
-It allows an easier setup of the instance node.</p></div>
-			</header>
-			<article>
-				<div class="container-overview">
-					<h2>Constructor</h2>
-					<h3 class="name name-method" id="InstancedMeshNode" translate="no">new <a href="#InstancedMeshNode">InstancedMeshNode</a><span class="signature">( instancedMesh : <span class="param-type"><a href="InstancedMesh.html">InstancedMesh</a></span> )</span> </h3>
-					<div class="method">
-						<div class="description">
-							<p>Constructs a new instanced mesh node.</p>
-						</div>
-						<table class="params">
-							<tbody>
-								<tr>
-									<td class="name">
-										<strong translate="no">instancedMesh</strong>
-									</td>
-									<td class="description last">
-										<p>The instanced mesh.</p>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-					</div>
-				</div>
-				<h2 class="subsection-title">Properties</h2>
-				<div class="member">
-					<h3 class="name" id="instancedMesh" translate="no">.<a href="#instancedMesh">instancedMesh</a><span class="type-signature"> : <a href="InstancedMesh.html">InstancedMesh</a></span> </h3>
-					<div class="description">
-						<p>A reference to the instanced mesh.</p>
-					</div>
-				</div>
-				<h2 class="subsection-title">Source</h2>
-				<p>
-					<a href="https://github.com/mrdoob/three.js/blob/master/src/nodes/accessors/InstancedMeshNode.js" translate="no" target="_blank" rel="noopener">src/nodes/accessors/InstancedMeshNode.js</a>
-				</p>
-			</article>
-		</section>
-<script src="../scripts/linenumber.js"></script>
-<script src="../scripts/page.js"></script>
-</body>
-</html>

+ 0 - 25
docs/pages/InstancedMeshNode.html.md

@@ -1,25 +0,0 @@
-*Inheritance: EventDispatcher → Node → InstanceNode →*
-
-# InstancedMeshNode
-
-This is a special version of `InstanceNode` which requires the usage of [InstancedMesh](InstancedMesh.html). It allows an easier setup of the instance node.
-
-## Constructor
-
-### new InstancedMeshNode( instancedMesh : InstancedMesh )
-
-Constructs a new instanced mesh node.
-
-**instancedMesh**
-
-The instanced mesh.
-
-## Properties
-
-### .instancedMesh : InstancedMesh
-
-A reference to the instanced mesh.
-
-## Source
-
-[src/nodes/accessors/InstancedMeshNode.js](https://github.com/mrdoob/three.js/blob/master/src/nodes/accessors/InstancedMeshNode.js)

+ 2 - 2
docs/pages/KTX2Loader.html

@@ -201,8 +201,8 @@ to the <code>onLoad()</code> callback.</p>
 					<h3 class="name name-method" id="setTranscoderPath" translate="no">.<a href="#setTranscoderPath">setTranscoderPath</a><span class="signature">( path : <span class="param-type">string</span> )</span><span class="type-signature"> : <a href="KTX2Loader.html">KTX2Loader</a></span> </h3>
 					<div class="method">
 						<div class="description">
-							<p>Sets the transcoder path.</p>
-<p>The WASM transcoder and JS wrapper are available from the <code>examples/jsm/libs/basis</code> directory.</p>
+							<p>Sets the transcoder path to optionally set the decoder load path from a CDN.</p>
+<p>By default The WASM transcoder and JS wrapper are loaded from the <code>examples/jsm/libs/basis</code> directory.</p>
 						</div>
 						<table class="params">
 							<tbody>

+ 2 - 2
docs/pages/KTX2Loader.html.md

@@ -115,9 +115,9 @@ Executed when errors occur.
 
 ### .setTranscoderPath( path : string ) : KTX2Loader
 
-Sets the transcoder path.
+Sets the transcoder path to optionally set the decoder load path from a CDN.
 
-The WASM transcoder and JS wrapper are available from the `examples/jsm/libs/basis` directory.
+By default The WASM transcoder and JS wrapper are loaded from the `examples/jsm/libs/basis` directory.
 
 **path**
 

+ 3 - 0
docs/pages/LWOLoader.html

@@ -50,6 +50,9 @@ scene.add( mesh );
 								</tr>
 							</tbody>
 						</table>
+						<dl class="details">
+							<dt class="important tag-deprecated"><strong>Deprecated:</strong> since r185.</dt>
+						</dl>
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>

+ 2 - 0
docs/pages/LWOLoader.html.md

@@ -38,6 +38,8 @@ Constructs a new LWO loader.
 
 The loading manager.
 
+**Deprecated:** since r185.
+
 ## Methods
 
 ### .load( url : string, onLoad : function, onProgress : onProgressCallback, onError : onErrorCallback )

+ 15 - 1
docs/pages/LightProbeGrid.html

@@ -14,6 +14,8 @@
 			<header>
 				<div class="class-description"><p>A 3D grid of L2 Spherical Harmonic irradiance probes that provides
 position-dependent diffuse global illumination.</p>
+<p>Note that this class can only be used with <a href="WebGLRenderer.html">WebGLRenderer</a>.
+A version for <a href="WebGPURenderer.html">WebGPURenderer</a> will be added at a later point.</p>
 <p>All seven packed SH sub-volumes are stored in a <strong>single</strong> RGBA
 <code>WebGL3DRenderTarget</code> using a texture-atlas layout along the Z axis.
 Each sub-volume occupies <code>( nz + 2 )</code> atlas slices: one padding slice at
@@ -152,7 +154,10 @@ by <a href="LightProbeGrid.html#bake">LightProbeGrid#bake</a>.</p>
 					<div class="method">
 						<div class="description">
 							<p>Bakes all probes by rendering cubemaps at each probe position
-and projecting to L2 SH. Fully GPU-resident with zero CPU readback.</p>
+and projecting to L2 SH. Optionally iterates additional passes to
+capture indirect bounces — each extra pass samples the previous pass's
+atlas as indirect light, so a grid added to the scene before baking
+accumulates one bounce per extra pass.</p>
 						</div>
 						<table class="params">
 							<tbody>
@@ -207,6 +212,15 @@ and projecting to L2 SH. Fully GPU-resident with zero CPU readback.</p>
 										<p>Default is <code>100</code>.</p>
 									</td>
 								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">bounces</strong>
+									</td>
+									<td class="description last">
+										<p>Additional bounce passes after the initial direct pass.</p>
+										<p>Default is <code>0</code>.</p>
+									</td>
+								</tr>
 							</tbody>
 						</table>
 									</td>

+ 9 - 1
docs/pages/LightProbeGrid.html.md

@@ -2,6 +2,8 @@
 
 A 3D grid of L2 Spherical Harmonic irradiance probes that provides position-dependent diffuse global illumination.
 
+Note that this class can only be used with [WebGLRenderer](WebGLRenderer.html). A version for [WebGPURenderer](WebGPURenderer.html) will be added at a later point.
+
 All seven packed SH sub-volumes are stored in a **single** RGBA `WebGL3DRenderTarget` using a texture-atlas layout along the Z axis. Each sub-volume occupies `( nz + 2 )` atlas slices: one padding slice at each end (a copy of the nearest edge data slice) to prevent color bleeding when the hardware trilinear filter reads across a sub-volume boundary.
 
 Atlas layout (nz = resolution.z, PADDING = 1):
@@ -105,7 +107,7 @@ The full width of the volume along X.
 
 ### .bake( renderer : WebGLRenderer, scene : Scene, options : Object )
 
-Bakes all probes by rendering cubemaps at each probe position and projecting to L2 SH. Fully GPU-resident with zero CPU readback.
+Bakes all probes by rendering cubemaps at each probe position and projecting to L2 SH. Optionally iterates additional passes to capture indirect bounces — each extra pass samples the previous pass's atlas as indirect light, so a grid added to the scene before baking accumulates one bounce per extra pass.
 
 **renderer**
 
@@ -137,6 +139,12 @@ Far plane for the cube camera.
 
 Default is `100`.
 
+**bounces**
+
+Additional bounce passes after the initial direct pass.
+
+Default is `0`.
+
 ### .dispose()
 
 Frees GPU resources.

+ 1 - 1
docs/pages/LightProbeGridHelper.html

@@ -14,7 +14,7 @@
 		<section>
 			<header>
 				<div class="class-description"><p>Visualizes an <a href="LightProbeGrid.html">LightProbeGrid</a> by rendering a sphere at each
-probe position, shaded with the probe's L1 spherical harmonics.</p>
+probe position, shaded with the probe's L2 spherical harmonics.</p>
 <p>Uses a single <code>InstancedMesh</code> draw call for all probes.</p></div>
 				<h2>Code Example</h2>
 				<div translate="no"><pre><code class="language-js">const helper = new LightProbeGridHelper( probes );

+ 1 - 1
docs/pages/LightProbeGridHelper.html.md

@@ -2,7 +2,7 @@
 
 # LightProbeGridHelper
 
-Visualizes an [LightProbeGrid](LightProbeGrid.html) by rendering a sphere at each probe position, shaded with the probe's L1 spherical harmonics.
+Visualizes an [LightProbeGrid](LightProbeGrid.html) by rendering a sphere at each probe position, shaded with the probe's L2 spherical harmonics.
 
 Uses a single `InstancedMesh` draw call for all probes.
 

+ 12 - 1
docs/pages/LightingContextNode.html

@@ -20,7 +20,7 @@ by adding lighting specific context data. It represents the runtime context of
 			<article>
 				<div class="container-overview">
 					<h2>Constructor</h2>
-					<h3 class="name name-method" id="LightingContextNode" translate="no">new <a href="#LightingContextNode">LightingContextNode</a><span class="signature">( lightsNode : <span class="param-type"><a href="LightsNode.html">LightsNode</a></span>, lightingModel : <span class="param-type"><a href="LightingModel.html">LightingModel</a></span>, backdropNode : <span class="param-type"><a href="Node.html">Node</a>.&lt;vec3></span>, backdropAlphaNode : <span class="param-type"><a href="Node.html">Node</a>.&lt;float></span> )</span> </h3>
+					<h3 class="name name-method" id="LightingContextNode" translate="no">new <a href="#LightingContextNode">LightingContextNode</a><span class="signature">( lightsNode : <span class="param-type"><a href="LightsNode.html">LightsNode</a></span>, lightingModel : <span class="param-type"><a href="LightingModel.html">LightingModel</a></span>, materialLightings : <span class="param-type">Array.&lt;<a href="LightingNode.html">LightingNode</a>></span>, backdropNode : <span class="param-type"><a href="Node.html">Node</a>.&lt;vec3></span>, backdropAlphaNode : <span class="param-type"><a href="Node.html">Node</a>.&lt;float></span> )</span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>Constructs a new lighting context node.</p>
@@ -44,6 +44,14 @@ by adding lighting specific context data. It represents the runtime context of
 										<p>Default is <code>null</code>.</p>
 									</td>
 								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">materialLightings</strong>
+									</td>
+									<td class="description last">
+										<p>The material lightings nodes.</p>
+									</td>
+								</tr>
 								<tr>
 									<td class="name">
 										<strong translate="no">backdropNode</strong>
@@ -88,6 +96,9 @@ by adding lighting specific context data. It represents the runtime context of
 						<p>Default is <code>null</code>.</p>
 					</div>
 				</div>
+				<div class="member">
+					<h3 class="name" id="materialLightings" translate="no">.<a href="#materialLightings">materialLightings</a><span class="type-signature"> : Array.&lt;<a href="LightingNode.html">LightingNode</a>></span> </h3>
+				</div>
 				<h2 class="subsection-title">Methods</h2>
 					<h3 class="name name-method" id="getContext" translate="no">.<a href="#getContext">getContext</a><span class="signature">()</span><span class="type-signature"> : Object</span> </h3>
 					<div class="method">

+ 7 - 1
docs/pages/LightingContextNode.html.md

@@ -6,7 +6,7 @@
 
 ## Constructor
 
-### new LightingContextNode( lightsNode : LightsNode, lightingModel : LightingModel, backdropNode : Node.<vec3>, backdropAlphaNode : Node.<float> )
+### new LightingContextNode( lightsNode : LightsNode, lightingModel : LightingModel, materialLightings : Array.<LightingNode>, backdropNode : Node.<vec3>, backdropAlphaNode : Node.<float> )
 
 Constructs a new lighting context node.
 
@@ -20,6 +20,10 @@ The current lighting model.
 
 Default is `null`.
 
+**materialLightings**
+
+The material lightings nodes.
+
 **backdropNode**
 
 A backdrop node.
@@ -52,6 +56,8 @@ The current lighting model.
 
 Default is `null`.
 
+### .materialLightings : Array.<LightingNode>
+
 ## Methods
 
 ### .getContext() : Object

+ 60 - 1
docs/pages/LightsNode.html

@@ -63,6 +63,28 @@ light in a given lighting context.</p></div>
 					</div>
 				</div>
 				<h2 class="subsection-title">Methods</h2>
+					<h3 class="name name-method" id="analyze" translate="no">.<a href="#analyze">analyze</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Analyzes the node's dependencies by building all nested light nodes
+and the output node.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">builder</strong>
+									</td>
+									<td class="description last">
+										<p>A reference to the current node builder.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+						<dl class="details">
+							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="Node.html#analyze">Node#analyze</a></dt>
+						</dl>
+					</div>
 					<h3 class="name name-method" id="customCacheKey" translate="no">.<a href="#customCacheKey">customCacheKey</a><span class="signature">()</span><span class="type-signature"> : number</span> </h3>
 					<div class="method">
 						<div class="description">
@@ -190,6 +212,40 @@ and evaluating the lighting model the outgoing light is computed.</p>
 							</tbody>
 						</table>
 					</div>
+					<h3 class="name name-method" id="setupDirectRectAreaLight" translate="no">.<a href="#setupDirectRectAreaLight">setupDirectRectAreaLight</a><span class="signature">( builder : <span class="param-type">Object</span>, lightNode : <span class="param-type">Object</span>, lightData : <span class="param-type">Object</span> )</span> </h3>
+					<div class="method">
+						<div class="description">
+							<p>Sets up a direct rect area light in the lighting model.</p>
+						</div>
+						<table class="params">
+							<tbody>
+								<tr>
+									<td class="name">
+										<strong translate="no">builder</strong>
+									</td>
+									<td class="description last">
+										<p>The builder object containing the context and stack.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">lightNode</strong>
+									</td>
+									<td class="description last">
+										<p>The light node.</p>
+									</td>
+								</tr>
+								<tr>
+									<td class="name">
+										<strong translate="no">lightData</strong>
+									</td>
+									<td class="description last">
+										<p>The light object containing color and area light properties.</p>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
 					<h3 class="name name-method" id="setupLights" translate="no">.<a href="#setupLights">setupLights</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span>, lightNodes : <span class="param-type">Array.&lt;<a href="LightingNode.html">LightingNode</a>></span> )</span> </h3>
 					<div class="method">
 						<div class="description">
@@ -217,7 +273,7 @@ light nodes.</p>
 							</tbody>
 						</table>
 					</div>
-					<h3 class="name name-method" id="setupLightsNode" translate="no">.<a href="#setupLightsNode">setupLightsNode</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span> </h3>
+					<h3 class="name name-method" id="setupLightsNode" translate="no">.<a href="#setupLightsNode">setupLightsNode</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : Array.&lt;<a href="LightingNode.html">LightingNode</a>></span> </h3>
 					<div class="method">
 						<div class="description">
 							<p>Creates lighting nodes for each scene light. This makes it possible to further
@@ -235,6 +291,9 @@ process lights in the node system.</p>
 								</tr>
 							</tbody>
 						</table>
+						<dl class="details">
+							<dt class="tag-returns"><strong>Returns:</strong> The array of lighting nodes.</dt>
+						</dl>
 					</div>
 				<h2 class="subsection-title">Source</h2>
 				<p>

Некоторые файлы не были показаны из-за большого количества измененных файлов

粤ICP备19079148号